user avatar

About

As a Ms.Sc. in for Chemistry & Physics I started out working in the field of environmental analysis as a laboratory technician.

diff --git a/Search/index.html b/Search/index.html index 9184c5d59e..2dbf8e1895 100644 --- a/Search/index.html +++ b/Search/index.html @@ -23,8 +23,8 @@ - - + +

No Results found.
diff --git a/assets/images/Zabbix_SMART_Monitor_03-ba737b8df4ae689fbee4ae86febfb06a.png b/assets/images/Zabbix_SMART_Monitor_03-ba737b8df4ae689fbee4ae86febfb06a.png new file mode 100644 index 0000000000..e70a1c1bf5 Binary files /dev/null and b/assets/images/Zabbix_SMART_Monitor_03-ba737b8df4ae689fbee4ae86febfb06a.png differ diff --git a/assets/images/Zabbix_SMART_Monitor_04-5284bcfc67558603d17b3c628891854c.png b/assets/images/Zabbix_SMART_Monitor_04-5284bcfc67558603d17b3c628891854c.png new file mode 100644 index 0000000000..8087af981b Binary files /dev/null and b/assets/images/Zabbix_SMART_Monitor_04-5284bcfc67558603d17b3c628891854c.png differ diff --git a/assets/images/Zabbix_Temperature_Check_10-31667a3ce4074abf2bd4e5b5ad4255c1.png b/assets/images/Zabbix_Temperature_Check_10-31667a3ce4074abf2bd4e5b5ad4255c1.png new file mode 100644 index 0000000000..a6539b2c45 Binary files /dev/null and b/assets/images/Zabbix_Temperature_Check_10-31667a3ce4074abf2bd4e5b5ad4255c1.png differ diff --git a/assets/images/Zabbix_Temperature_Check_11-de872d43ce42b4957986a120774bedbe.png b/assets/images/Zabbix_Temperature_Check_11-de872d43ce42b4957986a120774bedbe.png new file mode 100644 index 0000000000..6c0512a48a Binary files /dev/null and b/assets/images/Zabbix_Temperature_Check_11-de872d43ce42b4957986a120774bedbe.png differ diff --git a/assets/images/Zabbix_Temperature_Check_12-bc60a4fccbe7d0b0caa796edcd52dd42.png b/assets/images/Zabbix_Temperature_Check_12-bc60a4fccbe7d0b0caa796edcd52dd42.png new file mode 100644 index 0000000000..8781b4d1ba Binary files /dev/null and b/assets/images/Zabbix_Temperature_Check_12-bc60a4fccbe7d0b0caa796edcd52dd42.png differ diff --git a/assets/images/Zabbix_Temperature_Check_4-87d9b2bac94c1a18bdb6830fdcd8e24e.png b/assets/images/Zabbix_Temperature_Check_4-87d9b2bac94c1a18bdb6830fdcd8e24e.png new file mode 100644 index 0000000000..4126cc995c Binary files /dev/null and b/assets/images/Zabbix_Temperature_Check_4-87d9b2bac94c1a18bdb6830fdcd8e24e.png differ diff --git a/assets/images/Zabbix_Temperature_Check_5-63c1a3238b6167a3fdc289bfdfe47814.png b/assets/images/Zabbix_Temperature_Check_5-63c1a3238b6167a3fdc289bfdfe47814.png new file mode 100644 index 0000000000..7e8654c269 Binary files /dev/null and b/assets/images/Zabbix_Temperature_Check_5-63c1a3238b6167a3fdc289bfdfe47814.png differ diff --git a/assets/images/Zabbix_Temperature_Check_6-6fcb4c9631fbdc7144148f4e6a05dddc.png b/assets/images/Zabbix_Temperature_Check_6-6fcb4c9631fbdc7144148f4e6a05dddc.png new file mode 100644 index 0000000000..08a00803f3 Binary files /dev/null and b/assets/images/Zabbix_Temperature_Check_6-6fcb4c9631fbdc7144148f4e6a05dddc.png differ diff --git a/assets/images/Zabbix_Temperature_Check_7-5e1df46ac70a45e1e24a59aa75101d7e.png b/assets/images/Zabbix_Temperature_Check_7-5e1df46ac70a45e1e24a59aa75101d7e.png new file mode 100644 index 0000000000..0c7d88517e Binary files /dev/null and b/assets/images/Zabbix_Temperature_Check_7-5e1df46ac70a45e1e24a59aa75101d7e.png differ diff --git a/assets/images/Zabbix_Temperature_Check_8-15a96bf838f727952cc26b3ea3c1d96e.png b/assets/images/Zabbix_Temperature_Check_8-15a96bf838f727952cc26b3ea3c1d96e.png new file mode 100644 index 0000000000..d027b483c0 Binary files /dev/null and b/assets/images/Zabbix_Temperature_Check_8-15a96bf838f727952cc26b3ea3c1d96e.png differ diff --git a/assets/images/Zabbix_Temperature_Check_9-edcc328b100bc79e459fc1e106124e99.png b/assets/images/Zabbix_Temperature_Check_9-edcc328b100bc79e459fc1e106124e99.png new file mode 100644 index 0000000000..81ccff9433 Binary files /dev/null and b/assets/images/Zabbix_Temperature_Check_9-edcc328b100bc79e459fc1e106124e99.png differ diff --git a/assets/js/17073d9d.c1669d04.js b/assets/js/17073d9d.c1669d04.js new file mode 100644 index 0000000000..445ae1be05 --- /dev/null +++ b/assets/js/17073d9d.c1669d04.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmikes_dev_notebook=self.webpackChunkmikes_dev_notebook||[]).push([[89321],{424997:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>s,metadata:()=>o,toc:()=>c});var t=n(785893),a=n(603905);const s={sidebar_position:7069,slug:"2024-03-08",title:"Zabbix v6 SMART HDD and CPU Temperature Check",authors:"mpolinowski",tags:["LINUX","Zabbix"]},i=void 0,o={id:"DevOps/Zabbix/2024-03-07--zabbix-v6-hdd-cpu-temp-check/index",title:"Zabbix v6 SMART HDD and CPU Temperature Check",description:"TST, Hong Kong",source:"@site/docs/DevOps/Zabbix/2024-03-07--zabbix-v6-hdd-cpu-temp-check/index.md",sourceDirName:"DevOps/Zabbix/2024-03-07--zabbix-v6-hdd-cpu-temp-check",slug:"/DevOps/Zabbix/2024-03-07--zabbix-v6-hdd-cpu-temp-check/2024-03-08",permalink:"/docs/DevOps/Zabbix/2024-03-07--zabbix-v6-hdd-cpu-temp-check/2024-03-08",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/DevOps/Zabbix/2024-03-07--zabbix-v6-hdd-cpu-temp-check/index.md",tags:[{label:"LINUX",permalink:"/docs/tags/linux"},{label:"Zabbix",permalink:"/docs/tags/zabbix"}],version:"current",sidebarPosition:7069,frontMatter:{sidebar_position:7069,slug:"2024-03-08",title:"Zabbix v6 SMART HDD and CPU Temperature Check",authors:"mpolinowski",tags:["LINUX","Zabbix"]},sidebar:"tutorialSidebar",previous:{title:"Zabbix",permalink:"/docs/category/zabbix"},next:{title:"Zabbix <3 Zimbra",permalink:"/docs/DevOps/Zabbix/2022-07-15-zabbix-for-zimbra/2022-07-15"}},l={},c=[{value:"Install Smartmontools and LM Sensors",id:"install-smartmontools-and-lm-sensors",level:2},{value:"Harddrive Monitoring",id:"harddrive-monitoring",level:3},{value:"Using Smartctl",id:"using-smartctl",level:3},{value:"CPU Temperature",id:"cpu-temperature",level:3},{value:"Zabbix",id:"zabbix",level:2},{value:"Preparing Zabbix-Agent2",id:"preparing-zabbix-agent2",level:3},{value:"Direct CLI Command Execution",id:"direct-cli-command-execution",level:3},{value:"Working with Shell Scripts",id:"working-with-shell-scripts",level:3}];function d(e){const r={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.ah)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.p,{children:(0,t.jsx)(r.img,{alt:"TST, Hong Kong",src:n(856647).Z+"",width:"1500",height:"622"})}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"#install-smartmontools-and-lm-sensors",children:"Install Smartmontools and LM Sensors"}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"#harddrive-monitoring",children:"Harddrive Monitoring"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"#using-smartctl",children:"Using Smartctl"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"#cpu-temperature",children:"CPU Temperature"})}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.a,{href:"#zabbix",children:"Zabbix"}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"#preparing-zabbix-agent2",children:"Preparing Zabbix-Agent2"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"#direct-cli-command-execution",children:"Direct CLI Command Execution"})}),"\n",(0,t.jsx)(r.li,{children:(0,t.jsx)(r.a,{href:"#working-with-shell-scripts",children:"Working with Shell Scripts"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(r.h2,{id:"install-smartmontools-and-lm-sensors",children:"Install Smartmontools and LM Sensors"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"apt install lm-sensors smartmontools\n"})}),"\n",(0,t.jsx)(r.h3,{id:"harddrive-monitoring",children:"Harddrive Monitoring"}),"\n",(0,t.jsx)(r.p,{children:"S.M.A.R.T. (Self-Monitoring, Analysis and Reporting Technology; often written as SMART) is a monitoring system included in computer hard disk drives (HDDs), solid-state drives (SSDs), and eMMC drives"}),"\n",(0,t.jsx)(r.p,{children:"The smartmontools package comes with two utilities, smartctl which you can use to check your hard drives on the command line, and smartd, a daemon that checks your hard disks at a specified interval and logs warnings/errors to the syslog and can also send warnings and errors to a specified email address (usually the admin of the system)."}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"smartctl -v\r\n\r\nsmartctl 7.2 2020-12-30 r5155 [x86_64-linux-5.10.0-11-amd64] (local build)\r\nCopyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org\n"})}),"\n",(0,t.jsx)(r.h3,{id:"using-smartctl",children:"Using Smartctl"}),"\n",(0,t.jsx)(r.p,{children:"Find partition:"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"df -h\r\n\r\nFilesystem Size Used Avail Use% Mounted on\r\ntmpfs 32G 2.9M 32G 1% /run\r\n/dev/mapper/ubuntu--vg--1-ubuntu--lv 438G 81G 338G 20% /\r\ntmpfs 63G 914M 62G 2% /dev/shm\r\ntmpfs 5.0M 0 5.0M 0% /run/lock\r\n/dev/nvme0n1p2 2.0G 304M 1.5G 17% /boot\r\n/dev/nvme0n1p1 1.1G 6.1M 1.1G 1% /boot/efi\r\ntmpfs 13G 4.0K 13G 1% /run/user/1000\n"})}),"\n",(0,t.jsxs)(r.p,{children:["In the case of my test server below we have a virtual machine - that, obviously, does not have access to the underlying HDD hardware ",(0,t.jsx)(r.code,{children:"/dev/sda1"}),":"]}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"smartctl -a /dev/sda\r\nsmartctl 7.2 2020-12-30 r5155 [x86_64-linux-5.15.0-97-generic] (local build)\r\nCopyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org\r\n\r\n=== START OF INFORMATION SECTION ===\r\nModel Family: Western Digital Red\r\nDevice Model: WDC WD10EFRX-68FYTN0\r\nSerial Number: WD-WCC4J4NHYJJ2\r\nLU WWN Device Id: 5 0014ee 269c5648a\r\nFirmware Version: 82.00A82\r\nUser Capacity: 1,000,204,886,016 bytes [1.00 TB]\r\nSector Sizes: 512 bytes logical, 4096 bytes physical\r\nRotation Rate: 5400 rpm\r\nDevice is: In smartctl database [for details use: -P show]\r\nATA Version is: ACS-2 (minor revision not indicated)\r\nSATA Version is: SATA 3.0, 6.0 Gb/s (current: 6.0 Gb/s)\r\nLocal Time is: Sat Mar 9 09:21:06 2024 UTC\r\nSMART support is: Available - device has SMART capability.\r\nSMART support is: Enabled\r\n\r\n=== START OF READ SMART DATA SECTION ===\r\nSMART overall-health self-assessment test result: PASSED\r\n\r\nGeneral SMART Values:\r\nOffline data collection status: (0x00) Offline data collection activity\r\n was never started.\r\n Auto Offline Data Collection: Disabled.\r\nSelf-test execution status: ( 0) The previous self-test routine completed\r\n without error or no self-test has ever \r\n been run.\r\nTotal time to complete Offline \r\ndata collection: (14100) seconds.\r\nOffline data collection\r\ncapabilities: (0x7b) SMART execute Offline immediate.\r\n Auto Offline data collection on/off support.\r\n Suspend Offline collection upon new\r\n command.\r\n Offline surface scan supported.\r\n Self-test supported.\r\n Conveyance Self-test supported.\r\n Selective Self-test supported.\r\nSMART capabilities: (0x0003) Saves SMART data before entering\r\n power-saving mode.\r\n Supports SMART auto save timer.\r\nError logging capability: (0x01) Error logging supported.\r\n General Purpose Logging supported.\r\nShort self-test routine \r\nrecommended polling time: ( 2) minutes.\r\nExtended self-test routine\r\nrecommended polling time: ( 160) minutes.\r\nConveyance self-test routine\r\nrecommended polling time: ( 5) minutes.\r\nSCT capabilities: (0x303d) SCT Status supported.\r\n SCT Error Recovery Control supported.\r\n SCT Feature Control supported.\r\n SCT Data Table supported.\r\n\r\nSMART Attributes Data Structure revision number: 16\r\nVendor Specific SMART Attributes with Thresholds:\r\nID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE\r\n 1 Raw_Read_Error_Rate 0x002f 200 200 051 Pre-fail Always - 0\r\n 3 Spin_Up_Time 0x0027 169 133 021 Pre-fail Always - 2516\r\n 4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 63\r\n 5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0\r\n 7 Seek_Error_Rate 0x002e 200 200 000 Old_age Always - 0\r\n 9 Power_On_Hours 0x0032 075 075 000 Old_age Always - 18640\r\n 10 Spin_Retry_Count 0x0032 100 253 000 Old_age Always - 0\r\n 11 Calibration_Retry_Count 0x0032 100 253 000 Old_age Always - 0\r\n 12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 62\r\n192 Power-Off_Retract_Count 0x0032 200 200 000 Old_age Always - 59\r\n193 Load_Cycle_Count 0x0032 199 199 000 Old_age Always - 5458\r\n194 Temperature_Celsius 0x0022 121 094 000 Old_age Always - 22\r\n196 Reallocated_Event_Count 0x0032 200 200 000 Old_age Always - 0\r\n197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 0\r\n198 Offline_Uncorrectable 0x0030 100 253 000 Old_age Offline - 0\r\n199 UDMA_CRC_Error_Count 0x0032 200 200 000 Old_age Always - 0\r\n200 Multi_Zone_Error_Rate 0x0008 100 253 000 Old_age Offline - 0\r\n\r\nSMART Error Log Version: 1\r\nNo Errors Logged\r\n\r\nSMART Self-test log structure revision number 1\r\nNum Test_Description Status Remaining LifeTime(hours) LBA_of_first_error\r\n# 1 Short offline Completed without error 00% 18594 -\r\n\r\nSMART Selective self-test log data structure revision number 1\r\n SPAN MIN_LBA MAX_LBA CURRENT_TEST_STATUS\r\n 1 0 0 Not_testing\r\n 2 0 0 Not_testing\r\n 3 0 0 Not_testing\r\n 4 0 0 Not_testing\r\n 5 0 0 Not_testing\r\nSelective self-test flags (0x0):\r\n After scanning selected spans, do NOT read-scan remainder of disk.\r\nIf Selective self-test is pending on power-up, resume after 0 minute delay.\n"})}),"\n",(0,t.jsx)(r.p,{children:"Additional NVME drive:"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"smartctl -a /dev/nvme0\r\n\r\nsmartctl 7.2 2020-12-30 r5155 [x86_64-linux-5.15.0-91-generic] (local build)\r\nCopyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org\r\n\r\n=== START OF INFORMATION SECTION ===\r\nModel Number: SanDisk Extreme Pro 500GB\r\nSerial Number: 212181449612\r\nFirmware Version: 111130WD\r\nPCI Vendor/Subsystem ID: 0x15b7\r\nIEEE OUI Identifier: 0x001b44\r\nTotal NVM Capacity: 500,107,862,016 [500 GB]\r\nUnallocated NVM Capacity: 0\r\nController ID: 8215\r\nNVMe Version: 1.3\r\nNumber of Namespaces: 1\r\nNamespace 1 Size/Capacity: 500,107,862,016 [500 GB]\r\nNamespace 1 Formatted LBA Size: 512\r\nNamespace 1 IEEE EUI-64: 001b44 4a4944db11\r\nLocal Time is: Sat Mar 9 09:45:02 2024 CET\r\nFirmware Updates (0x14): 2 Slots, no Reset required\r\nOptional Admin Commands (0x0017): Security Format Frmw_DL Self_Test\r\nOptional NVM Commands (0x005f): Comp Wr_Unc DS_Mngmt Wr_Zero Sav/Sel_Feat Timestmp\r\nLog Page Attributes (0x0e): Cmd_Eff_Lg Ext_Get_Lg Telmtry_Lg\r\nMaximum Data Transfer Size: 128 Pages\r\nWarning Comp. Temp. Threshold: 84 Celsius\r\nCritical Comp. Temp. Threshold: 88 Celsius\r\nNamespace 1 Features (0x02): NA_Fields\r\n\r\nSupported Power States\r\nSt Op Max Active Idle RL RT WL WT Ent_Lat Ex_Lat\r\n 0 + 5.50W - - 0 0 0 0 0 0\r\n 1 + 3.50W - - 1 1 1 1 0 0\r\n 2 + 3.00W - - 2 2 2 2 0 0\r\n 3 - 0.0700W - - 3 3 3 3 4000 10000\r\n 4 - 0.0035W - - 4 4 4 4 4000 40000\r\n\r\nSupported LBA Sizes (NSID 0x1)\r\nId Fmt Data Metadt Rel_Perf\r\n 0 + 512 0 2\r\n 1 - 4096 0 1\r\n\r\n=== START OF SMART DATA SECTION ===\r\nSMART overall-health self-assessment test result: PASSED\r\n\r\nSMART/Health Information (NVMe Log 0x02)\r\nCritical Warning: 0x00\r\nTemperature: 51 Celsius\r\nAvailable Spare: 100%\r\nAvailable Spare Threshold: 10%\r\nPercentage Used: 3%\r\nData Units Read: 7,580,500 [3.88 TB]\r\nData Units Written: 37,759,770 [19.3 TB]\r\nHost Read Commands: 38,034,128\r\nHost Write Commands: 1,870,013,477\r\nController Busy Time: 279\r\nPower Cycles: 25\r\nPower On Hours: 13,542\r\nUnsafe Shutdowns: 17\r\nMedia and Data Integrity Errors: 0\r\nError Information Log Entries: 1\r\nWarning Comp. Temperature Time: 0\r\nCritical Comp. Temperature Time: 0\r\n\r\nError Information (NVMe Log 0x01, 16 of 256 entries)\r\nNo Errors Logged\n"})}),"\n",(0,t.jsxs)(r.p,{children:["When you see that the ",(0,t.jsx)(r.code,{children:"SMART support is:"})," ",(0,t.jsx)(r.strong,{children:"disabled"})," run the following command to enable it:"]}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"smartctl -s on -a /dev/sda1\n"})}),"\n",(0,t.jsx)(r.h3,{id:"cpu-temperature",children:"CPU Temperature"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"sensors\r\n\r\ncoretemp-isa-0000\r\nAdapter: ISA adapter\r\nPackage id 0: +50.0\xb0C (high = +100.0\xb0C, crit = +100.0\xb0C)\r\nCore 0: +50.0\xb0C (high = +100.0\xb0C, crit = +100.0\xb0C)\r\nCore 1: +42.0\xb0C (high = +100.0\xb0C, crit = +100.0\xb0C)\r\nCore 2: +46.0\xb0C (high = +100.0\xb0C, crit = +100.0\xb0C)\r\nCore 3: +48.0\xb0C (high = +100.0\xb0C, crit = +100.0\xb0C)\r\nCore 4: +44.0\xb0C (high = +100.0\xb0C, crit = +100.0\xb0C)\r\nCore 5: +49.0\xb0C (high = +100.0\xb0C, crit = +100.0\xb0C)\r\nCore 6: +44.0\xb0C (high = +100.0\xb0C, crit = +100.0\xb0C)\r\nCore 7: +47.0\xb0C (high = +100.0\xb0C, crit = +100.0\xb0C)\r\n\r\nnvme-pci-0900\r\nAdapter: PCI adapter\r\nComposite: +48.9\xb0C (low = -5.2\xb0C, high = +83.8\xb0C)\r\n (crit = +87.8\xb0C)\r\n\r\nacpitz-acpi-0\r\nAdapter: ACPI interface\r\ntemp1: +16.8\xb0C (crit = +20.8\xb0C)\r\ntemp2: +27.8\xb0C (crit = +105.0\xb0C)\r\n\r\niwlwifi_1-virtual-0\r\nAdapter: Virtual device\r\ntemp1: N/A \r\n\r\nenp7s0-pci-0700\r\nAdapter: PCI adapter\r\nPHY Temperature: +47.9\xb0C \r\nMAC Temperature: +48.5\xb0C \r\n\r\nnvme-pci-0300\r\nAdapter: PCI adapter\r\nComposite: +50.9\xb0C (low = -5.2\xb0C, high = +83.8\xb0C)\r\n (crit = +87.8\xb0C)\n"})}),"\n",(0,t.jsx)(r.h2,{id:"zabbix",children:"Zabbix"}),"\n",(0,t.jsx)(r.h3,{id:"preparing-zabbix-agent2",children:"Preparing Zabbix-Agent2"}),"\n",(0,t.jsxs)(r.p,{children:["Add the ",(0,t.jsx)(r.code,{children:"zabbix"})," agent to ",(0,t.jsx)(r.strong,{children:"Sudoers"}),":"]}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"nano /etc/sudoers\n"})}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"# Zabbix user SMART control\r\nzabbix ALL=(ALL) NOPASSWD:/usr/sbin/smartctl\r\n\r\n# Zabbix user LM Sensors\r\nzabbix ALL=NOPASSWD:/bin/sensors\n"})}),"\n",(0,t.jsx)(r.p,{children:"Let's start by allowing the Zabbix server to execute ANY script (parental supervision advised):"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"nano /etc/zabbix/zabbix_agent2.conf\n"})}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:'### Option: AllowKey\r\n# Allow execution of item keys matching pattern.\r\n# Multiple keys matching rules may be defined in combination with DenyKey.\r\n# Key pattern is wildcard expression, which support "*" character to match any number of any characters in ce>\r\n# Parameters are processed one by one according their appearance order.\r\n# If no AllowKey or DenyKey rules defined, all keys are allowed.\r\n#\r\n# Mandatory: no\r\nAllowKey=system.run[*]\n'})}),"\n",(0,t.jsx)(r.h3,{id:"direct-cli-command-execution",children:"Direct CLI Command Execution"}),"\n",(0,t.jsx)(r.p,{children:"Now prepare a few sensor/smarttools commands to extract single values of interest:"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"smartctl -a /dev/sda | grep Temperature_Celsius | awk {'print $10'}\r\n23\r\n\r\nsmartctl -a /dev/nvme0 | grep Temperature | awk {'print $2'} | grep -o '[0-9]\\+'\r\n51\r\n\r\nsudo sensors | grep 'Core 0' | awk -F'[+|.]' {'print $2'}\r\n30\n"})}),"\n",(0,t.jsxs)(r.p,{children:["We can add these scripts to our Zabbix Server ",(0,t.jsx)(r.strong,{children:"Scripts"})," config:"]}),"\n",(0,t.jsx)(r.p,{children:(0,t.jsx)(r.img,{alt:"Zabbix v6 SMART HDD and CPU Temperature Check",src:n(281681).Z+"",width:"1047",height:"728"})}),"\n",(0,t.jsx)(r.p,{children:(0,t.jsx)(r.img,{alt:"Zabbix v6 SMART HDD and CPU Temperature Check",src:n(950072).Z+"",width:"1047",height:"506"})}),"\n",(0,t.jsx)(r.p,{children:"As a manual script item we can now execute those scripts directly from our global dashboard:"}),"\n",(0,t.jsx)(r.p,{children:(0,t.jsx)(r.img,{alt:"Zabbix v6 SMART HDD and CPU Temperature Check",src:n(831036).Z+"",width:"1045",height:"494"})}),"\n",(0,t.jsxs)(r.p,{children:["If you run into the following error message ",(0,t.jsx)(r.strong,{children:"Cannot execute script. Unknown metric system.run"})," you skipped the step above of adding the zabbix agent to your host ",(0,t.jsx)(r.code,{children:"sudoers"})," - or forgot to restart the Zabbix Agent service:"]}),"\n",(0,t.jsx)(r.p,{children:(0,t.jsx)(r.img,{alt:"Zabbix v6 SMART HDD and CPU Temperature Check",src:n(325070).Z+"",width:"1042",height:"231"})}),"\n",(0,t.jsx)(r.p,{children:"If everything is set up right your server should now be able to retrieve the Temperature value from your host system:"}),"\n",(0,t.jsx)(r.p,{children:(0,t.jsx)(r.img,{alt:"Zabbix v6 SMART HDD and CPU Temperature Check",src:n(934431).Z+"",width:"1042",height:"330"})}),"\n",(0,t.jsx)(r.h3,{id:"working-with-shell-scripts",children:"Working with Shell Scripts"}),"\n",(0,t.jsx)(r.p,{children:"To replace the nasty wildcard execution permission we can now replace the direct commands with a shell script. Just add all CLI commands you want to execute to separate shell files in a directory accessible to the Zabbix Agent:"}),"\n",(0,t.jsx)(r.p,{children:(0,t.jsx)(r.em,{children:"/opt/zabbix/temp_sda.sh"})}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-sh",children:"#!/bin/bash\r\nsudo smartctl -a /dev/sda | grep Temperature_Celsius | awk {'print $10'}\n"})}),"\n",(0,t.jsx)(r.p,{children:(0,t.jsx)(r.em,{children:"/opt/zabbix/temp_nvme0.sh"})}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-sh",children:"#!/bin/bash\r\nsmartctl -a /dev/nvme0 | grep Temperature | awk {'print $2'} | grep -o '[0-9]\\+'\n"})}),"\n",(0,t.jsx)(r.p,{children:(0,t.jsx)(r.em,{children:"/opt/zabbix/temp_core0.sh"})}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-sh",children:"#!/bin/bash\r\nsudo sensors | grep 'Core 0' | awk -F'[+|.]' {'print $2'}\n"})}),"\n",(0,t.jsx)(r.p,{children:"and so on..."}),"\n",(0,t.jsx)(r.p,{children:"Now replace the wildcard with the explicit script file calls to exclude any script not specifically defined by you:"}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:"nano nano /etc/zabbix/zabbix_agent2.conf\n"})}),"\n",(0,t.jsx)(r.pre,{children:(0,t.jsx)(r.code,{className:"language-bash",children:'### Option: AllowKey\r\n# Allow execution of item keys matching pattern.\r\n# Multiple keys matching rules may be defined in combination with DenyKey.\r\n# Key pattern is wildcard expression, which support "*" character to match any number of any characters in ce>\r\n# Parameters are processed one by one according their appearance order.\r\n# If no AllowKey or DenyKey rules defined, all keys are allowed.\r\n#\r\n# Mandatory: no\r\nAllowKey=system.run[sh /opt/zabbix/temp_nvme0.sh]\r\nAllowKey=system.run[sh /opt/zabbix/temp_nvme1.sh]\r\nAllowKey=system.run[sh /opt/zabbix/temp_sda.sh]\r\nAllowKey=system.run[sh /opt/zabbix/temp_sdb.sh]\r\nAllowKey=system.run[sh /opt/zabbix/temp_core0.sh]\r\nAllowKey=system.run[sh /opt/zabbix/temp_core1.sh]\r\nAllowKey=system.run[sh /opt/zabbix/temp_core2.sh]\r\nAllowKey=system.run[sh /opt/zabbix/temp_core3.sh]\r\nAllowKey=system.run[sh /opt/zabbix/temp_core4.sh]\r\nAllowKey=system.run[sh /opt/zabbix/temp_core5.sh]\r\nAllowKey=system.run[sh /opt/zabbix/temp_core6.sh]\r\nAllowKey=system.run[sh /opt/zabbix/temp_core7.sh]\n'})}),"\n",(0,t.jsx)(r.p,{children:"Now change the scripts accordingly on the Zabbix server:"}),"\n",(0,t.jsx)(r.p,{children:(0,t.jsx)(r.img,{alt:"Zabbix v6 SMART HDD and CPU Temperature Check",src:n(82609).Z+"",width:"1046",height:"726"})}),"\n",(0,t.jsx)(r.p,{children:(0,t.jsx)(r.img,{alt:"Zabbix v6 SMART HDD and CPU Temperature Check",src:n(614861).Z+"",width:"1045",height:"772"})}),"\n",(0,t.jsx)(r.p,{children:(0,t.jsx)(r.img,{alt:"Zabbix v6 SMART HDD and CPU Temperature Check",src:n(828393).Z+"",width:"1047",height:"298"})}),"\n",(0,t.jsx)(r.p,{children:"Verify that it is still working:"}),"\n",(0,t.jsx)(r.p,{children:(0,t.jsx)(r.img,{alt:"Zabbix v6 SMART HDD and CPU Temperature Check",src:n(63576).Z+"",width:"1043",height:"319"})})]})}function p(e={}){const{wrapper:r}={...(0,a.ah)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},603905:(e,r,n)=>{n.d(r,{ah:()=>c});var t=n(667294);function a(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function s(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}function i(e){for(var r=1;r=0||(a[n]=e[n]);return a}(e,r);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=t.createContext({}),c=function(e){var r=t.useContext(l),n=r;return e&&(n="function"==typeof e?e(r):i(i({},r),e)),n},d={inlineCode:"code",wrapper:function(e){var r=e.children;return t.createElement(t.Fragment,{},r)}},p=t.forwardRef((function(e,r){var n=e.components,a=e.mdxType,s=e.originalType,l=e.parentName,p=o(e,["components","mdxType","originalType","parentName"]),h=c(n),m=a,u=h["".concat(l,".").concat(m)]||h[m]||d[m]||s;return n?t.createElement(u,i(i({ref:r},p),{},{components:n})):t.createElement(u,i({ref:r},p))}));p.displayName="MDXCreateElement"},614861:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/Zabbix_Temperature_Check_10-31667a3ce4074abf2bd4e5b5ad4255c1.png"},828393:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/Zabbix_Temperature_Check_11-de872d43ce42b4957986a120774bedbe.png"},63576:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/Zabbix_Temperature_Check_12-bc60a4fccbe7d0b0caa796edcd52dd42.png"},281681:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/Zabbix_Temperature_Check_4-87d9b2bac94c1a18bdb6830fdcd8e24e.png"},950072:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/Zabbix_Temperature_Check_5-63c1a3238b6167a3fdc289bfdfe47814.png"},831036:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/Zabbix_Temperature_Check_6-6fcb4c9631fbdc7144148f4e6a05dddc.png"},325070:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/Zabbix_Temperature_Check_7-5e1df46ac70a45e1e24a59aa75101d7e.png"},934431:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/Zabbix_Temperature_Check_8-15a96bf838f727952cc26b3ea3c1d96e.png"},82609:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/Zabbix_Temperature_Check_9-edcc328b100bc79e459fc1e106124e99.png"},856647:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/photo-kt443t6d_64hdh43hfh6dgjdfhg4_d-d8b333d1f9ddf34ac7392aef86b14c83.jpg"}}]); \ No newline at end of file diff --git a/assets/js/55960ee5.7d68cffa.js b/assets/js/55960ee5.184a4e2b.js similarity index 97% rename from assets/js/55960ee5.7d68cffa.js rename to assets/js/55960ee5.184a4e2b.js index d6702008cb..3a214c1b60 100644 --- a/assets/js/55960ee5.7d68cffa.js +++ b/assets/js/55960ee5.184a4e2b.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmikes_dev_notebook=self.webpackChunkmikes_dev_notebook||[]).push([[74121],{88070:a=>{a.exports=JSON.parse('[{"label":"Windows","permalink":"/docs/tags/windows","count":14},{"label":"Node-RED","permalink":"/docs/tags/node-red","count":16},{"label":"OpenHAB","permalink":"/docs/tags/open-hab","count":1},{"label":"IoT","permalink":"/docs/tags/io-t","count":66},{"label":"Databases","permalink":"/docs/tags/databases","count":22},{"label":"SQLite","permalink":"/docs/tags/sq-lite","count":1},{"label":"MQTT","permalink":"/docs/tags/mqtt","count":23},{"label":"AlaSQL","permalink":"/docs/tags/ala-sql","count":1},{"label":"Smarthome","permalink":"/docs/tags/smarthome","count":33},{"label":"LINUX","permalink":"/docs/tags/linux","count":301},{"label":"Javascript","permalink":"/docs/tags/javascript","count":74},{"label":"Node","permalink":"/docs/tags/node","count":8},{"label":"Docker","permalink":"/docs/tags/docker","count":87},{"label":"Cheating","permalink":"/docs/tags/cheating","count":25},{"label":"Go","permalink":"/docs/tags/go","count":21},{"label":"Python","permalink":"/docs/tags/python","count":197},{"label":"Robotics","permalink":"/docs/tags/robotics","count":5},{"label":"Simulation","permalink":"/docs/tags/simulation","count":4},{"label":"Gazebo","permalink":"/docs/tags/gazebo","count":2},{"label":"ROS","permalink":"/docs/tags/ros","count":4},{"label":"Webots","permalink":"/docs/tags/webots","count":1},{"label":"React","permalink":"/docs/tags/react","count":43},{"label":"Gatsby","permalink":"/docs/tags/gatsby","count":10},{"label":"GoFiber","permalink":"/docs/tags/go-fiber","count":1},{"label":"SQL","permalink":"/docs/tags/sql","count":6},{"label":"NTS","permalink":"/docs/tags/nts","count":5},{"label":"Neo4j","permalink":"/docs/tags/neo-4-j","count":4},{"label":"Markdown","permalink":"/docs/tags/markdown","count":4},{"label":"APIs","permalink":"/docs/tags/ap-is","count":1},{"label":"Databases - MongoDB","permalink":"/docs/tags/databases-mongo-db","count":1},{"label":"Express","permalink":"/docs/tags/express","count":1},{"label":"Google Analytics","permalink":"/docs/tags/google-analytics","count":1},{"label":"Material-UI","permalink":"/docs/tags/material-ui","count":2},{"label":"Next","permalink":"/docs/tags/next","count":2},{"label":"Elasticsearch","permalink":"/docs/tags/elasticsearch","count":35},{"label":"Bootstrap","permalink":"/docs/tags/bootstrap","count":1},{"label":"Electron","permalink":"/docs/tags/electron","count":6},{"label":"NGINX","permalink":"/docs/tags/nginx","count":29},{"label":"WebRTC","permalink":"/docs/tags/web-rtc","count":3},{"label":"Meili","permalink":"/docs/tags/meili","count":3},{"label":"Rust","permalink":"/docs/tags/rust","count":3},{"label":"Magento","permalink":"/docs/tags/magento","count":14},{"label":"dcs","permalink":"/docs/tags/dcs","count":2},{"label":"C++","permalink":"/docs/tags/c","count":1},{"label":"Pandas","permalink":"/docs/tags/pandas","count":10},{"label":"Matplotlib","permalink":"/docs/tags/matplotlib","count":9},{"label":"Seaborn","permalink":"/docs/tags/seaborn","count":6},{"label":"SKlearn","permalink":"/docs/tags/s-klearn","count":7},{"label":"OpenCV","permalink":"/docs/tags/open-cv","count":16},{"label":"SciKit","permalink":"/docs/tags/sci-kit","count":3},{"label":"ReactNative","permalink":"/docs/tags/react-native","count":6},{"label":"Ansible","permalink":"/docs/tags/ansible","count":9},{"label":"Gitlab","permalink":"/docs/tags/gitlab","count":9},{"label":"Opensearch","permalink":"/docs/tags/opensearch","count":2},{"label":"Github","permalink":"/docs/tags/github","count":1},{"label":"Nomad","permalink":"/docs/tags/nomad","count":39},{"label":"Consul","permalink":"/docs/tags/consul","count":37},{"label":"Packer","permalink":"/docs/tags/packer","count":4},{"label":"Traefik","permalink":"/docs/tags/traefik","count":4},{"label":"Vault","permalink":"/docs/tags/vault","count":10},{"label":"Terraform","permalink":"/docs/tags/terraform","count":5},{"label":"Waypoint","permalink":"/docs/tags/waypoint","count":2},{"label":"Security","permalink":"/docs/tags/security","count":13},{"label":"osTicket","permalink":"/docs/tags/os-ticket","count":7},{"label":"Kubernetes","permalink":"/docs/tags/kubernetes","count":12},{"label":"OpenShift","permalink":"/docs/tags/open-shift","count":2},{"label":"FFMPEG","permalink":"/docs/tags/ffmpeg","count":1},{"label":"Apache","permalink":"/docs/tags/apache","count":3},{"label":"Certbot","permalink":"/docs/tags/certbot","count":1},{"label":"SVN","permalink":"/docs/tags/svn","count":1},{"label":"PostgreSQL","permalink":"/docs/tags/postgre-sql","count":1},{"label":"Discourse","permalink":"/docs/tags/discourse","count":6},{"label":"Hapi","permalink":"/docs/tags/hapi","count":1},{"label":"OpenProject","permalink":"/docs/tags/open-project","count":1},{"label":"Wazuh","permalink":"/docs/tags/wazuh","count":1},{"label":"ownCloud","permalink":"/docs/tags/own-cloud","count":1},{"label":"GraphQL","permalink":"/docs/tags/graph-ql","count":1},{"label":"Salt","permalink":"/docs/tags/salt","count":14},{"label":"FirewallD","permalink":"/docs/tags/firewall-d","count":5},{"label":"fail2ban","permalink":"/docs/tags/fail-2-ban","count":5},{"label":"ufw","permalink":"/docs/tags/ufw","count":1},{"label":"Tomcat","permalink":"/docs/tags/tomcat","count":5},{"label":"Nagios","permalink":"/docs/tags/nagios","count":2},{"label":"Zabbix","permalink":"/docs/tags/zabbix","count":19},{"label":"Slack","permalink":"/docs/tags/slack","count":3},{"label":"Grafana","permalink":"/docs/tags/grafana","count":1},{"label":"Machine Learning","permalink":"/docs/tags/machine-learning","count":160},{"label":"Ray","permalink":"/docs/tags/ray","count":5},{"label":"Airflow","permalink":"/docs/tags/airflow","count":4},{"label":"MLFlow","permalink":"/docs/tags/ml-flow","count":4},{"label":"Flask","permalink":"/docs/tags/flask","count":4},{"label":"AutoGluon","permalink":"/docs/tags/auto-gluon","count":3},{"label":"Tensorflow","permalink":"/docs/tags/tensorflow","count":58},{"label":"YOLO","permalink":"/docs/tags/yolo","count":14},{"label":"Torch","permalink":"/docs/tags/torch","count":9},{"label":"Keras","permalink":"/docs/tags/keras","count":7},{"label":"PyTorch","permalink":"/docs/tags/py-torch","count":10}]')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmikes_dev_notebook=self.webpackChunkmikes_dev_notebook||[]).push([[74121],{88070:a=>{a.exports=JSON.parse('[{"label":"Windows","permalink":"/docs/tags/windows","count":14},{"label":"Node-RED","permalink":"/docs/tags/node-red","count":16},{"label":"OpenHAB","permalink":"/docs/tags/open-hab","count":1},{"label":"IoT","permalink":"/docs/tags/io-t","count":66},{"label":"Databases","permalink":"/docs/tags/databases","count":22},{"label":"SQLite","permalink":"/docs/tags/sq-lite","count":1},{"label":"MQTT","permalink":"/docs/tags/mqtt","count":23},{"label":"AlaSQL","permalink":"/docs/tags/ala-sql","count":1},{"label":"Smarthome","permalink":"/docs/tags/smarthome","count":33},{"label":"LINUX","permalink":"/docs/tags/linux","count":302},{"label":"Javascript","permalink":"/docs/tags/javascript","count":74},{"label":"Node","permalink":"/docs/tags/node","count":8},{"label":"Docker","permalink":"/docs/tags/docker","count":87},{"label":"Cheating","permalink":"/docs/tags/cheating","count":25},{"label":"Go","permalink":"/docs/tags/go","count":21},{"label":"Python","permalink":"/docs/tags/python","count":197},{"label":"Robotics","permalink":"/docs/tags/robotics","count":5},{"label":"Simulation","permalink":"/docs/tags/simulation","count":4},{"label":"Gazebo","permalink":"/docs/tags/gazebo","count":2},{"label":"ROS","permalink":"/docs/tags/ros","count":4},{"label":"Webots","permalink":"/docs/tags/webots","count":1},{"label":"React","permalink":"/docs/tags/react","count":43},{"label":"Gatsby","permalink":"/docs/tags/gatsby","count":10},{"label":"GoFiber","permalink":"/docs/tags/go-fiber","count":1},{"label":"SQL","permalink":"/docs/tags/sql","count":6},{"label":"NTS","permalink":"/docs/tags/nts","count":5},{"label":"Neo4j","permalink":"/docs/tags/neo-4-j","count":4},{"label":"Markdown","permalink":"/docs/tags/markdown","count":4},{"label":"APIs","permalink":"/docs/tags/ap-is","count":1},{"label":"Databases - MongoDB","permalink":"/docs/tags/databases-mongo-db","count":1},{"label":"Express","permalink":"/docs/tags/express","count":1},{"label":"Google Analytics","permalink":"/docs/tags/google-analytics","count":1},{"label":"Material-UI","permalink":"/docs/tags/material-ui","count":2},{"label":"Next","permalink":"/docs/tags/next","count":2},{"label":"Elasticsearch","permalink":"/docs/tags/elasticsearch","count":35},{"label":"Bootstrap","permalink":"/docs/tags/bootstrap","count":1},{"label":"Electron","permalink":"/docs/tags/electron","count":6},{"label":"NGINX","permalink":"/docs/tags/nginx","count":29},{"label":"WebRTC","permalink":"/docs/tags/web-rtc","count":3},{"label":"Meili","permalink":"/docs/tags/meili","count":3},{"label":"Rust","permalink":"/docs/tags/rust","count":3},{"label":"Magento","permalink":"/docs/tags/magento","count":14},{"label":"dcs","permalink":"/docs/tags/dcs","count":2},{"label":"C++","permalink":"/docs/tags/c","count":1},{"label":"Pandas","permalink":"/docs/tags/pandas","count":10},{"label":"Matplotlib","permalink":"/docs/tags/matplotlib","count":9},{"label":"Seaborn","permalink":"/docs/tags/seaborn","count":6},{"label":"SKlearn","permalink":"/docs/tags/s-klearn","count":7},{"label":"OpenCV","permalink":"/docs/tags/open-cv","count":16},{"label":"SciKit","permalink":"/docs/tags/sci-kit","count":3},{"label":"ReactNative","permalink":"/docs/tags/react-native","count":6},{"label":"Ansible","permalink":"/docs/tags/ansible","count":9},{"label":"Gitlab","permalink":"/docs/tags/gitlab","count":9},{"label":"Opensearch","permalink":"/docs/tags/opensearch","count":2},{"label":"Github","permalink":"/docs/tags/github","count":1},{"label":"Nomad","permalink":"/docs/tags/nomad","count":39},{"label":"Consul","permalink":"/docs/tags/consul","count":37},{"label":"Packer","permalink":"/docs/tags/packer","count":4},{"label":"Traefik","permalink":"/docs/tags/traefik","count":4},{"label":"Vault","permalink":"/docs/tags/vault","count":10},{"label":"Terraform","permalink":"/docs/tags/terraform","count":5},{"label":"Waypoint","permalink":"/docs/tags/waypoint","count":2},{"label":"Security","permalink":"/docs/tags/security","count":13},{"label":"osTicket","permalink":"/docs/tags/os-ticket","count":7},{"label":"Kubernetes","permalink":"/docs/tags/kubernetes","count":12},{"label":"OpenShift","permalink":"/docs/tags/open-shift","count":2},{"label":"FFMPEG","permalink":"/docs/tags/ffmpeg","count":1},{"label":"Apache","permalink":"/docs/tags/apache","count":3},{"label":"Certbot","permalink":"/docs/tags/certbot","count":1},{"label":"SVN","permalink":"/docs/tags/svn","count":1},{"label":"PostgreSQL","permalink":"/docs/tags/postgre-sql","count":1},{"label":"Discourse","permalink":"/docs/tags/discourse","count":6},{"label":"Hapi","permalink":"/docs/tags/hapi","count":1},{"label":"OpenProject","permalink":"/docs/tags/open-project","count":1},{"label":"Wazuh","permalink":"/docs/tags/wazuh","count":1},{"label":"ownCloud","permalink":"/docs/tags/own-cloud","count":1},{"label":"GraphQL","permalink":"/docs/tags/graph-ql","count":1},{"label":"Salt","permalink":"/docs/tags/salt","count":14},{"label":"FirewallD","permalink":"/docs/tags/firewall-d","count":5},{"label":"fail2ban","permalink":"/docs/tags/fail-2-ban","count":5},{"label":"ufw","permalink":"/docs/tags/ufw","count":1},{"label":"Tomcat","permalink":"/docs/tags/tomcat","count":5},{"label":"Nagios","permalink":"/docs/tags/nagios","count":2},{"label":"Zabbix","permalink":"/docs/tags/zabbix","count":20},{"label":"Slack","permalink":"/docs/tags/slack","count":3},{"label":"Grafana","permalink":"/docs/tags/grafana","count":1},{"label":"Machine Learning","permalink":"/docs/tags/machine-learning","count":160},{"label":"Ray","permalink":"/docs/tags/ray","count":5},{"label":"Airflow","permalink":"/docs/tags/airflow","count":4},{"label":"MLFlow","permalink":"/docs/tags/ml-flow","count":4},{"label":"Flask","permalink":"/docs/tags/flask","count":4},{"label":"AutoGluon","permalink":"/docs/tags/auto-gluon","count":3},{"label":"Tensorflow","permalink":"/docs/tags/tensorflow","count":58},{"label":"YOLO","permalink":"/docs/tags/yolo","count":14},{"label":"Torch","permalink":"/docs/tags/torch","count":9},{"label":"Keras","permalink":"/docs/tags/keras","count":7},{"label":"PyTorch","permalink":"/docs/tags/py-torch","count":10}]')}}]); \ No newline at end of file diff --git a/assets/js/63b220b9.3dbda15a.js b/assets/js/63b220b9.3dbda15a.js new file mode 100644 index 0000000000..43981f9b57 --- /dev/null +++ b/assets/js/63b220b9.3dbda15a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmikes_dev_notebook=self.webpackChunkmikes_dev_notebook||[]).push([[15970],{260824:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var i=t(785893),s=t(603905);const r={sidebar_position:4110,slug:"2023-09-15",title:"YOLOv8 License Plate Detection",authors:"mpolinowski",tags:["Python","Machine Learning","PyTorch"],description:"Using the YOLOv8 Object Tracker in Combination with EasyOCR"},c="YOLOv8 License Plate Detection",l={id:"IoT-and-Machine-Learning/ML/2023-09-15--yolo8-tracking-and-ocr/index",title:"YOLOv8 License Plate Detection",description:"Using the YOLOv8 Object Tracker in Combination with EasyOCR",source:"@site/docs/IoT-and-Machine-Learning/ML/2023-09-15--yolo8-tracking-and-ocr/index.md",sourceDirName:"IoT-and-Machine-Learning/ML/2023-09-15--yolo8-tracking-and-ocr",slug:"/IoT-and-Machine-Learning/ML/2023-09-15--yolo8-tracking-and-ocr/2023-09-15",permalink:"/docs/IoT-and-Machine-Learning/ML/2023-09-15--yolo8-tracking-and-ocr/2023-09-15",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/IoT-and-Machine-Learning/ML/2023-09-15--yolo8-tracking-and-ocr/index.md",tags:[{label:"Python",permalink:"/docs/tags/python"},{label:"Machine Learning",permalink:"/docs/tags/machine-learning"},{label:"PyTorch",permalink:"/docs/tags/py-torch"}],version:"current",sidebarPosition:4110,frontMatter:{sidebar_position:4110,slug:"2023-09-15",title:"YOLOv8 License Plate Detection",authors:"mpolinowski",tags:["Python","Machine Learning","PyTorch"],description:"Using the YOLOv8 Object Tracker in Combination with EasyOCR"},sidebar:"tutorialSidebar",previous:{title:"YOLOv8 Nightshift",permalink:"/docs/IoT-and-Machine-Learning/ML/2023-09-17--yolo8-nightshift/2023-09-17"},next:{title:"Scikit-Learn ML Model Explainability",permalink:"/docs/IoT-and-Machine-Learning/ML/2023-09-10--model-explainability-shap/2023-09-11"}},a={},d=[{value:"Pre-Trained YOLOv8",id:"pre-trained-yolov8",level:2},{value:"Retraining YOLOv8",id:"retraining-yolov8",level:2},{value:"Improving Training Results",id:"improving-training-results",level:2},{value:"License Plate Detection",id:"license-plate-detection",level:2},{value:"STEP 1 Implementing the Car Detection",id:"step-1-implementing-the-car-detection",level:3},{value:"STEP 2 Implementing the License Plate Detection",id:"step-2-implementing-the-license-plate-detection",level:3},{value:"STEP 3 Preprocess License Plates",id:"step-3-preprocess-license-plates",level:3},{value:"STEP 4 Read License Plates",id:"step-4-read-license-plates",level:3},{value:"STEP 5 Clean-Up License Plate Format",id:"step-5-clean-up-license-plate-format",level:3},{value:"STEP 6 Visualize the Results",id:"step-6-visualize-the-results",level:3}];function o(e){const n={a:"a",blockquote:"blockquote",br:"br",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.ah)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Guangzhou, China",src:t(653493).Z+"",width:"1500",height:"871"})}),"\n",(0,i.jsx)(n.h1,{id:"yolov8-license-plate-detection",children:"YOLOv8 License Plate Detection"}),"\n",(0,i.jsxs)(n.p,{children:["Using the ",(0,i.jsx)(n.a,{href:"https://docs.ultralytics.com/tasks/detect/",children:"YOLOv8 Object Tracker"})," and ",(0,i.jsx)(n.a,{href:"https://www.jaided.ai/easyocr/",children:"EasyOCR"})," to record License Plates."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["This guide is based on the ",(0,i.jsx)(n.a,{href:"https://github.com/computervisioneng/automatic-number-plate-recognition-python-yolov8",children:"DeepSORT & EasyOCR Repository"})," by ",(0,i.jsx)(n.a,{href:"https://github.com/computervisioneng",children:"@computervisioneng"}),". But I replaced the ",(0,i.jsx)(n.a,{href:"https://github.com/abewley/sort",children:"DeepSORT Dependency"})," with the YOLOv8 included Track function."]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://github.com/mpolinowski/yolo-i-know-flowers",children:"Github Repository"})}),"\n"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"#yolov8-license-plate-detection",children:"YOLOv8 License Plate Detection"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#pre-trained-yolov8",children:"Pre-Trained YOLOv8"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#retraining-yolov8",children:"Retraining YOLOv8"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#improving-training-results",children:"Improving Training Results"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"#license-plate-detection",children:"License Plate Detection"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#step-1-implementing-the-car-detection",children:"STEP 1 Implementing the Car Detection"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#step-2-implementing-the-license-plate-detection",children:"STEP 2 Implementing the License Plate Detection"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#step-3-preprocess-license-plates",children:"STEP 3 Preprocess License Plates"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#step-4-read-license-plates",children:"STEP 4 Read License Plates"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#step-5-clean-up-license-plate-format",children:"STEP 5 Clean-Up License Plate Format"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#step-6-visualize-the-results",children:"STEP 6 Visualize the Results"})}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"import cv2 as cv\nfrom glob import glob\nimport os\nimport random\nfrom ultralytics import YOLO\n"})}),"\n",(0,i.jsx)(n.h2,{id:"pre-trained-yolov8",children:"Pre-Trained YOLOv8"}),"\n",(0,i.jsxs)(n.p,{children:["The regular YOLOv8 training weights do not contain a ",(0,i.jsx)(n.code,{children:"number_plate"})," class and cannot be used directly for a number plate detection:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# read in video paths\nvideos = glob('inputs/*.mp4')\nprint(videos)\n"})}),"\n",(0,i.jsx)(n.p,{children:"['inputs/uk_dash_1.mp4', 'inputs/uk_dash_2.mp4']"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# pick pre-trained model\nmodel_pretrained = YOLO('yolov8n.pt')\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# read video by index\nvideo = cv.VideoCapture(videos[1])\n\n# get video dims\nframe_width = int(video.get(3))\nframe_height = int(video.get(4))\nsize = (frame_width, frame_height)\n\n# Define the codec and create VideoWriter object\nfourcc = cv.VideoWriter_fourcc(*'DIVX')\nout = cv.VideoWriter('./outputs/uk_dash_2.avi', fourcc, 20.0, size)\n\n# read frames\nret = True\n\nwhile ret:\n ret, frame = video.read()\n\n if ret:\n # detect & track objects\n results = model_pretrained.track(frame, persist=True)\n\n # plot results\n composed = results[0].plot()\n\n # save video\n out.write(composed)\n\nout.release()\nvideo.release()\n"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"YOLOv8 License Plate Detection",src:t(579768).Z+"",width:"1946",height:"438"})}),"\n",(0,i.jsx)(n.h2,{id:"retraining-yolov8",children:"Retraining YOLOv8"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://universe.roboflow.com/roboflow-universe-projects/license-plate-recognition-rxg4e",children:"Dataset: Roboflow - License Plate Recognition Computer Vision Project"})}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Download the Dataset with YOLOv8 annotation and point YOLO to the ",(0,i.jsx)(n.code,{children:"data.yaml"})," file that comes with the dataset:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yml",children:"train: ../train/images\nval: ../valid/images\ntest: ../test/images\n\nnc: 1\nnames: ['License_Plate']\n\nroboflow:\n workspace: roboflow-universe-projects\n project: license-plate-recognition-rxg4e\n version: 4\n license: CC BY 4.0\n url: https://universe.roboflow.com/roboflow-universe-projects/license-plate-recognition-rxg4e/dataset/4\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:'# unzip downloaded dataset to `./datasets`\ndataset = \'datasets/data.yaml\'\n\n# load a model\n# backbone = YOLO("yolov8n.yaml") # build a new model from scratch\nbackbone = YOLO("yolov8n.pt") # load a pre-trained model (recommended for training)\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# Use the model\nresults = backbone.train(data=dataset, epochs=20) # train the model\n"})}),"\n",(0,i.jsx)(n.p,{children:"20 epochs completed in 2.530 hours.\nOptimizer stripped from runs/detect/train11/weights/last.pt, 6.2MB\nOptimizer stripped from runs/detect/train11/weights/best.pt, 6.2MB"}),"\n",(0,i.jsx)(n.p,{children:"Validating runs/detect/train11/weights/best.pt...\nUltralytics YOLOv8.0.173 \ud83d\ude80 Python-3.10.11 torch-2.0.1 CUDA:0 (NVIDIA GeForce GTX 1060 6GB, 6070MiB)\nModel summary (fused): 168 layers, 3005843 parameters, 0 gradients\nClass Images Instances Box(P R mAP50 mAP50-95): 100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 64/64 [00:17, 3.61it/s]\nall 2046 2132 0.986 0.954 0.984 0.701\nSpeed: 0.3ms preprocess, 5.1ms inference, 0.0ms loss, 0.5ms postprocess per image\nResults saved to \x1b[1mruns/detect/train11\x1b[0m"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"YOLOv8 License Plate Detection",src:t(587708).Z+"",width:"2400",height:"1200"})}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Class"}),(0,i.jsx)(n.th,{children:"Images"}),(0,i.jsx)(n.th,{children:"Instances"}),(0,i.jsx)(n.th,{children:"Box( P"}),(0,i.jsx)(n.th,{children:"R"}),(0,i.jsx)(n.th,{children:"mAP50"}),(0,i.jsx)(n.th,{children:"mAP50-95)"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"all"}),(0,i.jsx)(n.td,{children:"2046"}),(0,i.jsx)(n.td,{children:"2132"}),(0,i.jsx)(n.td,{children:"0.986"}),(0,i.jsx)(n.td,{children:"0.954"}),(0,i.jsx)(n.td,{children:"0.984"}),(0,i.jsx)(n.td,{children:"0.701"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.em,{children:"Speed: 0.3ms preprocess, 5.1ms inference, 0.0ms loss, 0.5ms postprocess per image"})}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.em,{children:"Model summary (fused): 168 layers, 3005843 parameters, 0 gradients"})}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{})]})]})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# Evaluate the model's performance on the validation set\nresults = backbone.val()\n"})}),"\n",(0,i.jsx)(n.p,{children:"Ultralytics YOLOv8.0.173 \ud83d\ude80 Python-3.10.11 torch-2.0.1 CUDA:0 (NVIDIA GeForce GTX 1060 6GB, 6070MiB)\nModel summary (fused): 168 layers, 3005843 parameters, 0 gradients\n\x1b[34m\x1b[1mval: \x1b[0mScanning /opt/app/03_object_detection_with_text_extraction_easyocr/datasets/valid/labels.cache... 2046 images, 3 backgrounds, 0 corrupt: 100%|\u2588\u2588\u2588\u2588\x1b[0m\nClass Images Instances Box(P R mAP50 mAP50-95): 100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 128/128 [00:18, 6.74it/s]\nall 2046 2132 0.986 0.954 0.984 0.701\nSpeed: 0.3ms preprocess, 5.7ms inference, 0.0ms loss, 0.6ms postprocess per image\nResults saved to \x1b[1mruns/detect/val\x1b[0m"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"YOLOv8 License Plate Detection",src:t(766487).Z+"",width:"1721",height:"925"})}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Class"}),(0,i.jsx)(n.th,{children:"Images"}),(0,i.jsx)(n.th,{children:"Instances"}),(0,i.jsx)(n.th,{children:"Box( P"}),(0,i.jsx)(n.th,{children:"R"}),(0,i.jsx)(n.th,{children:"mAP50"}),(0,i.jsx)(n.th,{children:"mAP50-95)"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"all"}),(0,i.jsx)(n.td,{children:"2046"}),(0,i.jsx)(n.td,{children:"2132"}),(0,i.jsx)(n.td,{children:"0.986"}),(0,i.jsx)(n.td,{children:"0.954"}),(0,i.jsx)(n.td,{children:"0.984"}),(0,i.jsx)(n.td,{children:"0.701"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.em,{children:"Speed: 0.3ms preprocess, 5.7ms inference, 0.0ms loss, 0.6ms postprocess per image"})}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{})]})]})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# Perform object detection on an image using the model\nresults = backbone('inputs/cars.png')\n"})}),"\n",(0,i.jsx)(n.p,{children:"image 1/1 /opt/app/03_object_detection_with_text_extraction_easyocr/inputs/cars.png: 384x640 2 License_Plates, 35.9ms\nSpeed: 1.7ms preprocess, 35.9ms inference, 2.0ms postprocess per image at shape (1, 3, 384, 640)"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# Export the model to ONNX format\n# success = model.export(imgsz=(640, 480), format='onnx', opset=12, optimize=False, half=False)\n# Export to PyTorch format\nsuccess = backbone.export(imgsz=640, format='torchscript', optimize=False, half=False, int8=False)\n# TorchScript: export success \u2705 1.5s, saved as 'runs/detect/train11/weights/best.torchscript' (11.9 MB)\n"})}),"\n",(0,i.jsx)(n.p,{children:"Ultralytics YOLOv8.0.173 \ud83d\ude80 Python-3.10.11 torch-2.0.1 CPU (Intel Core(TM) i7-7700 3.60GHz)"}),"\n",(0,i.jsx)(n.p,{children:"\x1b[34m\x1b[1mPyTorch:\x1b[0m starting from 'runs/detect/train11/weights/best.pt' with input shape (1, 3, 640, 640) BCHW and output shape(s) (1, 5, 8400) (6.0 MB)"}),"\n",(0,i.jsx)(n.p,{children:"\x1b[34m\x1b[1mTorchScript:\x1b[0m starting export with torch 2.0.1...\n\x1b[34m\x1b[1mTorchScript:\x1b[0m export success \u2705 1.3s, saved as 'runs/detect/train11/weights/best.torchscript' (11.9 MB)"}),"\n",(0,i.jsxs)(n.p,{children:["Export complete (2.6s)\nResults saved to \x1b[1m/opt/app/03_object_detection_with_text_extraction_easyocr/runs/detect/train11/weights\x1b[0m\nPredict: yolo predict task=detect model=runs/detect/train11/weights/best.torchscript imgsz=640",(0,i.jsx)(n.br,{}),"\n","Validate: yolo val task=detect model=runs/detect/train11/weights/best.torchscript imgsz=640 data=datasets/data.yaml",(0,i.jsx)(n.br,{}),"\n","Visualize: ",(0,i.jsx)(n.a,{href:"https://netron.app",children:"https://netron.app"})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# pick pre-trained model\nnp_model = YOLO('runs/detect/train11/weights/best.torchscript')\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# read video by index\nvideo = cv.VideoCapture(videos[1])\nret, frame = video.read()\n\n# get video dims\nframe_width = int(video.get(3))\nframe_height = int(video.get(4))\nsize = (frame_width, frame_height)\n\n# Define the codec and create VideoWriter object\nfourcc = cv.VideoWriter_fourcc(*'DIVX')\nout = cv.VideoWriter('./outputs/uk_dash_np_2.avi', fourcc, 20.0, size)\n\n# read frames\nret = True\n\nwhile ret:\n ret, frame = video.read()\n\n if ret:\n # detect & track objects\n results = np_model.track(frame, persist=True)\n\n # plot results\n composed = results[0].plot()\n\n # save video\n out.write(composed)\n\nout.release()\nvideo.release()\n"})}),"\n",(0,i.jsx)(n.p,{children:"And now we have a model that is only interested in number plates:"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"YOLOv8 License Plate Detection",src:t(526491).Z+"",width:"1933",height:"391"})}),"\n",(0,i.jsx)(n.p,{children:"Though, the confusion matrix shows us that it also sees a lot of plates that do not exist - but at least it does not miss that many:"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"YOLOv8 License Plate Detection",src:t(553629).Z+"",width:"3000",height:"2250"})}),"\n",(0,i.jsx)(n.h2,{id:"improving-training-results",children:"Improving Training Results"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:'# unzip downloaded dataset to `./datasets`\ndataset = \'datasets/data.yaml\'\n\n# load a model\n# backbone = YOLO("yolov8n.yaml") # build a new model from scratch\nbackbone_small = YOLO("yolov8s.pt") # load a pre-trained model (recommended for training)\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# Use the model\nresults_medium = backbone_small.train(data=dataset, epochs=100) # train the model\n"})}),"\n",(0,i.jsx)(n.p,{children:"Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size\n57/100 4.57G 0.9052 0.3966 1.064 7 640: 100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 1324/1324 [13:43, 1.61it/s]\nClass Images Instances Box(P R mAP50 mAP50-95): 100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 64/64 [00:26, 2.38it/s]\nall 2046 2132 0.981 0.968 0.984 0.709"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# pick pre-trained model\nnp2_model = YOLO('runs/detect/train4/weights/best.pt')\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# Evaluate the model's performance on the validation set\nresults = np2_model.val()\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Ultralytics YOLOv8.0.173 \ud83d\ude80 Python-3.10.11 torch-2.0.1 CUDA:0 (NVIDIA GeForce GTX 1060 6GB, 6070MiB)\nModel summary (fused): 168 layers, 11125971 parameters, 0 gradients\nDownloading ",(0,i.jsx)(n.a,{href:"https://ultralytics.com/assets/Arial.ttf",children:"https://ultralytics.com/assets/Arial.ttf"})," to '/root/.config/Ultralytics/Arial.ttf'...\n100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 755k/755k [00:00, 2.35MB/s]\nClass Images Instances Box(P R mAP50 mAP50-95): 100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 128/128 [00:35, 3.59it/s]\nall 2046 2132 0.981 0.968 0.984 0.71\nSpeed: 0.3ms preprocess, 13.4ms inference, 0.0ms loss, 0.6ms postprocess per image\nResults saved to \x1b[1mruns/detect/val2\x1b[0m"]}),"\n",(0,i.jsx)(n.h2,{id:"license-plate-detection",children:"License Plate Detection"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"import ast\nimport cv2 as cv\nimport easyocr\nfrom glob import glob\nimport numpy as np\nimport pandas as pd\nimport string\nfrom ultralytics import YOLO\n"})}),"\n",(0,i.jsx)(n.p,{children:"As seen during the training - the model, just using the COCO training weights, is very capable of detecting cars, trucks and buses. But number plates seem to be a bit harder - the model often confuses street signs or just basic backgound noise as a car registration plate. The positive is that it rarely misses a plate."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# regular pre-trained yolov8 model for car recognition\n# coco_model = YOLO('yolov8n.pt')\ncoco_model = YOLO('yolov8s.pt')\n# yolov8 model trained to detect number plates\nnp_model = YOLO('runs/detect/train4/weights/best.pt')\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# read in test video paths\nvideos = glob('inputs/*.mp4')\nprint(videos)\n"})}),"\n",(0,i.jsx)(n.p,{children:"['inputs/uk_dash_1.mp4', 'inputs/uk_dash_2.mp4']"}),"\n",(0,i.jsx)(n.h3,{id:"step-1-implementing-the-car-detection",children:"STEP 1 Implementing the Car Detection"}),"\n",(0,i.jsx)(n.p,{children:"Get the bounding boxes of all vehicles in your video recording with prediction confidence score and object tracking ID"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# read video by index\nvideo = cv.VideoCapture(videos[1])\n\nret = True\nframe_number = -1\n# all vehicle class IDs from the COCO dataset (car, motorbike, truck) https://docs.ultralytics.com/datasets/detect/coco/#dataset-yaml\nvehicles = [2,3,5]\nvehicle_bounding_boxes = []\n\n# read the 10 first frames\nwhile ret:\n frame_number += 1\n ret, frame = video.read()\n\n if ret and frame_number < 10:\n # use track() to identify instances and track them frame by frame\n detections = coco_model.track(frame, persist=True)[0]\n # save cropped detections\n # detections.save_crop('outputs')\n # print nodel predictions for debugging\n # print(results)\n\n for detection in detections.boxes.data.tolist():\n # print detection bounding boxes for debugging\n # print(detection)\n x1, y1, x2, y2, track_id, score, class_id = detection\n # I am only interested in class IDs that belong to vehicles\n if int(class_id) in vehicles and score > 0.5:\n vehicle_bounding_boxes.append([x1, y1, x2, y2, track_id, score])\n\n# print found bounding boxes for debugging\nprint(vehicle_bounding_boxes)\nvideo.release()\n"})}),"\n",(0,i.jsxs)(n.p,{children:["This code now collects all vehicle bounding boxes from the video and writes them into the ",(0,i.jsx)(n.code,{children:"vehicle_bounding_boxes"})," list. Besides the bbox coordinates this list also contains the tracking ID of the detected vehicle - they should stay the same frame-to-frame for every detected vehicle and serve as a unique identifier. And the score - how confident is the model that this bbox acutally contains a vehicle with calues from ",(0,i.jsx)(n.code,{children:"0"}),"-",(0,i.jsx)(n.code,{children:"1"}),":"]}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"[[762.6422729492188, 614.1869506835938, 1121.368408203125, 911.6900024414062, 1.0, 0.9254793524742126], [1196.008056640625, 635.3404541015625, 1526.3975830078125, 828.6062622070312, 2.0, 0.8488578200340271], [1672.98193359375, 613.9304809570312, 1912.382080078125, 819.3222045898438, 3.0, 0.5385741591453552], [758.7203369140625, 612.6467895507812, 1119.0892333984375, 917.7677612304688, 1.0, 0.925308883190155], [1195.9505615234375, 635.4146118164062, 1527.97412109375, 830.3245239257812, 2.0, 0.865635871887207], [1692.5439453125, 613.0050659179688, 1917.7542724609375, 819.2852783203125, 3.0, 0.5493771433830261], [754.7435302734375, 612.3658447265625, 1115.0045166015625, 919.653076171875, 1.0, 0.9127519130706787], [1194.00341796875, 634.9168090820312, 1527.029541015625, 832.383544921875, 2.0, 0.8814489841461182], [1688.8155517578125, 615.6485595703125, 1920.0, 812.7891235351562, 3.0, 0.6132197976112366], [752.8799438476562, 611.2362060546875, 1111.976318359375, 920.200927734375, 1.0, 0.9137689471244812], [1192.805908203125, 634.3713989257812, 1526.1273193359375, 832.46337890625, 2.0, 0.8671290278434753], [1680.4443359375, 616.384033203125, 1920.0, 813.3687744140625, 3.0, 0.6371273994445801], [750.9274291992188, 611.5806884765625, 1110.2657470703125, 915.3110961914062, 1.0, 0.9381350874900818], [1189.63916015625, 634.7803955078125, 1525.4072265625, 833.2440185546875, 2.0, 0.888615071773529], [1669.8206787109375, 616.796142578125, 1920.0, 808.6288452148438, 3.0, 0.5068169236183167], [748.747802734375, 609.5638427734375, 1109.0101318359375, 912.808837890625, 1.0, 0.9158740639686584], [1187.832275390625, 634.11328125, 1524.633056640625, 832.628173828125, 2.0, 0.8583219647407532], [1659.7103271484375, 615.9025268554688, 1920.0, 823.25048828125, 3.0, 0.7755634784698486], [745.1077270507812, 609.5160522460938, 1107.8214111328125, 912.8062133789062, 1.0, 0.9354495406150818], [1186.91455078125, 634.5582885742188, 1524.004150390625, 832.4244995117188, 2.0, 0.8758277297019958], [1650.2227783203125, 613.749267578125, 1920.0, 828.9586791992188, 3.0, 0.7407982349395752], [742.2940673828125, 610.4445190429688, 1106.597900390625, 912.6227416992188, 1.0, 0.9281387329101562], [1186.1158447265625, 634.223876953125, 1523.3406982421875, 832.6515502929688, 2.0, 0.8710047006607056], [1638.47705078125, 614.6183471679688, 1919.968017578125, 833.5314331054688, 3.0, 0.8480165600776672], [741.3974609375, 610.8768920898438, 1105.543701171875, 912.5601806640625, 1.0, 0.9410984516143799], [1185.1246337890625, 633.4691162109375, 1523.3682861328125, 832.612060546875, 2.0, 0.8842733502388], [1627.5872802734375, 616.9085693359375, 1919.9117431640625, 829.2400512695312, 3.0, 0.85666424036026], [741.3576049804688, 610.9183959960938, 1103.5601806640625, 914.4734497070312, 1.0, 0.9404377937316895], [1183.273681640625, 633.708984375, 1522.5953369140625, 833.3422241210938, 2.0, 0.8721591234207153], [1618.3934326171875, 619.4539794921875, 1919.864013671875, 827.6344604492188, 3.0, 0.8759608864784241]]"})}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Using the ",(0,i.jsx)(n.code,{children:"save_crop()"})," function shows me that the first 10 frames of my video contain three different cars:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"YOLOv8 License Plate Detection",src:t(841616).Z+"",width:"651",height:"533"})}),"\n",(0,i.jsx)(n.h3,{id:"step-2-implementing-the-license-plate-detection",children:"STEP 2 Implementing the License Plate Detection"}),"\n",(0,i.jsx)(n.p,{children:"Use the bounding box for each vehicle and use the number plate detector model to try to find the corresponding plate within in the confinement of those boxes."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# read video by index\nvideo = cv.VideoCapture(videos[0])\n\nret = True\nframe_number = -1\nvehicles = [2,3,5]\n\n# read the 10 first frames\nwhile ret:\n frame_number += 1\n ret, frame = video.read()\n\n if ret and frame_number < 10:\n \n # vehicle detector\n detections = coco_model.track(frame, persist=True)[0]\n for detection in detections.boxes.data.tolist():\n x1, y1, x2, y2, track_id, score, class_id = detection\n if int(class_id) in vehicles and score > 0.5:\n vehicle_bounding_boxes = []\n vehicle_bounding_boxes.append([x1, y1, x2, y2, track_id, score])\n for bbox in vehicle_bounding_boxes:\n print(bbox)\n roi = frame[int(y1):int(y2), int(x1):int(x2)]\n # debugging check if bbox lines up with detected vehicles (should be identical to save_crops() above\n # cv.imwrite(str(track_id) + '.jpg', roi)\n \n # license plate detector for region of interest\n license_plates = np_model(roi)[0]\n # check every bounding box for a license plate\n for license_plate in license_plates.boxes.data.tolist():\n plate_x1, plate_y1, plate_x2, plate_y2, plate_score, _ = license_plate\n # verify detections\n print(license_plate, 'track_id: ' + str(bbox[4]))\n plate = roi[int(plate_y1):int(plate_y2), int(plate_x1):int(plate_x2)]\n cv.imwrite(str(track_id) + '.jpg', plate)\n \nvideo.release()\n"})}),"\n",(0,i.jsx)(n.p,{children:"By using the tracking ID I can make sure that every license plate - as seen above the video contained several instances of the same 3 cars - is only returned ones:"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"YOLOv8 License Plate Detection",src:t(173943).Z+"",width:"704",height:"271"})}),"\n",(0,i.jsx)(n.h3,{id:"step-3-preprocess-license-plates",children:"STEP 3 Preprocess License Plates"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# read video by index\nvideo = cv.VideoCapture(videos[0])\n\nret = True\nframe_number = -1\nvehicles = [2,3,5]\n\n# read the 10 first frames\nwhile ret:\n frame_number += 1\n ret, frame = video.read()\n\n if ret and frame_number < 100:\n \n # vehicle detector\n detections = coco_model.track(frame, persist=True)[0]\n for detection in detections.boxes.data.tolist():\n x1, y1, x2, y2, track_id, score, class_id = detection\n if int(class_id) in vehicles and score > 0.5:\n vehicle_bounding_boxes = []\n vehicle_bounding_boxes.append([x1, y1, x2, y2, track_id, score])\n for bbox in vehicle_bounding_boxes:\n print(bbox)\n roi = frame[int(y1):int(y2), int(x1):int(x2)]\n \n # license plate detector for region of interest\n license_plates = np_model(roi)[0]\n # process license plate\n for license_plate in license_plates.boxes.data.tolist():\n plate_x1, plate_y1, plate_x2, plate_y2, plate_score, _ = license_plate\n # crop plate from region of interest\n plate = roi[int(plate_y1):int(plate_y2), int(plate_x1):int(plate_x2)]\n # de-colorize\n plate_gray = cv.cvtColor(plate, cv.COLOR_BGR2GRAY)\n # posterize\n _, plate_treshold = cv.threshold(plate_gray, 64, 255, cv.THRESH_BINARY_INV)\n cv.imwrite(str(track_id) + '_gray.jpg', plate_gray)\n cv.imwrite(str(track_id) + '_thresh.jpg', plate_treshold)\n \nvideo.release()\n"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"YOLOv8 License Plate Detection",src:t(560549).Z+"",width:"658",height:"289"})}),"\n",(0,i.jsx)(n.h3,{id:"step-4-read-license-plates",children:"STEP 4 Read License Plates"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# Initialize the OCR reader\nreader = easyocr.Reader(['en'], gpu=True)\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"def read_license_plate(license_plate_crop):\n detections = reader.readtext(license_plate_crop)\n\n for detection in detections:\n bbox, text, score = detection\n\n text = text.upper().replace(' ', '')\n \n return text, score\n\n return None, None\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"def write_csv(results, output_path):\n \n with open(output_path, 'w') as f:\n f.write('{},{},{},{},{},{},{},{}\\n'.format(\n 'frame_number', 'track_id', 'car_bbox', 'car_bbox_score',\n 'license_plate_bbox', 'license_plate_bbox_score', 'license_plate_number',\n 'license_text_score'))\n\n for frame_number in results.keys():\n for track_id in results[frame_number].keys():\n print(results[frame_number][track_id])\n if 'car' in results[frame_number][track_id].keys() and \\\n 'license_plate' in results[frame_number][track_id].keys() and \\\n 'number' in results[frame_number][track_id]['license_plate'].keys():\n f.write('{},{},{},{},{},{},{},{}\\n'.format(\n frame_number,\n track_id,\n '[{} {} {} {}]'.format(\n results[frame_number][track_id]['car']['bbox'][0],\n results[frame_number][track_id]['car']['bbox'][1],\n results[frame_number][track_id]['car']['bbox'][2],\n results[frame_number][track_id]['car']['bbox'][3]\n ),\n results[frame_number][track_id]['car']['bbox_score'],\n '[{} {} {} {}]'.format(\n results[frame_number][track_id]['license_plate']['bbox'][0],\n results[frame_number][track_id]['license_plate']['bbox'][1],\n results[frame_number][track_id]['license_plate']['bbox'][2],\n results[frame_number][track_id]['license_plate']['bbox'][3]\n ),\n results[frame_number][track_id]['license_plate']['bbox_score'],\n results[frame_number][track_id]['license_plate']['number'],\n results[frame_number][track_id]['license_plate']['text_score'])\n )\n f.close()\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"results = {}\n\n# read video by index\nvideo = cv.VideoCapture(videos[0])\n\nret = True\nframe_number = -1\nvehicles = [2,3,5]\n\n# read the 10 first frames\nwhile ret:\n frame_number += 1\n ret, frame = video.read()\n\n if ret and frame_number < 100:\n results[frame_number] = {}\n \n # vehicle detector\n detections = coco_model.track(frame, persist=True)[0]\n for detection in detections.boxes.data.tolist():\n x1, y1, x2, y2, track_id, score, class_id = detection\n if int(class_id) in vehicles and score > 0.5:\n vehicle_bounding_boxes = []\n vehicle_bounding_boxes.append([x1, y1, x2, y2, track_id, score])\n for bbox in vehicle_bounding_boxes:\n print(bbox)\n roi = frame[int(y1):int(y2), int(x1):int(x2)]\n \n # license plate detector for region of interest\n license_plates = np_model(roi)[0]\n # process license plate\n for license_plate in license_plates.boxes.data.tolist():\n plate_x1, plate_y1, plate_x2, plate_y2, plate_score, _ = license_plate\n # crop plate from region of interest\n plate = roi[int(plate_y1):int(plate_y2), int(plate_x1):int(plate_x2)]\n # de-colorize\n plate_gray = cv.cvtColor(plate, cv.COLOR_BGR2GRAY)\n # posterize\n _, plate_treshold = cv.threshold(plate_gray, 64, 255, cv.THRESH_BINARY_INV)\n \n # OCR\n np_text, np_score = read_license_plate(plate_treshold)\n # if plate could be read write results\n if np_text is not None:\n results[frame_number][track_id] = {\n 'car': {\n 'bbox': [x1, y1, x2, y2],\n 'bbox_score': score\n },\n 'license_plate': {\n 'bbox': [plate_x1, plate_y1, plate_x2, plate_y2],\n 'bbox_score': plate_score,\n 'number': np_text,\n 'text_score': np_score\n }\n }\n\nwrite_csv(results, './results.csv')\nvideo.release()\n"})}),"\n",(0,i.jsx)(n.p,{children:"This returns a list with bounding box metrics for every frame with a successful detection:"}),"\n",(0,i.jsx)("br",{}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"frame_number"}),(0,i.jsx)(n.th,{children:"track_id"}),(0,i.jsx)(n.th,{children:"car_bbox"}),(0,i.jsx)(n.th,{children:"license_plate_bbox"}),(0,i.jsx)(n.th,{children:"license_plate_bbox_score"}),(0,i.jsx)(n.th,{children:"license_number"}),(0,i.jsx)(n.th,{children:"license_number_score"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0"}),(0,i.jsx)(n.td,{children:"1.0"}),(0,i.jsx)(n.td,{children:"[760.1986694335938 614.2100830078125 1123.09130859375 914.9498901367188]"}),(0,i.jsx)(n.td,{children:"[110.20427703857422 133.25326538085938 238.5574493408203 175.96791076660156]"}),(0,i.jsx)(n.td,{children:"0.7692280411720276"}),(0,i.jsx)(n.td,{children:"BPG6UXN"}),(0,i.jsx)(n.td,{children:"0.7290849695998655"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1"}),(0,i.jsx)(n.td,{children:"1.0"}),(0,i.jsx)(n.td,{children:"[758.7349243164062 612.4984741210938 1122.470458984375 919.1956787109375]"}),(0,i.jsx)(n.td,{children:"[109.57369995117188 134.78448486328125 238.8947296142578 179.6195831298828]"}),(0,i.jsx)(n.td,{children:"0.767607569694519"}),(0,i.jsx)(n.td,{children:"BP6EUXN"}),(0,i.jsx)(n.td,{children:"0.27891552972114064"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2"}),(0,i.jsx)(n.td,{children:"1.0"}),(0,i.jsx)(n.td,{children:"[755.6078491210938 612.161865234375 1118.7542724609375 920.3657836914062]"}),(0,i.jsx)(n.td,{children:"[109.76798248291016 134.661376953125 239.85276794433594 180.43345642089844]"}),(0,i.jsx)(n.td,{children:"0.7666334509849548"}),(0,i.jsx)(n.td,{children:"BP66UXN"}),(0,i.jsx)(n.td,{children:"0.7696779876170268"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3"}),(0,i.jsx)(n.td,{children:"1.0"}),(0,i.jsx)(n.td,{children:"[753.9749755859375 611.0296630859375 1115.607421875 920.6179809570312]"}),(0,i.jsx)(n.td,{children:"[109.80683898925781 134.79702758789062 239.79380798339844 180.0568389892578]"}),(0,i.jsx)(n.td,{children:"0.7609436511993408"}),(0,i.jsx)(n.td,{children:"BPG6UXN"}),(0,i.jsx)(n.td,{children:"0.5947437696221942"})]})]})]}),"\n",(0,i.jsx)(n.h3,{id:"step-5-clean-up-license-plate-format",children:"STEP 5 Clean-Up License Plate Format"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# Mapping dictionaries for character conversion\n# characters that can easily be confused can be \n# verified by their location - an `O` in a place\n# where a number is expected is probably a `0`\ndict_char_to_int = {'O': '0',\n 'I': '1',\n 'J': '3',\n 'A': '4',\n 'G': '6',\n 'S': '5'}\n\ndict_int_to_char = {'0': 'O',\n '1': 'I',\n '3': 'J',\n '4': 'A',\n '6': 'G',\n '5': 'S'}\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"def license_complies_format(text):\n # True if the license plate complies with the format, False otherwise.\n if len(text) != 7:\n return False\n\n if (text[0] in string.ascii_uppercase or text[0] in dict_int_to_char.keys()) and \\\n (text[1] in string.ascii_uppercase or text[1] in dict_int_to_char.keys()) and \\\n (text[2] in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] or text[2] in dict_char_to_int.keys()) and \\\n (text[3] in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] or text[3] in dict_char_to_int.keys()) and \\\n (text[4] in string.ascii_uppercase or text[4] in dict_int_to_char.keys()) and \\\n (text[5] in string.ascii_uppercase or text[5] in dict_int_to_char.keys()) and \\\n (text[6] in string.ascii_uppercase or text[6] in dict_int_to_char.keys()):\n return True\n else:\n return False\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"def format_license(text):\n license_plate_ = ''\n mapping = {0: dict_int_to_char, 1: dict_int_to_char, 4: dict_int_to_char, 5: dict_int_to_char, 6: dict_int_to_char,\n 2: dict_char_to_int, 3: dict_char_to_int}\n for j in [0, 1, 2, 3, 4, 5, 6]:\n if text[j] in mapping[j].keys():\n license_plate_ += mapping[j][text[j]]\n else:\n license_plate_ += text[j]\n\n return license_plate_\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"def read_license_plate(license_plate_crop):\n detections = reader.readtext(license_plate_crop)\n\n for detection in detections:\n bbox, text, score = detection\n\n text = text.upper().replace(' ', '')\n\n # verify that text is conform to a standard license plate\n if license_complies_format(text):\n # bring text into the default license plate format\n return format_license(text), score\n\n return None, None\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"results = {}\n\n# read video by index\nvideo = cv.VideoCapture(videos[1])\n\nret = True\nframe_number = -1\nvehicles = [2,3,5]\n\n# read the entire video\nwhile ret:\n ret, frame = video.read()\n frame_number += 1\n if ret:\n results[frame_number] = {}\n \n # vehicle detector\n detections = coco_model.track(frame, persist=True)[0]\n for detection in detections.boxes.data.tolist():\n x1, y1, x2, y2, track_id, score, class_id = detection\n if int(class_id) in vehicles and score > 0.5:\n vehicle_bounding_boxes = []\n vehicle_bounding_boxes.append([x1, y1, x2, y2, track_id, score])\n for bbox in vehicle_bounding_boxes:\n print(bbox)\n roi = frame[int(y1):int(y2), int(x1):int(x2)]\n \n # license plate detector for region of interest\n license_plates = np_model(roi)[0]\n # process license plate\n for license_plate in license_plates.boxes.data.tolist():\n plate_x1, plate_y1, plate_x2, plate_y2, plate_score, _ = license_plate\n # crop plate from region of interest\n plate = roi[int(plate_y1):int(plate_y2), int(plate_x1):int(plate_x2)]\n # de-colorize\n plate_gray = cv.cvtColor(plate, cv.COLOR_BGR2GRAY)\n # posterize\n _, plate_treshold = cv.threshold(plate_gray, 64, 255, cv.THRESH_BINARY_INV)\n \n # OCR\n np_text, np_score = read_license_plate(plate_treshold)\n # if plate could be read write results\n if np_text is not None:\n results[frame_number][track_id] = {\n 'car': {\n 'bbox': [x1, y1, x2, y2],\n 'bbox_score': score\n },\n 'license_plate': {\n 'bbox': [plate_x1, plate_y1, plate_x2, plate_y2],\n 'bbox_score': plate_score,\n 'number': np_text,\n 'text_score': np_score\n }\n }\n\nwrite_csv(results, './results.csv')\nvideo.release()\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"results = pd.read_csv('./results.csv')\n\n# show results for tracking ID `1` - sort by OCR prediction confidence\nresults[results['track_id'] == 1.].sort_values(by='license_text_score', ascending=False)\n"})}),"\n",(0,i.jsxs)("div",{children:[(0,i.jsxs)("table",{children:[(0,i.jsx)("thead",{children:(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{}),(0,i.jsx)("th",{children:"frame_number"}),(0,i.jsx)("th",{children:"track_id"}),(0,i.jsx)("th",{children:"car_bbox"}),(0,i.jsx)("th",{children:"car_bbox_score"}),(0,i.jsx)("th",{children:"license_plate_bbox"}),(0,i.jsx)("th",{children:"license_plate_bbox_score"}),(0,i.jsx)("th",{children:"license_plate_number"}),(0,i.jsx)("th",{children:"license_text_score"})]})}),(0,i.jsxs)("tbody",{children:[(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:"175"}),(0,i.jsx)("td",{children:"839"}),(0,i.jsx)("td",{children:"298.0"}),(0,i.jsx)("td",{children:"[775.8486938476562 504.52294921875 1095.532592..."}),(0,i.jsx)("td",{children:"0.925278"}),(0,i.jsx)("td",{children:"[102.20135498046875 212.2305908203125 218.7746..."}),(0,i.jsx)("td",{children:"0.752586"}),(0,i.jsx)("td",{children:"NL60GXO"}),(0,i.jsx)("td",{children:"0.988261"})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:"29"}),(0,i.jsx)("td",{children:"50"}),(0,i.jsx)("td",{children:"298.0"}),(0,i.jsx)("td",{children:"[846.99609375 521.3043823242188 1254.532104492..."}),(0,i.jsx)("td",{children:"0.931958"}),(0,i.jsx)("td",{children:"[133.1925506591797 275.73577880859375 280.6121..."}),(0,i.jsx)("td",{children:"0.740573"}),(0,i.jsx)("td",{children:"NL60GXO"}),(0,i.jsx)("td",{children:"0.966773"})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:"146"}),(0,i.jsx)("td",{children:"799"}),(0,i.jsx)("td",{children:"298.0"}),(0,i.jsx)("td",{children:"[810.77734375 522.0484008789062 1130.535888671..."}),(0,i.jsx)("td",{children:"0.914011"}),(0,i.jsx)("td",{children:"[102.2442626953125 215.42474365234375 218.7385..."}),(0,i.jsx)("td",{children:"0.752845"}),(0,i.jsx)("td",{children:"NL60GXO"}),(0,i.jsx)("td",{children:"0.953542"})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:"147"}),(0,i.jsx)("td",{children:"800"}),(0,i.jsx)("td",{children:"298.0"}),(0,i.jsx)("td",{children:"[810.7708740234375 521.808349609375 1130.57128..."}),(0,i.jsx)("td",{children:"0.912922"}),(0,i.jsx)("td",{children:"[102.17294311523438 215.99032592773438 218.767..."}),(0,i.jsx)("td",{children:"0.754186"}),(0,i.jsx)("td",{children:"NL60GXO"}),(0,i.jsx)("td",{children:"0.953522"})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:"284"}),(0,i.jsx)("td",{children:"1337"}),(0,i.jsx)("td",{children:"298.0"}),(0,i.jsx)("td",{children:"[843.4232788085938 523.5321044921875 1257.2657..."}),(0,i.jsx)("td",{children:"0.910718"}),(0,i.jsx)("td",{children:"[163.98861694335938 263.2216796875 300.1403503..."}),(0,i.jsx)("td",{children:"0.757695"}),(0,i.jsx)("td",{children:"NL60GXO"}),(0,i.jsx)("td",{children:"0.934405"})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:"..."}),(0,i.jsx)("td",{children:"..."}),(0,i.jsx)("td",{children:"..."}),(0,i.jsx)("td",{children:"..."}),(0,i.jsx)("td",{children:"..."}),(0,i.jsx)("td",{children:"..."}),(0,i.jsx)("td",{children:"..."}),(0,i.jsx)("td",{children:"..."}),(0,i.jsx)("td",{children:"..."})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:"191"}),(0,i.jsx)("td",{children:"1010"}),(0,i.jsx)("td",{children:"298.0"}),(0,i.jsx)("td",{children:"[865.4359741210938 488.0260009765625 1060.5764..."}),(0,i.jsx)("td",{children:"0.861625"}),(0,i.jsx)("td",{children:"[65.1905517578125 123.86817169189453 130.26571..."}),(0,i.jsx)("td",{children:"0.761225"}),(0,i.jsx)("td",{children:"KL60GZO"}),(0,i.jsx)("td",{children:"0.043224"})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:"355"}),(0,i.jsx)("td",{children:"1462"}),(0,i.jsx)("td",{children:"298.0"}),(0,i.jsx)("td",{children:"[685.121826171875 514.077880859375 888.8001098..."}),(0,i.jsx)("td",{children:"0.832969"}),(0,i.jsx)("td",{children:"[92.80020904541016 110.36637115478516 153.4690..."}),(0,i.jsx)("td",{children:"0.739499"}),(0,i.jsx)("td",{children:"HI60CIO"}),(0,i.jsx)("td",{children:"0.036080"})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:"392"}),(0,i.jsx)("td",{children:"2306"}),(0,i.jsx)("td",{children:"298.0"}),(0,i.jsx)("td",{children:"[462.48388671875 512.8485717773438 933.4752197..."}),(0,i.jsx)("td",{children:"0.929456"}),(0,i.jsx)("td",{children:"[121.44440460205078 294.94183349609375 269.183..."}),(0,i.jsx)("td",{children:"0.722692"}),(0,i.jsx)("td",{children:"WL60YNL"}),(0,i.jsx)("td",{children:"0.031725"})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:"517"}),(0,i.jsx)("td",{children:"2684"}),(0,i.jsx)("td",{children:"298.0"}),(0,i.jsx)("td",{children:"[856.17333984375 514.7470703125 1043.54296875 ..."}),(0,i.jsx)("td",{children:"0.887135"}),(0,i.jsx)("td",{children:"[59.788631439208984 116.58961486816406 126.729..."}),(0,i.jsx)("td",{children:"0.738799"}),(0,i.jsx)("td",{children:"HL60CKD"}),(0,i.jsx)("td",{children:"0.030968"})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:"515"}),(0,i.jsx)("td",{children:"2682"}),(0,i.jsx)("td",{children:"298.0"}),(0,i.jsx)("td",{children:"[852.64794921875 512.9298095703125 1043.665893..."}),(0,i.jsx)("td",{children:"0.893880"}),(0,i.jsx)("td",{children:"[61.673500061035156 121.25975799560547 129.707..."}),(0,i.jsx)("td",{children:"0.746015"}),(0,i.jsx)("td",{children:"ML60CZO"}),(0,i.jsx)("td",{children:"0.016401"})]})]})]}),(0,i.jsx)("p",{children:"488 rows \xd7 8 columns"})]}),"\n",(0,i.jsx)(n.h3,{id:"step-6-visualize-the-results",children:"STEP 6 Visualize the Results"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"def draw_border(img, top_left, bottom_right, color=(0, 255, 0), thickness=6, line_length_x=200, line_length_y=200):\n x1, y1 = top_left\n x2, y2 = bottom_right\n\n cv.line(img, (x1, y1), (x1, y1 + line_length_y), color, thickness) #-- top-left\n cv.line(img, (x1, y1), (x1 + line_length_x, y1), color, thickness)\n\n cv.line(img, (x1, y2), (x1, y2 - line_length_y), color, thickness) #-- bottom-left\n cv.line(img, (x1, y2), (x1 + line_length_x, y2), color, thickness)\n\n cv.line(img, (x2, y1), (x2 - line_length_x, y1), color, thickness) #-- top-right\n cv.line(img, (x2, y1), (x2, y1 + line_length_y), color, thickness)\n\n cv.line(img, (x2, y2), (x2, y2 - line_length_y), color, thickness) #-- bottom-right\n cv.line(img, (x2, y2), (x2 - line_length_x, y2), color, thickness)\n\n return img\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# read video by index\nvideo = cv.VideoCapture(videos[1])\n\n# get video dims\nframe_width = int(video.get(3))\nframe_height = int(video.get(4))\nsize = (frame_width, frame_height)\n\n# Define the codec and create VideoWriter object\nfourcc = cv.VideoWriter_fourcc(*'DIVX')\nout = cv.VideoWriter('./outputs/processed.avi', fourcc, 20.0, size)\n\n# reset video before you re-run cell below\nframe_number = -1\nvideo.set(cv.CAP_PROP_POS_FRAMES, 0)\n"})}),"\n",(0,i.jsx)(n.p,{children:"True"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"ret = True\n\nwhile ret:\n ret, frame = video.read()\n frame_number += 1\n if ret:\n df_ = results[results['frame_number'] == frame_number]\n for index in range(len(df_)):\n # draw car\n vhcl_x1, vhcl_y1, vhcl_x2, vhcl_y2 = ast.literal_eval(df_.iloc[index]['car_bbox'].replace('[ ', '[').replace(' ', ' ').replace(' ', ' ').replace(' ', ','))\n \n draw_border(\n frame, (int(vhcl_x1), int(vhcl_y1)),\n (int(vhcl_x2), int(vhcl_y2)), (0, 255, 0),\n 12, line_length_x=200, line_length_y=200)\n \n # draw license plate\n plate_x1, plate_y1, plate_x2, plate_y2 = ast.literal_eval(df_.iloc[index]['license_plate_bbox'].replace('[ ', '[').replace(' ', ' ').replace(' ', ' ').replace(' ', ','))\n\n # region of interest\n roi = frame[int(vhcl_y1):int(vhcl_y2), int(vhcl_x1):int(vhcl_x2)]\n cv.rectangle(roi, (int(plate_x1), int(plate_y1)), (int(plate_x2), int(plate_y2)), (0, 0, 255), 6)\n\n # write detected number\n (text_width, text_height), _ = cv.getTextSize(\n df_.iloc[index]['license_plate_number'],\n cv.FONT_HERSHEY_SIMPLEX,\n 2,\n 6)\n\n cv.putText(\n frame,\n df_.iloc[index]['license_plate_number'],\n (int((vhcl_x2 + vhcl_x1 - text_width)/2), int(vhcl_y1 - text_height)),\n cv.FONT_HERSHEY_SIMPLEX,\n 2,\n (0, 255, 0),\n 6\n )\n\n out.write(frame)\n frame = cv.resize(frame, (1280, 720))\n\nout.release()\nvideo.release()\n"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"processed.webp",src:t(504471).Z+"",width:"1788",height:"476"})})]})}function h(e={}){const{wrapper:n}={...(0,s.ah)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(o,{...e})}):o(e)}},603905:(e,n,t)=>{t.d(n,{ah:()=>d});var i=t(667294);function s(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function c(e){for(var n=1;n=0||(s[t]=e[t]);return s}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}var a=i.createContext({}),d=function(e){var n=i.useContext(a),t=n;return e&&(t="function"==typeof e?e(n):c(c({},n),e)),t},o={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},h=i.forwardRef((function(e,n){var t=e.components,s=e.mdxType,r=e.originalType,a=e.parentName,h=l(e,["components","mdxType","originalType","parentName"]),p=d(t),x=s,m=p["".concat(a,".").concat(x)]||p[x]||o[x]||r;return t?i.createElement(m,c(c({ref:n},h),{},{components:t})):i.createElement(m,c({ref:n},h))}));h.displayName="MDXCreateElement"},553629:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/confusion_matrix_normalized-fbac84dd568e663b76bfd3d0b78cdd50.webp"},841616:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/detected_cars-67d3bcb7e8683698e567b2e004a23c0d.webp"},173943:(e,n,t)=>{t.d(n,{Z:()=>i});const i="data:image/webp;base64,UklGRiYKAABXRUJQVlA4IBoKAABwVwCdASrAAg8BPpFIo0ylpKOiIbYoOLASCWlu4XX6JzHVMk70J/f52+n/t4e6df4T2QOjJ9ZD/Q0FPpF94ymyXuBfbJ33/Yv9T4wf3D/beHvrMWmHK1zNv75+tHtD6Ufq32Cv5P/X/x57iH7S+0V+1QQXAFm0UZS79sHmFSucNEu/bB5hUrnDRLv2weYUf2MPoLniBQZBc8QKDILniBQZBc8QKDILniBQZBc8QKDILniBQZBc8QKDILniBQZBc8QKDILniBQZBc8QKDILniBQZBc8QKDILniBQZBc8QKDILniBQZBc8QKDILniBQZBc8QKDILniBQZBc8QKDILniBQZBc8O/ioO3Q7aS+ooCpJXCjWFucdOWu6fn55KXT1egvUGiCzBiE2Lr2tzeh2YVagkJtZBYozNtVRbcGcFsyhYYIKXm2gNmKMgueIFBkFzw7+qxxYGqbLPglqI4UDOFMyguRac2a76K+hCs/KvFtCAQg6JXN/ms8WoBckvoOyUaeZ4V0jYssanVFbEOTZ17NtqYgyUWgi3DmUEJrOmnP+coQXWaWTsvZ4rGfDo6z/YFfCnGA15WeaJj9zxAoLfB0Oh4Qh2AJqjD9hzdgHROt6qWw2TOAVAzM8VoYb2WLKWpgLsWvTTSiTaXk4t0nl0mwu1Omb8WZS31o2Yrg+xg7ipVjGxEJL9KMgueSVhjsLRJpyxi/g5JN0IUwOJ3Avq9nizvnnWUGMnn+vc/UL40+i2XoxqZesIKUW202b/1her/aWHqcoirARl7VNsHizy8Xs8WeXi9nizy8Xs8WgPovZ4s8vF7PFnl4vZ4s8vF7PFnl4vZ4s8vF7PFnl4vZ4s8vF7PFnl4vZ4s8vF7PFnl4vZ4s8vF7PFnl4vZ4s8vF7PFnl4vZ4s8vF7PFnl4vZ4s8vF7PFnl4vZ4s8vF7PFnl4vZ4syAA/vnRSQFWW8uYhlrVZ2ASTQLHgBUAQAAAAAAAAAAcX9kN2qf1wSuzei9JNNKEU40ZhhfywsjCv1pLbaj4in5IVrNuVkcgKjt7X9gLPasGwwu3F0Vep/aPQN/UVqzt2iaICIHQlqOZg1f+M0yfHPrTwgcmEhi5PsLrBfGIb8Dm5s0HZYmt2aVSB+0ndRrDgTNpm4rnqWgvBUamkUckNvcQAechgkS9ns1Gytkj9Rxp4ETjvGrU4w8KkA8Ei2LIYSMlg8kMXojCgJzOEhtrHAvMCrSzahFYs++tRFKEnCAHdnbnJ1o8RxiWgX+42Y06X9EsBWb8kC9MES5nDOd7RFr1MllvdSOXyaSgLrh+xOJVMtcf8Ms/KRTmXKU7llQ3s6eX+gVLY+Cw5YtjKarFBoMUow90I/7QK0jPiYkGy9ILdVTEnCFX+MmzlkNaSf/Ln5LSSfQzXMJqeDJmZm7i+cNJKIRLBN4abaoBQNe8jcGXCt7W+TvF6A72N7LrUCrezmwzriNnNKp95U73SNWzbxaqzyvyRDmH1pjntzB1qvXXOkdhUw7Rljm+NCWq6HJ+7vbae1hqWeTH40oG7MQB1hy2kyh+CkOJB/Ka87YlOXHDq0WoJo1ck6ZryuupI9rM9ARpVHLSmbCCL+YxqSqJSX1UOL4X9WzNhW4VDhIinqcUEcuhwkGj07SJ+or2avui3PdpuBSowiJtMqXrebKC8mPhYVlcqIIyRf9Vz1JH5WK0lvbd2ROQNsuEJCV0a8KLR4DjR+REEwrTnA2/vCBrRPhiOJheZc9eycB7g0blYTMCqts6pm4RBl5wc9GeY4hWi3pqV5Nt+BH+OFxMZGUMARVS30tuP+3CEQ7xgrCZn1AWbK28HS1BM97aTpaJBSIEz3IbhfA8E5E9zr/GJ4sKQvipvEa4ykVUi52y8FhjSwJwRwTcMJck9s7SyML+ZDIq+MmgpKQg/OKMUfVJY1m8ovHx88IdH3CTqk4ICbmFAw4VXGjTgw+6pvpOsCRmhOpuBjaNazY9QAyQpnmon5PhH6SfMV+bBdNvoBkM9X4UzyLyGwlzryheVaX5EllZ9jShAhM/lW0GnpVfxlLip1LUbnum/9fXu9lPEhwZVF3ZE5N+yYJlmArM+q8RONQh6O8tYkqHkYnNgqd2KX5KmkVZxEzz2Dxp1wXPSBud8Oh2ccTIYHxj0gerui5luf00nFH8cCBoJE5k1KzjUPPedGml3/FBMC/BVr5GgV0vwdm1xAcWgiAbsLOTnK1DFrlxHfYkfJT8YZ52V2BGYMV8zEF67CA21tEowyxswvVvws92ThlimabhsVmKPis7EyOqMfAj7BG18E/HXQ3b6OZ3hLGamjWabKc38Ul8ksRpqd8eY39ergu7jqAKZESSkO4B2dmr4/pm3+qQtwZBi52mOYnX8yp7n1lGp/RhPGvCZqR0QvRXIgzLdMPDLd0EBGRP6uAg7H/SghhtFSzK6t2OXz5WaJ2Fyj1mOMtgYJa0XD+i2GDLt+E2sbxUn5srJrgJIcc0822qVWTADZkLlWxY5NR3z8QrY27BnOGFGBphniSvkwA1eX3rsRHzeo3xq/me/akv9eovaUbQb2ZLestnXNukmOvzDloOC111cexGFWg39K1znvXtcyo8+bVijw1y+vUBJYbwZugK2iP4aC0jBQTBpRB1tnX6yzr9O8/8dGG+TVcn1gq3z1ICLtjtdEZwRtZSBW6bb03eiOal7QZdimxh/bEcH+lSH4z6a12ySTM3zqqmK8329XUAV8v/Pcjye5LqB/cIrDUU/1473HbTLMNFydjqjdEUI2Q8zff82XA6f3bCBf3POZLoTWnRO+ICDzblvLrc7pWy1COR7SxkeflDr9zNnwD859AZGS/d4Zd2vs9FDeGxijfJsNngxN+17u2YAi7AtsUDNLDqaPPjH2ccaWjAFUliy02JSDCegc29S/cv1MfpZdX2I/xs0ZbkDHc1SIs8Hn9o82qA83GanV9fYVLSfcftbDF/6VIfjPprXavFiKkcCGgV5vt6uoAr5f+e5Hk9yXUD+4RWGop/rx3uIcBnXNfT5knw052WO5Lx1KrGP4rZZp9ybxbwkvGMwAZlElTdOB3KvXzazRMRkd4qltGojOsZpKoVF9+7OsIb4eoLyKM6zumaycPGHLIw7PJ7XGxsHMsjkCy9LXmFVIznmOOaeE/7qvSK9+7GTrKLsPsOphd18VJxMQZsgeP38r70Jkib7IFfd3V807BJThXHcOLzaG0cs6DBNMI8M2amebVATGEYkeFfQQ4iau4GqT7z8ouhSt9I0wJE7yy5uskWGj5R5CpMtT/Pcjye5LqB/cIrDUU/1473EOAzrmvp8ywE3RFCNkPM33/Fmjv7thAv7nnMl0JrTonfEBB5ty4XEj/MBVN8iLsMf9x9/WgVAzfjGT/0BkZL93hkMHrnoiVOILVqyrqD54ecajo3O4LXQKiBmlh1NHn0aglgAAAAAAAAAAAAAAAAAAA="},560549:(e,n,t)=>{t.d(n,{Z:()=>i});const i="data:image/webp;base64,UklGRs4ZAABXRUJQVlA4IMIZAACQjwCdASqSAiEBPpFIoEulpKMhpDPIqLASCWlu4XYBEazcIfGBKU+EP2niCQ1eif/zdO/0ic8t6Mf+H0o//U9if+m/9T2APPM9Vj/cenH6AH//4HrzD/V+2z+3fbX6a+S/1T7besX/X+NDqb/oehn8r+0n5r/Cfu18Y/5P/F/lR/SfVH4vfxnqEerf8n/XvXo7I989rXmHezfyv/Q/3f95fNq/kPRv6wf7H3Af57/Tf9N6k/3f/veUPQF/lv94/zn98/IL6Xv4v/l/5P8kvdb9N/s3/l/kI/oH9H/5P959sz2JeiL+w//pFh5UM3YRiCMQRiCMQRiCMQRiCMQRhplAi1zBZ/YBNJcq8DuBzU3YZBpEELbYmW/qS0z91EwpMCmX7EYAXdcm+FpymYj8QsHIzCbgf6uCKrG8BMP3r8UXVr5cY7f7I3bpVn+NlzVHg7fFvDCkZfNVZPTjqoqX854GChU/YaGbnJ49GVENrj2+NVF9XIOGGrj3AfMTAM4o9GHsMwjGEjsEthFFKFS8pgk1EQPMv/QncVHlT7fIX5TTz0ThLWHwtSDGPfGpzmhm6tq2c6HPkd+WMG/qPFE/Yxg+nAdrRDTS1/EbqIv4jA1cgTGn6QJQhx7/V1xUI2slXPeEfFxhrCtu5ZN/uM6OXHR6F4LcqAUyxyVXkzZO/X/WW5PbIjxfP8nGOmMdQsfP5BFZqmy4WvZBKDI4Y2w2vFgbHHOQyMe/visbzYdmHYYvGmMOe9r7Wfuvvp9w7i4D0pVPGRb/WG/JMywJBKWn9OoMSGjRfeJlYyLqVZ5UM21vUCrsxe5uJahowKDriAo5qSlox/YRiAnD9Dx+bba8L7O7DO2vQhpoyA0EPyoZtrLC7T+txFpR8aZXJkt3sE0xctx3FbTPaZ9CMfA7jHcZredGIIxBH1qwU43G2HtM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pm1DqL0D01kFmDh7I/zzzMATG2HtM9pntM9pntM9pcZHjgizPotyBK5ewSIkZDU4iQoR9DjDU0Ts2tnJRGXB8Ilum79j4l3CWLySIIXThQGwtM9pno+Zv1FkrIv8Drf9eoyvEkPNZuknqdrkJXuKa4+K2j7dyUsUB53wspQsuQ88XiYzAdv9W0YQv1G09vCloUwOPIHcY7f2+z846ooyKF8ti2U3vHF7dhGICmPsRc0JLfcnxLfDcAbjpvMa0fqZCn66AL3CaMDN2BOG8YFwZafFxglvzGtmUgT4rDwlA05RFdxjuAzDjIPbjxEDb2a/iskiHyMUJ05xvgitYgjEEHRIC0/b2VQpexe4DoVUCJzFCnJntLeCes5mDPFNaoR+IaFUqN3uctcYghauWoADPQL0cj3JA5zH+BYnHkJmrPaZ7pMw7ewjEEfWw556/wO4zLuoyNsPaZ7TPaZ7TPaZ7TPaZ7TPaZ7TPQAAD+/4wjc4iAABW1/NFTuGdjiejaFS47zf3QP28/n2Joxu9e7UxEK3pMuYNGgg88DthTlda3i5vYY/U5XeK5LmTIlPa6XcjnIQItF5xW84Swac9Ip4luO91+t/00v0mj71fNXuahQpTn5Fd+EbS7c1GIK6+X6DMUXo1dUokzJJQFwvP3P1z7jxP1E+PWDWFewe3MmKm3b+UjO4Ph7nUfVG94n8qP8PYt41xgFg5OscejweFR1pDmLyZLtglIYiHUSxE2+NvGlHv/VwYFi4CG5h14FUIF94jMF/Rp8NBReGeJMk9iJlMFL/uuKE1qg1q8YXd47BLPGXcYOw+5gDFwOI+VqXP+YYZuGEqOPvdzVeS+z5RPB8gV30yzkJ/PAFwEM/Ss5PbahnGPRs/U+A/w9i3joa5ev6vVM1WdGcTPkpUKiPxVvf/xNAZJzoVPy8mzHuYaP6KN9hwYS3ygrg0aimADOhoY5jSLtG7+a+2B6vBch9P8OdVMEU8in1bayNCsthsISHRQ4+oXDzxsSk7NOLnPvNXMCOO/htF2TmAI9iCRz++r9ElwTUN02wAnTrUAS7TZWK3PqqYXA6Ez0+pbR2/BXZIJ39+aVbPaLpOTo5ua2oQHOmlbe7rJG+rt29hHl+v+Db8Bf2/4AJ0Ny//5FtinkL3LFifug+1JOLhCRN6Pd/PbITvi1SJa/Y5DrMcAfUDfSrAnqy6M88sA0AU/pk8FQ4APOIWDCqXzu8eI1cKUbH5vx3ibBHHu+u9590AWZ5uH2kkbmQTj9FRSvB3/z4n1KoGj7JzruwH6POMYH7+NnQs89JU6EvfWxynZWIMZZ3yUI+NP2nOSlXoP88QH2icgDceQUoza/A3CJoBgYjVu6IJ5kcl9fXwnC8imjgsgvMDrRtv1U4AvgeAYiXCGOty5Dqg2qdKrvcFM14xfmNUrnZm7t2pc8bZVAkVkDUGWQXa87F5FM2d40w/AuDuprIXr6Ol8S0l14jjl/rCp+44Eft+OH/5tUjvYf3S/pFgEFeGNCJjlUMkh6aH4Xw9wTL3oBOx8iVuygARR9RGEiDGLiN3JOZoL2kad0EfqNqfqFS0DB+xoTbxMsDTTw6a84k5xQfm+DIgmZp228SyYbzYBWdTcBL+ZRl7jIGNPTjpOIrP9eyPjzqdA02AI+BpSrWjPjn6PG9qg90xxz5ZFiRnRx9wgotkC2qghTsi8i9sNgKg5eaftrvpDoJWTKMmaRdcDxMejUqAqpa/H8HeTfl0+JD0a7ID9DJu9pph0/zXV+zb3gFdyxNEmd1kur8slgBV9duNse5U+h9OjrIaIcJ1JaFh1Cs42BApVf4z573sc25zZg0+Hv2dZkIVrWTKnaGIN+LR9YMLTJ8ZMvUVSJKfY2CFj/tWsd+FU32DsA/16JpMUY3wXMzzHPhxQdGHa1eIq4zPp5l6oweJfHwfxsOXONSVXmGmQvmMqQfvlmzXBWztWyTQbD/CtMBm1EBhwyvs4G9eQ0Yv4mbPqZlfNo5ClxMwXk80diD8hKROfNAmkcbH/GOMPpTaUwtAwQzwuvRrkL8GTmUDxRXaSi80qmpaxE7otGqNCNMIot6icQa44kv0BVZAV2X5t0BZWjqv5ZG7Or/Z9J8BceMh8jfVvCQeG9XfKAW7vtD0uObqovXKmfaP72FG+ccC/BzpQVBSXeU/Ji4Bs+cvHg3BI3BvsiVdV7x3hszKc9JzfapQMe7LLJ8UjcnrmVsgV1OdXpDtxZ+Hpb39cmwHUAND/mCe/C9dtpRbgzejOAeMkJ20gNIYBt4z4GsqrcjjB8OvZnuWvF5mB+2gBTETd106UCY3xFdXu4sVkJ/VvZenvVvPFfIGsOXbMrvKzn3XRz+isiuUYyBvgWe+YY59pNjLU0bQfxThRrd6RodckJkc6PER6b3e7mX74QCyBnYCU8Zw9lZ8pJWjRGoKW1hCuXmBkM/BX2555mHbWRzen/QYd8pxdQlEdYQob5PCFzlLVxWIRybX+t8f6m3rfNNt6MlPifn0YCixJfAFZ4CEp0Z3cskVuVYVWJvBI3mtRX1GJ6uwIYq3mDfIgYwZE2RR5nT/ZNUvqwFqJhHk35+XFSJfUT2izVNLbFIHvVe6NZul/xbq35FLhFoXOGt+/m2/oZ/Ti7VU5qJK4hjLqxLMdIjw3zW1frJPVif5JLZlpnjyvP4B74Fxdy+uVXFaU/8kAJE6h2kHlXmj+h9J374rjStZZ/+QmU3uhsRxYuufDzPQltFz33E7hl+xUGk2ou2f6d7f+v7TLSJJFZhi00IAHu7Xrdx7TZv15Km1Kf78TVCizJF7iA9RpSWdQoeI7axANFL9rr4oQLUjQJ8RjAlDIVmU7PeHTW58xZxMCqo3iL5lOHZXuhd5oDBPFijaBVVTvSYsVAFMb9ZaGcw1ot5cmWMDhXQAa1wHcAFFqraP+3yImJ2Q9xIipFLrwP/tkcOx2KR5SQ0wj6ttnI25L4xVO0AFYXczHRAzN97Xz/gC/WjP/VTBYaWTjwu+ptX2Hb4EcutGLwh8nxVXsUQQq5XT2D/BVt5Wpt/WHiM37Ujy/rZkqrc1wkKfK7mnmu67F+5PFd+wQULXPO/NPIFyrkBW+cH/9ebmoYUdNXVuwWBMILiHFzLNU09TJtItdTeKnxHZv2rzKhdj7I3Y024i5P2oxYca1ELqPqd28qRqs/W17bkhQvNCMXktG3J3cY4+ayrcCz04jH8yWL4csJbnWCq9zgCDTMU0c6j/Gs4KOSPAm8UfqwWKNnWj3zZ8e4wvJA/zp4VldYhY20/JsKHjyjgDm6HAAs9w4ne5OJK4nVE2hWAQy8KjUak27Euv9IactVq6gLgtGwk+FpPel3ArvGlgtXySWvg8uVrh2qxtPUKetFQziPFVQ8hUTJH5a4+E0iu+k4UvJT90o/fNmOoAH/OdYuu8L12716+hNrSH3WwN0tiv7XpRdUN2xBTrXkLQ33i3ooBkbPyIiaAp3mr/JUg3jlRbA42IaPoNv/Mwd2qIRLkQUtMeDlKzPn7NyX6pG0CVDXbMpwfQyF/Noc3pp3xYrxNQCQDvQEfbCnlo50vJczkuCdBd2Pw9u1awkWeF+PpWTDHpJyF3/Wy3lpAkf8cVePvK9LN5udAVsIKRAFhHSeOFh1sC72qbCWBfutkZIdlY78cNoOyGXWCoFiALGM95C0nSmcMZ9qLVHMj6wl+v+8loM7QHMa/H/9pT3yn4nNPwd4rj8LppgwhZKITRXMONwlZPW7YTpqko2WTSvc4beWEMLTdvzwqZXWs+hHWaIGjBd+Du2g+HuGBCDBRYxCN1lOV7lF5z8aUPEA9dMovQj5jMPob3ZU6Bi7nxAlqxt9pBs6Tse+zkwOr3XVkyhnk4kAjA3J73P+TJmPLEvVBkk+X8NlauaUgSfcctGTj7QPW+YH1hSLkdyBO0NlBTmDtbbvLiz1imDedAYdnZy4eJK3AmD/vZLh4+WXF8NlV6lKkiij9zLFpkZWkKCma3dwHigTnlAFKqDpfAejMaFxFWH3GEfxgKLjQKcJYh7gB15Kf+YATuX5j2addKQo0KNmLfAJ2XVS3E8FdBEq7+4QugzJgGtW2f8+dDt9UUXRRCPxONAYUaGr5o1ozTs9Y73fRUFuZSWl/JWFwSvVGYoVxg7fD2N8yHfYAqtZwWhl4fKehT2uaHF2UlBKKRmV6Y+3zlWk8ruhIef9IhEPWX7pFl2TGd0JEpC3FU0j6s/BYM4FgR+ngFRpcbpLIWV5iUmjraMyy7b2vvftP8XcSeLyIOFDOwwNAqnfjK85baUc7V0qoZZYYqeYwwKnDDuwKajwrA6hZxah8C0fMre88WXnRciN04Cgi8tJChySTP9nJQ+Q3ARaT1Vii5RFfMR2XHNT5X6BisAz9d/amexuM3C0JrQGmF8yBbZTZbcIGxrBWR8wn6Sd02yAU+7w1PaHsbPPjX9aBSgKeHxjl5a2qiic4ilXfdQuKNYlAib+1y9A0mIyOhoibV+Ls4BASEA7gUVdWeu3YHafKIkFrV6wd8IxSxkMLnzIlhRvRhZrAxJgMG/Ezy08IyZFwnznBQYv69PqaZ8G9KFJhTuB5VKZetS1kYaKWK1JSB0UF29E6aRstf7i1oAxlNNJDzjz5f1T58Zhfjr9WuxAPJfmndACfx0sTDjc63IXjHYmOMhri6Rbie92qzV6qEVllCi6TgBclf8qItFzO6IkDgmDDZ35r4/y1Muo4ktht5VesVcgq614V87hqyI4vqVgU0jabSnYmhbqlBA1o0p2KPVyWilJrmxkrsRcCffsdPSBgpvC6zFMM7szIc1wrKAGivFk6nYZDx6/lFIfnFX/NIjdwVE1kClrqEn++A/o9sCJBRkBvRVTnfBF5PjoTLgAAAAAAAAAAAAAAAQxRznfHihkYIejQWZEiQaIOI9WZjTs26mWal6OBvMgKkBZGZs00AAfiXzz9oSQtDTR5f3UDjenk/AFzcJXydAr7/dAdwECuVpx660s7uT1/cGQ08VrHl0wPF/KftR+7ZckGpaBy6OkOsRnZRgAEDlsxMpRJ98W/ZMlfjcMMuZ2kyLhcYBwACMl1Nl3+7fikhtSW94XePW0Zgqgwk0glxc8ynfhv84kNrVuzb6Yn2ErJp1CJjH3p6TXzBr886pqjahie8/pJd3Gk5sZSFCLvxQbZP9AIczC5HKzigaoNKnPQLxQPqqXPnZSR72b/j30z4XDU4yHvzN+gDJD1MGvoFlpPAGzcgKZsYVk6RDdlgDNDioUSFiByWgPuo/lefWqun5Dc+T4oPK6ID8XGjsuhm6m/GAZR0k3u3szwV5D0OOM0V7NuH7wO6fg7uq1HfLR+xbbydG131my+TqsmYFdKSOF1Gd6b0KtFi+Cxbbz564crfOTRTa1sd2a1u+bCz4TdsEtJOM+I6Qt9VE8uA+1r4R9FEWyzGHZ5F+Qr/bE/Ty9qbV1qEJtw2AoZRL61PpflT55vdd5jrjXOmIyhij+TXIK+/qsuNf/AjWlq74sMLh2QXmohCmQBSQihkjAlEMVoeKKp7gHdvaXcBEeAp4dziH2iCM3vt6bHn/IP4KSFg1K1fSBcaeZXRrpp0zqrETMQj6A2rYDlTWz608OKZaC8Tpwgy55L6ABdKynbVosgbmfHH9BIn3UTtu+RunwkyRU9NY5PGVzMYHJfkgaK5nVVtqRiPfVrbe/FR7ZxlrCmWqJ8RXXUCXcOH1nF70Px/O+Kq5YwEQf2z23AGOHXdDpGh/N4kO3Vrev3Q5McBVl+WdhQHuuKMednOqcXXv5TdNdarIiQgwiUnxgSw8mmtN1sSs+suFUmKKPOp5wDdDp1eHvYuT2NHcvKaWcWmLknZvuqYtCXJ3qj5GyJ0gAMQS9EDeAQ5wyMt21y22usxI49HKnYD7azB0eKG/kG6+wei5MVn980smOpt9OHV8dfLaXCEFjIpDxzv5iavccYjeoRl5f4adVCfAJe5+Q7xJN+HWlXRYSDOmCo+7cHaUoL0UQDhgIamCb3Rgz+igOMRm3DsJvkIrpsisq9Fyj+f+bb88U1OM9+xvL7gfgS154fjC69GQtLWd0clUBjdi8/2TxR5izx2U+G+K7pgf+wKI4u3RX6IEmQvj/L7u9BFVs9I++TTNp23mKnqFealHYYPAQC21mKxSAYeJsXQ5tb7pY9airSiadjDG4edpG+xyL0bjxitZkugsElxj8Pstcl2qb6WEyvnIi6vVHIe7Nh5CuWVcmSBTkb3sa4kPvRQnvZnzYdMH2nkpVx/9yBTP2oEb86TGb14nHfcnuL9f85XwPOlp1AczEWNwC8cxJChoGRlqCKQKTo6edevyqt3kIG6h55IthR3cUGxkZzWhRdcmWmUwC7L73+TTBK/u+aAE09asfSzi9ZH1mCBcATysIJQZM1yuBv6YluDJAXWBt6NDkLsZ9Iz+SMG6dTjHKc3sUztXLw2QhzWTm6Ekrsi7GmhTLEGRZn8Z0PPes8nE4+P+m5hPcFZEytgLuZ4SjsKbS3IKT6rxFGQnQW0QpurIMUDMbqyXWikqEtDPnuvw2Zs/+mmeS47ziLT7+3DWk2AfK/w9TixVUHhzIfxhq5DFEc98WMrjHj/oxbZckBVw47G4o6/waX/AXpp6zn6hdoxbvL6JTolmimScJ+fsx166OglZ06z2F67dwcWJXyMmZeeX8OhBUoupRtXsJXYhPw3IObxRP3xdacPR1lO/t2k0QfADQ0YQeYA9AuWYj5Yh21K1WFqvpt2VIdpWodwOO2O5e8Y25CmTueN1GvbOrwOkrDqAA9O2+fP3Pk30RPNpVLRsPiecgXerCIYIW8GXi+e+VWfifKG7JFI9ShCPJZgJH/IEY9yodPe51xeldylQCWQQdzJupWf9rzqYriyIYlOfgvF9q5ysNtTfVuVqDDwraDdx45kinmhiGvsFhL9f95FBgp6+DfOeZnZYicuV9bt3imrpwcQZb/6WUdsJiIJoFDrQ21UGxJ2csYgcW75soZOUF5wzfPDrFpwB7q1TEnyqlpGLfCJTcKz+yOMAZP1K2+OEzHq09qmg6vNjRv6dNFk7q4n64EMLsKBc8E6/dKQc64j6eXqqNFYDGrZOjke4ZQnUnGSUvCGH7bUfm9KvOn8WRZHy2rv4SpOu9LR1iTzQ9kA61e5sjh+lUBdlP1Kd0LjKOtbKsoiFiQhxeCJElgMeyZsa27rq7t3C1WQPwfN4XwK3lMFupuGDpA6exxpM5i/+Sc2xScm2Tz8emMdlsgzzppDPUivEgLXI5Voum4KbOJIDKdrBzrJTUGA+3KfujIXAnztSnsStJ5XdCQ8/7wxeIk8+8OsOw/XpzI5ocBo5V9KuNUINhkuKhpvqSELfNdghSNsIxLS8GnG12P4EzOBsr7GGoLoo//kBQW6/MTzjw0noDN6nVktqzG+8WlwWlY1TpqmhhDKXw4NnW7ljA0fZ8Eg6gdT2p+ElN6d7DJjRGJGINoX7zFhP686zizNqhB+Xegt+xvyCo/Fe5t8jgCMepo3t132UGo9MWsepIPOM6ZzG+wXWQ6TXDbbdJMn1MRwDkpIMeA5SZGTWNRn1vuYHzfRW4angK7y0+I4ycQewgneYZNbS/RiouRwjRPUdQ+eu3YHafKGBYInBNeAoVZ1MVNLSsnOr5/HVSTMMi+9OEWAOm+Ga0P32bKhQ0wcc9Z7u74gQFpbRzk224096DMjmgnLGF+c8/8icEpjgNczmkzHHGmUoIOAAAAAAAAA="},653493:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/photo-kt443t6d_64hdh43hfh6dgjdfhg4_d-864be48f76a28ed6a3e155f7ab51bc74.jpg"},504471:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/processed-5751cab7b691c0c9b52cee8356bce340.webp"},587708:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/results-5cfd13401f48fa7e53cc0ef357764aff.webp"},579768:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/uk_dash-f7d953ee634f62578a3b703c543ac2d7.webp"},526491:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/uk_dash_np-ae2f529ea3d1e10b8d1fe5656f1e641a.webp"},766487:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/validation_batch-a388f384f76d8c8f5215752148bda3be.webp"}}]); \ No newline at end of file diff --git a/assets/js/63b220b9.de471200.js b/assets/js/63b220b9.de471200.js deleted file mode 100644 index 921c101f3a..0000000000 --- a/assets/js/63b220b9.de471200.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmikes_dev_notebook=self.webpackChunkmikes_dev_notebook||[]).push([[15970],{260824:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var i=t(785893),s=t(603905);const r={sidebar_position:4110,slug:"2023-09-15",title:"YOLOv8 License Plate Detection",authors:"mpolinowski",tags:["Python","Machine Learning","PyTorch"],description:"Using the YOLOv8 Object Tracker in Combination with EasyOCR"},c="YOLOv8 License Plate Detection",l={id:"IoT-and-Machine-Learning/ML/2023-09-15--yolo8-tracking-and-ocr/index",title:"YOLOv8 License Plate Detection",description:"Using the YOLOv8 Object Tracker in Combination with EasyOCR",source:"@site/docs/IoT-and-Machine-Learning/ML/2023-09-15--yolo8-tracking-and-ocr/index.md",sourceDirName:"IoT-and-Machine-Learning/ML/2023-09-15--yolo8-tracking-and-ocr",slug:"/IoT-and-Machine-Learning/ML/2023-09-15--yolo8-tracking-and-ocr/2023-09-15",permalink:"/docs/IoT-and-Machine-Learning/ML/2023-09-15--yolo8-tracking-and-ocr/2023-09-15",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/IoT-and-Machine-Learning/ML/2023-09-15--yolo8-tracking-and-ocr/index.md",tags:[{label:"Python",permalink:"/docs/tags/python"},{label:"Machine Learning",permalink:"/docs/tags/machine-learning"},{label:"PyTorch",permalink:"/docs/tags/py-torch"}],version:"current",sidebarPosition:4110,frontMatter:{sidebar_position:4110,slug:"2023-09-15",title:"YOLOv8 License Plate Detection",authors:"mpolinowski",tags:["Python","Machine Learning","PyTorch"],description:"Using the YOLOv8 Object Tracker in Combination with EasyOCR"},sidebar:"tutorialSidebar",previous:{title:"YOLOv8 Nightshift",permalink:"/docs/IoT-and-Machine-Learning/ML/2023-09-17--yolo8-nightshift/2023-09-17"},next:{title:"Scikit-Learn ML Model Explainability",permalink:"/docs/IoT-and-Machine-Learning/ML/2023-09-10--model-explainability-shap/2023-09-11"}},a={},d=[{value:"Pre-Trained YOLOv8",id:"pre-trained-yolov8",level:2},{value:"Retraining YOLOv8",id:"retraining-yolov8",level:2},{value:"Improving Training Results",id:"improving-training-results",level:2},{value:"License Plate Detection",id:"license-plate-detection",level:2},{value:"STEP 1 Implementing the Car Detection",id:"step-1-implementing-the-car-detection",level:3},{value:"STEP 2 Implementing the License Plate Detection",id:"step-2-implementing-the-license-plate-detection",level:3},{value:"STEP 3 Preprocess License Plates",id:"step-3-preprocess-license-plates",level:3},{value:"STEP 4 Read License Plates",id:"step-4-read-license-plates",level:3},{value:"STEP 5 Clean-Up License Plate Format",id:"step-5-clean-up-license-plate-format",level:3},{value:"STEP 6 Visualize the Results",id:"step-6-visualize-the-results",level:3}];function o(e){const n={a:"a",blockquote:"blockquote",br:"br",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.ah)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Guangzhou, China",src:t(653493).Z+"",width:"1500",height:"871"})}),"\n",(0,i.jsx)(n.h1,{id:"yolov8-license-plate-detection",children:"YOLOv8 License Plate Detection"}),"\n",(0,i.jsxs)(n.p,{children:["Using the ",(0,i.jsx)(n.a,{href:"https://docs.ultralytics.com/tasks/detect/",children:"YOLOv8 Object Tracker"})," and ",(0,i.jsx)(n.a,{href:"https://www.jaided.ai/easyocr/",children:"EasyOCR"})," to record License Plates."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["This guide is based on the ",(0,i.jsx)(n.a,{href:"https://github.com/computervisioneng/automatic-number-plate-recognition-python-yolov8",children:"DeepSORT & EasyOCR Repository"})," by ",(0,i.jsx)(n.a,{href:"https://github.com/computervisioneng",children:"@computervisioneng"}),". But I replaced the ",(0,i.jsx)(n.a,{href:"https://github.com/abewley/sort",children:"DeepSORT Dependency"})," with the YOLOv8 included Track function."]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://github.com/mpolinowski/yolo-i-know-flowers",children:"Github Repository"})}),"\n"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"#yolov8-license-plate-detection",children:"YOLOv8 License Plate Detection"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#pre-trained-yolov8",children:"Pre-Trained YOLOv8"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#retraining-yolov8",children:"Retraining YOLOv8"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#improving-training-results",children:"Improving Training Results"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"#license-plate-detection",children:"License Plate Detection"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#step-1-implementing-the-car-detection",children:"STEP 1 Implementing the Car Detection"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#step-2-implementing-the-license-plate-detection",children:"STEP 2 Implementing the License Plate Detection"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#step-3-preprocess-license-plates",children:"STEP 3 Preprocess License Plates"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#step-4-read-license-plates",children:"STEP 4 Read License Plates"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#step-5-clean-up-license-plate-format",children:"STEP 5 Clean-Up License Plate Format"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#step-6-visualize-the-results",children:"STEP 6 Visualize the Results"})}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"import cv2 as cv\nfrom glob import glob\nimport os\nimport random\nfrom ultralytics import YOLO\n"})}),"\n",(0,i.jsx)(n.h2,{id:"pre-trained-yolov8",children:"Pre-Trained YOLOv8"}),"\n",(0,i.jsxs)(n.p,{children:["The regular YOLOv8 training weights do not contain a ",(0,i.jsx)(n.code,{children:"number_plate"})," class and cannot be used directly for a number plate detection:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# read in video paths\nvideos = glob('inputs/*.mp4')\nprint(videos)\n"})}),"\n",(0,i.jsx)(n.p,{children:"['inputs/uk_dash_1.mp4', 'inputs/uk_dash_2.mp4']"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# pick pre-trained model\nmodel_pretrained = YOLO('yolov8n.pt')\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# read video by index\nvideo = cv.VideoCapture(videos[1])\n\n# get video dims\nframe_width = int(video.get(3))\nframe_height = int(video.get(4))\nsize = (frame_width, frame_height)\n\n# Define the codec and create VideoWriter object\nfourcc = cv.VideoWriter_fourcc(*'DIVX')\nout = cv.VideoWriter('./outputs/uk_dash_2.avi', fourcc, 20.0, size)\n\n# read frames\nret = True\n\nwhile ret:\n ret, frame = video.read()\n\n if ret:\n # detect & track objects\n results = model_pretrained.track(frame, persist=True)\n\n # plot results\n composed = results[0].plot()\n\n # save video\n out.write(composed)\n\nout.release()\nvideo.release()\n"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"YOLOv8 License Plate Detection",src:t(579768).Z+"",width:"1946",height:"438"})}),"\n",(0,i.jsx)(n.h2,{id:"retraining-yolov8",children:"Retraining YOLOv8"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://universe.roboflow.com/roboflow-universe-projects/license-plate-recognition-rxg4e",children:"Dataset: Roboflow - License Plate Recognition Computer Vision Project"})}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Download the Dataset with YOLOv8 annotation and point YOLO to the ",(0,i.jsx)(n.code,{children:"data.yaml"})," file that comes with the dataset:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yml",children:"train: ../train/images\nval: ../valid/images\ntest: ../test/images\n\nnc: 1\nnames: ['License_Plate']\n\nroboflow:\n workspace: roboflow-universe-projects\n project: license-plate-recognition-rxg4e\n version: 4\n license: CC BY 4.0\n url: https://universe.roboflow.com/roboflow-universe-projects/license-plate-recognition-rxg4e/dataset/4\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:'# unzip downloaded dataset to `./datasets`\ndataset = \'datasets/data.yaml\'\n\n# load a model\n# backbone = YOLO("yolov8n.yaml") # build a new model from scratch\nbackbone = YOLO("yolov8n.pt") # load a pre-trained model (recommended for training)\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# Use the model\nresults = backbone.train(data=dataset, epochs=20) # train the model\n"})}),"\n",(0,i.jsx)(n.p,{children:"20 epochs completed in 2.530 hours.\nOptimizer stripped from runs/detect/train11/weights/last.pt, 6.2MB\nOptimizer stripped from runs/detect/train11/weights/best.pt, 6.2MB"}),"\n",(0,i.jsx)(n.p,{children:"Validating runs/detect/train11/weights/best.pt...\nUltralytics YOLOv8.0.173 \ud83d\ude80 Python-3.10.11 torch-2.0.1 CUDA:0 (NVIDIA GeForce GTX 1060 6GB, 6070MiB)\nModel summary (fused): 168 layers, 3005843 parameters, 0 gradients\nClass Images Instances Box(P R mAP50 mAP50-95): 100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 64/64 [00:17, 3.61it/s]\nall 2046 2132 0.986 0.954 0.984 0.701\nSpeed: 0.3ms preprocess, 5.1ms inference, 0.0ms loss, 0.5ms postprocess per image\nResults saved to \x1b[1mruns/detect/train11\x1b[0m"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"YOLOv8 License Plate Detection",src:t(587708).Z+"",width:"2400",height:"1200"})}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Class"}),(0,i.jsx)(n.th,{children:"Images"}),(0,i.jsx)(n.th,{children:"Instances"}),(0,i.jsx)(n.th,{children:"Box( P"}),(0,i.jsx)(n.th,{children:"R"}),(0,i.jsx)(n.th,{children:"mAP50"}),(0,i.jsx)(n.th,{children:"mAP50-95)"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"all"}),(0,i.jsx)(n.td,{children:"2046"}),(0,i.jsx)(n.td,{children:"2132"}),(0,i.jsx)(n.td,{children:"0.986"}),(0,i.jsx)(n.td,{children:"0.954"}),(0,i.jsx)(n.td,{children:"0.984"}),(0,i.jsx)(n.td,{children:"0.701"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.em,{children:"Speed: 0.3ms preprocess, 5.1ms inference, 0.0ms loss, 0.5ms postprocess per image"})}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.em,{children:"Model summary (fused): 168 layers, 3005843 parameters, 0 gradients"})}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{})]})]})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# Evaluate the model's performance on the validation set\nresults = backbone.val()\n"})}),"\n",(0,i.jsx)(n.p,{children:"Ultralytics YOLOv8.0.173 \ud83d\ude80 Python-3.10.11 torch-2.0.1 CUDA:0 (NVIDIA GeForce GTX 1060 6GB, 6070MiB)\nModel summary (fused): 168 layers, 3005843 parameters, 0 gradients\n\x1b[34m\x1b[1mval: \x1b[0mScanning /opt/app/03_object_detection_with_text_extraction_easyocr/datasets/valid/labels.cache... 2046 images, 3 backgrounds, 0 corrupt: 100%|\u2588\u2588\u2588\u2588\x1b[0m\nClass Images Instances Box(P R mAP50 mAP50-95): 100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 128/128 [00:18, 6.74it/s]\nall 2046 2132 0.986 0.954 0.984 0.701\nSpeed: 0.3ms preprocess, 5.7ms inference, 0.0ms loss, 0.6ms postprocess per image\nResults saved to \x1b[1mruns/detect/val\x1b[0m"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"YOLOv8 License Plate Detection",src:t(766487).Z+"",width:"1721",height:"925"})}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Class"}),(0,i.jsx)(n.th,{children:"Images"}),(0,i.jsx)(n.th,{children:"Instances"}),(0,i.jsx)(n.th,{children:"Box( P"}),(0,i.jsx)(n.th,{children:"R"}),(0,i.jsx)(n.th,{children:"mAP50"}),(0,i.jsx)(n.th,{children:"mAP50-95)"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"all"}),(0,i.jsx)(n.td,{children:"2046"}),(0,i.jsx)(n.td,{children:"2132"}),(0,i.jsx)(n.td,{children:"0.986"}),(0,i.jsx)(n.td,{children:"0.954"}),(0,i.jsx)(n.td,{children:"0.984"}),(0,i.jsx)(n.td,{children:"0.701"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.em,{children:"Speed: 0.3ms preprocess, 5.7ms inference, 0.0ms loss, 0.6ms postprocess per image"})}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{}),(0,i.jsx)(n.td,{})]})]})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# Perform object detection on an image using the model\nresults = backbone('inputs/cars.png')\n"})}),"\n",(0,i.jsx)(n.p,{children:"image 1/1 /opt/app/03_object_detection_with_text_extraction_easyocr/inputs/cars.png: 384x640 2 License_Plates, 35.9ms\nSpeed: 1.7ms preprocess, 35.9ms inference, 2.0ms postprocess per image at shape (1, 3, 384, 640)"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# Export the model to ONNX format\n# success = model.export(imgsz=(640, 480), format='onnx', opset=12, optimize=False, half=False)\n# Export to PyTorch format\nsuccess = backbone.export(imgsz=640, format='torchscript', optimize=False, half=False, int8=False)\n# TorchScript: export success \u2705 1.5s, saved as 'runs/detect/train11/weights/best.torchscript' (11.9 MB)\n"})}),"\n",(0,i.jsx)(n.p,{children:"Ultralytics YOLOv8.0.173 \ud83d\ude80 Python-3.10.11 torch-2.0.1 CPU (Intel Core(TM) i7-7700 3.60GHz)"}),"\n",(0,i.jsx)(n.p,{children:"\x1b[34m\x1b[1mPyTorch:\x1b[0m starting from 'runs/detect/train11/weights/best.pt' with input shape (1, 3, 640, 640) BCHW and output shape(s) (1, 5, 8400) (6.0 MB)"}),"\n",(0,i.jsx)(n.p,{children:"\x1b[34m\x1b[1mTorchScript:\x1b[0m starting export with torch 2.0.1...\n\x1b[34m\x1b[1mTorchScript:\x1b[0m export success \u2705 1.3s, saved as 'runs/detect/train11/weights/best.torchscript' (11.9 MB)"}),"\n",(0,i.jsxs)(n.p,{children:["Export complete (2.6s)\nResults saved to \x1b[1m/opt/app/03_object_detection_with_text_extraction_easyocr/runs/detect/train11/weights\x1b[0m\nPredict: yolo predict task=detect model=runs/detect/train11/weights/best.torchscript imgsz=640",(0,i.jsx)(n.br,{}),"\n","Validate: yolo val task=detect model=runs/detect/train11/weights/best.torchscript imgsz=640 data=datasets/data.yaml",(0,i.jsx)(n.br,{}),"\n","Visualize: ",(0,i.jsx)(n.a,{href:"https://netron.app",children:"https://netron.app"})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# pick pre-trained model\nnp_model = YOLO('runs/detect/train11/weights/best.torchscript')\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# read video by index\nvideo = cv.VideoCapture(videos[1])\nret, frame = video.read()\n\n# get video dims\nframe_width = int(video.get(3))\nframe_height = int(video.get(4))\nsize = (frame_width, frame_height)\n\n# Define the codec and create VideoWriter object\nfourcc = cv.VideoWriter_fourcc(*'DIVX')\nout = cv.VideoWriter('./outputs/uk_dash_np_2.avi', fourcc, 20.0, size)\n\n# read frames\nret = True\n\nwhile ret:\n ret, frame = video.read()\n\n if ret:\n # detect & track objects\n results = np_model.track(frame, persist=True)\n\n # plot results\n composed = results[0].plot()\n\n # save video\n out.write(composed)\n\nout.release()\nvideo.release()\n"})}),"\n",(0,i.jsx)(n.p,{children:"And now we have a model that is only interested in number plates:"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"YOLOv8 License Plate Detection",src:t(526491).Z+"",width:"1933",height:"391"})}),"\n",(0,i.jsx)(n.p,{children:"Though, the confusion matrix shows us that it also sees a lot of plates that do not exist - but at least it does not miss that many:"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"YOLOv8 License Plate Detection",src:t(553629).Z+"",width:"3000",height:"2250"})}),"\n",(0,i.jsx)(n.h2,{id:"improving-training-results",children:"Improving Training Results"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:'# unzip downloaded dataset to `./datasets`\ndataset = \'datasets/data.yaml\'\n\n# load a model\n# backbone = YOLO("yolov8n.yaml") # build a new model from scratch\nbackbone_small = YOLO("yolov8s.pt") # load a pre-trained model (recommended for training)\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# Use the model\nresults_medium = backbone_small.train(data=dataset, epochs=100) # train the model\n"})}),"\n",(0,i.jsx)(n.p,{children:"Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size\n57/100 4.57G 0.9052 0.3966 1.064 7 640: 100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 1324/1324 [13:43, 1.61it/s]\nClass Images Instances Box(P R mAP50 mAP50-95): 100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 64/64 [00:26, 2.38it/s]\nall 2046 2132 0.981 0.968 0.984 0.709"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# pick pre-trained model\nnp2_model = YOLO('runs/detect/train4/weights/best.pt')\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# Evaluate the model's performance on the validation set\nresults = np2_model.val()\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Ultralytics YOLOv8.0.173 \ud83d\ude80 Python-3.10.11 torch-2.0.1 CUDA:0 (NVIDIA GeForce GTX 1060 6GB, 6070MiB)\nModel summary (fused): 168 layers, 11125971 parameters, 0 gradients\nDownloading ",(0,i.jsx)(n.a,{href:"https://ultralytics.com/assets/Arial.ttf",children:"https://ultralytics.com/assets/Arial.ttf"})," to '/root/.config/Ultralytics/Arial.ttf'...\n100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 755k/755k [00:00, 2.35MB/s]\nClass Images Instances Box(P R mAP50 mAP50-95): 100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 128/128 [00:35, 3.59it/s]\nall 2046 2132 0.981 0.968 0.984 0.71\nSpeed: 0.3ms preprocess, 13.4ms inference, 0.0ms loss, 0.6ms postprocess per image\nResults saved to \x1b[1mruns/detect/val2\x1b[0m"]}),"\n",(0,i.jsx)(n.h2,{id:"license-plate-detection",children:"License Plate Detection"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"import ast\nimport cv2 as cv\nimport easyocr\nfrom glob import glob\nimport numpy as np\nimport pandas as pd\nimport string\nfrom ultralytics import YOLO\n"})}),"\n",(0,i.jsxs)(n.p,{children:["As seen during the training - the model, just using the COCO training weights, is very capable of detecting cars, trucks and buses. But number plates seem to be a bit harder - the model often confuses street signs or just basic backgound noise as a car registration plate. The positive is that it rarely misses a plate.\n",(0,i.jsx)(n.a,{href:"https://www.youtube.com/watch?v=uVOHMFqILEAox",children:"https://www.youtube.com/watch?v=uVOHMFqILEAox"}),"."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# regular pre-trained yolov8 model for car recognition\n# coco_model = YOLO('yolov8n.pt')\ncoco_model = YOLO('yolov8s.pt')\n# yolov8 model trained to detect number plates\nnp_model = YOLO('runs/detect/train4/weights/best.pt')\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# read in test video paths\nvideos = glob('inputs/*.mp4')\nprint(videos)\n"})}),"\n",(0,i.jsx)(n.p,{children:"['inputs/uk_dash_1.mp4', 'inputs/uk_dash_2.mp4']"}),"\n",(0,i.jsx)(n.h3,{id:"step-1-implementing-the-car-detection",children:"STEP 1 Implementing the Car Detection"}),"\n",(0,i.jsx)(n.p,{children:"Get the bounding boxes of all vehicles in your video recording with prediction confidence score and object tracking ID"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# read video by index\nvideo = cv.VideoCapture(videos[1])\n\nret = True\nframe_number = -1\n# all vehicle class IDs from the COCO dataset (car, motorbike, truck) https://docs.ultralytics.com/datasets/detect/coco/#dataset-yaml\nvehicles = [2,3,5]\nvehicle_bounding_boxes = []\n\n# read the 10 first frames\nwhile ret:\n frame_number += 1\n ret, frame = video.read()\n\n if ret and frame_number < 10:\n # use track() to identify instances and track them frame by frame\n detections = coco_model.track(frame, persist=True)[0]\n # save cropped detections\n # detections.save_crop('outputs')\n # print nodel predictions for debugging\n # print(results)\n\n for detection in detections.boxes.data.tolist():\n # print detection bounding boxes for debugging\n # print(detection)\n x1, y1, x2, y2, track_id, score, class_id = detection\n # I am only interested in class IDs that belong to vehicles\n if int(class_id) in vehicles and score > 0.5:\n vehicle_bounding_boxes.append([x1, y1, x2, y2, track_id, score])\n\n# print found bounding boxes for debugging\nprint(vehicle_bounding_boxes)\nvideo.release()\n"})}),"\n",(0,i.jsxs)(n.p,{children:["This code now collects all vehicle bounding boxes from the video and writes them into the ",(0,i.jsx)(n.code,{children:"vehicle_bounding_boxes"})," list. Besides the bbox coordinates this list also contains the tracking ID of the detected vehicle - they should stay the same frame-to-frame for every detected vehicle and serve as a unique identifier. And the score - how confident is the model that this bbox acutally contains a vehicle with calues from ",(0,i.jsx)(n.code,{children:"0"}),"-",(0,i.jsx)(n.code,{children:"1"}),":"]}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"[[762.6422729492188, 614.1869506835938, 1121.368408203125, 911.6900024414062, 1.0, 0.9254793524742126], [1196.008056640625, 635.3404541015625, 1526.3975830078125, 828.6062622070312, 2.0, 0.8488578200340271], [1672.98193359375, 613.9304809570312, 1912.382080078125, 819.3222045898438, 3.0, 0.5385741591453552], [758.7203369140625, 612.6467895507812, 1119.0892333984375, 917.7677612304688, 1.0, 0.925308883190155], [1195.9505615234375, 635.4146118164062, 1527.97412109375, 830.3245239257812, 2.0, 0.865635871887207], [1692.5439453125, 613.0050659179688, 1917.7542724609375, 819.2852783203125, 3.0, 0.5493771433830261], [754.7435302734375, 612.3658447265625, 1115.0045166015625, 919.653076171875, 1.0, 0.9127519130706787], [1194.00341796875, 634.9168090820312, 1527.029541015625, 832.383544921875, 2.0, 0.8814489841461182], [1688.8155517578125, 615.6485595703125, 1920.0, 812.7891235351562, 3.0, 0.6132197976112366], [752.8799438476562, 611.2362060546875, 1111.976318359375, 920.200927734375, 1.0, 0.9137689471244812], [1192.805908203125, 634.3713989257812, 1526.1273193359375, 832.46337890625, 2.0, 0.8671290278434753], [1680.4443359375, 616.384033203125, 1920.0, 813.3687744140625, 3.0, 0.6371273994445801], [750.9274291992188, 611.5806884765625, 1110.2657470703125, 915.3110961914062, 1.0, 0.9381350874900818], [1189.63916015625, 634.7803955078125, 1525.4072265625, 833.2440185546875, 2.0, 0.888615071773529], [1669.8206787109375, 616.796142578125, 1920.0, 808.6288452148438, 3.0, 0.5068169236183167], [748.747802734375, 609.5638427734375, 1109.0101318359375, 912.808837890625, 1.0, 0.9158740639686584], [1187.832275390625, 634.11328125, 1524.633056640625, 832.628173828125, 2.0, 0.8583219647407532], [1659.7103271484375, 615.9025268554688, 1920.0, 823.25048828125, 3.0, 0.7755634784698486], [745.1077270507812, 609.5160522460938, 1107.8214111328125, 912.8062133789062, 1.0, 0.9354495406150818], [1186.91455078125, 634.5582885742188, 1524.004150390625, 832.4244995117188, 2.0, 0.8758277297019958], [1650.2227783203125, 613.749267578125, 1920.0, 828.9586791992188, 3.0, 0.7407982349395752], [742.2940673828125, 610.4445190429688, 1106.597900390625, 912.6227416992188, 1.0, 0.9281387329101562], [1186.1158447265625, 634.223876953125, 1523.3406982421875, 832.6515502929688, 2.0, 0.8710047006607056], [1638.47705078125, 614.6183471679688, 1919.968017578125, 833.5314331054688, 3.0, 0.8480165600776672], [741.3974609375, 610.8768920898438, 1105.543701171875, 912.5601806640625, 1.0, 0.9410984516143799], [1185.1246337890625, 633.4691162109375, 1523.3682861328125, 832.612060546875, 2.0, 0.8842733502388], [1627.5872802734375, 616.9085693359375, 1919.9117431640625, 829.2400512695312, 3.0, 0.85666424036026], [741.3576049804688, 610.9183959960938, 1103.5601806640625, 914.4734497070312, 1.0, 0.9404377937316895], [1183.273681640625, 633.708984375, 1522.5953369140625, 833.3422241210938, 2.0, 0.8721591234207153], [1618.3934326171875, 619.4539794921875, 1919.864013671875, 827.6344604492188, 3.0, 0.8759608864784241]]"})}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Using the ",(0,i.jsx)(n.code,{children:"save_crop()"})," function shows me that the first 10 frames of my video contain three different cars:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"YOLOv8 License Plate Detection",src:t(841616).Z+"",width:"651",height:"533"})}),"\n",(0,i.jsx)(n.h3,{id:"step-2-implementing-the-license-plate-detection",children:"STEP 2 Implementing the License Plate Detection"}),"\n",(0,i.jsx)(n.p,{children:"Use the bounding box for each vehicle and use the number plate detector model to try to find the corresponding plate within in the confinement of those boxes."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# read video by index\nvideo = cv.VideoCapture(videos[0])\n\nret = True\nframe_number = -1\nvehicles = [2,3,5]\n\n# read the 10 first frames\nwhile ret:\n frame_number += 1\n ret, frame = video.read()\n\n if ret and frame_number < 10:\n \n # vehicle detector\n detections = coco_model.track(frame, persist=True)[0]\n for detection in detections.boxes.data.tolist():\n x1, y1, x2, y2, track_id, score, class_id = detection\n if int(class_id) in vehicles and score > 0.5:\n vehicle_bounding_boxes = []\n vehicle_bounding_boxes.append([x1, y1, x2, y2, track_id, score])\n for bbox in vehicle_bounding_boxes:\n print(bbox)\n roi = frame[int(y1):int(y2), int(x1):int(x2)]\n # debugging check if bbox lines up with detected vehicles (should be identical to save_crops() above\n # cv.imwrite(str(track_id) + '.jpg', roi)\n \n # license plate detector for region of interest\n license_plates = np_model(roi)[0]\n # check every bounding box for a license plate\n for license_plate in license_plates.boxes.data.tolist():\n plate_x1, plate_y1, plate_x2, plate_y2, plate_score, _ = license_plate\n # verify detections\n print(license_plate, 'track_id: ' + str(bbox[4]))\n plate = roi[int(plate_y1):int(plate_y2), int(plate_x1):int(plate_x2)]\n cv.imwrite(str(track_id) + '.jpg', plate)\n \nvideo.release()\n"})}),"\n",(0,i.jsx)(n.p,{children:"By using the tracking ID I can make sure that every license plate - as seen above the video contained several instances of the same 3 cars - is only returned ones:"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"YOLOv8 License Plate Detection",src:t(173943).Z+"",width:"704",height:"271"})}),"\n",(0,i.jsx)(n.h3,{id:"step-3-preprocess-license-plates",children:"STEP 3 Preprocess License Plates"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# read video by index\nvideo = cv.VideoCapture(videos[0])\n\nret = True\nframe_number = -1\nvehicles = [2,3,5]\n\n# read the 10 first frames\nwhile ret:\n frame_number += 1\n ret, frame = video.read()\n\n if ret and frame_number < 100:\n \n # vehicle detector\n detections = coco_model.track(frame, persist=True)[0]\n for detection in detections.boxes.data.tolist():\n x1, y1, x2, y2, track_id, score, class_id = detection\n if int(class_id) in vehicles and score > 0.5:\n vehicle_bounding_boxes = []\n vehicle_bounding_boxes.append([x1, y1, x2, y2, track_id, score])\n for bbox in vehicle_bounding_boxes:\n print(bbox)\n roi = frame[int(y1):int(y2), int(x1):int(x2)]\n \n # license plate detector for region of interest\n license_plates = np_model(roi)[0]\n # process license plate\n for license_plate in license_plates.boxes.data.tolist():\n plate_x1, plate_y1, plate_x2, plate_y2, plate_score, _ = license_plate\n # crop plate from region of interest\n plate = roi[int(plate_y1):int(plate_y2), int(plate_x1):int(plate_x2)]\n # de-colorize\n plate_gray = cv.cvtColor(plate, cv.COLOR_BGR2GRAY)\n # posterize\n _, plate_treshold = cv.threshold(plate_gray, 64, 255, cv.THRESH_BINARY_INV)\n cv.imwrite(str(track_id) + '_gray.jpg', plate_gray)\n cv.imwrite(str(track_id) + '_thresh.jpg', plate_treshold)\n \nvideo.release()\n"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"YOLOv8 License Plate Detection",src:t(560549).Z+"",width:"658",height:"289"})}),"\n",(0,i.jsx)(n.h3,{id:"step-4-read-license-plates",children:"STEP 4 Read License Plates"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# Initialize the OCR reader\nreader = easyocr.Reader(['en'], gpu=True)\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"def read_license_plate(license_plate_crop):\n detections = reader.readtext(license_plate_crop)\n\n for detection in detections:\n bbox, text, score = detection\n\n text = text.upper().replace(' ', '')\n \n return text, score\n\n return None, None\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"def write_csv(results, output_path):\n \n with open(output_path, 'w') as f:\n f.write('{},{},{},{},{},{},{},{}\\n'.format(\n 'frame_number', 'track_id', 'car_bbox', 'car_bbox_score',\n 'license_plate_bbox', 'license_plate_bbox_score', 'license_plate_number',\n 'license_text_score'))\n\n for frame_number in results.keys():\n for track_id in results[frame_number].keys():\n print(results[frame_number][track_id])\n if 'car' in results[frame_number][track_id].keys() and \\\n 'license_plate' in results[frame_number][track_id].keys() and \\\n 'number' in results[frame_number][track_id]['license_plate'].keys():\n f.write('{},{},{},{},{},{},{},{}\\n'.format(\n frame_number,\n track_id,\n '[{} {} {} {}]'.format(\n results[frame_number][track_id]['car']['bbox'][0],\n results[frame_number][track_id]['car']['bbox'][1],\n results[frame_number][track_id]['car']['bbox'][2],\n results[frame_number][track_id]['car']['bbox'][3]\n ),\n results[frame_number][track_id]['car']['bbox_score'],\n '[{} {} {} {}]'.format(\n results[frame_number][track_id]['license_plate']['bbox'][0],\n results[frame_number][track_id]['license_plate']['bbox'][1],\n results[frame_number][track_id]['license_plate']['bbox'][2],\n results[frame_number][track_id]['license_plate']['bbox'][3]\n ),\n results[frame_number][track_id]['license_plate']['bbox_score'],\n results[frame_number][track_id]['license_plate']['number'],\n results[frame_number][track_id]['license_plate']['text_score'])\n )\n f.close()\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"results = {}\n\n# read video by index\nvideo = cv.VideoCapture(videos[0])\n\nret = True\nframe_number = -1\nvehicles = [2,3,5]\n\n# read the 10 first frames\nwhile ret:\n frame_number += 1\n ret, frame = video.read()\n\n if ret and frame_number < 100:\n results[frame_number] = {}\n \n # vehicle detector\n detections = coco_model.track(frame, persist=True)[0]\n for detection in detections.boxes.data.tolist():\n x1, y1, x2, y2, track_id, score, class_id = detection\n if int(class_id) in vehicles and score > 0.5:\n vehicle_bounding_boxes = []\n vehicle_bounding_boxes.append([x1, y1, x2, y2, track_id, score])\n for bbox in vehicle_bounding_boxes:\n print(bbox)\n roi = frame[int(y1):int(y2), int(x1):int(x2)]\n \n # license plate detector for region of interest\n license_plates = np_model(roi)[0]\n # process license plate\n for license_plate in license_plates.boxes.data.tolist():\n plate_x1, plate_y1, plate_x2, plate_y2, plate_score, _ = license_plate\n # crop plate from region of interest\n plate = roi[int(plate_y1):int(plate_y2), int(plate_x1):int(plate_x2)]\n # de-colorize\n plate_gray = cv.cvtColor(plate, cv.COLOR_BGR2GRAY)\n # posterize\n _, plate_treshold = cv.threshold(plate_gray, 64, 255, cv.THRESH_BINARY_INV)\n \n # OCR\n np_text, np_score = read_license_plate(plate_treshold)\n # if plate could be read write results\n if np_text is not None:\n results[frame_number][track_id] = {\n 'car': {\n 'bbox': [x1, y1, x2, y2],\n 'bbox_score': score\n },\n 'license_plate': {\n 'bbox': [plate_x1, plate_y1, plate_x2, plate_y2],\n 'bbox_score': plate_score,\n 'number': np_text,\n 'text_score': np_score\n }\n }\n\nwrite_csv(results, './results.csv')\nvideo.release()\n"})}),"\n",(0,i.jsx)(n.p,{children:"This returns a list with bounding box metrics for every frame with a successful detection:"}),"\n",(0,i.jsx)("br",{}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"frame_number"}),(0,i.jsx)(n.th,{children:"track_id"}),(0,i.jsx)(n.th,{children:"car_bbox"}),(0,i.jsx)(n.th,{children:"license_plate_bbox"}),(0,i.jsx)(n.th,{children:"license_plate_bbox_score"}),(0,i.jsx)(n.th,{children:"license_number"}),(0,i.jsx)(n.th,{children:"license_number_score"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0"}),(0,i.jsx)(n.td,{children:"1.0"}),(0,i.jsx)(n.td,{children:"[760.1986694335938 614.2100830078125 1123.09130859375 914.9498901367188]"}),(0,i.jsx)(n.td,{children:"[110.20427703857422 133.25326538085938 238.5574493408203 175.96791076660156]"}),(0,i.jsx)(n.td,{children:"0.7692280411720276"}),(0,i.jsx)(n.td,{children:"BPG6UXN"}),(0,i.jsx)(n.td,{children:"0.7290849695998655"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1"}),(0,i.jsx)(n.td,{children:"1.0"}),(0,i.jsx)(n.td,{children:"[758.7349243164062 612.4984741210938 1122.470458984375 919.1956787109375]"}),(0,i.jsx)(n.td,{children:"[109.57369995117188 134.78448486328125 238.8947296142578 179.6195831298828]"}),(0,i.jsx)(n.td,{children:"0.767607569694519"}),(0,i.jsx)(n.td,{children:"BP6EUXN"}),(0,i.jsx)(n.td,{children:"0.27891552972114064"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2"}),(0,i.jsx)(n.td,{children:"1.0"}),(0,i.jsx)(n.td,{children:"[755.6078491210938 612.161865234375 1118.7542724609375 920.3657836914062]"}),(0,i.jsx)(n.td,{children:"[109.76798248291016 134.661376953125 239.85276794433594 180.43345642089844]"}),(0,i.jsx)(n.td,{children:"0.7666334509849548"}),(0,i.jsx)(n.td,{children:"BP66UXN"}),(0,i.jsx)(n.td,{children:"0.7696779876170268"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3"}),(0,i.jsx)(n.td,{children:"1.0"}),(0,i.jsx)(n.td,{children:"[753.9749755859375 611.0296630859375 1115.607421875 920.6179809570312]"}),(0,i.jsx)(n.td,{children:"[109.80683898925781 134.79702758789062 239.79380798339844 180.0568389892578]"}),(0,i.jsx)(n.td,{children:"0.7609436511993408"}),(0,i.jsx)(n.td,{children:"BPG6UXN"}),(0,i.jsx)(n.td,{children:"0.5947437696221942"})]})]})]}),"\n",(0,i.jsx)(n.h3,{id:"step-5-clean-up-license-plate-format",children:"STEP 5 Clean-Up License Plate Format"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# Mapping dictionaries for character conversion\n# characters that can easily be confused can be \n# verified by their location - an `O` in a place\n# where a number is expected is probably a `0`\ndict_char_to_int = {'O': '0',\n 'I': '1',\n 'J': '3',\n 'A': '4',\n 'G': '6',\n 'S': '5'}\n\ndict_int_to_char = {'0': 'O',\n '1': 'I',\n '3': 'J',\n '4': 'A',\n '6': 'G',\n '5': 'S'}\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"def license_complies_format(text):\n # True if the license plate complies with the format, False otherwise.\n if len(text) != 7:\n return False\n\n if (text[0] in string.ascii_uppercase or text[0] in dict_int_to_char.keys()) and \\\n (text[1] in string.ascii_uppercase or text[1] in dict_int_to_char.keys()) and \\\n (text[2] in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] or text[2] in dict_char_to_int.keys()) and \\\n (text[3] in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] or text[3] in dict_char_to_int.keys()) and \\\n (text[4] in string.ascii_uppercase or text[4] in dict_int_to_char.keys()) and \\\n (text[5] in string.ascii_uppercase or text[5] in dict_int_to_char.keys()) and \\\n (text[6] in string.ascii_uppercase or text[6] in dict_int_to_char.keys()):\n return True\n else:\n return False\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"def format_license(text):\n license_plate_ = ''\n mapping = {0: dict_int_to_char, 1: dict_int_to_char, 4: dict_int_to_char, 5: dict_int_to_char, 6: dict_int_to_char,\n 2: dict_char_to_int, 3: dict_char_to_int}\n for j in [0, 1, 2, 3, 4, 5, 6]:\n if text[j] in mapping[j].keys():\n license_plate_ += mapping[j][text[j]]\n else:\n license_plate_ += text[j]\n\n return license_plate_\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"def read_license_plate(license_plate_crop):\n detections = reader.readtext(license_plate_crop)\n\n for detection in detections:\n bbox, text, score = detection\n\n text = text.upper().replace(' ', '')\n\n # verify that text is conform to a standard license plate\n if license_complies_format(text):\n # bring text into the default license plate format\n return format_license(text), score\n\n return None, None\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"results = {}\n\n# read video by index\nvideo = cv.VideoCapture(videos[1])\n\nret = True\nframe_number = -1\nvehicles = [2,3,5]\n\n# read the entire video\nwhile ret:\n ret, frame = video.read()\n frame_number += 1\n if ret:\n results[frame_number] = {}\n \n # vehicle detector\n detections = coco_model.track(frame, persist=True)[0]\n for detection in detections.boxes.data.tolist():\n x1, y1, x2, y2, track_id, score, class_id = detection\n if int(class_id) in vehicles and score > 0.5:\n vehicle_bounding_boxes = []\n vehicle_bounding_boxes.append([x1, y1, x2, y2, track_id, score])\n for bbox in vehicle_bounding_boxes:\n print(bbox)\n roi = frame[int(y1):int(y2), int(x1):int(x2)]\n \n # license plate detector for region of interest\n license_plates = np_model(roi)[0]\n # process license plate\n for license_plate in license_plates.boxes.data.tolist():\n plate_x1, plate_y1, plate_x2, plate_y2, plate_score, _ = license_plate\n # crop plate from region of interest\n plate = roi[int(plate_y1):int(plate_y2), int(plate_x1):int(plate_x2)]\n # de-colorize\n plate_gray = cv.cvtColor(plate, cv.COLOR_BGR2GRAY)\n # posterize\n _, plate_treshold = cv.threshold(plate_gray, 64, 255, cv.THRESH_BINARY_INV)\n \n # OCR\n np_text, np_score = read_license_plate(plate_treshold)\n # if plate could be read write results\n if np_text is not None:\n results[frame_number][track_id] = {\n 'car': {\n 'bbox': [x1, y1, x2, y2],\n 'bbox_score': score\n },\n 'license_plate': {\n 'bbox': [plate_x1, plate_y1, plate_x2, plate_y2],\n 'bbox_score': plate_score,\n 'number': np_text,\n 'text_score': np_score\n }\n }\n\nwrite_csv(results, './results.csv')\nvideo.release()\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"results = pd.read_csv('./results.csv')\n\n# show results for tracking ID `1` - sort by OCR prediction confidence\nresults[results['track_id'] == 1.].sort_values(by='license_text_score', ascending=False)\n"})}),"\n",(0,i.jsxs)("div",{children:[(0,i.jsxs)("table",{children:[(0,i.jsx)("thead",{children:(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{}),(0,i.jsx)("th",{children:"frame_number"}),(0,i.jsx)("th",{children:"track_id"}),(0,i.jsx)("th",{children:"car_bbox"}),(0,i.jsx)("th",{children:"car_bbox_score"}),(0,i.jsx)("th",{children:"license_plate_bbox"}),(0,i.jsx)("th",{children:"license_plate_bbox_score"}),(0,i.jsx)("th",{children:"license_plate_number"}),(0,i.jsx)("th",{children:"license_text_score"})]})}),(0,i.jsxs)("tbody",{children:[(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:"175"}),(0,i.jsx)("td",{children:"839"}),(0,i.jsx)("td",{children:"298.0"}),(0,i.jsx)("td",{children:"[775.8486938476562 504.52294921875 1095.532592..."}),(0,i.jsx)("td",{children:"0.925278"}),(0,i.jsx)("td",{children:"[102.20135498046875 212.2305908203125 218.7746..."}),(0,i.jsx)("td",{children:"0.752586"}),(0,i.jsx)("td",{children:"NL60GXO"}),(0,i.jsx)("td",{children:"0.988261"})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:"29"}),(0,i.jsx)("td",{children:"50"}),(0,i.jsx)("td",{children:"298.0"}),(0,i.jsx)("td",{children:"[846.99609375 521.3043823242188 1254.532104492..."}),(0,i.jsx)("td",{children:"0.931958"}),(0,i.jsx)("td",{children:"[133.1925506591797 275.73577880859375 280.6121..."}),(0,i.jsx)("td",{children:"0.740573"}),(0,i.jsx)("td",{children:"NL60GXO"}),(0,i.jsx)("td",{children:"0.966773"})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:"146"}),(0,i.jsx)("td",{children:"799"}),(0,i.jsx)("td",{children:"298.0"}),(0,i.jsx)("td",{children:"[810.77734375 522.0484008789062 1130.535888671..."}),(0,i.jsx)("td",{children:"0.914011"}),(0,i.jsx)("td",{children:"[102.2442626953125 215.42474365234375 218.7385..."}),(0,i.jsx)("td",{children:"0.752845"}),(0,i.jsx)("td",{children:"NL60GXO"}),(0,i.jsx)("td",{children:"0.953542"})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:"147"}),(0,i.jsx)("td",{children:"800"}),(0,i.jsx)("td",{children:"298.0"}),(0,i.jsx)("td",{children:"[810.7708740234375 521.808349609375 1130.57128..."}),(0,i.jsx)("td",{children:"0.912922"}),(0,i.jsx)("td",{children:"[102.17294311523438 215.99032592773438 218.767..."}),(0,i.jsx)("td",{children:"0.754186"}),(0,i.jsx)("td",{children:"NL60GXO"}),(0,i.jsx)("td",{children:"0.953522"})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:"284"}),(0,i.jsx)("td",{children:"1337"}),(0,i.jsx)("td",{children:"298.0"}),(0,i.jsx)("td",{children:"[843.4232788085938 523.5321044921875 1257.2657..."}),(0,i.jsx)("td",{children:"0.910718"}),(0,i.jsx)("td",{children:"[163.98861694335938 263.2216796875 300.1403503..."}),(0,i.jsx)("td",{children:"0.757695"}),(0,i.jsx)("td",{children:"NL60GXO"}),(0,i.jsx)("td",{children:"0.934405"})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:"..."}),(0,i.jsx)("td",{children:"..."}),(0,i.jsx)("td",{children:"..."}),(0,i.jsx)("td",{children:"..."}),(0,i.jsx)("td",{children:"..."}),(0,i.jsx)("td",{children:"..."}),(0,i.jsx)("td",{children:"..."}),(0,i.jsx)("td",{children:"..."}),(0,i.jsx)("td",{children:"..."})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:"191"}),(0,i.jsx)("td",{children:"1010"}),(0,i.jsx)("td",{children:"298.0"}),(0,i.jsx)("td",{children:"[865.4359741210938 488.0260009765625 1060.5764..."}),(0,i.jsx)("td",{children:"0.861625"}),(0,i.jsx)("td",{children:"[65.1905517578125 123.86817169189453 130.26571..."}),(0,i.jsx)("td",{children:"0.761225"}),(0,i.jsx)("td",{children:"KL60GZO"}),(0,i.jsx)("td",{children:"0.043224"})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:"355"}),(0,i.jsx)("td",{children:"1462"}),(0,i.jsx)("td",{children:"298.0"}),(0,i.jsx)("td",{children:"[685.121826171875 514.077880859375 888.8001098..."}),(0,i.jsx)("td",{children:"0.832969"}),(0,i.jsx)("td",{children:"[92.80020904541016 110.36637115478516 153.4690..."}),(0,i.jsx)("td",{children:"0.739499"}),(0,i.jsx)("td",{children:"HI60CIO"}),(0,i.jsx)("td",{children:"0.036080"})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:"392"}),(0,i.jsx)("td",{children:"2306"}),(0,i.jsx)("td",{children:"298.0"}),(0,i.jsx)("td",{children:"[462.48388671875 512.8485717773438 933.4752197..."}),(0,i.jsx)("td",{children:"0.929456"}),(0,i.jsx)("td",{children:"[121.44440460205078 294.94183349609375 269.183..."}),(0,i.jsx)("td",{children:"0.722692"}),(0,i.jsx)("td",{children:"WL60YNL"}),(0,i.jsx)("td",{children:"0.031725"})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:"517"}),(0,i.jsx)("td",{children:"2684"}),(0,i.jsx)("td",{children:"298.0"}),(0,i.jsx)("td",{children:"[856.17333984375 514.7470703125 1043.54296875 ..."}),(0,i.jsx)("td",{children:"0.887135"}),(0,i.jsx)("td",{children:"[59.788631439208984 116.58961486816406 126.729..."}),(0,i.jsx)("td",{children:"0.738799"}),(0,i.jsx)("td",{children:"HL60CKD"}),(0,i.jsx)("td",{children:"0.030968"})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:"515"}),(0,i.jsx)("td",{children:"2682"}),(0,i.jsx)("td",{children:"298.0"}),(0,i.jsx)("td",{children:"[852.64794921875 512.9298095703125 1043.665893..."}),(0,i.jsx)("td",{children:"0.893880"}),(0,i.jsx)("td",{children:"[61.673500061035156 121.25975799560547 129.707..."}),(0,i.jsx)("td",{children:"0.746015"}),(0,i.jsx)("td",{children:"ML60CZO"}),(0,i.jsx)("td",{children:"0.016401"})]})]})]}),(0,i.jsx)("p",{children:"488 rows \xd7 8 columns"})]}),"\n",(0,i.jsx)(n.h3,{id:"step-6-visualize-the-results",children:"STEP 6 Visualize the Results"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"def draw_border(img, top_left, bottom_right, color=(0, 255, 0), thickness=6, line_length_x=200, line_length_y=200):\n x1, y1 = top_left\n x2, y2 = bottom_right\n\n cv.line(img, (x1, y1), (x1, y1 + line_length_y), color, thickness) #-- top-left\n cv.line(img, (x1, y1), (x1 + line_length_x, y1), color, thickness)\n\n cv.line(img, (x1, y2), (x1, y2 - line_length_y), color, thickness) #-- bottom-left\n cv.line(img, (x1, y2), (x1 + line_length_x, y2), color, thickness)\n\n cv.line(img, (x2, y1), (x2 - line_length_x, y1), color, thickness) #-- top-right\n cv.line(img, (x2, y1), (x2, y1 + line_length_y), color, thickness)\n\n cv.line(img, (x2, y2), (x2, y2 - line_length_y), color, thickness) #-- bottom-right\n cv.line(img, (x2, y2), (x2 - line_length_x, y2), color, thickness)\n\n return img\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"# read video by index\nvideo = cv.VideoCapture(videos[1])\n\n# get video dims\nframe_width = int(video.get(3))\nframe_height = int(video.get(4))\nsize = (frame_width, frame_height)\n\n# Define the codec and create VideoWriter object\nfourcc = cv.VideoWriter_fourcc(*'DIVX')\nout = cv.VideoWriter('./outputs/processed.avi', fourcc, 20.0, size)\n\n# reset video before you re-run cell below\nframe_number = -1\nvideo.set(cv.CAP_PROP_POS_FRAMES, 0)\n"})}),"\n",(0,i.jsx)(n.p,{children:"True"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"ret = True\n\nwhile ret:\n ret, frame = video.read()\n frame_number += 1\n if ret:\n df_ = results[results['frame_number'] == frame_number]\n for index in range(len(df_)):\n # draw car\n vhcl_x1, vhcl_y1, vhcl_x2, vhcl_y2 = ast.literal_eval(df_.iloc[index]['car_bbox'].replace('[ ', '[').replace(' ', ' ').replace(' ', ' ').replace(' ', ','))\n \n draw_border(\n frame, (int(vhcl_x1), int(vhcl_y1)),\n (int(vhcl_x2), int(vhcl_y2)), (0, 255, 0),\n 12, line_length_x=200, line_length_y=200)\n \n # draw license plate\n plate_x1, plate_y1, plate_x2, plate_y2 = ast.literal_eval(df_.iloc[index]['license_plate_bbox'].replace('[ ', '[').replace(' ', ' ').replace(' ', ' ').replace(' ', ','))\n\n # region of interest\n roi = frame[int(vhcl_y1):int(vhcl_y2), int(vhcl_x1):int(vhcl_x2)]\n cv.rectangle(roi, (int(plate_x1), int(plate_y1)), (int(plate_x2), int(plate_y2)), (0, 0, 255), 6)\n\n # write detected number\n (text_width, text_height), _ = cv.getTextSize(\n df_.iloc[index]['license_plate_number'],\n cv.FONT_HERSHEY_SIMPLEX,\n 2,\n 6)\n\n cv.putText(\n frame,\n df_.iloc[index]['license_plate_number'],\n (int((vhcl_x2 + vhcl_x1 - text_width)/2), int(vhcl_y1 - text_height)),\n cv.FONT_HERSHEY_SIMPLEX,\n 2,\n (0, 255, 0),\n 6\n )\n\n out.write(frame)\n frame = cv.resize(frame, (1280, 720))\n\nout.release()\nvideo.release()\n"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"processed.webp",src:t(504471).Z+"",width:"1788",height:"476"})})]})}function h(e={}){const{wrapper:n}={...(0,s.ah)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(o,{...e})}):o(e)}},603905:(e,n,t)=>{t.d(n,{ah:()=>d});var i=t(667294);function s(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function c(e){for(var n=1;n=0||(s[t]=e[t]);return s}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}var a=i.createContext({}),d=function(e){var n=i.useContext(a),t=n;return e&&(t="function"==typeof e?e(n):c(c({},n),e)),t},o={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},h=i.forwardRef((function(e,n){var t=e.components,s=e.mdxType,r=e.originalType,a=e.parentName,h=l(e,["components","mdxType","originalType","parentName"]),p=d(t),x=s,m=p["".concat(a,".").concat(x)]||p[x]||o[x]||r;return t?i.createElement(m,c(c({ref:n},h),{},{components:t})):i.createElement(m,c({ref:n},h))}));h.displayName="MDXCreateElement"},553629:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/confusion_matrix_normalized-fbac84dd568e663b76bfd3d0b78cdd50.webp"},841616:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/detected_cars-67d3bcb7e8683698e567b2e004a23c0d.webp"},173943:(e,n,t)=>{t.d(n,{Z:()=>i});const i="data:image/webp;base64,UklGRiYKAABXRUJQVlA4IBoKAABwVwCdASrAAg8BPpFIo0ylpKOiIbYoOLASCWlu4XX6JzHVMk70J/f52+n/t4e6df4T2QOjJ9ZD/Q0FPpF94ymyXuBfbJ33/Yv9T4wf3D/beHvrMWmHK1zNv75+tHtD6Ufq32Cv5P/X/x57iH7S+0V+1QQXAFm0UZS79sHmFSucNEu/bB5hUrnDRLv2weYUf2MPoLniBQZBc8QKDILniBQZBc8QKDILniBQZBc8QKDILniBQZBc8QKDILniBQZBc8QKDILniBQZBc8QKDILniBQZBc8QKDILniBQZBc8QKDILniBQZBc8QKDILniBQZBc8QKDILniBQZBc8QKDILniBQZBc8O/ioO3Q7aS+ooCpJXCjWFucdOWu6fn55KXT1egvUGiCzBiE2Lr2tzeh2YVagkJtZBYozNtVRbcGcFsyhYYIKXm2gNmKMgueIFBkFzw7+qxxYGqbLPglqI4UDOFMyguRac2a76K+hCs/KvFtCAQg6JXN/ms8WoBckvoOyUaeZ4V0jYssanVFbEOTZ17NtqYgyUWgi3DmUEJrOmnP+coQXWaWTsvZ4rGfDo6z/YFfCnGA15WeaJj9zxAoLfB0Oh4Qh2AJqjD9hzdgHROt6qWw2TOAVAzM8VoYb2WLKWpgLsWvTTSiTaXk4t0nl0mwu1Omb8WZS31o2Yrg+xg7ipVjGxEJL9KMgueSVhjsLRJpyxi/g5JN0IUwOJ3Avq9nizvnnWUGMnn+vc/UL40+i2XoxqZesIKUW202b/1her/aWHqcoirARl7VNsHizy8Xs8WeXi9nizy8Xs8WgPovZ4s8vF7PFnl4vZ4s8vF7PFnl4vZ4s8vF7PFnl4vZ4s8vF7PFnl4vZ4s8vF7PFnl4vZ4s8vF7PFnl4vZ4s8vF7PFnl4vZ4s8vF7PFnl4vZ4s8vF7PFnl4vZ4s8vF7PFnl4vZ4syAA/vnRSQFWW8uYhlrVZ2ASTQLHgBUAQAAAAAAAAAAcX9kN2qf1wSuzei9JNNKEU40ZhhfywsjCv1pLbaj4in5IVrNuVkcgKjt7X9gLPasGwwu3F0Vep/aPQN/UVqzt2iaICIHQlqOZg1f+M0yfHPrTwgcmEhi5PsLrBfGIb8Dm5s0HZYmt2aVSB+0ndRrDgTNpm4rnqWgvBUamkUckNvcQAechgkS9ns1Gytkj9Rxp4ETjvGrU4w8KkA8Ei2LIYSMlg8kMXojCgJzOEhtrHAvMCrSzahFYs++tRFKEnCAHdnbnJ1o8RxiWgX+42Y06X9EsBWb8kC9MES5nDOd7RFr1MllvdSOXyaSgLrh+xOJVMtcf8Ms/KRTmXKU7llQ3s6eX+gVLY+Cw5YtjKarFBoMUow90I/7QK0jPiYkGy9ILdVTEnCFX+MmzlkNaSf/Ln5LSSfQzXMJqeDJmZm7i+cNJKIRLBN4abaoBQNe8jcGXCt7W+TvF6A72N7LrUCrezmwzriNnNKp95U73SNWzbxaqzyvyRDmH1pjntzB1qvXXOkdhUw7Rljm+NCWq6HJ+7vbae1hqWeTH40oG7MQB1hy2kyh+CkOJB/Ka87YlOXHDq0WoJo1ck6ZryuupI9rM9ARpVHLSmbCCL+YxqSqJSX1UOL4X9WzNhW4VDhIinqcUEcuhwkGj07SJ+or2avui3PdpuBSowiJtMqXrebKC8mPhYVlcqIIyRf9Vz1JH5WK0lvbd2ROQNsuEJCV0a8KLR4DjR+REEwrTnA2/vCBrRPhiOJheZc9eycB7g0blYTMCqts6pm4RBl5wc9GeY4hWi3pqV5Nt+BH+OFxMZGUMARVS30tuP+3CEQ7xgrCZn1AWbK28HS1BM97aTpaJBSIEz3IbhfA8E5E9zr/GJ4sKQvipvEa4ykVUi52y8FhjSwJwRwTcMJck9s7SyML+ZDIq+MmgpKQg/OKMUfVJY1m8ovHx88IdH3CTqk4ICbmFAw4VXGjTgw+6pvpOsCRmhOpuBjaNazY9QAyQpnmon5PhH6SfMV+bBdNvoBkM9X4UzyLyGwlzryheVaX5EllZ9jShAhM/lW0GnpVfxlLip1LUbnum/9fXu9lPEhwZVF3ZE5N+yYJlmArM+q8RONQh6O8tYkqHkYnNgqd2KX5KmkVZxEzz2Dxp1wXPSBud8Oh2ccTIYHxj0gerui5luf00nFH8cCBoJE5k1KzjUPPedGml3/FBMC/BVr5GgV0vwdm1xAcWgiAbsLOTnK1DFrlxHfYkfJT8YZ52V2BGYMV8zEF67CA21tEowyxswvVvws92ThlimabhsVmKPis7EyOqMfAj7BG18E/HXQ3b6OZ3hLGamjWabKc38Ul8ksRpqd8eY39ergu7jqAKZESSkO4B2dmr4/pm3+qQtwZBi52mOYnX8yp7n1lGp/RhPGvCZqR0QvRXIgzLdMPDLd0EBGRP6uAg7H/SghhtFSzK6t2OXz5WaJ2Fyj1mOMtgYJa0XD+i2GDLt+E2sbxUn5srJrgJIcc0822qVWTADZkLlWxY5NR3z8QrY27BnOGFGBphniSvkwA1eX3rsRHzeo3xq/me/akv9eovaUbQb2ZLestnXNukmOvzDloOC111cexGFWg39K1znvXtcyo8+bVijw1y+vUBJYbwZugK2iP4aC0jBQTBpRB1tnX6yzr9O8/8dGG+TVcn1gq3z1ICLtjtdEZwRtZSBW6bb03eiOal7QZdimxh/bEcH+lSH4z6a12ySTM3zqqmK8329XUAV8v/Pcjye5LqB/cIrDUU/1473HbTLMNFydjqjdEUI2Q8zff82XA6f3bCBf3POZLoTWnRO+ICDzblvLrc7pWy1COR7SxkeflDr9zNnwD859AZGS/d4Zd2vs9FDeGxijfJsNngxN+17u2YAi7AtsUDNLDqaPPjH2ccaWjAFUliy02JSDCegc29S/cv1MfpZdX2I/xs0ZbkDHc1SIs8Hn9o82qA83GanV9fYVLSfcftbDF/6VIfjPprXavFiKkcCGgV5vt6uoAr5f+e5Hk9yXUD+4RWGop/rx3uIcBnXNfT5knw052WO5Lx1KrGP4rZZp9ybxbwkvGMwAZlElTdOB3KvXzazRMRkd4qltGojOsZpKoVF9+7OsIb4eoLyKM6zumaycPGHLIw7PJ7XGxsHMsjkCy9LXmFVIznmOOaeE/7qvSK9+7GTrKLsPsOphd18VJxMQZsgeP38r70Jkib7IFfd3V807BJThXHcOLzaG0cs6DBNMI8M2amebVATGEYkeFfQQ4iau4GqT7z8ouhSt9I0wJE7yy5uskWGj5R5CpMtT/Pcjye5LqB/cIrDUU/1473EOAzrmvp8ywE3RFCNkPM33/Fmjv7thAv7nnMl0JrTonfEBB5ty4XEj/MBVN8iLsMf9x9/WgVAzfjGT/0BkZL93hkMHrnoiVOILVqyrqD54ecajo3O4LXQKiBmlh1NHn0aglgAAAAAAAAAAAAAAAAAAA="},560549:(e,n,t)=>{t.d(n,{Z:()=>i});const i="data:image/webp;base64,UklGRs4ZAABXRUJQVlA4IMIZAACQjwCdASqSAiEBPpFIoEulpKMhpDPIqLASCWlu4XYBEazcIfGBKU+EP2niCQ1eif/zdO/0ic8t6Mf+H0o//U9if+m/9T2APPM9Vj/cenH6AH//4HrzD/V+2z+3fbX6a+S/1T7besX/X+NDqb/oehn8r+0n5r/Cfu18Y/5P/F/lR/SfVH4vfxnqEerf8n/XvXo7I989rXmHezfyv/Q/3f95fNq/kPRv6wf7H3Af57/Tf9N6k/3f/veUPQF/lv94/zn98/IL6Xv4v/l/5P8kvdb9N/s3/l/kI/oH9H/5P959sz2JeiL+w//pFh5UM3YRiCMQRiCMQRiCMQRiCMQRhplAi1zBZ/YBNJcq8DuBzU3YZBpEELbYmW/qS0z91EwpMCmX7EYAXdcm+FpymYj8QsHIzCbgf6uCKrG8BMP3r8UXVr5cY7f7I3bpVn+NlzVHg7fFvDCkZfNVZPTjqoqX854GChU/YaGbnJ49GVENrj2+NVF9XIOGGrj3AfMTAM4o9GHsMwjGEjsEthFFKFS8pgk1EQPMv/QncVHlT7fIX5TTz0ThLWHwtSDGPfGpzmhm6tq2c6HPkd+WMG/qPFE/Yxg+nAdrRDTS1/EbqIv4jA1cgTGn6QJQhx7/V1xUI2slXPeEfFxhrCtu5ZN/uM6OXHR6F4LcqAUyxyVXkzZO/X/WW5PbIjxfP8nGOmMdQsfP5BFZqmy4WvZBKDI4Y2w2vFgbHHOQyMe/visbzYdmHYYvGmMOe9r7Wfuvvp9w7i4D0pVPGRb/WG/JMywJBKWn9OoMSGjRfeJlYyLqVZ5UM21vUCrsxe5uJahowKDriAo5qSlox/YRiAnD9Dx+bba8L7O7DO2vQhpoyA0EPyoZtrLC7T+txFpR8aZXJkt3sE0xctx3FbTPaZ9CMfA7jHcZredGIIxBH1qwU43G2HtM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pntM9pm1DqL0D01kFmDh7I/zzzMATG2HtM9pntM9pntM9pcZHjgizPotyBK5ewSIkZDU4iQoR9DjDU0Ts2tnJRGXB8Ilum79j4l3CWLySIIXThQGwtM9pno+Zv1FkrIv8Drf9eoyvEkPNZuknqdrkJXuKa4+K2j7dyUsUB53wspQsuQ88XiYzAdv9W0YQv1G09vCloUwOPIHcY7f2+z846ooyKF8ti2U3vHF7dhGICmPsRc0JLfcnxLfDcAbjpvMa0fqZCn66AL3CaMDN2BOG8YFwZafFxglvzGtmUgT4rDwlA05RFdxjuAzDjIPbjxEDb2a/iskiHyMUJ05xvgitYgjEEHRIC0/b2VQpexe4DoVUCJzFCnJntLeCes5mDPFNaoR+IaFUqN3uctcYghauWoADPQL0cj3JA5zH+BYnHkJmrPaZ7pMw7ewjEEfWw556/wO4zLuoyNsPaZ7TPaZ7TPaZ7TPaZ7TPaZ7TPQAAD+/4wjc4iAABW1/NFTuGdjiejaFS47zf3QP28/n2Joxu9e7UxEK3pMuYNGgg88DthTlda3i5vYY/U5XeK5LmTIlPa6XcjnIQItF5xW84Swac9Ip4luO91+t/00v0mj71fNXuahQpTn5Fd+EbS7c1GIK6+X6DMUXo1dUokzJJQFwvP3P1z7jxP1E+PWDWFewe3MmKm3b+UjO4Ph7nUfVG94n8qP8PYt41xgFg5OscejweFR1pDmLyZLtglIYiHUSxE2+NvGlHv/VwYFi4CG5h14FUIF94jMF/Rp8NBReGeJMk9iJlMFL/uuKE1qg1q8YXd47BLPGXcYOw+5gDFwOI+VqXP+YYZuGEqOPvdzVeS+z5RPB8gV30yzkJ/PAFwEM/Ss5PbahnGPRs/U+A/w9i3joa5ev6vVM1WdGcTPkpUKiPxVvf/xNAZJzoVPy8mzHuYaP6KN9hwYS3ygrg0aimADOhoY5jSLtG7+a+2B6vBch9P8OdVMEU8in1bayNCsthsISHRQ4+oXDzxsSk7NOLnPvNXMCOO/htF2TmAI9iCRz++r9ElwTUN02wAnTrUAS7TZWK3PqqYXA6Ez0+pbR2/BXZIJ39+aVbPaLpOTo5ua2oQHOmlbe7rJG+rt29hHl+v+Db8Bf2/4AJ0Ny//5FtinkL3LFifug+1JOLhCRN6Pd/PbITvi1SJa/Y5DrMcAfUDfSrAnqy6M88sA0AU/pk8FQ4APOIWDCqXzu8eI1cKUbH5vx3ibBHHu+u9590AWZ5uH2kkbmQTj9FRSvB3/z4n1KoGj7JzruwH6POMYH7+NnQs89JU6EvfWxynZWIMZZ3yUI+NP2nOSlXoP88QH2icgDceQUoza/A3CJoBgYjVu6IJ5kcl9fXwnC8imjgsgvMDrRtv1U4AvgeAYiXCGOty5Dqg2qdKrvcFM14xfmNUrnZm7t2pc8bZVAkVkDUGWQXa87F5FM2d40w/AuDuprIXr6Ol8S0l14jjl/rCp+44Eft+OH/5tUjvYf3S/pFgEFeGNCJjlUMkh6aH4Xw9wTL3oBOx8iVuygARR9RGEiDGLiN3JOZoL2kad0EfqNqfqFS0DB+xoTbxMsDTTw6a84k5xQfm+DIgmZp228SyYbzYBWdTcBL+ZRl7jIGNPTjpOIrP9eyPjzqdA02AI+BpSrWjPjn6PG9qg90xxz5ZFiRnRx9wgotkC2qghTsi8i9sNgKg5eaftrvpDoJWTKMmaRdcDxMejUqAqpa/H8HeTfl0+JD0a7ID9DJu9pph0/zXV+zb3gFdyxNEmd1kur8slgBV9duNse5U+h9OjrIaIcJ1JaFh1Cs42BApVf4z573sc25zZg0+Hv2dZkIVrWTKnaGIN+LR9YMLTJ8ZMvUVSJKfY2CFj/tWsd+FU32DsA/16JpMUY3wXMzzHPhxQdGHa1eIq4zPp5l6oweJfHwfxsOXONSVXmGmQvmMqQfvlmzXBWztWyTQbD/CtMBm1EBhwyvs4G9eQ0Yv4mbPqZlfNo5ClxMwXk80diD8hKROfNAmkcbH/GOMPpTaUwtAwQzwuvRrkL8GTmUDxRXaSi80qmpaxE7otGqNCNMIot6icQa44kv0BVZAV2X5t0BZWjqv5ZG7Or/Z9J8BceMh8jfVvCQeG9XfKAW7vtD0uObqovXKmfaP72FG+ccC/BzpQVBSXeU/Ji4Bs+cvHg3BI3BvsiVdV7x3hszKc9JzfapQMe7LLJ8UjcnrmVsgV1OdXpDtxZ+Hpb39cmwHUAND/mCe/C9dtpRbgzejOAeMkJ20gNIYBt4z4GsqrcjjB8OvZnuWvF5mB+2gBTETd106UCY3xFdXu4sVkJ/VvZenvVvPFfIGsOXbMrvKzn3XRz+isiuUYyBvgWe+YY59pNjLU0bQfxThRrd6RodckJkc6PER6b3e7mX74QCyBnYCU8Zw9lZ8pJWjRGoKW1hCuXmBkM/BX2555mHbWRzen/QYd8pxdQlEdYQob5PCFzlLVxWIRybX+t8f6m3rfNNt6MlPifn0YCixJfAFZ4CEp0Z3cskVuVYVWJvBI3mtRX1GJ6uwIYq3mDfIgYwZE2RR5nT/ZNUvqwFqJhHk35+XFSJfUT2izVNLbFIHvVe6NZul/xbq35FLhFoXOGt+/m2/oZ/Ti7VU5qJK4hjLqxLMdIjw3zW1frJPVif5JLZlpnjyvP4B74Fxdy+uVXFaU/8kAJE6h2kHlXmj+h9J374rjStZZ/+QmU3uhsRxYuufDzPQltFz33E7hl+xUGk2ou2f6d7f+v7TLSJJFZhi00IAHu7Xrdx7TZv15Km1Kf78TVCizJF7iA9RpSWdQoeI7axANFL9rr4oQLUjQJ8RjAlDIVmU7PeHTW58xZxMCqo3iL5lOHZXuhd5oDBPFijaBVVTvSYsVAFMb9ZaGcw1ot5cmWMDhXQAa1wHcAFFqraP+3yImJ2Q9xIipFLrwP/tkcOx2KR5SQ0wj6ttnI25L4xVO0AFYXczHRAzN97Xz/gC/WjP/VTBYaWTjwu+ptX2Hb4EcutGLwh8nxVXsUQQq5XT2D/BVt5Wpt/WHiM37Ujy/rZkqrc1wkKfK7mnmu67F+5PFd+wQULXPO/NPIFyrkBW+cH/9ebmoYUdNXVuwWBMILiHFzLNU09TJtItdTeKnxHZv2rzKhdj7I3Y024i5P2oxYca1ELqPqd28qRqs/W17bkhQvNCMXktG3J3cY4+ayrcCz04jH8yWL4csJbnWCq9zgCDTMU0c6j/Gs4KOSPAm8UfqwWKNnWj3zZ8e4wvJA/zp4VldYhY20/JsKHjyjgDm6HAAs9w4ne5OJK4nVE2hWAQy8KjUak27Euv9IactVq6gLgtGwk+FpPel3ArvGlgtXySWvg8uVrh2qxtPUKetFQziPFVQ8hUTJH5a4+E0iu+k4UvJT90o/fNmOoAH/OdYuu8L12716+hNrSH3WwN0tiv7XpRdUN2xBTrXkLQ33i3ooBkbPyIiaAp3mr/JUg3jlRbA42IaPoNv/Mwd2qIRLkQUtMeDlKzPn7NyX6pG0CVDXbMpwfQyF/Noc3pp3xYrxNQCQDvQEfbCnlo50vJczkuCdBd2Pw9u1awkWeF+PpWTDHpJyF3/Wy3lpAkf8cVePvK9LN5udAVsIKRAFhHSeOFh1sC72qbCWBfutkZIdlY78cNoOyGXWCoFiALGM95C0nSmcMZ9qLVHMj6wl+v+8loM7QHMa/H/9pT3yn4nNPwd4rj8LppgwhZKITRXMONwlZPW7YTpqko2WTSvc4beWEMLTdvzwqZXWs+hHWaIGjBd+Du2g+HuGBCDBRYxCN1lOV7lF5z8aUPEA9dMovQj5jMPob3ZU6Bi7nxAlqxt9pBs6Tse+zkwOr3XVkyhnk4kAjA3J73P+TJmPLEvVBkk+X8NlauaUgSfcctGTj7QPW+YH1hSLkdyBO0NlBTmDtbbvLiz1imDedAYdnZy4eJK3AmD/vZLh4+WXF8NlV6lKkiij9zLFpkZWkKCma3dwHigTnlAFKqDpfAejMaFxFWH3GEfxgKLjQKcJYh7gB15Kf+YATuX5j2addKQo0KNmLfAJ2XVS3E8FdBEq7+4QugzJgGtW2f8+dDt9UUXRRCPxONAYUaGr5o1ozTs9Y73fRUFuZSWl/JWFwSvVGYoVxg7fD2N8yHfYAqtZwWhl4fKehT2uaHF2UlBKKRmV6Y+3zlWk8ruhIef9IhEPWX7pFl2TGd0JEpC3FU0j6s/BYM4FgR+ngFRpcbpLIWV5iUmjraMyy7b2vvftP8XcSeLyIOFDOwwNAqnfjK85baUc7V0qoZZYYqeYwwKnDDuwKajwrA6hZxah8C0fMre88WXnRciN04Cgi8tJChySTP9nJQ+Q3ARaT1Vii5RFfMR2XHNT5X6BisAz9d/amexuM3C0JrQGmF8yBbZTZbcIGxrBWR8wn6Sd02yAU+7w1PaHsbPPjX9aBSgKeHxjl5a2qiic4ilXfdQuKNYlAib+1y9A0mIyOhoibV+Ls4BASEA7gUVdWeu3YHafKIkFrV6wd8IxSxkMLnzIlhRvRhZrAxJgMG/Ezy08IyZFwnznBQYv69PqaZ8G9KFJhTuB5VKZetS1kYaKWK1JSB0UF29E6aRstf7i1oAxlNNJDzjz5f1T58Zhfjr9WuxAPJfmndACfx0sTDjc63IXjHYmOMhri6Rbie92qzV6qEVllCi6TgBclf8qItFzO6IkDgmDDZ35r4/y1Muo4ktht5VesVcgq614V87hqyI4vqVgU0jabSnYmhbqlBA1o0p2KPVyWilJrmxkrsRcCffsdPSBgpvC6zFMM7szIc1wrKAGivFk6nYZDx6/lFIfnFX/NIjdwVE1kClrqEn++A/o9sCJBRkBvRVTnfBF5PjoTLgAAAAAAAAAAAAAAAQxRznfHihkYIejQWZEiQaIOI9WZjTs26mWal6OBvMgKkBZGZs00AAfiXzz9oSQtDTR5f3UDjenk/AFzcJXydAr7/dAdwECuVpx660s7uT1/cGQ08VrHl0wPF/KftR+7ZckGpaBy6OkOsRnZRgAEDlsxMpRJ98W/ZMlfjcMMuZ2kyLhcYBwACMl1Nl3+7fikhtSW94XePW0Zgqgwk0glxc8ynfhv84kNrVuzb6Yn2ErJp1CJjH3p6TXzBr886pqjahie8/pJd3Gk5sZSFCLvxQbZP9AIczC5HKzigaoNKnPQLxQPqqXPnZSR72b/j30z4XDU4yHvzN+gDJD1MGvoFlpPAGzcgKZsYVk6RDdlgDNDioUSFiByWgPuo/lefWqun5Dc+T4oPK6ID8XGjsuhm6m/GAZR0k3u3szwV5D0OOM0V7NuH7wO6fg7uq1HfLR+xbbydG131my+TqsmYFdKSOF1Gd6b0KtFi+Cxbbz564crfOTRTa1sd2a1u+bCz4TdsEtJOM+I6Qt9VE8uA+1r4R9FEWyzGHZ5F+Qr/bE/Ty9qbV1qEJtw2AoZRL61PpflT55vdd5jrjXOmIyhij+TXIK+/qsuNf/AjWlq74sMLh2QXmohCmQBSQihkjAlEMVoeKKp7gHdvaXcBEeAp4dziH2iCM3vt6bHn/IP4KSFg1K1fSBcaeZXRrpp0zqrETMQj6A2rYDlTWz608OKZaC8Tpwgy55L6ABdKynbVosgbmfHH9BIn3UTtu+RunwkyRU9NY5PGVzMYHJfkgaK5nVVtqRiPfVrbe/FR7ZxlrCmWqJ8RXXUCXcOH1nF70Px/O+Kq5YwEQf2z23AGOHXdDpGh/N4kO3Vrev3Q5McBVl+WdhQHuuKMednOqcXXv5TdNdarIiQgwiUnxgSw8mmtN1sSs+suFUmKKPOp5wDdDp1eHvYuT2NHcvKaWcWmLknZvuqYtCXJ3qj5GyJ0gAMQS9EDeAQ5wyMt21y22usxI49HKnYD7azB0eKG/kG6+wei5MVn980smOpt9OHV8dfLaXCEFjIpDxzv5iavccYjeoRl5f4adVCfAJe5+Q7xJN+HWlXRYSDOmCo+7cHaUoL0UQDhgIamCb3Rgz+igOMRm3DsJvkIrpsisq9Fyj+f+bb88U1OM9+xvL7gfgS154fjC69GQtLWd0clUBjdi8/2TxR5izx2U+G+K7pgf+wKI4u3RX6IEmQvj/L7u9BFVs9I++TTNp23mKnqFealHYYPAQC21mKxSAYeJsXQ5tb7pY9airSiadjDG4edpG+xyL0bjxitZkugsElxj8Pstcl2qb6WEyvnIi6vVHIe7Nh5CuWVcmSBTkb3sa4kPvRQnvZnzYdMH2nkpVx/9yBTP2oEb86TGb14nHfcnuL9f85XwPOlp1AczEWNwC8cxJChoGRlqCKQKTo6edevyqt3kIG6h55IthR3cUGxkZzWhRdcmWmUwC7L73+TTBK/u+aAE09asfSzi9ZH1mCBcATysIJQZM1yuBv6YluDJAXWBt6NDkLsZ9Iz+SMG6dTjHKc3sUztXLw2QhzWTm6Ekrsi7GmhTLEGRZn8Z0PPes8nE4+P+m5hPcFZEytgLuZ4SjsKbS3IKT6rxFGQnQW0QpurIMUDMbqyXWikqEtDPnuvw2Zs/+mmeS47ziLT7+3DWk2AfK/w9TixVUHhzIfxhq5DFEc98WMrjHj/oxbZckBVw47G4o6/waX/AXpp6zn6hdoxbvL6JTolmimScJ+fsx166OglZ06z2F67dwcWJXyMmZeeX8OhBUoupRtXsJXYhPw3IObxRP3xdacPR1lO/t2k0QfADQ0YQeYA9AuWYj5Yh21K1WFqvpt2VIdpWodwOO2O5e8Y25CmTueN1GvbOrwOkrDqAA9O2+fP3Pk30RPNpVLRsPiecgXerCIYIW8GXi+e+VWfifKG7JFI9ShCPJZgJH/IEY9yodPe51xeldylQCWQQdzJupWf9rzqYriyIYlOfgvF9q5ysNtTfVuVqDDwraDdx45kinmhiGvsFhL9f95FBgp6+DfOeZnZYicuV9bt3imrpwcQZb/6WUdsJiIJoFDrQ21UGxJ2csYgcW75soZOUF5wzfPDrFpwB7q1TEnyqlpGLfCJTcKz+yOMAZP1K2+OEzHq09qmg6vNjRv6dNFk7q4n64EMLsKBc8E6/dKQc64j6eXqqNFYDGrZOjke4ZQnUnGSUvCGH7bUfm9KvOn8WRZHy2rv4SpOu9LR1iTzQ9kA61e5sjh+lUBdlP1Kd0LjKOtbKsoiFiQhxeCJElgMeyZsa27rq7t3C1WQPwfN4XwK3lMFupuGDpA6exxpM5i/+Sc2xScm2Tz8emMdlsgzzppDPUivEgLXI5Voum4KbOJIDKdrBzrJTUGA+3KfujIXAnztSnsStJ5XdCQ8/7wxeIk8+8OsOw/XpzI5ocBo5V9KuNUINhkuKhpvqSELfNdghSNsIxLS8GnG12P4EzOBsr7GGoLoo//kBQW6/MTzjw0noDN6nVktqzG+8WlwWlY1TpqmhhDKXw4NnW7ljA0fZ8Eg6gdT2p+ElN6d7DJjRGJGINoX7zFhP686zizNqhB+Xegt+xvyCo/Fe5t8jgCMepo3t132UGo9MWsepIPOM6ZzG+wXWQ6TXDbbdJMn1MRwDkpIMeA5SZGTWNRn1vuYHzfRW4angK7y0+I4ycQewgneYZNbS/RiouRwjRPUdQ+eu3YHafKGBYInBNeAoVZ1MVNLSsnOr5/HVSTMMi+9OEWAOm+Ga0P32bKhQ0wcc9Z7u74gQFpbRzk224096DMjmgnLGF+c8/8icEpjgNczmkzHHGmUoIOAAAAAAAAA="},653493:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/photo-kt443t6d_64hdh43hfh6dgjdfhg4_d-864be48f76a28ed6a3e155f7ab51bc74.jpg"},504471:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/processed-5751cab7b691c0c9b52cee8356bce340.webp"},587708:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/results-5cfd13401f48fa7e53cc0ef357764aff.webp"},579768:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/uk_dash-f7d953ee634f62578a3b703c543ac2d7.webp"},526491:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/uk_dash_np-ae2f529ea3d1e10b8d1fe5656f1e641a.webp"},766487:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/validation_batch-a388f384f76d8c8f5215752148bda3be.webp"}}]); \ No newline at end of file diff --git a/assets/js/648e5e1d.fde7571e.js b/assets/js/648e5e1d.42def162.js similarity index 87% rename from assets/js/648e5e1d.fde7571e.js rename to assets/js/648e5e1d.42def162.js index ec9c3435bd..f7014835a2 100644 --- a/assets/js/648e5e1d.fde7571e.js +++ b/assets/js/648e5e1d.42def162.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmikes_dev_notebook=self.webpackChunkmikes_dev_notebook||[]).push([[77079],{289207:i=>{i.exports=JSON.parse('{"label":"Zabbix","permalink":"/docs/tags/zabbix","allTagsPath":"/docs/tags","count":19,"items":[{"id":"DevOps/Zabbix/2022-01-15--zabbix-grafana-dashboard/index","title":"Grafana Dashboard for Zabbix v6","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-15--zabbix-grafana-dashboard/2022-01-15"},{"id":"DevOps/Zabbix/2022-01-13--zabbix-api-testing/index","title":"Testing the Zabbix API with Postman","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-13--zabbix-api-testing/2022-01-13"},{"id":"DevOps/Zabbix/2020-07-16--zabbix-agent/index","title":"Zabbix Agent","description":"Shenzhen, China","permalink":"/docs/DevOps/Zabbix/2020-07-16--zabbix-agent/2020-07-16"},{"id":"DevOps/Zabbix/2021-01-14--zabbix-apache2-monitor/index","title":"Zabbix Apache 2 Monitor","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2021-01-14--zabbix-apache2-monitor/2021-10-14"},{"id":"DevOps/Zabbix/2020-07-19--zabbix-company-logo/index","title":"Zabbix Company Logo","description":"Mong Kok, Hong Kong","permalink":"/docs/DevOps/Zabbix/2020-07-19--zabbix-company-logo/2020-07-19"},{"id":"DevOps/Zabbix/2020-07-15--zabbix-docker-installation/index","title":"Zabbix Docker Installation","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Zabbix/2020-07-15--zabbix-docker-installation/2020-07-15"},{"id":"DevOps/Zabbix/2021-10-13--zabbix-compose-setup/index","title":"Zabbix Docker-Compose Setup","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2021-10-13--zabbix-compose-setup/2021-10-13"},{"id":"DevOps/Zabbix/2020-07-18--zabbix-email-notification/index","title":"Zabbix Email Notifications","description":"Mong Kok, Hong Kong","permalink":"/docs/DevOps/Zabbix/2020-07-18--zabbix-email-notification/2020-07-18"},{"id":"DevOps/Zabbix/2022-01-14--zabbix-http-cert-monitor/index","title":"Zabbix HTTPS Certificate Monitor","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-14--zabbix-http-cert-monitor/2022-01-14"},{"id":"DevOps/Zabbix/2020-07-17--zabbix-website-monitor/index","title":"Zabbix Monitoring a Website","description":"Mong Kok, Hong Kong","permalink":"/docs/DevOps/Zabbix/2020-07-17--zabbix-website-monitor/2020-07-17"},{"id":"DevOps/Zabbix/2020-07-20--zabbix-behind-nginx/index","title":"Zabbix Multi-Tenant NGINX Docker Ingress","description":"Mong Kok, Hong Kong","permalink":"/docs/DevOps/Zabbix/2020-07-20--zabbix-behind-nginx/2020-07-20"},{"id":"DevOps/Zabbix/2022-01-14--zabbix-apache2-monitor/index","title":"Zabbix v6 Apache 2 Monitor","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-14--zabbix-apache2-monitor/2022-01-14"},{"id":"DevOps/Zabbix/2022-01-16--zabbix-v6-baseline-monitoring/index","title":"Zabbix v6 Creating triggers for Baseline monitoring and Anomaly detection","description":"TST, Hong Kong","permalink":"/docs/DevOps/Zabbix/2022-01-16--zabbix-v6-baseline-monitoring/2022-01-16"},{"id":"DevOps/Zabbix/2022-01-14--zabbix-docker-monitor/index","title":"Zabbix v6 Docker Monitor","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-14--zabbix-docker-monitor/2022-01-14"},{"id":"DevOps/Zabbix/2022-01-13--zabbix-server-v6/index","title":"Zabbix v6 Docker-Compose Setup","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-13--zabbix-server-v6/2022-01-13"},{"id":"DevOps/Zabbix/2022-01-15--zabbix-v6-email-notifications/index","title":"Zabbix v6 Email Notifications","description":"TST, Hong Kong","permalink":"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-email-notifications/2022-01-15"},{"id":"DevOps/Zabbix/2022-01-14--zabbix-nginx-monitor/index","title":"Zabbix v6 NGINX Monitor","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-14--zabbix-nginx-monitor/2022-01-14"},{"id":"DevOps/Zabbix/2022-01-15--zabbix-v6-slack-notifications/index","title":"Zabbix v6 Slack Notifications","description":"TST, Hong Kong","permalink":"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-slack-notifications/2022-01-15"},{"id":"DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/index","title":"Zabbix v6 SMART HDD Check","description":"TST, Hong Kong","permalink":"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/2022-01-15"}],"unlisted":false}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmikes_dev_notebook=self.webpackChunkmikes_dev_notebook||[]).push([[77079],{289207:i=>{i.exports=JSON.parse('{"label":"Zabbix","permalink":"/docs/tags/zabbix","allTagsPath":"/docs/tags","count":20,"items":[{"id":"DevOps/Zabbix/2022-01-15--zabbix-grafana-dashboard/index","title":"Grafana Dashboard for Zabbix v6","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-15--zabbix-grafana-dashboard/2022-01-15"},{"id":"DevOps/Zabbix/2022-01-13--zabbix-api-testing/index","title":"Testing the Zabbix API with Postman","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-13--zabbix-api-testing/2022-01-13"},{"id":"DevOps/Zabbix/2020-07-16--zabbix-agent/index","title":"Zabbix Agent","description":"Shenzhen, China","permalink":"/docs/DevOps/Zabbix/2020-07-16--zabbix-agent/2020-07-16"},{"id":"DevOps/Zabbix/2021-01-14--zabbix-apache2-monitor/index","title":"Zabbix Apache 2 Monitor","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2021-01-14--zabbix-apache2-monitor/2021-10-14"},{"id":"DevOps/Zabbix/2020-07-19--zabbix-company-logo/index","title":"Zabbix Company Logo","description":"Mong Kok, Hong Kong","permalink":"/docs/DevOps/Zabbix/2020-07-19--zabbix-company-logo/2020-07-19"},{"id":"DevOps/Zabbix/2020-07-15--zabbix-docker-installation/index","title":"Zabbix Docker Installation","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Zabbix/2020-07-15--zabbix-docker-installation/2020-07-15"},{"id":"DevOps/Zabbix/2021-10-13--zabbix-compose-setup/index","title":"Zabbix Docker-Compose Setup","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2021-10-13--zabbix-compose-setup/2021-10-13"},{"id":"DevOps/Zabbix/2020-07-18--zabbix-email-notification/index","title":"Zabbix Email Notifications","description":"Mong Kok, Hong Kong","permalink":"/docs/DevOps/Zabbix/2020-07-18--zabbix-email-notification/2020-07-18"},{"id":"DevOps/Zabbix/2022-01-14--zabbix-http-cert-monitor/index","title":"Zabbix HTTPS Certificate Monitor","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-14--zabbix-http-cert-monitor/2022-01-14"},{"id":"DevOps/Zabbix/2020-07-17--zabbix-website-monitor/index","title":"Zabbix Monitoring a Website","description":"Mong Kok, Hong Kong","permalink":"/docs/DevOps/Zabbix/2020-07-17--zabbix-website-monitor/2020-07-17"},{"id":"DevOps/Zabbix/2020-07-20--zabbix-behind-nginx/index","title":"Zabbix Multi-Tenant NGINX Docker Ingress","description":"Mong Kok, Hong Kong","permalink":"/docs/DevOps/Zabbix/2020-07-20--zabbix-behind-nginx/2020-07-20"},{"id":"DevOps/Zabbix/2022-01-14--zabbix-apache2-monitor/index","title":"Zabbix v6 Apache 2 Monitor","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-14--zabbix-apache2-monitor/2022-01-14"},{"id":"DevOps/Zabbix/2022-01-16--zabbix-v6-baseline-monitoring/index","title":"Zabbix v6 Creating triggers for Baseline monitoring and Anomaly detection","description":"TST, Hong Kong","permalink":"/docs/DevOps/Zabbix/2022-01-16--zabbix-v6-baseline-monitoring/2022-01-16"},{"id":"DevOps/Zabbix/2022-01-14--zabbix-docker-monitor/index","title":"Zabbix v6 Docker Monitor","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-14--zabbix-docker-monitor/2022-01-14"},{"id":"DevOps/Zabbix/2022-01-13--zabbix-server-v6/index","title":"Zabbix v6 Docker-Compose Setup","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-13--zabbix-server-v6/2022-01-13"},{"id":"DevOps/Zabbix/2022-01-15--zabbix-v6-email-notifications/index","title":"Zabbix v6 Email Notifications","description":"TST, Hong Kong","permalink":"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-email-notifications/2022-01-15"},{"id":"DevOps/Zabbix/2022-01-14--zabbix-nginx-monitor/index","title":"Zabbix v6 NGINX Monitor","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-14--zabbix-nginx-monitor/2022-01-14"},{"id":"DevOps/Zabbix/2022-01-15--zabbix-v6-slack-notifications/index","title":"Zabbix v6 Slack Notifications","description":"TST, Hong Kong","permalink":"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-slack-notifications/2022-01-15"},{"id":"DevOps/Zabbix/2024-03-07--zabbix-v6-hdd-cpu-temp-check/index","title":"Zabbix v6 SMART HDD and CPU Temperature Check","description":"TST, Hong Kong","permalink":"/docs/DevOps/Zabbix/2024-03-07--zabbix-v6-hdd-cpu-temp-check/2024-03-08"},{"id":"DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/index","title":"Zabbix v6 SMART HDD Check","description":"TST, Hong Kong","permalink":"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/2022-01-15"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/6af14956.f3b4def0.js b/assets/js/6af14956.af0cce9e.js similarity index 98% rename from assets/js/6af14956.f3b4def0.js rename to assets/js/6af14956.af0cce9e.js index 18c5b7790b..cb9716826c 100644 --- a/assets/js/6af14956.f3b4def0.js +++ b/assets/js/6af14956.af0cce9e.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmikes_dev_notebook=self.webpackChunkmikes_dev_notebook||[]).push([[58221],{916567:i=>{i.exports=JSON.parse('{"label":"LINUX","permalink":"/docs/tags/linux","allTagsPath":"/docs/tags","count":301,"items":[{"id":"Automation_and_Robotics/Home_Automation/2020-09-15--mock-rest-api-with-nodered/index","title":"A Mock REST API in Node-RED and Docker","description":"Koh Rong, Cambodia","permalink":"/docs/Automation_and_Robotics/Home_Automation/2020-09-15--mock-rest-api-with-nodered/2020-09-16"},{"id":"DevOps/Linux/2020-10-20--activating-root-login-ubuntu-20-10/index","title":"Activating Root Login on Ubuntu 20.10","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Linux/2020-10-20--activating-root-login-ubuntu-20-10/2020-10-20"},{"id":"DevOps/NGINX/2019-11-08--nginx-rtmp-website/index","title":"Adding an OBS Stream to your Website","description":"Koh Rong, Cambodia","permalink":"/docs/DevOps/NGINX/2019-11-08--nginx-rtmp-website/2019-11-08"},{"id":"Automation_and_Robotics/Home_Automation/2019-09-28--node-red-homekit-containerized/index","title":"Adding Homekit to your Node-RED Container in Podman","description":"Siem Reap, Cambodia","permalink":"/docs/Automation_and_Robotics/Home_Automation/2019-09-28--node-red-homekit-containerized/2019-09-28"},{"id":"DevOps/Security/2022-09-27--wireshark-with-tls-encryption/index","title":"Analyzing and Decrypting TLS with Wireshark","description":"Capturing session keys to decrypt TLS traffic.","permalink":"/docs/DevOps/Security/2022-09-27--wireshark-with-tls-encryption/2022-09-27"},{"id":"DevOps/Ansible/2020-11-20--ansible-copy-cheat-sheet/index","title":"Ansible Copy Cheat Sheet","description":"Shenzhen, China","permalink":"/docs/DevOps/Ansible/2020-11-20--ansible-copy-cheat-sheet/2020-11-20"},{"id":"DevOps/Ansible/2020-11-26--ansible-dind/index","title":"Ansible Docker-in-Docker","description":"Shenzhen, China","permalink":"/docs/DevOps/Ansible/2020-11-26--ansible-dind/2020-11-26"},{"id":"DevOps/Ansible/2020-11-22--ansible-and-docker/index","title":"Ansible for Docker Deployment","description":"Shenzhen, China","permalink":"/docs/DevOps/Ansible/2020-11-22--ansible-and-docker/2020-11-22"},{"id":"DevOps/Ansible/2020-11-23--ansible-getting-serious/index","title":"Ansible Getting Serious","description":"Shenzhen, China","permalink":"/docs/DevOps/Ansible/2020-11-23--ansible-getting-serious/2020-11-23"},{"id":"DevOps/Ansible/2020-11-25--ansible-in-gitlab-ci/index","title":"Ansible in Gitlab CI Pipelines","description":"Shenzhen, China","permalink":"/docs/DevOps/Ansible/2020-11-25--ansible-in-gitlab-ci/2020-11-25"},{"id":"DevOps/Ansible/2020-11-19--ansible-playbooks/index","title":"Ansible Playbooks","description":"Shenzhen, China","permalink":"/docs/DevOps/Ansible/2020-11-19--ansible-playbooks/2020-11-19"},{"id":"DevOps/Ansible/2021-05-02-ansible-tower-examples/index","title":"Ansible Tower Practical Examples","description":"Guangzhou, China","permalink":"/docs/DevOps/Ansible/2021-05-02-ansible-tower-examples/2021-05-02"},{"id":"DevOps/Ansible/2021-05-01-ansible-tower-workflow-templates/index","title":"Ansible Tower Workflow Templates","description":"Guangzhou, China","permalink":"/docs/DevOps/Ansible/2021-05-01-ansible-tower-workflow-templates/2021-05-01"},{"id":"DevOps/Ansible/2020-11-24--ansible-vault-user-login/index","title":"Ansible Vault for User Logins","description":"Shenzhen, China","permalink":"/docs/DevOps/Ansible/2020-11-24--ansible-vault-user-login/2020-11-24"},{"id":"DevOps/Ansible/2020-11-21--ansible-modules-and-roles/index","title":"Ansible Vault, Modules & Roles","description":"Shenzhen, China","permalink":"/docs/DevOps/Ansible/2020-11-21--ansible-modules-and-roles/2020-11-21"},{"id":"DevOps/Hashicorp/2022-05-25-hashicorp-nomad-with-gitlab/index","title":"App Deployment with Hashicorp Nomad from Gitlab","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-05-25-hashicorp-nomad-with-gitlab/2022-05-25"},{"id":"DevOps/Hashicorp/2022-05-26-hashicorp-nomad-with-gitlab-part-2/index","title":"App Deployment with Hashicorp Nomad from Gitlab Part Deux","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-05-26-hashicorp-nomad-with-gitlab-part-2/2022-05-26"},{"id":"DevOps/Linux/2023-02-03--installing-docker-raspberry-pi/index","title":"ARM Docker","description":"Installing Docker on a Raspberry Pi","permalink":"/docs/DevOps/Linux/2023-02-03--installing-docker-raspberry-pi/2023-02-03"},{"id":"DevOps/Provisioning/2022-01-27--bind9-configuration/index","title":"Bind9 Server Configuration","description":"Shenzhen, China","permalink":"/docs/DevOps/Provisioning/2022-01-27--bind9-configuration/2022-01-27"},{"id":"DevOps/Linux/2022-09-29--build-an-chrony-nts-client-from-source/index","title":"Build a Chrony NTS Client from Source","description":"Building a client from source for a time service which uses IETF RFC 8915 called \u201cNetwork Time Security\u201c (NTS).","permalink":"/docs/DevOps/Linux/2022-09-29--build-an-chrony-nts-client-from-source/2022-09-29"},{"id":"DevOps/NGINX/2019-11-07--nginx-rtmp-streaming-container/index","title":"Building an RTMP Streaming Server with Podman","description":"Harbin, China","permalink":"/docs/DevOps/NGINX/2019-11-07--nginx-rtmp-streaming-container/2019-11-07"},{"id":"Automation_and_Robotics/MQTT/2022-03-27--build-mosquitto-from-source/index","title":"Building Eclipse Mosquitto v2 from Source","description":"Guangzhou, China","permalink":"/docs/Automation_and_Robotics/MQTT/2022-03-27--build-mosquitto-from-source/2022-03-27"},{"id":"DevOps/Linux/2020-01-05--centos8-cockpit/index","title":"CentOS 8 Cockpit Web Console","description":"Siem Reap, Cambodia","permalink":"/docs/DevOps/Linux/2020-01-05--centos8-cockpit/2020-01-05"},{"id":"DevOps/Linux/2019-09-22--centos8-network-config/index","title":"CentOS 8 Network Configuration","description":"Mong Kok, Hongkong","permalink":"/docs/DevOps/Linux/2019-09-22--centos8-network-config/2019-09-22"},{"id":"DevOps/Linux/2019-01-13--centos-administration/index","title":"Centos Administration","description":"Abashiri, Japan","permalink":"/docs/DevOps/Linux/2019-01-13--centos-administration/2019-01-13"},{"id":"DevOps/Linux/2019-01-12--centos-network-configuration/index","title":"Centos Network Configuration","description":"Battambang, Cambodia","permalink":"/docs/DevOps/Linux/2019-01-12--centos-network-configuration/2019-01-12"},{"id":"DevOps/Linux/2022-11-04--check-filesystem/index","title":"Check the Filesystem","description":"Check the Filesystem of a mounted SD Card using fsck","permalink":"/docs/DevOps/Linux/2022-11-04--check-filesystem/2022-11-04"},{"id":"DevOps/Hashicorp/2020-08-19--consul-deployment-guide/index","title":"Consul Deployment Guide","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Hashicorp/2020-08-19--consul-deployment-guide/2020-08-19"},{"id":"DevOps/Hashicorp/2020-08-18--consul-service-mesh/index","title":"Consul Service Mesh","description":"TST, Hong Kong","permalink":"/docs/DevOps/Hashicorp/2020-08-18--consul-service-mesh/2020-08-18"},{"id":"Automation_and_Robotics/Home_Automation/2022-12-15--rtsp-to-hls-ffmpeg/index","title":"Convert RTSP to HLS using FFmpeg","description":"INSTAR IP Camera RTSP Stream to HLS with FFMPEG","permalink":"/docs/Automation_and_Robotics/Home_Automation/2022-12-15--rtsp-to-hls-ffmpeg/2022-12-15"},{"id":"DevOps/Kubernetes/2019-01-15--creating-a-kubernetes-cluster/index","title":"Creating a Kubernetes Cluster","description":"Shanghai, China","permalink":"/docs/DevOps/Kubernetes/2019-01-15--creating-a-kubernetes-cluster/2019-01-15"},{"id":"DevOps/Linux/2019-01-11--debian-change-ssh-port-hostname/index","title":"Debian SSH Port and Hostname","description":"Battambang, Cambodia","permalink":"/docs/DevOps/Linux/2019-01-11--debian-change-ssh-port-hostname/2019-01-11"},{"id":"DevOps/Linux/2021-03-15-debian-upgrade-bullseye/index","title":"Debian Upgrade to Bullseye","description":"Hongkong, TST","permalink":"/docs/DevOps/Linux/2021-03-15-debian-upgrade-bullseye/2021-03-15"},{"id":"DevOps/Provisioning/2022-11-07--cphalcon-docker/index","title":"Deploy a cPhalcon App with Docker","description":"User Docker to provision a cPhalcon PHP application","permalink":"/docs/DevOps/Provisioning/2022-11-07--cphalcon-docker/2022-11-07"},{"id":"DevOps/Hashicorp/2022-11-18-hashicorp-nomad-grav/index","title":"Deploy Grav CMS with Hashicorp Nomad","description":"Using Nomad to deploy the Grav open source flat-file CMS","permalink":"/docs/DevOps/Hashicorp/2022-11-18-hashicorp-nomad-grav/2022-11-18"},{"id":"DevOps/Provisioning/2022-11-16--mautic-docker/index","title":"Deploy Mautic with Docker","description":"User Docker to provision the Mautic Free and Open Source Marketing Automation Platform","permalink":"/docs/DevOps/Provisioning/2022-11-16--mautic-docker/2022-11-16"},{"id":"DevOps/Hashicorp/2022-11-16-hashicorp-nomad-mautic/index","title":"Deploy Mautic with Hashicorp Nomad","description":"Using Nomad to deploy the Mautic Marketing Automation Platform","permalink":"/docs/DevOps/Hashicorp/2022-11-16-hashicorp-nomad-mautic/2022-11-16"},{"id":"DevOps/Provisioning/2022-01-26--dns-over-TLS-docker/index","title":"DNS Over TLS Using BIND And Nginx","description":"Shenzhen, China","permalink":"/docs/DevOps/Provisioning/2022-01-26--dns-over-TLS-docker/2022-01-26"},{"id":"DevOps/Provisioning/2020-09-02--docker-compose-networking/index","title":"Docker Compose Networking","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Provisioning/2020-09-02--docker-compose-networking/2020-09-02"},{"id":"DevOps/Linux/2019-06-14--download-and-save-docker-image/index","title":"Downloading Docker Images for Offline Use","description":"Mustang, Nepal","permalink":"/docs/DevOps/Linux/2019-06-14--download-and-save-docker-image/2019-06-14"},{"id":"DevOps/Linux/2021-10-09--editor-from-hell/index","title":"Editor from Hell","description":"Harbin , China","permalink":"/docs/DevOps/Linux/2021-10-09--editor-from-hell/2021-10-09"},{"id":"DevOps/Elasticsearch/2021-03-31-elastic-filebeats-for-apache-logs/index","title":"Elastic Filebeat and Apache Access Logs","description":"Otaru, Japan","permalink":"/docs/DevOps/Elasticsearch/2021-03-31-elastic-filebeats-for-apache-logs/2021-03-31"},{"id":"DevOps/Elasticsearch/2021-04-01-elastic-filebeats-for-nginx-logs/index","title":"Elastic Filebeat and NGINX Access Logs","description":"Mongkok, Hongkong","permalink":"/docs/DevOps/Elasticsearch/2021-04-01-elastic-filebeats-for-nginx-logs/2021-04-01"},{"id":"DevOps/Elasticsearch/2022-02-05--kibana-v8-index-management/index","title":"Elasticsearch & Kibana v8 Index Management","description":"Shenzhen, China","permalink":"/docs/DevOps/Elasticsearch/2022-02-05--kibana-v8-index-management/2022-02-05"},{"id":"DevOps/Elasticsearch/2022-02-04--kibana-v8-search-queries/index","title":"Elasticsearch & Kibana v8 Search Cheat Sheet","description":"Shenzhen, China","permalink":"/docs/DevOps/Elasticsearch/2022-02-04--kibana-v8-search-queries/2022-02-04"},{"id":"DevOps/Elasticsearch/2021-03-27-elasticsearch7-aggregations/index","title":"Elasticsearch 7 Aggregations","description":"Abashiri, Japan","permalink":"/docs/DevOps/Elasticsearch/2021-03-27-elasticsearch7-aggregations/2021-03-27"},{"id":"DevOps/Elasticsearch/2021-03-30-elasticsearch7-and-filebeats/index","title":"Elasticsearch 7 and Filebeats","description":"Harbin, China","permalink":"/docs/DevOps/Elasticsearch/2021-03-30-elasticsearch7-and-filebeats/2021-03-30"},{"id":"DevOps/Elasticsearch/2021-03-29-elasticsearch7-data-transformations/index","title":"Elasticsearch 7 Data Transformation","description":"Harbin, China","permalink":"/docs/DevOps/Elasticsearch/2021-03-29-elasticsearch7-data-transformations/2021-03-29"},{"id":"DevOps/Elasticsearch/2021-03-20-elasticsearch-7-refresher/index","title":"Elasticsearch 7 Refresher","description":"Hongkong, TST","permalink":"/docs/DevOps/Elasticsearch/2021-03-20-elasticsearch-7-refresher/2021-03-20"},{"id":"DevOps/Elasticsearch/2021-03-28-elasticsearch7-timeseries/index","title":"Elasticsearch 7 Timeseries","description":"Kathmandu, Nepal","permalink":"/docs/DevOps/Elasticsearch/2021-03-28-elasticsearch7-timeseries/2021-03-28"},{"id":"DevOps/Elasticsearch/2021-03-26-elasticsearch7-for-syslog-messages/index","title":"Elasticsearch 7 to log Linux System Events","description":"Harbin, China","permalink":"/docs/DevOps/Elasticsearch/2021-03-26-elasticsearch7-for-syslog-messages/2021-03-26"},{"id":"DevOps/Elasticsearch/2017-12-26--elasticsearch-kibana/index","title":"Elasticsearch and Kibana","description":"Battambang, Cambodia","permalink":"/docs/DevOps/Elasticsearch/2017-12-26--elasticsearch-kibana/2017-12-16"},{"id":"DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/cheat-sheet","title":"Elasticsearch Cheat Sheet","description":"Source: JoliCode","permalink":"/docs/DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/elasticsearch-cheat-sheet"},{"id":"DevOps/Elasticsearch/2022-02-06--elasticsearch-v8-data-ingestion-apache/index","title":"Elasticsearch v8, Filebeat (Docker) and Apache","description":"Shenzhen, China","permalink":"/docs/DevOps/Elasticsearch/2022-02-06--elasticsearch-v8-data-ingestion-apache/2022-02-06"},{"id":"DevOps/Elasticsearch/2022-02-03--elasticsearch-v8-data-ingestion/index","title":"Elasticsearch v8, Filebeat (Docker) and NGINX","description":"Shenzhen, China","permalink":"/docs/DevOps/Elasticsearch/2022-02-03--elasticsearch-v8-data-ingestion/2022-02-03"},{"id":"DevOps/Linux/2023-03-29--installing-the-elgato-streamdeck/index","title":"Elgato Streamdeck on Arch Linux","description":"Installing the Elgato Streamdeck on Arch Linux","permalink":"/docs/DevOps/Linux/2023-03-29--installing-the-elgato-streamdeck/2023-03-29"},{"id":"DevOps/Linux/2022-03-07--ffmpeg-cheat-sheet/index","title":"FFMPEG Cheat Sheet","description":"ffmpeg version 5.0-full_build-www.gyan.dev Copyright (c) 2000-2022","permalink":"/docs/DevOps/Linux/2022-03-07--ffmpeg-cheat-sheet/2022-03-07"},{"id":"DevOps/Provisioning/2021-01-22-file-transfer-tools-in-nodejs/index","title":"File Transfer Tool in Node.js","description":"Shenzhen, China","permalink":"/docs/DevOps/Provisioning/2021-01-22-file-transfer-tools-in-nodejs/2021-01-22"},{"id":"DevOps/Linux/2022-03-09--fing-cli-network-scanner/index","title":"Fing CLI Network Scanner on Arch Linux","description":"Shenzhen, China","permalink":"/docs/DevOps/Linux/2022-03-09--fing-cli-network-scanner/2022-03-09"},{"id":"DevOps/Linux/2023-10-28--lunarvim/index","title":"From NeoVim to LunarVim","description":"An IDE layer for Neovim with sane defaults. Completely free and community driven.","permalink":"/docs/DevOps/Linux/2023-10-28--lunarvim/2023-10-28"},{"id":"DevOps/Provisioning/2023-02-13--meili-search-gatsby/index","title":"Gatsby Blog with a MeiLi Search Backend","description":"Serve your Gatsby.js Blog in a goFiber container and connect a Search Engine.","permalink":"/docs/DevOps/Provisioning/2023-02-13--meili-search-gatsby/2023-02-13"},{"id":"Automation_and_Robotics/Robotics_Simulation/2023-11-19--ros2-gazebo-installation/index","title":"Gazebo & ROS2 Basic Installation","description":"Gazebo brings a fresh approach to simulation with a complete toolbox of development libraries and cloud services to make simulation easy.","permalink":"/docs/Automation_and_Robotics/Robotics_Simulation/2023-11-19--ros2-gazebo-installation/2023-11-19"},{"id":"DevOps/Provisioning/2022-01-24--getting-to-know-bind9-docker/index","title":"Getting to know the BIND9 DNS Server with Docker","description":"Shenzhen, China","permalink":"/docs/DevOps/Provisioning/2022-01-24--getting-to-know-bind9-docker/2022-01-24"},{"id":"DevOps/GitOps/2020-08-03--gitlab-as-docker-registry/index","title":"Gitlab as Docker Registry","description":"Guangzhou, China","permalink":"/docs/DevOps/GitOps/2020-08-03--gitlab-as-docker-registry/2020-08-03"},{"id":"DevOps/Linux/2021-04-12-gnome3-cheat-sheet/index","title":"Gnome3 Cheat Sheet","description":"Victoria Harbour, Hongkong","permalink":"/docs/DevOps/Linux/2021-04-12-gnome3-cheat-sheet/2021-04-12"},{"id":"Development/Go/2021-10-08--goftp/index","title":"goFTP","description":"Victoria , Hong Kong","permalink":"/docs/Development/Go/2021-10-08--goftp/2021-10-08"},{"id":"DevOps/Zabbix/2022-01-15--zabbix-grafana-dashboard/index","title":"Grafana Dashboard for Zabbix v6","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-15--zabbix-grafana-dashboard/2022-01-15"},{"id":"Automation_and_Robotics/Home_Automation/2022-12-22--grafana-for-iot/index","title":"Grafana IoT Dashboard","description":"Building IoT Visualizations using Grafana","permalink":"/docs/Automation_and_Robotics/Home_Automation/2022-12-22--grafana-for-iot/2022-12-22"},{"id":"DevOps/Hashicorp/2022-12-04-hashicorp-consul-vault-certificates-part1/index","title":"Hashicorp Consul - Vault Cert Management Part 1","description":"Set-up Vault to be the Certificate Authority","permalink":"/docs/DevOps/Hashicorp/2022-12-04-hashicorp-consul-vault-certificates-part1/2022-12-04"},{"id":"DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part2/index","title":"Hashicorp Consul - Vault Cert Management Part 2","description":"Set-up Vault to be the Certificate Authority","permalink":"/docs/DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part2/2022-12-05"},{"id":"DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part3/index","title":"Hashicorp Consul - Vault Cert Management Part 3","description":"Set-up Vault to be the Certificate Authority","permalink":"/docs/DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part3/2022-12-05"},{"id":"DevOps/Hashicorp/2021-08-13--hashicorp-consul-access-control-lists/index","title":"Hashicorp Consul Refresher - Access Control Lists","description":"Phnom Penh, Cambodia","permalink":"/docs/DevOps/Hashicorp/2021-08-13--hashicorp-consul-access-control-lists/2021-08-13"},{"id":"DevOps/Hashicorp/2021-08-11--hashicorp-consul-backups/index","title":"Hashicorp Consul Refresher - Backups","description":"Shenzhen, China","permalink":"/docs/DevOps/Hashicorp/2021-08-11--hashicorp-consul-backups/2021-08-11"},{"id":"DevOps/Hashicorp/2021-08-14--hashicorp-consul-tls-encryption/index","title":"Hashicorp Consul Refresher - Gossip TLS Encryption","description":"Phnom Penh, Cambodia","permalink":"/docs/DevOps/Hashicorp/2021-08-14--hashicorp-consul-tls-encryption/2021-08-14"},{"id":"DevOps/Hashicorp/2021-08-10--hashicorp-consul-key-value-store/index","title":"Hashicorp Consul Refresher - Key Value Store","description":"Mongkok, Hongkong","permalink":"/docs/DevOps/Hashicorp/2021-08-10--hashicorp-consul-key-value-store/2021-08-10"},{"id":"DevOps/Hashicorp/2021-08-06--hashicorp-consul-fabio-loadbalancing/index","title":"Hashicorp Consul Refresher - Loadbalancing with Fabio","description":"Tsim Sha Tsui, Hongkong","permalink":"/docs/DevOps/Hashicorp/2021-08-06--hashicorp-consul-fabio-loadbalancing/2021-08-06"},{"id":"DevOps/Hashicorp/2021-08-06--hashicorp-consul-traefik-loadbalancing/index","title":"Hashicorp Consul Refresher - Loadbalancing with Traefik","description":"Tsim Sha Tsui, Hongkong","permalink":"/docs/DevOps/Hashicorp/2021-08-06--hashicorp-consul-traefik-loadbalancing/2021-08-06"},{"id":"DevOps/Hashicorp/2021-08-05--hashicorp-consul-service-discovery/index","title":"Hashicorp Consul Refresher - Service Discovery","description":"Cheung Chau, Hongkong","permalink":"/docs/DevOps/Hashicorp/2021-08-05--hashicorp-consul-service-discovery/2021-08-05"},{"id":"DevOps/Hashicorp/2021-08-12--hashicorp-consul-service-mesh/index","title":"Hashicorp Consul Refresher - Service Mesh","description":"Wan Chai, Hongkong","permalink":"/docs/DevOps/Hashicorp/2021-08-12--hashicorp-consul-service-mesh/2021-08-12"},{"id":"DevOps/Hashicorp/2021-08-09--hashicorp-consul-services/index","title":"Hashicorp Consul Refresher - Services","description":"Guangzhou, China","permalink":"/docs/DevOps/Hashicorp/2021-08-09--hashicorp-consul-services/2021-08-09"},{"id":"DevOps/Hashicorp/2022-05-21-hashicorp-dojo-consul-refresher/index","title":"Hashicorp Dojo Consul Refresher","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-05-21-hashicorp-dojo-consul-refresher/2022-05-21"},{"id":"DevOps/Hashicorp/2022-10-23-hashicorp-consul-connect/index","title":"Hashicorp Nomad - Working with Consul Connect","description":"CNI Error message with Consul Connect","permalink":"/docs/DevOps/Hashicorp/2022-10-23-hashicorp-consul-connect/2022-10-23"},{"id":"DevOps/Hashicorp/2022-11-24-hashicorp-consul-connect/index","title":"Hashicorp Nomad - Working with Consul Connect","description":"Use the Consul service mesh to connect a frontend with it\'s API backend.","permalink":"/docs/DevOps/Hashicorp/2022-11-24-hashicorp-consul-connect/2022-11-24"},{"id":"DevOps/Hashicorp/2022-10-23-hashicorp-nomad-ports/index","title":"Hashicorp Nomad - Working with Ports","description":"How to declare Ports to be used in Nomad Job files","permalink":"/docs/DevOps/Hashicorp/2022-10-23-hashicorp-nomad-ports/2022-10-23"},{"id":"DevOps/Hashicorp/2022-05-19-hashicorp-dojo-nomad-access-control/index","title":"Hashicorp Nomad Access Control","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-05-19-hashicorp-dojo-nomad-access-control/2022-05-19"},{"id":"DevOps/Hashicorp/2022-05-18-hashicorp-dojo-nomad-adding-encryption/index","title":"Hashicorp Nomad Adding Encryption to your Cluster","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-05-18-hashicorp-dojo-nomad-adding-encryption/2022-05-18"},{"id":"DevOps/Hashicorp/2022-05-17-hashicorp-dojo-nomad-deployment/index","title":"Hashicorp Nomad Deployment","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-05-17-hashicorp-dojo-nomad-deployment/2022-05-17"},{"id":"DevOps/Hashicorp/2022-05-16-hashicorp-dojo-nomad-starter/index","title":"Hashicorp Nomad Dojo","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-05-16-hashicorp-dojo-nomad-starter/2022-05-16"},{"id":"DevOps/Hashicorp/2022-11-15-hashicorp-nomad-nginx-load-balancing/index","title":"Hashicorp Nomad for NGINX Load-balancing","description":"Following along the official NGINX load-balancing tutorial.","permalink":"/docs/DevOps/Hashicorp/2022-11-15-hashicorp-nomad-nginx-load-balancing/2022-11-15"},{"id":"DevOps/Hashicorp/2022-05-24-hashicorp-nomad-with-nginx/index","title":"Hashicorp Nomad for NGINX Web Proxies","description":"","permalink":"/docs/DevOps/Hashicorp/2022-05-24-hashicorp-nomad-with-nginx/2022-05-24"},{"id":"DevOps/Hashicorp/2022-05-15-hashicorp-nomad-refresher/index","title":"Hashicorp Nomad Refresher","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-05-15-hashicorp-nomad-refresher/2022-05-15"},{"id":"DevOps/Hashicorp/2021-08-01--hashicorp-nomad-refresher/index","title":"Hashicorp Nomad Refresher - Installation","description":"Shenzhen, China","permalink":"/docs/DevOps/Hashicorp/2021-08-01--hashicorp-nomad-refresher/2021-08-01"},{"id":"DevOps/Hashicorp/2021-08-04--hashicorp-nomad-job-specifications/index","title":"Hashicorp Nomad Refresher - Job Specifications","description":"Cheung Chau, Hongkong","permalink":"/docs/DevOps/Hashicorp/2021-08-04--hashicorp-nomad-job-specifications/2021-08-04"},{"id":"DevOps/Hashicorp/2021-08-03--hashicorp-nomad-jobs/index","title":"Hashicorp Nomad Refresher - Jobs","description":"Shenzhen, China","permalink":"/docs/DevOps/Hashicorp/2021-08-03--hashicorp-nomad-jobs/2021-08-03"},{"id":"DevOps/Hashicorp/2021-08-02--hashicorp-nomad-security/index","title":"Hashicorp Nomad Refresher - Security","description":"Shenzhen, China","permalink":"/docs/DevOps/Hashicorp/2021-08-02--hashicorp-nomad-security/2021-08-02"},{"id":"DevOps/Hashicorp/2022-11-15-hashicorp-nomad-balanced-nts/index","title":"Hashicorp Nomad Secure & Balanced NTS Time Service","description":"Using Nomad to deploy a secure time server.","permalink":"/docs/DevOps/Hashicorp/2022-11-15-hashicorp-nomad-balanced-nts/2022-11-15"},{"id":"DevOps/Hashicorp/2022-10-22-hashicorp-nomad-sidecar-pattern/index","title":"Hashicorp Nomad Sidecar Pattern","description":"Combine two applications in a single Nomad Job.","permalink":"/docs/DevOps/Hashicorp/2022-10-22-hashicorp-nomad-sidecar-pattern/2022-10-22"},{"id":"DevOps/Hashicorp/2022-11-12-hashicorp-nomad-certbot-renewal/index","title":"Hashicorp Nomad to Renew your TLS Certificates","description":"Using the Periodic Stanza to execute Certbot Renewals","permalink":"/docs/DevOps/Hashicorp/2022-11-12-hashicorp-nomad-certbot-renewal/2022-11-12"},{"id":"DevOps/Hashicorp/2022-11-11-hashicorp-nomad-for-borg-backups/index","title":"Hashicorp Nomad to run periodic backups","description":"Dockerized version of Borg Backup Server with Docker and Nomad","permalink":"/docs/DevOps/Hashicorp/2022-11-11-hashicorp-nomad-for-borg-backups/2022-11-11"},{"id":"DevOps/Hashicorp/2022-05-27-hashicorp-nomad-for-elastic/index","title":"Hashicorp Nomad to set up an Elasticsearch Cluster","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-05-27-hashicorp-nomad-for-elastic/2022-05-27"},{"id":"DevOps/Hashicorp/2022-05-28-hashicorp-nomad-for-elastic-part-2/index","title":"Hashicorp Nomad to set up an Elasticsearch Cluster Part II","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-05-28-hashicorp-nomad-for-elastic-part-2/2022-05-28"},{"id":"DevOps/Hashicorp/2022-10-21-hashicorp-nomad-for-osticket-part-i/index","title":"Hashicorp Nomad to set up an OSTicket Helpdesk - Part I","description":"Porting a OSTicket/MariaDB helpdesk service from Docker-Compose to Nomad","permalink":"/docs/DevOps/Hashicorp/2022-10-21-hashicorp-nomad-for-osticket-part-i/2022-10-21"},{"id":"DevOps/Hashicorp/2022-10-25-hashicorp-nomad-for-osticket-part-ii/index","title":"Hashicorp Nomad to set up an OSTicket Helpdesk - Part II","description":"Porting a OSTicket/MariaDB helpdesk service from Docker-Compose to Nomad","permalink":"/docs/DevOps/Hashicorp/2022-10-25-hashicorp-nomad-for-osticket-part-ii/2022-10-25"},{"id":"DevOps/Hashicorp/2022-05-22-hashicorp-dojo-nomad-consul-part-2/index","title":"Hashicorp Nomad with Consul II - The Reckoning","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-05-22-hashicorp-dojo-nomad-consul-part-2/2022-05-22"},{"id":"DevOps/Hashicorp/2022-05-20-hashicorp-dojo-nomad-consul/index","title":"Hashicorp Nomad with Consul Service Discovery","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-05-20-hashicorp-dojo-nomad-consul/2022-05-20"},{"id":"DevOps/Hashicorp/2022-05-29-hashicorp-nomad-with-nginx-loadbalancer/index","title":"Hashicorp Nomad with NGINX Loadbalancer","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-05-29-hashicorp-nomad-with-nginx-loadbalancer/2022-05-29"},{"id":"DevOps/Hashicorp/2020-10-23--hashicorp-packer-machine-image/index","title":"HashiCorp Packer Machine Images Introduction","description":"TST, Hong Kong","permalink":"/docs/DevOps/Hashicorp/2020-10-23--hashicorp-packer-machine-image/2020-10-23"},{"id":"DevOps/Hashicorp/2020-10-26--hashicorp-packer-provisioner/index","title":"HashiCorp Packer Provisioning","description":"TST, Hong Kong","permalink":"/docs/DevOps/Hashicorp/2020-10-26--hashicorp-packer-provisioner/2020-10-26"},{"id":"DevOps/Hashicorp/2020-10-25--hashicorp-packer-and-virtualbox-autoinstall/index","title":"HashiCorp Packer with Virtualbox (Autoinstall)","description":"TST, Hong Kong","permalink":"/docs/DevOps/Hashicorp/2020-10-25--hashicorp-packer-and-virtualbox-autoinstall/2020-10-25"},{"id":"DevOps/Hashicorp/2020-10-24--hashicorp-packer-and-virtualbox-preseed/index","title":"HashiCorp Packer with Virtualbox (Preseed)","description":"TST, Hong Kong","permalink":"/docs/DevOps/Hashicorp/2020-10-24--hashicorp-packer-and-virtualbox-preseed/2020-10-24"},{"id":"DevOps/Hashicorp/2023-10-22-hashicorp-terraform-docker-2023/index","title":"Hashicorp Terraform - Docker Provider 2023","description":"Build, change, and destroy Docker infrastructure using Terraform.","permalink":"/docs/DevOps/Hashicorp/2023-10-22-hashicorp-terraform-docker-2023/2023-10-22"},{"id":"DevOps/Hashicorp/2023-12-22-hashicorp-terraform-docker-2024/index","title":"Hashicorp Terraform - Docker Provider 2024","description":"Build, change, and destroy Docker infrastructure using Terraform.","permalink":"/docs/DevOps/Hashicorp/2023-12-22-hashicorp-terraform-docker-2024/2023-12-22"},{"id":"DevOps/Hashicorp/2021-09-06--hashicorp-terraform-providers-variables-attributes/index","title":"Hashicorp Terraform - Providers, Variables & Attributes","description":"Shenzhen, China","permalink":"/docs/DevOps/Hashicorp/2021-09-06--hashicorp-terraform-providers-variables-attributes/2021-09-07"},{"id":"DevOps/Hashicorp/2021-09-05--hashicorp-terraform-setup/index","title":"Hashicorp Terraform - Setup","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Hashicorp/2021-09-05--hashicorp-terraform-setup/2021-09-05"},{"id":"DevOps/Hashicorp/2021-08-22--hashicorp-vault-policies/index","title":"Hashicorp Vault - ACL Policies","description":"Shenzhen, China","permalink":"/docs/DevOps/Hashicorp/2021-08-22--hashicorp-vault-policies/2021-08-22"},{"id":"DevOps/Hashicorp/2022-12-07-hashicorp-vault-ca-certificates/index","title":"Hashicorp Vault - Certificate Authority","description":"Generating CA certificates through Hashicorp Vault user interface.","permalink":"/docs/DevOps/Hashicorp/2022-12-07-hashicorp-vault-ca-certificates/2022-12-07"},{"id":"DevOps/Hashicorp/2022-12-03-hashicorp-vault-installation/index","title":"Hashicorp Vault - Installation 2023","description":"Getting started with Hashicorp Vault","permalink":"/docs/DevOps/Hashicorp/2022-12-03-hashicorp-vault-installation/2022-12-03"},{"id":"DevOps/Hashicorp/2021-08-25--hashicorp-vault-logging/index","title":"Hashicorp Vault - Logging","description":"Shenzhen, China","permalink":"/docs/DevOps/Hashicorp/2021-08-25--hashicorp-vault-logging/2021-08-25"},{"id":"DevOps/Hashicorp/2021-08-23--hashicorp-vault-rest-api/index","title":"Hashicorp Vault - Rest API","description":"Tsim Sha Tsui, Hongkong","permalink":"/docs/DevOps/Hashicorp/2021-08-23--hashicorp-vault-rest-api/2021-08-23"},{"id":"DevOps/Hashicorp/2021-08-21--hashicorp-vault-secrets-tokens/index","title":"Hashicorp Vault - Secrets & Tokens","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Hashicorp/2021-08-21--hashicorp-vault-secrets-tokens/2021-08-21"},{"id":"DevOps/Hashicorp/2021-08-20--hashicorp-vault-setup/index","title":"Hashicorp Vault - Setup","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Hashicorp/2021-08-20--hashicorp-vault-setup/2021-08-20"},{"id":"DevOps/Hashicorp/2022-06-07-hashicorp-waypoint-docker/index","title":"Hashicorp Waypoint with Docker","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-06-07-hashicorp-waypoint-docker/2022-06-07"},{"id":"DevOps/Hashicorp/2022-06-08-hashicorp-waypoint-nomad/index","title":"Hashicorp Waypoint with Nomad","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-06-08-hashicorp-waypoint-nomad/2022-06-09"},{"id":"DevOps/Linux/2020-10-13--smarttools-centos/index","title":"HDD Smart Tools for LINUX","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Linux/2020-10-13--smarttools-centos/2020-10-13"},{"id":"Automation_and_Robotics/Home_Automation/2024-01-09--home-assistant-rtsptoweb/index","title":"Home Assistant with RTSPtoWeb","description":"Home Assistant with WebRTC for INSTAR IP cameras using RTSPtoWeb.","permalink":"/docs/Automation_and_Robotics/Home_Automation/2024-01-09--home-assistant-rtsptoweb/2024-01-09"},{"id":"Automation_and_Robotics/Home_Automation/2019-09-27--home-assistant-podman-centos8/index","title":"Home Assistant, OpenHAB, Node-RED, ioBroker, MotionEye Containerized (Podman)","description":"Siem Reap, Cambodia","permalink":"/docs/Automation_and_Robotics/Home_Automation/2019-09-27--home-assistant-podman-centos8/2019-09-27"},{"id":"Automation_and_Robotics/Home_Automation/2023-04-18--home-assistant-node-red-iobroker-docker/index","title":"Home Assistant, OpenHAB, Node-RED, ioBroker, MotionEye, ZoneMinder, Frigate, iSpy Agent, Kerberos Containerized (Docker)","description":"Smarthome Cheat Sheet (Docker Edition)","permalink":"/docs/Automation_and_Robotics/Home_Automation/2023-04-18--home-assistant-node-red-iobroker-docker/2023-04-18"},{"id":"DevOps/Provisioning/2020-07-13--infrastructure-as-code/index","title":"Infrastructure as Code","description":"Shenzhen, China","permalink":"/docs/DevOps/Provisioning/2020-07-13--infrastructure-as-code/2020-07-13"},{"id":"DevOps/Linux/2021-10-26--install-davinci-resolve-on-arch/index","title":"Install Davinci Resolve on Arch Linux","description":"Shenzhen, China","permalink":"/docs/DevOps/Linux/2021-10-26--install-davinci-resolve-on-arch/2021-10-26"},{"id":"DevOps/Linux/2021-10-24--arch-linux-install-docker/index","title":"Install Docker in Arch Linux","description":"Shenzhen, China","permalink":"/docs/DevOps/Linux/2021-10-24--arch-linux-install-docker/2021-10-24"},{"id":"DevOps/GitOps/2022-03-16--gitlab-docker-compose-on-localhost/index","title":"Install Gitlab with Docker-Compose (Debian Bullseye)","description":"Shenzhen, China","permalink":"/docs/DevOps/GitOps/2022-03-16--gitlab-docker-compose-on-localhost/2022-03-16"},{"id":"DevOps/Linux/2021-10-24--arch-linux-install-mesen/index","title":"Install Mesen in Arch Linux","description":"Shenzhen, China","permalink":"/docs/DevOps/Linux/2021-10-24--arch-linux-install-mesen/2021-10-24"},{"id":"DevOps/Linux/2021-10-23--arch-linux-install-packages/index","title":"Install Packages in Arch Linux","description":"Shenzhen, China","permalink":"/docs/DevOps/Linux/2021-10-23--arch-linux-install-packages/2021-10-23"},{"id":"DevOps/Salt/2020-06-14--install-salt-on-ubuntu-20-04/index","title":"Install Salt on Ubuntu Server 20.04","description":"Battambang, Cambodia","permalink":"/docs/DevOps/Salt/2020-06-14--install-salt-on-ubuntu-20-04/2020-06-14"},{"id":"DevOps/Tomcat/2020-12-22-tomcat9-ubuntu-20-10-installation/index","title":"Install Tomcat 9 on Ubuntu 20.04","description":"Siem Reap, Cambodia","permalink":"/docs/DevOps/Tomcat/2020-12-22-tomcat9-ubuntu-20-10-installation/2020-12-22"},{"id":"DevOps/Provisioning/2022-01-23--installing-discourse-docker/index","title":"Installing a Discourse Forum on Debian Bullseye with Docker","description":"Shenzhen, China","permalink":"/docs/DevOps/Provisioning/2022-01-23--installing-discourse-docker/2022-01-23"},{"id":"DevOps/Ansible/2021-04-28-ansible-tower-rhel/index","title":"Installing Ansible Tower (AWX in Docker) on RHEL8","description":"Guangzhou, China","permalink":"/docs/DevOps/Ansible/2021-04-28-ansible-tower-rhel/2021-04-28"},{"id":"DevOps/Linux/2021-04-14-using-deb-files-on-rhel8/index","title":"Installing Deb Packages on RHEL8","description":"Shenzhen, China","permalink":"/docs/DevOps/Linux/2021-04-14-using-deb-files-on-rhel8/2021-04-14"},{"id":"DevOps/Provisioning/2019-06-15--installing-discourse-on-centos8/index","title":"Installing Discourse on Centos 8","description":"Mongkok, Hongkong","permalink":"/docs/DevOps/Provisioning/2019-06-15--installing-discourse-on-centos8/2019-06-15"},{"id":"DevOps/Linux/2020-01-07--centos8-firewalld/index","title":"Installing FirewallD on CentOS 8","description":"Shenzhen, China","permalink":"/docs/DevOps/Linux/2020-01-07--centos8-firewalld/2020-01-05"},{"id":"DevOps/Linux/2021-04-11-installing-free-red-hat-enterprise-linux/index","title":"Installing Free Red Hat Enterprise Linux","description":"Guangzhou, China","permalink":"/docs/DevOps/Linux/2021-04-11-installing-free-red-hat-enterprise-linux/2021-04-11"},{"id":"DevOps/GitOps/2020-08-01--gitlab-install-on-ubuntu-server/index","title":"Installing Gitlab on Ubuntu Server 20.04","description":"Mong Kok, Hong Kong","permalink":"/docs/DevOps/GitOps/2020-08-01--gitlab-install-on-ubuntu-server/2020-08-01"},{"id":"Development/Magento/2020-12-07-google-analytics-g4-tag/index","title":"Installing Google Analytics g4 Tag in your Gatsby and Discourse Webservice","description":"Siem Reap, Cambodia","permalink":"/docs/Development/Magento/2020-12-07-google-analytics-g4-tag/2020-12-07"},{"id":"DevOps/Hashicorp/2020-08-17--installing-consul-ubuntu/index","title":"Installing HashiCorp Consul on Ubuntu Server 20.04","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Hashicorp/2020-08-17--installing-consul-ubuntu/2020-08-17"},{"id":"DevOps/Hashicorp/2020-08-15--installing-nomad-ubuntu/index","title":"Installing HashiCorp Nomad on Ubuntu Server 20.04","description":"TST, Hong Kong","permalink":"/docs/DevOps/Hashicorp/2020-08-15--installing-nomad-ubuntu/2020-08-15"},{"id":"Automation_and_Robotics/Home_Automation/2019-09-24--iobroker-podman-centos8/index","title":"Installing ioBroker on CentOS8 with Podman","description":"Shanghai, China","permalink":"/docs/Automation_and_Robotics/Home_Automation/2019-09-24--iobroker-podman-centos8/2019-09-24"},{"id":"DevOps/Linux/2021-09-01--kali-linux-raspberry-pi/index","title":"Installing Kali LINUX on a Raspberry Pi 3","description":"Shenzhen, China","permalink":"/docs/DevOps/Linux/2021-09-01--kali-linux-raspberry-pi/2021-09-01"},{"id":"Automation_and_Robotics/Home_Automation/2019-09-24--motioneye-podman-centos8/index","title":"Installing MotionEye on CentOS8 with Podman","description":"Shanghai, China","permalink":"/docs/Automation_and_Robotics/Home_Automation/2019-09-24--motioneye-podman-centos8/2019-09-24"},{"id":"DevOps/Zabbix/2020-07-14--nagios-ubuntu-install/index","title":"Installing Nagios4 on Ubuntu Server 20.04","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Zabbix/2020-07-14--nagios-ubuntu-install/2020-07-14"},{"id":"DevOps/Zabbix/2020-07-12--nagios-docker-install/index","title":"Installing Nagios4 with Docker","description":"Cheung Chau, Hong Kong","permalink":"/docs/DevOps/Zabbix/2020-07-12--nagios-docker-install/2020-07-12"},{"id":"DevOps/Linux/2019-09-22--zsh-on-centos8/index","title":"Installing Oh-My-Zsh on CentOS8","description":"Central, Hong Kong","permalink":"/docs/DevOps/Linux/2019-09-22--zsh-on-centos8/2019-09-22"},{"id":"DevOps/Linux/2019-09-22--zsh-on-ubuntu20/index","title":"Installing Oh-My-Zsh on Ubuntu 20.04","description":"Central, Hong Kong","permalink":"/docs/DevOps/Linux/2019-09-22--zsh-on-ubuntu20/2019-09-22"},{"id":"DevOps/Provisioning/2020-10-01--installing-openproject-in-docker/index","title":"Installing OpenProject with Docker Compose","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Provisioning/2020-10-01--installing-openproject-in-docker/2020-10-01"},{"id":"DevOps/Linux/2021-09-02--openwrt-raspberry-pi/index","title":"Installing OpenWRT on a Raspberry Pi 4","description":"Shenzhen, China","permalink":"/docs/DevOps/Linux/2021-09-02--openwrt-raspberry-pi/2021-09-02"},{"id":"DevOps/Provisioning/2020-10-02--installing-wazuh-in-docker/index","title":"Installing Wazuh with Docker Compose","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Provisioning/2020-10-02--installing-wazuh-in-docker/2020-10-02"},{"id":"Automation_and_Robotics/Home_Automation/2024-01-10--go2rtc/index","title":"INSTAR go2rtc for Home Assistant","description":"Use go2rtc to embed your INSTAR IP camera\'s webRTC live video in Home Assistant, ioBroker, Node-RED or OpenHab (Docker)","permalink":"/docs/Automation_and_Robotics/Home_Automation/2024-01-10--go2rtc/2024-01-09"},{"id":"DevOps/Elasticsearch/2023-02-10--meili-rusty-elastic-docker/index","title":"Introduction to MeiLi Search with Docker","description":"A lightning-fast search engine that fits effortlessly into your apps, websites, and workflow.","permalink":"/docs/DevOps/Elasticsearch/2023-02-10--meili-rusty-elastic-docker/2023-02-10"},{"id":"DevOps/Hashicorp/2020-08-18--consul-mock-datacenter/index","title":"Joining Consul Clients","description":"TST, Hong Kong","permalink":"/docs/DevOps/Hashicorp/2020-08-18--consul-mock-datacenter/2020-08-19"},{"id":"DevOps/Linux/2019-09-26--kali-docker-windows/index","title":"Kali Linux with Docker for Windows","description":"Victoria Harbour, Hongkong","permalink":"/docs/DevOps/Linux/2019-09-26--kali-docker-windows/2019-09-26"},{"id":"DevOps/Kubernetes/2019-01-17--kubernetes-and-microservices/index","title":"Kubernetes and Microservices","description":"Sydney, Australia","permalink":"/docs/DevOps/Kubernetes/2019-01-17--kubernetes-and-microservices/2019-01-17"},{"id":"DevOps/Kubernetes/2019-01-21--kubernetes-bare-metal-ingress/index","title":"Kubernetes Bare Metal Ingress","description":"Victoria Harbour, Hongkong","permalink":"/docs/DevOps/Kubernetes/2019-01-21--kubernetes-bare-metal-ingress/2019-01-21"},{"id":"DevOps/Kubernetes/2022-11-19--k3s-air-gapped-kubernetes/index","title":"Kubernetes Beyond the Edge","description":"Installing K3S on Air-Gapped Bare-Metal Server","permalink":"/docs/DevOps/Kubernetes/2022-11-19--k3s-air-gapped-kubernetes/2022-11-19"},{"id":"DevOps/Kubernetes/2019-01-19--kubernetes-cluster-logging/index","title":"Kubernetes Cluster Monitoring & Logging","description":"Angkor Wat, Cambodia","permalink":"/docs/DevOps/Kubernetes/2019-01-19--kubernetes-cluster-logging/2019-01-19"},{"id":"DevOps/Kubernetes/2019-01-21--kubernetes-nginx-https-service/index","title":"Kubernetes NGINX https Service","description":"Shenzhen, China","permalink":"/docs/DevOps/Kubernetes/2019-01-21--kubernetes-nginx-https-service/2019-01-21"},{"id":"DevOps/Kubernetes/2019-01-22--kubernetes-nginx-ingress/index","title":"Kubernetes NGINX Ingress","description":"Malekula, Vanuatu","permalink":"/docs/DevOps/Kubernetes/2019-01-22--kubernetes-nginx-ingress/2019-01-22"},{"id":"DevOps/Kubernetes/2019-01-27--kubernetes-the-chinese-way/index","title":"Kubernetes the Chinese Way","description":"Shenzhen, China","permalink":"/docs/DevOps/Kubernetes/2019-01-27--kubernetes-the-chinese-way/2019-01-27"},{"id":"DevOps/Kubernetes/2019-02-01--kubernetes-traefik-ingress/index","title":"Kubernetes Traefik Ingress","description":"Tanna, Vanuatu","permalink":"/docs/DevOps/Kubernetes/2019-02-01--kubernetes-traefik-ingress/2019-02-01"},{"id":"DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/index","title":"Log all the searches going through Elasticsearch","description":"Bakhtapur, Nepal","permalink":"/docs/DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/2021-03-25"},{"id":"DevOps/Elasticsearch/2021-03-24-logstash-common-grok-pattern/index","title":"Logstash 7 and Common Log Pattern","description":"Cheung Chau, Hongkon","permalink":"/docs/DevOps/Elasticsearch/2021-03-24-logstash-common-grok-pattern/2021-03-24"},{"id":"DevOps/Elasticsearch/2021-03-21-logstash-digesting-data/index","title":"Logstash 7 Digesting Webserver Logs","description":"Guangzhou, China","permalink":"/docs/DevOps/Elasticsearch/2021-03-21-logstash-digesting-data/2021-03-21"},{"id":"DevOps/Elasticsearch/2021-03-22-logstash-working-with-structured-data/index","title":"Logstash 7 Working with Structured Data","description":"Guangzhou, China","permalink":"/docs/DevOps/Elasticsearch/2021-03-22-logstash-working-with-structured-data/2021-03-22"},{"id":"DevOps/Elasticsearch/2021-03-23-logstash-working-with-unstructured-data/index","title":"Logstash 7 Working with Unstructured Data","description":"Guangzhou, China","permalink":"/docs/DevOps/Elasticsearch/2021-03-23-logstash-working-with-unstructured-data/2021-03-23"},{"id":"DevOps/Provisioning/2021-04-07--loki-prometheus-grafana/index","title":"Loki - Promtail & Grafana for System Logs.","description":"Shenzhen, China","permalink":"/docs/DevOps/Provisioning/2021-04-07--loki-prometheus-grafana/2021-04-07"},{"id":"Development/Magento/2019-09-12--magento-and-elasticsearch/index","title":"Magento 2 and Elasticsearch","description":"Patan, Nepal","permalink":"/docs/Development/Magento/2019-09-12--magento-and-elasticsearch/2019-09-12"},{"id":"Development/Magento/2019-09-13--magento-and-varnish/index","title":"Magento 2 and Varnish 6","description":"Victoria Harbour, Hongkong","permalink":"/docs/Development/Magento/2019-09-13--magento-and-varnish/2019-09-13"},{"id":"Development/Magento/2019-09-11--magento-on-debian-with-nginx/index","title":"Magento 2 Installation with NGINX on Debian Buster","description":"Angkor Wat, Cambodia","permalink":"/docs/Development/Magento/2019-09-11--magento-on-debian-with-nginx/2019-09-11"},{"id":"Development/Magento/2019-09-14--magento-and-themes/index","title":"Magento 2 Manual Theme Installation","description":"Patan, Nepal","permalink":"/docs/Development/Magento/2019-09-14--magento-and-themes/2019-09-14"},{"id":"DevOps/Kubernetes/2019-01-02--managing-containers-in-kubernetes/index","title":"Managing Containers in Kubernetes","description":"Shanghai, China","permalink":"/docs/DevOps/Kubernetes/2019-01-02--managing-containers-in-kubernetes/2019-01-02"},{"id":"DevOps/Provisioning/2021-10-25--matrix-secure-messaging/index","title":"Matrix Secure Messaging","description":"Shenzhen, China","permalink":"/docs/DevOps/Provisioning/2021-10-25--matrix-secure-messaging/2021-10-25"},{"id":"DevOps/Provisioning/2019-06-16--migrating-from-vbulletin-to-discourse-on-centos8/index","title":"Migrating from vBulletin 5 to Discourse on CentOS 8","description":"Taipa, Macau","permalink":"/docs/DevOps/Provisioning/2019-06-16--migrating-from-vbulletin-to-discourse-on-centos8/2019-06-16"},{"id":"Automation_and_Robotics/MQTT/2022-02-01--mosquitto-2-broker/index","title":"Mosquitto v2 MQTT Broker on Debian Bullseye","description":"TST, Hong Kong","permalink":"/docs/Automation_and_Robotics/MQTT/2022-02-01--mosquitto-2-broker/2022-02-01"},{"id":"Automation_and_Robotics/MQTT/2022-03-26--mqtt-clients/index","title":"MQTT Clients","description":"Guangzhou, China","permalink":"/docs/Automation_and_Robotics/MQTT/2022-03-26--mqtt-clients/2022-03-26"},{"id":"DevOps/NGINX/2020-08-30--nginx-docker-multihost/index","title":"NGINX Docker Multihost","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/NGINX/2020-08-30--nginx-docker-multihost/2020-08-30"},{"id":"DevOps/NGINX/2020-08-26--nginx-docker-setup/index","title":"NGINX Docker Setup","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/NGINX/2020-08-26--nginx-docker-setup/2020-08-26"},{"id":"DevOps/NGINX/2020-08-28--nginx-docker-certbot/index","title":"NGINX Docker with Certbot","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/NGINX/2020-08-28--nginx-docker-certbot/2020-08-27"},{"id":"DevOps/NGINX/2020-08-27--nginx-docker-ssl-certs-self-signed/index","title":"NGINX Docker with SSL Encryption (Self-signed)","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/NGINX/2020-08-27--nginx-docker-ssl-certs-self-signed/2020-08-27"},{"id":"DevOps/NGINX/2019-02-05--nginx-ingress-cert-manager/index","title":"NGINX Ingress with Cert-Manager","description":"Port Vila, Vanuatu","permalink":"/docs/DevOps/NGINX/2019-02-05--nginx-ingress-cert-manager/2019-02-05"},{"id":"DevOps/Hashicorp/2022-09-24--nomad-nginx-ingress/index","title":"NGINX Ingress with Nomad","description":"Provision a containerized NGINX ingress using Hashicorp Nomad.","permalink":"/docs/DevOps/Hashicorp/2022-09-24--nomad-nginx-ingress/2022-09-24"},{"id":"DevOps/Salt/2020-06-22--salt-nginx-state/index","title":"NGINX Salt State","description":"TST, Hong Kong","permalink":"/docs/DevOps/Salt/2020-06-22--salt-nginx-state/2020-06-22"},{"id":"DevOps/NGINX/2022-11-17-nginx-udp-tcp-load-balancing/index","title":"NGINX TCP/UDP Load Balancing","description":"Using the NGINX Stream Module to balance TCP/UDP Traffic","permalink":"/docs/DevOps/NGINX/2022-11-17-nginx-udp-tcp-load-balancing/2022-11-17"},{"id":"DevOps/NGINX/2022-12-08-nginx-websocket-proxy/index","title":"NGINX Websocket Proxy","description":"Using the NGINX as a Proxy for Websocket APIs","permalink":"/docs/DevOps/NGINX/2022-12-08-nginx-websocket-proxy/2022-12-08"},{"id":"DevOps/NGINX/2017-12-24--nginx-node-security/index","title":"NGINX, Node.js & Security","description":"Sydney, Australia","permalink":"/docs/DevOps/NGINX/2017-12-24--nginx-node-security/2017-12-24"},{"id":"DevOps/Linux/2022-03-10--nmap-network-scanner/index","title":"nmap Cheat Sheet","description":"Syntax for Nmap Commands","permalink":"/docs/DevOps/Linux/2022-03-10--nmap-network-scanner/2022-03-10"},{"id":"DevOps/Provisioning/2021-01-23-nodejs-file-server/index","title":"Node.js FTP Server","description":"Shenzhen, China","permalink":"/docs/DevOps/Provisioning/2021-01-23-nodejs-file-server/2021-01-23"},{"id":"DevOps/Hashicorp/2021-08-08--hashicorp-nomad-access-control-lists/index","title":"Nomad Access Control Lists","description":"Central, Hongkong","permalink":"/docs/DevOps/Hashicorp/2021-08-08--hashicorp-nomad-access-control-lists/2021-08-08"},{"id":"DevOps/Hashicorp/2021-08-07--hashicorp-nomad-job-configuration/index","title":"Nomad Job Configuration","description":"Central, Hongkong","permalink":"/docs/DevOps/Hashicorp/2021-08-07--hashicorp-nomad-job-configuration/2021-08-07"},{"id":"DevOps/Hashicorp/2020-08-16--nomad-cluster/index","title":"Nomad Server Cluster","description":"TST, Hong Kong","permalink":"/docs/DevOps/Hashicorp/2020-08-16--nomad-cluster/2020-08-16"},{"id":"DevOps/Provisioning/2024-01-17--ntfy-notification-service/index","title":"ntfy Notification Service","description":"ntfy lets you send push notifications to your phone or desktop via scripts from any computer, using simple HTTP PUT or POST requests.","permalink":"/docs/DevOps/Provisioning/2024-01-17--ntfy-notification-service/2024-01-17"},{"id":"DevOps/Linux/2022-09-28--nts-client-setup/index","title":"NTS-Service and Authenticated Time Synchronization","description":"Building a client for a time service which uses IETF RFC 8915 called \u201cNetwork Time Security\u201c (NTS).","permalink":"/docs/DevOps/Linux/2022-09-28--nts-client-setup/2022-09-28"},{"id":"Automation_and_Robotics/Home_Automation/2020-12-03--openhab3-camera-binding/index","title":"OpenHAB 3 INSTAR Camera Binding","description":"Shenzhen, China","permalink":"/docs/Automation_and_Robotics/Home_Automation/2020-12-03--openhab3-camera-binding/2020-12-03"},{"id":"Automation_and_Robotics/Home_Automation/2020-12-02--openhab3-mqtt-binding/index","title":"OpenHAB 3 MQTT Binding","description":"Shenzhen, China","permalink":"/docs/Automation_and_Robotics/Home_Automation/2020-12-02--openhab3-mqtt-binding/2020-12-02"},{"id":"DevOps/Elasticsearch/2022-10-11--opensearch-docker-compose/index","title":"Opensearch & Dashboard","description":"Run a single Opensearch node + Dashboard cluster with Docker-Compose.","permalink":"/docs/DevOps/Elasticsearch/2022-10-11--opensearch-docker-compose/2022-10-11"},{"id":"DevOps/Elasticsearch/2022-10-12--opensearch-rest-api/index","title":"Opensearch Rest API","description":"Run search queries using the Opensearch REST API.","permalink":"/docs/DevOps/Elasticsearch/2022-10-12--opensearch-rest-api/2022-10-12"},{"id":"DevOps/Hashicorp/2023-12-23-opentofu-vs-terraform/index","title":"Opentofu vs Hashicorp Terraform","description":"The open source infrastructure as code alternative to Hashicorp Terraform.","permalink":"/docs/DevOps/Hashicorp/2023-12-23-opentofu-vs-terraform/2023-12-22"},{"id":"DevOps/Provisioning/2022-10-27--os-ticket-rest-api/index","title":"OSticket REST API Calls","description":"Use Docker, Docker-Compose and Nomad to provide an OSTicket Service","permalink":"/docs/DevOps/Provisioning/2022-10-27--os-ticket-rest-api/2022-10-27"},{"id":"DevOps/Provisioning/2021-01-27-owncloud-ocis/index","title":"ownCloud Infinite Scale Stack","description":"Jomson, Nepal","permalink":"/docs/DevOps/Provisioning/2021-01-27-owncloud-ocis/2021-01-27"},{"id":"DevOps/Elasticsearch/2022-02-02--elasticsearch-v8-upgrade/index","title":"Performing an Elasticsearch v8 Upgrade","description":"TST, Hong Kong","permalink":"/docs/DevOps/Elasticsearch/2022-02-02--elasticsearch-v8-upgrade/2022-02-02"},{"id":"DevOps/Linux/2019-09-25--podman-cheat-sheet/index","title":"Podman Cheat Sheet","description":"This cheat sheet was written by Doug Tidwell, with huge thanks to Dan Walsh and Scott McCarty.","permalink":"/docs/DevOps/Linux/2019-09-25--podman-cheat-sheet/2019-09-25"},{"id":"DevOps/Linux/2019-12-03--podman-ftp-server-container/index","title":"Podman FTP Server Container","description":"Victory Harbour, Hong Kong","permalink":"/docs/DevOps/Linux/2019-12-03--podman-ftp-server-container/2019-12-03"},{"id":"Automation_and_Robotics/Home_Automation/2019-12-01--podman-hombridge-to-mqtt/index","title":"Podman Homebridge to MQTT","description":"Sapporo, Japan","permalink":"/docs/Automation_and_Robotics/Home_Automation/2019-12-01--podman-hombridge-to-mqtt/2019-12-01"},{"id":"DevOps/Provisioning/2022-10-16--os-ticket-docker/index","title":"Provision OSticket with Docker","description":"Use Docker, Docker-Compose and Nomad to provide an OSTicket Service","permalink":"/docs/DevOps/Provisioning/2022-10-16--os-ticket-docker/2022-10-16"},{"id":"DevOps/Provisioning/2023-03-09--os-ticket-docker-2023/index","title":"Provision OSticket with Docker (2023)","description":"Use Docker, Docker-Compose and Nomad to provide an OSTicket Service","permalink":"/docs/DevOps/Provisioning/2023-03-09--os-ticket-docker-2023/2023-03-09"},{"id":"DevOps/Provisioning/2017-09-05--developing-software-in-china/index","title":"Proxima Centauri","description":"Phnom Penh, Cambodia","permalink":"/docs/DevOps/Provisioning/2017-09-05--developing-software-in-china/2017-09-05"},{"id":"DevOps/Provisioning/2017-09-06--developing-software-in-china-2/index","title":"Proxima Centauri II","description":"Phnom Penh, Cambodia","permalink":"/docs/DevOps/Provisioning/2017-09-06--developing-software-in-china-2/2017-09-06"},{"id":"DevOps/Linux/2018-10-27--red-hat-certified-engineer-rhce/index","title":"Red Hat Certified Engineer (RHCE) Exam","description":"Angkor Wat, Cambodia","permalink":"/docs/DevOps/Linux/2018-10-27--red-hat-certified-engineer-rhce/2018-10-27"},{"id":"DevOps/Provisioning/2018-12-27--red-hat-containerized-application-development-rhcs/index","title":"Red Hat Certified Specialist in Containerized Application Development","description":"Shanghai, China","permalink":"/docs/DevOps/Provisioning/2018-12-27--red-hat-containerized-application-development-rhcs/2018-12-27"},{"id":"DevOps/Kubernetes/2019-03-02--installing-openshift-3-on-centos-7/index","title":"Red Hat OpenShift 3 Container Platform","description":"Harbin, China","permalink":"/docs/DevOps/Kubernetes/2019-03-02--installing-openshift-3-on-centos-7/2019-03-02"},{"id":"DevOps/Linux/2022-11-09--docker-borg-backupserver/index","title":"Resistance is futile - Borg with Docker","description":"Backup server using Docker","permalink":"/docs/DevOps/Linux/2022-11-09--docker-borg-backupserver/2022-11-09"},{"id":"DevOps/Provisioning/2022-01-25--installing-bind9-docker/index","title":"Running a DNS Server with Docker","description":"Shenzhen, China","permalink":"/docs/DevOps/Provisioning/2022-01-25--installing-bind9-docker/2022-01-25"},{"id":"DevOps/GitOps/2020-02-02--docker-images-in-gitlab/index","title":"Running Gitlab as Docker Registry","description":"Siem Reap, Cambodia","permalink":"/docs/DevOps/GitOps/2020-02-02--docker-images-in-gitlab/2020-02-02"},{"id":"DevOps/GitOps/2020-02-01--gitlab-in-podman-on-centos8/index","title":"Running Gitlab in Podman on CentOS8","description":"Siem Reap, Cambodia","permalink":"/docs/DevOps/GitOps/2020-02-01--gitlab-in-podman-on-centos8/2020-02-01"},{"id":"DevOps/Salt/2020-06-21--salt-events-and-thirdparty-apps/index","title":"Salt Beacons Module","description":"Mon Kok, Hong Kong","permalink":"/docs/DevOps/Salt/2020-06-21--salt-events-and-thirdparty-apps/2020-06-21"},{"id":"DevOps/Salt/2020-06-18--salt-execution-order/index","title":"Salt Execution Order","description":"Guangzhou, China","permalink":"/docs/DevOps/Salt/2020-06-18--salt-execution-order/2020-06-18"},{"id":"DevOps/Salt/2020-06-19--salt-mine-orchestrate/index","title":"Salt Mine & Orchestrate","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Salt/2020-06-19--salt-mine-orchestrate/2020-06-19"},{"id":"DevOps/Salt/2020-06-25--salt-orchestration-for-docker-containers/index","title":"Salt Orchestration for Docker Containers","description":"TST, Hong Kong","permalink":"/docs/DevOps/Salt/2020-06-25--salt-orchestration-for-docker-containers/2020-06-25"},{"id":"DevOps/Salt/2020-06-17--salt-pillars-formulas/index","title":"Salt Pillars & Formulas","description":"Guangzhou, China","permalink":"/docs/DevOps/Salt/2020-06-17--salt-pillars-formulas/2020-06-17"},{"id":"DevOps/Salt/2020-06-20--salt-reactor-events/index","title":"Salt Reactor and System Events","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Salt/2020-06-20--salt-reactor-events/2020-06-20"},{"id":"DevOps/Salt/2020-06-16--salt-state/index","title":"Salt State","description":"Guangzhou, China","permalink":"/docs/DevOps/Salt/2020-06-16--salt-state/2020-06-16"},{"id":"DevOps/Salt/2020-06-23--saltestack-refresh-course-1-setup/index","title":"Saltstack Refresh Course 1: Setup","description":"Shenzhen, China","permalink":"/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-1-setup/2020-06-23"},{"id":"DevOps/Salt/2020-06-23--saltestack-refresh-course-3-highstate/index","title":"Saltstack Refresh Course 2: Highstate","description":"Shenzhen, China","permalink":"/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-3-highstate/2020-06-23"},{"id":"DevOps/Salt/2020-06-23--saltestack-refresh-course-4-salt-mine/index","title":"Saltstack Refresh Course 2: Salt Mines","description":"Cheung Chau, Hong Kong","permalink":"/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-4-salt-mine/2020-06-23"},{"id":"DevOps/Salt/2020-06-23--saltestack-refresh-course-2-salt-state/index","title":"Saltstack Refresh Course 2: Salt State","description":"Shenzhen, China","permalink":"/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-2-salt-state/2020-06-23"},{"id":"DevOps/Salt/2020-06-15--salty-devops/index","title":"Salty DevOps","description":"Shenzhen, China","permalink":"/docs/DevOps/Salt/2020-06-15--salty-devops/2020-06-15"},{"id":"DevOps/Elasticsearch/2017-10-03--search-engine-setup-and-configuration/index","title":"Search Engine Setup and Configuration","description":"Search Engine Setup and Configuration","permalink":"/docs/DevOps/Elasticsearch/2017-10-03--search-engine-setup-and-configuration/2017-10-03"},{"id":"DevOps/Hashicorp/2022-09-22--nomad-nts-timeserver/index","title":"Secure Timeserver - Deploying a NTS Server using Hashicorp Nomad","description":"In the previous step I deployed Chrony using Docker Compose. This time I try to migrate the deployment to Nomad & Consul.","permalink":"/docs/DevOps/Hashicorp/2022-09-22--nomad-nts-timeserver/2022-09-22"},{"id":"DevOps/Linux/2022-09-15--ntp-over-nts-timeserver/index","title":"Secure Timeserver - NTP with NTS with Docker","description":"NTS is a method for using TLS/SSL to authenticate NTP traffic on the net.","permalink":"/docs/DevOps/Linux/2022-09-15--ntp-over-nts-timeserver/2022-09-21"},{"id":"DevOps/Elasticsearch/2018-01-01--securing-elasticsearch-readonlyrest/index","title":"Securing Elasticsearch with ReadOnlyREST","description":"Jomsom, Nepal","permalink":"/docs/DevOps/Elasticsearch/2018-01-01--securing-elasticsearch-readonlyrest/2018-01-01"},{"id":"DevOps/Elasticsearch/2017-12-31--securing-elasticsearch-xpack/index","title":"Securing Elasticsearch with X-Pack","description":"Battambang, Cambodia","permalink":"/docs/DevOps/Elasticsearch/2017-12-31--securing-elasticsearch-xpack/2017-12-31"},{"id":"DevOps/NGINX/2020-07-29--securing-apache-and-nginx/index","title":"Securing Webservers - Apache and NGINX","description":"Central, Hong Kong","permalink":"/docs/DevOps/NGINX/2020-07-29--securing-apache-and-nginx/2020-07-29"},{"id":"DevOps/Security/2020-07-28--fail2ban-ubuntu-server/index","title":"Securing Webservers - Fail2Ban Ubuntu 20.10","description":"TST, Hong Kong","permalink":"/docs/DevOps/Security/2020-07-28--fail2ban-ubuntu-server/2020-07-28"},{"id":"DevOps/Security/2020-07-26--firewalld-configuration/index","title":"Securing Webservers - FirewallD and fail2ban","description":"TST, Hong Kong","permalink":"/docs/DevOps/Security/2020-07-26--firewalld-configuration/2020-07-26"},{"id":"DevOps/Security/2020-07-27--firewalld-deployment-centos7/index","title":"Securing Webservers - FirewallD Deployment on CentOS7","description":"TST, Hong Kong","permalink":"/docs/DevOps/Security/2020-07-27--firewalld-deployment-centos7/2020-07-27"},{"id":"DevOps/Security/2020-07-27--firewalld-deployment-debian/index","title":"Securing Webservers - FirewallD Deployment on Debian 9","description":"TST, Hong Kong","permalink":"/docs/DevOps/Security/2020-07-27--firewalld-deployment-debian/2020-07-27"},{"id":"DevOps/Security/2020-07-27--firewalld-deployment-ubuntu/index","title":"Securing Webservers - FirewallD Deployment on Ubuntu 20.04","description":"TST, Hong Kong","permalink":"/docs/DevOps/Security/2020-07-27--firewalld-deployment-ubuntu/2020-07-27"},{"id":"DevOps/Security/2020-07-28--uncomplicated-firewall-ufw/index","title":"Securing Webservers - Uncomplicated Firewall","description":"TST, Hong Kong","permalink":"/docs/DevOps/Security/2020-07-28--uncomplicated-firewall-ufw/2020-07-28"},{"id":"DevOps/Provisioning/2019-01-08--creating-a-grafana-dashboard/index","title":"Sensors Data and Grafana","description":"Hongkong","permalink":"/docs/DevOps/Provisioning/2019-01-08--creating-a-grafana-dashboard/2019-01-08"},{"id":"DevOps/Provisioning/2020-08-29--static-server-with-hapi-and-docker/index","title":"Serving Static Files with Hapi and Docker","description":"Central, Hong Kong","permalink":"/docs/DevOps/Provisioning/2020-08-29--static-server-with-hapi-and-docker/2020-08-29"},{"id":"DevOps/Ansible/2020-11-18--ansible-on-debian-buster/index","title":"Setting up a Ansible on Debian Buster","description":"Shenzhen, China","permalink":"/docs/DevOps/Ansible/2020-11-18--ansible-on-debian-buster/2020-11-18"},{"id":"DevOps/Kubernetes/2019-03-05--first-openshift3-cluster/index","title":"Setting up an OKD Cluster","description":"Mustang, Nepal","permalink":"/docs/DevOps/Kubernetes/2019-03-05--first-openshift3-cluster/2019-03-05"},{"id":"DevOps/Ansible/2021-04-29-ansible-tower-setup/index","title":"Setting up Ansible Tower (AWX)","description":"Guangzhou, China","permalink":"/docs/DevOps/Ansible/2021-04-29-ansible-tower-setup/2021-04-29"},{"id":"DevOps/NGINX/2021-07-29--certbot-nginx-autorenewal/index","title":"Setting up Certbot Auto-renewal for NGINX (Maintenance Mode)","description":"Shenzhen, China","permalink":"/docs/DevOps/NGINX/2021-07-29--certbot-nginx-autorenewal/2021-07-29"},{"id":"DevOps/Linux/2019-06-07--installing-docker-on-centos8/index","title":"Setting up Docker on CentOS 8","description":"Harbin, China","permalink":"/docs/DevOps/Linux/2019-06-07--installing-docker-on-centos8/2019-06-07"},{"id":"DevOps/GitOps/2020-08-02--gitlab-setup/index","title":"Setting up Gitlab","description":"Mong Kok, Hong Kong","permalink":"/docs/DevOps/GitOps/2020-08-02--gitlab-setup/2020-08-02"},{"id":"DevOps/Linux/2021-04-13-installing-kvm-on-red-hat-enterprise-linux/index","title":"Setting up KVM on RedHat Enterprise Linux","description":"Shenzhen, China","permalink":"/docs/DevOps/Linux/2021-04-13-installing-kvm-on-red-hat-enterprise-linux/2021-04-13"},{"id":"DevOps/Provisioning/2021-10-12--traefik-third-attempt/index","title":"Setting up Wordpress with Traefik v2","description":"Central, Hong Kong","permalink":"/docs/DevOps/Provisioning/2021-10-12--traefik-third-attempt/2021-10-12"},{"id":"DevOps/Ansible/2021-04-30-ansible-tower-slack-notifications/index","title":"Slack Notifications for Ansible Tower (AWX)","description":"Guangzhou, China","permalink":"/docs/DevOps/Ansible/2021-04-30-ansible-tower-slack-notifications/2021-04-30"},{"id":"DevOps/Zabbix/2020-09-05--slack-notifications-in-devops/index","title":"Slack Notifications in DevOps","description":"TST, Hong Kong","permalink":"/docs/DevOps/Zabbix/2020-09-05--slack-notifications-in-devops/2020-09-05"},{"id":"Automation_and_Robotics/Home_Automation/2020-09-16--testing-new-rest-api-with-nodered/index","title":"Testing a new REST API in Node-RED","description":"Koh Rong, Cambodia","permalink":"/docs/Automation_and_Robotics/Home_Automation/2020-09-16--testing-new-rest-api-with-nodered/2020-09-16"},{"id":"DevOps/Zabbix/2022-01-13--zabbix-api-testing/index","title":"Testing the Zabbix API with Postman","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-13--zabbix-api-testing/2022-01-13"},{"id":"DevOps/Linux/2021-10-09--the-friendly-editor/index","title":"The friendly Editor","description":"Harbin , China","permalink":"/docs/DevOps/Linux/2021-10-09--the-friendly-editor/2021-10-09"},{"id":"DevOps/Tomcat/2020-12-26-tomcat10-cluster-with-individual-nodes/index","title":"Tomcat 10 Cluster with individual Node Server","description":"Siem Reap, Cambodia","permalink":"/docs/DevOps/Tomcat/2020-12-26-tomcat10-cluster-with-individual-nodes/2020-12-26"},{"id":"DevOps/Tomcat/2020-12-25-tomcat10-docker-cluster/index","title":"Tomcat 10 Docker Cluster","description":"Siem Reap, Cambodia","permalink":"/docs/DevOps/Tomcat/2020-12-25-tomcat10-docker-cluster/2020-12-25"},{"id":"DevOps/Tomcat/2020-12-24-tomcat9-cluster-and-load-balancing/index","title":"Tomcat 9 Cluster & Loadbalancing","description":"Siem Reap, Cambodia","permalink":"/docs/DevOps/Tomcat/2020-12-24-tomcat9-cluster-and-load-balancing/2020-12-24"},{"id":"DevOps/Tomcat/2020-12-23-tomcat9-configuration/index","title":"Tomcat 9 Configuration","description":"Siem Reap, Cambodia","permalink":"/docs/DevOps/Tomcat/2020-12-23-tomcat9-configuration/2020-12-23"},{"id":"DevOps/Provisioning/2021-10-12--traefik-configuration/index","title":"Traefik v2 Webproxy Configuration - 1st Attempt","description":"Central, Hong Kong","permalink":"/docs/DevOps/Provisioning/2021-10-12--traefik-configuration/2021-10-12"},{"id":"DevOps/Provisioning/2021-10-12--traefik-second-attempt/index","title":"Traefik v2 Webproxy Configuration - 2nd Attempt","description":"Central, Hong Kong","permalink":"/docs/DevOps/Provisioning/2021-10-12--traefik-second-attempt/2021-10-12"},{"id":"Automation_and_Robotics/Home_Automation/2020-12-01--openhab3-in-docker/index","title":"Trying out OpenHAB 3 in Docker","description":"Shenzhen, China","permalink":"/docs/Automation_and_Robotics/Home_Automation/2020-12-01--openhab3-in-docker/2020-12-01"},{"id":"DevOps/Linux/2019-01-11--ubuntu-network-configuration/index","title":"Ubuntu Network Configuration","description":"Battambang, Cambodia","permalink":"/docs/DevOps/Linux/2019-01-11--ubuntu-network-configuration/2019-01-11"},{"id":"DevOps/Linux/2019-01-11--ubuntu-server-app-armour/index","title":"Ubuntu Server Cannot Stop Docker Container","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Linux/2019-01-11--ubuntu-server-app-armour/2019-01-11"},{"id":"DevOps/Linux/2019-01-11--root-access-ubuntu-server/index","title":"Ubuntu Server Root SSH Remote Access","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Linux/2019-01-11--root-access-ubuntu-server/2019-01-11"},{"id":"Development/Magento/2019-09-15--updating-from-php70-to-php72/index","title":"Updating a Magento Project from PHP v7.0 to v7.3","description":"Katmandu, Nepal","permalink":"/docs/Development/Magento/2019-09-15--updating-from-php70-to-php72/2019-09-15"},{"id":"DevOps/Provisioning/2024-01-18--uptime-kuma-monitoring/index","title":"Uptime Kuma","description":"Uptime Kuma is an easy-to-use self-hosted monitoring tool.","permalink":"/docs/DevOps/Provisioning/2024-01-18--uptime-kuma-monitoring/2024-01-18"},{"id":"DevOps/Provisioning/2019-06-21--using-facebook-auth-in-discourse/index","title":"User Login with Facebook for Discourse","description":"Bakhtapur, Nepal","permalink":"/docs/DevOps/Provisioning/2019-06-21--using-facebook-auth-in-discourse/2019-06-21"},{"id":"DevOps/Provisioning/2019-06-20--using-github-auth-in-discourse/index","title":"User Login with Github for Discourse","description":"Mustang, Nepal","permalink":"/docs/DevOps/Provisioning/2019-06-20--using-github-auth-in-discourse/2019-06-19"},{"id":"DevOps/Provisioning/2019-06-18--using-oauth2-in-discourse/index","title":"User Login with Google OAuth2 for Discourse","description":"Katmandu, Nepal","permalink":"/docs/DevOps/Provisioning/2019-06-18--using-oauth2-in-discourse/2019-06-18"},{"id":"DevOps/Provisioning/2019-06-19--using-twitter-auth-in-discourse/index","title":"User Login with Twitter for Discourse","description":"Taipa, Macau","permalink":"/docs/DevOps/Provisioning/2019-06-19--using-twitter-auth-in-discourse/2019-06-20"},{"id":"DevOps/NGINX/2017-10-01--using-nginx-as-proxy-for-your-nodejs-apps/index","title":"Using NGINX as proxy for your nodejs apps","description":"Hongkong","permalink":"/docs/DevOps/NGINX/2017-10-01--using-nginx-as-proxy-for-your-nodejs-apps/2017-10-01"},{"id":"DevOps/Linux/2022-03-08--arch-kde-fritz-vpn/index","title":"Using the AVM Fritzbox VPN on Manjaro (KDE)","description":"Shenzhen, China","permalink":"/docs/DevOps/Linux/2022-03-08--arch-kde-fritz-vpn/2022-03-08"},{"id":"DevOps/Provisioning/2019-09-16--installing-vanilla-forum/index","title":"Vanilla Forums Installation on Debian","description":"Katmandu, Nepal","permalink":"/docs/DevOps/Provisioning/2019-09-16--installing-vanilla-forum/2019-09-16"},{"id":"DevOps/Linux/2024-01-08--vsftp-ubuntu/index","title":"vsftp on Ubuntu","description":"Setting up an FTP server on Ubuntu 22.04.","permalink":"/docs/DevOps/Linux/2024-01-08--vsftp-ubuntu/2024-01-08"},{"id":"Development/Javascript/2020-01-12--node-express-redirect-server/index","title":"Web traffic redirection with Node and Express on CentOS8","description":"Shenzhen, China","permalink":"/docs/Development/Javascript/2020-01-12--node-express-redirect-server/2020-01-12"},{"id":"DevOps/GitOps/2020-08-04--working-with-gitlab/index","title":"Working with Gitlab","description":"Guangzhou, China","permalink":"/docs/DevOps/GitOps/2020-08-04--working-with-gitlab/2020-08-04"},{"id":"DevOps/Linux/2019-06-17--working-with-tmux/index","title":"Working with TMUX","description":"Wan Chai, Hong Kong","permalink":"/docs/DevOps/Linux/2019-06-17--working-with-tmux/2019-06-17"},{"id":"DevOps/Zabbix/2020-07-16--zabbix-agent/index","title":"Zabbix Agent","description":"Shenzhen, China","permalink":"/docs/DevOps/Zabbix/2020-07-16--zabbix-agent/2020-07-16"},{"id":"DevOps/Zabbix/2021-01-14--zabbix-apache2-monitor/index","title":"Zabbix Apache 2 Monitor","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2021-01-14--zabbix-apache2-monitor/2021-10-14"},{"id":"DevOps/Zabbix/2020-07-19--zabbix-company-logo/index","title":"Zabbix Company Logo","description":"Mong Kok, Hong Kong","permalink":"/docs/DevOps/Zabbix/2020-07-19--zabbix-company-logo/2020-07-19"},{"id":"DevOps/Zabbix/2020-07-15--zabbix-docker-installation/index","title":"Zabbix Docker Installation","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Zabbix/2020-07-15--zabbix-docker-installation/2020-07-15"},{"id":"DevOps/Zabbix/2021-10-13--zabbix-compose-setup/index","title":"Zabbix Docker-Compose Setup","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2021-10-13--zabbix-compose-setup/2021-10-13"},{"id":"DevOps/Zabbix/2020-07-18--zabbix-email-notification/index","title":"Zabbix Email Notifications","description":"Mong Kok, Hong Kong","permalink":"/docs/DevOps/Zabbix/2020-07-18--zabbix-email-notification/2020-07-18"},{"id":"DevOps/Zabbix/2022-01-14--zabbix-http-cert-monitor/index","title":"Zabbix HTTPS Certificate Monitor","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-14--zabbix-http-cert-monitor/2022-01-14"},{"id":"DevOps/Zabbix/2020-07-17--zabbix-website-monitor/index","title":"Zabbix Monitoring a Website","description":"Mong Kok, Hong Kong","permalink":"/docs/DevOps/Zabbix/2020-07-17--zabbix-website-monitor/2020-07-17"},{"id":"DevOps/Zabbix/2020-07-20--zabbix-behind-nginx/index","title":"Zabbix Multi-Tenant NGINX Docker Ingress","description":"Mong Kok, Hong Kong","permalink":"/docs/DevOps/Zabbix/2020-07-20--zabbix-behind-nginx/2020-07-20"},{"id":"DevOps/Zabbix/2022-01-14--zabbix-apache2-monitor/index","title":"Zabbix v6 Apache 2 Monitor","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-14--zabbix-apache2-monitor/2022-01-14"},{"id":"DevOps/Zabbix/2022-01-16--zabbix-v6-baseline-monitoring/index","title":"Zabbix v6 Creating triggers for Baseline monitoring and Anomaly detection","description":"TST, Hong Kong","permalink":"/docs/DevOps/Zabbix/2022-01-16--zabbix-v6-baseline-monitoring/2022-01-16"},{"id":"DevOps/Zabbix/2022-01-14--zabbix-docker-monitor/index","title":"Zabbix v6 Docker Monitor","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-14--zabbix-docker-monitor/2022-01-14"},{"id":"DevOps/Zabbix/2022-01-13--zabbix-server-v6/index","title":"Zabbix v6 Docker-Compose Setup","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-13--zabbix-server-v6/2022-01-13"},{"id":"DevOps/Zabbix/2022-01-15--zabbix-v6-email-notifications/index","title":"Zabbix v6 Email Notifications","description":"TST, Hong Kong","permalink":"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-email-notifications/2022-01-15"},{"id":"DevOps/Zabbix/2022-01-14--zabbix-nginx-monitor/index","title":"Zabbix v6 NGINX Monitor","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-14--zabbix-nginx-monitor/2022-01-14"},{"id":"DevOps/Zabbix/2022-01-15--zabbix-v6-slack-notifications/index","title":"Zabbix v6 Slack Notifications","description":"TST, Hong Kong","permalink":"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-slack-notifications/2022-01-15"},{"id":"DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/index","title":"Zabbix v6 SMART HDD Check","description":"TST, Hong Kong","permalink":"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/2022-01-15"},{"id":"Automation_and_Robotics/Home_Automation/2019-01-05--zigbee2mqtt-xiaomi-fhem/index","title":"Zigbee Sensors in FHEM","description":"Hongkong","permalink":"/docs/Automation_and_Robotics/Home_Automation/2019-01-05--zigbee2mqtt-xiaomi-fhem/2019-01-05"}],"unlisted":false}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmikes_dev_notebook=self.webpackChunkmikes_dev_notebook||[]).push([[58221],{916567:i=>{i.exports=JSON.parse('{"label":"LINUX","permalink":"/docs/tags/linux","allTagsPath":"/docs/tags","count":302,"items":[{"id":"Automation_and_Robotics/Home_Automation/2020-09-15--mock-rest-api-with-nodered/index","title":"A Mock REST API in Node-RED and Docker","description":"Koh Rong, Cambodia","permalink":"/docs/Automation_and_Robotics/Home_Automation/2020-09-15--mock-rest-api-with-nodered/2020-09-16"},{"id":"DevOps/Linux/2020-10-20--activating-root-login-ubuntu-20-10/index","title":"Activating Root Login on Ubuntu 20.10","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Linux/2020-10-20--activating-root-login-ubuntu-20-10/2020-10-20"},{"id":"DevOps/NGINX/2019-11-08--nginx-rtmp-website/index","title":"Adding an OBS Stream to your Website","description":"Koh Rong, Cambodia","permalink":"/docs/DevOps/NGINX/2019-11-08--nginx-rtmp-website/2019-11-08"},{"id":"Automation_and_Robotics/Home_Automation/2019-09-28--node-red-homekit-containerized/index","title":"Adding Homekit to your Node-RED Container in Podman","description":"Siem Reap, Cambodia","permalink":"/docs/Automation_and_Robotics/Home_Automation/2019-09-28--node-red-homekit-containerized/2019-09-28"},{"id":"DevOps/Security/2022-09-27--wireshark-with-tls-encryption/index","title":"Analyzing and Decrypting TLS with Wireshark","description":"Capturing session keys to decrypt TLS traffic.","permalink":"/docs/DevOps/Security/2022-09-27--wireshark-with-tls-encryption/2022-09-27"},{"id":"DevOps/Ansible/2020-11-20--ansible-copy-cheat-sheet/index","title":"Ansible Copy Cheat Sheet","description":"Shenzhen, China","permalink":"/docs/DevOps/Ansible/2020-11-20--ansible-copy-cheat-sheet/2020-11-20"},{"id":"DevOps/Ansible/2020-11-26--ansible-dind/index","title":"Ansible Docker-in-Docker","description":"Shenzhen, China","permalink":"/docs/DevOps/Ansible/2020-11-26--ansible-dind/2020-11-26"},{"id":"DevOps/Ansible/2020-11-22--ansible-and-docker/index","title":"Ansible for Docker Deployment","description":"Shenzhen, China","permalink":"/docs/DevOps/Ansible/2020-11-22--ansible-and-docker/2020-11-22"},{"id":"DevOps/Ansible/2020-11-23--ansible-getting-serious/index","title":"Ansible Getting Serious","description":"Shenzhen, China","permalink":"/docs/DevOps/Ansible/2020-11-23--ansible-getting-serious/2020-11-23"},{"id":"DevOps/Ansible/2020-11-25--ansible-in-gitlab-ci/index","title":"Ansible in Gitlab CI Pipelines","description":"Shenzhen, China","permalink":"/docs/DevOps/Ansible/2020-11-25--ansible-in-gitlab-ci/2020-11-25"},{"id":"DevOps/Ansible/2020-11-19--ansible-playbooks/index","title":"Ansible Playbooks","description":"Shenzhen, China","permalink":"/docs/DevOps/Ansible/2020-11-19--ansible-playbooks/2020-11-19"},{"id":"DevOps/Ansible/2021-05-02-ansible-tower-examples/index","title":"Ansible Tower Practical Examples","description":"Guangzhou, China","permalink":"/docs/DevOps/Ansible/2021-05-02-ansible-tower-examples/2021-05-02"},{"id":"DevOps/Ansible/2021-05-01-ansible-tower-workflow-templates/index","title":"Ansible Tower Workflow Templates","description":"Guangzhou, China","permalink":"/docs/DevOps/Ansible/2021-05-01-ansible-tower-workflow-templates/2021-05-01"},{"id":"DevOps/Ansible/2020-11-24--ansible-vault-user-login/index","title":"Ansible Vault for User Logins","description":"Shenzhen, China","permalink":"/docs/DevOps/Ansible/2020-11-24--ansible-vault-user-login/2020-11-24"},{"id":"DevOps/Ansible/2020-11-21--ansible-modules-and-roles/index","title":"Ansible Vault, Modules & Roles","description":"Shenzhen, China","permalink":"/docs/DevOps/Ansible/2020-11-21--ansible-modules-and-roles/2020-11-21"},{"id":"DevOps/Hashicorp/2022-05-25-hashicorp-nomad-with-gitlab/index","title":"App Deployment with Hashicorp Nomad from Gitlab","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-05-25-hashicorp-nomad-with-gitlab/2022-05-25"},{"id":"DevOps/Hashicorp/2022-05-26-hashicorp-nomad-with-gitlab-part-2/index","title":"App Deployment with Hashicorp Nomad from Gitlab Part Deux","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-05-26-hashicorp-nomad-with-gitlab-part-2/2022-05-26"},{"id":"DevOps/Linux/2023-02-03--installing-docker-raspberry-pi/index","title":"ARM Docker","description":"Installing Docker on a Raspberry Pi","permalink":"/docs/DevOps/Linux/2023-02-03--installing-docker-raspberry-pi/2023-02-03"},{"id":"DevOps/Provisioning/2022-01-27--bind9-configuration/index","title":"Bind9 Server Configuration","description":"Shenzhen, China","permalink":"/docs/DevOps/Provisioning/2022-01-27--bind9-configuration/2022-01-27"},{"id":"DevOps/Linux/2022-09-29--build-an-chrony-nts-client-from-source/index","title":"Build a Chrony NTS Client from Source","description":"Building a client from source for a time service which uses IETF RFC 8915 called \u201cNetwork Time Security\u201c (NTS).","permalink":"/docs/DevOps/Linux/2022-09-29--build-an-chrony-nts-client-from-source/2022-09-29"},{"id":"DevOps/NGINX/2019-11-07--nginx-rtmp-streaming-container/index","title":"Building an RTMP Streaming Server with Podman","description":"Harbin, China","permalink":"/docs/DevOps/NGINX/2019-11-07--nginx-rtmp-streaming-container/2019-11-07"},{"id":"Automation_and_Robotics/MQTT/2022-03-27--build-mosquitto-from-source/index","title":"Building Eclipse Mosquitto v2 from Source","description":"Guangzhou, China","permalink":"/docs/Automation_and_Robotics/MQTT/2022-03-27--build-mosquitto-from-source/2022-03-27"},{"id":"DevOps/Linux/2020-01-05--centos8-cockpit/index","title":"CentOS 8 Cockpit Web Console","description":"Siem Reap, Cambodia","permalink":"/docs/DevOps/Linux/2020-01-05--centos8-cockpit/2020-01-05"},{"id":"DevOps/Linux/2019-09-22--centos8-network-config/index","title":"CentOS 8 Network Configuration","description":"Mong Kok, Hongkong","permalink":"/docs/DevOps/Linux/2019-09-22--centos8-network-config/2019-09-22"},{"id":"DevOps/Linux/2019-01-13--centos-administration/index","title":"Centos Administration","description":"Abashiri, Japan","permalink":"/docs/DevOps/Linux/2019-01-13--centos-administration/2019-01-13"},{"id":"DevOps/Linux/2019-01-12--centos-network-configuration/index","title":"Centos Network Configuration","description":"Battambang, Cambodia","permalink":"/docs/DevOps/Linux/2019-01-12--centos-network-configuration/2019-01-12"},{"id":"DevOps/Linux/2022-11-04--check-filesystem/index","title":"Check the Filesystem","description":"Check the Filesystem of a mounted SD Card using fsck","permalink":"/docs/DevOps/Linux/2022-11-04--check-filesystem/2022-11-04"},{"id":"DevOps/Hashicorp/2020-08-19--consul-deployment-guide/index","title":"Consul Deployment Guide","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Hashicorp/2020-08-19--consul-deployment-guide/2020-08-19"},{"id":"DevOps/Hashicorp/2020-08-18--consul-service-mesh/index","title":"Consul Service Mesh","description":"TST, Hong Kong","permalink":"/docs/DevOps/Hashicorp/2020-08-18--consul-service-mesh/2020-08-18"},{"id":"Automation_and_Robotics/Home_Automation/2022-12-15--rtsp-to-hls-ffmpeg/index","title":"Convert RTSP to HLS using FFmpeg","description":"INSTAR IP Camera RTSP Stream to HLS with FFMPEG","permalink":"/docs/Automation_and_Robotics/Home_Automation/2022-12-15--rtsp-to-hls-ffmpeg/2022-12-15"},{"id":"DevOps/Kubernetes/2019-01-15--creating-a-kubernetes-cluster/index","title":"Creating a Kubernetes Cluster","description":"Shanghai, China","permalink":"/docs/DevOps/Kubernetes/2019-01-15--creating-a-kubernetes-cluster/2019-01-15"},{"id":"DevOps/Linux/2019-01-11--debian-change-ssh-port-hostname/index","title":"Debian SSH Port and Hostname","description":"Battambang, Cambodia","permalink":"/docs/DevOps/Linux/2019-01-11--debian-change-ssh-port-hostname/2019-01-11"},{"id":"DevOps/Linux/2021-03-15-debian-upgrade-bullseye/index","title":"Debian Upgrade to Bullseye","description":"Hongkong, TST","permalink":"/docs/DevOps/Linux/2021-03-15-debian-upgrade-bullseye/2021-03-15"},{"id":"DevOps/Provisioning/2022-11-07--cphalcon-docker/index","title":"Deploy a cPhalcon App with Docker","description":"User Docker to provision a cPhalcon PHP application","permalink":"/docs/DevOps/Provisioning/2022-11-07--cphalcon-docker/2022-11-07"},{"id":"DevOps/Hashicorp/2022-11-18-hashicorp-nomad-grav/index","title":"Deploy Grav CMS with Hashicorp Nomad","description":"Using Nomad to deploy the Grav open source flat-file CMS","permalink":"/docs/DevOps/Hashicorp/2022-11-18-hashicorp-nomad-grav/2022-11-18"},{"id":"DevOps/Provisioning/2022-11-16--mautic-docker/index","title":"Deploy Mautic with Docker","description":"User Docker to provision the Mautic Free and Open Source Marketing Automation Platform","permalink":"/docs/DevOps/Provisioning/2022-11-16--mautic-docker/2022-11-16"},{"id":"DevOps/Hashicorp/2022-11-16-hashicorp-nomad-mautic/index","title":"Deploy Mautic with Hashicorp Nomad","description":"Using Nomad to deploy the Mautic Marketing Automation Platform","permalink":"/docs/DevOps/Hashicorp/2022-11-16-hashicorp-nomad-mautic/2022-11-16"},{"id":"DevOps/Provisioning/2022-01-26--dns-over-TLS-docker/index","title":"DNS Over TLS Using BIND And Nginx","description":"Shenzhen, China","permalink":"/docs/DevOps/Provisioning/2022-01-26--dns-over-TLS-docker/2022-01-26"},{"id":"DevOps/Provisioning/2020-09-02--docker-compose-networking/index","title":"Docker Compose Networking","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Provisioning/2020-09-02--docker-compose-networking/2020-09-02"},{"id":"DevOps/Linux/2019-06-14--download-and-save-docker-image/index","title":"Downloading Docker Images for Offline Use","description":"Mustang, Nepal","permalink":"/docs/DevOps/Linux/2019-06-14--download-and-save-docker-image/2019-06-14"},{"id":"DevOps/Linux/2021-10-09--editor-from-hell/index","title":"Editor from Hell","description":"Harbin , China","permalink":"/docs/DevOps/Linux/2021-10-09--editor-from-hell/2021-10-09"},{"id":"DevOps/Elasticsearch/2021-03-31-elastic-filebeats-for-apache-logs/index","title":"Elastic Filebeat and Apache Access Logs","description":"Otaru, Japan","permalink":"/docs/DevOps/Elasticsearch/2021-03-31-elastic-filebeats-for-apache-logs/2021-03-31"},{"id":"DevOps/Elasticsearch/2021-04-01-elastic-filebeats-for-nginx-logs/index","title":"Elastic Filebeat and NGINX Access Logs","description":"Mongkok, Hongkong","permalink":"/docs/DevOps/Elasticsearch/2021-04-01-elastic-filebeats-for-nginx-logs/2021-04-01"},{"id":"DevOps/Elasticsearch/2022-02-05--kibana-v8-index-management/index","title":"Elasticsearch & Kibana v8 Index Management","description":"Shenzhen, China","permalink":"/docs/DevOps/Elasticsearch/2022-02-05--kibana-v8-index-management/2022-02-05"},{"id":"DevOps/Elasticsearch/2022-02-04--kibana-v8-search-queries/index","title":"Elasticsearch & Kibana v8 Search Cheat Sheet","description":"Shenzhen, China","permalink":"/docs/DevOps/Elasticsearch/2022-02-04--kibana-v8-search-queries/2022-02-04"},{"id":"DevOps/Elasticsearch/2021-03-27-elasticsearch7-aggregations/index","title":"Elasticsearch 7 Aggregations","description":"Abashiri, Japan","permalink":"/docs/DevOps/Elasticsearch/2021-03-27-elasticsearch7-aggregations/2021-03-27"},{"id":"DevOps/Elasticsearch/2021-03-30-elasticsearch7-and-filebeats/index","title":"Elasticsearch 7 and Filebeats","description":"Harbin, China","permalink":"/docs/DevOps/Elasticsearch/2021-03-30-elasticsearch7-and-filebeats/2021-03-30"},{"id":"DevOps/Elasticsearch/2021-03-29-elasticsearch7-data-transformations/index","title":"Elasticsearch 7 Data Transformation","description":"Harbin, China","permalink":"/docs/DevOps/Elasticsearch/2021-03-29-elasticsearch7-data-transformations/2021-03-29"},{"id":"DevOps/Elasticsearch/2021-03-20-elasticsearch-7-refresher/index","title":"Elasticsearch 7 Refresher","description":"Hongkong, TST","permalink":"/docs/DevOps/Elasticsearch/2021-03-20-elasticsearch-7-refresher/2021-03-20"},{"id":"DevOps/Elasticsearch/2021-03-28-elasticsearch7-timeseries/index","title":"Elasticsearch 7 Timeseries","description":"Kathmandu, Nepal","permalink":"/docs/DevOps/Elasticsearch/2021-03-28-elasticsearch7-timeseries/2021-03-28"},{"id":"DevOps/Elasticsearch/2021-03-26-elasticsearch7-for-syslog-messages/index","title":"Elasticsearch 7 to log Linux System Events","description":"Harbin, China","permalink":"/docs/DevOps/Elasticsearch/2021-03-26-elasticsearch7-for-syslog-messages/2021-03-26"},{"id":"DevOps/Elasticsearch/2017-12-26--elasticsearch-kibana/index","title":"Elasticsearch and Kibana","description":"Battambang, Cambodia","permalink":"/docs/DevOps/Elasticsearch/2017-12-26--elasticsearch-kibana/2017-12-16"},{"id":"DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/cheat-sheet","title":"Elasticsearch Cheat Sheet","description":"Source: JoliCode","permalink":"/docs/DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/elasticsearch-cheat-sheet"},{"id":"DevOps/Elasticsearch/2022-02-06--elasticsearch-v8-data-ingestion-apache/index","title":"Elasticsearch v8, Filebeat (Docker) and Apache","description":"Shenzhen, China","permalink":"/docs/DevOps/Elasticsearch/2022-02-06--elasticsearch-v8-data-ingestion-apache/2022-02-06"},{"id":"DevOps/Elasticsearch/2022-02-03--elasticsearch-v8-data-ingestion/index","title":"Elasticsearch v8, Filebeat (Docker) and NGINX","description":"Shenzhen, China","permalink":"/docs/DevOps/Elasticsearch/2022-02-03--elasticsearch-v8-data-ingestion/2022-02-03"},{"id":"DevOps/Linux/2023-03-29--installing-the-elgato-streamdeck/index","title":"Elgato Streamdeck on Arch Linux","description":"Installing the Elgato Streamdeck on Arch Linux","permalink":"/docs/DevOps/Linux/2023-03-29--installing-the-elgato-streamdeck/2023-03-29"},{"id":"DevOps/Linux/2022-03-07--ffmpeg-cheat-sheet/index","title":"FFMPEG Cheat Sheet","description":"ffmpeg version 5.0-full_build-www.gyan.dev Copyright (c) 2000-2022","permalink":"/docs/DevOps/Linux/2022-03-07--ffmpeg-cheat-sheet/2022-03-07"},{"id":"DevOps/Provisioning/2021-01-22-file-transfer-tools-in-nodejs/index","title":"File Transfer Tool in Node.js","description":"Shenzhen, China","permalink":"/docs/DevOps/Provisioning/2021-01-22-file-transfer-tools-in-nodejs/2021-01-22"},{"id":"DevOps/Linux/2022-03-09--fing-cli-network-scanner/index","title":"Fing CLI Network Scanner on Arch Linux","description":"Shenzhen, China","permalink":"/docs/DevOps/Linux/2022-03-09--fing-cli-network-scanner/2022-03-09"},{"id":"DevOps/Linux/2023-10-28--lunarvim/index","title":"From NeoVim to LunarVim","description":"An IDE layer for Neovim with sane defaults. Completely free and community driven.","permalink":"/docs/DevOps/Linux/2023-10-28--lunarvim/2023-10-28"},{"id":"DevOps/Provisioning/2023-02-13--meili-search-gatsby/index","title":"Gatsby Blog with a MeiLi Search Backend","description":"Serve your Gatsby.js Blog in a goFiber container and connect a Search Engine.","permalink":"/docs/DevOps/Provisioning/2023-02-13--meili-search-gatsby/2023-02-13"},{"id":"Automation_and_Robotics/Robotics_Simulation/2023-11-19--ros2-gazebo-installation/index","title":"Gazebo & ROS2 Basic Installation","description":"Gazebo brings a fresh approach to simulation with a complete toolbox of development libraries and cloud services to make simulation easy.","permalink":"/docs/Automation_and_Robotics/Robotics_Simulation/2023-11-19--ros2-gazebo-installation/2023-11-19"},{"id":"DevOps/Provisioning/2022-01-24--getting-to-know-bind9-docker/index","title":"Getting to know the BIND9 DNS Server with Docker","description":"Shenzhen, China","permalink":"/docs/DevOps/Provisioning/2022-01-24--getting-to-know-bind9-docker/2022-01-24"},{"id":"DevOps/GitOps/2020-08-03--gitlab-as-docker-registry/index","title":"Gitlab as Docker Registry","description":"Guangzhou, China","permalink":"/docs/DevOps/GitOps/2020-08-03--gitlab-as-docker-registry/2020-08-03"},{"id":"DevOps/Linux/2021-04-12-gnome3-cheat-sheet/index","title":"Gnome3 Cheat Sheet","description":"Victoria Harbour, Hongkong","permalink":"/docs/DevOps/Linux/2021-04-12-gnome3-cheat-sheet/2021-04-12"},{"id":"Development/Go/2021-10-08--goftp/index","title":"goFTP","description":"Victoria , Hong Kong","permalink":"/docs/Development/Go/2021-10-08--goftp/2021-10-08"},{"id":"DevOps/Zabbix/2022-01-15--zabbix-grafana-dashboard/index","title":"Grafana Dashboard for Zabbix v6","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-15--zabbix-grafana-dashboard/2022-01-15"},{"id":"Automation_and_Robotics/Home_Automation/2022-12-22--grafana-for-iot/index","title":"Grafana IoT Dashboard","description":"Building IoT Visualizations using Grafana","permalink":"/docs/Automation_and_Robotics/Home_Automation/2022-12-22--grafana-for-iot/2022-12-22"},{"id":"DevOps/Hashicorp/2022-12-04-hashicorp-consul-vault-certificates-part1/index","title":"Hashicorp Consul - Vault Cert Management Part 1","description":"Set-up Vault to be the Certificate Authority","permalink":"/docs/DevOps/Hashicorp/2022-12-04-hashicorp-consul-vault-certificates-part1/2022-12-04"},{"id":"DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part2/index","title":"Hashicorp Consul - Vault Cert Management Part 2","description":"Set-up Vault to be the Certificate Authority","permalink":"/docs/DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part2/2022-12-05"},{"id":"DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part3/index","title":"Hashicorp Consul - Vault Cert Management Part 3","description":"Set-up Vault to be the Certificate Authority","permalink":"/docs/DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part3/2022-12-05"},{"id":"DevOps/Hashicorp/2021-08-13--hashicorp-consul-access-control-lists/index","title":"Hashicorp Consul Refresher - Access Control Lists","description":"Phnom Penh, Cambodia","permalink":"/docs/DevOps/Hashicorp/2021-08-13--hashicorp-consul-access-control-lists/2021-08-13"},{"id":"DevOps/Hashicorp/2021-08-11--hashicorp-consul-backups/index","title":"Hashicorp Consul Refresher - Backups","description":"Shenzhen, China","permalink":"/docs/DevOps/Hashicorp/2021-08-11--hashicorp-consul-backups/2021-08-11"},{"id":"DevOps/Hashicorp/2021-08-14--hashicorp-consul-tls-encryption/index","title":"Hashicorp Consul Refresher - Gossip TLS Encryption","description":"Phnom Penh, Cambodia","permalink":"/docs/DevOps/Hashicorp/2021-08-14--hashicorp-consul-tls-encryption/2021-08-14"},{"id":"DevOps/Hashicorp/2021-08-10--hashicorp-consul-key-value-store/index","title":"Hashicorp Consul Refresher - Key Value Store","description":"Mongkok, Hongkong","permalink":"/docs/DevOps/Hashicorp/2021-08-10--hashicorp-consul-key-value-store/2021-08-10"},{"id":"DevOps/Hashicorp/2021-08-06--hashicorp-consul-fabio-loadbalancing/index","title":"Hashicorp Consul Refresher - Loadbalancing with Fabio","description":"Tsim Sha Tsui, Hongkong","permalink":"/docs/DevOps/Hashicorp/2021-08-06--hashicorp-consul-fabio-loadbalancing/2021-08-06"},{"id":"DevOps/Hashicorp/2021-08-06--hashicorp-consul-traefik-loadbalancing/index","title":"Hashicorp Consul Refresher - Loadbalancing with Traefik","description":"Tsim Sha Tsui, Hongkong","permalink":"/docs/DevOps/Hashicorp/2021-08-06--hashicorp-consul-traefik-loadbalancing/2021-08-06"},{"id":"DevOps/Hashicorp/2021-08-05--hashicorp-consul-service-discovery/index","title":"Hashicorp Consul Refresher - Service Discovery","description":"Cheung Chau, Hongkong","permalink":"/docs/DevOps/Hashicorp/2021-08-05--hashicorp-consul-service-discovery/2021-08-05"},{"id":"DevOps/Hashicorp/2021-08-12--hashicorp-consul-service-mesh/index","title":"Hashicorp Consul Refresher - Service Mesh","description":"Wan Chai, Hongkong","permalink":"/docs/DevOps/Hashicorp/2021-08-12--hashicorp-consul-service-mesh/2021-08-12"},{"id":"DevOps/Hashicorp/2021-08-09--hashicorp-consul-services/index","title":"Hashicorp Consul Refresher - Services","description":"Guangzhou, China","permalink":"/docs/DevOps/Hashicorp/2021-08-09--hashicorp-consul-services/2021-08-09"},{"id":"DevOps/Hashicorp/2022-05-21-hashicorp-dojo-consul-refresher/index","title":"Hashicorp Dojo Consul Refresher","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-05-21-hashicorp-dojo-consul-refresher/2022-05-21"},{"id":"DevOps/Hashicorp/2022-10-23-hashicorp-consul-connect/index","title":"Hashicorp Nomad - Working with Consul Connect","description":"CNI Error message with Consul Connect","permalink":"/docs/DevOps/Hashicorp/2022-10-23-hashicorp-consul-connect/2022-10-23"},{"id":"DevOps/Hashicorp/2022-11-24-hashicorp-consul-connect/index","title":"Hashicorp Nomad - Working with Consul Connect","description":"Use the Consul service mesh to connect a frontend with it\'s API backend.","permalink":"/docs/DevOps/Hashicorp/2022-11-24-hashicorp-consul-connect/2022-11-24"},{"id":"DevOps/Hashicorp/2022-10-23-hashicorp-nomad-ports/index","title":"Hashicorp Nomad - Working with Ports","description":"How to declare Ports to be used in Nomad Job files","permalink":"/docs/DevOps/Hashicorp/2022-10-23-hashicorp-nomad-ports/2022-10-23"},{"id":"DevOps/Hashicorp/2022-05-19-hashicorp-dojo-nomad-access-control/index","title":"Hashicorp Nomad Access Control","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-05-19-hashicorp-dojo-nomad-access-control/2022-05-19"},{"id":"DevOps/Hashicorp/2022-05-18-hashicorp-dojo-nomad-adding-encryption/index","title":"Hashicorp Nomad Adding Encryption to your Cluster","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-05-18-hashicorp-dojo-nomad-adding-encryption/2022-05-18"},{"id":"DevOps/Hashicorp/2022-05-17-hashicorp-dojo-nomad-deployment/index","title":"Hashicorp Nomad Deployment","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-05-17-hashicorp-dojo-nomad-deployment/2022-05-17"},{"id":"DevOps/Hashicorp/2022-05-16-hashicorp-dojo-nomad-starter/index","title":"Hashicorp Nomad Dojo","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-05-16-hashicorp-dojo-nomad-starter/2022-05-16"},{"id":"DevOps/Hashicorp/2022-11-15-hashicorp-nomad-nginx-load-balancing/index","title":"Hashicorp Nomad for NGINX Load-balancing","description":"Following along the official NGINX load-balancing tutorial.","permalink":"/docs/DevOps/Hashicorp/2022-11-15-hashicorp-nomad-nginx-load-balancing/2022-11-15"},{"id":"DevOps/Hashicorp/2022-05-24-hashicorp-nomad-with-nginx/index","title":"Hashicorp Nomad for NGINX Web Proxies","description":"","permalink":"/docs/DevOps/Hashicorp/2022-05-24-hashicorp-nomad-with-nginx/2022-05-24"},{"id":"DevOps/Hashicorp/2022-05-15-hashicorp-nomad-refresher/index","title":"Hashicorp Nomad Refresher","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-05-15-hashicorp-nomad-refresher/2022-05-15"},{"id":"DevOps/Hashicorp/2021-08-01--hashicorp-nomad-refresher/index","title":"Hashicorp Nomad Refresher - Installation","description":"Shenzhen, China","permalink":"/docs/DevOps/Hashicorp/2021-08-01--hashicorp-nomad-refresher/2021-08-01"},{"id":"DevOps/Hashicorp/2021-08-04--hashicorp-nomad-job-specifications/index","title":"Hashicorp Nomad Refresher - Job Specifications","description":"Cheung Chau, Hongkong","permalink":"/docs/DevOps/Hashicorp/2021-08-04--hashicorp-nomad-job-specifications/2021-08-04"},{"id":"DevOps/Hashicorp/2021-08-03--hashicorp-nomad-jobs/index","title":"Hashicorp Nomad Refresher - Jobs","description":"Shenzhen, China","permalink":"/docs/DevOps/Hashicorp/2021-08-03--hashicorp-nomad-jobs/2021-08-03"},{"id":"DevOps/Hashicorp/2021-08-02--hashicorp-nomad-security/index","title":"Hashicorp Nomad Refresher - Security","description":"Shenzhen, China","permalink":"/docs/DevOps/Hashicorp/2021-08-02--hashicorp-nomad-security/2021-08-02"},{"id":"DevOps/Hashicorp/2022-11-15-hashicorp-nomad-balanced-nts/index","title":"Hashicorp Nomad Secure & Balanced NTS Time Service","description":"Using Nomad to deploy a secure time server.","permalink":"/docs/DevOps/Hashicorp/2022-11-15-hashicorp-nomad-balanced-nts/2022-11-15"},{"id":"DevOps/Hashicorp/2022-10-22-hashicorp-nomad-sidecar-pattern/index","title":"Hashicorp Nomad Sidecar Pattern","description":"Combine two applications in a single Nomad Job.","permalink":"/docs/DevOps/Hashicorp/2022-10-22-hashicorp-nomad-sidecar-pattern/2022-10-22"},{"id":"DevOps/Hashicorp/2022-11-12-hashicorp-nomad-certbot-renewal/index","title":"Hashicorp Nomad to Renew your TLS Certificates","description":"Using the Periodic Stanza to execute Certbot Renewals","permalink":"/docs/DevOps/Hashicorp/2022-11-12-hashicorp-nomad-certbot-renewal/2022-11-12"},{"id":"DevOps/Hashicorp/2022-11-11-hashicorp-nomad-for-borg-backups/index","title":"Hashicorp Nomad to run periodic backups","description":"Dockerized version of Borg Backup Server with Docker and Nomad","permalink":"/docs/DevOps/Hashicorp/2022-11-11-hashicorp-nomad-for-borg-backups/2022-11-11"},{"id":"DevOps/Hashicorp/2022-05-27-hashicorp-nomad-for-elastic/index","title":"Hashicorp Nomad to set up an Elasticsearch Cluster","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-05-27-hashicorp-nomad-for-elastic/2022-05-27"},{"id":"DevOps/Hashicorp/2022-05-28-hashicorp-nomad-for-elastic-part-2/index","title":"Hashicorp Nomad to set up an Elasticsearch Cluster Part II","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-05-28-hashicorp-nomad-for-elastic-part-2/2022-05-28"},{"id":"DevOps/Hashicorp/2022-10-21-hashicorp-nomad-for-osticket-part-i/index","title":"Hashicorp Nomad to set up an OSTicket Helpdesk - Part I","description":"Porting a OSTicket/MariaDB helpdesk service from Docker-Compose to Nomad","permalink":"/docs/DevOps/Hashicorp/2022-10-21-hashicorp-nomad-for-osticket-part-i/2022-10-21"},{"id":"DevOps/Hashicorp/2022-10-25-hashicorp-nomad-for-osticket-part-ii/index","title":"Hashicorp Nomad to set up an OSTicket Helpdesk - Part II","description":"Porting a OSTicket/MariaDB helpdesk service from Docker-Compose to Nomad","permalink":"/docs/DevOps/Hashicorp/2022-10-25-hashicorp-nomad-for-osticket-part-ii/2022-10-25"},{"id":"DevOps/Hashicorp/2022-05-22-hashicorp-dojo-nomad-consul-part-2/index","title":"Hashicorp Nomad with Consul II - The Reckoning","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-05-22-hashicorp-dojo-nomad-consul-part-2/2022-05-22"},{"id":"DevOps/Hashicorp/2022-05-20-hashicorp-dojo-nomad-consul/index","title":"Hashicorp Nomad with Consul Service Discovery","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-05-20-hashicorp-dojo-nomad-consul/2022-05-20"},{"id":"DevOps/Hashicorp/2022-05-29-hashicorp-nomad-with-nginx-loadbalancer/index","title":"Hashicorp Nomad with NGINX Loadbalancer","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-05-29-hashicorp-nomad-with-nginx-loadbalancer/2022-05-29"},{"id":"DevOps/Hashicorp/2020-10-23--hashicorp-packer-machine-image/index","title":"HashiCorp Packer Machine Images Introduction","description":"TST, Hong Kong","permalink":"/docs/DevOps/Hashicorp/2020-10-23--hashicorp-packer-machine-image/2020-10-23"},{"id":"DevOps/Hashicorp/2020-10-26--hashicorp-packer-provisioner/index","title":"HashiCorp Packer Provisioning","description":"TST, Hong Kong","permalink":"/docs/DevOps/Hashicorp/2020-10-26--hashicorp-packer-provisioner/2020-10-26"},{"id":"DevOps/Hashicorp/2020-10-25--hashicorp-packer-and-virtualbox-autoinstall/index","title":"HashiCorp Packer with Virtualbox (Autoinstall)","description":"TST, Hong Kong","permalink":"/docs/DevOps/Hashicorp/2020-10-25--hashicorp-packer-and-virtualbox-autoinstall/2020-10-25"},{"id":"DevOps/Hashicorp/2020-10-24--hashicorp-packer-and-virtualbox-preseed/index","title":"HashiCorp Packer with Virtualbox (Preseed)","description":"TST, Hong Kong","permalink":"/docs/DevOps/Hashicorp/2020-10-24--hashicorp-packer-and-virtualbox-preseed/2020-10-24"},{"id":"DevOps/Hashicorp/2023-10-22-hashicorp-terraform-docker-2023/index","title":"Hashicorp Terraform - Docker Provider 2023","description":"Build, change, and destroy Docker infrastructure using Terraform.","permalink":"/docs/DevOps/Hashicorp/2023-10-22-hashicorp-terraform-docker-2023/2023-10-22"},{"id":"DevOps/Hashicorp/2023-12-22-hashicorp-terraform-docker-2024/index","title":"Hashicorp Terraform - Docker Provider 2024","description":"Build, change, and destroy Docker infrastructure using Terraform.","permalink":"/docs/DevOps/Hashicorp/2023-12-22-hashicorp-terraform-docker-2024/2023-12-22"},{"id":"DevOps/Hashicorp/2021-09-06--hashicorp-terraform-providers-variables-attributes/index","title":"Hashicorp Terraform - Providers, Variables & Attributes","description":"Shenzhen, China","permalink":"/docs/DevOps/Hashicorp/2021-09-06--hashicorp-terraform-providers-variables-attributes/2021-09-07"},{"id":"DevOps/Hashicorp/2021-09-05--hashicorp-terraform-setup/index","title":"Hashicorp Terraform - Setup","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Hashicorp/2021-09-05--hashicorp-terraform-setup/2021-09-05"},{"id":"DevOps/Hashicorp/2021-08-22--hashicorp-vault-policies/index","title":"Hashicorp Vault - ACL Policies","description":"Shenzhen, China","permalink":"/docs/DevOps/Hashicorp/2021-08-22--hashicorp-vault-policies/2021-08-22"},{"id":"DevOps/Hashicorp/2022-12-07-hashicorp-vault-ca-certificates/index","title":"Hashicorp Vault - Certificate Authority","description":"Generating CA certificates through Hashicorp Vault user interface.","permalink":"/docs/DevOps/Hashicorp/2022-12-07-hashicorp-vault-ca-certificates/2022-12-07"},{"id":"DevOps/Hashicorp/2022-12-03-hashicorp-vault-installation/index","title":"Hashicorp Vault - Installation 2023","description":"Getting started with Hashicorp Vault","permalink":"/docs/DevOps/Hashicorp/2022-12-03-hashicorp-vault-installation/2022-12-03"},{"id":"DevOps/Hashicorp/2021-08-25--hashicorp-vault-logging/index","title":"Hashicorp Vault - Logging","description":"Shenzhen, China","permalink":"/docs/DevOps/Hashicorp/2021-08-25--hashicorp-vault-logging/2021-08-25"},{"id":"DevOps/Hashicorp/2021-08-23--hashicorp-vault-rest-api/index","title":"Hashicorp Vault - Rest API","description":"Tsim Sha Tsui, Hongkong","permalink":"/docs/DevOps/Hashicorp/2021-08-23--hashicorp-vault-rest-api/2021-08-23"},{"id":"DevOps/Hashicorp/2021-08-21--hashicorp-vault-secrets-tokens/index","title":"Hashicorp Vault - Secrets & Tokens","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Hashicorp/2021-08-21--hashicorp-vault-secrets-tokens/2021-08-21"},{"id":"DevOps/Hashicorp/2021-08-20--hashicorp-vault-setup/index","title":"Hashicorp Vault - Setup","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Hashicorp/2021-08-20--hashicorp-vault-setup/2021-08-20"},{"id":"DevOps/Hashicorp/2022-06-07-hashicorp-waypoint-docker/index","title":"Hashicorp Waypoint with Docker","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-06-07-hashicorp-waypoint-docker/2022-06-07"},{"id":"DevOps/Hashicorp/2022-06-08-hashicorp-waypoint-nomad/index","title":"Hashicorp Waypoint with Nomad","description":"Shen Zhen, China","permalink":"/docs/DevOps/Hashicorp/2022-06-08-hashicorp-waypoint-nomad/2022-06-09"},{"id":"DevOps/Linux/2020-10-13--smarttools-centos/index","title":"HDD Smart Tools for LINUX","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Linux/2020-10-13--smarttools-centos/2020-10-13"},{"id":"Automation_and_Robotics/Home_Automation/2024-01-09--home-assistant-rtsptoweb/index","title":"Home Assistant with RTSPtoWeb","description":"Home Assistant with WebRTC for INSTAR IP cameras using RTSPtoWeb.","permalink":"/docs/Automation_and_Robotics/Home_Automation/2024-01-09--home-assistant-rtsptoweb/2024-01-09"},{"id":"Automation_and_Robotics/Home_Automation/2019-09-27--home-assistant-podman-centos8/index","title":"Home Assistant, OpenHAB, Node-RED, ioBroker, MotionEye Containerized (Podman)","description":"Siem Reap, Cambodia","permalink":"/docs/Automation_and_Robotics/Home_Automation/2019-09-27--home-assistant-podman-centos8/2019-09-27"},{"id":"Automation_and_Robotics/Home_Automation/2023-04-18--home-assistant-node-red-iobroker-docker/index","title":"Home Assistant, OpenHAB, Node-RED, ioBroker, MotionEye, ZoneMinder, Frigate, iSpy Agent, Kerberos Containerized (Docker)","description":"Smarthome Cheat Sheet (Docker Edition)","permalink":"/docs/Automation_and_Robotics/Home_Automation/2023-04-18--home-assistant-node-red-iobroker-docker/2023-04-18"},{"id":"DevOps/Provisioning/2020-07-13--infrastructure-as-code/index","title":"Infrastructure as Code","description":"Shenzhen, China","permalink":"/docs/DevOps/Provisioning/2020-07-13--infrastructure-as-code/2020-07-13"},{"id":"DevOps/Linux/2021-10-26--install-davinci-resolve-on-arch/index","title":"Install Davinci Resolve on Arch Linux","description":"Shenzhen, China","permalink":"/docs/DevOps/Linux/2021-10-26--install-davinci-resolve-on-arch/2021-10-26"},{"id":"DevOps/Linux/2021-10-24--arch-linux-install-docker/index","title":"Install Docker in Arch Linux","description":"Shenzhen, China","permalink":"/docs/DevOps/Linux/2021-10-24--arch-linux-install-docker/2021-10-24"},{"id":"DevOps/GitOps/2022-03-16--gitlab-docker-compose-on-localhost/index","title":"Install Gitlab with Docker-Compose (Debian Bullseye)","description":"Shenzhen, China","permalink":"/docs/DevOps/GitOps/2022-03-16--gitlab-docker-compose-on-localhost/2022-03-16"},{"id":"DevOps/Linux/2021-10-24--arch-linux-install-mesen/index","title":"Install Mesen in Arch Linux","description":"Shenzhen, China","permalink":"/docs/DevOps/Linux/2021-10-24--arch-linux-install-mesen/2021-10-24"},{"id":"DevOps/Linux/2021-10-23--arch-linux-install-packages/index","title":"Install Packages in Arch Linux","description":"Shenzhen, China","permalink":"/docs/DevOps/Linux/2021-10-23--arch-linux-install-packages/2021-10-23"},{"id":"DevOps/Salt/2020-06-14--install-salt-on-ubuntu-20-04/index","title":"Install Salt on Ubuntu Server 20.04","description":"Battambang, Cambodia","permalink":"/docs/DevOps/Salt/2020-06-14--install-salt-on-ubuntu-20-04/2020-06-14"},{"id":"DevOps/Tomcat/2020-12-22-tomcat9-ubuntu-20-10-installation/index","title":"Install Tomcat 9 on Ubuntu 20.04","description":"Siem Reap, Cambodia","permalink":"/docs/DevOps/Tomcat/2020-12-22-tomcat9-ubuntu-20-10-installation/2020-12-22"},{"id":"DevOps/Provisioning/2022-01-23--installing-discourse-docker/index","title":"Installing a Discourse Forum on Debian Bullseye with Docker","description":"Shenzhen, China","permalink":"/docs/DevOps/Provisioning/2022-01-23--installing-discourse-docker/2022-01-23"},{"id":"DevOps/Ansible/2021-04-28-ansible-tower-rhel/index","title":"Installing Ansible Tower (AWX in Docker) on RHEL8","description":"Guangzhou, China","permalink":"/docs/DevOps/Ansible/2021-04-28-ansible-tower-rhel/2021-04-28"},{"id":"DevOps/Linux/2021-04-14-using-deb-files-on-rhel8/index","title":"Installing Deb Packages on RHEL8","description":"Shenzhen, China","permalink":"/docs/DevOps/Linux/2021-04-14-using-deb-files-on-rhel8/2021-04-14"},{"id":"DevOps/Provisioning/2019-06-15--installing-discourse-on-centos8/index","title":"Installing Discourse on Centos 8","description":"Mongkok, Hongkong","permalink":"/docs/DevOps/Provisioning/2019-06-15--installing-discourse-on-centos8/2019-06-15"},{"id":"DevOps/Linux/2020-01-07--centos8-firewalld/index","title":"Installing FirewallD on CentOS 8","description":"Shenzhen, China","permalink":"/docs/DevOps/Linux/2020-01-07--centos8-firewalld/2020-01-05"},{"id":"DevOps/Linux/2021-04-11-installing-free-red-hat-enterprise-linux/index","title":"Installing Free Red Hat Enterprise Linux","description":"Guangzhou, China","permalink":"/docs/DevOps/Linux/2021-04-11-installing-free-red-hat-enterprise-linux/2021-04-11"},{"id":"DevOps/GitOps/2020-08-01--gitlab-install-on-ubuntu-server/index","title":"Installing Gitlab on Ubuntu Server 20.04","description":"Mong Kok, Hong Kong","permalink":"/docs/DevOps/GitOps/2020-08-01--gitlab-install-on-ubuntu-server/2020-08-01"},{"id":"Development/Magento/2020-12-07-google-analytics-g4-tag/index","title":"Installing Google Analytics g4 Tag in your Gatsby and Discourse Webservice","description":"Siem Reap, Cambodia","permalink":"/docs/Development/Magento/2020-12-07-google-analytics-g4-tag/2020-12-07"},{"id":"DevOps/Hashicorp/2020-08-17--installing-consul-ubuntu/index","title":"Installing HashiCorp Consul on Ubuntu Server 20.04","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Hashicorp/2020-08-17--installing-consul-ubuntu/2020-08-17"},{"id":"DevOps/Hashicorp/2020-08-15--installing-nomad-ubuntu/index","title":"Installing HashiCorp Nomad on Ubuntu Server 20.04","description":"TST, Hong Kong","permalink":"/docs/DevOps/Hashicorp/2020-08-15--installing-nomad-ubuntu/2020-08-15"},{"id":"Automation_and_Robotics/Home_Automation/2019-09-24--iobroker-podman-centos8/index","title":"Installing ioBroker on CentOS8 with Podman","description":"Shanghai, China","permalink":"/docs/Automation_and_Robotics/Home_Automation/2019-09-24--iobroker-podman-centos8/2019-09-24"},{"id":"DevOps/Linux/2021-09-01--kali-linux-raspberry-pi/index","title":"Installing Kali LINUX on a Raspberry Pi 3","description":"Shenzhen, China","permalink":"/docs/DevOps/Linux/2021-09-01--kali-linux-raspberry-pi/2021-09-01"},{"id":"Automation_and_Robotics/Home_Automation/2019-09-24--motioneye-podman-centos8/index","title":"Installing MotionEye on CentOS8 with Podman","description":"Shanghai, China","permalink":"/docs/Automation_and_Robotics/Home_Automation/2019-09-24--motioneye-podman-centos8/2019-09-24"},{"id":"DevOps/Zabbix/2020-07-14--nagios-ubuntu-install/index","title":"Installing Nagios4 on Ubuntu Server 20.04","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Zabbix/2020-07-14--nagios-ubuntu-install/2020-07-14"},{"id":"DevOps/Zabbix/2020-07-12--nagios-docker-install/index","title":"Installing Nagios4 with Docker","description":"Cheung Chau, Hong Kong","permalink":"/docs/DevOps/Zabbix/2020-07-12--nagios-docker-install/2020-07-12"},{"id":"DevOps/Linux/2019-09-22--zsh-on-centos8/index","title":"Installing Oh-My-Zsh on CentOS8","description":"Central, Hong Kong","permalink":"/docs/DevOps/Linux/2019-09-22--zsh-on-centos8/2019-09-22"},{"id":"DevOps/Linux/2019-09-22--zsh-on-ubuntu20/index","title":"Installing Oh-My-Zsh on Ubuntu 20.04","description":"Central, Hong Kong","permalink":"/docs/DevOps/Linux/2019-09-22--zsh-on-ubuntu20/2019-09-22"},{"id":"DevOps/Provisioning/2020-10-01--installing-openproject-in-docker/index","title":"Installing OpenProject with Docker Compose","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Provisioning/2020-10-01--installing-openproject-in-docker/2020-10-01"},{"id":"DevOps/Linux/2021-09-02--openwrt-raspberry-pi/index","title":"Installing OpenWRT on a Raspberry Pi 4","description":"Shenzhen, China","permalink":"/docs/DevOps/Linux/2021-09-02--openwrt-raspberry-pi/2021-09-02"},{"id":"DevOps/Provisioning/2020-10-02--installing-wazuh-in-docker/index","title":"Installing Wazuh with Docker Compose","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Provisioning/2020-10-02--installing-wazuh-in-docker/2020-10-02"},{"id":"Automation_and_Robotics/Home_Automation/2024-01-10--go2rtc/index","title":"INSTAR go2rtc for Home Assistant","description":"Use go2rtc to embed your INSTAR IP camera\'s webRTC live video in Home Assistant, ioBroker, Node-RED or OpenHab (Docker)","permalink":"/docs/Automation_and_Robotics/Home_Automation/2024-01-10--go2rtc/2024-01-09"},{"id":"DevOps/Elasticsearch/2023-02-10--meili-rusty-elastic-docker/index","title":"Introduction to MeiLi Search with Docker","description":"A lightning-fast search engine that fits effortlessly into your apps, websites, and workflow.","permalink":"/docs/DevOps/Elasticsearch/2023-02-10--meili-rusty-elastic-docker/2023-02-10"},{"id":"DevOps/Hashicorp/2020-08-18--consul-mock-datacenter/index","title":"Joining Consul Clients","description":"TST, Hong Kong","permalink":"/docs/DevOps/Hashicorp/2020-08-18--consul-mock-datacenter/2020-08-19"},{"id":"DevOps/Linux/2019-09-26--kali-docker-windows/index","title":"Kali Linux with Docker for Windows","description":"Victoria Harbour, Hongkong","permalink":"/docs/DevOps/Linux/2019-09-26--kali-docker-windows/2019-09-26"},{"id":"DevOps/Kubernetes/2019-01-17--kubernetes-and-microservices/index","title":"Kubernetes and Microservices","description":"Sydney, Australia","permalink":"/docs/DevOps/Kubernetes/2019-01-17--kubernetes-and-microservices/2019-01-17"},{"id":"DevOps/Kubernetes/2019-01-21--kubernetes-bare-metal-ingress/index","title":"Kubernetes Bare Metal Ingress","description":"Victoria Harbour, Hongkong","permalink":"/docs/DevOps/Kubernetes/2019-01-21--kubernetes-bare-metal-ingress/2019-01-21"},{"id":"DevOps/Kubernetes/2022-11-19--k3s-air-gapped-kubernetes/index","title":"Kubernetes Beyond the Edge","description":"Installing K3S on Air-Gapped Bare-Metal Server","permalink":"/docs/DevOps/Kubernetes/2022-11-19--k3s-air-gapped-kubernetes/2022-11-19"},{"id":"DevOps/Kubernetes/2019-01-19--kubernetes-cluster-logging/index","title":"Kubernetes Cluster Monitoring & Logging","description":"Angkor Wat, Cambodia","permalink":"/docs/DevOps/Kubernetes/2019-01-19--kubernetes-cluster-logging/2019-01-19"},{"id":"DevOps/Kubernetes/2019-01-21--kubernetes-nginx-https-service/index","title":"Kubernetes NGINX https Service","description":"Shenzhen, China","permalink":"/docs/DevOps/Kubernetes/2019-01-21--kubernetes-nginx-https-service/2019-01-21"},{"id":"DevOps/Kubernetes/2019-01-22--kubernetes-nginx-ingress/index","title":"Kubernetes NGINX Ingress","description":"Malekula, Vanuatu","permalink":"/docs/DevOps/Kubernetes/2019-01-22--kubernetes-nginx-ingress/2019-01-22"},{"id":"DevOps/Kubernetes/2019-01-27--kubernetes-the-chinese-way/index","title":"Kubernetes the Chinese Way","description":"Shenzhen, China","permalink":"/docs/DevOps/Kubernetes/2019-01-27--kubernetes-the-chinese-way/2019-01-27"},{"id":"DevOps/Kubernetes/2019-02-01--kubernetes-traefik-ingress/index","title":"Kubernetes Traefik Ingress","description":"Tanna, Vanuatu","permalink":"/docs/DevOps/Kubernetes/2019-02-01--kubernetes-traefik-ingress/2019-02-01"},{"id":"DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/index","title":"Log all the searches going through Elasticsearch","description":"Bakhtapur, Nepal","permalink":"/docs/DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/2021-03-25"},{"id":"DevOps/Elasticsearch/2021-03-24-logstash-common-grok-pattern/index","title":"Logstash 7 and Common Log Pattern","description":"Cheung Chau, Hongkon","permalink":"/docs/DevOps/Elasticsearch/2021-03-24-logstash-common-grok-pattern/2021-03-24"},{"id":"DevOps/Elasticsearch/2021-03-21-logstash-digesting-data/index","title":"Logstash 7 Digesting Webserver Logs","description":"Guangzhou, China","permalink":"/docs/DevOps/Elasticsearch/2021-03-21-logstash-digesting-data/2021-03-21"},{"id":"DevOps/Elasticsearch/2021-03-22-logstash-working-with-structured-data/index","title":"Logstash 7 Working with Structured Data","description":"Guangzhou, China","permalink":"/docs/DevOps/Elasticsearch/2021-03-22-logstash-working-with-structured-data/2021-03-22"},{"id":"DevOps/Elasticsearch/2021-03-23-logstash-working-with-unstructured-data/index","title":"Logstash 7 Working with Unstructured Data","description":"Guangzhou, China","permalink":"/docs/DevOps/Elasticsearch/2021-03-23-logstash-working-with-unstructured-data/2021-03-23"},{"id":"DevOps/Provisioning/2021-04-07--loki-prometheus-grafana/index","title":"Loki - Promtail & Grafana for System Logs.","description":"Shenzhen, China","permalink":"/docs/DevOps/Provisioning/2021-04-07--loki-prometheus-grafana/2021-04-07"},{"id":"Development/Magento/2019-09-12--magento-and-elasticsearch/index","title":"Magento 2 and Elasticsearch","description":"Patan, Nepal","permalink":"/docs/Development/Magento/2019-09-12--magento-and-elasticsearch/2019-09-12"},{"id":"Development/Magento/2019-09-13--magento-and-varnish/index","title":"Magento 2 and Varnish 6","description":"Victoria Harbour, Hongkong","permalink":"/docs/Development/Magento/2019-09-13--magento-and-varnish/2019-09-13"},{"id":"Development/Magento/2019-09-11--magento-on-debian-with-nginx/index","title":"Magento 2 Installation with NGINX on Debian Buster","description":"Angkor Wat, Cambodia","permalink":"/docs/Development/Magento/2019-09-11--magento-on-debian-with-nginx/2019-09-11"},{"id":"Development/Magento/2019-09-14--magento-and-themes/index","title":"Magento 2 Manual Theme Installation","description":"Patan, Nepal","permalink":"/docs/Development/Magento/2019-09-14--magento-and-themes/2019-09-14"},{"id":"DevOps/Kubernetes/2019-01-02--managing-containers-in-kubernetes/index","title":"Managing Containers in Kubernetes","description":"Shanghai, China","permalink":"/docs/DevOps/Kubernetes/2019-01-02--managing-containers-in-kubernetes/2019-01-02"},{"id":"DevOps/Provisioning/2021-10-25--matrix-secure-messaging/index","title":"Matrix Secure Messaging","description":"Shenzhen, China","permalink":"/docs/DevOps/Provisioning/2021-10-25--matrix-secure-messaging/2021-10-25"},{"id":"DevOps/Provisioning/2019-06-16--migrating-from-vbulletin-to-discourse-on-centos8/index","title":"Migrating from vBulletin 5 to Discourse on CentOS 8","description":"Taipa, Macau","permalink":"/docs/DevOps/Provisioning/2019-06-16--migrating-from-vbulletin-to-discourse-on-centos8/2019-06-16"},{"id":"Automation_and_Robotics/MQTT/2022-02-01--mosquitto-2-broker/index","title":"Mosquitto v2 MQTT Broker on Debian Bullseye","description":"TST, Hong Kong","permalink":"/docs/Automation_and_Robotics/MQTT/2022-02-01--mosquitto-2-broker/2022-02-01"},{"id":"Automation_and_Robotics/MQTT/2022-03-26--mqtt-clients/index","title":"MQTT Clients","description":"Guangzhou, China","permalink":"/docs/Automation_and_Robotics/MQTT/2022-03-26--mqtt-clients/2022-03-26"},{"id":"DevOps/NGINX/2020-08-30--nginx-docker-multihost/index","title":"NGINX Docker Multihost","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/NGINX/2020-08-30--nginx-docker-multihost/2020-08-30"},{"id":"DevOps/NGINX/2020-08-26--nginx-docker-setup/index","title":"NGINX Docker Setup","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/NGINX/2020-08-26--nginx-docker-setup/2020-08-26"},{"id":"DevOps/NGINX/2020-08-28--nginx-docker-certbot/index","title":"NGINX Docker with Certbot","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/NGINX/2020-08-28--nginx-docker-certbot/2020-08-27"},{"id":"DevOps/NGINX/2020-08-27--nginx-docker-ssl-certs-self-signed/index","title":"NGINX Docker with SSL Encryption (Self-signed)","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/NGINX/2020-08-27--nginx-docker-ssl-certs-self-signed/2020-08-27"},{"id":"DevOps/NGINX/2019-02-05--nginx-ingress-cert-manager/index","title":"NGINX Ingress with Cert-Manager","description":"Port Vila, Vanuatu","permalink":"/docs/DevOps/NGINX/2019-02-05--nginx-ingress-cert-manager/2019-02-05"},{"id":"DevOps/Hashicorp/2022-09-24--nomad-nginx-ingress/index","title":"NGINX Ingress with Nomad","description":"Provision a containerized NGINX ingress using Hashicorp Nomad.","permalink":"/docs/DevOps/Hashicorp/2022-09-24--nomad-nginx-ingress/2022-09-24"},{"id":"DevOps/Salt/2020-06-22--salt-nginx-state/index","title":"NGINX Salt State","description":"TST, Hong Kong","permalink":"/docs/DevOps/Salt/2020-06-22--salt-nginx-state/2020-06-22"},{"id":"DevOps/NGINX/2022-11-17-nginx-udp-tcp-load-balancing/index","title":"NGINX TCP/UDP Load Balancing","description":"Using the NGINX Stream Module to balance TCP/UDP Traffic","permalink":"/docs/DevOps/NGINX/2022-11-17-nginx-udp-tcp-load-balancing/2022-11-17"},{"id":"DevOps/NGINX/2022-12-08-nginx-websocket-proxy/index","title":"NGINX Websocket Proxy","description":"Using the NGINX as a Proxy for Websocket APIs","permalink":"/docs/DevOps/NGINX/2022-12-08-nginx-websocket-proxy/2022-12-08"},{"id":"DevOps/NGINX/2017-12-24--nginx-node-security/index","title":"NGINX, Node.js & Security","description":"Sydney, Australia","permalink":"/docs/DevOps/NGINX/2017-12-24--nginx-node-security/2017-12-24"},{"id":"DevOps/Linux/2022-03-10--nmap-network-scanner/index","title":"nmap Cheat Sheet","description":"Syntax for Nmap Commands","permalink":"/docs/DevOps/Linux/2022-03-10--nmap-network-scanner/2022-03-10"},{"id":"DevOps/Provisioning/2021-01-23-nodejs-file-server/index","title":"Node.js FTP Server","description":"Shenzhen, China","permalink":"/docs/DevOps/Provisioning/2021-01-23-nodejs-file-server/2021-01-23"},{"id":"DevOps/Hashicorp/2021-08-08--hashicorp-nomad-access-control-lists/index","title":"Nomad Access Control Lists","description":"Central, Hongkong","permalink":"/docs/DevOps/Hashicorp/2021-08-08--hashicorp-nomad-access-control-lists/2021-08-08"},{"id":"DevOps/Hashicorp/2021-08-07--hashicorp-nomad-job-configuration/index","title":"Nomad Job Configuration","description":"Central, Hongkong","permalink":"/docs/DevOps/Hashicorp/2021-08-07--hashicorp-nomad-job-configuration/2021-08-07"},{"id":"DevOps/Hashicorp/2020-08-16--nomad-cluster/index","title":"Nomad Server Cluster","description":"TST, Hong Kong","permalink":"/docs/DevOps/Hashicorp/2020-08-16--nomad-cluster/2020-08-16"},{"id":"DevOps/Provisioning/2024-01-17--ntfy-notification-service/index","title":"ntfy Notification Service","description":"ntfy lets you send push notifications to your phone or desktop via scripts from any computer, using simple HTTP PUT or POST requests.","permalink":"/docs/DevOps/Provisioning/2024-01-17--ntfy-notification-service/2024-01-17"},{"id":"DevOps/Linux/2022-09-28--nts-client-setup/index","title":"NTS-Service and Authenticated Time Synchronization","description":"Building a client for a time service which uses IETF RFC 8915 called \u201cNetwork Time Security\u201c (NTS).","permalink":"/docs/DevOps/Linux/2022-09-28--nts-client-setup/2022-09-28"},{"id":"Automation_and_Robotics/Home_Automation/2020-12-03--openhab3-camera-binding/index","title":"OpenHAB 3 INSTAR Camera Binding","description":"Shenzhen, China","permalink":"/docs/Automation_and_Robotics/Home_Automation/2020-12-03--openhab3-camera-binding/2020-12-03"},{"id":"Automation_and_Robotics/Home_Automation/2020-12-02--openhab3-mqtt-binding/index","title":"OpenHAB 3 MQTT Binding","description":"Shenzhen, China","permalink":"/docs/Automation_and_Robotics/Home_Automation/2020-12-02--openhab3-mqtt-binding/2020-12-02"},{"id":"DevOps/Elasticsearch/2022-10-11--opensearch-docker-compose/index","title":"Opensearch & Dashboard","description":"Run a single Opensearch node + Dashboard cluster with Docker-Compose.","permalink":"/docs/DevOps/Elasticsearch/2022-10-11--opensearch-docker-compose/2022-10-11"},{"id":"DevOps/Elasticsearch/2022-10-12--opensearch-rest-api/index","title":"Opensearch Rest API","description":"Run search queries using the Opensearch REST API.","permalink":"/docs/DevOps/Elasticsearch/2022-10-12--opensearch-rest-api/2022-10-12"},{"id":"DevOps/Hashicorp/2023-12-23-opentofu-vs-terraform/index","title":"Opentofu vs Hashicorp Terraform","description":"The open source infrastructure as code alternative to Hashicorp Terraform.","permalink":"/docs/DevOps/Hashicorp/2023-12-23-opentofu-vs-terraform/2023-12-22"},{"id":"DevOps/Provisioning/2022-10-27--os-ticket-rest-api/index","title":"OSticket REST API Calls","description":"Use Docker, Docker-Compose and Nomad to provide an OSTicket Service","permalink":"/docs/DevOps/Provisioning/2022-10-27--os-ticket-rest-api/2022-10-27"},{"id":"DevOps/Provisioning/2021-01-27-owncloud-ocis/index","title":"ownCloud Infinite Scale Stack","description":"Jomson, Nepal","permalink":"/docs/DevOps/Provisioning/2021-01-27-owncloud-ocis/2021-01-27"},{"id":"DevOps/Elasticsearch/2022-02-02--elasticsearch-v8-upgrade/index","title":"Performing an Elasticsearch v8 Upgrade","description":"TST, Hong Kong","permalink":"/docs/DevOps/Elasticsearch/2022-02-02--elasticsearch-v8-upgrade/2022-02-02"},{"id":"DevOps/Linux/2019-09-25--podman-cheat-sheet/index","title":"Podman Cheat Sheet","description":"This cheat sheet was written by Doug Tidwell, with huge thanks to Dan Walsh and Scott McCarty.","permalink":"/docs/DevOps/Linux/2019-09-25--podman-cheat-sheet/2019-09-25"},{"id":"DevOps/Linux/2019-12-03--podman-ftp-server-container/index","title":"Podman FTP Server Container","description":"Victory Harbour, Hong Kong","permalink":"/docs/DevOps/Linux/2019-12-03--podman-ftp-server-container/2019-12-03"},{"id":"Automation_and_Robotics/Home_Automation/2019-12-01--podman-hombridge-to-mqtt/index","title":"Podman Homebridge to MQTT","description":"Sapporo, Japan","permalink":"/docs/Automation_and_Robotics/Home_Automation/2019-12-01--podman-hombridge-to-mqtt/2019-12-01"},{"id":"DevOps/Provisioning/2022-10-16--os-ticket-docker/index","title":"Provision OSticket with Docker","description":"Use Docker, Docker-Compose and Nomad to provide an OSTicket Service","permalink":"/docs/DevOps/Provisioning/2022-10-16--os-ticket-docker/2022-10-16"},{"id":"DevOps/Provisioning/2023-03-09--os-ticket-docker-2023/index","title":"Provision OSticket with Docker (2023)","description":"Use Docker, Docker-Compose and Nomad to provide an OSTicket Service","permalink":"/docs/DevOps/Provisioning/2023-03-09--os-ticket-docker-2023/2023-03-09"},{"id":"DevOps/Provisioning/2017-09-05--developing-software-in-china/index","title":"Proxima Centauri","description":"Phnom Penh, Cambodia","permalink":"/docs/DevOps/Provisioning/2017-09-05--developing-software-in-china/2017-09-05"},{"id":"DevOps/Provisioning/2017-09-06--developing-software-in-china-2/index","title":"Proxima Centauri II","description":"Phnom Penh, Cambodia","permalink":"/docs/DevOps/Provisioning/2017-09-06--developing-software-in-china-2/2017-09-06"},{"id":"DevOps/Linux/2018-10-27--red-hat-certified-engineer-rhce/index","title":"Red Hat Certified Engineer (RHCE) Exam","description":"Angkor Wat, Cambodia","permalink":"/docs/DevOps/Linux/2018-10-27--red-hat-certified-engineer-rhce/2018-10-27"},{"id":"DevOps/Provisioning/2018-12-27--red-hat-containerized-application-development-rhcs/index","title":"Red Hat Certified Specialist in Containerized Application Development","description":"Shanghai, China","permalink":"/docs/DevOps/Provisioning/2018-12-27--red-hat-containerized-application-development-rhcs/2018-12-27"},{"id":"DevOps/Kubernetes/2019-03-02--installing-openshift-3-on-centos-7/index","title":"Red Hat OpenShift 3 Container Platform","description":"Harbin, China","permalink":"/docs/DevOps/Kubernetes/2019-03-02--installing-openshift-3-on-centos-7/2019-03-02"},{"id":"DevOps/Linux/2022-11-09--docker-borg-backupserver/index","title":"Resistance is futile - Borg with Docker","description":"Backup server using Docker","permalink":"/docs/DevOps/Linux/2022-11-09--docker-borg-backupserver/2022-11-09"},{"id":"DevOps/Provisioning/2022-01-25--installing-bind9-docker/index","title":"Running a DNS Server with Docker","description":"Shenzhen, China","permalink":"/docs/DevOps/Provisioning/2022-01-25--installing-bind9-docker/2022-01-25"},{"id":"DevOps/GitOps/2020-02-02--docker-images-in-gitlab/index","title":"Running Gitlab as Docker Registry","description":"Siem Reap, Cambodia","permalink":"/docs/DevOps/GitOps/2020-02-02--docker-images-in-gitlab/2020-02-02"},{"id":"DevOps/GitOps/2020-02-01--gitlab-in-podman-on-centos8/index","title":"Running Gitlab in Podman on CentOS8","description":"Siem Reap, Cambodia","permalink":"/docs/DevOps/GitOps/2020-02-01--gitlab-in-podman-on-centos8/2020-02-01"},{"id":"DevOps/Salt/2020-06-21--salt-events-and-thirdparty-apps/index","title":"Salt Beacons Module","description":"Mon Kok, Hong Kong","permalink":"/docs/DevOps/Salt/2020-06-21--salt-events-and-thirdparty-apps/2020-06-21"},{"id":"DevOps/Salt/2020-06-18--salt-execution-order/index","title":"Salt Execution Order","description":"Guangzhou, China","permalink":"/docs/DevOps/Salt/2020-06-18--salt-execution-order/2020-06-18"},{"id":"DevOps/Salt/2020-06-19--salt-mine-orchestrate/index","title":"Salt Mine & Orchestrate","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Salt/2020-06-19--salt-mine-orchestrate/2020-06-19"},{"id":"DevOps/Salt/2020-06-25--salt-orchestration-for-docker-containers/index","title":"Salt Orchestration for Docker Containers","description":"TST, Hong Kong","permalink":"/docs/DevOps/Salt/2020-06-25--salt-orchestration-for-docker-containers/2020-06-25"},{"id":"DevOps/Salt/2020-06-17--salt-pillars-formulas/index","title":"Salt Pillars & Formulas","description":"Guangzhou, China","permalink":"/docs/DevOps/Salt/2020-06-17--salt-pillars-formulas/2020-06-17"},{"id":"DevOps/Salt/2020-06-20--salt-reactor-events/index","title":"Salt Reactor and System Events","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Salt/2020-06-20--salt-reactor-events/2020-06-20"},{"id":"DevOps/Salt/2020-06-16--salt-state/index","title":"Salt State","description":"Guangzhou, China","permalink":"/docs/DevOps/Salt/2020-06-16--salt-state/2020-06-16"},{"id":"DevOps/Salt/2020-06-23--saltestack-refresh-course-1-setup/index","title":"Saltstack Refresh Course 1: Setup","description":"Shenzhen, China","permalink":"/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-1-setup/2020-06-23"},{"id":"DevOps/Salt/2020-06-23--saltestack-refresh-course-3-highstate/index","title":"Saltstack Refresh Course 2: Highstate","description":"Shenzhen, China","permalink":"/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-3-highstate/2020-06-23"},{"id":"DevOps/Salt/2020-06-23--saltestack-refresh-course-4-salt-mine/index","title":"Saltstack Refresh Course 2: Salt Mines","description":"Cheung Chau, Hong Kong","permalink":"/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-4-salt-mine/2020-06-23"},{"id":"DevOps/Salt/2020-06-23--saltestack-refresh-course-2-salt-state/index","title":"Saltstack Refresh Course 2: Salt State","description":"Shenzhen, China","permalink":"/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-2-salt-state/2020-06-23"},{"id":"DevOps/Salt/2020-06-15--salty-devops/index","title":"Salty DevOps","description":"Shenzhen, China","permalink":"/docs/DevOps/Salt/2020-06-15--salty-devops/2020-06-15"},{"id":"DevOps/Elasticsearch/2017-10-03--search-engine-setup-and-configuration/index","title":"Search Engine Setup and Configuration","description":"Search Engine Setup and Configuration","permalink":"/docs/DevOps/Elasticsearch/2017-10-03--search-engine-setup-and-configuration/2017-10-03"},{"id":"DevOps/Hashicorp/2022-09-22--nomad-nts-timeserver/index","title":"Secure Timeserver - Deploying a NTS Server using Hashicorp Nomad","description":"In the previous step I deployed Chrony using Docker Compose. This time I try to migrate the deployment to Nomad & Consul.","permalink":"/docs/DevOps/Hashicorp/2022-09-22--nomad-nts-timeserver/2022-09-22"},{"id":"DevOps/Linux/2022-09-15--ntp-over-nts-timeserver/index","title":"Secure Timeserver - NTP with NTS with Docker","description":"NTS is a method for using TLS/SSL to authenticate NTP traffic on the net.","permalink":"/docs/DevOps/Linux/2022-09-15--ntp-over-nts-timeserver/2022-09-21"},{"id":"DevOps/Elasticsearch/2018-01-01--securing-elasticsearch-readonlyrest/index","title":"Securing Elasticsearch with ReadOnlyREST","description":"Jomsom, Nepal","permalink":"/docs/DevOps/Elasticsearch/2018-01-01--securing-elasticsearch-readonlyrest/2018-01-01"},{"id":"DevOps/Elasticsearch/2017-12-31--securing-elasticsearch-xpack/index","title":"Securing Elasticsearch with X-Pack","description":"Battambang, Cambodia","permalink":"/docs/DevOps/Elasticsearch/2017-12-31--securing-elasticsearch-xpack/2017-12-31"},{"id":"DevOps/NGINX/2020-07-29--securing-apache-and-nginx/index","title":"Securing Webservers - Apache and NGINX","description":"Central, Hong Kong","permalink":"/docs/DevOps/NGINX/2020-07-29--securing-apache-and-nginx/2020-07-29"},{"id":"DevOps/Security/2020-07-28--fail2ban-ubuntu-server/index","title":"Securing Webservers - Fail2Ban Ubuntu 20.10","description":"TST, Hong Kong","permalink":"/docs/DevOps/Security/2020-07-28--fail2ban-ubuntu-server/2020-07-28"},{"id":"DevOps/Security/2020-07-26--firewalld-configuration/index","title":"Securing Webservers - FirewallD and fail2ban","description":"TST, Hong Kong","permalink":"/docs/DevOps/Security/2020-07-26--firewalld-configuration/2020-07-26"},{"id":"DevOps/Security/2020-07-27--firewalld-deployment-centos7/index","title":"Securing Webservers - FirewallD Deployment on CentOS7","description":"TST, Hong Kong","permalink":"/docs/DevOps/Security/2020-07-27--firewalld-deployment-centos7/2020-07-27"},{"id":"DevOps/Security/2020-07-27--firewalld-deployment-debian/index","title":"Securing Webservers - FirewallD Deployment on Debian 9","description":"TST, Hong Kong","permalink":"/docs/DevOps/Security/2020-07-27--firewalld-deployment-debian/2020-07-27"},{"id":"DevOps/Security/2020-07-27--firewalld-deployment-ubuntu/index","title":"Securing Webservers - FirewallD Deployment on Ubuntu 20.04","description":"TST, Hong Kong","permalink":"/docs/DevOps/Security/2020-07-27--firewalld-deployment-ubuntu/2020-07-27"},{"id":"DevOps/Security/2020-07-28--uncomplicated-firewall-ufw/index","title":"Securing Webservers - Uncomplicated Firewall","description":"TST, Hong Kong","permalink":"/docs/DevOps/Security/2020-07-28--uncomplicated-firewall-ufw/2020-07-28"},{"id":"DevOps/Provisioning/2019-01-08--creating-a-grafana-dashboard/index","title":"Sensors Data and Grafana","description":"Hongkong","permalink":"/docs/DevOps/Provisioning/2019-01-08--creating-a-grafana-dashboard/2019-01-08"},{"id":"DevOps/Provisioning/2020-08-29--static-server-with-hapi-and-docker/index","title":"Serving Static Files with Hapi and Docker","description":"Central, Hong Kong","permalink":"/docs/DevOps/Provisioning/2020-08-29--static-server-with-hapi-and-docker/2020-08-29"},{"id":"DevOps/Ansible/2020-11-18--ansible-on-debian-buster/index","title":"Setting up a Ansible on Debian Buster","description":"Shenzhen, China","permalink":"/docs/DevOps/Ansible/2020-11-18--ansible-on-debian-buster/2020-11-18"},{"id":"DevOps/Kubernetes/2019-03-05--first-openshift3-cluster/index","title":"Setting up an OKD Cluster","description":"Mustang, Nepal","permalink":"/docs/DevOps/Kubernetes/2019-03-05--first-openshift3-cluster/2019-03-05"},{"id":"DevOps/Ansible/2021-04-29-ansible-tower-setup/index","title":"Setting up Ansible Tower (AWX)","description":"Guangzhou, China","permalink":"/docs/DevOps/Ansible/2021-04-29-ansible-tower-setup/2021-04-29"},{"id":"DevOps/NGINX/2021-07-29--certbot-nginx-autorenewal/index","title":"Setting up Certbot Auto-renewal for NGINX (Maintenance Mode)","description":"Shenzhen, China","permalink":"/docs/DevOps/NGINX/2021-07-29--certbot-nginx-autorenewal/2021-07-29"},{"id":"DevOps/Linux/2019-06-07--installing-docker-on-centos8/index","title":"Setting up Docker on CentOS 8","description":"Harbin, China","permalink":"/docs/DevOps/Linux/2019-06-07--installing-docker-on-centos8/2019-06-07"},{"id":"DevOps/GitOps/2020-08-02--gitlab-setup/index","title":"Setting up Gitlab","description":"Mong Kok, Hong Kong","permalink":"/docs/DevOps/GitOps/2020-08-02--gitlab-setup/2020-08-02"},{"id":"DevOps/Linux/2021-04-13-installing-kvm-on-red-hat-enterprise-linux/index","title":"Setting up KVM on RedHat Enterprise Linux","description":"Shenzhen, China","permalink":"/docs/DevOps/Linux/2021-04-13-installing-kvm-on-red-hat-enterprise-linux/2021-04-13"},{"id":"DevOps/Provisioning/2021-10-12--traefik-third-attempt/index","title":"Setting up Wordpress with Traefik v2","description":"Central, Hong Kong","permalink":"/docs/DevOps/Provisioning/2021-10-12--traefik-third-attempt/2021-10-12"},{"id":"DevOps/Ansible/2021-04-30-ansible-tower-slack-notifications/index","title":"Slack Notifications for Ansible Tower (AWX)","description":"Guangzhou, China","permalink":"/docs/DevOps/Ansible/2021-04-30-ansible-tower-slack-notifications/2021-04-30"},{"id":"DevOps/Zabbix/2020-09-05--slack-notifications-in-devops/index","title":"Slack Notifications in DevOps","description":"TST, Hong Kong","permalink":"/docs/DevOps/Zabbix/2020-09-05--slack-notifications-in-devops/2020-09-05"},{"id":"Automation_and_Robotics/Home_Automation/2020-09-16--testing-new-rest-api-with-nodered/index","title":"Testing a new REST API in Node-RED","description":"Koh Rong, Cambodia","permalink":"/docs/Automation_and_Robotics/Home_Automation/2020-09-16--testing-new-rest-api-with-nodered/2020-09-16"},{"id":"DevOps/Zabbix/2022-01-13--zabbix-api-testing/index","title":"Testing the Zabbix API with Postman","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-13--zabbix-api-testing/2022-01-13"},{"id":"DevOps/Linux/2021-10-09--the-friendly-editor/index","title":"The friendly Editor","description":"Harbin , China","permalink":"/docs/DevOps/Linux/2021-10-09--the-friendly-editor/2021-10-09"},{"id":"DevOps/Tomcat/2020-12-26-tomcat10-cluster-with-individual-nodes/index","title":"Tomcat 10 Cluster with individual Node Server","description":"Siem Reap, Cambodia","permalink":"/docs/DevOps/Tomcat/2020-12-26-tomcat10-cluster-with-individual-nodes/2020-12-26"},{"id":"DevOps/Tomcat/2020-12-25-tomcat10-docker-cluster/index","title":"Tomcat 10 Docker Cluster","description":"Siem Reap, Cambodia","permalink":"/docs/DevOps/Tomcat/2020-12-25-tomcat10-docker-cluster/2020-12-25"},{"id":"DevOps/Tomcat/2020-12-24-tomcat9-cluster-and-load-balancing/index","title":"Tomcat 9 Cluster & Loadbalancing","description":"Siem Reap, Cambodia","permalink":"/docs/DevOps/Tomcat/2020-12-24-tomcat9-cluster-and-load-balancing/2020-12-24"},{"id":"DevOps/Tomcat/2020-12-23-tomcat9-configuration/index","title":"Tomcat 9 Configuration","description":"Siem Reap, Cambodia","permalink":"/docs/DevOps/Tomcat/2020-12-23-tomcat9-configuration/2020-12-23"},{"id":"DevOps/Provisioning/2021-10-12--traefik-configuration/index","title":"Traefik v2 Webproxy Configuration - 1st Attempt","description":"Central, Hong Kong","permalink":"/docs/DevOps/Provisioning/2021-10-12--traefik-configuration/2021-10-12"},{"id":"DevOps/Provisioning/2021-10-12--traefik-second-attempt/index","title":"Traefik v2 Webproxy Configuration - 2nd Attempt","description":"Central, Hong Kong","permalink":"/docs/DevOps/Provisioning/2021-10-12--traefik-second-attempt/2021-10-12"},{"id":"Automation_and_Robotics/Home_Automation/2020-12-01--openhab3-in-docker/index","title":"Trying out OpenHAB 3 in Docker","description":"Shenzhen, China","permalink":"/docs/Automation_and_Robotics/Home_Automation/2020-12-01--openhab3-in-docker/2020-12-01"},{"id":"DevOps/Linux/2019-01-11--ubuntu-network-configuration/index","title":"Ubuntu Network Configuration","description":"Battambang, Cambodia","permalink":"/docs/DevOps/Linux/2019-01-11--ubuntu-network-configuration/2019-01-11"},{"id":"DevOps/Linux/2019-01-11--ubuntu-server-app-armour/index","title":"Ubuntu Server Cannot Stop Docker Container","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Linux/2019-01-11--ubuntu-server-app-armour/2019-01-11"},{"id":"DevOps/Linux/2019-01-11--root-access-ubuntu-server/index","title":"Ubuntu Server Root SSH Remote Access","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Linux/2019-01-11--root-access-ubuntu-server/2019-01-11"},{"id":"Development/Magento/2019-09-15--updating-from-php70-to-php72/index","title":"Updating a Magento Project from PHP v7.0 to v7.3","description":"Katmandu, Nepal","permalink":"/docs/Development/Magento/2019-09-15--updating-from-php70-to-php72/2019-09-15"},{"id":"DevOps/Provisioning/2024-01-18--uptime-kuma-monitoring/index","title":"Uptime Kuma","description":"Uptime Kuma is an easy-to-use self-hosted monitoring tool.","permalink":"/docs/DevOps/Provisioning/2024-01-18--uptime-kuma-monitoring/2024-01-18"},{"id":"DevOps/Provisioning/2019-06-21--using-facebook-auth-in-discourse/index","title":"User Login with Facebook for Discourse","description":"Bakhtapur, Nepal","permalink":"/docs/DevOps/Provisioning/2019-06-21--using-facebook-auth-in-discourse/2019-06-21"},{"id":"DevOps/Provisioning/2019-06-20--using-github-auth-in-discourse/index","title":"User Login with Github for Discourse","description":"Mustang, Nepal","permalink":"/docs/DevOps/Provisioning/2019-06-20--using-github-auth-in-discourse/2019-06-19"},{"id":"DevOps/Provisioning/2019-06-18--using-oauth2-in-discourse/index","title":"User Login with Google OAuth2 for Discourse","description":"Katmandu, Nepal","permalink":"/docs/DevOps/Provisioning/2019-06-18--using-oauth2-in-discourse/2019-06-18"},{"id":"DevOps/Provisioning/2019-06-19--using-twitter-auth-in-discourse/index","title":"User Login with Twitter for Discourse","description":"Taipa, Macau","permalink":"/docs/DevOps/Provisioning/2019-06-19--using-twitter-auth-in-discourse/2019-06-20"},{"id":"DevOps/NGINX/2017-10-01--using-nginx-as-proxy-for-your-nodejs-apps/index","title":"Using NGINX as proxy for your nodejs apps","description":"Hongkong","permalink":"/docs/DevOps/NGINX/2017-10-01--using-nginx-as-proxy-for-your-nodejs-apps/2017-10-01"},{"id":"DevOps/Linux/2022-03-08--arch-kde-fritz-vpn/index","title":"Using the AVM Fritzbox VPN on Manjaro (KDE)","description":"Shenzhen, China","permalink":"/docs/DevOps/Linux/2022-03-08--arch-kde-fritz-vpn/2022-03-08"},{"id":"DevOps/Provisioning/2019-09-16--installing-vanilla-forum/index","title":"Vanilla Forums Installation on Debian","description":"Katmandu, Nepal","permalink":"/docs/DevOps/Provisioning/2019-09-16--installing-vanilla-forum/2019-09-16"},{"id":"DevOps/Linux/2024-01-08--vsftp-ubuntu/index","title":"vsftp on Ubuntu","description":"Setting up an FTP server on Ubuntu 22.04.","permalink":"/docs/DevOps/Linux/2024-01-08--vsftp-ubuntu/2024-01-08"},{"id":"Development/Javascript/2020-01-12--node-express-redirect-server/index","title":"Web traffic redirection with Node and Express on CentOS8","description":"Shenzhen, China","permalink":"/docs/Development/Javascript/2020-01-12--node-express-redirect-server/2020-01-12"},{"id":"DevOps/GitOps/2020-08-04--working-with-gitlab/index","title":"Working with Gitlab","description":"Guangzhou, China","permalink":"/docs/DevOps/GitOps/2020-08-04--working-with-gitlab/2020-08-04"},{"id":"DevOps/Linux/2019-06-17--working-with-tmux/index","title":"Working with TMUX","description":"Wan Chai, Hong Kong","permalink":"/docs/DevOps/Linux/2019-06-17--working-with-tmux/2019-06-17"},{"id":"DevOps/Zabbix/2020-07-16--zabbix-agent/index","title":"Zabbix Agent","description":"Shenzhen, China","permalink":"/docs/DevOps/Zabbix/2020-07-16--zabbix-agent/2020-07-16"},{"id":"DevOps/Zabbix/2021-01-14--zabbix-apache2-monitor/index","title":"Zabbix Apache 2 Monitor","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2021-01-14--zabbix-apache2-monitor/2021-10-14"},{"id":"DevOps/Zabbix/2020-07-19--zabbix-company-logo/index","title":"Zabbix Company Logo","description":"Mong Kok, Hong Kong","permalink":"/docs/DevOps/Zabbix/2020-07-19--zabbix-company-logo/2020-07-19"},{"id":"DevOps/Zabbix/2020-07-15--zabbix-docker-installation/index","title":"Zabbix Docker Installation","description":"Victoria Harbour, Hong Kong","permalink":"/docs/DevOps/Zabbix/2020-07-15--zabbix-docker-installation/2020-07-15"},{"id":"DevOps/Zabbix/2021-10-13--zabbix-compose-setup/index","title":"Zabbix Docker-Compose Setup","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2021-10-13--zabbix-compose-setup/2021-10-13"},{"id":"DevOps/Zabbix/2020-07-18--zabbix-email-notification/index","title":"Zabbix Email Notifications","description":"Mong Kok, Hong Kong","permalink":"/docs/DevOps/Zabbix/2020-07-18--zabbix-email-notification/2020-07-18"},{"id":"DevOps/Zabbix/2022-01-14--zabbix-http-cert-monitor/index","title":"Zabbix HTTPS Certificate Monitor","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-14--zabbix-http-cert-monitor/2022-01-14"},{"id":"DevOps/Zabbix/2020-07-17--zabbix-website-monitor/index","title":"Zabbix Monitoring a Website","description":"Mong Kok, Hong Kong","permalink":"/docs/DevOps/Zabbix/2020-07-17--zabbix-website-monitor/2020-07-17"},{"id":"DevOps/Zabbix/2020-07-20--zabbix-behind-nginx/index","title":"Zabbix Multi-Tenant NGINX Docker Ingress","description":"Mong Kok, Hong Kong","permalink":"/docs/DevOps/Zabbix/2020-07-20--zabbix-behind-nginx/2020-07-20"},{"id":"DevOps/Zabbix/2022-01-14--zabbix-apache2-monitor/index","title":"Zabbix v6 Apache 2 Monitor","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-14--zabbix-apache2-monitor/2022-01-14"},{"id":"DevOps/Zabbix/2022-01-16--zabbix-v6-baseline-monitoring/index","title":"Zabbix v6 Creating triggers for Baseline monitoring and Anomaly detection","description":"TST, Hong Kong","permalink":"/docs/DevOps/Zabbix/2022-01-16--zabbix-v6-baseline-monitoring/2022-01-16"},{"id":"DevOps/Zabbix/2022-01-14--zabbix-docker-monitor/index","title":"Zabbix v6 Docker Monitor","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-14--zabbix-docker-monitor/2022-01-14"},{"id":"DevOps/Zabbix/2022-01-13--zabbix-server-v6/index","title":"Zabbix v6 Docker-Compose Setup","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-13--zabbix-server-v6/2022-01-13"},{"id":"DevOps/Zabbix/2022-01-15--zabbix-v6-email-notifications/index","title":"Zabbix v6 Email Notifications","description":"TST, Hong Kong","permalink":"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-email-notifications/2022-01-15"},{"id":"DevOps/Zabbix/2022-01-14--zabbix-nginx-monitor/index","title":"Zabbix v6 NGINX Monitor","description":"Guangzhou, China","permalink":"/docs/DevOps/Zabbix/2022-01-14--zabbix-nginx-monitor/2022-01-14"},{"id":"DevOps/Zabbix/2022-01-15--zabbix-v6-slack-notifications/index","title":"Zabbix v6 Slack Notifications","description":"TST, Hong Kong","permalink":"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-slack-notifications/2022-01-15"},{"id":"DevOps/Zabbix/2024-03-07--zabbix-v6-hdd-cpu-temp-check/index","title":"Zabbix v6 SMART HDD and CPU Temperature Check","description":"TST, Hong Kong","permalink":"/docs/DevOps/Zabbix/2024-03-07--zabbix-v6-hdd-cpu-temp-check/2024-03-08"},{"id":"DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/index","title":"Zabbix v6 SMART HDD Check","description":"TST, Hong Kong","permalink":"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/2022-01-15"},{"id":"Automation_and_Robotics/Home_Automation/2019-01-05--zigbee2mqtt-xiaomi-fhem/index","title":"Zigbee Sensors in FHEM","description":"Hongkong","permalink":"/docs/Automation_and_Robotics/Home_Automation/2019-01-05--zigbee2mqtt-xiaomi-fhem/2019-01-05"}],"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/6d81b8c1.9dcc3c39.js b/assets/js/6d81b8c1.9dcc3c39.js new file mode 100644 index 0000000000..39af2dd984 --- /dev/null +++ b/assets/js/6d81b8c1.9dcc3c39.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmikes_dev_notebook=self.webpackChunkmikes_dev_notebook||[]).push([[52784],{575744:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>o,toc:()=>c});var t=s(785893),i=s(603905);const r={sidebar_position:7090,slug:"2022-01-15",title:"Zabbix v6 SMART HDD Check",authors:"mpolinowski",tags:["LINUX","Zabbix"]},a=void 0,o={id:"DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/index",title:"Zabbix v6 SMART HDD Check",description:"TST, Hong Kong",source:"@site/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/index.md",sourceDirName:"DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check",slug:"/DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/2022-01-15",permalink:"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/2022-01-15",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/index.md",tags:[{label:"LINUX",permalink:"/docs/tags/linux"},{label:"Zabbix",permalink:"/docs/tags/zabbix"}],version:"current",sidebarPosition:7090,frontMatter:{sidebar_position:7090,slug:"2022-01-15",title:"Zabbix v6 SMART HDD Check",authors:"mpolinowski",tags:["LINUX","Zabbix"]},sidebar:"tutorialSidebar",previous:{title:"Zabbix v6 Creating triggers for Baseline monitoring and Anomaly detection",permalink:"/docs/DevOps/Zabbix/2022-01-16--zabbix-v6-baseline-monitoring/2022-01-16"},next:{title:"Zabbix v6 Slack Notifications",permalink:"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-slack-notifications/2022-01-15"}},l={},c=[{value:"Install Smartmontools",id:"install-smartmontools",level:2},{value:"Using Smartctl",id:"using-smartctl",level:3},{value:"Add SMART Zabbix Plugin",id:"add-smart-zabbix-plugin",level:2},{value:"Bugfixing",id:"bugfixing",level:3}];function d(e){const n={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.ah)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"TST, Hong Kong",src:s(884816).Z+"",width:"1500",height:"622"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"#install-smartmontools",children:"Install Smartmontools"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#using-smartctl",children:"Using Smartctl"})}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"#add-smart-zabbix-plugin",children:"Add SMART Zabbix Plugin"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"#bugfixing",children:"Bugfixing"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"S.M.A.R.T. (Self-Monitoring, Analysis and Reporting Technology; often written as SMART) is a monitoring system included in computer hard disk drives (HDDs), solid-state drives (SSDs), and eMMC drives"}),"\n",(0,t.jsx)(n.h2,{id:"install-smartmontools",children:"Install Smartmontools"}),"\n",(0,t.jsx)(n.p,{children:"The smartmontools package comes with two utilities, smartctl which you can use to check your hard drives on the command line, and smartd, a daemon that checks your hard disks at a specified interval and logs warnings/errors to the syslog and can also send warnings and errors to a specified email address (usually the admin of the system)."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"apt install smartmontools\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"smartctl -v\r\n\r\nsmartctl 7.2 2020-12-30 r5155 [x86_64-linux-5.10.0-11-amd64] (local build)\r\nCopyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org\n"})}),"\n",(0,t.jsx)(n.h3,{id:"using-smartctl",children:"Using Smartctl"}),"\n",(0,t.jsx)(n.p,{children:"Find partition:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"df -h\r\n\r\nFilesystem Size Used Avail Use% Mounted on\r\nudev 3.8G 0 3.8G 0% /dev\r\ntmpfs 777M 996K 776M 1% /run\r\n/dev/sda1 75G 43G 30G 59% /\r\ntmpfs 3.8G 0 3.8G 0% /dev/shm\r\ntmpfs 5.0M 0 5.0M 0% /run/lock\r\n/dev/sda15 121M 130K 120M 1% /boot/efi\n"})}),"\n",(0,t.jsxs)(n.p,{children:["In the case of my test server below we have a virtual machine - that, obviously, does not have access to the underlying HDD hardware ",(0,t.jsx)(n.code,{children:"/dev/sda1"}),":"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"smartctl -a /dev/sda1\r\n\r\n=== START OF INFORMATION SECTION ===\r\nVendor: QEMU\r\nProduct: QEMU HARDDISK\r\nRevision: 2.5+\r\nCompliance: SPC-3\r\nUser Capacity: 81,923,145,728 bytes [81.9 GB]\r\nLogical block size: 512 bytes\r\nLU is thin provisioned, LBPRZ=0\r\nDevice type: disk\r\nLocal Time is: Sun Jan 30 05:14:03 2022 CET\r\nSMART support is: Unavailable - device lacks SMART capability.\r\n\r\n=== START OF READ SMART DATA SECTION ===\r\nCurrent Drive Temperature: 0 C\r\nDrive Trip Temperature: 0 C\n"})}),"\n",(0,t.jsxs)(n.p,{children:["When you see that the ",(0,t.jsx)(n.code,{children:"SMART support is:"})," ",(0,t.jsx)(n.strong,{children:"disabled"})," run the following command to enable it:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"smartctl -s on -a /dev/sda1\n"})}),"\n",(0,t.jsx)(n.h2,{id:"add-smart-zabbix-plugin",children:"Add SMART Zabbix Plugin"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.a,{href:"https://www.zabbix.com/integrations/smart",children:"template for monitoring S.M.A.R.T. attributes"})," of physical disk that works without any external scripts. It collects metrics by Zabbix agent 2 version 5.0 and later with Smartmontools version 7.1 and later. Disk discovery LLD rule finds all HDD, SSD, NVMe disks with S.M.A.R.T. enabled. Attribute discovery LLD rule finds all Vendor Specific Attributes for each disk."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"SMART Zabbix Plugin",src:s(346158).Z+"",width:"834",height:"372"})}),"\n",(0,t.jsx)(n.h3,{id:"bugfixing",children:"Bugfixing"}),"\n",(0,t.jsxs)(n.p,{children:["Searching for ",(0,t.jsx)(n.code,{children:"smart"})," in ",(0,t.jsx)(n.strong,{children:"Latest Data"})," only showed the running SMART Tools service:"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"SMART Zabbix Plugin",src:s(517010).Z+"",width:"893",height:"440"})}),"\n",(0,t.jsxs)(n.p,{children:["Checking the agent status showed me that the Agent was unable to execute the SMART Tools command because it lacked ",(0,t.jsx)(n.code,{children:"sudo"})," rights:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"service zabbix-agent2 status\r\n...\r\nMar 07 10:59:16 my-server sudo[260607]: pam_unix(sudo:auth): conversation failed\r\nMar 07 10:59:16 my-server sudo[260607]: pam_unix(sudo:auth): auth could not identify password for [zabbix]\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Add the ",(0,t.jsx)(n.code,{children:"zabbix"})," agent to ",(0,t.jsx)(n.strong,{children:"Sudoers"}),":"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"/etc/sudoers"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"# Zabbix user SMART control\r\nzabbix ALL=(ALL) NOPASSWD:/usr/sbin/smartctl\n"})}),"\n",(0,t.jsx)(n.p,{children:"But I still did not see anything... until the next morning:"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"SMART Zabbix Plugin",src:s(7069).Z+"",width:"1034",height:"910"})}),"\n",(0,t.jsx)(n.p,{children:"It seems that the discovery service only returns values sporadically - even though it is set to run once every hour:"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"SMART Zabbix Plugin",src:s(187430).Z+"",width:"936",height:"283"})}),"\n",(0,t.jsx)(n.p,{children:"I am not yet sure why this is the case. But I lowered the interval to 20min for now - let's see..."})]})}function h(e={}){const{wrapper:n}={...(0,i.ah)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},603905:(e,n,s)=>{s.d(n,{ah:()=>c});var t=s(667294);function i(e,n,s){return n in e?Object.defineProperty(e,n,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[n]=s,e}function r(e,n){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),s.push.apply(s,t)}return s}function a(e){for(var n=1;n=0||(i[s]=e[s]);return i}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,s)&&(i[s]=e[s])}return i}var l=t.createContext({}),c=function(e){var n=t.useContext(l),s=n;return e&&(s="function"==typeof e?e(n):a(a({},n),e)),s},d={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},h=t.forwardRef((function(e,n){var s=e.components,i=e.mdxType,r=e.originalType,l=e.parentName,h=o(e,["components","mdxType","originalType","parentName"]),b=c(s),u=i,m=b["".concat(l,".").concat(u)]||b[u]||d[u]||r;return s?t.createElement(m,a(a({ref:n},h),{},{components:s})):t.createElement(m,a({ref:n},h))}));h.displayName="MDXCreateElement"},346158:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/Zabbix_SMART_Monitor_01-b4fcc9c4374182630743a1b3f14a8f6a.jpg"},517010:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/Zabbix_SMART_Monitor_02-493d45df941c9b99e7880c40769a2587.jpg"},7069:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/Zabbix_SMART_Monitor_03-ba737b8df4ae689fbee4ae86febfb06a.png"},187430:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/Zabbix_SMART_Monitor_04-5284bcfc67558603d17b3c628891854c.png"},884816:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/photo-kt443t6d_64hdh43hfh6dgjdfhg4_d-d8b333d1f9ddf34ac7392aef86b14c83.jpg"}}]); \ No newline at end of file diff --git a/assets/js/6d81b8c1.f7faff2c.js b/assets/js/6d81b8c1.f7faff2c.js deleted file mode 100644 index e7548b2325..0000000000 --- a/assets/js/6d81b8c1.f7faff2c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmikes_dev_notebook=self.webpackChunkmikes_dev_notebook||[]).push([[52784],{575744:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>b,frontMatter:()=>s,metadata:()=>o,toc:()=>c});var r=t(785893),i=t(603905);const s={sidebar_position:7090,slug:"2022-01-15",title:"Zabbix v6 SMART HDD Check",authors:"mpolinowski",tags:["LINUX","Zabbix"]},a=void 0,o={id:"DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/index",title:"Zabbix v6 SMART HDD Check",description:"TST, Hong Kong",source:"@site/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/index.md",sourceDirName:"DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check",slug:"/DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/2022-01-15",permalink:"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/2022-01-15",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/index.md",tags:[{label:"LINUX",permalink:"/docs/tags/linux"},{label:"Zabbix",permalink:"/docs/tags/zabbix"}],version:"current",sidebarPosition:7090,frontMatter:{sidebar_position:7090,slug:"2022-01-15",title:"Zabbix v6 SMART HDD Check",authors:"mpolinowski",tags:["LINUX","Zabbix"]},sidebar:"tutorialSidebar",previous:{title:"Zabbix v6 Creating triggers for Baseline monitoring and Anomaly detection",permalink:"/docs/DevOps/Zabbix/2022-01-16--zabbix-v6-baseline-monitoring/2022-01-16"},next:{title:"Zabbix v6 Slack Notifications",permalink:"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-slack-notifications/2022-01-15"}},l={},c=[{value:"Install Smartmontools",id:"install-smartmontools",level:2},{value:"Using Smartctl",id:"using-smartctl",level:3},{value:"Add SMART Zabbix Plugin",id:"add-smart-zabbix-plugin",level:2}];function d(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.ah)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"TST, Hong Kong",src:t(884816).Z+"",width:"1500",height:"622"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"#install-smartmontools",children:"Install Smartmontools"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"#using-smartctl",children:"Using Smartctl"})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"#add-smart-zabbix-plugin",children:"Add SMART Zabbix Plugin"})}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"S.M.A.R.T. (Self-Monitoring, Analysis and Reporting Technology; often written as SMART) is a monitoring system included in computer hard disk drives (HDDs), solid-state drives (SSDs), and eMMC drives"}),"\n",(0,r.jsx)(n.h2,{id:"install-smartmontools",children:"Install Smartmontools"}),"\n",(0,r.jsx)(n.p,{children:"The smartmontools package comes with two utilities, smartctl which you can use to check your hard drives on the command line, and smartd, a daemon that checks your hard disks at a specified interval and logs warnings/errors to the syslog and can also send warnings and errors to a specified email address (usually the admin of the system)."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"apt install smartmontools\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"smartctl -v\r\n\r\nsmartctl 7.2 2020-12-30 r5155 [x86_64-linux-5.10.0-11-amd64] (local build)\r\nCopyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org\n"})}),"\n",(0,r.jsx)(n.h3,{id:"using-smartctl",children:"Using Smartctl"}),"\n",(0,r.jsx)(n.p,{children:"Find partition:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"df -h\r\n\r\nFilesystem Size Used Avail Use% Mounted on\r\nudev 3.8G 0 3.8G 0% /dev\r\ntmpfs 777M 996K 776M 1% /run\r\n/dev/sda1 75G 43G 30G 59% /\r\ntmpfs 3.8G 0 3.8G 0% /dev/shm\r\ntmpfs 5.0M 0 5.0M 0% /run/lock\r\n/dev/sda15 121M 130K 120M 1% /boot/efi\n"})}),"\n",(0,r.jsxs)(n.p,{children:["In the case of my test server below we have a virtual machine - that, obviously, does not have access to the underlying HDD hardware ",(0,r.jsx)(n.code,{children:"/dev/sda1"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"smartctl -a /dev/sda1\r\n\r\n=== START OF INFORMATION SECTION ===\r\nVendor: QEMU\r\nProduct: QEMU HARDDISK\r\nRevision: 2.5+\r\nCompliance: SPC-3\r\nUser Capacity: 81,923,145,728 bytes [81.9 GB]\r\nLogical block size: 512 bytes\r\nLU is thin provisioned, LBPRZ=0\r\nDevice type: disk\r\nLocal Time is: Sun Jan 30 05:14:03 2022 CET\r\nSMART support is: Unavailable - device lacks SMART capability.\r\n\r\n=== START OF READ SMART DATA SECTION ===\r\nCurrent Drive Temperature: 0 C\r\nDrive Trip Temperature: 0 C\n"})}),"\n",(0,r.jsxs)(n.p,{children:["When you see that the ",(0,r.jsx)(n.code,{children:"SMART support is:"})," ",(0,r.jsx)(n.strong,{children:"disabled"})," run the following command to enable it:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"smartctl -s on -a /dev/sda1\n"})}),"\n",(0,r.jsx)(n.h2,{id:"add-smart-zabbix-plugin",children:"Add SMART Zabbix Plugin"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.a,{href:"https://www.zabbix.com/integrations/smart",children:"template for monitoring S.M.A.R.T. attributes"})," of physical disk that works without any external scripts. It collects metrics by Zabbix agent 2 version 5.0 and later with Smartmontools version 7.1 and later. Disk discovery LLD rule finds all HDD, SSD, NVMe disks with S.M.A.R.T. enabled. Attribute discovery LLD rule finds all Vendor Specific Attributes for each disk."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"SMART Zabbix Plugin",src:t(346158).Z+"",width:"834",height:"372"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"SMART Zabbix Plugin",src:t(517010).Z+"",width:"893",height:"440"})})]})}function b(e={}){const{wrapper:n}={...(0,i.ah)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},603905:(e,n,t)=>{t.d(n,{ah:()=>c});var r=t(667294);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function s(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function a(e){for(var n=1;n=0||(i[t]=e[t]);return i}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var l=r.createContext({}),c=function(e){var n=r.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):a(a({},n),e)),t},d={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},b=r.forwardRef((function(e,n){var t=e.components,i=e.mdxType,s=e.originalType,l=e.parentName,b=o(e,["components","mdxType","originalType","parentName"]),h=c(t),m=i,p=h["".concat(l,".").concat(m)]||h[m]||d[m]||s;return t?r.createElement(p,a(a({ref:n},b),{},{components:t})):r.createElement(p,a({ref:n},b))}));b.displayName="MDXCreateElement"},346158:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/Zabbix_SMART_Monitor_01-b4fcc9c4374182630743a1b3f14a8f6a.jpg"},517010:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/Zabbix_SMART_Monitor_02-493d45df941c9b99e7880c40769a2587.jpg"},884816:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/photo-kt443t6d_64hdh43hfh6dgjdfhg4_d-d8b333d1f9ddf34ac7392aef86b14c83.jpg"}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.f2e0adbc.js b/assets/js/935f2afb.f2e0adbc.js deleted file mode 100644 index 6631809b53..0000000000 --- a/assets/js/935f2afb.f2e0adbc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmikes_dev_notebook=self.webpackChunkmikes_dev_notebook||[]).push([[80053],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Introduction","href":"/docs/intro","docId":"intro","unlisted":false},{"type":"category","label":"Development","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Javascript","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Typescript for Web APIs","href":"/docs/Development/Javascript/2023-12-31-js-typescript-rest/2023-12-31","docId":"Development/Javascript/2023-12-31-js-typescript-rest/index","unlisted":false},{"type":"link","label":"Redux Toolkit and RTK Query","href":"/docs/Development/Javascript/2023-12-25-redux-toolkit/2023-12-25","docId":"Development/Javascript/2023-12-25-redux-toolkit/index","unlisted":false},{"type":"link","label":"Building a Native IP Camera Client in React","href":"/docs/Development/Javascript/2023-12-24-react-query-tauri-iot-ctrl/2023-12-21","docId":"Development/Javascript/2023-12-24-react-query-tauri-iot-ctrl/index","unlisted":false},{"type":"link","label":"Building a Native Elasticsearch Client in React","href":"/docs/Development/Javascript/2023-12-21-react-query-tauri-elasticsearch/2023-12-21","docId":"Development/Javascript/2023-12-21-react-query-tauri-elasticsearch/index","unlisted":false},{"type":"link","label":"Tanstack React Query AsyncState Management","href":"/docs/Development/Javascript/2023-12-20-react-query-typescript/2023-12-20","docId":"Development/Javascript/2023-12-20-react-query-typescript/index","unlisted":false},{"type":"link","label":"React Query AsyncState Management","href":"/docs/Development/Javascript/2023-12-19-react-query-typescript/2023-12-19","docId":"Development/Javascript/2023-12-19-react-query-typescript/index","unlisted":false},{"type":"link","label":"Redux Toolkit Github API","href":"/docs/Development/Javascript/2023-12-18-reactjs-typescript-redux-toolkit/2023-12-18","docId":"Development/Javascript/2023-12-18-reactjs-typescript-redux-toolkit/index","unlisted":false},{"type":"link","label":"React Hooks Typescript","href":"/docs/Development/Javascript/2023-12-16-reactjs-hooks-typescript/2023-12-16","docId":"Development/Javascript/2023-12-16-reactjs-hooks-typescript/index","unlisted":false},{"type":"link","label":"Simple Redux","href":"/docs/Development/Javascript/2023-12-15-reactjs-typescript-redux/2023-12-15","docId":"Development/Javascript/2023-12-15-reactjs-typescript-redux/index","unlisted":false},{"type":"link","label":"React.js with Typescript 2023","href":"/docs/Development/Javascript/2023-12-14-reactjs-typescript-2023/2023-12-14","docId":"Development/Javascript/2023-12-14-reactjs-typescript-2023/index","unlisted":false},{"type":"link","label":"Typescript DOM Webpack","href":"/docs/Development/Javascript/2023-06-13-typescript-dom-webpack/2023-06-13","docId":"Development/Javascript/2023-06-13-typescript-dom-webpack/index","unlisted":false},{"type":"link","label":"Typescript DOM","href":"/docs/Development/Javascript/2023-06-13-typescript-dom/2023-06-13","docId":"Development/Javascript/2023-06-13-typescript-dom/index","unlisted":false},{"type":"link","label":"Typescript Design Pattern","href":"/docs/Development/Javascript/2023-06-12-typescript-pattern/2023-06-12","docId":"Development/Javascript/2023-06-12-typescript-pattern/index","unlisted":false},{"type":"link","label":"Typescript 2023","href":"/docs/Development/Javascript/2023-06-12-typescript-2023/2023-06-12","docId":"Development/Javascript/2023-06-12-typescript-2023/index","unlisted":false},{"type":"link","label":"Node / Express with Typescript - (Re)Introduction 2023","href":"/docs/Development/Javascript/2023-06-04-nodejs-typescript-sql/2023-06-04","docId":"Development/Javascript/2023-06-04-nodejs-typescript-sql/index","unlisted":false},{"type":"link","label":"React.js 2023 - A (Re)Introduction","href":"/docs/Development/Javascript/2023-04-01-reactjs-2023/2023-04-01","docId":"Development/Javascript/2023-04-01-reactjs-2023/index","unlisted":false},{"type":"link","label":"MeiLi Search for your Gatsby.js Blog","href":"/docs/Development/Javascript/2023-02-13-gatsby-meili-search-starter/2023-02-13","docId":"Development/Javascript/2023-02-13-gatsby-meili-search-starter/index","unlisted":false},{"type":"link","label":"React Frontend for MeiLi Search","href":"/docs/Development/Javascript/2023-02-12-react-meili-search-starter/2023-02-12","docId":"Development/Javascript/2023-02-12-react-meili-search-starter/index","unlisted":false},{"type":"link","label":"Reactive Search Starter","href":"/docs/Development/Javascript/2022-12-29-reactive-search-starter/2022-12-29","docId":"Development/Javascript/2022-12-29-reactive-search-starter/index","unlisted":false},{"type":"link","label":"11ty Static Site Generator","href":"/docs/Development/Javascript/2022-12-11-11ty-starter/2022-12-11","docId":"Development/Javascript/2022-12-11-11ty-starter/index","unlisted":false},{"type":"link","label":"TypeScript 2.0 in React 19 (2023)","href":"/docs/Development/Javascript/2022-11-29-react-typescript-intro-2023/2022-11-29","docId":"Development/Javascript/2022-11-29-react-typescript-intro-2023/index","unlisted":false},{"type":"link","label":"Web3.js Blockchain Application","href":"/docs/Development/Javascript/2022-11-19-web3-javascript-app/2022-11-19","docId":"Development/Javascript/2022-11-19-web3-javascript-app/index","unlisted":false},{"type":"link","label":"WebRTC Introduction - Interactive Connectivity Establishment","href":"/docs/Development/Javascript/2022-11-10-webrtc-introduction-video-chat-part2/2022-11-10","docId":"Development/Javascript/2022-11-10-webrtc-introduction-video-chat-part2/index","unlisted":false},{"type":"link","label":"WebRTC Introduction - Client Side Signalling","href":"/docs/Development/Javascript/2022-10-30-webrtc-introduction-video-chat-part1/2022-10-30","docId":"Development/Javascript/2022-10-30-webrtc-introduction-video-chat-part1/index","unlisted":false},{"type":"link","label":"WebRTC Introduction - Realtime Chat","href":"/docs/Development/Javascript/2022-10-29-webrtc-introduction-realtime-chat/2022-10-29","docId":"Development/Javascript/2022-10-29-webrtc-introduction-realtime-chat/index","unlisted":false},{"type":"link","label":"Docusaurus Introduction","href":"/docs/Development/Javascript/2022-07-01-docusaurus-introduction/2022-07-01","docId":"Development/Javascript/2022-07-01-docusaurus-introduction/index","unlisted":false},{"type":"link","label":"Working with JSON APIs","href":"/docs/Development/Javascript/2022-03-01--json-apis-training/2022-03-01","docId":"Development/Javascript/2022-03-01--json-apis-training/index","unlisted":false},{"type":"link","label":"Reconnecting Websockets","href":"/docs/Development/Javascript/2021-09-10--websocket-recconects/2021-09-10","docId":"Development/Javascript/2021-09-10--websocket-recconects/index","unlisted":false},{"type":"link","label":"Convert Alerts into Toasts","href":"/docs/Development/Javascript/2021-09-10--notifications-alerts-as-toast/2021-09-10","docId":"Development/Javascript/2021-09-10--notifications-alerts-as-toast/index","unlisted":false},{"type":"link","label":"NGINX as a Proxy for Websockets","href":"/docs/Development/Javascript/2021-09-09--websocket-NGINX/2021-09-09","docId":"Development/Javascript/2021-09-09--websocket-NGINX/index","unlisted":false},{"type":"link","label":"HAProxy Loadbalancing and Websockets","href":"/docs/Development/Javascript/2021-09-09--websocket-HAproxy/2021-09-09","docId":"Development/Javascript/2021-09-09--websocket-HAproxy/index","unlisted":false},{"type":"link","label":"HTML Video over Websockets","href":"/docs/Development/Javascript/2021-09-08--websockets-html-video/2021-09-08","docId":"Development/Javascript/2021-09-08--websockets-html-video/index","unlisted":false},{"type":"link","label":"Introduction to Websockets","href":"/docs/Development/Javascript/2021-09-07--intro-to-websockets/2021-09-07","docId":"Development/Javascript/2021-09-07--intro-to-websockets/index","unlisted":false},{"type":"link","label":"React Dashboard for MQTT","href":"/docs/Development/Javascript/2021-06-04--mqtt-dashboard-react/2021-06-04","docId":"Development/Javascript/2021-06-04--mqtt-dashboard-react/index","unlisted":false},{"type":"link","label":"Mosquitto MQTT Cheat Sheet","href":"/docs/Development/Javascript/2021-06-02--mqtt-cheat-sheet/2021-06-02","docId":"Development/Javascript/2021-06-02--mqtt-cheat-sheet/index","unlisted":false},{"type":"link","label":"MQTT Webfrontend with React.js","href":"/docs/Development/Javascript/2021-06-01--mqtt-with-reactjs/2021-06-01","docId":"Development/Javascript/2021-06-01--mqtt-with-reactjs/index","unlisted":false},{"type":"link","label":"Carbon Design System in React.js - Part III","href":"/docs/Development/Javascript/2021-05-12-carbon-design-react-part3/2021-05-12","docId":"Development/Javascript/2021-05-12-carbon-design-react-part3/index","unlisted":false},{"type":"link","label":"Carbon Design System in React.js - Part II","href":"/docs/Development/Javascript/2021-05-11-carbon-design-react-part2/2021-05-11","docId":"Development/Javascript/2021-05-11-carbon-design-react-part2/index","unlisted":false},{"type":"link","label":"Carbon Design System in React.js - Part I","href":"/docs/Development/Javascript/2021-05-10-carbon-design-react/2021-05-10","docId":"Development/Javascript/2021-05-10-carbon-design-react/index","unlisted":false},{"type":"link","label":"Electron@13 and Create-React-App","href":"/docs/Development/Javascript/2021-05-09-electron13-and-react/2021-05-09","docId":"Development/Javascript/2021-05-09-electron13-and-react/index","unlisted":false},{"type":"link","label":"Electron@13 as a Gatsby.js Wrapper","href":"/docs/Development/Javascript/2021-05-08-electron13-gatsby-wrapper/2021-05-08","docId":"Development/Javascript/2021-05-08-electron13-gatsby-wrapper/index","unlisted":false},{"type":"link","label":"Electron for Cross Platform Applications","href":"/docs/Development/Javascript/2021-05-07-electron-cross-platform-apps/2021-05-07","docId":"Development/Javascript/2021-05-07-electron-cross-platform-apps/index","unlisted":false},{"type":"link","label":"Next.js in 2021","href":"/docs/Development/Javascript/2021-02-14-next-js-2021/2021-02-14","docId":"Development/Javascript/2021-02-14-next-js-2021/index","unlisted":false},{"type":"link","label":"Web traffic redirection with Node and Express on CentOS8","href":"/docs/Development/Javascript/2020-01-12--node-express-redirect-server/2020-01-12","docId":"Development/Javascript/2020-01-12--node-express-redirect-server/index","unlisted":false},{"type":"link","label":"Building a MQTT Interface","href":"/docs/Development/Javascript/2019-08-02--building-an-mqtt-interface/2019-08-02","docId":"Development/Javascript/2019-08-02--building-an-mqtt-interface/index","unlisted":false},{"type":"link","label":"Server Rendering with React and React Router","href":"/docs/Development/Javascript/2018-01-17--server-side-render-react-router/2018-01-17","docId":"Development/Javascript/2018-01-17--server-side-render-react-router/index","unlisted":false},{"type":"link","label":"react-transition-group","href":"/docs/Development/Javascript/2018-01-15--react-transition-group-demo/2018-01-15","docId":"Development/Javascript/2018-01-15--react-transition-group-demo/index","unlisted":false},{"type":"link","label":"Gatsby Material UI Starter","href":"/docs/Development/Javascript/2018-01-07--gatsby-material-ui-starter/2018-01-07","docId":"Development/Javascript/2018-01-07--gatsby-material-ui-starter/index","unlisted":false},{"type":"link","label":"Gatsby.js with Bootstrap 4","href":"/docs/Development/Javascript/2017-12-17--gatsby-reactstrap/2017-12-17","docId":"Development/Javascript/2017-12-17--gatsby-reactstrap/index","unlisted":false},{"type":"link","label":"Gatsby.js Knowledgebase","href":"/docs/Development/Javascript/2017-12-14--gatsby-wiki/2017-12-14","docId":"Development/Javascript/2017-12-14--gatsby-wiki/index","unlisted":false},{"type":"link","label":"Next.js Server Side Rendering","href":"/docs/Development/Javascript/2017-12-09--next-start/2017-12-09","docId":"Development/Javascript/2017-12-09--next-start/index","unlisted":false},{"type":"link","label":"React Router 4","href":"/docs/Development/Javascript/2017-12-07--react-router-4/2017-12-07","docId":"Development/Javascript/2017-12-07--react-router-4/index","unlisted":false},{"type":"link","label":"React under the Hood","href":"/docs/Development/Javascript/2017-09-03--react-under-the-hood/2017-09-03","docId":"Development/Javascript/2017-09-03--react-under-the-hood/index","unlisted":false},{"type":"link","label":"create-react-app and Material-UI","href":"/docs/Development/Javascript/2017-08-21--reactive-material/2017-08-21","docId":"Development/Javascript/2017-08-21--reactive-material/index","unlisted":false},{"type":"link","label":"Gatsby Blog Starter","href":"/docs/Development/Javascript/2017-08-15--gatsby-blog-starter/2017-08-15","docId":"Development/Javascript/2017-08-15--gatsby-blog-starter/index","unlisted":false},{"type":"link","label":"Google Analytics in AMP","href":"/docs/Development/Javascript/2017-08-07--google-analytics-amp/2017-08-07","docId":"Development/Javascript/2017-08-07--google-analytics-amp/index","unlisted":false},{"type":"link","label":"React TODO List","href":"/docs/Development/Javascript/2017-07-24--obligatory-react-todo-list/2017-07-24","docId":"Development/Javascript/2017-07-24--obligatory-react-todo-list/index","unlisted":false},{"type":"link","label":"Food Caloric Table App","href":"/docs/Development/Javascript/2017-07-22--caloric-burn/2017-07-22","docId":"Development/Javascript/2017-07-22--caloric-burn/index","unlisted":false},{"type":"link","label":"Random Password Generator","href":"/docs/Development/Javascript/2017-07-04--random-password-generator/2017-07-04","docId":"Development/Javascript/2017-07-04--random-password-generator/index","unlisted":false},{"type":"link","label":"Node Express Static","href":"/docs/Development/Javascript/2016-08-11--node-express-static-wiki/2016-08-11","docId":"Development/Javascript/2016-08-11--node-express-static-wiki/index","unlisted":false},{"type":"link","label":"Node/Express with MongoDB","href":"/docs/Development/Javascript/2016-06-01--node-express-mongodb/2016-06-01","docId":"Development/Javascript/2016-06-01--node-express-mongodb/index","unlisted":false},{"type":"link","label":"JavaScript and Getting Started with APIs and AJAX","href":"/docs/Development/Javascript/2016-05-27--javascript-apis-and-ajax/2016-05-27","docId":"Development/Javascript/2016-05-27--javascript-apis-and-ajax/index","unlisted":false},{"type":"link","label":"React-Live & Code example","href":"/docs/Development/Javascript/2010-01-05--markdown-live-code/2010-01-05","docId":"Development/Javascript/2010-01-05--markdown-live-code/index","unlisted":false},{"type":"link","label":"Markdown Cheatsheet","href":"/docs/Development/Javascript/2010-01-01--mdx/2010-01-01","docId":"Development/Javascript/2010-01-01--mdx/index","unlisted":false}],"href":"/docs/category/javascript"},{"type":"category","label":"Python","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"OpenCV & SciPy and Scikit Image Cheat Sheet","href":"/docs/Development/Python/2023-08-14-python-scikit-image-opencv/2023-08-14","docId":"Development/Python/2023-08-14-python-scikit-image-opencv/index","unlisted":false},{"type":"link","label":"Introduction to Scikit-Image","href":"/docs/Development/Python/2023-07-09-python-scikit-image-intro/2023-07-09","docId":"Development/Python/2023-07-09-python-scikit-image-intro/index","unlisted":false},{"type":"link","label":"Supervised Learning with Scikit-Learn","href":"/docs/Development/Python/2023-05-28-telco-churn-cohort-study/2023-05-28","docId":"Development/Python/2023-05-28-telco-churn-cohort-study/index","unlisted":false},{"type":"link","label":"SciKit-Learn Cheat Sheet","href":"/docs/Development/Python/2023-05-20-python-sklearn-cheat-sheet/2023-05-20","docId":"Development/Python/2023-05-20-python-sklearn-cheat-sheet/index","unlisted":false},{"type":"link","label":"Python Asserts in Data Science Cheat Sheet","href":"/docs/Development/Python/2023-05-18-python-asserts/2023-05-18","docId":"Development/Python/2023-05-18-python-asserts/index","unlisted":false},{"type":"link","label":"FiveThirtyEight Fandango Dataset","href":"/docs/Development/Python/2023-05-17-fandango-ratings-controversy/2023-05-17","docId":"Development/Python/2023-05-17-fandango-ratings-controversy/index","unlisted":false},{"type":"link","label":"Seaborn to Explore the CC Churn Dataset","href":"/docs/Development/Python/2023-05-16-seaborn-cc-churn-vis/2023-05-16","docId":"Development/Python/2023-05-16-seaborn-cc-churn-vis/index","unlisted":false},{"type":"link","label":"Plotly & Seaborn to Explore Text Dataset","href":"/docs/Development/Python/2023-05-14-visualizing-text-datasets/2023-05-14","docId":"Development/Python/2023-05-14-visualizing-text-datasets/index","unlisted":false},{"type":"link","label":"Seaborn Titanic Dataset Exploration","href":"/docs/Development/Python/2023-05-12-matplotlib-seaborn-titanic-dataset/2023-05-12","docId":"Development/Python/2023-05-12-matplotlib-seaborn-titanic-dataset/index","unlisted":false},{"type":"link","label":"Plotly COVID19 Dataset Exploration","href":"/docs/Development/Python/2023-05-10-plotly-COVID19-dataset/2023-05-10","docId":"Development/Python/2023-05-10-plotly-COVID19-dataset/index","unlisted":false},{"type":"link","label":"Seaborn Cheat Sheet 2023","href":"/docs/Development/Python/2023-05-07-python-seaborn-cheat-sheet/2023-05-07","docId":"Development/Python/2023-05-07-python-seaborn-cheat-sheet/index","unlisted":false},{"type":"link","label":"A little bit of SciPy...","href":"/docs/Development/Python/2023-05-07-python-scipy-introduction/2023-05-07","docId":"Development/Python/2023-05-07-python-scipy-introduction/index","unlisted":false},{"type":"link","label":"Matplotlib Pyplot Cheat Sheet 2023","href":"/docs/Development/Python/2023-05-03-python-matplotlib-cheat-sheet/2023-05-03","docId":"Development/Python/2023-05-03-python-matplotlib-cheat-sheet/index","unlisted":false},{"type":"link","label":"Pandas Cheat Sheet 2023","href":"/docs/Development/Python/2023-04-24-python-pandas-cheat-sheet/2023-04-24","docId":"Development/Python/2023-04-24-python-pandas-cheat-sheet/index","unlisted":false},{"type":"link","label":"Python 3.11 New Features","href":"/docs/Development/Python/2023-01-16-python-3-11-features/2023-01-16","docId":"Development/Python/2023-01-16-python-3-11-features/index","unlisted":false},{"type":"link","label":"Pipenv - Welcome NPM","href":"/docs/Development/Python/2022-12-11-pipenv/2022-12-11","docId":"Development/Python/2022-12-11-pipenv/index","unlisted":false},{"type":"link","label":"Python - Natural Language Processing","href":"/docs/Development/Python/2022-10-22-python-nlp/2022-10-22","docId":"Development/Python/2022-10-22-python-nlp/index","unlisted":false},{"type":"link","label":"Python - Build a REST API","href":"/docs/Development/Python/2022-10-15-python-rest-server/2022-10-15","docId":"Development/Python/2022-10-15-python-rest-server/index","unlisted":false},{"type":"link","label":"Python - Working with the Elasticsearch REST API","href":"/docs/Development/Python/2022-10-14-python-rest-elastic/2022-10-14","docId":"Development/Python/2022-10-14-python-rest-elastic/index","unlisted":false},{"type":"link","label":"Python - Working with REST API Requests","href":"/docs/Development/Python/2022-10-13-python-rest-api/2022-10-13","docId":"Development/Python/2022-10-13-python-rest-api/index","unlisted":false},{"type":"link","label":"Python - RE","href":"/docs/Development/Python/2022-10-12-python-regular-expressions/2022-10-12","docId":"Development/Python/2022-10-12-python-regular-expressions/index","unlisted":false},{"type":"link","label":"Python - The Filesystem","href":"/docs/Development/Python/2022-10-10-python-filesystem/2022-10-10","docId":"Development/Python/2022-10-10-python-filesystem/index","unlisted":false},{"type":"link","label":"Python - Flask Frontend to generate Elasticsearch Docs from Sitemaps","href":"/docs/Development/Python/2022-10-09-python-flask-elasticsearch/2022-10-09","docId":"Development/Python/2022-10-09-python-flask-elasticsearch/index","unlisted":false},{"type":"link","label":"Python - PyQt Desktop App","href":"/docs/Development/Python/2022-10-08-python-desktop-app/2022-10-08","docId":"Development/Python/2022-10-08-python-desktop-app/index","unlisted":false},{"type":"link","label":"Python - Deploying a Web App with Flask","href":"/docs/Development/Python/2022-10-08-python-flask-app/2022-10-08","docId":"Development/Python/2022-10-08-python-flask-app/index","unlisted":false},{"type":"link","label":"Python - Build an Elasticsearch Index for your Docusaurus Blog","href":"/docs/Development/Python/2022-10-07-python-docusaurus-elasticsearch/2022-10-07","docId":"Development/Python/2022-10-07-python-docusaurus-elasticsearch/index","unlisted":false},{"type":"link","label":"Python - Minify Text for Elasticsearch","href":"/docs/Development/Python/2022-10-06-python-minify-text/2022-10-06","docId":"Development/Python/2022-10-06-python-minify-text/index","unlisted":false},{"type":"link","label":"Python - Text Processing with","href":"/docs/Development/Python/2022-10-05-python-text-processing/2022-10-05","docId":"Development/Python/2022-10-05-python-text-processing/index","unlisted":false},{"type":"link","label":"Python - Video Processing with OpenCV","href":"/docs/Development/Python/2022-09-17-python-video-processing/2022-09-17","docId":"Development/Python/2022-09-17-python-video-processing/index","unlisted":false},{"type":"link","label":"Web Scraping Essentials with Python","href":"/docs/Development/Python/2022-06-27-python-web-scraping/2022-06-27","docId":"Development/Python/2022-06-27-python-web-scraping/index","unlisted":false},{"type":"link","label":"Introduction to PyScript","href":"/docs/Development/Python/2022-06-01-python-pyscript/2022-06-01","docId":"Development/Python/2022-06-01-python-pyscript/index","unlisted":false},{"type":"link","label":"Getting started with Python Part II","href":"/docs/Development/Python/2017-12-13--getting-started-with-python-part-ii/2017-12-13","docId":"Development/Python/2017-12-13--getting-started-with-python-part-ii/index","unlisted":false},{"type":"link","label":"Getting started with Python","href":"/docs/Development/Python/2017-12-11--getting-started-with-python/2017-12-11","docId":"Development/Python/2017-12-11--getting-started-with-python/index","unlisted":false},{"type":"link","label":"Python Network Logger","href":"/docs/Development/Python/2017-12-17--python-ssh-logger/2017-12-17","docId":"Development/Python/2017-12-17--python-ssh-logger/index","unlisted":false}],"href":"/docs/category/python"},{"type":"category","label":"Go","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Go Data Structures","href":"/docs/Development/Go/2022-12-27-go-data-structures/2022-12-27","docId":"Development/Go/2022-12-27-go-data-structures/index","unlisted":false},{"type":"link","label":"Go Bubbles","href":"/docs/Development/Go/2022-12-27-go-bubbles/2022-12-27","docId":"Development/Go/2022-12-27-go-bubbles/index","unlisted":false},{"type":"link","label":"Go WebAssembly","href":"/docs/Development/Go/2022-12-26-go-webassembly/2022-12-26","docId":"Development/Go/2022-12-26-go-webassembly/index","unlisted":false},{"type":"link","label":"Building a NTP/S Timeserver Client in Go with Gitlab CI","href":"/docs/Development/Go/2022-11-11-go-nts-client-ci/2022-11-11","docId":"Development/Go/2022-11-11-go-nts-client-ci/index","unlisted":false},{"type":"link","label":"Go OAuth2 Server","href":"/docs/Development/Go/2022-10-15-go-oauth2-server/2022-10-15","docId":"Development/Go/2022-10-15-go-oauth2-server/index","unlisted":false},{"type":"link","label":"Go Build!","href":"/docs/Development/Go/2022-10-05-go-reducing-binary-size/2022-10-05","docId":"Development/Go/2022-10-05-go-reducing-binary-size/index","unlisted":false},{"type":"link","label":"Build a NTP/S Timeserver Client in Go","href":"/docs/Development/Go/2022-10-04-go-ntp-client/2022-10-04","docId":"Development/Go/2022-10-04-go-ntp-client/index","unlisted":false},{"type":"link","label":"Wails - Build desktop apps using Go & React","href":"/docs/Development/Go/2022-06-15-wails-go-react/2022-06-15","docId":"Development/Go/2022-06-15-wails-go-react/index","unlisted":false},{"type":"link","label":"goFTP","href":"/docs/Development/Go/2021-10-08--goftp/2021-10-08","docId":"Development/Go/2021-10-08--goftp/index","unlisted":false},{"type":"link","label":"Getting started with Go and React - React & REST API\'s","href":"/docs/Development/Go/2021-09-24--golang-react-starter-part-iv/2021-09-24","docId":"Development/Go/2021-09-24--golang-react-starter-part-iv/index","unlisted":false},{"type":"link","label":"Getting started with Go and React - PostgreSQL","href":"/docs/Development/Go/2021-09-23--golang-react-starter-part-iii/2021-09-23","docId":"Development/Go/2021-09-23--golang-react-starter-part-iii/index","unlisted":false},{"type":"link","label":"Getting started with Go and React - API Routes","href":"/docs/Development/Go/2021-09-22--golang-react-starter-part-ii/2021-09-22","docId":"Development/Go/2021-09-22--golang-react-starter-part-ii/index","unlisted":false},{"type":"link","label":"Getting started with Go and React - Webservice, Routing and Status Log","href":"/docs/Development/Go/2021-09-21--golang-react-starter-part-i/2021-09-21","docId":"Development/Go/2021-09-21--golang-react-starter-part-i/index","unlisted":false},{"type":"link","label":"Golang Refresher :: url & http","href":"/docs/Development/Go/2021-09-11--golang-refresher-network/2021-09-11","docId":"Development/Go/2021-09-11--golang-refresher-network/index","unlisted":false},{"type":"link","label":"Golang Refresher :: math & os","href":"/docs/Development/Go/2021-09-11--golang-refresher-math-os/2021-09-11","docId":"Development/Go/2021-09-11--golang-refresher-math-os/index","unlisted":false},{"type":"link","label":"Golang Refresher :: fmt & strings","href":"/docs/Development/Go/2021-09-11--golang-refresher-fmt-strings/2021-09-11","docId":"Development/Go/2021-09-11--golang-refresher-fmt-strings/index","unlisted":false},{"type":"link","label":"Go Websockets","href":"/docs/Development/Go/2021-09-10--go-websockets/2021-09-10","docId":"Development/Go/2021-09-10--go-websockets/index","unlisted":false},{"type":"link","label":"Paho MQTT Client with Golang","href":"/docs/Development/Go/2021-06-03--mqtt-with-golang/2021-06-03","docId":"Development/Go/2021-06-03--mqtt-with-golang/index","unlisted":false},{"type":"link","label":"GoFiber Container for your Gatsby Build","href":"/docs/Development/Go/2021-02-21-gofiber-container-gatsby/2021-02-21","docId":"Development/Go/2021-02-21-gofiber-container-gatsby/index","unlisted":false}],"href":"/docs/category/go"},{"type":"category","label":"Graphs","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"GraphQL Queries and Mutations","href":"/docs/Development/Graphs/2020-05-05--graphql-queries-and-mutations/2020-05-05","docId":"Development/Graphs/2020-05-05--graphql-queries-and-mutations/index","unlisted":false},{"type":"link","label":"Neo4j Corona Tracing","href":"/docs/Development/Graphs/2020-05-04--neo4j-corona-tracing/2020-05-04","docId":"Development/Graphs/2020-05-04--neo4j-corona-tracing/index","unlisted":false},{"type":"link","label":"Neo4j Cypher Cheat Sheet","href":"/docs/Development/Graphs/2020-05-03--neo4j-cheat-sheet/2020-05-03","docId":"Development/Graphs/2020-05-03--neo4j-cheat-sheet/index","unlisted":false},{"type":"link","label":"Neo4j Movie Graph","href":"/docs/Development/Graphs/2020-05-02--neo4j-movie-graph/2020-05-02","docId":"Development/Graphs/2020-05-02--neo4j-movie-graph/index","unlisted":false},{"type":"link","label":"Getting to Know Neo4j","href":"/docs/Development/Graphs/2020-05-01--getting-to-know-neo4j/2020-05-01","docId":"Development/Graphs/2020-05-01--getting-to-know-neo4j/index","unlisted":false}],"href":"/docs/category/graphs"},{"type":"category","label":"React Native","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"React Native Reducer","href":"/docs/Development/ReactNative/2022-05-06-react-native-reducer/2022-05-06","docId":"Development/ReactNative/2022-05-06-react-native-reducer/index","unlisted":false},{"type":"link","label":"React Native Context & Hooks","href":"/docs/Development/ReactNative/2022-05-05-react-native-context-hooks/2022-05-05","docId":"Development/ReactNative/2022-05-05-react-native-context-hooks/index","unlisted":false},{"type":"link","label":"React Native Hooks","href":"/docs/Development/ReactNative/2022-05-04-react-native-hooks/2022-05-04","docId":"Development/ReactNative/2022-05-04-react-native-hooks/index","unlisted":false},{"type":"link","label":"React Native Context API","href":"/docs/Development/ReactNative/2022-05-03-react-native-contextapi/2022-05-03","docId":"Development/ReactNative/2022-05-03-react-native-contextapi/index","unlisted":false},{"type":"link","label":"React Native Navigation","href":"/docs/Development/ReactNative/2022-05-02-react-native-navigation/2022-05-02","docId":"Development/ReactNative/2022-05-02-react-native-navigation/index","unlisted":false},{"type":"link","label":"React Native Hello World","href":"/docs/Development/ReactNative/2022-05-01-react-native-hello-world/2022-05-01","docId":"Development/ReactNative/2022-05-01-react-native-hello-world/index","unlisted":false}],"href":"/docs/category/react-native"},{"type":"category","label":"Magento","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Adding Google Analytics to Magento 2","href":"/docs/Development/Magento/2021-07-28--magento2-google-analytics-universal/2021-07-28","docId":"Development/Magento/2021-07-28--magento2-google-analytics-universal/index","unlisted":false},{"type":"link","label":"Installing Google Analytics g4 Tag in your Gatsby and Discourse Webservice","href":"/docs/Development/Magento/2020-12-07-google-analytics-g4-tag/2020-12-07","docId":"Development/Magento/2020-12-07-google-analytics-g4-tag/index","unlisted":false},{"type":"link","label":"Adding Google Analytics to Magento 2","href":"/docs/Development/Magento/2019-09-21--magento2-google-analytics/2019-09-21","docId":"Development/Magento/2019-09-21--magento2-google-analytics/index","unlisted":false},{"type":"link","label":"Docker Compose install Magento 2","href":"/docs/Development/Magento/2019-09-21--magento2-docker-install/2019-09-21","docId":"Development/Magento/2019-09-21--magento2-docker-install/index","unlisted":false},{"type":"link","label":"Magento 2 UI Components","href":"/docs/Development/Magento/2019-09-20--magento2-ui-components/2019-09-20","docId":"Development/Magento/2019-09-20--magento2-ui-components/index","unlisted":false},{"type":"link","label":"Creating Magento 2 Console Commands","href":"/docs/Development/Magento/2019-09-19--magento2-console-commands/2019-09-19","docId":"Development/Magento/2019-09-19--magento2-console-commands/index","unlisted":false},{"type":"link","label":"Creating Magento 2 Cron Jobs","href":"/docs/Development/Magento/2019-09-18--magento2-cronjobs/2019-09-18","docId":"Development/Magento/2019-09-18--magento2-cronjobs/index","unlisted":false},{"type":"link","label":"Creating Magento 2 Modules","href":"/docs/Development/Magento/2019-09-17--magento2-modules/2019-09-17","docId":"Development/Magento/2019-09-17--magento2-modules/index","unlisted":false},{"type":"link","label":"Working with SQL Dumps","href":"/docs/Development/Magento/2019-09-16--working-with-sql-dumps/2019-09-16","docId":"Development/Magento/2019-09-16--working-with-sql-dumps/index","unlisted":false},{"type":"link","label":"Updating a Magento Project from PHP v7.0 to v7.3","href":"/docs/Development/Magento/2019-09-15--updating-from-php70-to-php72/2019-09-15","docId":"Development/Magento/2019-09-15--updating-from-php70-to-php72/index","unlisted":false},{"type":"link","label":"Magento 2 Manual Theme Installation","href":"/docs/Development/Magento/2019-09-14--magento-and-themes/2019-09-14","docId":"Development/Magento/2019-09-14--magento-and-themes/index","unlisted":false},{"type":"link","label":"Magento 2 and Varnish 6","href":"/docs/Development/Magento/2019-09-13--magento-and-varnish/2019-09-13","docId":"Development/Magento/2019-09-13--magento-and-varnish/index","unlisted":false},{"type":"link","label":"Magento 2 and Elasticsearch","href":"/docs/Development/Magento/2019-09-12--magento-and-elasticsearch/2019-09-12","docId":"Development/Magento/2019-09-12--magento-and-elasticsearch/index","unlisted":false},{"type":"link","label":"Magento 2 Installation with NGINX on Debian Buster","href":"/docs/Development/Magento/2019-09-11--magento-on-debian-with-nginx/2019-09-11","docId":"Development/Magento/2019-09-11--magento-on-debian-with-nginx/index","unlisted":false},{"type":"link","label":"Magento 2 Dev Environment with Docker Compose","href":"/docs/Development/Magento/2019-09-10--magento2-docker-on-ubuntu/2019-09-10","docId":"Development/Magento/2019-09-10--magento2-docker-on-ubuntu/index","unlisted":false},{"type":"link","label":"Magento 2 Docker Development","href":"/docs/Development/Magento/2019-09-07--magento-development-in-docker/2019-09-07","docId":"Development/Magento/2019-09-07--magento-development-in-docker/index","unlisted":false}],"href":"/docs/category/magento"},{"type":"category","label":"Misc","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Pandoc Universal Markup Converter","href":"/docs/Development/Misc/2023-01-20-pandoc-markup-converter/2023-01-20","docId":"Development/Misc/2023-01-20-pandoc-markup-converter/index","unlisted":false},{"type":"link","label":"Unreal Engine Coding Standards","href":"/docs/Development/Misc/2017-06-17--unreal-engine-coding-standards/2017-06-17","docId":"Development/Misc/2017-06-17--unreal-engine-coding-standards/index","unlisted":false},{"type":"link","label":"Frogfoot Checklists","href":"/docs/Development/Misc/1980-01-02--dcs-su-25-t/1980-01-02","docId":"Development/Misc/1980-01-02--dcs-su-25-t/index","unlisted":false},{"type":"link","label":"Tomcat Checklists","href":"/docs/Development/Misc/1980-01-01--dcs-f-14-tomcat/1980-01-01","docId":"Development/Misc/1980-01-01--dcs-f-14-tomcat/index","unlisted":false}],"href":"/docs/category/misc"}],"href":"/docs/category/development"},{"type":"category","label":"DevOps","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Hashicorp","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Opentofu vs Hashicorp Terraform","href":"/docs/DevOps/Hashicorp/2023-12-23-opentofu-vs-terraform/2023-12-22","docId":"DevOps/Hashicorp/2023-12-23-opentofu-vs-terraform/index","unlisted":false},{"type":"link","label":"Hashicorp Terraform - Docker Provider 2024","href":"/docs/DevOps/Hashicorp/2023-12-22-hashicorp-terraform-docker-2024/2023-12-22","docId":"DevOps/Hashicorp/2023-12-22-hashicorp-terraform-docker-2024/index","unlisted":false},{"type":"link","label":"Hashicorp Terraform - Docker Provider 2023","href":"/docs/DevOps/Hashicorp/2023-10-22-hashicorp-terraform-docker-2023/2023-10-22","docId":"DevOps/Hashicorp/2023-10-22-hashicorp-terraform-docker-2023/index","unlisted":false},{"type":"link","label":"Hashicorp Vault - Certificate Authority","href":"/docs/DevOps/Hashicorp/2022-12-07-hashicorp-vault-ca-certificates/2022-12-07","docId":"DevOps/Hashicorp/2022-12-07-hashicorp-vault-ca-certificates/index","unlisted":false},{"type":"link","label":"Hashicorp Consul - Vault Cert Management Part 3","href":"/docs/DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part3/2022-12-05","docId":"DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part3/index","unlisted":false},{"type":"link","label":"Hashicorp Consul - Vault Cert Management Part 2","href":"/docs/DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part2/2022-12-05","docId":"DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part2/index","unlisted":false},{"type":"link","label":"Hashicorp Consul - Vault Cert Management Part 1","href":"/docs/DevOps/Hashicorp/2022-12-04-hashicorp-consul-vault-certificates-part1/2022-12-04","docId":"DevOps/Hashicorp/2022-12-04-hashicorp-consul-vault-certificates-part1/index","unlisted":false},{"type":"link","label":"Hashicorp Vault - Installation 2023","href":"/docs/DevOps/Hashicorp/2022-12-03-hashicorp-vault-installation/2022-12-03","docId":"DevOps/Hashicorp/2022-12-03-hashicorp-vault-installation/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad - Working with Consul Connect","href":"/docs/DevOps/Hashicorp/2022-11-24-hashicorp-consul-connect/2022-11-24","docId":"DevOps/Hashicorp/2022-11-24-hashicorp-consul-connect/index","unlisted":false},{"type":"link","label":"Deploy Grav CMS with Hashicorp Nomad","href":"/docs/DevOps/Hashicorp/2022-11-18-hashicorp-nomad-grav/2022-11-18","docId":"DevOps/Hashicorp/2022-11-18-hashicorp-nomad-grav/index","unlisted":false},{"type":"link","label":"Deploy Mautic with Hashicorp Nomad","href":"/docs/DevOps/Hashicorp/2022-11-16-hashicorp-nomad-mautic/2022-11-16","docId":"DevOps/Hashicorp/2022-11-16-hashicorp-nomad-mautic/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad for NGINX Load-balancing","href":"/docs/DevOps/Hashicorp/2022-11-15-hashicorp-nomad-nginx-load-balancing/2022-11-15","docId":"DevOps/Hashicorp/2022-11-15-hashicorp-nomad-nginx-load-balancing/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad Secure & Balanced NTS Time Service","href":"/docs/DevOps/Hashicorp/2022-11-15-hashicorp-nomad-balanced-nts/2022-11-15","docId":"DevOps/Hashicorp/2022-11-15-hashicorp-nomad-balanced-nts/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad to Renew your TLS Certificates","href":"/docs/DevOps/Hashicorp/2022-11-12-hashicorp-nomad-certbot-renewal/2022-11-12","docId":"DevOps/Hashicorp/2022-11-12-hashicorp-nomad-certbot-renewal/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad to run periodic backups","href":"/docs/DevOps/Hashicorp/2022-11-11-hashicorp-nomad-for-borg-backups/2022-11-11","docId":"DevOps/Hashicorp/2022-11-11-hashicorp-nomad-for-borg-backups/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad to set up an OSTicket Helpdesk - Part II","href":"/docs/DevOps/Hashicorp/2022-10-25-hashicorp-nomad-for-osticket-part-ii/2022-10-25","docId":"DevOps/Hashicorp/2022-10-25-hashicorp-nomad-for-osticket-part-ii/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad - Working with Ports","href":"/docs/DevOps/Hashicorp/2022-10-23-hashicorp-nomad-ports/2022-10-23","docId":"DevOps/Hashicorp/2022-10-23-hashicorp-nomad-ports/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad - Working with Consul Connect","href":"/docs/DevOps/Hashicorp/2022-10-23-hashicorp-consul-connect/2022-10-23","docId":"DevOps/Hashicorp/2022-10-23-hashicorp-consul-connect/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad Sidecar Pattern","href":"/docs/DevOps/Hashicorp/2022-10-22-hashicorp-nomad-sidecar-pattern/2022-10-22","docId":"DevOps/Hashicorp/2022-10-22-hashicorp-nomad-sidecar-pattern/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad to set up an OSTicket Helpdesk - Part I","href":"/docs/DevOps/Hashicorp/2022-10-21-hashicorp-nomad-for-osticket-part-i/2022-10-21","docId":"DevOps/Hashicorp/2022-10-21-hashicorp-nomad-for-osticket-part-i/index","unlisted":false},{"type":"link","label":"NGINX Ingress with Nomad","href":"/docs/DevOps/Hashicorp/2022-09-24--nomad-nginx-ingress/2022-09-24","docId":"DevOps/Hashicorp/2022-09-24--nomad-nginx-ingress/index","unlisted":false},{"type":"link","label":"Secure Timeserver - Deploying a NTS Server using Hashicorp Nomad","href":"/docs/DevOps/Hashicorp/2022-09-22--nomad-nts-timeserver/2022-09-22","docId":"DevOps/Hashicorp/2022-09-22--nomad-nts-timeserver/index","unlisted":false},{"type":"link","label":"Hashicorp Waypoint with Nomad","href":"/docs/DevOps/Hashicorp/2022-06-08-hashicorp-waypoint-nomad/2022-06-09","docId":"DevOps/Hashicorp/2022-06-08-hashicorp-waypoint-nomad/index","unlisted":false},{"type":"link","label":"Hashicorp Waypoint with Docker","href":"/docs/DevOps/Hashicorp/2022-06-07-hashicorp-waypoint-docker/2022-06-07","docId":"DevOps/Hashicorp/2022-06-07-hashicorp-waypoint-docker/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad with NGINX Loadbalancer","href":"/docs/DevOps/Hashicorp/2022-05-29-hashicorp-nomad-with-nginx-loadbalancer/2022-05-29","docId":"DevOps/Hashicorp/2022-05-29-hashicorp-nomad-with-nginx-loadbalancer/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad to set up an Elasticsearch Cluster Part II","href":"/docs/DevOps/Hashicorp/2022-05-28-hashicorp-nomad-for-elastic-part-2/2022-05-28","docId":"DevOps/Hashicorp/2022-05-28-hashicorp-nomad-for-elastic-part-2/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad to set up an Elasticsearch Cluster","href":"/docs/DevOps/Hashicorp/2022-05-27-hashicorp-nomad-for-elastic/2022-05-27","docId":"DevOps/Hashicorp/2022-05-27-hashicorp-nomad-for-elastic/index","unlisted":false},{"type":"link","label":"App Deployment with Hashicorp Nomad from Gitlab Part Deux","href":"/docs/DevOps/Hashicorp/2022-05-26-hashicorp-nomad-with-gitlab-part-2/2022-05-26","docId":"DevOps/Hashicorp/2022-05-26-hashicorp-nomad-with-gitlab-part-2/index","unlisted":false},{"type":"link","label":"App Deployment with Hashicorp Nomad from Gitlab","href":"/docs/DevOps/Hashicorp/2022-05-25-hashicorp-nomad-with-gitlab/2022-05-25","docId":"DevOps/Hashicorp/2022-05-25-hashicorp-nomad-with-gitlab/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad for NGINX Web Proxies","href":"/docs/DevOps/Hashicorp/2022-05-24-hashicorp-nomad-with-nginx/2022-05-24","docId":"DevOps/Hashicorp/2022-05-24-hashicorp-nomad-with-nginx/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad with Consul II - The Reckoning","href":"/docs/DevOps/Hashicorp/2022-05-22-hashicorp-dojo-nomad-consul-part-2/2022-05-22","docId":"DevOps/Hashicorp/2022-05-22-hashicorp-dojo-nomad-consul-part-2/index","unlisted":false},{"type":"link","label":"Hashicorp Dojo Consul Refresher","href":"/docs/DevOps/Hashicorp/2022-05-21-hashicorp-dojo-consul-refresher/2022-05-21","docId":"DevOps/Hashicorp/2022-05-21-hashicorp-dojo-consul-refresher/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad with Consul Service Discovery","href":"/docs/DevOps/Hashicorp/2022-05-20-hashicorp-dojo-nomad-consul/2022-05-20","docId":"DevOps/Hashicorp/2022-05-20-hashicorp-dojo-nomad-consul/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad Access Control","href":"/docs/DevOps/Hashicorp/2022-05-19-hashicorp-dojo-nomad-access-control/2022-05-19","docId":"DevOps/Hashicorp/2022-05-19-hashicorp-dojo-nomad-access-control/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad Adding Encryption to your Cluster","href":"/docs/DevOps/Hashicorp/2022-05-18-hashicorp-dojo-nomad-adding-encryption/2022-05-18","docId":"DevOps/Hashicorp/2022-05-18-hashicorp-dojo-nomad-adding-encryption/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad Deployment","href":"/docs/DevOps/Hashicorp/2022-05-17-hashicorp-dojo-nomad-deployment/2022-05-17","docId":"DevOps/Hashicorp/2022-05-17-hashicorp-dojo-nomad-deployment/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad Dojo","href":"/docs/DevOps/Hashicorp/2022-05-16-hashicorp-dojo-nomad-starter/2022-05-16","docId":"DevOps/Hashicorp/2022-05-16-hashicorp-dojo-nomad-starter/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad Refresher","href":"/docs/DevOps/Hashicorp/2022-05-15-hashicorp-nomad-refresher/2022-05-15","docId":"DevOps/Hashicorp/2022-05-15-hashicorp-nomad-refresher/index","unlisted":false},{"type":"link","label":"Hashicorp Consul in Production","href":"/docs/DevOps/Hashicorp/2021-10-11--hashicorp-consul-in-production/2021-10-11","docId":"DevOps/Hashicorp/2021-10-11--hashicorp-consul-in-production/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad in Production","href":"/docs/DevOps/Hashicorp/2021-10-10--hashicorp-nomad-in-production/2021-10-10","docId":"DevOps/Hashicorp/2021-10-10--hashicorp-nomad-in-production/index","unlisted":false},{"type":"link","label":"Hashicorp Terraform - Providers, Variables & Attributes","href":"/docs/DevOps/Hashicorp/2021-09-06--hashicorp-terraform-providers-variables-attributes/2021-09-07","docId":"DevOps/Hashicorp/2021-09-06--hashicorp-terraform-providers-variables-attributes/index","unlisted":false},{"type":"link","label":"Hashicorp Terraform - Setup","href":"/docs/DevOps/Hashicorp/2021-09-05--hashicorp-terraform-setup/2021-09-05","docId":"DevOps/Hashicorp/2021-09-05--hashicorp-terraform-setup/index","unlisted":false},{"type":"link","label":"Hashicorp Vault - Logging","href":"/docs/DevOps/Hashicorp/2021-08-25--hashicorp-vault-logging/2021-08-25","docId":"DevOps/Hashicorp/2021-08-25--hashicorp-vault-logging/index","unlisted":false},{"type":"link","label":"Hashicorp Vault - Rest API","href":"/docs/DevOps/Hashicorp/2021-08-23--hashicorp-vault-rest-api/2021-08-23","docId":"DevOps/Hashicorp/2021-08-23--hashicorp-vault-rest-api/index","unlisted":false},{"type":"link","label":"Hashicorp Vault - ACL Policies","href":"/docs/DevOps/Hashicorp/2021-08-22--hashicorp-vault-policies/2021-08-22","docId":"DevOps/Hashicorp/2021-08-22--hashicorp-vault-policies/index","unlisted":false},{"type":"link","label":"Hashicorp Vault - Secrets & Tokens","href":"/docs/DevOps/Hashicorp/2021-08-21--hashicorp-vault-secrets-tokens/2021-08-21","docId":"DevOps/Hashicorp/2021-08-21--hashicorp-vault-secrets-tokens/index","unlisted":false},{"type":"link","label":"Hashicorp Vault - Setup","href":"/docs/DevOps/Hashicorp/2021-08-20--hashicorp-vault-setup/2021-08-20","docId":"DevOps/Hashicorp/2021-08-20--hashicorp-vault-setup/index","unlisted":false},{"type":"link","label":"Hashicorp Consul Refresher - Gossip TLS Encryption","href":"/docs/DevOps/Hashicorp/2021-08-14--hashicorp-consul-tls-encryption/2021-08-14","docId":"DevOps/Hashicorp/2021-08-14--hashicorp-consul-tls-encryption/index","unlisted":false},{"type":"link","label":"Hashicorp Consul Refresher - Access Control Lists","href":"/docs/DevOps/Hashicorp/2021-08-13--hashicorp-consul-access-control-lists/2021-08-13","docId":"DevOps/Hashicorp/2021-08-13--hashicorp-consul-access-control-lists/index","unlisted":false},{"type":"link","label":"Hashicorp Consul Refresher - Service Mesh","href":"/docs/DevOps/Hashicorp/2021-08-12--hashicorp-consul-service-mesh/2021-08-12","docId":"DevOps/Hashicorp/2021-08-12--hashicorp-consul-service-mesh/index","unlisted":false},{"type":"link","label":"Hashicorp Consul Refresher - Backups","href":"/docs/DevOps/Hashicorp/2021-08-11--hashicorp-consul-backups/2021-08-11","docId":"DevOps/Hashicorp/2021-08-11--hashicorp-consul-backups/index","unlisted":false},{"type":"link","label":"Hashicorp Consul Refresher - Key Value Store","href":"/docs/DevOps/Hashicorp/2021-08-10--hashicorp-consul-key-value-store/2021-08-10","docId":"DevOps/Hashicorp/2021-08-10--hashicorp-consul-key-value-store/index","unlisted":false},{"type":"link","label":"Hashicorp Consul Refresher - Services","href":"/docs/DevOps/Hashicorp/2021-08-09--hashicorp-consul-services/2021-08-09","docId":"DevOps/Hashicorp/2021-08-09--hashicorp-consul-services/index","unlisted":false},{"type":"link","label":"Nomad Access Control Lists","href":"/docs/DevOps/Hashicorp/2021-08-08--hashicorp-nomad-access-control-lists/2021-08-08","docId":"DevOps/Hashicorp/2021-08-08--hashicorp-nomad-access-control-lists/index","unlisted":false},{"type":"link","label":"Nomad Job Configuration","href":"/docs/DevOps/Hashicorp/2021-08-07--hashicorp-nomad-job-configuration/2021-08-07","docId":"DevOps/Hashicorp/2021-08-07--hashicorp-nomad-job-configuration/index","unlisted":false},{"type":"link","label":"Hashicorp Consul Refresher - Loadbalancing with Traefik","href":"/docs/DevOps/Hashicorp/2021-08-06--hashicorp-consul-traefik-loadbalancing/2021-08-06","docId":"DevOps/Hashicorp/2021-08-06--hashicorp-consul-traefik-loadbalancing/index","unlisted":false},{"type":"link","label":"Hashicorp Consul Refresher - Loadbalancing with Fabio","href":"/docs/DevOps/Hashicorp/2021-08-06--hashicorp-consul-fabio-loadbalancing/2021-08-06","docId":"DevOps/Hashicorp/2021-08-06--hashicorp-consul-fabio-loadbalancing/index","unlisted":false},{"type":"link","label":"Hashicorp Consul Refresher - Service Discovery","href":"/docs/DevOps/Hashicorp/2021-08-05--hashicorp-consul-service-discovery/2021-08-05","docId":"DevOps/Hashicorp/2021-08-05--hashicorp-consul-service-discovery/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad Refresher - Job Specifications","href":"/docs/DevOps/Hashicorp/2021-08-04--hashicorp-nomad-job-specifications/2021-08-04","docId":"DevOps/Hashicorp/2021-08-04--hashicorp-nomad-job-specifications/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad Refresher - Jobs","href":"/docs/DevOps/Hashicorp/2021-08-03--hashicorp-nomad-jobs/2021-08-03","docId":"DevOps/Hashicorp/2021-08-03--hashicorp-nomad-jobs/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad Refresher - Security","href":"/docs/DevOps/Hashicorp/2021-08-02--hashicorp-nomad-security/2021-08-02","docId":"DevOps/Hashicorp/2021-08-02--hashicorp-nomad-security/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad Refresher - Installation","href":"/docs/DevOps/Hashicorp/2021-08-01--hashicorp-nomad-refresher/2021-08-01","docId":"DevOps/Hashicorp/2021-08-01--hashicorp-nomad-refresher/index","unlisted":false},{"type":"link","label":"HashiCorp Packer Provisioning","href":"/docs/DevOps/Hashicorp/2020-10-26--hashicorp-packer-provisioner/2020-10-26","docId":"DevOps/Hashicorp/2020-10-26--hashicorp-packer-provisioner/index","unlisted":false},{"type":"link","label":"HashiCorp Packer with Virtualbox (Autoinstall)","href":"/docs/DevOps/Hashicorp/2020-10-25--hashicorp-packer-and-virtualbox-autoinstall/2020-10-25","docId":"DevOps/Hashicorp/2020-10-25--hashicorp-packer-and-virtualbox-autoinstall/index","unlisted":false},{"type":"link","label":"HashiCorp Packer with Virtualbox (Preseed)","href":"/docs/DevOps/Hashicorp/2020-10-24--hashicorp-packer-and-virtualbox-preseed/2020-10-24","docId":"DevOps/Hashicorp/2020-10-24--hashicorp-packer-and-virtualbox-preseed/index","unlisted":false},{"type":"link","label":"HashiCorp Packer Machine Images Introduction","href":"/docs/DevOps/Hashicorp/2020-10-23--hashicorp-packer-machine-image/2020-10-23","docId":"DevOps/Hashicorp/2020-10-23--hashicorp-packer-machine-image/index","unlisted":false},{"type":"link","label":"Consul Deployment Guide","href":"/docs/DevOps/Hashicorp/2020-08-19--consul-deployment-guide/2020-08-19","docId":"DevOps/Hashicorp/2020-08-19--consul-deployment-guide/index","unlisted":false},{"type":"link","label":"Consul Service Mesh","href":"/docs/DevOps/Hashicorp/2020-08-18--consul-service-mesh/2020-08-18","docId":"DevOps/Hashicorp/2020-08-18--consul-service-mesh/index","unlisted":false},{"type":"link","label":"Joining Consul Clients","href":"/docs/DevOps/Hashicorp/2020-08-18--consul-mock-datacenter/2020-08-19","docId":"DevOps/Hashicorp/2020-08-18--consul-mock-datacenter/index","unlisted":false},{"type":"link","label":"Installing HashiCorp Consul on Ubuntu Server 20.04","href":"/docs/DevOps/Hashicorp/2020-08-17--installing-consul-ubuntu/2020-08-17","docId":"DevOps/Hashicorp/2020-08-17--installing-consul-ubuntu/index","unlisted":false},{"type":"link","label":"Nomad Server Cluster","href":"/docs/DevOps/Hashicorp/2020-08-16--nomad-cluster/2020-08-16","docId":"DevOps/Hashicorp/2020-08-16--nomad-cluster/index","unlisted":false},{"type":"link","label":"Installing HashiCorp Nomad on Ubuntu Server 20.04","href":"/docs/DevOps/Hashicorp/2020-08-15--installing-nomad-ubuntu/2020-08-15","docId":"DevOps/Hashicorp/2020-08-15--installing-nomad-ubuntu/index","unlisted":false}],"href":"/docs/category/hashicorp"},{"type":"category","label":"Zabbix","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Zabbix <3 Zimbra","href":"/docs/DevOps/Zabbix/2022-07-15-zabbix-for-zimbra/2022-07-15","docId":"DevOps/Zabbix/2022-07-15-zabbix-for-zimbra/index","unlisted":false},{"type":"link","label":"Zabbix v6 Creating triggers for Baseline monitoring and Anomaly detection","href":"/docs/DevOps/Zabbix/2022-01-16--zabbix-v6-baseline-monitoring/2022-01-16","docId":"DevOps/Zabbix/2022-01-16--zabbix-v6-baseline-monitoring/index","unlisted":false},{"type":"link","label":"Zabbix v6 SMART HDD Check","href":"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/2022-01-15","docId":"DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/index","unlisted":false},{"type":"link","label":"Zabbix v6 Slack Notifications","href":"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-slack-notifications/2022-01-15","docId":"DevOps/Zabbix/2022-01-15--zabbix-v6-slack-notifications/index","unlisted":false},{"type":"link","label":"Zabbix v6 Email Notifications","href":"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-email-notifications/2022-01-15","docId":"DevOps/Zabbix/2022-01-15--zabbix-v6-email-notifications/index","unlisted":false},{"type":"link","label":"Grafana Dashboard for Zabbix v6","href":"/docs/DevOps/Zabbix/2022-01-15--zabbix-grafana-dashboard/2022-01-15","docId":"DevOps/Zabbix/2022-01-15--zabbix-grafana-dashboard/index","unlisted":false},{"type":"link","label":"Zabbix v6 NGINX Monitor","href":"/docs/DevOps/Zabbix/2022-01-14--zabbix-nginx-monitor/2022-01-14","docId":"DevOps/Zabbix/2022-01-14--zabbix-nginx-monitor/index","unlisted":false},{"type":"link","label":"Zabbix HTTPS Certificate Monitor","href":"/docs/DevOps/Zabbix/2022-01-14--zabbix-http-cert-monitor/2022-01-14","docId":"DevOps/Zabbix/2022-01-14--zabbix-http-cert-monitor/index","unlisted":false},{"type":"link","label":"Zabbix v6 Docker Monitor","href":"/docs/DevOps/Zabbix/2022-01-14--zabbix-docker-monitor/2022-01-14","docId":"DevOps/Zabbix/2022-01-14--zabbix-docker-monitor/index","unlisted":false},{"type":"link","label":"Zabbix v6 Apache 2 Monitor","href":"/docs/DevOps/Zabbix/2022-01-14--zabbix-apache2-monitor/2022-01-14","docId":"DevOps/Zabbix/2022-01-14--zabbix-apache2-monitor/index","unlisted":false},{"type":"link","label":"Zabbix v6 Docker-Compose Setup","href":"/docs/DevOps/Zabbix/2022-01-13--zabbix-server-v6/2022-01-13","docId":"DevOps/Zabbix/2022-01-13--zabbix-server-v6/index","unlisted":false},{"type":"link","label":"Testing the Zabbix API with Postman","href":"/docs/DevOps/Zabbix/2022-01-13--zabbix-api-testing/2022-01-13","docId":"DevOps/Zabbix/2022-01-13--zabbix-api-testing/index","unlisted":false},{"type":"link","label":"Zabbix Docker-Compose Setup","href":"/docs/DevOps/Zabbix/2021-10-13--zabbix-compose-setup/2021-10-13","docId":"DevOps/Zabbix/2021-10-13--zabbix-compose-setup/index","unlisted":false},{"type":"link","label":"Zabbix Apache 2 Monitor","href":"/docs/DevOps/Zabbix/2021-01-14--zabbix-apache2-monitor/2021-10-14","docId":"DevOps/Zabbix/2021-01-14--zabbix-apache2-monitor/index","unlisted":false},{"type":"link","label":"Slack Notifications in DevOps","href":"/docs/DevOps/Zabbix/2020-09-05--slack-notifications-in-devops/2020-09-05","docId":"DevOps/Zabbix/2020-09-05--slack-notifications-in-devops/index","unlisted":false},{"type":"link","label":"Zabbix Multi-Tenant NGINX Docker Ingress","href":"/docs/DevOps/Zabbix/2020-07-20--zabbix-behind-nginx/2020-07-20","docId":"DevOps/Zabbix/2020-07-20--zabbix-behind-nginx/index","unlisted":false},{"type":"link","label":"Zabbix Company Logo","href":"/docs/DevOps/Zabbix/2020-07-19--zabbix-company-logo/2020-07-19","docId":"DevOps/Zabbix/2020-07-19--zabbix-company-logo/index","unlisted":false},{"type":"link","label":"Zabbix Email Notifications","href":"/docs/DevOps/Zabbix/2020-07-18--zabbix-email-notification/2020-07-18","docId":"DevOps/Zabbix/2020-07-18--zabbix-email-notification/index","unlisted":false},{"type":"link","label":"Zabbix Monitoring a Website","href":"/docs/DevOps/Zabbix/2020-07-17--zabbix-website-monitor/2020-07-17","docId":"DevOps/Zabbix/2020-07-17--zabbix-website-monitor/index","unlisted":false},{"type":"link","label":"Zabbix Agent","href":"/docs/DevOps/Zabbix/2020-07-16--zabbix-agent/2020-07-16","docId":"DevOps/Zabbix/2020-07-16--zabbix-agent/index","unlisted":false},{"type":"link","label":"Zabbix Docker Installation","href":"/docs/DevOps/Zabbix/2020-07-15--zabbix-docker-installation/2020-07-15","docId":"DevOps/Zabbix/2020-07-15--zabbix-docker-installation/index","unlisted":false},{"type":"link","label":"Installing Nagios4 on Ubuntu Server 20.04","href":"/docs/DevOps/Zabbix/2020-07-14--nagios-ubuntu-install/2020-07-14","docId":"DevOps/Zabbix/2020-07-14--nagios-ubuntu-install/index","unlisted":false},{"type":"link","label":"Installing Nagios4 with Docker","href":"/docs/DevOps/Zabbix/2020-07-12--nagios-docker-install/2020-07-12","docId":"DevOps/Zabbix/2020-07-12--nagios-docker-install/index","unlisted":false}],"href":"/docs/category/zabbix"},{"type":"category","label":"Server Provisioning","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Uptime Kuma","href":"/docs/DevOps/Provisioning/2024-01-18--uptime-kuma-monitoring/2024-01-18","docId":"DevOps/Provisioning/2024-01-18--uptime-kuma-monitoring/index","unlisted":false},{"type":"link","label":"ntfy Notification Service","href":"/docs/DevOps/Provisioning/2024-01-17--ntfy-notification-service/2024-01-17","docId":"DevOps/Provisioning/2024-01-17--ntfy-notification-service/index","unlisted":false},{"type":"link","label":"Provision OSticket with Docker (2023)","href":"/docs/DevOps/Provisioning/2023-03-09--os-ticket-docker-2023/2023-03-09","docId":"DevOps/Provisioning/2023-03-09--os-ticket-docker-2023/index","unlisted":false},{"type":"link","label":"Gatsby Blog with a MeiLi Search Backend","href":"/docs/DevOps/Provisioning/2023-02-13--meili-search-gatsby/2023-02-13","docId":"DevOps/Provisioning/2023-02-13--meili-search-gatsby/index","unlisted":false},{"type":"link","label":"Deploy Mautic with Docker","href":"/docs/DevOps/Provisioning/2022-11-16--mautic-docker/2022-11-16","docId":"DevOps/Provisioning/2022-11-16--mautic-docker/index","unlisted":false},{"type":"link","label":"Deploy a cPhalcon App with Docker","href":"/docs/DevOps/Provisioning/2022-11-07--cphalcon-docker/2022-11-07","docId":"DevOps/Provisioning/2022-11-07--cphalcon-docker/index","unlisted":false},{"type":"link","label":"OSticket REST API Calls","href":"/docs/DevOps/Provisioning/2022-10-27--os-ticket-rest-api/2022-10-27","docId":"DevOps/Provisioning/2022-10-27--os-ticket-rest-api/index","unlisted":false},{"type":"link","label":"Provision OSticket with Docker","href":"/docs/DevOps/Provisioning/2022-10-16--os-ticket-docker/2022-10-16","docId":"DevOps/Provisioning/2022-10-16--os-ticket-docker/index","unlisted":false},{"type":"link","label":"Bind9 Server Configuration","href":"/docs/DevOps/Provisioning/2022-01-27--bind9-configuration/2022-01-27","docId":"DevOps/Provisioning/2022-01-27--bind9-configuration/index","unlisted":false},{"type":"link","label":"DNS Over TLS Using BIND And Nginx","href":"/docs/DevOps/Provisioning/2022-01-26--dns-over-TLS-docker/2022-01-26","docId":"DevOps/Provisioning/2022-01-26--dns-over-TLS-docker/index","unlisted":false},{"type":"link","label":"Running a DNS Server with Docker","href":"/docs/DevOps/Provisioning/2022-01-25--installing-bind9-docker/2022-01-25","docId":"DevOps/Provisioning/2022-01-25--installing-bind9-docker/index","unlisted":false},{"type":"link","label":"Getting to know the BIND9 DNS Server with Docker","href":"/docs/DevOps/Provisioning/2022-01-24--getting-to-know-bind9-docker/2022-01-24","docId":"DevOps/Provisioning/2022-01-24--getting-to-know-bind9-docker/index","unlisted":false},{"type":"link","label":"Installing a Discourse Forum on Debian Bullseye with Docker","href":"/docs/DevOps/Provisioning/2022-01-23--installing-discourse-docker/2022-01-23","docId":"DevOps/Provisioning/2022-01-23--installing-discourse-docker/index","unlisted":false},{"type":"link","label":"Matrix Secure Messaging","href":"/docs/DevOps/Provisioning/2021-10-25--matrix-secure-messaging/2021-10-25","docId":"DevOps/Provisioning/2021-10-25--matrix-secure-messaging/index","unlisted":false},{"type":"link","label":"Setting up Wordpress with Traefik v2","href":"/docs/DevOps/Provisioning/2021-10-12--traefik-third-attempt/2021-10-12","docId":"DevOps/Provisioning/2021-10-12--traefik-third-attempt/index","unlisted":false},{"type":"link","label":"Traefik v2 Webproxy Configuration - 2nd Attempt","href":"/docs/DevOps/Provisioning/2021-10-12--traefik-second-attempt/2021-10-12","docId":"DevOps/Provisioning/2021-10-12--traefik-second-attempt/index","unlisted":false},{"type":"link","label":"Traefik v2 Webproxy Configuration - 1st Attempt","href":"/docs/DevOps/Provisioning/2021-10-12--traefik-configuration/2021-10-12","docId":"DevOps/Provisioning/2021-10-12--traefik-configuration/index","unlisted":false},{"type":"link","label":"PostgreSQL 14 Database Refresher :: Working with JSON & Node.js","href":"/docs/DevOps/Provisioning/2021-09-14--postgres-refresher-node-json/2021-09-14","docId":"DevOps/Provisioning/2021-09-14--postgres-refresher-node-json/index","unlisted":false},{"type":"link","label":"PostgreSQL 14 Database Refresher :: Working with GraphQL","href":"/docs/DevOps/Provisioning/2021-09-14--postgres-refresher-hasura/2021-09-14","docId":"DevOps/Provisioning/2021-09-14--postgres-refresher-hasura/index","unlisted":false},{"type":"link","label":"PostgreSQL 14 Database Refresher :: Introduction Part II","href":"/docs/DevOps/Provisioning/2021-09-13--postgres-refresher-part-ii/2021-09-13","docId":"DevOps/Provisioning/2021-09-13--postgres-refresher-part-ii/index","unlisted":false},{"type":"link","label":"PostgreSQL 14 Database Refresher :: Introduction Part I","href":"/docs/DevOps/Provisioning/2021-09-13--postgres-refresher-part-i/2021-09-13","docId":"DevOps/Provisioning/2021-09-13--postgres-refresher-part-i/index","unlisted":false},{"type":"link","label":"Loki - Promtail & Grafana for System Logs.","href":"/docs/DevOps/Provisioning/2021-04-07--loki-prometheus-grafana/2021-04-07","docId":"DevOps/Provisioning/2021-04-07--loki-prometheus-grafana/index","unlisted":false},{"type":"link","label":"ownCloud Infinite Scale Stack","href":"/docs/DevOps/Provisioning/2021-01-27-owncloud-ocis/2021-01-27","docId":"DevOps/Provisioning/2021-01-27-owncloud-ocis/index","unlisted":false},{"type":"link","label":"Node.js FTP Server","href":"/docs/DevOps/Provisioning/2021-01-23-nodejs-file-server/2021-01-23","docId":"DevOps/Provisioning/2021-01-23-nodejs-file-server/index","unlisted":false},{"type":"link","label":"File Transfer Tool in Node.js","href":"/docs/DevOps/Provisioning/2021-01-22-file-transfer-tools-in-nodejs/2021-01-22","docId":"DevOps/Provisioning/2021-01-22-file-transfer-tools-in-nodejs/index","unlisted":false},{"type":"link","label":"Installing Wazuh with Docker Compose","href":"/docs/DevOps/Provisioning/2020-10-02--installing-wazuh-in-docker/2020-10-02","docId":"DevOps/Provisioning/2020-10-02--installing-wazuh-in-docker/index","unlisted":false},{"type":"link","label":"Installing OpenProject with Docker Compose","href":"/docs/DevOps/Provisioning/2020-10-01--installing-openproject-in-docker/2020-10-01","docId":"DevOps/Provisioning/2020-10-01--installing-openproject-in-docker/index","unlisted":false},{"type":"link","label":"Docker Compose Networking","href":"/docs/DevOps/Provisioning/2020-09-02--docker-compose-networking/2020-09-02","docId":"DevOps/Provisioning/2020-09-02--docker-compose-networking/index","unlisted":false},{"type":"link","label":"Serving Static Files with Hapi and Docker","href":"/docs/DevOps/Provisioning/2020-08-29--static-server-with-hapi-and-docker/2020-08-29","docId":"DevOps/Provisioning/2020-08-29--static-server-with-hapi-and-docker/index","unlisted":false},{"type":"link","label":"Infrastructure as Code","href":"/docs/DevOps/Provisioning/2020-07-13--infrastructure-as-code/2020-07-13","docId":"DevOps/Provisioning/2020-07-13--infrastructure-as-code/index","unlisted":false},{"type":"link","label":"Developing WikiJS in Docker","href":"/docs/DevOps/Provisioning/2020-06-07--setting-up-wikijs-in-docker/2020-06-07","docId":"DevOps/Provisioning/2020-06-07--setting-up-wikijs-in-docker/index","unlisted":false},{"type":"link","label":"Vanilla Forums Installation on Debian","href":"/docs/DevOps/Provisioning/2019-09-16--installing-vanilla-forum/2019-09-16","docId":"DevOps/Provisioning/2019-09-16--installing-vanilla-forum/index","unlisted":false},{"type":"link","label":"User Login with Facebook for Discourse","href":"/docs/DevOps/Provisioning/2019-06-21--using-facebook-auth-in-discourse/2019-06-21","docId":"DevOps/Provisioning/2019-06-21--using-facebook-auth-in-discourse/index","unlisted":false},{"type":"link","label":"User Login with Github for Discourse","href":"/docs/DevOps/Provisioning/2019-06-20--using-github-auth-in-discourse/2019-06-19","docId":"DevOps/Provisioning/2019-06-20--using-github-auth-in-discourse/index","unlisted":false},{"type":"link","label":"User Login with Twitter for Discourse","href":"/docs/DevOps/Provisioning/2019-06-19--using-twitter-auth-in-discourse/2019-06-20","docId":"DevOps/Provisioning/2019-06-19--using-twitter-auth-in-discourse/index","unlisted":false},{"type":"link","label":"User Login with Google OAuth2 for Discourse","href":"/docs/DevOps/Provisioning/2019-06-18--using-oauth2-in-discourse/2019-06-18","docId":"DevOps/Provisioning/2019-06-18--using-oauth2-in-discourse/index","unlisted":false},{"type":"link","label":"Migrating from vBulletin 5 to Discourse on CentOS 8","href":"/docs/DevOps/Provisioning/2019-06-16--migrating-from-vbulletin-to-discourse-on-centos8/2019-06-16","docId":"DevOps/Provisioning/2019-06-16--migrating-from-vbulletin-to-discourse-on-centos8/index","unlisted":false},{"type":"link","label":"Installing Discourse on Centos 8","href":"/docs/DevOps/Provisioning/2019-06-15--installing-discourse-on-centos8/2019-06-15","docId":"DevOps/Provisioning/2019-06-15--installing-discourse-on-centos8/index","unlisted":false},{"type":"link","label":"Sensors Data and Grafana","href":"/docs/DevOps/Provisioning/2019-01-08--creating-a-grafana-dashboard/2019-01-08","docId":"DevOps/Provisioning/2019-01-08--creating-a-grafana-dashboard/index","unlisted":false},{"type":"link","label":"Red Hat Certified Specialist in Containerized Application Development","href":"/docs/DevOps/Provisioning/2018-12-27--red-hat-containerized-application-development-rhcs/2018-12-27","docId":"DevOps/Provisioning/2018-12-27--red-hat-containerized-application-development-rhcs/index","unlisted":false},{"type":"link","label":"Getting started with PostgreSQL in Windows 10","href":"/docs/DevOps/Provisioning/2018-11-10--postgresql-getting-started/2018-11-10","docId":"DevOps/Provisioning/2018-11-10--postgresql-getting-started/index","unlisted":false},{"type":"link","label":"How to wrap your Source Code into a Docker Container","href":"/docs/DevOps/Provisioning/2018-01-28--express-generator-dockerrized/2018-01-28","docId":"DevOps/Provisioning/2018-01-28--express-generator-dockerrized/index","unlisted":false},{"type":"link","label":"Link your Node Source Code into a Docker Container","href":"/docs/DevOps/Provisioning/2018-01-27--express-generator-app-docker/2018-01-27","docId":"DevOps/Provisioning/2018-01-27--express-generator-app-docker/index","unlisted":false},{"type":"link","label":"Run your Node.js app from a Docker Container","href":"/docs/DevOps/Provisioning/2018-01-26--node-express-docker-container/2018-01-26","docId":"DevOps/Provisioning/2018-01-26--node-express-docker-container/index","unlisted":false},{"type":"link","label":"Proxima Centauri II","href":"/docs/DevOps/Provisioning/2017-09-06--developing-software-in-china-2/2017-09-06","docId":"DevOps/Provisioning/2017-09-06--developing-software-in-china-2/index","unlisted":false},{"type":"link","label":"Proxima Centauri","href":"/docs/DevOps/Provisioning/2017-09-05--developing-software-in-china/2017-09-05","docId":"DevOps/Provisioning/2017-09-05--developing-software-in-china/index","unlisted":false},{"type":"link","label":"Using SVN Subversion on Windows 10","href":"/docs/DevOps/Provisioning/2010-02-02--svn-subversion-windows/2010-02-02","docId":"DevOps/Provisioning/2010-02-02--svn-subversion-windows/index","unlisted":false}],"href":"/docs/category/server-provisioning"},{"type":"category","label":"GitOps","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Github Passkeys","href":"/docs/DevOps/GitOps/2023-10-28-github-passkey/2023-10-28","docId":"DevOps/GitOps/2023-10-28-github-passkey/index","unlisted":false},{"type":"link","label":"Go Gitlab CI Pipeline","href":"/docs/DevOps/GitOps/2022-11-10-go-gitlab-ci-pipeline/2022-11-10","docId":"DevOps/GitOps/2022-11-10-go-gitlab-ci-pipeline/index","unlisted":false},{"type":"link","label":"Install Gitlab with Docker-Compose (Debian Bullseye)","href":"/docs/DevOps/GitOps/2022-03-16--gitlab-docker-compose-on-localhost/2022-03-16","docId":"DevOps/GitOps/2022-03-16--gitlab-docker-compose-on-localhost/index","unlisted":false},{"type":"link","label":"Gatsby Build Gitlab CI Pipeline","href":"/docs/DevOps/GitOps/2021-02-25-gatsby-build-gitlab-pipeline/2021-02-25","docId":"DevOps/GitOps/2021-02-25-gatsby-build-gitlab-pipeline/index","unlisted":false},{"type":"link","label":"Working with Gitlab","href":"/docs/DevOps/GitOps/2020-08-04--working-with-gitlab/2020-08-04","docId":"DevOps/GitOps/2020-08-04--working-with-gitlab/index","unlisted":false},{"type":"link","label":"Gitlab as Docker Registry","href":"/docs/DevOps/GitOps/2020-08-03--gitlab-as-docker-registry/2020-08-03","docId":"DevOps/GitOps/2020-08-03--gitlab-as-docker-registry/index","unlisted":false},{"type":"link","label":"Setting up Gitlab","href":"/docs/DevOps/GitOps/2020-08-02--gitlab-setup/2020-08-02","docId":"DevOps/GitOps/2020-08-02--gitlab-setup/index","unlisted":false},{"type":"link","label":"Installing Gitlab on Ubuntu Server 20.04","href":"/docs/DevOps/GitOps/2020-08-01--gitlab-install-on-ubuntu-server/2020-08-01","docId":"DevOps/GitOps/2020-08-01--gitlab-install-on-ubuntu-server/index","unlisted":false},{"type":"link","label":"Running Gitlab as Docker Registry","href":"/docs/DevOps/GitOps/2020-02-02--docker-images-in-gitlab/2020-02-02","docId":"DevOps/GitOps/2020-02-02--docker-images-in-gitlab/index","unlisted":false},{"type":"link","label":"Running Gitlab in Podman on CentOS8","href":"/docs/DevOps/GitOps/2020-02-01--gitlab-in-podman-on-centos8/2020-02-01","docId":"DevOps/GitOps/2020-02-01--gitlab-in-podman-on-centos8/index","unlisted":false}],"href":"/docs/category/gitops"},{"type":"category","label":"Kubernetes","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Kubernetes Beyond the Edge","href":"/docs/DevOps/Kubernetes/2022-11-19--k3s-air-gapped-kubernetes/2022-11-19","docId":"DevOps/Kubernetes/2022-11-19--k3s-air-gapped-kubernetes/index","unlisted":false},{"type":"link","label":"Setting up an OKD Cluster","href":"/docs/DevOps/Kubernetes/2019-03-05--first-openshift3-cluster/2019-03-05","docId":"DevOps/Kubernetes/2019-03-05--first-openshift3-cluster/index","unlisted":false},{"type":"link","label":"Red Hat OpenShift 3 Container Platform","href":"/docs/DevOps/Kubernetes/2019-03-02--installing-openshift-3-on-centos-7/2019-03-02","docId":"DevOps/Kubernetes/2019-03-02--installing-openshift-3-on-centos-7/index","unlisted":false},{"type":"link","label":"Kubernetes Traefik Ingress","href":"/docs/DevOps/Kubernetes/2019-02-01--kubernetes-traefik-ingress/2019-02-01","docId":"DevOps/Kubernetes/2019-02-01--kubernetes-traefik-ingress/index","unlisted":false},{"type":"link","label":"Kubernetes the Chinese Way","href":"/docs/DevOps/Kubernetes/2019-01-27--kubernetes-the-chinese-way/2019-01-27","docId":"DevOps/Kubernetes/2019-01-27--kubernetes-the-chinese-way/index","unlisted":false},{"type":"link","label":"Kubernetes NGINX Ingress","href":"/docs/DevOps/Kubernetes/2019-01-22--kubernetes-nginx-ingress/2019-01-22","docId":"DevOps/Kubernetes/2019-01-22--kubernetes-nginx-ingress/index","unlisted":false},{"type":"link","label":"Kubernetes NGINX https Service","href":"/docs/DevOps/Kubernetes/2019-01-21--kubernetes-nginx-https-service/2019-01-21","docId":"DevOps/Kubernetes/2019-01-21--kubernetes-nginx-https-service/index","unlisted":false},{"type":"link","label":"Kubernetes Bare Metal Ingress","href":"/docs/DevOps/Kubernetes/2019-01-21--kubernetes-bare-metal-ingress/2019-01-21","docId":"DevOps/Kubernetes/2019-01-21--kubernetes-bare-metal-ingress/index","unlisted":false},{"type":"link","label":"Kubernetes Cluster Monitoring & Logging","href":"/docs/DevOps/Kubernetes/2019-01-19--kubernetes-cluster-logging/2019-01-19","docId":"DevOps/Kubernetes/2019-01-19--kubernetes-cluster-logging/index","unlisted":false},{"type":"link","label":"Kubernetes and Microservices","href":"/docs/DevOps/Kubernetes/2019-01-17--kubernetes-and-microservices/2019-01-17","docId":"DevOps/Kubernetes/2019-01-17--kubernetes-and-microservices/index","unlisted":false},{"type":"link","label":"Creating a Kubernetes Cluster","href":"/docs/DevOps/Kubernetes/2019-01-15--creating-a-kubernetes-cluster/2019-01-15","docId":"DevOps/Kubernetes/2019-01-15--creating-a-kubernetes-cluster/index","unlisted":false},{"type":"link","label":"Managing Containers in Kubernetes","href":"/docs/DevOps/Kubernetes/2019-01-02--managing-containers-in-kubernetes/2019-01-02","docId":"DevOps/Kubernetes/2019-01-02--managing-containers-in-kubernetes/index","unlisted":false}],"href":"/docs/category/kubernetes"},{"type":"category","label":"NGINX","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"NGINX HTTP/2 Docker Ingress","href":"/docs/DevOps/NGINX/2023-06-13-nginx-docker-ingress/2023-06-13","docId":"DevOps/NGINX/2023-06-13-nginx-docker-ingress/index","unlisted":false},{"type":"link","label":"NGINX Websocket Proxy","href":"/docs/DevOps/NGINX/2022-12-08-nginx-websocket-proxy/2022-12-08","docId":"DevOps/NGINX/2022-12-08-nginx-websocket-proxy/index","unlisted":false},{"type":"link","label":"NGINX TCP/UDP Load Balancing","href":"/docs/DevOps/NGINX/2022-11-17-nginx-udp-tcp-load-balancing/2022-11-17","docId":"DevOps/NGINX/2022-11-17-nginx-udp-tcp-load-balancing/index","unlisted":false},{"type":"link","label":"NGINX Redirect based on User Agent","href":"/docs/DevOps/NGINX/2021-02-23-nginx-agent-redirect/2021-02-23","docId":"DevOps/NGINX/2021-02-23-nginx-agent-redirect/index","unlisted":false},{"type":"link","label":"Setting up Certbot Auto-renewal for NGINX (Maintenance Mode)","href":"/docs/DevOps/NGINX/2021-07-29--certbot-nginx-autorenewal/2021-07-29","docId":"DevOps/NGINX/2021-07-29--certbot-nginx-autorenewal/index","unlisted":false},{"type":"link","label":"NGINX Docker Ingress for your Gatsby Build","href":"/docs/DevOps/NGINX/2021-02-22-nginx-docker-ingress/2021-02-22","docId":"DevOps/NGINX/2021-02-22-nginx-docker-ingress/index","unlisted":false},{"type":"link","label":"NGINX Docker Multihost","href":"/docs/DevOps/NGINX/2020-08-30--nginx-docker-multihost/2020-08-30","docId":"DevOps/NGINX/2020-08-30--nginx-docker-multihost/index","unlisted":false},{"type":"link","label":"NGINX Docker with Certbot","href":"/docs/DevOps/NGINX/2020-08-28--nginx-docker-certbot/2020-08-27","docId":"DevOps/NGINX/2020-08-28--nginx-docker-certbot/index","unlisted":false},{"type":"link","label":"NGINX Docker with SSL Encryption (Self-signed)","href":"/docs/DevOps/NGINX/2020-08-27--nginx-docker-ssl-certs-self-signed/2020-08-27","docId":"DevOps/NGINX/2020-08-27--nginx-docker-ssl-certs-self-signed/index","unlisted":false},{"type":"link","label":"NGINX Docker Setup","href":"/docs/DevOps/NGINX/2020-08-26--nginx-docker-setup/2020-08-26","docId":"DevOps/NGINX/2020-08-26--nginx-docker-setup/index","unlisted":false},{"type":"link","label":"Securing Webservers - Apache and NGINX","href":"/docs/DevOps/NGINX/2020-07-29--securing-apache-and-nginx/2020-07-29","docId":"DevOps/NGINX/2020-07-29--securing-apache-and-nginx/index","unlisted":false},{"type":"link","label":"Adding an OBS Stream to your Website","href":"/docs/DevOps/NGINX/2019-11-08--nginx-rtmp-website/2019-11-08","docId":"DevOps/NGINX/2019-11-08--nginx-rtmp-website/index","unlisted":false},{"type":"link","label":"Building an RTMP Streaming Server with Podman","href":"/docs/DevOps/NGINX/2019-11-07--nginx-rtmp-streaming-container/2019-11-07","docId":"DevOps/NGINX/2019-11-07--nginx-rtmp-streaming-container/index","unlisted":false},{"type":"link","label":"NGINX Ingress with Cert-Manager","href":"/docs/DevOps/NGINX/2019-02-05--nginx-ingress-cert-manager/2019-02-05","docId":"DevOps/NGINX/2019-02-05--nginx-ingress-cert-manager/index","unlisted":false},{"type":"link","label":"NGINX, Node.js & Security","href":"/docs/DevOps/NGINX/2017-12-24--nginx-node-security/2017-12-24","docId":"DevOps/NGINX/2017-12-24--nginx-node-security/index","unlisted":false},{"type":"link","label":"Using NGINX as proxy for your nodejs apps","href":"/docs/DevOps/NGINX/2017-10-01--using-nginx-as-proxy-for-your-nodejs-apps/2017-10-01","docId":"DevOps/NGINX/2017-10-01--using-nginx-as-proxy-for-your-nodejs-apps/index","unlisted":false}],"href":"/docs/category/nginx"},{"type":"category","label":"Elasticsearch","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Introduction to MeiLi Search with Docker","href":"/docs/DevOps/Elasticsearch/2023-02-10--meili-rusty-elastic-docker/2023-02-10","docId":"DevOps/Elasticsearch/2023-02-10--meili-rusty-elastic-docker/index","unlisted":false},{"type":"link","label":"Opensearch Rest API","href":"/docs/DevOps/Elasticsearch/2022-10-12--opensearch-rest-api/2022-10-12","docId":"DevOps/Elasticsearch/2022-10-12--opensearch-rest-api/index","unlisted":false},{"type":"link","label":"Opensearch & Dashboard","href":"/docs/DevOps/Elasticsearch/2022-10-11--opensearch-docker-compose/2022-10-11","docId":"DevOps/Elasticsearch/2022-10-11--opensearch-docker-compose/index","unlisted":false},{"type":"link","label":"Elasticsearch v8, Filebeat (Docker) and Apache","href":"/docs/DevOps/Elasticsearch/2022-02-06--elasticsearch-v8-data-ingestion-apache/2022-02-06","docId":"DevOps/Elasticsearch/2022-02-06--elasticsearch-v8-data-ingestion-apache/index","unlisted":false},{"type":"link","label":"Elasticsearch & Kibana v8 Index Management","href":"/docs/DevOps/Elasticsearch/2022-02-05--kibana-v8-index-management/2022-02-05","docId":"DevOps/Elasticsearch/2022-02-05--kibana-v8-index-management/index","unlisted":false},{"type":"link","label":"Elasticsearch & Kibana v8 Search Cheat Sheet","href":"/docs/DevOps/Elasticsearch/2022-02-04--kibana-v8-search-queries/2022-02-04","docId":"DevOps/Elasticsearch/2022-02-04--kibana-v8-search-queries/index","unlisted":false},{"type":"link","label":"Elasticsearch v8, Filebeat (Docker) and NGINX","href":"/docs/DevOps/Elasticsearch/2022-02-03--elasticsearch-v8-data-ingestion/2022-02-03","docId":"DevOps/Elasticsearch/2022-02-03--elasticsearch-v8-data-ingestion/index","unlisted":false},{"type":"link","label":"Performing an Elasticsearch v8 Upgrade","href":"/docs/DevOps/Elasticsearch/2022-02-02--elasticsearch-v8-upgrade/2022-02-02","docId":"DevOps/Elasticsearch/2022-02-02--elasticsearch-v8-upgrade/index","unlisted":false},{"type":"link","label":"Elastic Filebeat and NGINX Access Logs","href":"/docs/DevOps/Elasticsearch/2021-04-01-elastic-filebeats-for-nginx-logs/2021-04-01","docId":"DevOps/Elasticsearch/2021-04-01-elastic-filebeats-for-nginx-logs/index","unlisted":false},{"type":"link","label":"Elastic Filebeat and Apache Access Logs","href":"/docs/DevOps/Elasticsearch/2021-03-31-elastic-filebeats-for-apache-logs/2021-03-31","docId":"DevOps/Elasticsearch/2021-03-31-elastic-filebeats-for-apache-logs/index","unlisted":false},{"type":"link","label":"Elasticsearch 7 and Filebeats","href":"/docs/DevOps/Elasticsearch/2021-03-30-elasticsearch7-and-filebeats/2021-03-30","docId":"DevOps/Elasticsearch/2021-03-30-elasticsearch7-and-filebeats/index","unlisted":false},{"type":"link","label":"Elasticsearch 7 Data Transformation","href":"/docs/DevOps/Elasticsearch/2021-03-29-elasticsearch7-data-transformations/2021-03-29","docId":"DevOps/Elasticsearch/2021-03-29-elasticsearch7-data-transformations/index","unlisted":false},{"type":"link","label":"Elasticsearch 7 Timeseries","href":"/docs/DevOps/Elasticsearch/2021-03-28-elasticsearch7-timeseries/2021-03-28","docId":"DevOps/Elasticsearch/2021-03-28-elasticsearch7-timeseries/index","unlisted":false},{"type":"link","label":"Elasticsearch 7 Aggregations","href":"/docs/DevOps/Elasticsearch/2021-03-27-elasticsearch7-aggregations/2021-03-27","docId":"DevOps/Elasticsearch/2021-03-27-elasticsearch7-aggregations/index","unlisted":false},{"type":"link","label":"Elasticsearch 7 to log Linux System Events","href":"/docs/DevOps/Elasticsearch/2021-03-26-elasticsearch7-for-syslog-messages/2021-03-26","docId":"DevOps/Elasticsearch/2021-03-26-elasticsearch7-for-syslog-messages/index","unlisted":false},{"type":"category","label":"Log all the searches going through Elasticsearch","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Elasticsearch Cheat Sheet","href":"/docs/DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/elasticsearch-cheat-sheet","docId":"DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/cheat-sheet","unlisted":false}],"href":"/docs/DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/2021-03-25"},{"type":"link","label":"Logstash 7 and Common Log Pattern","href":"/docs/DevOps/Elasticsearch/2021-03-24-logstash-common-grok-pattern/2021-03-24","docId":"DevOps/Elasticsearch/2021-03-24-logstash-common-grok-pattern/index","unlisted":false},{"type":"link","label":"Logstash 7 Working with Unstructured Data","href":"/docs/DevOps/Elasticsearch/2021-03-23-logstash-working-with-unstructured-data/2021-03-23","docId":"DevOps/Elasticsearch/2021-03-23-logstash-working-with-unstructured-data/index","unlisted":false},{"type":"link","label":"Logstash 7 Working with Structured Data","href":"/docs/DevOps/Elasticsearch/2021-03-22-logstash-working-with-structured-data/2021-03-22","docId":"DevOps/Elasticsearch/2021-03-22-logstash-working-with-structured-data/index","unlisted":false},{"type":"link","label":"Logstash 7 Digesting Webserver Logs","href":"/docs/DevOps/Elasticsearch/2021-03-21-logstash-digesting-data/2021-03-21","docId":"DevOps/Elasticsearch/2021-03-21-logstash-digesting-data/index","unlisted":false},{"type":"link","label":"Elasticsearch 7 Refresher","href":"/docs/DevOps/Elasticsearch/2021-03-20-elasticsearch-7-refresher/2021-03-20","docId":"DevOps/Elasticsearch/2021-03-20-elasticsearch-7-refresher/index","unlisted":false},{"type":"link","label":"Elasticsearch in Docker","href":"/docs/DevOps/Elasticsearch/2020-06-01--elasticsearch-docker/2020-06-01","docId":"DevOps/Elasticsearch/2020-06-01--elasticsearch-docker/index","unlisted":false},{"type":"link","label":"Elasticsearch 7 with Docker Compose","href":"/docs/DevOps/Elasticsearch/2019-09-08--elasticsearch_7-5_docker/2019-09-08","docId":"DevOps/Elasticsearch/2019-09-08--elasticsearch_7-5_docker/index","unlisted":false},{"type":"link","label":"Securing Elasticsearch with ReadOnlyREST","href":"/docs/DevOps/Elasticsearch/2018-01-01--securing-elasticsearch-readonlyrest/2018-01-01","docId":"DevOps/Elasticsearch/2018-01-01--securing-elasticsearch-readonlyrest/index","unlisted":false},{"type":"link","label":"Securing Elasticsearch with X-Pack","href":"/docs/DevOps/Elasticsearch/2017-12-31--securing-elasticsearch-xpack/2017-12-31","docId":"DevOps/Elasticsearch/2017-12-31--securing-elasticsearch-xpack/index","unlisted":false},{"type":"link","label":"Elasticsearch and Kibana","href":"/docs/DevOps/Elasticsearch/2017-12-26--elasticsearch-kibana/2017-12-16","docId":"DevOps/Elasticsearch/2017-12-26--elasticsearch-kibana/index","unlisted":false},{"type":"link","label":"React Search Interface","href":"/docs/DevOps/Elasticsearch/2017-12-05--elasticsearch-react-example/2017-12-05","docId":"DevOps/Elasticsearch/2017-12-05--elasticsearch-react-example/index","unlisted":false},{"type":"link","label":"Search Engine Setup and Configuration","href":"/docs/DevOps/Elasticsearch/2017-10-03--search-engine-setup-and-configuration/2017-10-03","docId":"DevOps/Elasticsearch/2017-10-03--search-engine-setup-and-configuration/index","unlisted":false}],"href":"/docs/category/elasticsearch"},{"type":"category","label":"Ansible","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Ansible Tower Practical Examples","href":"/docs/DevOps/Ansible/2021-05-02-ansible-tower-examples/2021-05-02","docId":"DevOps/Ansible/2021-05-02-ansible-tower-examples/index","unlisted":false},{"type":"link","label":"Ansible Tower Workflow Templates","href":"/docs/DevOps/Ansible/2021-05-01-ansible-tower-workflow-templates/2021-05-01","docId":"DevOps/Ansible/2021-05-01-ansible-tower-workflow-templates/index","unlisted":false},{"type":"link","label":"Slack Notifications for Ansible Tower (AWX)","href":"/docs/DevOps/Ansible/2021-04-30-ansible-tower-slack-notifications/2021-04-30","docId":"DevOps/Ansible/2021-04-30-ansible-tower-slack-notifications/index","unlisted":false},{"type":"link","label":"Setting up Ansible Tower (AWX)","href":"/docs/DevOps/Ansible/2021-04-29-ansible-tower-setup/2021-04-29","docId":"DevOps/Ansible/2021-04-29-ansible-tower-setup/index","unlisted":false},{"type":"link","label":"Installing Ansible Tower (AWX in Docker) on RHEL8","href":"/docs/DevOps/Ansible/2021-04-28-ansible-tower-rhel/2021-04-28","docId":"DevOps/Ansible/2021-04-28-ansible-tower-rhel/index","unlisted":false},{"type":"link","label":"Ansible Docker-in-Docker","href":"/docs/DevOps/Ansible/2020-11-26--ansible-dind/2020-11-26","docId":"DevOps/Ansible/2020-11-26--ansible-dind/index","unlisted":false},{"type":"link","label":"Ansible in Gitlab CI Pipelines","href":"/docs/DevOps/Ansible/2020-11-25--ansible-in-gitlab-ci/2020-11-25","docId":"DevOps/Ansible/2020-11-25--ansible-in-gitlab-ci/index","unlisted":false},{"type":"link","label":"Ansible Vault for User Logins","href":"/docs/DevOps/Ansible/2020-11-24--ansible-vault-user-login/2020-11-24","docId":"DevOps/Ansible/2020-11-24--ansible-vault-user-login/index","unlisted":false},{"type":"link","label":"Ansible Getting Serious","href":"/docs/DevOps/Ansible/2020-11-23--ansible-getting-serious/2020-11-23","docId":"DevOps/Ansible/2020-11-23--ansible-getting-serious/index","unlisted":false},{"type":"link","label":"Ansible for Docker Deployment","href":"/docs/DevOps/Ansible/2020-11-22--ansible-and-docker/2020-11-22","docId":"DevOps/Ansible/2020-11-22--ansible-and-docker/index","unlisted":false},{"type":"link","label":"Ansible Vault, Modules & Roles","href":"/docs/DevOps/Ansible/2020-11-21--ansible-modules-and-roles/2020-11-21","docId":"DevOps/Ansible/2020-11-21--ansible-modules-and-roles/index","unlisted":false},{"type":"link","label":"Ansible Copy Cheat Sheet","href":"/docs/DevOps/Ansible/2020-11-20--ansible-copy-cheat-sheet/2020-11-20","docId":"DevOps/Ansible/2020-11-20--ansible-copy-cheat-sheet/index","unlisted":false},{"type":"link","label":"Ansible Playbooks","href":"/docs/DevOps/Ansible/2020-11-19--ansible-playbooks/2020-11-19","docId":"DevOps/Ansible/2020-11-19--ansible-playbooks/index","unlisted":false},{"type":"link","label":"Setting up a Ansible on Debian Buster","href":"/docs/DevOps/Ansible/2020-11-18--ansible-on-debian-buster/2020-11-18","docId":"DevOps/Ansible/2020-11-18--ansible-on-debian-buster/index","unlisted":false}],"href":"/docs/category/ansible"},{"type":"category","label":"Server Security","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Analyzing and Decrypting TLS with Wireshark","href":"/docs/DevOps/Security/2022-09-27--wireshark-with-tls-encryption/2022-09-27","docId":"DevOps/Security/2022-09-27--wireshark-with-tls-encryption/index","unlisted":false},{"type":"link","label":"Securing Webservers - Uncomplicated Firewall","href":"/docs/DevOps/Security/2020-07-28--uncomplicated-firewall-ufw/2020-07-28","docId":"DevOps/Security/2020-07-28--uncomplicated-firewall-ufw/index","unlisted":false},{"type":"link","label":"Securing Webservers - Fail2Ban Ubuntu 20.10","href":"/docs/DevOps/Security/2020-07-28--fail2ban-ubuntu-server/2020-07-28","docId":"DevOps/Security/2020-07-28--fail2ban-ubuntu-server/index","unlisted":false},{"type":"link","label":"Securing Webservers - FirewallD Deployment on Ubuntu 20.04","href":"/docs/DevOps/Security/2020-07-27--firewalld-deployment-ubuntu/2020-07-27","docId":"DevOps/Security/2020-07-27--firewalld-deployment-ubuntu/index","unlisted":false},{"type":"link","label":"Securing Webservers - FirewallD Deployment on Debian 9","href":"/docs/DevOps/Security/2020-07-27--firewalld-deployment-debian/2020-07-27","docId":"DevOps/Security/2020-07-27--firewalld-deployment-debian/index","unlisted":false},{"type":"link","label":"Securing Webservers - FirewallD Deployment on CentOS7","href":"/docs/DevOps/Security/2020-07-27--firewalld-deployment-centos7/2020-07-27","docId":"DevOps/Security/2020-07-27--firewalld-deployment-centos7/index","unlisted":false},{"type":"link","label":"Securing Webservers - FirewallD and fail2ban","href":"/docs/DevOps/Security/2020-07-26--firewalld-configuration/2020-07-26","docId":"DevOps/Security/2020-07-26--firewalld-configuration/index","unlisted":false}],"href":"/docs/category/server-security"},{"type":"category","label":"Linux","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"vsftp on Ubuntu","href":"/docs/DevOps/Linux/2024-01-08--vsftp-ubuntu/2024-01-08","docId":"DevOps/Linux/2024-01-08--vsftp-ubuntu/index","unlisted":false},{"type":"link","label":"From NeoVim to LunarVim","href":"/docs/DevOps/Linux/2023-10-28--lunarvim/2023-10-28","docId":"DevOps/Linux/2023-10-28--lunarvim/index","unlisted":false},{"type":"link","label":"Elgato Streamdeck on Arch Linux","href":"/docs/DevOps/Linux/2023-03-29--installing-the-elgato-streamdeck/2023-03-29","docId":"DevOps/Linux/2023-03-29--installing-the-elgato-streamdeck/index","unlisted":false},{"type":"link","label":"ARM Docker","href":"/docs/DevOps/Linux/2023-02-03--installing-docker-raspberry-pi/2023-02-03","docId":"DevOps/Linux/2023-02-03--installing-docker-raspberry-pi/index","unlisted":false},{"type":"link","label":"Resistance is futile - Borg with Docker","href":"/docs/DevOps/Linux/2022-11-09--docker-borg-backupserver/2022-11-09","docId":"DevOps/Linux/2022-11-09--docker-borg-backupserver/index","unlisted":false},{"type":"link","label":"Check the Filesystem","href":"/docs/DevOps/Linux/2022-11-04--check-filesystem/2022-11-04","docId":"DevOps/Linux/2022-11-04--check-filesystem/index","unlisted":false},{"type":"link","label":"Build a Chrony NTS Client from Source","href":"/docs/DevOps/Linux/2022-09-29--build-an-chrony-nts-client-from-source/2022-09-29","docId":"DevOps/Linux/2022-09-29--build-an-chrony-nts-client-from-source/index","unlisted":false},{"type":"link","label":"NTS-Service and Authenticated Time Synchronization","href":"/docs/DevOps/Linux/2022-09-28--nts-client-setup/2022-09-28","docId":"DevOps/Linux/2022-09-28--nts-client-setup/index","unlisted":false},{"type":"link","label":"Secure Timeserver - NTP with NTS with Docker","href":"/docs/DevOps/Linux/2022-09-15--ntp-over-nts-timeserver/2022-09-21","docId":"DevOps/Linux/2022-09-15--ntp-over-nts-timeserver/index","unlisted":false},{"type":"link","label":"nmap Cheat Sheet","href":"/docs/DevOps/Linux/2022-03-10--nmap-network-scanner/2022-03-10","docId":"DevOps/Linux/2022-03-10--nmap-network-scanner/index","unlisted":false},{"type":"link","label":"Fing CLI Network Scanner on Arch Linux","href":"/docs/DevOps/Linux/2022-03-09--fing-cli-network-scanner/2022-03-09","docId":"DevOps/Linux/2022-03-09--fing-cli-network-scanner/index","unlisted":false},{"type":"link","label":"Using the AVM Fritzbox VPN on Manjaro (KDE)","href":"/docs/DevOps/Linux/2022-03-08--arch-kde-fritz-vpn/2022-03-08","docId":"DevOps/Linux/2022-03-08--arch-kde-fritz-vpn/index","unlisted":false},{"type":"link","label":"FFMPEG Cheat Sheet","href":"/docs/DevOps/Linux/2022-03-07--ffmpeg-cheat-sheet/2022-03-07","docId":"DevOps/Linux/2022-03-07--ffmpeg-cheat-sheet/index","unlisted":false},{"type":"link","label":"Install Davinci Resolve on Arch Linux","href":"/docs/DevOps/Linux/2021-10-26--install-davinci-resolve-on-arch/2021-10-26","docId":"DevOps/Linux/2021-10-26--install-davinci-resolve-on-arch/index","unlisted":false},{"type":"link","label":"Install Mesen in Arch Linux","href":"/docs/DevOps/Linux/2021-10-24--arch-linux-install-mesen/2021-10-24","docId":"DevOps/Linux/2021-10-24--arch-linux-install-mesen/index","unlisted":false},{"type":"link","label":"Install Docker in Arch Linux","href":"/docs/DevOps/Linux/2021-10-24--arch-linux-install-docker/2021-10-24","docId":"DevOps/Linux/2021-10-24--arch-linux-install-docker/index","unlisted":false},{"type":"link","label":"Install Packages in Arch Linux","href":"/docs/DevOps/Linux/2021-10-23--arch-linux-install-packages/2021-10-23","docId":"DevOps/Linux/2021-10-23--arch-linux-install-packages/index","unlisted":false},{"type":"link","label":"The friendly Editor","href":"/docs/DevOps/Linux/2021-10-09--the-friendly-editor/2021-10-09","docId":"DevOps/Linux/2021-10-09--the-friendly-editor/index","unlisted":false},{"type":"link","label":"Editor from Hell","href":"/docs/DevOps/Linux/2021-10-09--editor-from-hell/2021-10-09","docId":"DevOps/Linux/2021-10-09--editor-from-hell/index","unlisted":false},{"type":"link","label":"Installing OpenWRT on a Raspberry Pi 4","href":"/docs/DevOps/Linux/2021-09-02--openwrt-raspberry-pi/2021-09-02","docId":"DevOps/Linux/2021-09-02--openwrt-raspberry-pi/index","unlisted":false},{"type":"link","label":"Installing Kali LINUX on a Raspberry Pi 3","href":"/docs/DevOps/Linux/2021-09-01--kali-linux-raspberry-pi/2021-09-01","docId":"DevOps/Linux/2021-09-01--kali-linux-raspberry-pi/index","unlisted":false},{"type":"link","label":"Installing Deb Packages on RHEL8","href":"/docs/DevOps/Linux/2021-04-14-using-deb-files-on-rhel8/2021-04-14","docId":"DevOps/Linux/2021-04-14-using-deb-files-on-rhel8/index","unlisted":false},{"type":"link","label":"Setting up KVM on RedHat Enterprise Linux","href":"/docs/DevOps/Linux/2021-04-13-installing-kvm-on-red-hat-enterprise-linux/2021-04-13","docId":"DevOps/Linux/2021-04-13-installing-kvm-on-red-hat-enterprise-linux/index","unlisted":false},{"type":"link","label":"Gnome3 Cheat Sheet","href":"/docs/DevOps/Linux/2021-04-12-gnome3-cheat-sheet/2021-04-12","docId":"DevOps/Linux/2021-04-12-gnome3-cheat-sheet/index","unlisted":false},{"type":"link","label":"Installing Free Red Hat Enterprise Linux","href":"/docs/DevOps/Linux/2021-04-11-installing-free-red-hat-enterprise-linux/2021-04-11","docId":"DevOps/Linux/2021-04-11-installing-free-red-hat-enterprise-linux/index","unlisted":false},{"type":"link","label":"Debian Upgrade to Bullseye","href":"/docs/DevOps/Linux/2021-03-15-debian-upgrade-bullseye/2021-03-15","docId":"DevOps/Linux/2021-03-15-debian-upgrade-bullseye/index","unlisted":false},{"type":"link","label":"Activating Root Login on Ubuntu 20.10","href":"/docs/DevOps/Linux/2020-10-20--activating-root-login-ubuntu-20-10/2020-10-20","docId":"DevOps/Linux/2020-10-20--activating-root-login-ubuntu-20-10/index","unlisted":false},{"type":"link","label":"HDD Smart Tools for LINUX","href":"/docs/DevOps/Linux/2020-10-13--smarttools-centos/2020-10-13","docId":"DevOps/Linux/2020-10-13--smarttools-centos/index","unlisted":false},{"type":"link","label":"Installing FirewallD on CentOS 8","href":"/docs/DevOps/Linux/2020-01-07--centos8-firewalld/2020-01-05","docId":"DevOps/Linux/2020-01-07--centos8-firewalld/index","unlisted":false},{"type":"link","label":"CentOS 8 Cockpit Web Console","href":"/docs/DevOps/Linux/2020-01-05--centos8-cockpit/2020-01-05","docId":"DevOps/Linux/2020-01-05--centos8-cockpit/index","unlisted":false},{"type":"link","label":"Podman FTP Server Container","href":"/docs/DevOps/Linux/2019-12-03--podman-ftp-server-container/2019-12-03","docId":"DevOps/Linux/2019-12-03--podman-ftp-server-container/index","unlisted":false},{"type":"link","label":"Kali Linux with Docker for Windows","href":"/docs/DevOps/Linux/2019-09-26--kali-docker-windows/2019-09-26","docId":"DevOps/Linux/2019-09-26--kali-docker-windows/index","unlisted":false},{"type":"link","label":"Podman Cheat Sheet","href":"/docs/DevOps/Linux/2019-09-25--podman-cheat-sheet/2019-09-25","docId":"DevOps/Linux/2019-09-25--podman-cheat-sheet/index","unlisted":false},{"type":"link","label":"Installing Oh-My-Zsh on Ubuntu 20.04","href":"/docs/DevOps/Linux/2019-09-22--zsh-on-ubuntu20/2019-09-22","docId":"DevOps/Linux/2019-09-22--zsh-on-ubuntu20/index","unlisted":false},{"type":"link","label":"Installing Oh-My-Zsh on CentOS8","href":"/docs/DevOps/Linux/2019-09-22--zsh-on-centos8/2019-09-22","docId":"DevOps/Linux/2019-09-22--zsh-on-centos8/index","unlisted":false},{"type":"link","label":"CentOS 8 Network Configuration","href":"/docs/DevOps/Linux/2019-09-22--centos8-network-config/2019-09-22","docId":"DevOps/Linux/2019-09-22--centos8-network-config/index","unlisted":false},{"type":"link","label":"Working with TMUX","href":"/docs/DevOps/Linux/2019-06-17--working-with-tmux/2019-06-17","docId":"DevOps/Linux/2019-06-17--working-with-tmux/index","unlisted":false},{"type":"link","label":"Downloading Docker Images for Offline Use","href":"/docs/DevOps/Linux/2019-06-14--download-and-save-docker-image/2019-06-14","docId":"DevOps/Linux/2019-06-14--download-and-save-docker-image/index","unlisted":false},{"type":"link","label":"Setting up Docker on CentOS 8","href":"/docs/DevOps/Linux/2019-06-07--installing-docker-on-centos8/2019-06-07","docId":"DevOps/Linux/2019-06-07--installing-docker-on-centos8/index","unlisted":false},{"type":"link","label":"Centos Administration","href":"/docs/DevOps/Linux/2019-01-13--centos-administration/2019-01-13","docId":"DevOps/Linux/2019-01-13--centos-administration/index","unlisted":false},{"type":"link","label":"Centos Network Configuration","href":"/docs/DevOps/Linux/2019-01-12--centos-network-configuration/2019-01-12","docId":"DevOps/Linux/2019-01-12--centos-network-configuration/index","unlisted":false},{"type":"link","label":"Ubuntu Server Cannot Stop Docker Container","href":"/docs/DevOps/Linux/2019-01-11--ubuntu-server-app-armour/2019-01-11","docId":"DevOps/Linux/2019-01-11--ubuntu-server-app-armour/index","unlisted":false},{"type":"link","label":"Ubuntu Network Configuration","href":"/docs/DevOps/Linux/2019-01-11--ubuntu-network-configuration/2019-01-11","docId":"DevOps/Linux/2019-01-11--ubuntu-network-configuration/index","unlisted":false},{"type":"link","label":"Ubuntu Server Root SSH Remote Access","href":"/docs/DevOps/Linux/2019-01-11--root-access-ubuntu-server/2019-01-11","docId":"DevOps/Linux/2019-01-11--root-access-ubuntu-server/index","unlisted":false},{"type":"link","label":"Debian SSH Port and Hostname","href":"/docs/DevOps/Linux/2019-01-11--debian-change-ssh-port-hostname/2019-01-11","docId":"DevOps/Linux/2019-01-11--debian-change-ssh-port-hostname/index","unlisted":false},{"type":"link","label":"Red Hat Certified Engineer (RHCE) Exam","href":"/docs/DevOps/Linux/2018-10-27--red-hat-certified-engineer-rhce/2018-10-27","docId":"DevOps/Linux/2018-10-27--red-hat-certified-engineer-rhce/index","unlisted":false}],"href":"/docs/category/linux"},{"type":"category","label":"Windows","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Windows Server 2019 - Docker Daemon","href":"/docs/DevOps/Windows/2019-06-13--windows-server-2019-docker-daemon/2019-06-13","docId":"DevOps/Windows/2019-06-13--windows-server-2019-docker-daemon/index","unlisted":false},{"type":"link","label":"Windows Server 2019 - Active Directory Setup","href":"/docs/DevOps/Windows/2019-06-12--windows-server-2019-active-directory/2019-06-12","docId":"DevOps/Windows/2019-06-12--windows-server-2019-active-directory/index","unlisted":false},{"type":"link","label":"Windows Server 2019 - Active Directory Installation","href":"/docs/DevOps/Windows/2019-06-11--windows-server-2019-active-directory/2019-06-11","docId":"DevOps/Windows/2019-06-11--windows-server-2019-active-directory/index","unlisted":false},{"type":"link","label":"Windows Server 2019 - Scripting and Sharing","href":"/docs/DevOps/Windows/2019-06-10--windows-server-2019-scripting-and-sharing/2019-06-10","docId":"DevOps/Windows/2019-06-10--windows-server-2019-scripting-and-sharing/index","unlisted":false},{"type":"link","label":"Getting Started with Windows Server 2019","href":"/docs/DevOps/Windows/2019-06-09--setting-up-windows-server-2019/2019-06-09","docId":"DevOps/Windows/2019-06-09--setting-up-windows-server-2019/index","unlisted":false},{"type":"link","label":"Umlaute","href":"/docs/DevOps/Windows/2017-12-19--umlaute-on-us-keyboard/2017-12-19","docId":"DevOps/Windows/2017-12-19--umlaute-on-us-keyboard/index","unlisted":false},{"type":"link","label":"Windows Control","href":"/docs/DevOps/Windows/2017-07-07--windows10-control/2017-07-07","docId":"DevOps/Windows/2017-07-07--windows10-control/index","unlisted":false},{"type":"link","label":"Windows CMD","href":"/docs/DevOps/Windows/2017-07-06--windows-cmd/2017-07-06","docId":"DevOps/Windows/2017-07-06--windows-cmd/index","unlisted":false}],"href":"/docs/category/windows"},{"type":"category","label":"Tomcat","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Tomcat 10 Cluster with individual Node Server","href":"/docs/DevOps/Tomcat/2020-12-26-tomcat10-cluster-with-individual-nodes/2020-12-26","docId":"DevOps/Tomcat/2020-12-26-tomcat10-cluster-with-individual-nodes/index","unlisted":false},{"type":"link","label":"Tomcat 10 Docker Cluster","href":"/docs/DevOps/Tomcat/2020-12-25-tomcat10-docker-cluster/2020-12-25","docId":"DevOps/Tomcat/2020-12-25-tomcat10-docker-cluster/index","unlisted":false},{"type":"link","label":"Tomcat 9 Cluster & Loadbalancing","href":"/docs/DevOps/Tomcat/2020-12-24-tomcat9-cluster-and-load-balancing/2020-12-24","docId":"DevOps/Tomcat/2020-12-24-tomcat9-cluster-and-load-balancing/index","unlisted":false},{"type":"link","label":"Tomcat 9 Configuration","href":"/docs/DevOps/Tomcat/2020-12-23-tomcat9-configuration/2020-12-23","docId":"DevOps/Tomcat/2020-12-23-tomcat9-configuration/index","unlisted":false},{"type":"link","label":"Install Tomcat 9 on Ubuntu 20.04","href":"/docs/DevOps/Tomcat/2020-12-22-tomcat9-ubuntu-20-10-installation/2020-12-22","docId":"DevOps/Tomcat/2020-12-22-tomcat9-ubuntu-20-10-installation/index","unlisted":false}],"href":"/docs/category/tomcat"},{"type":"category","label":"Salt","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Salt Orchestration for Docker Containers","href":"/docs/DevOps/Salt/2020-06-25--salt-orchestration-for-docker-containers/2020-06-25","docId":"DevOps/Salt/2020-06-25--salt-orchestration-for-docker-containers/index","unlisted":false},{"type":"link","label":"Saltstack Refresh Course 2: Salt Mines","href":"/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-4-salt-mine/2020-06-23","docId":"DevOps/Salt/2020-06-23--saltestack-refresh-course-4-salt-mine/index","unlisted":false},{"type":"link","label":"Saltstack Refresh Course 2: Highstate","href":"/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-3-highstate/2020-06-23","docId":"DevOps/Salt/2020-06-23--saltestack-refresh-course-3-highstate/index","unlisted":false},{"type":"link","label":"Saltstack Refresh Course 2: Salt State","href":"/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-2-salt-state/2020-06-23","docId":"DevOps/Salt/2020-06-23--saltestack-refresh-course-2-salt-state/index","unlisted":false},{"type":"link","label":"Saltstack Refresh Course 1: Setup","href":"/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-1-setup/2020-06-23","docId":"DevOps/Salt/2020-06-23--saltestack-refresh-course-1-setup/index","unlisted":false},{"type":"link","label":"NGINX Salt State","href":"/docs/DevOps/Salt/2020-06-22--salt-nginx-state/2020-06-22","docId":"DevOps/Salt/2020-06-22--salt-nginx-state/index","unlisted":false},{"type":"link","label":"Salt Beacons Module","href":"/docs/DevOps/Salt/2020-06-21--salt-events-and-thirdparty-apps/2020-06-21","docId":"DevOps/Salt/2020-06-21--salt-events-and-thirdparty-apps/index","unlisted":false},{"type":"link","label":"Salt Reactor and System Events","href":"/docs/DevOps/Salt/2020-06-20--salt-reactor-events/2020-06-20","docId":"DevOps/Salt/2020-06-20--salt-reactor-events/index","unlisted":false},{"type":"link","label":"Salt Mine & Orchestrate","href":"/docs/DevOps/Salt/2020-06-19--salt-mine-orchestrate/2020-06-19","docId":"DevOps/Salt/2020-06-19--salt-mine-orchestrate/index","unlisted":false},{"type":"link","label":"Salt Execution Order","href":"/docs/DevOps/Salt/2020-06-18--salt-execution-order/2020-06-18","docId":"DevOps/Salt/2020-06-18--salt-execution-order/index","unlisted":false},{"type":"link","label":"Salt Pillars & Formulas","href":"/docs/DevOps/Salt/2020-06-17--salt-pillars-formulas/2020-06-17","docId":"DevOps/Salt/2020-06-17--salt-pillars-formulas/index","unlisted":false},{"type":"link","label":"Salt State","href":"/docs/DevOps/Salt/2020-06-16--salt-state/2020-06-16","docId":"DevOps/Salt/2020-06-16--salt-state/index","unlisted":false},{"type":"link","label":"Salty DevOps","href":"/docs/DevOps/Salt/2020-06-15--salty-devops/2020-06-15","docId":"DevOps/Salt/2020-06-15--salty-devops/index","unlisted":false},{"type":"link","label":"Install Salt on Ubuntu Server 20.04","href":"/docs/DevOps/Salt/2020-06-14--install-salt-on-ubuntu-20-04/2020-06-14","docId":"DevOps/Salt/2020-06-14--install-salt-on-ubuntu-20-04/index","unlisted":false}],"href":"/docs/category/salt"}],"href":"/docs/category/devops"},{"type":"category","label":"Machine Learning, AI and Computer Vision","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Machine Learning","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"DLIB Face Recognition","href":"/docs/IoT-and-Machine-Learning/ML/2023-10-01--delib-face-detection/2023-10-01","docId":"IoT-and-Machine-Learning/ML/2023-10-01--delib-face-detection/index","unlisted":false},{"type":"link","label":"Audio Classification with Computer Vision","href":"/docs/IoT-and-Machine-Learning/ML/2023-09-23--yolo8-listen/2023-09-23","docId":"IoT-and-Machine-Learning/ML/2023-09-23--yolo8-listen/index","unlisted":false},{"type":"link","label":"CVAT Semi-automatic and Automatic Annotation","href":"/docs/IoT-and-Machine-Learning/ML/2023-09-21--cvat-automatic-annotation/2023-09-21","docId":"IoT-and-Machine-Learning/ML/2023-09-21--cvat-automatic-annotation/index","unlisted":false},{"type":"link","label":"Computer Vision Annotation Tool (CVAT) Introduction","href":"/docs/IoT-and-Machine-Learning/ML/2023-09-19--cvat-computer-vision-annotation-tool/2023-09-19","docId":"IoT-and-Machine-Learning/ML/2023-09-19--cvat-computer-vision-annotation-tool/index","unlisted":false},{"type":"link","label":"YOLOv8 Nightshift","href":"/docs/IoT-and-Machine-Learning/ML/2023-09-17--yolo8-nightshift/2023-09-17","docId":"IoT-and-Machine-Learning/ML/2023-09-17--yolo8-nightshift/index","unlisted":false},{"type":"link","label":"YOLOv8 License Plate Detection","href":"/docs/IoT-and-Machine-Learning/ML/2023-09-15--yolo8-tracking-and-ocr/2023-09-15","docId":"IoT-and-Machine-Learning/ML/2023-09-15--yolo8-tracking-and-ocr/index","unlisted":false},{"type":"link","label":"Scikit-Learn ML Model Explainability","href":"/docs/IoT-and-Machine-Learning/ML/2023-09-10--model-explainability-shap/2023-09-11","docId":"IoT-and-Machine-Learning/ML/2023-09-10--model-explainability-shap/index","unlisted":false},{"type":"link","label":"Using Tensorflow Models in OpenCV","href":"/docs/IoT-and-Machine-Learning/ML/2023-09-05--semantic-segmentation-in-opencv/2023-09-05","docId":"IoT-and-Machine-Learning/ML/2023-09-05--semantic-segmentation-in-opencv/index","unlisted":false},{"type":"link","label":"YOLOv8 Image Classifier","href":"/docs/IoT-and-Machine-Learning/ML/2023-09-01--yolo-i-know-flowers/2023-09-01","docId":"IoT-and-Machine-Learning/ML/2023-09-01--yolo-i-know-flowers/index","unlisted":false},{"type":"link","label":"Detectron Object Detection with OpenImages Dataset (WIP)","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-31--semantic_segmentation_detectron2_openimages_dataset/2023-08-31","docId":"IoT-and-Machine-Learning/ML/2023-08-31--semantic_segmentation_detectron2_openimages_dataset/index","unlisted":false},{"type":"link","label":"Instance Segmentation with PyTorch (Mask RCNN)","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-30--instance_segmentation_detectron2_model_zoo_mask_rcnn/2023-08-30","docId":"IoT-and-Machine-Learning/ML/2023-08-30--instance_segmentation_detectron2_model_zoo_mask_rcnn/index","unlisted":false},{"type":"link","label":"Image Segmentation with PyTorch (Faster RCNN)","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-29--semantic-segmentation-detectron2-model-zoo-faster-rcnn/2023-08-29","docId":"IoT-and-Machine-Learning/ML/2023-08-29--semantic-segmentation-detectron2-model-zoo-faster-rcnn/index","unlisted":false},{"type":"link","label":"Image Segmentation with PyTorch (RCNN)","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-28--semantic-segmentation-detectron2-model-zoo/2023-08-28","docId":"IoT-and-Machine-Learning/ML/2023-08-28--semantic-segmentation-detectron2-model-zoo/index","unlisted":false},{"type":"link","label":"Image Segmentation with PyTorch","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-27--image-segmentation-with-pytorch/2023-08-27","docId":"IoT-and-Machine-Learning/ML/2023-08-27--image-segmentation-with-pytorch/index","unlisted":false},{"type":"link","label":"Containerized PyTorch Dev Workflow","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-21--pytorch-development-in-docker/2023-08-21","docId":"IoT-and-Machine-Learning/ML/2023-08-21--pytorch-development-in-docker/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classifier - Model Evaluation","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-13-tensorflow-i-know-flowers-model-eval/2023-08-13","docId":"IoT-and-Machine-Learning/ML/2023-08-13-tensorflow-i-know-flowers-model-eval/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classifier - Xception","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-12-tensorflow-i-know-flowers-xception/2023-08-12","docId":"IoT-and-Machine-Learning/ML/2023-08-12-tensorflow-i-know-flowers-xception/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classifier - ViT","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-11-tensorflow-i-know-flowers-vit/2023-08-11","docId":"IoT-and-Machine-Learning/ML/2023-08-11-tensorflow-i-know-flowers-vit/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classifier - NASNetMobile","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-10-tensorflow-i-know-flowers-nasnetmobile/2023-08-10","docId":"IoT-and-Machine-Learning/ML/2023-08-10-tensorflow-i-know-flowers-nasnetmobile/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classifier - MobileNetV3Small","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-09-tensorflow-i-know-flowers-mobilenetv3small/2023-08-09","docId":"IoT-and-Machine-Learning/ML/2023-08-09-tensorflow-i-know-flowers-mobilenetv3small/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classifier - MobileNetV3Large","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-08-tensorflow-i-know-flowers-mobilenetv3large/2023-08-08","docId":"IoT-and-Machine-Learning/ML/2023-08-08-tensorflow-i-know-flowers-mobilenetv3large/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classifier - MobileNetV2","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-07-tensorflow-i-know-flowers-mobilenetv2/2023-08-07","docId":"IoT-and-Machine-Learning/ML/2023-08-07-tensorflow-i-know-flowers-mobilenetv2/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classifier - InceptionV3","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-06-tensorflow-i-know-flowers-inceptionv3/2023-08-06","docId":"IoT-and-Machine-Learning/ML/2023-08-06-tensorflow-i-know-flowers-inceptionv3/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classifier - EfficientNetV2S","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-05-tensorflow-i-know-flowers-efficientnetv2s/2023-08-05","docId":"IoT-and-Machine-Learning/ML/2023-08-05-tensorflow-i-know-flowers-efficientnetv2s/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classifier - EfficientNetV2B0","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-04-tensorflow-i-know-flowers-efficientnetv2b0/2023-08-04","docId":"IoT-and-Machine-Learning/ML/2023-08-04-tensorflow-i-know-flowers-efficientnetv2b0/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classifier - Data-efficient Image Transformers","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-03-tensorflow-i-know-flowers-deit/2023-08-03","docId":"IoT-and-Machine-Learning/ML/2023-08-03-tensorflow-i-know-flowers-deit/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classifier - Data Pre-processing","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-02-tensorflow-i-know-flowers-preprocessing/2023-08-02","docId":"IoT-and-Machine-Learning/ML/2023-08-02-tensorflow-i-know-flowers-preprocessing/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classifier - Introduction","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-01-tensorflow-i-know-flowers-intro/2023-08-01","docId":"IoT-and-Machine-Learning/ML/2023-08-01-tensorflow-i-know-flowers-intro/index","unlisted":false},{"type":"link","label":"Tensorflow VITs","href":"/docs/IoT-and-Machine-Learning/ML/2023-07-27-tensorflow-vision-transformer/2023-07-27","docId":"IoT-and-Machine-Learning/ML/2023-07-27-tensorflow-vision-transformer/index","unlisted":false},{"type":"link","label":"Human Emotion Detection with Tensorflow","href":"/docs/IoT-and-Machine-Learning/ML/2023-07-26-tensorflow-human-emotion-detector/2023-07-26","docId":"IoT-and-Machine-Learning/ML/2023-07-26-tensorflow-human-emotion-detector/index","unlisted":false},{"type":"link","label":"Working with ONNX Models","href":"/docs/IoT-and-Machine-Learning/ML/2023-07-25-onnx-models/2023-07-25","docId":"IoT-and-Machine-Learning/ML/2023-07-25-onnx-models/index","unlisted":false},{"type":"link","label":"Introduction to Caffe2","href":"/docs/IoT-and-Machine-Learning/ML/2023-07-21-introduction-to-pytorch-caffe2/2023-07-21","docId":"IoT-and-Machine-Learning/ML/2023-07-21-introduction-to-pytorch-caffe2/index","unlisted":false},{"type":"link","label":"SQL in Data Science - Machine Learning","href":"/docs/IoT-and-Machine-Learning/ML/2023-07-02-sql-in-data-science-ml/2023-07-02","docId":"IoT-and-Machine-Learning/ML/2023-07-02-sql-in-data-science-ml/index","unlisted":false},{"type":"link","label":"SQL in Data Science - Slightly more Advanced Queries","href":"/docs/IoT-and-Machine-Learning/ML/2023-06-30-sql-in-data-science-advanced/2023-06-30","docId":"IoT-and-Machine-Learning/ML/2023-06-30-sql-in-data-science-advanced/index","unlisted":false},{"type":"link","label":"SQL in Data Science - The Basics using Python","href":"/docs/IoT-and-Machine-Learning/ML/2023-06-27-sql-in-data-science-basics/2023-06-27","docId":"IoT-and-Machine-Learning/ML/2023-06-27-sql-in-data-science-basics/index","unlisted":false},{"type":"link","label":"Detection of Exoplanets using Transit Photometry","href":"/docs/IoT-and-Machine-Learning/ML/2023-06-26-autogluon-transit-photometry-dataset/2023-06-26","docId":"IoT-and-Machine-Learning/ML/2023-06-26-autogluon-transit-photometry-dataset/index","unlisted":false},{"type":"link","label":"(Re) Introduction to Tensorflow Natural Language Processing","href":"/docs/IoT-and-Machine-Learning/ML/2023-04-19-tensorflow-natural-language-processing/2023-04-19","docId":"IoT-and-Machine-Learning/ML/2023-04-19-tensorflow-natural-language-processing/index","unlisted":false},{"type":"link","label":"3D Image Classification","href":"/docs/IoT-and-Machine-Learning/ML/2023-04-16-deep-3d-image-segmentation/2023-04-16","docId":"IoT-and-Machine-Learning/ML/2023-04-16-deep-3d-image-segmentation/index","unlisted":false},{"type":"link","label":"Dimensionality Reduction for Image Segmentation","href":"/docs/IoT-and-Machine-Learning/ML/2023-04-14-manifold-learning-for-image-segmentation/2023-04-14","docId":"IoT-and-Machine-Learning/ML/2023-04-14-manifold-learning-for-image-segmentation/index","unlisted":false},{"type":"link","label":"Fisher Linear Discriminant Analysis (LDA)","href":"/docs/IoT-and-Machine-Learning/ML/2023-04-13-fisher-discriminant-analysis/2023-04-13","docId":"IoT-and-Machine-Learning/ML/2023-04-13-fisher-discriminant-analysis/index","unlisted":false},{"type":"link","label":"Isometric Mapping (ISOMAP)","href":"/docs/IoT-and-Machine-Learning/ML/2023-04-13-isometric-mapping/2023-04-13","docId":"IoT-and-Machine-Learning/ML/2023-04-13-isometric-mapping/index","unlisted":false},{"type":"link","label":"Multidimensional Scaling (MDS)","href":"/docs/IoT-and-Machine-Learning/ML/2023-04-13-multi-dimensional-scaling/2023-04-13","docId":"IoT-and-Machine-Learning/ML/2023-04-13-multi-dimensional-scaling/index","unlisted":false},{"type":"link","label":"tStochastic Neighbor Embedding (t-SNE)","href":"/docs/IoT-and-Machine-Learning/ML/2023-04-12-tstochastic-neighbor-embedding/2023-04-12","docId":"IoT-and-Machine-Learning/ML/2023-04-12-tstochastic-neighbor-embedding/index","unlisted":false},{"type":"link","label":"Locally Linear Embedding (LLE)","href":"/docs/IoT-and-Machine-Learning/ML/2023-04-11-locally-linear-embedding/2023-04-11","docId":"IoT-and-Machine-Learning/ML/2023-04-11-locally-linear-embedding/index","unlisted":false},{"type":"link","label":"Principal Component Analysis (PCA)","href":"/docs/IoT-and-Machine-Learning/ML/2023-04-09-principal-component-analysis/2023-04-09","docId":"IoT-and-Machine-Learning/ML/2023-04-09-principal-component-analysis/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Unsupervised Learning","href":"/docs/IoT-and-Machine-Learning/ML/2023-03-26-tensorflow-unsupervised-learning-generative-adversial-networks/2023-03-26","docId":"IoT-and-Machine-Learning/ML/2023-03-26-tensorflow-unsupervised-learning-generative-adversial-networks/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Unsupervised Learning","href":"/docs/IoT-and-Machine-Learning/ML/2023-03-26-tensorflow-unsupervised-learning-autoencoders-super-resolution/2023-03-26","docId":"IoT-and-Machine-Learning/ML/2023-03-26-tensorflow-unsupervised-learning-autoencoders-super-resolution/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Unsupervised Learning","href":"/docs/IoT-and-Machine-Learning/ML/2023-03-24-tensorflow-unsupervised-learning-autoencoders/2023-03-24","docId":"IoT-and-Machine-Learning/ML/2023-03-24-tensorflow-unsupervised-learning-autoencoders/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Transfer Learning","href":"/docs/IoT-and-Machine-Learning/ML/2023-03-16-tensorflow-transfer-learning-scaling/2023-03-16","docId":"IoT-and-Machine-Learning/ML/2023-03-16-tensorflow-transfer-learning-scaling/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Transfer Learning","href":"/docs/IoT-and-Machine-Learning/ML/2023-03-11-tensorflow-transfer-learning-fine-tuning/2023-03-11","docId":"IoT-and-Machine-Learning/ML/2023-03-11-tensorflow-transfer-learning-fine-tuning/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Transfer Learning","href":"/docs/IoT-and-Machine-Learning/ML/2023-03-06-tensorflow-transfer-learning-feature-extraction/2023-03-06","docId":"IoT-and-Machine-Learning/ML/2023-03-06-tensorflow-transfer-learning-feature-extraction/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Convolutional Neural Networks","href":"/docs/IoT-and-Machine-Learning/ML/2023-03-05-tensorflow-convolutional-neural-network-multiclass-classifications/2023-03-05","docId":"IoT-and-Machine-Learning/ML/2023-03-05-tensorflow-convolutional-neural-network-multiclass-classifications/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Convolutional Neural Networks","href":"/docs/IoT-and-Machine-Learning/ML/2023-03-03-tensorflow-convolutional-neural-network-binary-classifications/2023-03-03","docId":"IoT-and-Machine-Learning/ML/2023-03-03-tensorflow-convolutional-neural-network-binary-classifications/index","unlisted":false},{"type":"category","label":"Tensorflow 2 - Neural Network Classifications","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Tensorflow 2 - Neural Network Classification","href":"/docs/IoT-and-Machine-Learning/ML/2023-03-02-tensorflow-neural-network-multi-classification/2023-02-28-tensorflow-neural-network-classification-model-evaluation/2023-02-28","docId":"IoT-and-Machine-Learning/ML/2023-03-02-tensorflow-neural-network-multi-classification/2023-02-28-tensorflow-neural-network-classification-model-evaluation/index","unlisted":false}],"href":"/docs/IoT-and-Machine-Learning/ML/2023-03-02-tensorflow-neural-network-multi-classification/2023-03-02"},{"type":"link","label":"Tensorflow 2 - Neural Network Classification","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-28-tensorflow-neural-network-classification-model-evaluation/2023-02-28","docId":"IoT-and-Machine-Learning/ML/2023-02-28-tensorflow-neural-network-classification-model-evaluation/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Neural Network Classification","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-27-tensorflow-neural-network-classification/2023-02-27","docId":"IoT-and-Machine-Learning/ML/2023-02-27-tensorflow-neural-network-classification/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Neural Network Regression","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-26-tensorflow-neural-network-regression-data-preprocessing/2023-02-26","docId":"IoT-and-Machine-Learning/ML/2023-02-26-tensorflow-neural-network-regression-data-preprocessing/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Neural Network Regression","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-26-tensorflow-neural-network-regression-real-dataset/2023-02-26","docId":"IoT-and-Machine-Learning/ML/2023-02-26-tensorflow-neural-network-regression-real-dataset/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Neural Network Regression","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-25-tensorflow-neural-network-regression-experiments/2023-02-25","docId":"IoT-and-Machine-Learning/ML/2023-02-25-tensorflow-neural-network-regression-experiments/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Neural Network Regression","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-24-tensorflow-neural-network-regression-evaluation/2023-02-24","docId":"IoT-and-Machine-Learning/ML/2023-02-24-tensorflow-neural-network-regression-evaluation/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Neural Network Regression","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-23-tensorflow-neural-network-regression/2023-02-23","docId":"IoT-and-Machine-Learning/ML/2023-02-23-tensorflow-neural-network-regression/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - An (Re)Introduction 2023 (3)","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-22-tensorflow-tensors-3/2023-02-22","docId":"IoT-and-Machine-Learning/ML/2023-02-22-tensorflow-tensors-3/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - An (Re)Introduction 2023 (2)","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-21-tensorflow-tensors-2/2023-02-21","docId":"IoT-and-Machine-Learning/ML/2023-02-21-tensorflow-tensors-2/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - An (Re)Introduction 2023","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-19-tensorflow-introduction/2023-02-19","docId":"IoT-and-Machine-Learning/ML/2023-02-19-tensorflow-introduction/index","unlisted":false},{"type":"link","label":"Keras for Tensorflow - VGG16 Network Architecture","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-18-keras-introduction-vgg16/2023-02-18","docId":"IoT-and-Machine-Learning/ML/2023-02-18-keras-introduction-vgg16/index","unlisted":false},{"type":"link","label":"Keras for Tensorflow - Recurrent Neural Networks","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-18-keras-introduction-rnn/2023-02-18","docId":"IoT-and-Machine-Learning/ML/2023-02-18-keras-introduction-rnn/index","unlisted":false},{"type":"link","label":"Keras for Tensorflow - Convolutional Neural Networks","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-17-keras-introduction-cnn/2023-02-17","docId":"IoT-and-Machine-Learning/ML/2023-02-17-keras-introduction-cnn/index","unlisted":false},{"type":"link","label":"Keras for Tensorflow - Artificial Neural Networks","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-16-keras-introduction-ann/2023-02-16","docId":"IoT-and-Machine-Learning/ML/2023-02-16-keras-introduction-ann/index","unlisted":false},{"type":"link","label":"YOLOv8 with AS-One","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-15-as-one-yolo-object-tracking/2023-02-15","docId":"IoT-and-Machine-Learning/ML/2023-02-15-as-one-yolo-object-tracking/index","unlisted":false},{"type":"link","label":"Keras for Tensorflow - An (Re)Introduction 2023","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-14-keras-introduction/2023-02-14","docId":"IoT-and-Machine-Learning/ML/2023-02-14-keras-introduction/index","unlisted":false},{"type":"link","label":"SciKit Wine Quality","href":"/docs/IoT-and-Machine-Learning/ML/2023-01-30-predicting-wine-quality/2023-01-30","docId":"IoT-and-Machine-Learning/ML/2023-01-30-predicting-wine-quality/index","unlisted":false},{"type":"link","label":"OpenCV Count My Money","href":"/docs/IoT-and-Machine-Learning/ML/2023-01-28-opencv-coin-counter/2023-01-28","docId":"IoT-and-Machine-Learning/ML/2023-01-28-opencv-coin-counter/index","unlisted":false},{"type":"link","label":"YOLOv7 to Tensorflow","href":"/docs/IoT-and-Machine-Learning/ML/2023-01-14-yolov7_to_tensorflow/2023-01-14","docId":"IoT-and-Machine-Learning/ML/2023-01-14-yolov7_to_tensorflow/index","unlisted":false},{"type":"link","label":"YOLOv7 Label Conversion","href":"/docs/IoT-and-Machine-Learning/ML/2023-01-13-yolov7_data_conversion/2023-01-13","docId":"IoT-and-Machine-Learning/ML/2023-01-13-yolov7_data_conversion/index","unlisted":false},{"type":"link","label":"YOLOv7 Training with Custom Data","href":"/docs/IoT-and-Machine-Learning/ML/2023-01-10-yolov7_custom_data/2023-01-10","docId":"IoT-and-Machine-Learning/ML/2023-01-10-yolov7_custom_data/index","unlisted":false},{"type":"link","label":"MiDaS Depth Vision","href":"/docs/IoT-and-Machine-Learning/ML/2023-01-08-depth-vision-midas/2023-01-08","docId":"IoT-and-Machine-Learning/ML/2023-01-08-depth-vision-midas/index","unlisted":false},{"type":"link","label":"YOLOv7 Introduction","href":"/docs/IoT-and-Machine-Learning/ML/2023-01-05-yolov7/2023-01-05","docId":"IoT-and-Machine-Learning/ML/2023-01-05-yolov7/index","unlisted":false},{"type":"link","label":"Recurrent Neural Networks","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-31-tf-rnn-text-generation/2022-12-31","docId":"IoT-and-Machine-Learning/ML/2022-12-31-tf-rnn-text-generation/index","unlisted":false},{"type":"link","label":"Deep Convolutional Generative Adversarial Network","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-28-tf-gan-image-generator/2022-12-28","docId":"IoT-and-Machine-Learning/ML/2022-12-28-tf-gan-image-generator/index","unlisted":false},{"type":"link","label":"Tensorflow Downsampling","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-21-tf-downsampling/2022-12-21","docId":"IoT-and-Machine-Learning/ML/2022-12-21-tf-downsampling/index","unlisted":false},{"type":"link","label":"Tensorflow Deep Dream","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-21-tf-deepdream/2022-12-21","docId":"IoT-and-Machine-Learning/ML/2022-12-21-tf-deepdream/index","unlisted":false},{"type":"link","label":"Tensorflow Representation Learning","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-20-tf-representation/2022-12-19","docId":"IoT-and-Machine-Learning/ML/2022-12-20-tf-representation/index","unlisted":false},{"type":"link","label":"Tensorflow Hub","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-19-tf-hub/2022-12-19","docId":"IoT-and-Machine-Learning/ML/2022-12-19-tf-hub/index","unlisted":false},{"type":"link","label":"Tensorflow Transfer Learning","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-18-tf-transfer-learning/2022-12-18","docId":"IoT-and-Machine-Learning/ML/2022-12-18-tf-transfer-learning/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classification","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-16-tf-cifar/2022-12-16","docId":"IoT-and-Machine-Learning/ML/2022-12-16-tf-cifar/index","unlisted":false},{"type":"link","label":"Breast Histopathology Image Segmentation Part 6","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-12-tf-breast-cancer-classification-part6/2022-12-12","docId":"IoT-and-Machine-Learning/ML/2022-12-12-tf-breast-cancer-classification-part6/index","unlisted":false},{"type":"link","label":"Breast Histopathology Image Segmentation Part 5","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-12-tf-breast-cancer-classification-part5/2022-12-12","docId":"IoT-and-Machine-Learning/ML/2022-12-12-tf-breast-cancer-classification-part5/index","unlisted":false},{"type":"link","label":"Breast Histopathology Image Segmentation Part 4","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part4/2022-12-11","docId":"IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part4/index","unlisted":false},{"type":"link","label":"Breast Histopathology Image Segmentation Part 3","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part3/2022-12-11","docId":"IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part3/index","unlisted":false},{"type":"link","label":"Breast Histopathology Image Segmentation Part 2","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part2/2022-12-11","docId":"IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part2/index","unlisted":false},{"type":"link","label":"Breast Histopathology Image Segmentation Part 1","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-10-tf-breast-cancer-classification-part1/2022-12-10","docId":"IoT-and-Machine-Learning/ML/2022-12-10-tf-breast-cancer-classification-part1/index","unlisted":false},{"type":"link","label":"Deep Docker on Arch","href":"/docs/IoT-and-Machine-Learning/ML/2022-11-27-containerized-deep-learning/2022-11-27","docId":"IoT-and-Machine-Learning/ML/2022-11-27-containerized-deep-learning/index","unlisted":false},{"type":"link","label":"Face Restoration with GFPGAN","href":"/docs/IoT-and-Machine-Learning/ML/2022-04-04-pytorch-face-restoration/2022-04-04","docId":"IoT-and-Machine-Learning/ML/2022-04-04-pytorch-face-restoration/index","unlisted":false},{"type":"link","label":"Super Resolution with Real-ESRGAN","href":"/docs/IoT-and-Machine-Learning/ML/2022-04-03-pytorch-real-super-resolution/2022-04-03","docId":"IoT-and-Machine-Learning/ML/2022-04-03-pytorch-real-super-resolution/index","unlisted":false},{"type":"link","label":"Super Resolution with ESRGAN","href":"/docs/IoT-and-Machine-Learning/ML/2022-04-02-pytorch-super-resolution/2022-04-02","docId":"IoT-and-Machine-Learning/ML/2022-04-02-pytorch-super-resolution/index","unlisted":false},{"type":"link","label":"Deep Audio","href":"/docs/IoT-and-Machine-Learning/ML/2022-04-01-tensorflow-audio-classifier/2022-04-01","docId":"IoT-and-Machine-Learning/ML/2022-04-01-tensorflow-audio-classifier/index","unlisted":false},{"type":"link","label":"Yolo App - YOLOv5 Data Preparation","href":"/docs/IoT-and-Machine-Learning/ML/2022-02-20--yolo-app-yolov5-data-prep/2022-02-20","docId":"IoT-and-Machine-Learning/ML/2022-02-20--yolo-app-yolov5-data-prep/index","unlisted":false},{"type":"link","label":"Yolo App - Flask Web Application","href":"/docs/IoT-and-Machine-Learning/ML/2022-02-19--yolo-app-flask/2022-02-19","docId":"IoT-and-Machine-Learning/ML/2022-02-19--yolo-app-flask/index","unlisted":false},{"type":"link","label":"Yolo App - Tesseract Optical Character Recognition","href":"/docs/IoT-and-Machine-Learning/ML/2022-02-18--yolo-app-ocr/2022-02-18","docId":"IoT-and-Machine-Learning/ML/2022-02-18--yolo-app-ocr/index","unlisted":false},{"type":"link","label":"Yolo App - Pipeline Predictions","href":"/docs/IoT-and-Machine-Learning/ML/2022-02-17--yolo-app-prediction-pipeline/2022-02-17","docId":"IoT-and-Machine-Learning/ML/2022-02-17--yolo-app-prediction-pipeline/index","unlisted":false},{"type":"link","label":"Yolo App - Train a Model with Tensorflow","href":"/docs/IoT-and-Machine-Learning/ML/2022-02-16--yolo-app-tensorflow-model/2022-02-16","docId":"IoT-and-Machine-Learning/ML/2022-02-16--yolo-app-tensorflow-model/index","unlisted":false},{"type":"link","label":"Yolo App - Data Collection","href":"/docs/IoT-and-Machine-Learning/ML/2022-02-15--yolo-app-get-data/2022-02-15","docId":"IoT-and-Machine-Learning/ML/2022-02-15--yolo-app-get-data/index","unlisted":false},{"type":"link","label":"OpenCV Optical Flow Algorithm for Object Tracking","href":"/docs/IoT-and-Machine-Learning/ML/2021-12-10--opencv-optical-flow-tracking/2021-12-10","docId":"IoT-and-Machine-Learning/ML/2021-12-10--opencv-optical-flow-tracking/index","unlisted":false},{"type":"link","label":"OpenCV CAMshift Algorithm for Object Tracking","href":"/docs/IoT-and-Machine-Learning/ML/2021-12-09--opencv-camshift-tracking/2021-12-09","docId":"IoT-and-Machine-Learning/ML/2021-12-09--opencv-camshift-tracking/index","unlisted":false},{"type":"link","label":"OpenCV Meanshift Algorithm for Object Tracking","href":"/docs/IoT-and-Machine-Learning/ML/2021-12-08--opencv-meanshift-tracking/2021-12-08","docId":"IoT-and-Machine-Learning/ML/2021-12-08--opencv-meanshift-tracking/index","unlisted":false},{"type":"link","label":"OpenCV Object Detection and Tracking","href":"/docs/IoT-and-Machine-Learning/ML/2021-12-07--opencv-detection-and-tracking/2021-12-07","docId":"IoT-and-Machine-Learning/ML/2021-12-07--opencv-detection-and-tracking/index","unlisted":false},{"type":"link","label":"OpenCV Object Tracking","href":"/docs/IoT-and-Machine-Learning/ML/2021-12-06--opencv-object-tracking/2021-12-06","docId":"IoT-and-Machine-Learning/ML/2021-12-06--opencv-object-tracking/index","unlisted":false},{"type":"link","label":"OpenCV Face Detection and Privacy","href":"/docs/IoT-and-Machine-Learning/ML/2021-12-05--opencv-face-detection/2021-12-05","docId":"IoT-and-Machine-Learning/ML/2021-12-05--opencv-face-detection/index","unlisted":false},{"type":"link","label":"OpenCV Image Objects","href":"/docs/IoT-and-Machine-Learning/ML/2021-12-04--opencv-image-objects/2021-12-04","docId":"IoT-and-Machine-Learning/ML/2021-12-04--opencv-image-objects/index","unlisted":false},{"type":"link","label":"OpenCV Image Operations","href":"/docs/IoT-and-Machine-Learning/ML/2021-12-03--opencv-image-operations/2021-12-03","docId":"IoT-and-Machine-Learning/ML/2021-12-03--opencv-image-operations/index","unlisted":false},{"type":"link","label":"OpenCV, Streams and Video Files","href":"/docs/IoT-and-Machine-Learning/ML/2021-12-02--opencv-with-videos/2021-12-02","docId":"IoT-and-Machine-Learning/ML/2021-12-02--opencv-with-videos/index","unlisted":false},{"type":"link","label":"OpenCV and Images","href":"/docs/IoT-and-Machine-Learning/ML/2021-12-01--opencv-with-images/2021-12-01","docId":"IoT-and-Machine-Learning/ML/2021-12-01--opencv-with-images/index","unlisted":false},{"type":"link","label":"Introduction into FB Prophet","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-15--facebook-prophet-introduction/2021-11-15","docId":"IoT-and-Machine-Learning/ML/2021-11-15--facebook-prophet-introduction/index","unlisted":false},{"type":"link","label":"Tensorflow.js React App","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-14--tensorflow-model-for-tfjs/2021-11-14","docId":"IoT-and-Machine-Learning/ML/2021-11-14--tensorflow-model-for-tfjs/index","unlisted":false},{"type":"link","label":"Tensorflow2 Model Zoo","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-13--tensorflow-model-zoo/2021-11-13","docId":"IoT-and-Machine-Learning/ML/2021-11-13--tensorflow-model-zoo/index","unlisted":false},{"type":"link","label":"Tensorflow2 Crash Course - Part V","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-12--tensorflow-crash-course-part-v/2021-11-12","docId":"IoT-and-Machine-Learning/ML/2021-11-12--tensorflow-crash-course-part-v/index","unlisted":false},{"type":"link","label":"Tensorflow2 Crash Course - Part IV","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-11--tensorflow-crash-course-part-iv/2021-11-11","docId":"IoT-and-Machine-Learning/ML/2021-11-11--tensorflow-crash-course-part-iv/index","unlisted":false},{"type":"link","label":"Tensorflow2 Crash Course - Part III","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-10--tensorflow-crash-course-part-iii/2021-11-10","docId":"IoT-and-Machine-Learning/ML/2021-11-10--tensorflow-crash-course-part-iii/index","unlisted":false},{"type":"link","label":"Tensorflow2 Crash Course - Part II","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-09--tensorflow-crash-course-part-ii/2021-11-09","docId":"IoT-and-Machine-Learning/ML/2021-11-09--tensorflow-crash-course-part-ii/index","unlisted":false},{"type":"category","label":"Tensorflow Crash Course - Part I","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"activate_webcam","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-08--tensorflow-crash-course-part-i/activate_webcam","docId":"IoT-and-Machine-Learning/ML/2021-11-08--tensorflow-crash-course-part-i/activate_webcam","unlisted":false}],"href":"/docs/IoT-and-Machine-Learning/ML/2021-11-08--tensorflow-crash-course-part-i/2021-11-08"},{"type":"link","label":"OpenCV Crash Course Part II","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-07--opencv-crash-course-part-ii/2021-11-07","docId":"IoT-and-Machine-Learning/ML/2021-11-07--opencv-crash-course-part-ii/index","unlisted":false},{"type":"link","label":"OpenCV Crash Course Part I","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-06--opencv-crash-course-part-i/2021-11-06","docId":"IoT-and-Machine-Learning/ML/2021-11-06--opencv-crash-course-part-i/index","unlisted":false},{"type":"link","label":"License Plate Recognition with YOLOv4, OpenCV and Tesseract","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-05--license-plates-yolov4-opencv-tesseract/2021-11-05","docId":"IoT-and-Machine-Learning/ML/2021-11-05--license-plates-yolov4-opencv-tesseract/index","unlisted":false},{"type":"link","label":"Installing YOLOv4 with Anaconda","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-04--installing-yolov4/2021-11-04","docId":"IoT-and-Machine-Learning/ML/2021-11-04--installing-yolov4/index","unlisted":false},{"type":"link","label":"Streamlit user interface for openCV/Mediapipe face mesh app","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-03--streamlit-opencv-mediapipe/2021-11-03","docId":"IoT-and-Machine-Learning/ML/2021-11-03--streamlit-opencv-mediapipe/index","unlisted":false},{"type":"link","label":"spaCy NER Predictions","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-02--spacy_ner_predictions/2021-11-02","docId":"IoT-and-Machine-Learning/ML/2021-11-02--spacy_ner_predictions/index","unlisted":false},{"type":"link","label":"spaCy NER on Arch Linux","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-01--spacy_natural_language_processing/2021-11-01","docId":"IoT-and-Machine-Learning/ML/2021-11-01--spacy_natural_language_processing/index","unlisted":false},{"type":"link","label":"Introduction to Keras","href":"/docs/IoT-and-Machine-Learning/ML/2019-04-01--introduction-to-keras/2019-04-01","docId":"IoT-and-Machine-Learning/ML/2019-04-01--introduction-to-keras/index","unlisted":false},{"type":"link","label":"Tesseract OCR on Arch Linux","href":"/docs/IoT-and-Machine-Learning/ML/2021-10-31--tesseract_ocr_arch_linux/2021-10-31","docId":"IoT-and-Machine-Learning/ML/2021-10-31--tesseract_ocr_arch_linux/index","unlisted":false},{"type":"link","label":"Introduction to TensorFlow 2 Beta","href":"/docs/IoT-and-Machine-Learning/ML/2019-03-31--introduction-to-tensorflow-2-beta/2019-03-31","docId":"IoT-and-Machine-Learning/ML/2019-03-31--introduction-to-tensorflow-2-beta/index","unlisted":false},{"type":"link","label":"Machine Learning with SciKit Learn","href":"/docs/IoT-and-Machine-Learning/ML/2018-01-02--machine-learning-with-python/2018-01-02","docId":"IoT-and-Machine-Learning/ML/2018-01-02--machine-learning-with-python/index","unlisted":false}],"href":"/docs/category/machine-learning"},{"type":"category","label":"AIOps","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"MLflow Integration for Ultralytics YOLO","href":"/docs/IoT-and-Machine-Learning/AIOps/2024-02-26-mlflow-with-yolov81/2024-02-26","docId":"IoT-and-Machine-Learning/AIOps/2024-02-26-mlflow-with-yolov81/index","unlisted":false},{"type":"link","label":"MLFlow Hyperparameter Tuning in Docker","href":"/docs/IoT-and-Machine-Learning/AIOps/2024-02-24-mlflow-hyperparameter-tuning/2024-02-24","docId":"IoT-and-Machine-Learning/AIOps/2024-02-24-mlflow-hyperparameter-tuning/index","unlisted":false},{"type":"link","label":"MLFlow with PyTorch Lighning in Docker","href":"/docs/IoT-and-Machine-Learning/AIOps/2024-02-21-mlflow-pytorch-lightning-docker/2024-02-21","docId":"IoT-and-Machine-Learning/AIOps/2024-02-21-mlflow-pytorch-lightning-docker/index","unlisted":false},{"type":"link","label":"MLOps with ZenML - SKLearn Classifier Pipeline","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-09-27-zenml-intro-sklearn-pipeline/2023-09-27","docId":"IoT-and-Machine-Learning/AIOps/2023-09-27-zenml-intro-sklearn-pipeline/index","unlisted":false},{"type":"link","label":"Tensorflow Serving API","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-08-19-tensorflow-serving-api/2023-08-19","docId":"IoT-and-Machine-Learning/AIOps/2023-08-19-tensorflow-serving-api/index","unlisted":false},{"type":"link","label":"Serving your SciKit Image Model as a Prediction API","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-07-12-scikit-image-model-deployment-part2/2023-07-12","docId":"IoT-and-Machine-Learning/AIOps/2023-07-12-scikit-image-model-deployment-part2/index","unlisted":false},{"type":"link","label":"Serving your SciKit Image Model as a Prediction API","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-07-10-scikit-image-model-deployment-part1/2023-07-10","docId":"IoT-and-Machine-Learning/AIOps/2023-07-10-scikit-image-model-deployment-part1/index","unlisted":false},{"type":"link","label":"AutoML with AutoGluon for Timeseries Forecasts","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-06-23-automl-with-autogluon-timeseries-forecast/2023-06-23","docId":"IoT-and-Machine-Learning/AIOps/2023-06-23-automl-with-autogluon-timeseries-forecast/index","unlisted":false},{"type":"link","label":"AutoML with AutoGluon for Multi-Modal Data NLP","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-06-21-automl-with-autogluon-multiclass-nlp/2023-06-21","docId":"IoT-and-Machine-Learning/AIOps/2023-06-21-automl-with-autogluon-multiclass-nlp/index","unlisted":false},{"type":"link","label":"AutoML with AutoGluon for Tabular Data","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-06-18-automl-with-autogluon-tabular-data/2023-06-18","docId":"IoT-and-Machine-Learning/AIOps/2023-06-18-automl-with-autogluon-tabular-data/index","unlisted":false},{"type":"link","label":"Serving your SciKit Learn Model as a Prediction API","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-06-17-scikit-learn-model-deployment/2023-06-17","docId":"IoT-and-Machine-Learning/AIOps/2023-06-17-scikit-learn-model-deployment/index","unlisted":false},{"type":"link","label":"Deploying Prediction APIs","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-03-27-deploying-prediction-apis-with-flask/2023-03-27","docId":"IoT-and-Machine-Learning/AIOps/2023-03-27-deploying-prediction-apis-with-flask/index","unlisted":false},{"type":"link","label":"MLflow 2.1 Introduction","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-02-09-mlflow-introduction/2023-02-09","docId":"IoT-and-Machine-Learning/AIOps/2023-02-09-mlflow-introduction/index","unlisted":false},{"type":"link","label":"Apache Airflow Dynamic DAGs","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-02-06-apache-airflow-dynamic-dags/2023-02-06","docId":"IoT-and-Machine-Learning/AIOps/2023-02-06-apache-airflow-dynamic-dags/index","unlisted":false},{"type":"link","label":"Apache Airflow DAG Scheduling","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-02-05-apache-airflow-scheduler/2023-02-05","docId":"IoT-and-Machine-Learning/AIOps/2023-02-05-apache-airflow-scheduler/index","unlisted":false},{"type":"link","label":"Apache Airflow Data Pipelines","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-02-04-apache-airflow-data-pipelines/2023-02-04","docId":"IoT-and-Machine-Learning/AIOps/2023-02-04-apache-airflow-data-pipelines/index","unlisted":false},{"type":"link","label":"Apache Airflow Introduction","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-02-01-apache-airflow-introduction/2023-02-01","docId":"IoT-and-Machine-Learning/AIOps/2023-02-01-apache-airflow-introduction/index","unlisted":false},{"type":"link","label":"Python Ray Model Serving","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-31-python-ray-model-serving/2023-01-31","docId":"IoT-and-Machine-Learning/AIOps/2023-01-31-python-ray-model-serving/index","unlisted":false},{"type":"link","label":"Python Ray Deployments","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-29-python-ray-deployments/2023-01-29","docId":"IoT-and-Machine-Learning/AIOps/2023-01-29-python-ray-deployments/index","unlisted":false},{"type":"link","label":"Python Ray Remote Actors","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-26-python-ray-remote-actors/2023-01-26","docId":"IoT-and-Machine-Learning/AIOps/2023-01-26-python-ray-remote-actors/index","unlisted":false},{"type":"link","label":"Python Ray Remote Functions","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-23-python-ray-remote-functions/2023-01-23","docId":"IoT-and-Machine-Learning/AIOps/2023-01-23-python-ray-remote-functions/index","unlisted":false},{"type":"link","label":"Python Ray Basic Concepts","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-22-python-ray-introduction/2023-01-22","docId":"IoT-and-Machine-Learning/AIOps/2023-01-22-python-ray-introduction/index","unlisted":false},{"type":"link","label":"DVC Model Access","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-06-dvc-model-access/2023-01-05","docId":"IoT-and-Machine-Learning/AIOps/2023-01-06-dvc-model-access/index","unlisted":false},{"type":"link","label":"Data Version Control","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-05-dvc-model-version-control/2023-01-05","docId":"IoT-and-Machine-Learning/AIOps/2023-01-05-dvc-model-version-control/index","unlisted":false},{"type":"link","label":"Distributed training with TensorFlow","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-04-tf-distributed-strategy/2023-01-04","docId":"IoT-and-Machine-Learning/AIOps/2023-01-04-tf-distributed-strategy/index","unlisted":false},{"type":"link","label":"Tensorflow Tensorboard","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-03-tf-tensorboard/2023-01-03","docId":"IoT-and-Machine-Learning/AIOps/2023-01-03-tf-tensorboard/index","unlisted":false},{"type":"link","label":"Tensorflow Serving REST API","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-02-tf-serve-own-models/2023-01-02","docId":"IoT-and-Machine-Learning/AIOps/2023-01-02-tf-serve-own-models/index","unlisted":false},{"type":"link","label":"Tensorflow Docker Model Server","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-01-tf-model-server/2023-01-01","docId":"IoT-and-Machine-Learning/AIOps/2023-01-01-tf-model-server/index","unlisted":false}],"href":"/docs/category/aiops"}],"href":"/docs/category/machine-learning-ai-and-computer-vision"},{"type":"category","label":"Automation, Deep Vision and Robotics","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Home Automation","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"INSTAR go2rtc for Home Assistant","href":"/docs/Automation_and_Robotics/Home_Automation/2024-01-10--go2rtc/2024-01-09","docId":"Automation_and_Robotics/Home_Automation/2024-01-10--go2rtc/index","unlisted":false},{"type":"link","label":"Home Assistant with RTSPtoWeb","href":"/docs/Automation_and_Robotics/Home_Automation/2024-01-09--home-assistant-rtsptoweb/2024-01-09","docId":"Automation_and_Robotics/Home_Automation/2024-01-09--home-assistant-rtsptoweb/index","unlisted":false},{"type":"link","label":"Home Assistant, OpenHAB, Node-RED, ioBroker, MotionEye, ZoneMinder, Frigate, iSpy Agent, Kerberos Containerized (Docker)","href":"/docs/Automation_and_Robotics/Home_Automation/2023-04-18--home-assistant-node-red-iobroker-docker/2023-04-18","docId":"Automation_and_Robotics/Home_Automation/2023-04-18--home-assistant-node-red-iobroker-docker/index","unlisted":false},{"type":"link","label":"Camera Surveillance System with OpenCV","href":"/docs/Automation_and_Robotics/Home_Automation/2023-02-07-python-home-security/2023-02-07","docId":"Automation_and_Robotics/Home_Automation/2023-02-07-python-home-security/index","unlisted":false},{"type":"link","label":"(Re) Introduction to Home Assistant Auto-discovery","href":"/docs/Automation_and_Robotics/Home_Automation/2023-04-17-home-assistant-mqtt-autodiscovery-part-iii/2023-04-17","docId":"Automation_and_Robotics/Home_Automation/2023-04-17-home-assistant-mqtt-autodiscovery-part-iii/index","unlisted":false},{"type":"link","label":"OpenThread Border Router with Docker with Docker","href":"/docs/Automation_and_Robotics/Home_Automation/2023-01-23-thread-edge-router-docker/2023-01-23","docId":"Automation_and_Robotics/Home_Automation/2023-01-23-thread-edge-router-docker/index","unlisted":false},{"type":"link","label":"OpenThread Border Router","href":"/docs/Automation_and_Robotics/Home_Automation/2023-01-23-thread-edge-router/2023-01-23","docId":"Automation_and_Robotics/Home_Automation/2023-01-23-thread-edge-router/index","unlisted":false},{"type":"link","label":"MQTT Auto-Discovery - Use Node-RED to register Smarthome Devices","href":"/docs/Automation_and_Robotics/Home_Automation/2022-07-17-node-red-for-mqtt-autodiscovery/2022-07-17","docId":"Automation_and_Robotics/Home_Automation/2022-07-17-node-red-for-mqtt-autodiscovery/index","unlisted":false},{"type":"link","label":"Run Camera.UI with Docker-Compose","href":"/docs/Automation_and_Robotics/Home_Automation/2022-10-18-camera-ui-docker/2022-10-18","docId":"Automation_and_Robotics/Home_Automation/2022-10-18-camera-ui-docker/index","unlisted":false},{"type":"link","label":"Convert RTSP to HLS using FFmpeg","href":"/docs/Automation_and_Robotics/Home_Automation/2022-12-15--rtsp-to-hls-ffmpeg/2022-12-15","docId":"Automation_and_Robotics/Home_Automation/2022-12-15--rtsp-to-hls-ffmpeg/index","unlisted":false},{"type":"link","label":"Grafana IoT Dashboard","href":"/docs/Automation_and_Robotics/Home_Automation/2022-12-22--grafana-for-iot/2022-12-22","docId":"Automation_and_Robotics/Home_Automation/2022-12-22--grafana-for-iot/index","unlisted":false},{"type":"link","label":"OpenHab - MQTT Homie Convention","href":"/docs/Automation_and_Robotics/Home_Automation/2022-07-16-openhab-mqtt-homie/2022-07-16","docId":"Automation_and_Robotics/Home_Automation/2022-07-16-openhab-mqtt-homie/index","unlisted":false},{"type":"link","label":"Node-RED - MQTT Homie Convention","href":"/docs/Automation_and_Robotics/Home_Automation/2022-07-15-node-red-mqtt-homie/2022-07-15","docId":"Automation_and_Robotics/Home_Automation/2022-07-15-node-red-mqtt-homie/index","unlisted":false},{"type":"link","label":"Home Assistant - MQTT Auto-Discovery :: Configuration","href":"/docs/Automation_and_Robotics/Home_Automation/2022-07-10-home-assistant-mqtt-autodiscovery-part-i/2022-07-10","docId":"Automation_and_Robotics/Home_Automation/2022-07-10-home-assistant-mqtt-autodiscovery-part-i/index","unlisted":false},{"type":"link","label":"Home Assistant - MQTT Auto-Discovery :: Automation","href":"/docs/Automation_and_Robotics/Home_Automation/2022-07-11-home-assistant-mqtt-autodiscovery-part-ii/2022-07-11","docId":"Automation_and_Robotics/Home_Automation/2022-07-11-home-assistant-mqtt-autodiscovery-part-ii/index","unlisted":false},{"type":"link","label":"Home Assistant - Python Scripts as Service","href":"/docs/Automation_and_Robotics/Home_Automation/2022-07-12-home-assistant-mqtt-python/2022-07-12","docId":"Automation_and_Robotics/Home_Automation/2022-07-12-home-assistant-mqtt-python/index","unlisted":false},{"type":"link","label":"OpenHAB 3 INSTAR Camera Binding","href":"/docs/Automation_and_Robotics/Home_Automation/2020-12-03--openhab3-camera-binding/2020-12-03","docId":"Automation_and_Robotics/Home_Automation/2020-12-03--openhab3-camera-binding/index","unlisted":false},{"type":"link","label":"OpenHAB 3 MQTT Binding","href":"/docs/Automation_and_Robotics/Home_Automation/2020-12-02--openhab3-mqtt-binding/2020-12-02","docId":"Automation_and_Robotics/Home_Automation/2020-12-02--openhab3-mqtt-binding/index","unlisted":false},{"type":"link","label":"Trying out OpenHAB 3 in Docker","href":"/docs/Automation_and_Robotics/Home_Automation/2020-12-01--openhab3-in-docker/2020-12-01","docId":"Automation_and_Robotics/Home_Automation/2020-12-01--openhab3-in-docker/index","unlisted":false},{"type":"link","label":"Testing a new REST API in Node-RED","href":"/docs/Automation_and_Robotics/Home_Automation/2020-09-16--testing-new-rest-api-with-nodered/2020-09-16","docId":"Automation_and_Robotics/Home_Automation/2020-09-16--testing-new-rest-api-with-nodered/index","unlisted":false},{"type":"link","label":"A Mock REST API in Node-RED and Docker","href":"/docs/Automation_and_Robotics/Home_Automation/2020-09-15--mock-rest-api-with-nodered/2020-09-16","docId":"Automation_and_Robotics/Home_Automation/2020-09-15--mock-rest-api-with-nodered/index","unlisted":false},{"type":"link","label":"Loxone Miniserver","href":"/docs/Automation_and_Robotics/Home_Automation/2019-02-11--loxone-miniserver/2019-02-11","docId":"Automation_and_Robotics/Home_Automation/2019-02-11--loxone-miniserver/index","unlisted":false},{"type":"link","label":"Podman Homebridge to MQTT","href":"/docs/Automation_and_Robotics/Home_Automation/2019-12-01--podman-hombridge-to-mqtt/2019-12-01","docId":"Automation_and_Robotics/Home_Automation/2019-12-01--podman-hombridge-to-mqtt/index","unlisted":false},{"type":"link","label":"Zoneminder Dockerized","href":"/docs/Automation_and_Robotics/Home_Automation/2019-02-09--zoneminder-in-docker/2019-02-09","docId":"Automation_and_Robotics/Home_Automation/2019-02-09--zoneminder-in-docker/index","unlisted":false},{"type":"link","label":"Adding Homekit to your Node-RED Container in Podman","href":"/docs/Automation_and_Robotics/Home_Automation/2019-09-28--node-red-homekit-containerized/2019-09-28","docId":"Automation_and_Robotics/Home_Automation/2019-09-28--node-red-homekit-containerized/index","unlisted":false},{"type":"link","label":"Shinobi Video Surveillance","href":"/docs/Automation_and_Robotics/Home_Automation/2019-02-08--shinobi-on-debian/2019-02-08","docId":"Automation_and_Robotics/Home_Automation/2019-02-08--shinobi-on-debian/index","unlisted":false},{"type":"link","label":"Home Assistant, OpenHAB, Node-RED, ioBroker, MotionEye Containerized (Podman)","href":"/docs/Automation_and_Robotics/Home_Automation/2019-09-27--home-assistant-podman-centos8/2019-09-27","docId":"Automation_and_Robotics/Home_Automation/2019-09-27--home-assistant-podman-centos8/index","unlisted":false},{"type":"link","label":"MotionEye Video Surveillance","href":"/docs/Automation_and_Robotics/Home_Automation/2019-02-07--motioneye-on-debian/2019-02-07","docId":"Automation_and_Robotics/Home_Automation/2019-02-07--motioneye-on-debian/index","unlisted":false},{"type":"link","label":"Installing MotionEye on CentOS8 with Podman","href":"/docs/Automation_and_Robotics/Home_Automation/2019-09-24--motioneye-podman-centos8/2019-09-24","docId":"Automation_and_Robotics/Home_Automation/2019-09-24--motioneye-podman-centos8/index","unlisted":false},{"type":"link","label":"Zigbee Sensors in FHEM","href":"/docs/Automation_and_Robotics/Home_Automation/2019-01-05--zigbee2mqtt-xiaomi-fhem/2019-01-05","docId":"Automation_and_Robotics/Home_Automation/2019-01-05--zigbee2mqtt-xiaomi-fhem/index","unlisted":false},{"type":"link","label":"Installing ioBroker on CentOS8 with Podman","href":"/docs/Automation_and_Robotics/Home_Automation/2019-09-24--iobroker-podman-centos8/2019-09-24","docId":"Automation_and_Robotics/Home_Automation/2019-09-24--iobroker-podman-centos8/index","unlisted":false},{"type":"link","label":"OpenHAB2 and MQTT","href":"/docs/Automation_and_Robotics/Home_Automation/2018-12-01--openhab2-on-debian/2018-12-01","docId":"Automation_and_Robotics/Home_Automation/2018-12-01--openhab2-on-debian/index","unlisted":false},{"type":"link","label":"MQTT Camera AI Enhanced Security","href":"/docs/Automation_and_Robotics/Home_Automation/2019-09-23--mqtt-camera-ai-video-security/2019-09-23","docId":"Automation_and_Robotics/Home_Automation/2019-09-23--mqtt-camera-ai-video-security/index","unlisted":false},{"type":"link","label":"Home Assistant and MQTT","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-30--home-assistant-on-debian/2018-11-30","docId":"Automation_and_Robotics/Home_Automation/2018-11-30--home-assistant-on-debian/index","unlisted":false},{"type":"link","label":"Node-RED and MQTT","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-29--node-red-and-mqtt/2018-11-29","docId":"Automation_and_Robotics/Home_Automation/2018-11-29--node-red-and-mqtt/index","unlisted":false},{"type":"link","label":"Developing an App for the Homey Smarthome Gateway","href":"/docs/Automation_and_Robotics/Home_Automation/2019-03-26--writing-a-homey-app/2019-03-26","docId":"Automation_and_Robotics/Home_Automation/2019-03-26--writing-a-homey-app/index","unlisted":false},{"type":"link","label":"Node-RED on Android","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-28--node-red-on-android/2018-11-28","docId":"Automation_and_Robotics/Home_Automation/2018-11-28--node-red-on-android/index","unlisted":false},{"type":"link","label":"IFTTT Alarmserver for IP Cameras","href":"/docs/Automation_and_Robotics/Home_Automation/2019-02-16--ifttt-ip-camera-alarmserver/2019-02-15","docId":"Automation_and_Robotics/Home_Automation/2019-02-16--ifttt-ip-camera-alarmserver/index","unlisted":false},{"type":"link","label":"Node-RED SQL Logging Datastreams","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-27--node-red-sql-logging/2018-11-27","docId":"Automation_and_Robotics/Home_Automation/2018-11-27--node-red-sql-logging/index","unlisted":false},{"type":"link","label":"IFTTT IP Camera","href":"/docs/Automation_and_Robotics/Home_Automation/2019-02-15--ifttt-ip-camera/2019-02-15","docId":"Automation_and_Robotics/Home_Automation/2019-02-15--ifttt-ip-camera/index","unlisted":false},{"type":"link","label":"Node-RED Dashboard and Videostreams","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-26--node-red-and-live-video/2018-11-26","docId":"Automation_and_Robotics/Home_Automation/2018-11-26--node-red-and-live-video/index","unlisted":false},{"type":"link","label":"Webhooks with URL Queries","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-25--webhooks-with-url-queries/2018-11-25","docId":"Automation_and_Robotics/Home_Automation/2018-11-25--webhooks-with-url-queries/index","unlisted":false},{"type":"link","label":"Node-RED Webhooks","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-24--node-red-webhooks/2018-11-24","docId":"Automation_and_Robotics/Home_Automation/2018-11-24--node-red-webhooks/index","unlisted":false},{"type":"link","label":"Node-RED Flows and how to Import them","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-23--node-red-flows/2018-11-23","docId":"Automation_and_Robotics/Home_Automation/2018-11-23--node-red-flows/index","unlisted":false},{"type":"link","label":"Creating Node-RED Admin Panel using node-red-dashboard","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-21--nodered-dashboard-getting-started/2018-11-21","docId":"Automation_and_Robotics/Home_Automation/2018-11-21--nodered-dashboard-getting-started/index","unlisted":false},{"type":"link","label":"Node-RED Interaction over HTTP","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-20--nodered-http-connect/2018-11-20","docId":"Automation_and_Robotics/Home_Automation/2018-11-20--nodered-http-connect/index","unlisted":false},{"type":"link","label":"A Collection of Node-RED MQTT Recipes","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-17--nodered-mqtt-connect/2018-11-17","docId":"Automation_and_Robotics/Home_Automation/2018-11-17--nodered-mqtt-connect/index","unlisted":false},{"type":"link","label":"Node-RED with IFTTT","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-13--nodered-ifttt/2018-11-13","docId":"Automation_and_Robotics/Home_Automation/2018-11-13--nodered-ifttt/index","unlisted":false},{"type":"link","label":"Using SQLite with Node-RED on Windows","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-12--nodered-sqlite/2018-11-12","docId":"Automation_and_Robotics/Home_Automation/2018-11-12--nodered-sqlite/index","unlisted":false},{"type":"link","label":"Creating a Dashboard displaying Cryptocurrency Data using Node-RED","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-05--nodered-cryptocurrency-dashboard/2018-11-05","docId":"Automation_and_Robotics/Home_Automation/2018-11-05--nodered-cryptocurrency-dashboard/index","unlisted":false},{"type":"link","label":"Home Automation and IP Cameras","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-01--openhab2-mqtt-nodered/2018-11-01","docId":"Automation_and_Robotics/Home_Automation/2018-11-01--openhab2-mqtt-nodered/index","unlisted":false},{"type":"link","label":"Getting Started with Node-RED (Windows 10 Edition)","href":"/docs/Automation_and_Robotics/Home_Automation/2018-10-28--nodered-getting-started/2018-10-28","docId":"Automation_and_Robotics/Home_Automation/2018-10-28--nodered-getting-started/index","unlisted":false}],"href":"/docs/category/home-automation"},{"type":"category","label":"MQTT","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"EMQX MQTT Broker with Docker","href":"/docs/Automation_and_Robotics/MQTT/2023-07-25-emqx-mqtt-broker-docker/2023-07-25","docId":"Automation_and_Robotics/MQTT/2023-07-25-emqx-mqtt-broker-docker/index","unlisted":false},{"type":"link","label":"Mosquitto Broker Docker Cross-Compile","href":"/docs/Automation_and_Robotics/MQTT/2022-07-24-mosquitto-broker-cross-compilation/2022-07-24","docId":"Automation_and_Robotics/MQTT/2022-07-24-mosquitto-broker-cross-compilation/index","unlisted":false},{"type":"link","label":"Mosquitto Broker from Source","href":"/docs/Automation_and_Robotics/MQTT/2022-07-23-mosquitto-broker-compilation/2022-07-23","docId":"Automation_and_Robotics/MQTT/2022-07-23-mosquitto-broker-compilation/index","unlisted":false},{"type":"link","label":"Go - MQTT Hello World","href":"/docs/Automation_and_Robotics/MQTT/2022-07-22-go-hello-world/2022-07-22","docId":"Automation_and_Robotics/MQTT/2022-07-22-go-hello-world/index","unlisted":false},{"type":"link","label":"Rust - MQTT Hello World","href":"/docs/Automation_and_Robotics/MQTT/2022-07-21-rust-hello-world/2022-07-21","docId":"Automation_and_Robotics/MQTT/2022-07-21-rust-hello-world/index","unlisted":false},{"type":"link","label":"INSTAR MQTTv5 with Python - Client Connection","href":"/docs/Automation_and_Robotics/MQTT/2022-06-23-instar-mqtt-python-part-I/2022-06-23","docId":"Automation_and_Robotics/MQTT/2022-06-23-instar-mqtt-python-part-I/index","unlisted":false},{"type":"link","label":"INSTAR MQTT with RabbitMQ","href":"/docs/Automation_and_Robotics/MQTT/2022-03-30--mqtt-with-rabbit-mq/2022-03-30","docId":"Automation_and_Robotics/MQTT/2022-03-30--mqtt-with-rabbit-mq/index","unlisted":false},{"type":"link","label":"MQTT Message Server and Angular Frontend","href":"/docs/Automation_and_Robotics/MQTT/2022-03-28--mqtt-message-server/2022-03-28","docId":"Automation_and_Robotics/MQTT/2022-03-28--mqtt-message-server/index","unlisted":false},{"type":"link","label":"Building Eclipse Mosquitto v2 from Source","href":"/docs/Automation_and_Robotics/MQTT/2022-03-27--build-mosquitto-from-source/2022-03-27","docId":"Automation_and_Robotics/MQTT/2022-03-27--build-mosquitto-from-source/index","unlisted":false},{"type":"link","label":"MQTT Clients","href":"/docs/Automation_and_Robotics/MQTT/2022-03-26--mqtt-clients/2022-03-26","docId":"Automation_and_Robotics/MQTT/2022-03-26--mqtt-clients/index","unlisted":false},{"type":"link","label":"Mosquitto v2 MQTT Broker on Debian Bullseye","href":"/docs/Automation_and_Robotics/MQTT/2022-02-01--mosquitto-2-broker/2022-02-01","docId":"Automation_and_Robotics/MQTT/2022-02-01--mosquitto-2-broker/index","unlisted":false},{"type":"link","label":"Go Paho MQTT Client","href":"/docs/Automation_and_Robotics/MQTT/2021-09-12--golang-paho-mqtt/2021-09-12","docId":"Automation_and_Robotics/MQTT/2021-09-12--golang-paho-mqtt/index","unlisted":false},{"type":"link","label":"MQTT Networks with Home Assistant","href":"/docs/Automation_and_Robotics/MQTT/2019-08-11--mqtt-home-assistant/2019-08-11","docId":"Automation_and_Robotics/MQTT/2019-08-11--mqtt-home-assistant/index","unlisted":false},{"type":"link","label":"MQTT Networks with Athom Homey","href":"/docs/Automation_and_Robotics/MQTT/2019-08-10--mqtt-athom-homey/2019-08-10","docId":"Automation_and_Robotics/MQTT/2019-08-10--mqtt-athom-homey/index","unlisted":false},{"type":"link","label":"MQTT Networks with homee","href":"/docs/Automation_and_Robotics/MQTT/2019-08-09--mqtt-homee/2019-08-09","docId":"Automation_and_Robotics/MQTT/2019-08-09--mqtt-homee/index","unlisted":false},{"type":"link","label":"MQTT Networks with Homematic","href":"/docs/Automation_and_Robotics/MQTT/2019-08-08--mqtt-homematic/2019-08-08","docId":"Automation_and_Robotics/MQTT/2019-08-08--mqtt-homematic/index","unlisted":false},{"type":"link","label":"MQTT Networks with ioBroker","href":"/docs/Automation_and_Robotics/MQTT/2019-08-07--mqtt-iobroker/2019-08-07","docId":"Automation_and_Robotics/MQTT/2019-08-07--mqtt-iobroker/index","unlisted":false},{"type":"link","label":"MQTT Networks with Node-RED","href":"/docs/Automation_and_Robotics/MQTT/2019-08-06--mqtt-node-red/2019-08-06","docId":"Automation_and_Robotics/MQTT/2019-08-06--mqtt-node-red/index","unlisted":false},{"type":"link","label":"MQTT Networks with OpenHAB 2","href":"/docs/Automation_and_Robotics/MQTT/2019-08-05--mqtt-openhab2/2019-08-05","docId":"Automation_and_Robotics/MQTT/2019-08-05--mqtt-openhab2/index","unlisted":false},{"type":"link","label":"MQTT Android Dashboards","href":"/docs/Automation_and_Robotics/MQTT/2019-08-04--mqtt-android-dashboards/2019-08-04","docId":"Automation_and_Robotics/MQTT/2019-08-04--mqtt-android-dashboards/index","unlisted":false},{"type":"link","label":"Debugging MQTT Sensor Networks","href":"/docs/Automation_and_Robotics/MQTT/2019-08-03--mqtt-debugging/2019-08-03","docId":"Automation_and_Robotics/MQTT/2019-08-03--mqtt-debugging/index","unlisted":false}],"href":"/docs/category/mqtt"},{"type":"category","label":"Robotics & Simulation","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Tello Drone - Getting Started","href":"/docs/Automation_and_Robotics/Robotics_Simulation/2023-12-16--tellopy-drone-api/2023-12-16","docId":"Automation_and_Robotics/Robotics_Simulation/2023-12-16--tellopy-drone-api/index","unlisted":false},{"type":"link","label":"ROS2 Webots Robot Simulation","href":"/docs/Automation_and_Robotics/Robotics_Simulation/2023-11-26--ros2-webots/2023-11-26","docId":"Automation_and_Robotics/Robotics_Simulation/2023-11-26--ros2-webots/index","unlisted":false},{"type":"link","label":"ROS2 Gazebo Robot Simulation","href":"/docs/Automation_and_Robotics/Robotics_Simulation/2023-11-26--ros2-gazebo-simulation/2023-11-26","docId":"Automation_and_Robotics/Robotics_Simulation/2023-11-26--ros2-gazebo-simulation/index","unlisted":false},{"type":"link","label":"ROS2 Graph Concepts","href":"/docs/Automation_and_Robotics/Robotics_Simulation/2023-11-24--ros2-graph/2023-11-24","docId":"Automation_and_Robotics/Robotics_Simulation/2023-11-24--ros2-graph/index","unlisted":false},{"type":"link","label":"Gazebo & ROS2 Basic Installation","href":"/docs/Automation_and_Robotics/Robotics_Simulation/2023-11-19--ros2-gazebo-installation/2023-11-19","docId":"Automation_and_Robotics/Robotics_Simulation/2023-11-19--ros2-gazebo-installation/index","unlisted":false}],"href":"/docs/category/robotics--simulation"}],"href":"/docs/category/automation-deep-vision-and-robotics"}]},"docs":{"Automation_and_Robotics/Home_Automation/2018-10-28--nodered-getting-started/index":{"id":"Automation_and_Robotics/Home_Automation/2018-10-28--nodered-getting-started/index","title":"Getting Started with Node-RED (Windows 10 Edition)","description":"Harbin, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-01--openhab2-mqtt-nodered/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-01--openhab2-mqtt-nodered/index","title":"Home Automation and IP Cameras","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-05--nodered-cryptocurrency-dashboard/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-05--nodered-cryptocurrency-dashboard/index","title":"Creating a Dashboard displaying Cryptocurrency Data using Node-RED","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-12--nodered-sqlite/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-12--nodered-sqlite/index","title":"Using SQLite with Node-RED on Windows","description":"Pokhara, Nepal","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-13--nodered-ifttt/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-13--nodered-ifttt/index","title":"Node-RED with IFTTT","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-17--nodered-mqtt-connect/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-17--nodered-mqtt-connect/index","title":"A Collection of Node-RED MQTT Recipes","description":"Tanna Island, Vanuatu","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-20--nodered-http-connect/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-20--nodered-http-connect/index","title":"Node-RED Interaction over HTTP","description":"Harbin, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-21--nodered-dashboard-getting-started/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-21--nodered-dashboard-getting-started/index","title":"Creating Node-RED Admin Panel using node-red-dashboard","description":"Harbin, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-23--node-red-flows/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-23--node-red-flows/index","title":"Node-RED Flows and how to Import them","description":"Abashiri, Japan","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-24--node-red-webhooks/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-24--node-red-webhooks/index","title":"Node-RED Webhooks","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-25--webhooks-with-url-queries/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-25--webhooks-with-url-queries/index","title":"Webhooks with URL Queries","description":"Sapporo, Japan","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-26--node-red-and-live-video/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-26--node-red-and-live-video/index","title":"Node-RED Dashboard and Videostreams","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-27--node-red-sql-logging/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-27--node-red-sql-logging/index","title":"Node-RED SQL Logging Datastreams","description":"Annapurna, Nepal","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-28--node-red-on-android/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-28--node-red-on-android/index","title":"Node-RED on Android","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-29--node-red-and-mqtt/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-29--node-red-and-mqtt/index","title":"Node-RED and MQTT","description":"Mongkok, Hong Kong","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-30--home-assistant-on-debian/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-30--home-assistant-on-debian/index","title":"Home Assistant and MQTT","description":"Harbin, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-12-01--openhab2-on-debian/index":{"id":"Automation_and_Robotics/Home_Automation/2018-12-01--openhab2-on-debian/index","title":"OpenHAB2 and MQTT","description":"Kathmandu, Nepal","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-01-05--zigbee2mqtt-xiaomi-fhem/index":{"id":"Automation_and_Robotics/Home_Automation/2019-01-05--zigbee2mqtt-xiaomi-fhem/index","title":"Zigbee Sensors in FHEM","description":"Hongkong","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-02-07--motioneye-on-debian/index":{"id":"Automation_and_Robotics/Home_Automation/2019-02-07--motioneye-on-debian/index","title":"MotionEye Video Surveillance","description":"Harbin, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-02-08--shinobi-on-debian/index":{"id":"Automation_and_Robotics/Home_Automation/2019-02-08--shinobi-on-debian/index","title":"Shinobi Video Surveillance","description":"Furano, Japan","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-02-09--zoneminder-in-docker/index":{"id":"Automation_and_Robotics/Home_Automation/2019-02-09--zoneminder-in-docker/index","title":"Zoneminder Dockerized","description":"Furano, Japan","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-02-11--loxone-miniserver/index":{"id":"Automation_and_Robotics/Home_Automation/2019-02-11--loxone-miniserver/index","title":"Loxone Miniserver","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-02-15--ifttt-ip-camera/index":{"id":"Automation_and_Robotics/Home_Automation/2019-02-15--ifttt-ip-camera/index","title":"IFTTT IP Camera","description":"Mustang, Nepal","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-02-16--ifttt-ip-camera-alarmserver/index":{"id":"Automation_and_Robotics/Home_Automation/2019-02-16--ifttt-ip-camera-alarmserver/index","title":"IFTTT Alarmserver for IP Cameras","description":"Mustang, Nepal","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-03-26--writing-a-homey-app/index":{"id":"Automation_and_Robotics/Home_Automation/2019-03-26--writing-a-homey-app/index","title":"Developing an App for the Homey Smarthome Gateway","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-09-23--mqtt-camera-ai-video-security/index":{"id":"Automation_and_Robotics/Home_Automation/2019-09-23--mqtt-camera-ai-video-security/index","title":"MQTT Camera AI Enhanced Security","description":"Central, Hong Kong","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-09-24--iobroker-podman-centos8/index":{"id":"Automation_and_Robotics/Home_Automation/2019-09-24--iobroker-podman-centos8/index","title":"Installing ioBroker on CentOS8 with Podman","description":"Shanghai, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-09-24--motioneye-podman-centos8/index":{"id":"Automation_and_Robotics/Home_Automation/2019-09-24--motioneye-podman-centos8/index","title":"Installing MotionEye on CentOS8 with Podman","description":"Shanghai, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-09-27--home-assistant-podman-centos8/index":{"id":"Automation_and_Robotics/Home_Automation/2019-09-27--home-assistant-podman-centos8/index","title":"Home Assistant, OpenHAB, Node-RED, ioBroker, MotionEye Containerized (Podman)","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-09-28--node-red-homekit-containerized/index":{"id":"Automation_and_Robotics/Home_Automation/2019-09-28--node-red-homekit-containerized/index","title":"Adding Homekit to your Node-RED Container in Podman","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-12-01--podman-hombridge-to-mqtt/index":{"id":"Automation_and_Robotics/Home_Automation/2019-12-01--podman-hombridge-to-mqtt/index","title":"Podman Homebridge to MQTT","description":"Sapporo, Japan","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2020-09-15--mock-rest-api-with-nodered/index":{"id":"Automation_and_Robotics/Home_Automation/2020-09-15--mock-rest-api-with-nodered/index","title":"A Mock REST API in Node-RED and Docker","description":"Koh Rong, Cambodia","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2020-09-16--testing-new-rest-api-with-nodered/index":{"id":"Automation_and_Robotics/Home_Automation/2020-09-16--testing-new-rest-api-with-nodered/index","title":"Testing a new REST API in Node-RED","description":"Koh Rong, Cambodia","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2020-12-01--openhab3-in-docker/index":{"id":"Automation_and_Robotics/Home_Automation/2020-12-01--openhab3-in-docker/index","title":"Trying out OpenHAB 3 in Docker","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2020-12-02--openhab3-mqtt-binding/index":{"id":"Automation_and_Robotics/Home_Automation/2020-12-02--openhab3-mqtt-binding/index","title":"OpenHAB 3 MQTT Binding","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2020-12-03--openhab3-camera-binding/index":{"id":"Automation_and_Robotics/Home_Automation/2020-12-03--openhab3-camera-binding/index","title":"OpenHAB 3 INSTAR Camera Binding","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2022-07-10-home-assistant-mqtt-autodiscovery-part-i/index":{"id":"Automation_and_Robotics/Home_Automation/2022-07-10-home-assistant-mqtt-autodiscovery-part-i/index","title":"Home Assistant - MQTT Auto-Discovery :: Configuration","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2022-07-11-home-assistant-mqtt-autodiscovery-part-ii/index":{"id":"Automation_and_Robotics/Home_Automation/2022-07-11-home-assistant-mqtt-autodiscovery-part-ii/index","title":"Home Assistant - MQTT Auto-Discovery :: Automation","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2022-07-12-home-assistant-mqtt-python/index":{"id":"Automation_and_Robotics/Home_Automation/2022-07-12-home-assistant-mqtt-python/index","title":"Home Assistant - Python Scripts as Service","description":"The discovery of MQTT devices will enable one to use MQTT devices with only minimal configuration effort on the side of Home Assistant. Two parts are required on the device side - The configuration topic which contains the necessary device type and unique identifier, and the remaining device configuration without the device type.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2022-07-15-node-red-mqtt-homie/index":{"id":"Automation_and_Robotics/Home_Automation/2022-07-15-node-red-mqtt-homie/index","title":"Node-RED - MQTT Homie Convention","description":"I want to use Node-RED to explore how to configure devices using the Homie Convention with the goal of adding this feature to INSTAR MQTT cameras.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2022-07-16-openhab-mqtt-homie/index":{"id":"Automation_and_Robotics/Home_Automation/2022-07-16-openhab-mqtt-homie/index","title":"OpenHab - MQTT Homie Convention","description":"I want to use OpenHab 3 to explore how to configure devices using the Homie Convention with the goal of adding this feature to INSTAR MQTT cameras. I already set-up the OpenHab MQTT Binding which supports the convention. So all I have to do is to add a few configuration topics to register a Homie Device with our MQTT broker using the MQTT Explorer.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2022-07-17-node-red-for-mqtt-autodiscovery/index":{"id":"Automation_and_Robotics/Home_Automation/2022-07-17-node-red-for-mqtt-autodiscovery/index","title":"MQTT Auto-Discovery - Use Node-RED to register Smarthome Devices","description":"Previously I wrote a Python Script that allowed me to register MQTT devices with Home Assistant using the HA internal auto-discovery service. The same script can be used to register those devices with OpenHAB using the homie convention. Now I want to use Node-RED to dynamically register devices, instead of providing fixed configuration files for each device.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2022-10-18-camera-ui-docker/index":{"id":"Automation_and_Robotics/Home_Automation/2022-10-18-camera-ui-docker/index","title":"Run Camera.UI with Docker-Compose","description":"camera.ui is a NVR like PWA to control your RTSP capable cameras with.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2022-12-15--rtsp-to-hls-ffmpeg/index":{"id":"Automation_and_Robotics/Home_Automation/2022-12-15--rtsp-to-hls-ffmpeg/index","title":"Convert RTSP to HLS using FFmpeg","description":"INSTAR IP Camera RTSP Stream to HLS with FFMPEG","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2022-12-22--grafana-for-iot/index":{"id":"Automation_and_Robotics/Home_Automation/2022-12-22--grafana-for-iot/index","title":"Grafana IoT Dashboard","description":"Building IoT Visualizations using Grafana","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2023-01-23-thread-edge-router-docker/index":{"id":"Automation_and_Robotics/Home_Automation/2023-01-23-thread-edge-router-docker/index","title":"OpenThread Border Router with Docker with Docker","description":"Build an OpenThread Border Router with Raspberry Pi 3B+ and Pitaya Go.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2023-01-23-thread-edge-router/index":{"id":"Automation_and_Robotics/Home_Automation/2023-01-23-thread-edge-router/index","title":"OpenThread Border Router","description":"Build an OpenThread Border Router with Raspberry Pi 3B+ and Pitaya Go.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2023-02-07-python-home-security/index":{"id":"Automation_and_Robotics/Home_Automation/2023-02-07-python-home-security/index","title":"Camera Surveillance System with OpenCV","description":"Using OpenCV to detect motion in an RTSP Stream and display detection in an PyQt Interface","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2023-04-17-home-assistant-mqtt-autodiscovery-part-iii/index":{"id":"Automation_and_Robotics/Home_Automation/2023-04-17-home-assistant-mqtt-autodiscovery-part-iii/index","title":"(Re) Introduction to Home Assistant Auto-discovery","description":"Using the INSTAR IP Cameras MQTT Interface to add your Camera to Home Assistant.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2023-04-18--home-assistant-node-red-iobroker-docker/index":{"id":"Automation_and_Robotics/Home_Automation/2023-04-18--home-assistant-node-red-iobroker-docker/index","title":"Home Assistant, OpenHAB, Node-RED, ioBroker, MotionEye, ZoneMinder, Frigate, iSpy Agent, Kerberos Containerized (Docker)","description":"Smarthome Cheat Sheet (Docker Edition)","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2024-01-09--home-assistant-rtsptoweb/index":{"id":"Automation_and_Robotics/Home_Automation/2024-01-09--home-assistant-rtsptoweb/index","title":"Home Assistant with RTSPtoWeb","description":"Home Assistant with WebRTC for INSTAR IP cameras using RTSPtoWeb.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2024-01-10--go2rtc/index":{"id":"Automation_and_Robotics/Home_Automation/2024-01-10--go2rtc/index","title":"INSTAR go2rtc for Home Assistant","description":"Use go2rtc to embed your INSTAR IP camera\'s webRTC live video in Home Assistant, ioBroker, Node-RED or OpenHab (Docker)","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2019-08-03--mqtt-debugging/index":{"id":"Automation_and_Robotics/MQTT/2019-08-03--mqtt-debugging/index","title":"Debugging MQTT Sensor Networks","description":"Mustang, Nepal","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2019-08-04--mqtt-android-dashboards/index":{"id":"Automation_and_Robotics/MQTT/2019-08-04--mqtt-android-dashboards/index","title":"MQTT Android Dashboards","description":"Shanghai, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2019-08-05--mqtt-openhab2/index":{"id":"Automation_and_Robotics/MQTT/2019-08-05--mqtt-openhab2/index","title":"MQTT Networks with OpenHAB 2","description":"Bhaktapur, Nepal","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2019-08-06--mqtt-node-red/index":{"id":"Automation_and_Robotics/MQTT/2019-08-06--mqtt-node-red/index","title":"MQTT Networks with Node-RED","description":"Mustang, Nepal","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2019-08-07--mqtt-iobroker/index":{"id":"Automation_and_Robotics/MQTT/2019-08-07--mqtt-iobroker/index","title":"MQTT Networks with ioBroker","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2019-08-08--mqtt-homematic/index":{"id":"Automation_and_Robotics/MQTT/2019-08-08--mqtt-homematic/index","title":"MQTT Networks with Homematic","description":"Central, Hong Kong","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2019-08-09--mqtt-homee/index":{"id":"Automation_and_Robotics/MQTT/2019-08-09--mqtt-homee/index","title":"MQTT Networks with homee","description":"Kowloon, Hong Kong","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2019-08-10--mqtt-athom-homey/index":{"id":"Automation_and_Robotics/MQTT/2019-08-10--mqtt-athom-homey/index","title":"MQTT Networks with Athom Homey","description":"Central, Hong Kong","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2019-08-11--mqtt-home-assistant/index":{"id":"Automation_and_Robotics/MQTT/2019-08-11--mqtt-home-assistant/index","title":"MQTT Networks with Home Assistant","description":"Taipa, Macau","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2021-09-12--golang-paho-mqtt/index":{"id":"Automation_and_Robotics/MQTT/2021-09-12--golang-paho-mqtt/index","title":"Go Paho MQTT Client","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2022-02-01--mosquitto-2-broker/index":{"id":"Automation_and_Robotics/MQTT/2022-02-01--mosquitto-2-broker/index","title":"Mosquitto v2 MQTT Broker on Debian Bullseye","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2022-03-26--mqtt-clients/index":{"id":"Automation_and_Robotics/MQTT/2022-03-26--mqtt-clients/index","title":"MQTT Clients","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2022-03-27--build-mosquitto-from-source/index":{"id":"Automation_and_Robotics/MQTT/2022-03-27--build-mosquitto-from-source/index","title":"Building Eclipse Mosquitto v2 from Source","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2022-03-28--mqtt-message-server/index":{"id":"Automation_and_Robotics/MQTT/2022-03-28--mqtt-message-server/index","title":"MQTT Message Server and Angular Frontend","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2022-03-30--mqtt-with-rabbit-mq/index":{"id":"Automation_and_Robotics/MQTT/2022-03-30--mqtt-with-rabbit-mq/index","title":"INSTAR MQTT with RabbitMQ","description":"Using RabbitMQ as MQTT Broker for your INSTAR IP Camera","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2022-06-23-instar-mqtt-python-part-I/index":{"id":"Automation_and_Robotics/MQTT/2022-06-23-instar-mqtt-python-part-I/index","title":"INSTAR MQTTv5 with Python - Client Connection","description":"The discovery of MQTT devices will enable one to use MQTT devices with only minimal configuration effort on the side of Home Assistant. Two parts are required on the device side - The configuration topic which contains the necessary device type and unique identifier, and the remaining device configuration without the device type.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2022-07-21-rust-hello-world/index":{"id":"Automation_and_Robotics/MQTT/2022-07-21-rust-hello-world/index","title":"Rust - MQTT Hello World","description":"Rust is a multi-paradigm programming language designed for performance and safety, especially safe concurrency. Rust is syntactically similar to C++, but can guarantee memory safety by using a borrow checker to validate references.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2022-07-22-go-hello-world/index":{"id":"Automation_and_Robotics/MQTT/2022-07-22-go-hello-world/index","title":"Go - MQTT Hello World","description":"Writing a Go program that connects to my camera MQTT broker, subscribes to the last-will topic and publishes updates to the privacy mask to turn it on and off again after 15s. The client disconnects after 250ms after that.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2022-07-23-mosquitto-broker-compilation/index":{"id":"Automation_and_Robotics/MQTT/2022-07-23-mosquitto-broker-compilation/index","title":"Mosquitto Broker from Source","description":"Building the Mosquitto MQTT broker from source on an Arch Linux System with Websocket support.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2022-07-24-mosquitto-broker-cross-compilation/index":{"id":"Automation_and_Robotics/MQTT/2022-07-24-mosquitto-broker-cross-compilation/index","title":"Mosquitto Broker Docker Cross-Compile","description":"In the previous article I compiled the Mosquitto broker on Arch Linux and was able to get it to work with Websocket support. The target system - an INSTAR IP camera - uses an ARM processor which means that I have to find a way to cross-compile a binary that I can run on that system","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2023-07-25-emqx-mqtt-broker-docker/index":{"id":"Automation_and_Robotics/MQTT/2023-07-25-emqx-mqtt-broker-docker/index","title":"EMQX MQTT Broker with Docker","description":"EMQX is an open-source (opens new window), highly scalable, and feature-rich MQTT broker designed for IoT and real-time messaging applications.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Robotics_Simulation/2023-11-19--ros2-gazebo-installation/index":{"id":"Automation_and_Robotics/Robotics_Simulation/2023-11-19--ros2-gazebo-installation/index","title":"Gazebo & ROS2 Basic Installation","description":"Gazebo brings a fresh approach to simulation with a complete toolbox of development libraries and cloud services to make simulation easy.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Robotics_Simulation/2023-11-24--ros2-graph/index":{"id":"Automation_and_Robotics/Robotics_Simulation/2023-11-24--ros2-graph/index","title":"ROS2 Graph Concepts","description":"ROS2 Architecture and Concepts","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Robotics_Simulation/2023-11-26--ros2-gazebo-simulation/index":{"id":"Automation_and_Robotics/Robotics_Simulation/2023-11-26--ros2-gazebo-simulation/index","title":"ROS2 Gazebo Robot Simulation","description":"Launch a Simulation with Gazebo and ROS2","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Robotics_Simulation/2023-11-26--ros2-webots/index":{"id":"Automation_and_Robotics/Robotics_Simulation/2023-11-26--ros2-webots/index","title":"ROS2 Webots Robot Simulation","description":"Configure the Webots simulator with ROS2","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Robotics_Simulation/2023-12-16--tellopy-drone-api/index":{"id":"Automation_and_Robotics/Robotics_Simulation/2023-12-16--tellopy-drone-api/index","title":"Tello Drone - Getting Started","description":"Introduction to programming your Tello Drone using Python","sidebar":"tutorialSidebar"},"Development/Go/2021-02-21-gofiber-container-gatsby/index":{"id":"Development/Go/2021-02-21-gofiber-container-gatsby/index","title":"GoFiber Container for your Gatsby Build","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Go/2021-06-03--mqtt-with-golang/index":{"id":"Development/Go/2021-06-03--mqtt-with-golang/index","title":"Paho MQTT Client with Golang","description":"Mong Kok, Hongkong","sidebar":"tutorialSidebar"},"Development/Go/2021-09-10--go-websockets/index":{"id":"Development/Go/2021-09-10--go-websockets/index","title":"Go Websockets","description":"Jomsom, Nepal","sidebar":"tutorialSidebar"},"Development/Go/2021-09-11--golang-refresher-fmt-strings/index":{"id":"Development/Go/2021-09-11--golang-refresher-fmt-strings/index","title":"Golang Refresher :: fmt & strings","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"Development/Go/2021-09-11--golang-refresher-math-os/index":{"id":"Development/Go/2021-09-11--golang-refresher-math-os/index","title":"Golang Refresher :: math & os","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"Development/Go/2021-09-11--golang-refresher-network/index":{"id":"Development/Go/2021-09-11--golang-refresher-network/index","title":"Golang Refresher :: url & http","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"Development/Go/2021-09-21--golang-react-starter-part-i/index":{"id":"Development/Go/2021-09-21--golang-react-starter-part-i/index","title":"Getting started with Go and React - Webservice, Routing and Status Log","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Go/2021-09-22--golang-react-starter-part-ii/index":{"id":"Development/Go/2021-09-22--golang-react-starter-part-ii/index","title":"Getting started with Go and React - API Routes","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Go/2021-09-23--golang-react-starter-part-iii/index":{"id":"Development/Go/2021-09-23--golang-react-starter-part-iii/index","title":"Getting started with Go and React - PostgreSQL","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Go/2021-09-24--golang-react-starter-part-iv/index":{"id":"Development/Go/2021-09-24--golang-react-starter-part-iv/index","title":"Getting started with Go and React - React & REST API\'s","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Go/2021-10-08--goftp/index":{"id":"Development/Go/2021-10-08--goftp/index","title":"goFTP","description":"Victoria , Hong Kong","sidebar":"tutorialSidebar"},"Development/Go/2022-06-15-wails-go-react/index":{"id":"Development/Go/2022-06-15-wails-go-react/index","title":"Wails - Build desktop apps using Go & React","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"Development/Go/2022-10-04-go-ntp-client/index":{"id":"Development/Go/2022-10-04-go-ntp-client/index","title":"Build a NTP/S Timeserver Client in Go","description":"A Go client that can interact with a key-secured Chrony NTS timeserver.","sidebar":"tutorialSidebar"},"Development/Go/2022-10-05-go-reducing-binary-size/index":{"id":"Development/Go/2022-10-05-go-reducing-binary-size/index","title":"Go Build!","description":"Cross-compile in Go and reduce the binary size of your Go program.","sidebar":"tutorialSidebar"},"Development/Go/2022-10-15-go-oauth2-server/index":{"id":"Development/Go/2022-10-15-go-oauth2-server/index","title":"Go OAuth2 Server","description":"Simple OAuth2 Implementation in Go","sidebar":"tutorialSidebar"},"Development/Go/2022-11-11-go-nts-client-ci/index":{"id":"Development/Go/2022-11-11-go-nts-client-ci/index","title":"Building a NTP/S Timeserver Client in Go with Gitlab CI","description":"A Go client that can interact with a key-secured Chrony NTS timeserver.","sidebar":"tutorialSidebar"},"Development/Go/2022-12-26-go-webassembly/index":{"id":"Development/Go/2022-12-26-go-webassembly/index","title":"Go WebAssembly","description":"Build WebAssembly Apps in Go","sidebar":"tutorialSidebar"},"Development/Go/2022-12-27-go-bubbles/index":{"id":"Development/Go/2022-12-27-go-bubbles/index","title":"Go Bubbles","description":"Bubble Sorting through Slices in Go","sidebar":"tutorialSidebar"},"Development/Go/2022-12-27-go-data-structures/index":{"id":"Development/Go/2022-12-27-go-data-structures/index","title":"Go Data Structures","description":"Available data representations in the Go programming language","sidebar":"tutorialSidebar"},"Development/Graphs/2020-05-01--getting-to-know-neo4j/index":{"id":"Development/Graphs/2020-05-01--getting-to-know-neo4j/index","title":"Getting to Know Neo4j","description":"Mongkok, Hong Kong","sidebar":"tutorialSidebar"},"Development/Graphs/2020-05-02--neo4j-movie-graph/index":{"id":"Development/Graphs/2020-05-02--neo4j-movie-graph/index","title":"Neo4j Movie Graph","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Graphs/2020-05-03--neo4j-cheat-sheet/index":{"id":"Development/Graphs/2020-05-03--neo4j-cheat-sheet/index","title":"Neo4j Cypher Cheat Sheet","description":"Maritime Museum, Hong Kong","sidebar":"tutorialSidebar"},"Development/Graphs/2020-05-04--neo4j-corona-tracing/index":{"id":"Development/Graphs/2020-05-04--neo4j-corona-tracing/index","title":"Neo4j Corona Tracing","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Graphs/2020-05-05--graphql-queries-and-mutations/index":{"id":"Development/Graphs/2020-05-05--graphql-queries-and-mutations/index","title":"GraphQL Queries and Mutations","description":"Kathmandu, Nepal","sidebar":"tutorialSidebar"},"Development/Javascript/2010-01-01--mdx/index":{"id":"Development/Javascript/2010-01-01--mdx/index","title":"Markdown Cheatsheet","description":"View raw (TEST.md)","sidebar":"tutorialSidebar"},"Development/Javascript/2010-01-05--markdown-live-code/index":{"id":"Development/Javascript/2010-01-05--markdown-live-code/index","title":"React-Live & Code example","description":"A live code sample:","sidebar":"tutorialSidebar"},"Development/Javascript/2016-05-27--javascript-apis-and-ajax/index":{"id":"Development/Javascript/2016-05-27--javascript-apis-and-ajax/index","title":"JavaScript and Getting Started with APIs and AJAX","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Javascript/2016-06-01--node-express-mongodb/index":{"id":"Development/Javascript/2016-06-01--node-express-mongodb/index","title":"Node/Express with MongoDB","description":"Hongkong","sidebar":"tutorialSidebar"},"Development/Javascript/2016-08-11--node-express-static-wiki/index":{"id":"Development/Javascript/2016-08-11--node-express-static-wiki/index","title":"Node Express Static","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"Development/Javascript/2017-07-04--random-password-generator/index":{"id":"Development/Javascript/2017-07-04--random-password-generator/index","title":"Random Password Generator","description":"Tana Island, Vanuatu","sidebar":"tutorialSidebar"},"Development/Javascript/2017-07-22--caloric-burn/index":{"id":"Development/Javascript/2017-07-22--caloric-burn/index","title":"Food Caloric Table App","description":"Port Vila, Vanuatu","sidebar":"tutorialSidebar"},"Development/Javascript/2017-07-24--obligatory-react-todo-list/index":{"id":"Development/Javascript/2017-07-24--obligatory-react-todo-list/index","title":"React TODO List","description":"\x3c!--","sidebar":"tutorialSidebar"},"Development/Javascript/2017-08-07--google-analytics-amp/index":{"id":"Development/Javascript/2017-08-07--google-analytics-amp/index","title":"Google Analytics in AMP","description":"Harbin, China","sidebar":"tutorialSidebar"},"Development/Javascript/2017-08-15--gatsby-blog-starter/index":{"id":"Development/Javascript/2017-08-15--gatsby-blog-starter/index","title":"Gatsby Blog Starter","description":"Harbin, China","sidebar":"tutorialSidebar"},"Development/Javascript/2017-08-21--reactive-material/index":{"id":"Development/Javascript/2017-08-21--reactive-material/index","title":"create-react-app and Material-UI","description":"Harbin, China","sidebar":"tutorialSidebar"},"Development/Javascript/2017-09-03--react-under-the-hood/index":{"id":"Development/Javascript/2017-09-03--react-under-the-hood/index","title":"React under the Hood","description":"Harbin, China","sidebar":"tutorialSidebar"},"Development/Javascript/2017-12-07--react-router-4/index":{"id":"Development/Javascript/2017-12-07--react-router-4/index","title":"React Router 4","description":"Hongkong","sidebar":"tutorialSidebar"},"Development/Javascript/2017-12-09--next-start/index":{"id":"Development/Javascript/2017-12-09--next-start/index","title":"Next.js Server Side Rendering","description":"Tanna Island, Vanuatu","sidebar":"tutorialSidebar"},"Development/Javascript/2017-12-14--gatsby-wiki/index":{"id":"Development/Javascript/2017-12-14--gatsby-wiki/index","title":"Gatsby.js Knowledgebase","description":"Tanna Island, Vanuatu","sidebar":"tutorialSidebar"},"Development/Javascript/2017-12-17--gatsby-reactstrap/index":{"id":"Development/Javascript/2017-12-17--gatsby-reactstrap/index","title":"Gatsby.js with Bootstrap 4","description":"Harbin, China","sidebar":"tutorialSidebar"},"Development/Javascript/2018-01-07--gatsby-material-ui-starter/index":{"id":"Development/Javascript/2018-01-07--gatsby-material-ui-starter/index","title":"Gatsby Material UI Starter","description":"Koh Rong, Cambodia","sidebar":"tutorialSidebar"},"Development/Javascript/2018-01-15--react-transition-group-demo/index":{"id":"Development/Javascript/2018-01-15--react-transition-group-demo/index","title":"react-transition-group","description":"Angkor Wat, Cambodia","sidebar":"tutorialSidebar"},"Development/Javascript/2018-01-17--server-side-render-react-router/index":{"id":"Development/Javascript/2018-01-17--server-side-render-react-router/index","title":"Server Rendering with React and React Router","description":"Angkor, Cambodia","sidebar":"tutorialSidebar"},"Development/Javascript/2019-08-02--building-an-mqtt-interface/index":{"id":"Development/Javascript/2019-08-02--building-an-mqtt-interface/index","title":"Building a MQTT Interface","description":"Shanghai, China","sidebar":"tutorialSidebar"},"Development/Javascript/2020-01-12--node-express-redirect-server/index":{"id":"Development/Javascript/2020-01-12--node-express-redirect-server/index","title":"Web traffic redirection with Node and Express on CentOS8","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Javascript/2021-02-14-next-js-2021/index":{"id":"Development/Javascript/2021-02-14-next-js-2021/index","title":"Next.js in 2021","description":"Jomson, Nepal","sidebar":"tutorialSidebar"},"Development/Javascript/2021-05-07-electron-cross-platform-apps/index":{"id":"Development/Javascript/2021-05-07-electron-cross-platform-apps/index","title":"Electron for Cross Platform Applications","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Javascript/2021-05-08-electron13-gatsby-wrapper/index":{"id":"Development/Javascript/2021-05-08-electron13-gatsby-wrapper/index","title":"Electron@13 as a Gatsby.js Wrapper","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Javascript/2021-05-09-electron13-and-react/index":{"id":"Development/Javascript/2021-05-09-electron13-and-react/index","title":"Electron@13 and Create-React-App","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Javascript/2021-05-10-carbon-design-react/index":{"id":"Development/Javascript/2021-05-10-carbon-design-react/index","title":"Carbon Design System in React.js - Part I","description":"Mongkok, Hongkong","sidebar":"tutorialSidebar"},"Development/Javascript/2021-05-11-carbon-design-react-part2/index":{"id":"Development/Javascript/2021-05-11-carbon-design-react-part2/index","title":"Carbon Design System in React.js - Part II","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"Development/Javascript/2021-05-12-carbon-design-react-part3/index":{"id":"Development/Javascript/2021-05-12-carbon-design-react-part3/index","title":"Carbon Design System in React.js - Part III","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"Development/Javascript/2021-06-01--mqtt-with-reactjs/index":{"id":"Development/Javascript/2021-06-01--mqtt-with-reactjs/index","title":"MQTT Webfrontend with React.js","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Javascript/2021-06-02--mqtt-cheat-sheet/index":{"id":"Development/Javascript/2021-06-02--mqtt-cheat-sheet/index","title":"Mosquitto MQTT Cheat Sheet","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"Development/Javascript/2021-06-04--mqtt-dashboard-react/index":{"id":"Development/Javascript/2021-06-04--mqtt-dashboard-react/index","title":"React Dashboard for MQTT","description":"Wanchai, Hongkong","sidebar":"tutorialSidebar"},"Development/Javascript/2021-09-07--intro-to-websockets/index":{"id":"Development/Javascript/2021-09-07--intro-to-websockets/index","title":"Introduction to Websockets","description":"Tsim Sha Tsui, Hong Kong","sidebar":"tutorialSidebar"},"Development/Javascript/2021-09-08--websockets-html-video/index":{"id":"Development/Javascript/2021-09-08--websockets-html-video/index","title":"HTML Video over Websockets","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Javascript/2021-09-09--websocket-HAproxy/index":{"id":"Development/Javascript/2021-09-09--websocket-HAproxy/index","title":"HAProxy Loadbalancing and Websockets","description":"Wan Chai, Hong Kong","sidebar":"tutorialSidebar"},"Development/Javascript/2021-09-09--websocket-NGINX/index":{"id":"Development/Javascript/2021-09-09--websocket-NGINX/index","title":"NGINX as a Proxy for Websockets","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Javascript/2021-09-10--notifications-alerts-as-toast/index":{"id":"Development/Javascript/2021-09-10--notifications-alerts-as-toast/index","title":"Convert Alerts into Toasts","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Javascript/2021-09-10--websocket-recconects/index":{"id":"Development/Javascript/2021-09-10--websocket-recconects/index","title":"Reconnecting Websockets","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Javascript/2022-03-01--json-apis-training/index":{"id":"Development/Javascript/2022-03-01--json-apis-training/index","title":"Working with JSON APIs","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Javascript/2022-07-01-docusaurus-introduction/index":{"id":"Development/Javascript/2022-07-01-docusaurus-introduction/index","title":"Docusaurus Introduction","description":"- Scaffold your website","sidebar":"tutorialSidebar"},"Development/Javascript/2022-10-29-webrtc-introduction-realtime-chat/index":{"id":"Development/Javascript/2022-10-29-webrtc-introduction-realtime-chat/index","title":"WebRTC Introduction - Realtime Chat","description":"Establishing a bidirectional Websocket connection.","sidebar":"tutorialSidebar"},"Development/Javascript/2022-10-30-webrtc-introduction-video-chat-part1/index":{"id":"Development/Javascript/2022-10-30-webrtc-introduction-video-chat-part1/index","title":"WebRTC Introduction - Client Side Signalling","description":"Signalling intend from the web client","sidebar":"tutorialSidebar"},"Development/Javascript/2022-11-10-webrtc-introduction-video-chat-part2/index":{"id":"Development/Javascript/2022-11-10-webrtc-introduction-video-chat-part2/index","title":"WebRTC Introduction - Interactive Connectivity Establishment","description":"Establishing a connection between the clients","sidebar":"tutorialSidebar"},"Development/Javascript/2022-11-19-web3-javascript-app/index":{"id":"Development/Javascript/2022-11-19-web3-javascript-app/index","title":"Web3.js Blockchain Application","description":"Ethereum and Metamask for Decentralized Authentication","sidebar":"tutorialSidebar"},"Development/Javascript/2022-11-29-react-typescript-intro-2023/index":{"id":"Development/Javascript/2022-11-29-react-typescript-intro-2023/index","title":"TypeScript 2.0 in React 19 (2023)","description":"Typescript Workshop","sidebar":"tutorialSidebar"},"Development/Javascript/2022-12-11-11ty-starter/index":{"id":"Development/Javascript/2022-12-11-11ty-starter/index","title":"11ty Static Site Generator","description":"Eleventy, a simpler static site\xa0generator.","sidebar":"tutorialSidebar"},"Development/Javascript/2022-12-29-reactive-search-starter/index":{"id":"Development/Javascript/2022-12-29-reactive-search-starter/index","title":"Reactive Search Starter","description":"Use the ReactiveSearch library to build a React.js Interface for Elasticsearch and OpenSearch.","sidebar":"tutorialSidebar"},"Development/Javascript/2023-02-12-react-meili-search-starter/index":{"id":"Development/Javascript/2023-02-12-react-meili-search-starter/index","title":"React Frontend for MeiLi Search","description":"A lightning-fast search engine that fits effortlessly into your apps, websites, and workflow.","sidebar":"tutorialSidebar"},"Development/Javascript/2023-02-13-gatsby-meili-search-starter/index":{"id":"Development/Javascript/2023-02-13-gatsby-meili-search-starter/index","title":"MeiLi Search for your Gatsby.js Blog","description":"A lightning-fast search engine that fits effortlessly into your apps, websites, and workflow.","sidebar":"tutorialSidebar"},"Development/Javascript/2023-04-01-reactjs-2023/index":{"id":"Development/Javascript/2023-04-01-reactjs-2023/index","title":"React.js 2023 - A (Re)Introduction","description":"Just a React Cheat Sheet to refer to in times of need...","sidebar":"tutorialSidebar"},"Development/Javascript/2023-06-04-nodejs-typescript-sql/index":{"id":"Development/Javascript/2023-06-04-nodejs-typescript-sql/index","title":"Node / Express with Typescript - (Re)Introduction 2023","description":"Part 1 - Building a Node.js, Express.js App with a MySQL Backend.","sidebar":"tutorialSidebar"},"Development/Javascript/2023-06-12-typescript-2023/index":{"id":"Development/Javascript/2023-06-12-typescript-2023/index","title":"Typescript 2023","description":"Using Typescript 5 to consume Web Application Programming Interfaces","sidebar":"tutorialSidebar"},"Development/Javascript/2023-06-12-typescript-pattern/index":{"id":"Development/Javascript/2023-06-12-typescript-pattern/index","title":"Typescript Design Pattern","description":"Using Typescript 5 to consume Web Application Programming Interfaces","sidebar":"tutorialSidebar"},"Development/Javascript/2023-06-13-typescript-dom-webpack/index":{"id":"Development/Javascript/2023-06-13-typescript-dom-webpack/index","title":"Typescript DOM Webpack","description":"Using Typescript 5 to build browser applications with Webpack","sidebar":"tutorialSidebar"},"Development/Javascript/2023-06-13-typescript-dom/index":{"id":"Development/Javascript/2023-06-13-typescript-dom/index","title":"Typescript DOM","description":"Using Typescript 5 to build browser applications","sidebar":"tutorialSidebar"},"Development/Javascript/2023-12-14-reactjs-typescript-2023/index":{"id":"Development/Javascript/2023-12-14-reactjs-typescript-2023/index","title":"React.js with Typescript 2023","description":"Looking into using Typescript in building React.js Frontends","sidebar":"tutorialSidebar"},"Development/Javascript/2023-12-15-reactjs-typescript-redux/index":{"id":"Development/Javascript/2023-12-15-reactjs-typescript-redux/index","title":"Simple Redux","description":"Redux and Redux Devtools Setup","sidebar":"tutorialSidebar"},"Development/Javascript/2023-12-16-reactjs-hooks-typescript/index":{"id":"Development/Javascript/2023-12-16-reactjs-hooks-typescript/index","title":"React Hooks Typescript","description":"Using React State and Ref Hooks with Typescript","sidebar":"tutorialSidebar"},"Development/Javascript/2023-12-18-reactjs-typescript-redux-toolkit/index":{"id":"Development/Javascript/2023-12-18-reactjs-typescript-redux-toolkit/index","title":"Redux Toolkit Github API","description":"Using the Redux Toolkit and AsyncThunk with Typescript & React","sidebar":"tutorialSidebar"},"Development/Javascript/2023-12-19-react-query-typescript/index":{"id":"Development/Javascript/2023-12-19-react-query-typescript/index","title":"React Query AsyncState Management","description":"Leveraging React Query to manage frontend state from REST JSON APIs","sidebar":"tutorialSidebar"},"Development/Javascript/2023-12-20-react-query-typescript/index":{"id":"Development/Javascript/2023-12-20-react-query-typescript/index","title":"Tanstack React Query AsyncState Management","description":"Leveraging Tanstack React Query v5 to manage frontend state from REST JSON APIs","sidebar":"tutorialSidebar"},"Development/Javascript/2023-12-21-react-query-tauri-elasticsearch/index":{"id":"Development/Javascript/2023-12-21-react-query-tauri-elasticsearch/index","title":"Building a Native Elasticsearch Client in React","description":"Use Tauri to build a native application using Vite.js and Tanstack React Query","sidebar":"tutorialSidebar"},"Development/Javascript/2023-12-24-react-query-tauri-iot-ctrl/index":{"id":"Development/Javascript/2023-12-24-react-query-tauri-iot-ctrl/index","title":"Building a Native IP Camera Client in React","description":"Use Tauri to build a native application using Vite.js and Tanstack React Query","sidebar":"tutorialSidebar"},"Development/Javascript/2023-12-25-redux-toolkit/index":{"id":"Development/Javascript/2023-12-25-redux-toolkit/index","title":"Redux Toolkit and RTK Query","description":"RTK Query or React Query ?","sidebar":"tutorialSidebar"},"Development/Javascript/2023-12-31-js-typescript-rest/index":{"id":"Development/Javascript/2023-12-31-js-typescript-rest/index","title":"Typescript for Web APIs","description":"Using Typescript 5 to consume Web Application Programming Interfaces","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-07--magento-development-in-docker/index":{"id":"Development/Magento/2019-09-07--magento-development-in-docker/index","title":"Magento 2 Docker Development","description":"Siam Reap, Cambodia","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-10--magento2-docker-on-ubuntu/index":{"id":"Development/Magento/2019-09-10--magento2-docker-on-ubuntu/index","title":"Magento 2 Dev Environment with Docker Compose","description":"Angkor Wat, Cambodia","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-11--magento-on-debian-with-nginx/index":{"id":"Development/Magento/2019-09-11--magento-on-debian-with-nginx/index","title":"Magento 2 Installation with NGINX on Debian Buster","description":"Angkor Wat, Cambodia","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-12--magento-and-elasticsearch/index":{"id":"Development/Magento/2019-09-12--magento-and-elasticsearch/index","title":"Magento 2 and Elasticsearch","description":"Patan, Nepal","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-13--magento-and-varnish/index":{"id":"Development/Magento/2019-09-13--magento-and-varnish/index","title":"Magento 2 and Varnish 6","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-14--magento-and-themes/index":{"id":"Development/Magento/2019-09-14--magento-and-themes/index","title":"Magento 2 Manual Theme Installation","description":"Patan, Nepal","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-15--updating-from-php70-to-php72/index":{"id":"Development/Magento/2019-09-15--updating-from-php70-to-php72/index","title":"Updating a Magento Project from PHP v7.0 to v7.3","description":"Katmandu, Nepal","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-16--working-with-sql-dumps/index":{"id":"Development/Magento/2019-09-16--working-with-sql-dumps/index","title":"Working with SQL Dumps","description":"Harbin, China","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-17--magento2-modules/index":{"id":"Development/Magento/2019-09-17--magento2-modules/index","title":"Creating Magento 2 Modules","description":"Mong Kok, Hongkong","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-18--magento2-cronjobs/index":{"id":"Development/Magento/2019-09-18--magento2-cronjobs/index","title":"Creating Magento 2 Cron Jobs","description":"Pokhara, Nepal","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-19--magento2-console-commands/index":{"id":"Development/Magento/2019-09-19--magento2-console-commands/index","title":"Creating Magento 2 Console Commands","description":"TST, Hongkong","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-20--magento2-ui-components/index":{"id":"Development/Magento/2019-09-20--magento2-ui-components/index","title":"Magento 2 UI Components","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-21--magento2-docker-install/index":{"id":"Development/Magento/2019-09-21--magento2-docker-install/index","title":"Docker Compose install Magento 2","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-21--magento2-google-analytics/index":{"id":"Development/Magento/2019-09-21--magento2-google-analytics/index","title":"Adding Google Analytics to Magento 2","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"Development/Magento/2020-12-07-google-analytics-g4-tag/index":{"id":"Development/Magento/2020-12-07-google-analytics-g4-tag/index","title":"Installing Google Analytics g4 Tag in your Gatsby and Discourse Webservice","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"Development/Magento/2021-07-28--magento2-google-analytics-universal/index":{"id":"Development/Magento/2021-07-28--magento2-google-analytics-universal/index","title":"Adding Google Analytics to Magento 2","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"Development/Misc/1980-01-01--dcs-f-14-tomcat/index":{"id":"Development/Misc/1980-01-01--dcs-f-14-tomcat/index","title":"Tomcat Checklists","description":"- Pilot Cold Startup","sidebar":"tutorialSidebar"},"Development/Misc/1980-01-02--dcs-su-25-t/index":{"id":"Development/Misc/1980-01-02--dcs-su-25-t/index","title":"Frogfoot Checklists","description":"SU-25T Frogfoot","sidebar":"tutorialSidebar"},"Development/Misc/2017-06-17--unreal-engine-coding-standards/index":{"id":"Development/Misc/2017-06-17--unreal-engine-coding-standards/index","title":"Unreal Engine Coding Standards","description":"Unreal Engine Coding Standards","sidebar":"tutorialSidebar"},"Development/Misc/2023-01-20-pandoc-markup-converter/index":{"id":"Development/Misc/2023-01-20-pandoc-markup-converter/index","title":"Pandoc Universal Markup Converter","description":"Pandoc is a Haskell library for converting from one markup format to another.","sidebar":"tutorialSidebar"},"Development/Python/2017-12-11--getting-started-with-python/index":{"id":"Development/Python/2017-12-11--getting-started-with-python/index","title":"Getting started with Python","description":"Port Vila, Vanuatu","sidebar":"tutorialSidebar"},"Development/Python/2017-12-13--getting-started-with-python-part-ii/index":{"id":"Development/Python/2017-12-13--getting-started-with-python-part-ii/index","title":"Getting started with Python Part II","description":"Port Vila, Vanuatu","sidebar":"tutorialSidebar"},"Development/Python/2017-12-17--python-ssh-logger/index":{"id":"Development/Python/2017-12-17--python-ssh-logger/index","title":"Python Network Logger","description":"Harbin, China","sidebar":"tutorialSidebar"},"Development/Python/2022-06-01-python-pyscript/index":{"id":"Development/Python/2022-06-01-python-pyscript/index","title":"Introduction to PyScript","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"Development/Python/2022-06-27-python-web-scraping/index":{"id":"Development/Python/2022-06-27-python-web-scraping/index","title":"Web Scraping Essentials with Python","description":"Sham Sui Po, Hong Kong","sidebar":"tutorialSidebar"},"Development/Python/2022-09-17-python-video-processing/index":{"id":"Development/Python/2022-09-17-python-video-processing/index","title":"Python - Video Processing with OpenCV","description":"Sham Sui Po, Hong Kong","sidebar":"tutorialSidebar"},"Development/Python/2022-10-05-python-text-processing/index":{"id":"Development/Python/2022-10-05-python-text-processing/index","title":"Python - Text Processing with","description":"Processing text using Python","sidebar":"tutorialSidebar"},"Development/Python/2022-10-06-python-minify-text/index":{"id":"Development/Python/2022-10-06-python-minify-text/index","title":"Python - Minify Text for Elasticsearch","description":"Use Python to create an Elasticsearch index file.","sidebar":"tutorialSidebar"},"Development/Python/2022-10-07-python-docusaurus-elasticsearch/index":{"id":"Development/Python/2022-10-07-python-docusaurus-elasticsearch/index","title":"Python - Build an Elasticsearch Index for your Docusaurus Blog","description":"I was able to bring both together by pulling text from an URL, process the content and write it into an Elasticsearch JSON Document. Now I want to automate this process a little by using a pages sitemap.","sidebar":"tutorialSidebar"},"Development/Python/2022-10-08-python-desktop-app/index":{"id":"Development/Python/2022-10-08-python-desktop-app/index","title":"Python - PyQt Desktop App","description":"Using PyQt6 to build desktop app with Python.","sidebar":"tutorialSidebar"},"Development/Python/2022-10-08-python-flask-app/index":{"id":"Development/Python/2022-10-08-python-flask-app/index","title":"Python - Deploying a Web App with Flask","description":"Use Flask to build a web frontend for your Python App.","sidebar":"tutorialSidebar"},"Development/Python/2022-10-09-python-flask-elasticsearch/index":{"id":"Development/Python/2022-10-09-python-flask-elasticsearch/index","title":"Python - Flask Frontend to generate Elasticsearch Docs from Sitemaps","description":"Use Flask to build a web frontend for your Python App.","sidebar":"tutorialSidebar"},"Development/Python/2022-10-10-python-filesystem/index":{"id":"Development/Python/2022-10-10-python-filesystem/index","title":"Python - The Filesystem","description":"Using Python to manipulate your Filesystem.","sidebar":"tutorialSidebar"},"Development/Python/2022-10-12-python-regular-expressions/index":{"id":"Development/Python/2022-10-12-python-regular-expressions/index","title":"Python - RE","description":"Using Regular Expressions with Python.","sidebar":"tutorialSidebar"},"Development/Python/2022-10-13-python-rest-api/index":{"id":"Development/Python/2022-10-13-python-rest-api/index","title":"Python - Working with REST API Requests","description":"Retrieve information from JSON web APIs and process them.","sidebar":"tutorialSidebar"},"Development/Python/2022-10-14-python-rest-elastic/index":{"id":"Development/Python/2022-10-14-python-rest-elastic/index","title":"Python - Working with the Elasticsearch REST API","description":"Run OpenSearch search queries and process the JSON response.","sidebar":"tutorialSidebar"},"Development/Python/2022-10-15-python-rest-server/index":{"id":"Development/Python/2022-10-15-python-rest-server/index","title":"Python - Build a REST API","description":"Using Flask to deploy an JSON REST API.","sidebar":"tutorialSidebar"},"Development/Python/2022-10-22-python-nlp/index":{"id":"Development/Python/2022-10-22-python-nlp/index","title":"Python - Natural Language Processing","description":"Python Natural Language Toolkit - Stemming, Similarity, Sentiment Examples","sidebar":"tutorialSidebar"},"Development/Python/2022-12-11-pipenv/index":{"id":"Development/Python/2022-12-11-pipenv/index","title":"Pipenv - Welcome NPM","description":"Python Dev Workflow for Humans","sidebar":"tutorialSidebar"},"Development/Python/2023-01-16-python-3-11-features/index":{"id":"Development/Python/2023-01-16-python-3-11-features/index","title":"Python 3.11 New Features","description":"Error Messages and Customized Exception Notes","sidebar":"tutorialSidebar"},"Development/Python/2023-04-24-python-pandas-cheat-sheet/index":{"id":"Development/Python/2023-04-24-python-pandas-cheat-sheet/index","title":"Pandas Cheat Sheet 2023","description":"Common Python Pandas Operations","sidebar":"tutorialSidebar"},"Development/Python/2023-05-03-python-matplotlib-cheat-sheet/index":{"id":"Development/Python/2023-05-03-python-matplotlib-cheat-sheet/index","title":"Matplotlib Pyplot Cheat Sheet 2023","description":"Common Python Matplotlib Operations","sidebar":"tutorialSidebar"},"Development/Python/2023-05-07-python-scipy-introduction/index":{"id":"Development/Python/2023-05-07-python-scipy-introduction/index","title":"A little bit of SciPy...","description":"A quick introduction to Scientific Python","sidebar":"tutorialSidebar"},"Development/Python/2023-05-07-python-seaborn-cheat-sheet/index":{"id":"Development/Python/2023-05-07-python-seaborn-cheat-sheet/index","title":"Seaborn Cheat Sheet 2023","description":"Common Python Seaborn Operations","sidebar":"tutorialSidebar"},"Development/Python/2023-05-10-plotly-COVID19-dataset/index":{"id":"Development/Python/2023-05-10-plotly-COVID19-dataset/index","title":"Plotly COVID19 Dataset Exploration","description":"Using Python Plotly Visualizations to explore a COVID19 Dataset","sidebar":"tutorialSidebar"},"Development/Python/2023-05-12-matplotlib-seaborn-titanic-dataset/index":{"id":"Development/Python/2023-05-12-matplotlib-seaborn-titanic-dataset/index","title":"Seaborn Titanic Dataset Exploration","description":"Using Python Seaborn Visualizations to explore the Titanic Dataset","sidebar":"tutorialSidebar"},"Development/Python/2023-05-14-visualizing-text-datasets/index":{"id":"Development/Python/2023-05-14-visualizing-text-datasets/index","title":"Plotly & Seaborn to Explore Text Dataset","description":"Using Python Plotly and Seaborn Visualizations to explore the Women\'s E-Commerce Clothing Reviews Dataset","sidebar":"tutorialSidebar"},"Development/Python/2023-05-16-seaborn-cc-churn-vis/index":{"id":"Development/Python/2023-05-16-seaborn-cc-churn-vis/index","title":"Seaborn to Explore the CC Churn Dataset","description":"Using Python Pandas and Seaborn Visualizations to explore the Credit Card Customer Churn Prediction Dataset","sidebar":"tutorialSidebar"},"Development/Python/2023-05-17-fandango-ratings-controversy/index":{"id":"Development/Python/2023-05-17-fandango-ratings-controversy/index","title":"FiveThirtyEight Fandango Dataset","description":"Whose ratings should you trust? IMDB, Rotten Tomatoes, Metacritic, or Fandango?","sidebar":"tutorialSidebar"},"Development/Python/2023-05-18-python-asserts/index":{"id":"Development/Python/2023-05-18-python-asserts/index","title":"Python Asserts in Data Science Cheat Sheet","description":"Using Assert Statements to ensure Dataset Cleanliness","sidebar":"tutorialSidebar"},"Development/Python/2023-05-20-python-sklearn-cheat-sheet/index":{"id":"Development/Python/2023-05-20-python-sklearn-cheat-sheet/index","title":"SciKit-Learn Cheat Sheet","description":"List of common SkLearn functions for Data Scientists","sidebar":"tutorialSidebar"},"Development/Python/2023-05-28-telco-churn-cohort-study/index":{"id":"Development/Python/2023-05-28-telco-churn-cohort-study/index","title":"Supervised Learning with Scikit-Learn","description":"Telco Customer Churn Cohort Study","sidebar":"tutorialSidebar"},"Development/Python/2023-07-09-python-scikit-image-intro/index":{"id":"Development/Python/2023-07-09-python-scikit-image-intro/index","title":"Introduction to Scikit-Image","description":"Is Scikit Image an alternative for openCV and pillow?","sidebar":"tutorialSidebar"},"Development/Python/2023-08-14-python-scikit-image-opencv/index":{"id":"Development/Python/2023-08-14-python-scikit-image-opencv/index","title":"OpenCV & SciPy and Scikit Image Cheat Sheet","description":"Is Scikit Image an alternative for openCV and pillow?","sidebar":"tutorialSidebar"},"Development/ReactNative/2022-05-01-react-native-hello-world/index":{"id":"Development/ReactNative/2022-05-01-react-native-hello-world/index","title":"React Native Hello World","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"Development/ReactNative/2022-05-02-react-native-navigation/index":{"id":"Development/ReactNative/2022-05-02-react-native-navigation/index","title":"React Native Navigation","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"Development/ReactNative/2022-05-03-react-native-contextapi/index":{"id":"Development/ReactNative/2022-05-03-react-native-contextapi/index","title":"React Native Context API","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"Development/ReactNative/2022-05-04-react-native-hooks/index":{"id":"Development/ReactNative/2022-05-04-react-native-hooks/index","title":"React Native Hooks","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"Development/ReactNative/2022-05-05-react-native-context-hooks/index":{"id":"Development/ReactNative/2022-05-05-react-native-context-hooks/index","title":"React Native Context & Hooks","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"Development/ReactNative/2022-05-06-react-native-reducer/index":{"id":"Development/ReactNative/2022-05-06-react-native-reducer/index","title":"React Native Reducer","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Ansible/2020-11-18--ansible-on-debian-buster/index":{"id":"DevOps/Ansible/2020-11-18--ansible-on-debian-buster/index","title":"Setting up a Ansible on Debian Buster","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Ansible/2020-11-19--ansible-playbooks/index":{"id":"DevOps/Ansible/2020-11-19--ansible-playbooks/index","title":"Ansible Playbooks","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Ansible/2020-11-20--ansible-copy-cheat-sheet/index":{"id":"DevOps/Ansible/2020-11-20--ansible-copy-cheat-sheet/index","title":"Ansible Copy Cheat Sheet","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Ansible/2020-11-21--ansible-modules-and-roles/index":{"id":"DevOps/Ansible/2020-11-21--ansible-modules-and-roles/index","title":"Ansible Vault, Modules & Roles","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Ansible/2020-11-22--ansible-and-docker/index":{"id":"DevOps/Ansible/2020-11-22--ansible-and-docker/index","title":"Ansible for Docker Deployment","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Ansible/2020-11-23--ansible-getting-serious/index":{"id":"DevOps/Ansible/2020-11-23--ansible-getting-serious/index","title":"Ansible Getting Serious","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Ansible/2020-11-24--ansible-vault-user-login/index":{"id":"DevOps/Ansible/2020-11-24--ansible-vault-user-login/index","title":"Ansible Vault for User Logins","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Ansible/2020-11-25--ansible-in-gitlab-ci/index":{"id":"DevOps/Ansible/2020-11-25--ansible-in-gitlab-ci/index","title":"Ansible in Gitlab CI Pipelines","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Ansible/2020-11-26--ansible-dind/index":{"id":"DevOps/Ansible/2020-11-26--ansible-dind/index","title":"Ansible Docker-in-Docker","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Ansible/2021-04-28-ansible-tower-rhel/index":{"id":"DevOps/Ansible/2021-04-28-ansible-tower-rhel/index","title":"Installing Ansible Tower (AWX in Docker) on RHEL8","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Ansible/2021-04-29-ansible-tower-setup/index":{"id":"DevOps/Ansible/2021-04-29-ansible-tower-setup/index","title":"Setting up Ansible Tower (AWX)","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Ansible/2021-04-30-ansible-tower-slack-notifications/index":{"id":"DevOps/Ansible/2021-04-30-ansible-tower-slack-notifications/index","title":"Slack Notifications for Ansible Tower (AWX)","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Ansible/2021-05-01-ansible-tower-workflow-templates/index":{"id":"DevOps/Ansible/2021-05-01-ansible-tower-workflow-templates/index","title":"Ansible Tower Workflow Templates","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Ansible/2021-05-02-ansible-tower-examples/index":{"id":"DevOps/Ansible/2021-05-02-ansible-tower-examples/index","title":"Ansible Tower Practical Examples","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2017-10-03--search-engine-setup-and-configuration/index":{"id":"DevOps/Elasticsearch/2017-10-03--search-engine-setup-and-configuration/index","title":"Search Engine Setup and Configuration","description":"Search Engine Setup and Configuration","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2017-12-05--elasticsearch-react-example/index":{"id":"DevOps/Elasticsearch/2017-12-05--elasticsearch-react-example/index","title":"React Search Interface","description":"Tanna Island, Vanuatu","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2017-12-26--elasticsearch-kibana/index":{"id":"DevOps/Elasticsearch/2017-12-26--elasticsearch-kibana/index","title":"Elasticsearch and Kibana","description":"Battambang, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2017-12-31--securing-elasticsearch-xpack/index":{"id":"DevOps/Elasticsearch/2017-12-31--securing-elasticsearch-xpack/index","title":"Securing Elasticsearch with X-Pack","description":"Battambang, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2018-01-01--securing-elasticsearch-readonlyrest/index":{"id":"DevOps/Elasticsearch/2018-01-01--securing-elasticsearch-readonlyrest/index","title":"Securing Elasticsearch with ReadOnlyREST","description":"Jomsom, Nepal","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2019-09-08--elasticsearch_7-5_docker/index":{"id":"DevOps/Elasticsearch/2019-09-08--elasticsearch_7-5_docker/index","title":"Elasticsearch 7 with Docker Compose","description":"ShenZhen, China","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2020-06-01--elasticsearch-docker/index":{"id":"DevOps/Elasticsearch/2020-06-01--elasticsearch-docker/index","title":"Elasticsearch in Docker","description":"Shanghai, China","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-03-20-elasticsearch-7-refresher/index":{"id":"DevOps/Elasticsearch/2021-03-20-elasticsearch-7-refresher/index","title":"Elasticsearch 7 Refresher","description":"Hongkong, TST","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-03-21-logstash-digesting-data/index":{"id":"DevOps/Elasticsearch/2021-03-21-logstash-digesting-data/index","title":"Logstash 7 Digesting Webserver Logs","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-03-22-logstash-working-with-structured-data/index":{"id":"DevOps/Elasticsearch/2021-03-22-logstash-working-with-structured-data/index","title":"Logstash 7 Working with Structured Data","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-03-23-logstash-working-with-unstructured-data/index":{"id":"DevOps/Elasticsearch/2021-03-23-logstash-working-with-unstructured-data/index","title":"Logstash 7 Working with Unstructured Data","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-03-24-logstash-common-grok-pattern/index":{"id":"DevOps/Elasticsearch/2021-03-24-logstash-common-grok-pattern/index","title":"Logstash 7 and Common Log Pattern","description":"Cheung Chau, Hongkon","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/cheat-sheet":{"id":"DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/cheat-sheet","title":"Elasticsearch Cheat Sheet","description":"Source: JoliCode","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/index":{"id":"DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/index","title":"Log all the searches going through Elasticsearch","description":"Bakhtapur, Nepal","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-03-26-elasticsearch7-for-syslog-messages/index":{"id":"DevOps/Elasticsearch/2021-03-26-elasticsearch7-for-syslog-messages/index","title":"Elasticsearch 7 to log Linux System Events","description":"Harbin, China","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-03-27-elasticsearch7-aggregations/index":{"id":"DevOps/Elasticsearch/2021-03-27-elasticsearch7-aggregations/index","title":"Elasticsearch 7 Aggregations","description":"Abashiri, Japan","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-03-28-elasticsearch7-timeseries/index":{"id":"DevOps/Elasticsearch/2021-03-28-elasticsearch7-timeseries/index","title":"Elasticsearch 7 Timeseries","description":"Kathmandu, Nepal","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-03-29-elasticsearch7-data-transformations/index":{"id":"DevOps/Elasticsearch/2021-03-29-elasticsearch7-data-transformations/index","title":"Elasticsearch 7 Data Transformation","description":"Harbin, China","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-03-30-elasticsearch7-and-filebeats/index":{"id":"DevOps/Elasticsearch/2021-03-30-elasticsearch7-and-filebeats/index","title":"Elasticsearch 7 and Filebeats","description":"Harbin, China","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-03-31-elastic-filebeats-for-apache-logs/index":{"id":"DevOps/Elasticsearch/2021-03-31-elastic-filebeats-for-apache-logs/index","title":"Elastic Filebeat and Apache Access Logs","description":"Otaru, Japan","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-04-01-elastic-filebeats-for-nginx-logs/index":{"id":"DevOps/Elasticsearch/2021-04-01-elastic-filebeats-for-nginx-logs/index","title":"Elastic Filebeat and NGINX Access Logs","description":"Mongkok, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2022-02-02--elasticsearch-v8-upgrade/index":{"id":"DevOps/Elasticsearch/2022-02-02--elasticsearch-v8-upgrade/index","title":"Performing an Elasticsearch v8 Upgrade","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2022-02-03--elasticsearch-v8-data-ingestion/index":{"id":"DevOps/Elasticsearch/2022-02-03--elasticsearch-v8-data-ingestion/index","title":"Elasticsearch v8, Filebeat (Docker) and NGINX","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2022-02-04--kibana-v8-search-queries/index":{"id":"DevOps/Elasticsearch/2022-02-04--kibana-v8-search-queries/index","title":"Elasticsearch & Kibana v8 Search Cheat Sheet","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2022-02-05--kibana-v8-index-management/index":{"id":"DevOps/Elasticsearch/2022-02-05--kibana-v8-index-management/index","title":"Elasticsearch & Kibana v8 Index Management","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2022-02-06--elasticsearch-v8-data-ingestion-apache/index":{"id":"DevOps/Elasticsearch/2022-02-06--elasticsearch-v8-data-ingestion-apache/index","title":"Elasticsearch v8, Filebeat (Docker) and Apache","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2022-10-11--opensearch-docker-compose/index":{"id":"DevOps/Elasticsearch/2022-10-11--opensearch-docker-compose/index","title":"Opensearch & Dashboard","description":"Run a single Opensearch node + Dashboard cluster with Docker-Compose.","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2022-10-12--opensearch-rest-api/index":{"id":"DevOps/Elasticsearch/2022-10-12--opensearch-rest-api/index","title":"Opensearch Rest API","description":"Run search queries using the Opensearch REST API.","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2023-02-10--meili-rusty-elastic-docker/index":{"id":"DevOps/Elasticsearch/2023-02-10--meili-rusty-elastic-docker/index","title":"Introduction to MeiLi Search with Docker","description":"A lightning-fast search engine that fits effortlessly into your apps, websites, and workflow.","sidebar":"tutorialSidebar"},"DevOps/GitOps/2020-02-01--gitlab-in-podman-on-centos8/index":{"id":"DevOps/GitOps/2020-02-01--gitlab-in-podman-on-centos8/index","title":"Running Gitlab in Podman on CentOS8","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"DevOps/GitOps/2020-02-02--docker-images-in-gitlab/index":{"id":"DevOps/GitOps/2020-02-02--docker-images-in-gitlab/index","title":"Running Gitlab as Docker Registry","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"DevOps/GitOps/2020-08-01--gitlab-install-on-ubuntu-server/index":{"id":"DevOps/GitOps/2020-08-01--gitlab-install-on-ubuntu-server/index","title":"Installing Gitlab on Ubuntu Server 20.04","description":"Mong Kok, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/GitOps/2020-08-02--gitlab-setup/index":{"id":"DevOps/GitOps/2020-08-02--gitlab-setup/index","title":"Setting up Gitlab","description":"Mong Kok, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/GitOps/2020-08-03--gitlab-as-docker-registry/index":{"id":"DevOps/GitOps/2020-08-03--gitlab-as-docker-registry/index","title":"Gitlab as Docker Registry","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/GitOps/2020-08-04--working-with-gitlab/index":{"id":"DevOps/GitOps/2020-08-04--working-with-gitlab/index","title":"Working with Gitlab","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/GitOps/2021-02-25-gatsby-build-gitlab-pipeline/index":{"id":"DevOps/GitOps/2021-02-25-gatsby-build-gitlab-pipeline/index","title":"Gatsby Build Gitlab CI Pipeline","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/GitOps/2022-03-16--gitlab-docker-compose-on-localhost/index":{"id":"DevOps/GitOps/2022-03-16--gitlab-docker-compose-on-localhost/index","title":"Install Gitlab with Docker-Compose (Debian Bullseye)","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/GitOps/2022-11-10-go-gitlab-ci-pipeline/index":{"id":"DevOps/GitOps/2022-11-10-go-gitlab-ci-pipeline/index","title":"Go Gitlab CI Pipeline","description":"Build your Go app in Gitlab","sidebar":"tutorialSidebar"},"DevOps/GitOps/2023-10-28-github-passkey/index":{"id":"DevOps/GitOps/2023-10-28-github-passkey/index","title":"Github Passkeys","description":"Use Github Passkeys without a Mobile Phone","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2020-08-15--installing-nomad-ubuntu/index":{"id":"DevOps/Hashicorp/2020-08-15--installing-nomad-ubuntu/index","title":"Installing HashiCorp Nomad on Ubuntu Server 20.04","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2020-08-16--nomad-cluster/index":{"id":"DevOps/Hashicorp/2020-08-16--nomad-cluster/index","title":"Nomad Server Cluster","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2020-08-17--installing-consul-ubuntu/index":{"id":"DevOps/Hashicorp/2020-08-17--installing-consul-ubuntu/index","title":"Installing HashiCorp Consul on Ubuntu Server 20.04","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2020-08-18--consul-mock-datacenter/index":{"id":"DevOps/Hashicorp/2020-08-18--consul-mock-datacenter/index","title":"Joining Consul Clients","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2020-08-18--consul-service-mesh/index":{"id":"DevOps/Hashicorp/2020-08-18--consul-service-mesh/index","title":"Consul Service Mesh","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2020-08-19--consul-deployment-guide/index":{"id":"DevOps/Hashicorp/2020-08-19--consul-deployment-guide/index","title":"Consul Deployment Guide","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2020-10-23--hashicorp-packer-machine-image/index":{"id":"DevOps/Hashicorp/2020-10-23--hashicorp-packer-machine-image/index","title":"HashiCorp Packer Machine Images Introduction","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2020-10-24--hashicorp-packer-and-virtualbox-preseed/index":{"id":"DevOps/Hashicorp/2020-10-24--hashicorp-packer-and-virtualbox-preseed/index","title":"HashiCorp Packer with Virtualbox (Preseed)","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2020-10-25--hashicorp-packer-and-virtualbox-autoinstall/index":{"id":"DevOps/Hashicorp/2020-10-25--hashicorp-packer-and-virtualbox-autoinstall/index","title":"HashiCorp Packer with Virtualbox (Autoinstall)","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2020-10-26--hashicorp-packer-provisioner/index":{"id":"DevOps/Hashicorp/2020-10-26--hashicorp-packer-provisioner/index","title":"HashiCorp Packer Provisioning","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-01--hashicorp-nomad-refresher/index":{"id":"DevOps/Hashicorp/2021-08-01--hashicorp-nomad-refresher/index","title":"Hashicorp Nomad Refresher - Installation","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-02--hashicorp-nomad-security/index":{"id":"DevOps/Hashicorp/2021-08-02--hashicorp-nomad-security/index","title":"Hashicorp Nomad Refresher - Security","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-03--hashicorp-nomad-jobs/index":{"id":"DevOps/Hashicorp/2021-08-03--hashicorp-nomad-jobs/index","title":"Hashicorp Nomad Refresher - Jobs","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-04--hashicorp-nomad-job-specifications/index":{"id":"DevOps/Hashicorp/2021-08-04--hashicorp-nomad-job-specifications/index","title":"Hashicorp Nomad Refresher - Job Specifications","description":"Cheung Chau, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-05--hashicorp-consul-service-discovery/index":{"id":"DevOps/Hashicorp/2021-08-05--hashicorp-consul-service-discovery/index","title":"Hashicorp Consul Refresher - Service Discovery","description":"Cheung Chau, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-06--hashicorp-consul-fabio-loadbalancing/index":{"id":"DevOps/Hashicorp/2021-08-06--hashicorp-consul-fabio-loadbalancing/index","title":"Hashicorp Consul Refresher - Loadbalancing with Fabio","description":"Tsim Sha Tsui, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-06--hashicorp-consul-traefik-loadbalancing/index":{"id":"DevOps/Hashicorp/2021-08-06--hashicorp-consul-traefik-loadbalancing/index","title":"Hashicorp Consul Refresher - Loadbalancing with Traefik","description":"Tsim Sha Tsui, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-07--hashicorp-nomad-job-configuration/index":{"id":"DevOps/Hashicorp/2021-08-07--hashicorp-nomad-job-configuration/index","title":"Nomad Job Configuration","description":"Central, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-08--hashicorp-nomad-access-control-lists/index":{"id":"DevOps/Hashicorp/2021-08-08--hashicorp-nomad-access-control-lists/index","title":"Nomad Access Control Lists","description":"Central, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-09--hashicorp-consul-services/index":{"id":"DevOps/Hashicorp/2021-08-09--hashicorp-consul-services/index","title":"Hashicorp Consul Refresher - Services","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-10--hashicorp-consul-key-value-store/index":{"id":"DevOps/Hashicorp/2021-08-10--hashicorp-consul-key-value-store/index","title":"Hashicorp Consul Refresher - Key Value Store","description":"Mongkok, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-11--hashicorp-consul-backups/index":{"id":"DevOps/Hashicorp/2021-08-11--hashicorp-consul-backups/index","title":"Hashicorp Consul Refresher - Backups","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-12--hashicorp-consul-service-mesh/index":{"id":"DevOps/Hashicorp/2021-08-12--hashicorp-consul-service-mesh/index","title":"Hashicorp Consul Refresher - Service Mesh","description":"Wan Chai, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-13--hashicorp-consul-access-control-lists/index":{"id":"DevOps/Hashicorp/2021-08-13--hashicorp-consul-access-control-lists/index","title":"Hashicorp Consul Refresher - Access Control Lists","description":"Phnom Penh, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-14--hashicorp-consul-tls-encryption/index":{"id":"DevOps/Hashicorp/2021-08-14--hashicorp-consul-tls-encryption/index","title":"Hashicorp Consul Refresher - Gossip TLS Encryption","description":"Phnom Penh, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-20--hashicorp-vault-setup/index":{"id":"DevOps/Hashicorp/2021-08-20--hashicorp-vault-setup/index","title":"Hashicorp Vault - Setup","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-21--hashicorp-vault-secrets-tokens/index":{"id":"DevOps/Hashicorp/2021-08-21--hashicorp-vault-secrets-tokens/index","title":"Hashicorp Vault - Secrets & Tokens","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-22--hashicorp-vault-policies/index":{"id":"DevOps/Hashicorp/2021-08-22--hashicorp-vault-policies/index","title":"Hashicorp Vault - ACL Policies","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-23--hashicorp-vault-rest-api/index":{"id":"DevOps/Hashicorp/2021-08-23--hashicorp-vault-rest-api/index","title":"Hashicorp Vault - Rest API","description":"Tsim Sha Tsui, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-25--hashicorp-vault-logging/index":{"id":"DevOps/Hashicorp/2021-08-25--hashicorp-vault-logging/index","title":"Hashicorp Vault - Logging","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-09-05--hashicorp-terraform-setup/index":{"id":"DevOps/Hashicorp/2021-09-05--hashicorp-terraform-setup/index","title":"Hashicorp Terraform - Setup","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-09-06--hashicorp-terraform-providers-variables-attributes/index":{"id":"DevOps/Hashicorp/2021-09-06--hashicorp-terraform-providers-variables-attributes/index","title":"Hashicorp Terraform - Providers, Variables & Attributes","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-10-10--hashicorp-nomad-in-production/index":{"id":"DevOps/Hashicorp/2021-10-10--hashicorp-nomad-in-production/index","title":"Hashicorp Nomad in Production","description":"Koh Rong, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-10-11--hashicorp-consul-in-production/index":{"id":"DevOps/Hashicorp/2021-10-11--hashicorp-consul-in-production/index","title":"Hashicorp Consul in Production","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-15-hashicorp-nomad-refresher/index":{"id":"DevOps/Hashicorp/2022-05-15-hashicorp-nomad-refresher/index","title":"Hashicorp Nomad Refresher","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-16-hashicorp-dojo-nomad-starter/index":{"id":"DevOps/Hashicorp/2022-05-16-hashicorp-dojo-nomad-starter/index","title":"Hashicorp Nomad Dojo","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-17-hashicorp-dojo-nomad-deployment/index":{"id":"DevOps/Hashicorp/2022-05-17-hashicorp-dojo-nomad-deployment/index","title":"Hashicorp Nomad Deployment","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-18-hashicorp-dojo-nomad-adding-encryption/index":{"id":"DevOps/Hashicorp/2022-05-18-hashicorp-dojo-nomad-adding-encryption/index","title":"Hashicorp Nomad Adding Encryption to your Cluster","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-19-hashicorp-dojo-nomad-access-control/index":{"id":"DevOps/Hashicorp/2022-05-19-hashicorp-dojo-nomad-access-control/index","title":"Hashicorp Nomad Access Control","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-20-hashicorp-dojo-nomad-consul/index":{"id":"DevOps/Hashicorp/2022-05-20-hashicorp-dojo-nomad-consul/index","title":"Hashicorp Nomad with Consul Service Discovery","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-21-hashicorp-dojo-consul-refresher/index":{"id":"DevOps/Hashicorp/2022-05-21-hashicorp-dojo-consul-refresher/index","title":"Hashicorp Dojo Consul Refresher","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-22-hashicorp-dojo-nomad-consul-part-2/index":{"id":"DevOps/Hashicorp/2022-05-22-hashicorp-dojo-nomad-consul-part-2/index","title":"Hashicorp Nomad with Consul II - The Reckoning","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-24-hashicorp-nomad-with-nginx/index":{"id":"DevOps/Hashicorp/2022-05-24-hashicorp-nomad-with-nginx/index","title":"Hashicorp Nomad for NGINX Web Proxies","description":"","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-25-hashicorp-nomad-with-gitlab/index":{"id":"DevOps/Hashicorp/2022-05-25-hashicorp-nomad-with-gitlab/index","title":"App Deployment with Hashicorp Nomad from Gitlab","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-26-hashicorp-nomad-with-gitlab-part-2/index":{"id":"DevOps/Hashicorp/2022-05-26-hashicorp-nomad-with-gitlab-part-2/index","title":"App Deployment with Hashicorp Nomad from Gitlab Part Deux","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-27-hashicorp-nomad-for-elastic/index":{"id":"DevOps/Hashicorp/2022-05-27-hashicorp-nomad-for-elastic/index","title":"Hashicorp Nomad to set up an Elasticsearch Cluster","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-28-hashicorp-nomad-for-elastic-part-2/index":{"id":"DevOps/Hashicorp/2022-05-28-hashicorp-nomad-for-elastic-part-2/index","title":"Hashicorp Nomad to set up an Elasticsearch Cluster Part II","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-29-hashicorp-nomad-with-nginx-loadbalancer/index":{"id":"DevOps/Hashicorp/2022-05-29-hashicorp-nomad-with-nginx-loadbalancer/index","title":"Hashicorp Nomad with NGINX Loadbalancer","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-06-07-hashicorp-waypoint-docker/index":{"id":"DevOps/Hashicorp/2022-06-07-hashicorp-waypoint-docker/index","title":"Hashicorp Waypoint with Docker","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-06-08-hashicorp-waypoint-nomad/index":{"id":"DevOps/Hashicorp/2022-06-08-hashicorp-waypoint-nomad/index","title":"Hashicorp Waypoint with Nomad","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-09-22--nomad-nts-timeserver/index":{"id":"DevOps/Hashicorp/2022-09-22--nomad-nts-timeserver/index","title":"Secure Timeserver - Deploying a NTS Server using Hashicorp Nomad","description":"In the previous step I deployed Chrony using Docker Compose. This time I try to migrate the deployment to Nomad & Consul.","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-09-24--nomad-nginx-ingress/index":{"id":"DevOps/Hashicorp/2022-09-24--nomad-nginx-ingress/index","title":"NGINX Ingress with Nomad","description":"Provision a containerized NGINX ingress using Hashicorp Nomad.","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-10-21-hashicorp-nomad-for-osticket-part-i/index":{"id":"DevOps/Hashicorp/2022-10-21-hashicorp-nomad-for-osticket-part-i/index","title":"Hashicorp Nomad to set up an OSTicket Helpdesk - Part I","description":"Porting a OSTicket/MariaDB helpdesk service from Docker-Compose to Nomad","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-10-22-hashicorp-nomad-sidecar-pattern/index":{"id":"DevOps/Hashicorp/2022-10-22-hashicorp-nomad-sidecar-pattern/index","title":"Hashicorp Nomad Sidecar Pattern","description":"Combine two applications in a single Nomad Job.","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-10-23-hashicorp-consul-connect/index":{"id":"DevOps/Hashicorp/2022-10-23-hashicorp-consul-connect/index","title":"Hashicorp Nomad - Working with Consul Connect","description":"CNI Error message with Consul Connect","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-10-23-hashicorp-nomad-ports/index":{"id":"DevOps/Hashicorp/2022-10-23-hashicorp-nomad-ports/index","title":"Hashicorp Nomad - Working with Ports","description":"How to declare Ports to be used in Nomad Job files","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-10-25-hashicorp-nomad-for-osticket-part-ii/index":{"id":"DevOps/Hashicorp/2022-10-25-hashicorp-nomad-for-osticket-part-ii/index","title":"Hashicorp Nomad to set up an OSTicket Helpdesk - Part II","description":"Porting a OSTicket/MariaDB helpdesk service from Docker-Compose to Nomad","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-11-11-hashicorp-nomad-for-borg-backups/index":{"id":"DevOps/Hashicorp/2022-11-11-hashicorp-nomad-for-borg-backups/index","title":"Hashicorp Nomad to run periodic backups","description":"Dockerized version of Borg Backup Server with Docker and Nomad","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-11-12-hashicorp-nomad-certbot-renewal/index":{"id":"DevOps/Hashicorp/2022-11-12-hashicorp-nomad-certbot-renewal/index","title":"Hashicorp Nomad to Renew your TLS Certificates","description":"Using the Periodic Stanza to execute Certbot Renewals","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-11-15-hashicorp-nomad-balanced-nts/index":{"id":"DevOps/Hashicorp/2022-11-15-hashicorp-nomad-balanced-nts/index","title":"Hashicorp Nomad Secure & Balanced NTS Time Service","description":"Using Nomad to deploy a secure time server.","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-11-15-hashicorp-nomad-nginx-load-balancing/index":{"id":"DevOps/Hashicorp/2022-11-15-hashicorp-nomad-nginx-load-balancing/index","title":"Hashicorp Nomad for NGINX Load-balancing","description":"Following along the official NGINX load-balancing tutorial.","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-11-16-hashicorp-nomad-mautic/index":{"id":"DevOps/Hashicorp/2022-11-16-hashicorp-nomad-mautic/index","title":"Deploy Mautic with Hashicorp Nomad","description":"Using Nomad to deploy the Mautic Marketing Automation Platform","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-11-18-hashicorp-nomad-grav/index":{"id":"DevOps/Hashicorp/2022-11-18-hashicorp-nomad-grav/index","title":"Deploy Grav CMS with Hashicorp Nomad","description":"Using Nomad to deploy the Grav open source flat-file CMS","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-11-24-hashicorp-consul-connect/index":{"id":"DevOps/Hashicorp/2022-11-24-hashicorp-consul-connect/index","title":"Hashicorp Nomad - Working with Consul Connect","description":"Use the Consul service mesh to connect a frontend with it\'s API backend.","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-12-03-hashicorp-vault-installation/index":{"id":"DevOps/Hashicorp/2022-12-03-hashicorp-vault-installation/index","title":"Hashicorp Vault - Installation 2023","description":"Getting started with Hashicorp Vault","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-12-04-hashicorp-consul-vault-certificates-part1/index":{"id":"DevOps/Hashicorp/2022-12-04-hashicorp-consul-vault-certificates-part1/index","title":"Hashicorp Consul - Vault Cert Management Part 1","description":"Set-up Vault to be the Certificate Authority","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part2/index":{"id":"DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part2/index","title":"Hashicorp Consul - Vault Cert Management Part 2","description":"Set-up Vault to be the Certificate Authority","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part3/index":{"id":"DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part3/index","title":"Hashicorp Consul - Vault Cert Management Part 3","description":"Set-up Vault to be the Certificate Authority","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-12-07-hashicorp-vault-ca-certificates/index":{"id":"DevOps/Hashicorp/2022-12-07-hashicorp-vault-ca-certificates/index","title":"Hashicorp Vault - Certificate Authority","description":"Generating CA certificates through Hashicorp Vault user interface.","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2023-10-22-hashicorp-terraform-docker-2023/index":{"id":"DevOps/Hashicorp/2023-10-22-hashicorp-terraform-docker-2023/index","title":"Hashicorp Terraform - Docker Provider 2023","description":"Build, change, and destroy Docker infrastructure using Terraform.","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2023-12-22-hashicorp-terraform-docker-2024/index":{"id":"DevOps/Hashicorp/2023-12-22-hashicorp-terraform-docker-2024/index","title":"Hashicorp Terraform - Docker Provider 2024","description":"Build, change, and destroy Docker infrastructure using Terraform.","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2023-12-23-opentofu-vs-terraform/index":{"id":"DevOps/Hashicorp/2023-12-23-opentofu-vs-terraform/index","title":"Opentofu vs Hashicorp Terraform","description":"The open source infrastructure as code alternative to Hashicorp Terraform.","sidebar":"tutorialSidebar"},"DevOps/Kubernetes/2019-01-02--managing-containers-in-kubernetes/index":{"id":"DevOps/Kubernetes/2019-01-02--managing-containers-in-kubernetes/index","title":"Managing Containers in Kubernetes","description":"Shanghai, China","sidebar":"tutorialSidebar"},"DevOps/Kubernetes/2019-01-15--creating-a-kubernetes-cluster/index":{"id":"DevOps/Kubernetes/2019-01-15--creating-a-kubernetes-cluster/index","title":"Creating a Kubernetes Cluster","description":"Shanghai, China","sidebar":"tutorialSidebar"},"DevOps/Kubernetes/2019-01-17--kubernetes-and-microservices/index":{"id":"DevOps/Kubernetes/2019-01-17--kubernetes-and-microservices/index","title":"Kubernetes and Microservices","description":"Sydney, Australia","sidebar":"tutorialSidebar"},"DevOps/Kubernetes/2019-01-19--kubernetes-cluster-logging/index":{"id":"DevOps/Kubernetes/2019-01-19--kubernetes-cluster-logging/index","title":"Kubernetes Cluster Monitoring & Logging","description":"Angkor Wat, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Kubernetes/2019-01-21--kubernetes-bare-metal-ingress/index":{"id":"DevOps/Kubernetes/2019-01-21--kubernetes-bare-metal-ingress/index","title":"Kubernetes Bare Metal Ingress","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Kubernetes/2019-01-21--kubernetes-nginx-https-service/index":{"id":"DevOps/Kubernetes/2019-01-21--kubernetes-nginx-https-service/index","title":"Kubernetes NGINX https Service","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Kubernetes/2019-01-22--kubernetes-nginx-ingress/index":{"id":"DevOps/Kubernetes/2019-01-22--kubernetes-nginx-ingress/index","title":"Kubernetes NGINX Ingress","description":"Malekula, Vanuatu","sidebar":"tutorialSidebar"},"DevOps/Kubernetes/2019-01-27--kubernetes-the-chinese-way/index":{"id":"DevOps/Kubernetes/2019-01-27--kubernetes-the-chinese-way/index","title":"Kubernetes the Chinese Way","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Kubernetes/2019-02-01--kubernetes-traefik-ingress/index":{"id":"DevOps/Kubernetes/2019-02-01--kubernetes-traefik-ingress/index","title":"Kubernetes Traefik Ingress","description":"Tanna, Vanuatu","sidebar":"tutorialSidebar"},"DevOps/Kubernetes/2019-03-02--installing-openshift-3-on-centos-7/index":{"id":"DevOps/Kubernetes/2019-03-02--installing-openshift-3-on-centos-7/index","title":"Red Hat OpenShift 3 Container Platform","description":"Harbin, China","sidebar":"tutorialSidebar"},"DevOps/Kubernetes/2019-03-05--first-openshift3-cluster/index":{"id":"DevOps/Kubernetes/2019-03-05--first-openshift3-cluster/index","title":"Setting up an OKD Cluster","description":"Mustang, Nepal","sidebar":"tutorialSidebar"},"DevOps/Kubernetes/2022-11-19--k3s-air-gapped-kubernetes/index":{"id":"DevOps/Kubernetes/2022-11-19--k3s-air-gapped-kubernetes/index","title":"Kubernetes Beyond the Edge","description":"Installing K3S on Air-Gapped Bare-Metal Server","sidebar":"tutorialSidebar"},"DevOps/Linux/2018-10-27--red-hat-certified-engineer-rhce/index":{"id":"DevOps/Linux/2018-10-27--red-hat-certified-engineer-rhce/index","title":"Red Hat Certified Engineer (RHCE) Exam","description":"Angkor Wat, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-01-11--debian-change-ssh-port-hostname/index":{"id":"DevOps/Linux/2019-01-11--debian-change-ssh-port-hostname/index","title":"Debian SSH Port and Hostname","description":"Battambang, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-01-11--root-access-ubuntu-server/index":{"id":"DevOps/Linux/2019-01-11--root-access-ubuntu-server/index","title":"Ubuntu Server Root SSH Remote Access","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-01-11--ubuntu-network-configuration/index":{"id":"DevOps/Linux/2019-01-11--ubuntu-network-configuration/index","title":"Ubuntu Network Configuration","description":"Battambang, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-01-11--ubuntu-server-app-armour/index":{"id":"DevOps/Linux/2019-01-11--ubuntu-server-app-armour/index","title":"Ubuntu Server Cannot Stop Docker Container","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-01-12--centos-network-configuration/index":{"id":"DevOps/Linux/2019-01-12--centos-network-configuration/index","title":"Centos Network Configuration","description":"Battambang, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-01-13--centos-administration/index":{"id":"DevOps/Linux/2019-01-13--centos-administration/index","title":"Centos Administration","description":"Abashiri, Japan","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-06-07--installing-docker-on-centos8/index":{"id":"DevOps/Linux/2019-06-07--installing-docker-on-centos8/index","title":"Setting up Docker on CentOS 8","description":"Harbin, China","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-06-14--download-and-save-docker-image/index":{"id":"DevOps/Linux/2019-06-14--download-and-save-docker-image/index","title":"Downloading Docker Images for Offline Use","description":"Mustang, Nepal","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-06-17--working-with-tmux/index":{"id":"DevOps/Linux/2019-06-17--working-with-tmux/index","title":"Working with TMUX","description":"Wan Chai, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-09-22--centos8-network-config/index":{"id":"DevOps/Linux/2019-09-22--centos8-network-config/index","title":"CentOS 8 Network Configuration","description":"Mong Kok, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-09-22--zsh-on-centos8/index":{"id":"DevOps/Linux/2019-09-22--zsh-on-centos8/index","title":"Installing Oh-My-Zsh on CentOS8","description":"Central, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-09-22--zsh-on-ubuntu20/index":{"id":"DevOps/Linux/2019-09-22--zsh-on-ubuntu20/index","title":"Installing Oh-My-Zsh on Ubuntu 20.04","description":"Central, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-09-25--podman-cheat-sheet/index":{"id":"DevOps/Linux/2019-09-25--podman-cheat-sheet/index","title":"Podman Cheat Sheet","description":"This cheat sheet was written by Doug Tidwell, with huge thanks to Dan Walsh and Scott McCarty.","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-09-26--kali-docker-windows/index":{"id":"DevOps/Linux/2019-09-26--kali-docker-windows/index","title":"Kali Linux with Docker for Windows","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-12-03--podman-ftp-server-container/index":{"id":"DevOps/Linux/2019-12-03--podman-ftp-server-container/index","title":"Podman FTP Server Container","description":"Victory Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Linux/2020-01-05--centos8-cockpit/index":{"id":"DevOps/Linux/2020-01-05--centos8-cockpit/index","title":"CentOS 8 Cockpit Web Console","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Linux/2020-01-07--centos8-firewalld/index":{"id":"DevOps/Linux/2020-01-07--centos8-firewalld/index","title":"Installing FirewallD on CentOS 8","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Linux/2020-10-13--smarttools-centos/index":{"id":"DevOps/Linux/2020-10-13--smarttools-centos/index","title":"HDD Smart Tools for LINUX","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Linux/2020-10-20--activating-root-login-ubuntu-20-10/index":{"id":"DevOps/Linux/2020-10-20--activating-root-login-ubuntu-20-10/index","title":"Activating Root Login on Ubuntu 20.10","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Linux/2021-03-15-debian-upgrade-bullseye/index":{"id":"DevOps/Linux/2021-03-15-debian-upgrade-bullseye/index","title":"Debian Upgrade to Bullseye","description":"Hongkong, TST","sidebar":"tutorialSidebar"},"DevOps/Linux/2021-04-11-installing-free-red-hat-enterprise-linux/index":{"id":"DevOps/Linux/2021-04-11-installing-free-red-hat-enterprise-linux/index","title":"Installing Free Red Hat Enterprise Linux","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Linux/2021-04-12-gnome3-cheat-sheet/index":{"id":"DevOps/Linux/2021-04-12-gnome3-cheat-sheet/index","title":"Gnome3 Cheat Sheet","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Linux/2021-04-13-installing-kvm-on-red-hat-enterprise-linux/index":{"id":"DevOps/Linux/2021-04-13-installing-kvm-on-red-hat-enterprise-linux/index","title":"Setting up KVM on RedHat Enterprise Linux","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Linux/2021-04-14-using-deb-files-on-rhel8/index":{"id":"DevOps/Linux/2021-04-14-using-deb-files-on-rhel8/index","title":"Installing Deb Packages on RHEL8","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Linux/2021-09-01--kali-linux-raspberry-pi/index":{"id":"DevOps/Linux/2021-09-01--kali-linux-raspberry-pi/index","title":"Installing Kali LINUX on a Raspberry Pi 3","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Linux/2021-09-02--openwrt-raspberry-pi/index":{"id":"DevOps/Linux/2021-09-02--openwrt-raspberry-pi/index","title":"Installing OpenWRT on a Raspberry Pi 4","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Linux/2021-10-09--editor-from-hell/index":{"id":"DevOps/Linux/2021-10-09--editor-from-hell/index","title":"Editor from Hell","description":"Harbin , China","sidebar":"tutorialSidebar"},"DevOps/Linux/2021-10-09--the-friendly-editor/index":{"id":"DevOps/Linux/2021-10-09--the-friendly-editor/index","title":"The friendly Editor","description":"Harbin , China","sidebar":"tutorialSidebar"},"DevOps/Linux/2021-10-23--arch-linux-install-packages/index":{"id":"DevOps/Linux/2021-10-23--arch-linux-install-packages/index","title":"Install Packages in Arch Linux","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Linux/2021-10-24--arch-linux-install-docker/index":{"id":"DevOps/Linux/2021-10-24--arch-linux-install-docker/index","title":"Install Docker in Arch Linux","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Linux/2021-10-24--arch-linux-install-mesen/index":{"id":"DevOps/Linux/2021-10-24--arch-linux-install-mesen/index","title":"Install Mesen in Arch Linux","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Linux/2021-10-26--install-davinci-resolve-on-arch/index":{"id":"DevOps/Linux/2021-10-26--install-davinci-resolve-on-arch/index","title":"Install Davinci Resolve on Arch Linux","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Linux/2022-03-07--ffmpeg-cheat-sheet/index":{"id":"DevOps/Linux/2022-03-07--ffmpeg-cheat-sheet/index","title":"FFMPEG Cheat Sheet","description":"ffmpeg version 5.0-full_build-www.gyan.dev Copyright (c) 2000-2022","sidebar":"tutorialSidebar"},"DevOps/Linux/2022-03-08--arch-kde-fritz-vpn/index":{"id":"DevOps/Linux/2022-03-08--arch-kde-fritz-vpn/index","title":"Using the AVM Fritzbox VPN on Manjaro (KDE)","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Linux/2022-03-09--fing-cli-network-scanner/index":{"id":"DevOps/Linux/2022-03-09--fing-cli-network-scanner/index","title":"Fing CLI Network Scanner on Arch Linux","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Linux/2022-03-10--nmap-network-scanner/index":{"id":"DevOps/Linux/2022-03-10--nmap-network-scanner/index","title":"nmap Cheat Sheet","description":"Syntax for Nmap Commands","sidebar":"tutorialSidebar"},"DevOps/Linux/2022-09-15--ntp-over-nts-timeserver/index":{"id":"DevOps/Linux/2022-09-15--ntp-over-nts-timeserver/index","title":"Secure Timeserver - NTP with NTS with Docker","description":"NTS is a method for using TLS/SSL to authenticate NTP traffic on the net.","sidebar":"tutorialSidebar"},"DevOps/Linux/2022-09-28--nts-client-setup/index":{"id":"DevOps/Linux/2022-09-28--nts-client-setup/index","title":"NTS-Service and Authenticated Time Synchronization","description":"Building a client for a time service which uses IETF RFC 8915 called \u201cNetwork Time Security\u201c (NTS).","sidebar":"tutorialSidebar"},"DevOps/Linux/2022-09-29--build-an-chrony-nts-client-from-source/index":{"id":"DevOps/Linux/2022-09-29--build-an-chrony-nts-client-from-source/index","title":"Build a Chrony NTS Client from Source","description":"Building a client from source for a time service which uses IETF RFC 8915 called \u201cNetwork Time Security\u201c (NTS).","sidebar":"tutorialSidebar"},"DevOps/Linux/2022-11-04--check-filesystem/index":{"id":"DevOps/Linux/2022-11-04--check-filesystem/index","title":"Check the Filesystem","description":"Check the Filesystem of a mounted SD Card using fsck","sidebar":"tutorialSidebar"},"DevOps/Linux/2022-11-09--docker-borg-backupserver/index":{"id":"DevOps/Linux/2022-11-09--docker-borg-backupserver/index","title":"Resistance is futile - Borg with Docker","description":"Backup server using Docker","sidebar":"tutorialSidebar"},"DevOps/Linux/2023-02-03--installing-docker-raspberry-pi/index":{"id":"DevOps/Linux/2023-02-03--installing-docker-raspberry-pi/index","title":"ARM Docker","description":"Installing Docker on a Raspberry Pi","sidebar":"tutorialSidebar"},"DevOps/Linux/2023-03-29--installing-the-elgato-streamdeck/index":{"id":"DevOps/Linux/2023-03-29--installing-the-elgato-streamdeck/index","title":"Elgato Streamdeck on Arch Linux","description":"Installing the Elgato Streamdeck on Arch Linux","sidebar":"tutorialSidebar"},"DevOps/Linux/2023-10-28--lunarvim/index":{"id":"DevOps/Linux/2023-10-28--lunarvim/index","title":"From NeoVim to LunarVim","description":"An IDE layer for Neovim with sane defaults. Completely free and community driven.","sidebar":"tutorialSidebar"},"DevOps/Linux/2024-01-08--vsftp-ubuntu/index":{"id":"DevOps/Linux/2024-01-08--vsftp-ubuntu/index","title":"vsftp on Ubuntu","description":"Setting up an FTP server on Ubuntu 22.04.","sidebar":"tutorialSidebar"},"DevOps/NGINX/2017-10-01--using-nginx-as-proxy-for-your-nodejs-apps/index":{"id":"DevOps/NGINX/2017-10-01--using-nginx-as-proxy-for-your-nodejs-apps/index","title":"Using NGINX as proxy for your nodejs apps","description":"Hongkong","sidebar":"tutorialSidebar"},"DevOps/NGINX/2017-12-24--nginx-node-security/index":{"id":"DevOps/NGINX/2017-12-24--nginx-node-security/index","title":"NGINX, Node.js & Security","description":"Sydney, Australia","sidebar":"tutorialSidebar"},"DevOps/NGINX/2019-02-05--nginx-ingress-cert-manager/index":{"id":"DevOps/NGINX/2019-02-05--nginx-ingress-cert-manager/index","title":"NGINX Ingress with Cert-Manager","description":"Port Vila, Vanuatu","sidebar":"tutorialSidebar"},"DevOps/NGINX/2019-11-07--nginx-rtmp-streaming-container/index":{"id":"DevOps/NGINX/2019-11-07--nginx-rtmp-streaming-container/index","title":"Building an RTMP Streaming Server with Podman","description":"Harbin, China","sidebar":"tutorialSidebar"},"DevOps/NGINX/2019-11-08--nginx-rtmp-website/index":{"id":"DevOps/NGINX/2019-11-08--nginx-rtmp-website/index","title":"Adding an OBS Stream to your Website","description":"Koh Rong, Cambodia","sidebar":"tutorialSidebar"},"DevOps/NGINX/2020-07-29--securing-apache-and-nginx/index":{"id":"DevOps/NGINX/2020-07-29--securing-apache-and-nginx/index","title":"Securing Webservers - Apache and NGINX","description":"Central, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/NGINX/2020-08-26--nginx-docker-setup/index":{"id":"DevOps/NGINX/2020-08-26--nginx-docker-setup/index","title":"NGINX Docker Setup","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/NGINX/2020-08-27--nginx-docker-ssl-certs-self-signed/index":{"id":"DevOps/NGINX/2020-08-27--nginx-docker-ssl-certs-self-signed/index","title":"NGINX Docker with SSL Encryption (Self-signed)","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/NGINX/2020-08-28--nginx-docker-certbot/index":{"id":"DevOps/NGINX/2020-08-28--nginx-docker-certbot/index","title":"NGINX Docker with Certbot","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/NGINX/2020-08-30--nginx-docker-multihost/index":{"id":"DevOps/NGINX/2020-08-30--nginx-docker-multihost/index","title":"NGINX Docker Multihost","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/NGINX/2021-02-22-nginx-docker-ingress/index":{"id":"DevOps/NGINX/2021-02-22-nginx-docker-ingress/index","title":"NGINX Docker Ingress for your Gatsby Build","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/NGINX/2021-02-23-nginx-agent-redirect/index":{"id":"DevOps/NGINX/2021-02-23-nginx-agent-redirect/index","title":"NGINX Redirect based on User Agent","description":"Tsim Sha Tsui, Hongkong","sidebar":"tutorialSidebar"},"DevOps/NGINX/2021-07-29--certbot-nginx-autorenewal/index":{"id":"DevOps/NGINX/2021-07-29--certbot-nginx-autorenewal/index","title":"Setting up Certbot Auto-renewal for NGINX (Maintenance Mode)","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/NGINX/2022-11-17-nginx-udp-tcp-load-balancing/index":{"id":"DevOps/NGINX/2022-11-17-nginx-udp-tcp-load-balancing/index","title":"NGINX TCP/UDP Load Balancing","description":"Using the NGINX Stream Module to balance TCP/UDP Traffic","sidebar":"tutorialSidebar"},"DevOps/NGINX/2022-12-08-nginx-websocket-proxy/index":{"id":"DevOps/NGINX/2022-12-08-nginx-websocket-proxy/index","title":"NGINX Websocket Proxy","description":"Using the NGINX as a Proxy for Websocket APIs","sidebar":"tutorialSidebar"},"DevOps/NGINX/2023-06-13-nginx-docker-ingress/index":{"id":"DevOps/NGINX/2023-06-13-nginx-docker-ingress/index","title":"NGINX HTTP/2 Docker Ingress","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2010-02-02--svn-subversion-windows/index":{"id":"DevOps/Provisioning/2010-02-02--svn-subversion-windows/index","title":"Using SVN Subversion on Windows 10","description":"Installing Subversion","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2017-09-05--developing-software-in-china/index":{"id":"DevOps/Provisioning/2017-09-05--developing-software-in-china/index","title":"Proxima Centauri","description":"Phnom Penh, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2017-09-06--developing-software-in-china-2/index":{"id":"DevOps/Provisioning/2017-09-06--developing-software-in-china-2/index","title":"Proxima Centauri II","description":"Phnom Penh, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2018-01-26--node-express-docker-container/index":{"id":"DevOps/Provisioning/2018-01-26--node-express-docker-container/index","title":"Run your Node.js app from a Docker Container","description":"Abashiri, Hokkaido, Japan","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2018-01-27--express-generator-app-docker/index":{"id":"DevOps/Provisioning/2018-01-27--express-generator-app-docker/index","title":"Link your Node Source Code into a Docker Container","description":"Mustang, Nepal","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2018-01-28--express-generator-dockerrized/index":{"id":"DevOps/Provisioning/2018-01-28--express-generator-dockerrized/index","title":"How to wrap your Source Code into a Docker Container","description":"Shanghai, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2018-11-10--postgresql-getting-started/index":{"id":"DevOps/Provisioning/2018-11-10--postgresql-getting-started/index","title":"Getting started with PostgreSQL in Windows 10","description":"Muktinath, Nepal","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2018-12-27--red-hat-containerized-application-development-rhcs/index":{"id":"DevOps/Provisioning/2018-12-27--red-hat-containerized-application-development-rhcs/index","title":"Red Hat Certified Specialist in Containerized Application Development","description":"Shanghai, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2019-01-08--creating-a-grafana-dashboard/index":{"id":"DevOps/Provisioning/2019-01-08--creating-a-grafana-dashboard/index","title":"Sensors Data and Grafana","description":"Hongkong","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2019-06-15--installing-discourse-on-centos8/index":{"id":"DevOps/Provisioning/2019-06-15--installing-discourse-on-centos8/index","title":"Installing Discourse on Centos 8","description":"Mongkok, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2019-06-16--migrating-from-vbulletin-to-discourse-on-centos8/index":{"id":"DevOps/Provisioning/2019-06-16--migrating-from-vbulletin-to-discourse-on-centos8/index","title":"Migrating from vBulletin 5 to Discourse on CentOS 8","description":"Taipa, Macau","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2019-06-18--using-oauth2-in-discourse/index":{"id":"DevOps/Provisioning/2019-06-18--using-oauth2-in-discourse/index","title":"User Login with Google OAuth2 for Discourse","description":"Katmandu, Nepal","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2019-06-19--using-twitter-auth-in-discourse/index":{"id":"DevOps/Provisioning/2019-06-19--using-twitter-auth-in-discourse/index","title":"User Login with Twitter for Discourse","description":"Taipa, Macau","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2019-06-20--using-github-auth-in-discourse/index":{"id":"DevOps/Provisioning/2019-06-20--using-github-auth-in-discourse/index","title":"User Login with Github for Discourse","description":"Mustang, Nepal","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2019-06-21--using-facebook-auth-in-discourse/index":{"id":"DevOps/Provisioning/2019-06-21--using-facebook-auth-in-discourse/index","title":"User Login with Facebook for Discourse","description":"Bakhtapur, Nepal","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2019-09-16--installing-vanilla-forum/index":{"id":"DevOps/Provisioning/2019-09-16--installing-vanilla-forum/index","title":"Vanilla Forums Installation on Debian","description":"Katmandu, Nepal","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2020-06-07--setting-up-wikijs-in-docker/index":{"id":"DevOps/Provisioning/2020-06-07--setting-up-wikijs-in-docker/index","title":"Developing WikiJS in Docker","description":"Central, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2020-07-13--infrastructure-as-code/index":{"id":"DevOps/Provisioning/2020-07-13--infrastructure-as-code/index","title":"Infrastructure as Code","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2020-08-29--static-server-with-hapi-and-docker/index":{"id":"DevOps/Provisioning/2020-08-29--static-server-with-hapi-and-docker/index","title":"Serving Static Files with Hapi and Docker","description":"Central, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2020-09-02--docker-compose-networking/index":{"id":"DevOps/Provisioning/2020-09-02--docker-compose-networking/index","title":"Docker Compose Networking","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2020-10-01--installing-openproject-in-docker/index":{"id":"DevOps/Provisioning/2020-10-01--installing-openproject-in-docker/index","title":"Installing OpenProject with Docker Compose","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2020-10-02--installing-wazuh-in-docker/index":{"id":"DevOps/Provisioning/2020-10-02--installing-wazuh-in-docker/index","title":"Installing Wazuh with Docker Compose","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2021-01-22-file-transfer-tools-in-nodejs/index":{"id":"DevOps/Provisioning/2021-01-22-file-transfer-tools-in-nodejs/index","title":"File Transfer Tool in Node.js","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2021-01-23-nodejs-file-server/index":{"id":"DevOps/Provisioning/2021-01-23-nodejs-file-server/index","title":"Node.js FTP Server","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2021-01-27-owncloud-ocis/index":{"id":"DevOps/Provisioning/2021-01-27-owncloud-ocis/index","title":"ownCloud Infinite Scale Stack","description":"Jomson, Nepal","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2021-04-07--loki-prometheus-grafana/index":{"id":"DevOps/Provisioning/2021-04-07--loki-prometheus-grafana/index","title":"Loki - Promtail & Grafana for System Logs.","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2021-09-13--postgres-refresher-part-i/index":{"id":"DevOps/Provisioning/2021-09-13--postgres-refresher-part-i/index","title":"PostgreSQL 14 Database Refresher :: Introduction Part I","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2021-09-13--postgres-refresher-part-ii/index":{"id":"DevOps/Provisioning/2021-09-13--postgres-refresher-part-ii/index","title":"PostgreSQL 14 Database Refresher :: Introduction Part II","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2021-09-14--postgres-refresher-hasura/index":{"id":"DevOps/Provisioning/2021-09-14--postgres-refresher-hasura/index","title":"PostgreSQL 14 Database Refresher :: Working with GraphQL","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2021-09-14--postgres-refresher-node-json/index":{"id":"DevOps/Provisioning/2021-09-14--postgres-refresher-node-json/index","title":"PostgreSQL 14 Database Refresher :: Working with JSON & Node.js","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2021-10-12--traefik-configuration/index":{"id":"DevOps/Provisioning/2021-10-12--traefik-configuration/index","title":"Traefik v2 Webproxy Configuration - 1st Attempt","description":"Central, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2021-10-12--traefik-second-attempt/index":{"id":"DevOps/Provisioning/2021-10-12--traefik-second-attempt/index","title":"Traefik v2 Webproxy Configuration - 2nd Attempt","description":"Central, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2021-10-12--traefik-third-attempt/index":{"id":"DevOps/Provisioning/2021-10-12--traefik-third-attempt/index","title":"Setting up Wordpress with Traefik v2","description":"Central, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2021-10-25--matrix-secure-messaging/index":{"id":"DevOps/Provisioning/2021-10-25--matrix-secure-messaging/index","title":"Matrix Secure Messaging","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2022-01-23--installing-discourse-docker/index":{"id":"DevOps/Provisioning/2022-01-23--installing-discourse-docker/index","title":"Installing a Discourse Forum on Debian Bullseye with Docker","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2022-01-24--getting-to-know-bind9-docker/index":{"id":"DevOps/Provisioning/2022-01-24--getting-to-know-bind9-docker/index","title":"Getting to know the BIND9 DNS Server with Docker","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2022-01-25--installing-bind9-docker/index":{"id":"DevOps/Provisioning/2022-01-25--installing-bind9-docker/index","title":"Running a DNS Server with Docker","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2022-01-26--dns-over-TLS-docker/index":{"id":"DevOps/Provisioning/2022-01-26--dns-over-TLS-docker/index","title":"DNS Over TLS Using BIND And Nginx","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2022-01-27--bind9-configuration/index":{"id":"DevOps/Provisioning/2022-01-27--bind9-configuration/index","title":"Bind9 Server Configuration","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2022-10-16--os-ticket-docker/index":{"id":"DevOps/Provisioning/2022-10-16--os-ticket-docker/index","title":"Provision OSticket with Docker","description":"Use Docker, Docker-Compose and Nomad to provide an OSTicket Service","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2022-10-27--os-ticket-rest-api/index":{"id":"DevOps/Provisioning/2022-10-27--os-ticket-rest-api/index","title":"OSticket REST API Calls","description":"Use Docker, Docker-Compose and Nomad to provide an OSTicket Service","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2022-11-07--cphalcon-docker/index":{"id":"DevOps/Provisioning/2022-11-07--cphalcon-docker/index","title":"Deploy a cPhalcon App with Docker","description":"User Docker to provision a cPhalcon PHP application","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2022-11-16--mautic-docker/index":{"id":"DevOps/Provisioning/2022-11-16--mautic-docker/index","title":"Deploy Mautic with Docker","description":"User Docker to provision the Mautic Free and Open Source Marketing Automation Platform","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2023-02-13--meili-search-gatsby/index":{"id":"DevOps/Provisioning/2023-02-13--meili-search-gatsby/index","title":"Gatsby Blog with a MeiLi Search Backend","description":"Serve your Gatsby.js Blog in a goFiber container and connect a Search Engine.","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2023-03-09--os-ticket-docker-2023/index":{"id":"DevOps/Provisioning/2023-03-09--os-ticket-docker-2023/index","title":"Provision OSticket with Docker (2023)","description":"Use Docker, Docker-Compose and Nomad to provide an OSTicket Service","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2024-01-17--ntfy-notification-service/index":{"id":"DevOps/Provisioning/2024-01-17--ntfy-notification-service/index","title":"ntfy Notification Service","description":"ntfy lets you send push notifications to your phone or desktop via scripts from any computer, using simple HTTP PUT or POST requests.","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2024-01-18--uptime-kuma-monitoring/index":{"id":"DevOps/Provisioning/2024-01-18--uptime-kuma-monitoring/index","title":"Uptime Kuma","description":"Uptime Kuma is an easy-to-use self-hosted monitoring tool.","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-14--install-salt-on-ubuntu-20-04/index":{"id":"DevOps/Salt/2020-06-14--install-salt-on-ubuntu-20-04/index","title":"Install Salt on Ubuntu Server 20.04","description":"Battambang, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-15--salty-devops/index":{"id":"DevOps/Salt/2020-06-15--salty-devops/index","title":"Salty DevOps","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-16--salt-state/index":{"id":"DevOps/Salt/2020-06-16--salt-state/index","title":"Salt State","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-17--salt-pillars-formulas/index":{"id":"DevOps/Salt/2020-06-17--salt-pillars-formulas/index","title":"Salt Pillars & Formulas","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-18--salt-execution-order/index":{"id":"DevOps/Salt/2020-06-18--salt-execution-order/index","title":"Salt Execution Order","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-19--salt-mine-orchestrate/index":{"id":"DevOps/Salt/2020-06-19--salt-mine-orchestrate/index","title":"Salt Mine & Orchestrate","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-20--salt-reactor-events/index":{"id":"DevOps/Salt/2020-06-20--salt-reactor-events/index","title":"Salt Reactor and System Events","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-21--salt-events-and-thirdparty-apps/index":{"id":"DevOps/Salt/2020-06-21--salt-events-and-thirdparty-apps/index","title":"Salt Beacons Module","description":"Mon Kok, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-22--salt-nginx-state/index":{"id":"DevOps/Salt/2020-06-22--salt-nginx-state/index","title":"NGINX Salt State","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-23--saltestack-refresh-course-1-setup/index":{"id":"DevOps/Salt/2020-06-23--saltestack-refresh-course-1-setup/index","title":"Saltstack Refresh Course 1: Setup","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-23--saltestack-refresh-course-2-salt-state/index":{"id":"DevOps/Salt/2020-06-23--saltestack-refresh-course-2-salt-state/index","title":"Saltstack Refresh Course 2: Salt State","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-23--saltestack-refresh-course-3-highstate/index":{"id":"DevOps/Salt/2020-06-23--saltestack-refresh-course-3-highstate/index","title":"Saltstack Refresh Course 2: Highstate","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-23--saltestack-refresh-course-4-salt-mine/index":{"id":"DevOps/Salt/2020-06-23--saltestack-refresh-course-4-salt-mine/index","title":"Saltstack Refresh Course 2: Salt Mines","description":"Cheung Chau, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-25--salt-orchestration-for-docker-containers/index":{"id":"DevOps/Salt/2020-06-25--salt-orchestration-for-docker-containers/index","title":"Salt Orchestration for Docker Containers","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Security/2020-07-26--firewalld-configuration/index":{"id":"DevOps/Security/2020-07-26--firewalld-configuration/index","title":"Securing Webservers - FirewallD and fail2ban","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Security/2020-07-27--firewalld-deployment-centos7/index":{"id":"DevOps/Security/2020-07-27--firewalld-deployment-centos7/index","title":"Securing Webservers - FirewallD Deployment on CentOS7","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Security/2020-07-27--firewalld-deployment-debian/index":{"id":"DevOps/Security/2020-07-27--firewalld-deployment-debian/index","title":"Securing Webservers - FirewallD Deployment on Debian 9","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Security/2020-07-27--firewalld-deployment-ubuntu/index":{"id":"DevOps/Security/2020-07-27--firewalld-deployment-ubuntu/index","title":"Securing Webservers - FirewallD Deployment on Ubuntu 20.04","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Security/2020-07-28--fail2ban-ubuntu-server/index":{"id":"DevOps/Security/2020-07-28--fail2ban-ubuntu-server/index","title":"Securing Webservers - Fail2Ban Ubuntu 20.10","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Security/2020-07-28--uncomplicated-firewall-ufw/index":{"id":"DevOps/Security/2020-07-28--uncomplicated-firewall-ufw/index","title":"Securing Webservers - Uncomplicated Firewall","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Security/2022-09-27--wireshark-with-tls-encryption/index":{"id":"DevOps/Security/2022-09-27--wireshark-with-tls-encryption/index","title":"Analyzing and Decrypting TLS with Wireshark","description":"Capturing session keys to decrypt TLS traffic.","sidebar":"tutorialSidebar"},"DevOps/Tomcat/2020-12-22-tomcat9-ubuntu-20-10-installation/index":{"id":"DevOps/Tomcat/2020-12-22-tomcat9-ubuntu-20-10-installation/index","title":"Install Tomcat 9 on Ubuntu 20.04","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Tomcat/2020-12-23-tomcat9-configuration/index":{"id":"DevOps/Tomcat/2020-12-23-tomcat9-configuration/index","title":"Tomcat 9 Configuration","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Tomcat/2020-12-24-tomcat9-cluster-and-load-balancing/index":{"id":"DevOps/Tomcat/2020-12-24-tomcat9-cluster-and-load-balancing/index","title":"Tomcat 9 Cluster & Loadbalancing","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Tomcat/2020-12-25-tomcat10-docker-cluster/index":{"id":"DevOps/Tomcat/2020-12-25-tomcat10-docker-cluster/index","title":"Tomcat 10 Docker Cluster","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Tomcat/2020-12-26-tomcat10-cluster-with-individual-nodes/index":{"id":"DevOps/Tomcat/2020-12-26-tomcat10-cluster-with-individual-nodes/index","title":"Tomcat 10 Cluster with individual Node Server","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Windows/2017-07-06--windows-cmd/index":{"id":"DevOps/Windows/2017-07-06--windows-cmd/index","title":"Windows CMD","description":"Hokkaido, Abashiri","sidebar":"tutorialSidebar"},"DevOps/Windows/2017-07-07--windows10-control/index":{"id":"DevOps/Windows/2017-07-07--windows10-control/index","title":"Windows Control","description":"Hokkaido, Abashiri","sidebar":"tutorialSidebar"},"DevOps/Windows/2017-12-19--umlaute-on-us-keyboard/index":{"id":"DevOps/Windows/2017-12-19--umlaute-on-us-keyboard/index","title":"Umlaute","description":"Harbin, China","sidebar":"tutorialSidebar"},"DevOps/Windows/2019-06-09--setting-up-windows-server-2019/index":{"id":"DevOps/Windows/2019-06-09--setting-up-windows-server-2019/index","title":"Getting Started with Windows Server 2019","description":"Central, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Windows/2019-06-10--windows-server-2019-scripting-and-sharing/index":{"id":"DevOps/Windows/2019-06-10--windows-server-2019-scripting-and-sharing/index","title":"Windows Server 2019 - Scripting and Sharing","description":"Wan Chai, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Windows/2019-06-11--windows-server-2019-active-directory/index":{"id":"DevOps/Windows/2019-06-11--windows-server-2019-active-directory/index","title":"Windows Server 2019 - Active Directory Installation","description":"Shanghai, China","sidebar":"tutorialSidebar"},"DevOps/Windows/2019-06-12--windows-server-2019-active-directory/index":{"id":"DevOps/Windows/2019-06-12--windows-server-2019-active-directory/index","title":"Windows Server 2019 - Active Directory Setup","description":"Shanghai, China","sidebar":"tutorialSidebar"},"DevOps/Windows/2019-06-13--windows-server-2019-docker-daemon/index":{"id":"DevOps/Windows/2019-06-13--windows-server-2019-docker-daemon/index","title":"Windows Server 2019 - Docker Daemon","description":"Shanghai, China","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2020-07-12--nagios-docker-install/index":{"id":"DevOps/Zabbix/2020-07-12--nagios-docker-install/index","title":"Installing Nagios4 with Docker","description":"Cheung Chau, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2020-07-14--nagios-ubuntu-install/index":{"id":"DevOps/Zabbix/2020-07-14--nagios-ubuntu-install/index","title":"Installing Nagios4 on Ubuntu Server 20.04","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2020-07-15--zabbix-docker-installation/index":{"id":"DevOps/Zabbix/2020-07-15--zabbix-docker-installation/index","title":"Zabbix Docker Installation","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2020-07-16--zabbix-agent/index":{"id":"DevOps/Zabbix/2020-07-16--zabbix-agent/index","title":"Zabbix Agent","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2020-07-17--zabbix-website-monitor/index":{"id":"DevOps/Zabbix/2020-07-17--zabbix-website-monitor/index","title":"Zabbix Monitoring a Website","description":"Mong Kok, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2020-07-18--zabbix-email-notification/index":{"id":"DevOps/Zabbix/2020-07-18--zabbix-email-notification/index","title":"Zabbix Email Notifications","description":"Mong Kok, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2020-07-19--zabbix-company-logo/index":{"id":"DevOps/Zabbix/2020-07-19--zabbix-company-logo/index","title":"Zabbix Company Logo","description":"Mong Kok, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2020-07-20--zabbix-behind-nginx/index":{"id":"DevOps/Zabbix/2020-07-20--zabbix-behind-nginx/index","title":"Zabbix Multi-Tenant NGINX Docker Ingress","description":"Mong Kok, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2020-09-05--slack-notifications-in-devops/index":{"id":"DevOps/Zabbix/2020-09-05--slack-notifications-in-devops/index","title":"Slack Notifications in DevOps","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2021-01-14--zabbix-apache2-monitor/index":{"id":"DevOps/Zabbix/2021-01-14--zabbix-apache2-monitor/index","title":"Zabbix Apache 2 Monitor","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2021-10-13--zabbix-compose-setup/index":{"id":"DevOps/Zabbix/2021-10-13--zabbix-compose-setup/index","title":"Zabbix Docker-Compose Setup","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2022-01-13--zabbix-api-testing/index":{"id":"DevOps/Zabbix/2022-01-13--zabbix-api-testing/index","title":"Testing the Zabbix API with Postman","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2022-01-13--zabbix-server-v6/index":{"id":"DevOps/Zabbix/2022-01-13--zabbix-server-v6/index","title":"Zabbix v6 Docker-Compose Setup","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2022-01-14--zabbix-apache2-monitor/index":{"id":"DevOps/Zabbix/2022-01-14--zabbix-apache2-monitor/index","title":"Zabbix v6 Apache 2 Monitor","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2022-01-14--zabbix-docker-monitor/index":{"id":"DevOps/Zabbix/2022-01-14--zabbix-docker-monitor/index","title":"Zabbix v6 Docker Monitor","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2022-01-14--zabbix-http-cert-monitor/index":{"id":"DevOps/Zabbix/2022-01-14--zabbix-http-cert-monitor/index","title":"Zabbix HTTPS Certificate Monitor","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2022-01-14--zabbix-nginx-monitor/index":{"id":"DevOps/Zabbix/2022-01-14--zabbix-nginx-monitor/index","title":"Zabbix v6 NGINX Monitor","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2022-01-15--zabbix-grafana-dashboard/index":{"id":"DevOps/Zabbix/2022-01-15--zabbix-grafana-dashboard/index","title":"Grafana Dashboard for Zabbix v6","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2022-01-15--zabbix-v6-email-notifications/index":{"id":"DevOps/Zabbix/2022-01-15--zabbix-v6-email-notifications/index","title":"Zabbix v6 Email Notifications","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2022-01-15--zabbix-v6-slack-notifications/index":{"id":"DevOps/Zabbix/2022-01-15--zabbix-v6-slack-notifications/index","title":"Zabbix v6 Slack Notifications","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/index":{"id":"DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/index","title":"Zabbix v6 SMART HDD Check","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2022-01-16--zabbix-v6-baseline-monitoring/index":{"id":"DevOps/Zabbix/2022-01-16--zabbix-v6-baseline-monitoring/index","title":"Zabbix v6 Creating triggers for Baseline monitoring and Anomaly detection","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2022-07-15-zabbix-for-zimbra/index":{"id":"DevOps/Zabbix/2022-07-15-zabbix-for-zimbra/index","title":"Zabbix <3 Zimbra","description":"Sydney, Australia","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"Introduction","description":"Web Development","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-01-01-tf-model-server/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-01-01-tf-model-server/index","title":"Tensorflow Docker Model Server","description":"Use Tensorflow Serving to Provision your ML Model","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-01-02-tf-serve-own-models/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-01-02-tf-serve-own-models/index","title":"Tensorflow Serving REST API","description":"Provide your prediction model through the Tensorflow Serving REST API","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-01-03-tf-tensorboard/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-01-03-tf-tensorboard/index","title":"Tensorflow Tensorboard","description":"Tensorflow dashboard that allows you to track the network performance by accuracy and loss statistics.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-01-04-tf-distributed-strategy/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-01-04-tf-distributed-strategy/index","title":"Distributed training with TensorFlow","description":"Distribute training across multiple GPUs, multiple machines, or TPUs.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-01-05-dvc-model-version-control/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-01-05-dvc-model-version-control/index","title":"Data Version Control","description":"Open-source Version Control System for Machine Learning Projects.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-01-06-dvc-model-access/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-01-06-dvc-model-access/index","title":"DVC Model Access","description":"Retrieve your Model Data","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-01-22-python-ray-introduction/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-01-22-python-ray-introduction/index","title":"Python Ray Basic Concepts","description":"Ray is an open-source unified compute framework that makes it easy to scale AI and general Python workloads","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-01-23-python-ray-remote-functions/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-01-23-python-ray-remote-functions/index","title":"Python Ray Remote Functions","description":"Remote functions can be run in a separate process on the local machine - spreading out the workload over several cores. Or can be executed on remote machines in your server cluster.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-01-26-python-ray-remote-actors/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-01-26-python-ray-remote-actors/index","title":"Python Ray Remote Actors","description":"Use Ray Actors to maintain a state between invocations.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-01-29-python-ray-deployments/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-01-29-python-ray-deployments/index","title":"Python Ray Deployments","description":"Use Ray to deploy your remote services.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-01-31-python-ray-model-serving/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-01-31-python-ray-model-serving/index","title":"Python Ray Model Serving","description":"Using Ray Serve for ML Model Serving.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-02-01-apache-airflow-introduction/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-02-01-apache-airflow-introduction/index","title":"Apache Airflow Introduction","description":"Airflow is a platform to author, schedule and monitor workflows.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-02-04-apache-airflow-data-pipelines/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-02-04-apache-airflow-data-pipelines/index","title":"Apache Airflow Data Pipelines","description":"Airflow is a platform to author, schedule and monitor workflows.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-02-05-apache-airflow-scheduler/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-02-05-apache-airflow-scheduler/index","title":"Apache Airflow DAG Scheduling","description":"Airflow is a platform to author, schedule and monitor workflows.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-02-06-apache-airflow-dynamic-dags/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-02-06-apache-airflow-dynamic-dags/index","title":"Apache Airflow Dynamic DAGs","description":"Airflow is a platform to author, schedule and monitor workflows.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-02-09-mlflow-introduction/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-02-09-mlflow-introduction/index","title":"MLflow 2.1 Introduction","description":"An open source platform for the machine learning lifecycle.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-03-27-deploying-prediction-apis-with-flask/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-03-27-deploying-prediction-apis-with-flask/index","title":"Deploying Prediction APIs","description":"Using Flask to deploy your ML Model as a Web Application","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-06-17-scikit-learn-model-deployment/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-06-17-scikit-learn-model-deployment/index","title":"Serving your SciKit Learn Model as a Prediction API","description":"Use Flask, Docker and React.js to Deploy your ML Model to the Web","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-06-18-automl-with-autogluon-tabular-data/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-06-18-automl-with-autogluon-tabular-data/index","title":"AutoML with AutoGluon for Tabular Data","description":"Using Amazon SageMaker / AutoGluon to find your perfect model fit.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-06-21-automl-with-autogluon-multiclass-nlp/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-06-21-automl-with-autogluon-multiclass-nlp/index","title":"AutoML with AutoGluon for Multi-Modal Data NLP","description":"Using Amazon SageMaker / AutoGluon to find your perfect model fit.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-06-23-automl-with-autogluon-timeseries-forecast/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-06-23-automl-with-autogluon-timeseries-forecast/index","title":"AutoML with AutoGluon for Timeseries Forecasts","description":"Using Amazon SageMaker / AutoGluon to find your perfect model fit.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-07-10-scikit-image-model-deployment-part1/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-07-10-scikit-image-model-deployment-part1/index","title":"Serving your SciKit Image Model as a Prediction API","description":"Use Flask, Docker to Deploy your ML Model to the Web","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-07-12-scikit-image-model-deployment-part2/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-07-12-scikit-image-model-deployment-part2/index","title":"Serving your SciKit Image Model as a Prediction API","description":"Use Flask, Docker to Deploy your ML Model to the Web","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-08-19-tensorflow-serving-api/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-08-19-tensorflow-serving-api/index","title":"Tensorflow Serving API","description":"Once you build a machine learning model, the next step is to serve it with TensorFlow Serving.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-09-27-zenml-intro-sklearn-pipeline/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-09-27-zenml-intro-sklearn-pipeline/index","title":"MLOps with ZenML - SKLearn Classifier Pipeline","description":"Use ZenML to build a SciKit-Learn SVC Image Classifier Pipeline","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2024-02-21-mlflow-pytorch-lightning-docker/index":{"id":"IoT-and-Machine-Learning/AIOps/2024-02-21-mlflow-pytorch-lightning-docker/index","title":"MLFlow with PyTorch Lighning in Docker","description":"Experiment with running pyTorch, Jupyter and MLFlow in Docker","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2024-02-24-mlflow-hyperparameter-tuning/index":{"id":"IoT-and-Machine-Learning/AIOps/2024-02-24-mlflow-hyperparameter-tuning/index","title":"MLFlow Hyperparameter Tuning in Docker","description":"Experiment to run pyTorch, Jupyter, Hyperopt and MLFlow in Docker","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2024-02-26-mlflow-with-yolov81/index":{"id":"IoT-and-Machine-Learning/AIOps/2024-02-26-mlflow-with-yolov81/index","title":"MLflow Integration for Ultralytics YOLO","description":"Experiment to run pyTorch, Jupyter, YOLOv8.1 with MLFlow in Docker","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2018-01-02--machine-learning-with-python/index":{"id":"IoT-and-Machine-Learning/ML/2018-01-02--machine-learning-with-python/index","title":"Machine Learning with SciKit Learn","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2019-03-31--introduction-to-tensorflow-2-beta/index":{"id":"IoT-and-Machine-Learning/ML/2019-03-31--introduction-to-tensorflow-2-beta/index","title":"Introduction to TensorFlow 2 Beta","description":"Shanghai, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2019-04-01--introduction-to-keras/index":{"id":"IoT-and-Machine-Learning/ML/2019-04-01--introduction-to-keras/index","title":"Introduction to Keras","description":"Shanghai, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-10-31--tesseract_ocr_arch_linux/index":{"id":"IoT-and-Machine-Learning/ML/2021-10-31--tesseract_ocr_arch_linux/index","title":"Tesseract OCR on Arch Linux","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-01--spacy_natural_language_processing/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-01--spacy_natural_language_processing/index","title":"spaCy NER on Arch Linux","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-02--spacy_ner_predictions/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-02--spacy_ner_predictions/index","title":"spaCy NER Predictions","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-03--streamlit-opencv-mediapipe/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-03--streamlit-opencv-mediapipe/index","title":"Streamlit user interface for openCV/Mediapipe face mesh app","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-04--installing-yolov4/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-04--installing-yolov4/index","title":"Installing YOLOv4 with Anaconda","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-05--license-plates-yolov4-opencv-tesseract/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-05--license-plates-yolov4-opencv-tesseract/index","title":"License Plate Recognition with YOLOv4, OpenCV and Tesseract","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-06--opencv-crash-course-part-i/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-06--opencv-crash-course-part-i/index","title":"OpenCV Crash Course Part I","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-07--opencv-crash-course-part-ii/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-07--opencv-crash-course-part-ii/index","title":"OpenCV Crash Course Part II","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-08--tensorflow-crash-course-part-i/activate_webcam":{"id":"IoT-and-Machine-Learning/ML/2021-11-08--tensorflow-crash-course-part-i/activate_webcam","title":"activate_webcam","description":"Find Mount","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-08--tensorflow-crash-course-part-i/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-08--tensorflow-crash-course-part-i/index","title":"Tensorflow Crash Course - Part I","description":"Mong Kok, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-09--tensorflow-crash-course-part-ii/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-09--tensorflow-crash-course-part-ii/index","title":"Tensorflow2 Crash Course - Part II","description":"Mong Kok, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-10--tensorflow-crash-course-part-iii/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-10--tensorflow-crash-course-part-iii/index","title":"Tensorflow2 Crash Course - Part III","description":"Mong Kok, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-11--tensorflow-crash-course-part-iv/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-11--tensorflow-crash-course-part-iv/index","title":"Tensorflow2 Crash Course - Part IV","description":"Mong Kok, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-12--tensorflow-crash-course-part-v/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-12--tensorflow-crash-course-part-v/index","title":"Tensorflow2 Crash Course - Part V","description":"Mong Kok, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-13--tensorflow-model-zoo/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-13--tensorflow-model-zoo/index","title":"Tensorflow2 Model Zoo","description":"Mong Kok, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-14--tensorflow-model-for-tfjs/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-14--tensorflow-model-for-tfjs/index","title":"Tensorflow.js React App","description":"Mong Kok, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-15--facebook-prophet-introduction/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-15--facebook-prophet-introduction/index","title":"Introduction into FB Prophet","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-12-01--opencv-with-images/index":{"id":"IoT-and-Machine-Learning/ML/2021-12-01--opencv-with-images/index","title":"OpenCV and Images","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-12-02--opencv-with-videos/index":{"id":"IoT-and-Machine-Learning/ML/2021-12-02--opencv-with-videos/index","title":"OpenCV, Streams and Video Files","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-12-03--opencv-image-operations/index":{"id":"IoT-and-Machine-Learning/ML/2021-12-03--opencv-image-operations/index","title":"OpenCV Image Operations","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-12-04--opencv-image-objects/index":{"id":"IoT-and-Machine-Learning/ML/2021-12-04--opencv-image-objects/index","title":"OpenCV Image Objects","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-12-05--opencv-face-detection/index":{"id":"IoT-and-Machine-Learning/ML/2021-12-05--opencv-face-detection/index","title":"OpenCV Face Detection and Privacy","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-12-06--opencv-object-tracking/index":{"id":"IoT-and-Machine-Learning/ML/2021-12-06--opencv-object-tracking/index","title":"OpenCV Object Tracking","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-12-07--opencv-detection-and-tracking/index":{"id":"IoT-and-Machine-Learning/ML/2021-12-07--opencv-detection-and-tracking/index","title":"OpenCV Object Detection and Tracking","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-12-08--opencv-meanshift-tracking/index":{"id":"IoT-and-Machine-Learning/ML/2021-12-08--opencv-meanshift-tracking/index","title":"OpenCV Meanshift Algorithm for Object Tracking","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-12-09--opencv-camshift-tracking/index":{"id":"IoT-and-Machine-Learning/ML/2021-12-09--opencv-camshift-tracking/index","title":"OpenCV CAMshift Algorithm for Object Tracking","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-12-10--opencv-optical-flow-tracking/index":{"id":"IoT-and-Machine-Learning/ML/2021-12-10--opencv-optical-flow-tracking/index","title":"OpenCV Optical Flow Algorithm for Object Tracking","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-02-15--yolo-app-get-data/index":{"id":"IoT-and-Machine-Learning/ML/2022-02-15--yolo-app-get-data/index","title":"Yolo App - Data Collection","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-02-16--yolo-app-tensorflow-model/index":{"id":"IoT-and-Machine-Learning/ML/2022-02-16--yolo-app-tensorflow-model/index","title":"Yolo App - Train a Model with Tensorflow","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-02-17--yolo-app-prediction-pipeline/index":{"id":"IoT-and-Machine-Learning/ML/2022-02-17--yolo-app-prediction-pipeline/index","title":"Yolo App - Pipeline Predictions","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-02-18--yolo-app-ocr/index":{"id":"IoT-and-Machine-Learning/ML/2022-02-18--yolo-app-ocr/index","title":"Yolo App - Tesseract Optical Character Recognition","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-02-19--yolo-app-flask/index":{"id":"IoT-and-Machine-Learning/ML/2022-02-19--yolo-app-flask/index","title":"Yolo App - Flask Web Application","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-02-20--yolo-app-yolov5-data-prep/index":{"id":"IoT-and-Machine-Learning/ML/2022-02-20--yolo-app-yolov5-data-prep/index","title":"Yolo App - YOLOv5 Data Preparation","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-04-01-tensorflow-audio-classifier/index":{"id":"IoT-and-Machine-Learning/ML/2022-04-01-tensorflow-audio-classifier/index","title":"Deep Audio","description":"Deep Audio Classifier with Tensorflow","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-04-02-pytorch-super-resolution/index":{"id":"IoT-and-Machine-Learning/ML/2022-04-02-pytorch-super-resolution/index","title":"Super Resolution with ESRGAN","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-04-03-pytorch-real-super-resolution/index":{"id":"IoT-and-Machine-Learning/ML/2022-04-03-pytorch-real-super-resolution/index","title":"Super Resolution with Real-ESRGAN","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-04-04-pytorch-face-restoration/index":{"id":"IoT-and-Machine-Learning/ML/2022-04-04-pytorch-face-restoration/index","title":"Face Restoration with GFPGAN","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-11-27-containerized-deep-learning/index":{"id":"IoT-and-Machine-Learning/ML/2022-11-27-containerized-deep-learning/index","title":"Deep Docker on Arch","description":"The NVIDIA Container Toolkit run GPU accelerated Docker containers","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-10-tf-breast-cancer-classification-part1/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-10-tf-breast-cancer-classification-part1/index","title":"Breast Histopathology Image Segmentation Part 1","description":"Data Inspection and Pre-processing","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part2/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part2/index","title":"Breast Histopathology Image Segmentation Part 2","description":"Balancing skewed datasets and data augmentation","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part3/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part3/index","title":"Breast Histopathology Image Segmentation Part 3","description":"Model creation based on a pre-trained and a custom model","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part4/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part4/index","title":"Breast Histopathology Image Segmentation Part 4","description":"Train our model to fit the dataset","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-12-tf-breast-cancer-classification-part5/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-12-tf-breast-cancer-classification-part5/index","title":"Breast Histopathology Image Segmentation Part 5","description":"Evaluate the performance of your trained model","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-12-tf-breast-cancer-classification-part6/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-12-tf-breast-cancer-classification-part6/index","title":"Breast Histopathology Image Segmentation Part 6","description":"Running Predictions","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-16-tf-cifar/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-16-tf-cifar/index","title":"Tensorflow Image Classification","description":"The CIFAR-10 is a labeled subset of the 80 million tiny images dataset that can be directly downloaded using Keras.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-18-tf-transfer-learning/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-18-tf-transfer-learning/index","title":"Tensorflow Transfer Learning","description":"Transfer learning is a machine learning technique in which intelligence from a base ann is being transferred to a new network as a starting point.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-19-tf-hub/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-19-tf-hub/index","title":"Tensorflow Hub","description":"TensorFlow Hub is a repository of trained machine learning models.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-20-tf-representation/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-20-tf-representation/index","title":"Tensorflow Representation Learning","description":"Build a Denoising Autoencoder in Tensorflow using the mnist Digits Dataset","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-21-tf-deepdream/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-21-tf-deepdream/index","title":"Tensorflow Deep Dream","description":"DeepDream is an experiment that visualizes the patterns learned by a neural network.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-21-tf-downsampling/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-21-tf-downsampling/index","title":"Tensorflow Downsampling","description":"Using Representation Learning to Downsample Images","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-28-tf-gan-image-generator/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-28-tf-gan-image-generator/index","title":"Deep Convolutional Generative Adversarial Network","description":"Use Adversarial Networks to generate Images","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-31-tf-rnn-text-generation/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-31-tf-rnn-text-generation/index","title":"Recurrent Neural Networks","description":"Generate text using a character-based RNN","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-01-05-yolov7/index":{"id":"IoT-and-Machine-Learning/ML/2023-01-05-yolov7/index","title":"YOLOv7 Introduction","description":"Getting started with object detection in YOLOv7","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-01-08-depth-vision-midas/index":{"id":"IoT-and-Machine-Learning/ML/2023-01-08-depth-vision-midas/index","title":"MiDaS Depth Vision","description":"MiDaS computes relative inverse depth from a single image.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-01-10-yolov7_custom_data/index":{"id":"IoT-and-Machine-Learning/ML/2023-01-10-yolov7_custom_data/index","title":"YOLOv7 Training with Custom Data","description":"Use your Custom Dataset to train YOLOv7","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-01-13-yolov7_data_conversion/index":{"id":"IoT-and-Machine-Learning/ML/2023-01-13-yolov7_data_conversion/index","title":"YOLOv7 Label Conversion","description":"Transferring PASCAL VOC labels to the YOLO format","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-01-14-yolov7_to_tensorflow/index":{"id":"IoT-and-Machine-Learning/ML/2023-01-14-yolov7_to_tensorflow/index","title":"YOLOv7 to Tensorflow","description":"Converting a YOLOv7 PyTorch Model to Tensorflow (Lite)","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-01-28-opencv-coin-counter/index":{"id":"IoT-and-Machine-Learning/ML/2023-01-28-opencv-coin-counter/index","title":"OpenCV Count My Money","description":"Differentiate Objects based on their Contour and Colour with cvZone.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-01-30-predicting-wine-quality/index":{"id":"IoT-and-Machine-Learning/ML/2023-01-30-predicting-wine-quality/index","title":"SciKit Wine Quality","description":"Predicting Wine Quality with Several Classification Techniques using SciKit Learn.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-14-keras-introduction/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-14-keras-introduction/index","title":"Keras for Tensorflow - An (Re)Introduction 2023","description":"Keras is built on top of TensorFlow 2 and provides an API designed for human beings.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-15-as-one-yolo-object-tracking/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-15-as-one-yolo-object-tracking/index","title":"YOLOv8 with AS-One","description":"A Modular Libary for YOLO Object Detection and Object Tracking.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-16-keras-introduction-ann/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-16-keras-introduction-ann/index","title":"Keras for Tensorflow - Artificial Neural Networks","description":"Building a deep neural network using the MNIST dataset.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-17-keras-introduction-cnn/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-17-keras-introduction-cnn/index","title":"Keras for Tensorflow - Convolutional Neural Networks","description":"Convolutional Neural Networks are ideal for Computer Vision tasks.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-18-keras-introduction-rnn/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-18-keras-introduction-rnn/index","title":"Keras for Tensorflow - Recurrent Neural Networks","description":"Recurrent Neural Networks are widely used to work with sequence data such as time series or natural language.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-18-keras-introduction-vgg16/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-18-keras-introduction-vgg16/index","title":"Keras for Tensorflow - VGG16 Network Architecture","description":"An example convolutional neural network is the VGG16 Architecture.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-19-tensorflow-introduction/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-19-tensorflow-introduction/index","title":"Tensorflow 2 - An (Re)Introduction 2023","description":"Tensor Constants, Variables and Attributes","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-21-tensorflow-tensors-2/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-21-tensorflow-tensors-2/index","title":"Tensorflow 2 - An (Re)Introduction 2023 (2)","description":"Tensor Indexing, Expanding and Manipulations","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-22-tensorflow-tensors-3/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-22-tensorflow-tensors-3/index","title":"Tensorflow 2 - An (Re)Introduction 2023 (3)","description":"Matrix multiplications, Squeeze, One-hot and Numpy","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-23-tensorflow-neural-network-regression/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-23-tensorflow-neural-network-regression/index","title":"Tensorflow 2 - Neural Network Regression","description":"Building a Regression Model and Improving it\'s Performance","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-24-tensorflow-neural-network-regression-evaluation/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-24-tensorflow-neural-network-regression-evaluation/index","title":"Tensorflow 2 - Neural Network Regression","description":"Visualizing Models and Evaluating Model Performance","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-25-tensorflow-neural-network-regression-experiments/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-25-tensorflow-neural-network-regression-experiments/index","title":"Tensorflow 2 - Neural Network Regression","description":"Optimizing model performance","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-26-tensorflow-neural-network-regression-data-preprocessing/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-26-tensorflow-neural-network-regression-data-preprocessing/index","title":"Tensorflow 2 - Neural Network Regression","description":"Data pre-processing - normalization and feature-scaling","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-26-tensorflow-neural-network-regression-real-dataset/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-26-tensorflow-neural-network-regression-real-dataset/index","title":"Tensorflow 2 - Neural Network Regression","description":"Working with the medical cost dataset","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-27-tensorflow-neural-network-classification/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-27-tensorflow-neural-network-classification/index","title":"Tensorflow 2 - Neural Network Classification","description":"Working with a non-linear dataset and activation functions","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-28-tensorflow-neural-network-classification-model-evaluation/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-28-tensorflow-neural-network-classification-model-evaluation/index","title":"Tensorflow 2 - Neural Network Classification","description":"Model Evaluation and Performance Improvement","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-03-02-tensorflow-neural-network-multi-classification/2023-02-28-tensorflow-neural-network-classification-model-evaluation/index":{"id":"IoT-and-Machine-Learning/ML/2023-03-02-tensorflow-neural-network-multi-classification/2023-02-28-tensorflow-neural-network-classification-model-evaluation/index","title":"Tensorflow 2 - Neural Network Classification","description":"Model Evaluation and Performance Improvement","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-03-02-tensorflow-neural-network-multi-classification/index":{"id":"IoT-and-Machine-Learning/ML/2023-03-02-tensorflow-neural-network-multi-classification/index","title":"Tensorflow 2 - Neural Network Classifications","description":"Multiclass Classification Problems","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-03-03-tensorflow-convolutional-neural-network-binary-classifications/index":{"id":"IoT-and-Machine-Learning/ML/2023-03-03-tensorflow-convolutional-neural-network-binary-classifications/index","title":"Tensorflow 2 - Convolutional Neural Networks","description":"Computer Vision for Binary Image Classifications","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-03-05-tensorflow-convolutional-neural-network-multiclass-classifications/index":{"id":"IoT-and-Machine-Learning/ML/2023-03-05-tensorflow-convolutional-neural-network-multiclass-classifications/index","title":"Tensorflow 2 - Convolutional Neural Networks","description":"Computer Vision for Multiclass Image Classifications","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-03-06-tensorflow-transfer-learning-feature-extraction/index":{"id":"IoT-and-Machine-Learning/ML/2023-03-06-tensorflow-transfer-learning-feature-extraction/index","title":"Tensorflow 2 - Transfer Learning","description":"Using a Pre-trained Model to Extract Features","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-03-11-tensorflow-transfer-learning-fine-tuning/index":{"id":"IoT-and-Machine-Learning/ML/2023-03-11-tensorflow-transfer-learning-fine-tuning/index","title":"Tensorflow 2 - Transfer Learning","description":"Fine-tuning Pre-trained Models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-03-16-tensorflow-transfer-learning-scaling/index":{"id":"IoT-and-Machine-Learning/ML/2023-03-16-tensorflow-transfer-learning-scaling/index","title":"Tensorflow 2 - Transfer Learning","description":"Scale a pre-trained model to fit your needs","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-03-24-tensorflow-unsupervised-learning-autoencoders/index":{"id":"IoT-and-Machine-Learning/ML/2023-03-24-tensorflow-unsupervised-learning-autoencoders/index","title":"Tensorflow 2 - Unsupervised Learning","description":"Use Autoencoders to Reduce Dimensionality and Feature Discovery","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-03-26-tensorflow-unsupervised-learning-autoencoders-super-resolution/index":{"id":"IoT-and-Machine-Learning/ML/2023-03-26-tensorflow-unsupervised-learning-autoencoders-super-resolution/index","title":"Tensorflow 2 - Unsupervised Learning","description":"Use Autoencoders to Increase Feature Resolution","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-03-26-tensorflow-unsupervised-learning-generative-adversial-networks/index":{"id":"IoT-and-Machine-Learning/ML/2023-03-26-tensorflow-unsupervised-learning-generative-adversial-networks/index","title":"Tensorflow 2 - Unsupervised Learning","description":"Generative Adverserial Networks for Image Data Generation","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-04-09-principal-component-analysis/index":{"id":"IoT-and-Machine-Learning/ML/2023-04-09-principal-component-analysis/index","title":"Principal Component Analysis (PCA)","description":"To aid visualization of the structure of a dataset, the dimension must be reduced in some way.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-04-11-locally-linear-embedding/index":{"id":"IoT-and-Machine-Learning/ML/2023-04-11-locally-linear-embedding/index","title":"Locally Linear Embedding (LLE)","description":"LLE is an unsupervised learning algorithm that computes low dimensional, neighborhood preserving embeddings of high dimensional data.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-04-12-tstochastic-neighbor-embedding/index":{"id":"IoT-and-Machine-Learning/ML/2023-04-12-tstochastic-neighbor-embedding/index","title":"tStochastic Neighbor Embedding (t-SNE)","description":"t-distributed stochastic neighbor embedding (t-SNE) is a statistical method for visualizing high-dimensional data by giving each datapoint a location in a two or three-dimensional map.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-04-13-fisher-discriminant-analysis/index":{"id":"IoT-and-Machine-Learning/ML/2023-04-13-fisher-discriminant-analysis/index","title":"Fisher Linear Discriminant Analysis (LDA)","description":"LDA is a widely used dimensionality reduction technique built on Fisher\u2019s linear discriminant.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-04-13-isometric-mapping/index":{"id":"IoT-and-Machine-Learning/ML/2023-04-13-isometric-mapping/index","title":"Isometric Mapping (ISOMAP)","description":"Non-linear dimensionality reduction through Isometric Mapping","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-04-13-multi-dimensional-scaling/index":{"id":"IoT-and-Machine-Learning/ML/2023-04-13-multi-dimensional-scaling/index","title":"Multidimensional Scaling (MDS)","description":"Multidimensional Scaling is a family of statistical methods that focus on creating mappings of items based on distance.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-04-14-manifold-learning-for-image-segmentation/index":{"id":"IoT-and-Machine-Learning/ML/2023-04-14-manifold-learning-for-image-segmentation/index","title":"Dimensionality Reduction for Image Segmentation","description":"Use Manifold Learning and the LD Analysis to Visualize Image Datasets.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-04-16-deep-3d-image-segmentation/index":{"id":"IoT-and-Machine-Learning/ML/2023-04-16-deep-3d-image-segmentation/index","title":"3D Image Classification","description":"Learn how to train a 3D convolutional neural network (3D CNN) to predict presence of pneumonia.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-04-19-tensorflow-natural-language-processing/index":{"id":"IoT-and-Machine-Learning/ML/2023-04-19-tensorflow-natural-language-processing/index","title":"(Re) Introduction to Tensorflow Natural Language Processing","description":"Using Tensorflow to classify Disaster Tweet.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-06-26-autogluon-transit-photometry-dataset/index":{"id":"IoT-and-Machine-Learning/ML/2023-06-26-autogluon-transit-photometry-dataset/index","title":"Detection of Exoplanets using Transit Photometry","description":"Exoplanets are the planets found outside of the solar system. When a planet passes in front of a star, the brightness of that star as observed by us becomes dimmer depending on the size of the planet. The data we observe will show a dip in flux if a planet is transiting the star we are observing.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-06-27-sql-in-data-science-basics/index":{"id":"IoT-and-Machine-Learning/ML/2023-06-27-sql-in-data-science-basics/index","title":"SQL in Data Science - The Basics using Python","description":"Cheat Sheet using Psycopg2 to interact with PostgreSQL Databases","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-06-30-sql-in-data-science-advanced/index":{"id":"IoT-and-Machine-Learning/ML/2023-06-30-sql-in-data-science-advanced/index","title":"SQL in Data Science - Slightly more Advanced Queries","description":"Cheat Sheet using Psycopg2 to interact with PostgreSQL Databases","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-07-02-sql-in-data-science-ml/index":{"id":"IoT-and-Machine-Learning/ML/2023-07-02-sql-in-data-science-ml/index","title":"SQL in Data Science - Machine Learning","description":"Cheat Sheet using Psycopg2 to interact with PostgreSQL Databases","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-07-21-introduction-to-pytorch-caffe2/index":{"id":"IoT-and-Machine-Learning/ML/2023-07-21-introduction-to-pytorch-caffe2/index","title":"Introduction to Caffe2","description":"Deep Learning Framework with Python for flexibility and C++ for speed.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-07-25-onnx-models/index":{"id":"IoT-and-Machine-Learning/ML/2023-07-25-onnx-models/index","title":"Working with ONNX Models","description":"Open Neural Network Exchange (ONNX)","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-07-26-tensorflow-human-emotion-detector/index":{"id":"IoT-and-Machine-Learning/ML/2023-07-26-tensorflow-human-emotion-detector/index","title":"Human Emotion Detection with Tensorflow","description":"Create a TF Image Classifier that can distinguish between different human emotion based on portrait photos.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-07-27-tensorflow-vision-transformer/index":{"id":"IoT-and-Machine-Learning/ML/2023-07-27-tensorflow-vision-transformer/index","title":"Tensorflow VITs","description":"ViT models apply the Transformer architecture with self-attention to sequences of image patches, without using convolution layers.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-01-tensorflow-i-know-flowers-intro/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-01-tensorflow-i-know-flowers-intro/index","title":"Tensorflow Image Classifier - Introduction","description":"Blue print image classifier using Tensorflow and Keras Applications pre-trained models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-02-tensorflow-i-know-flowers-preprocessing/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-02-tensorflow-i-know-flowers-preprocessing/index","title":"Tensorflow Image Classifier - Data Pre-processing","description":"Blue print image classifier using Tensorflow and Keras Applications pre-trained models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-03-tensorflow-i-know-flowers-deit/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-03-tensorflow-i-know-flowers-deit/index","title":"Tensorflow Image Classifier - Data-efficient Image Transformers","description":"Blue print image classifier using Tensorflow and Keras Applications pre-trained models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-04-tensorflow-i-know-flowers-efficientnetv2b0/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-04-tensorflow-i-know-flowers-efficientnetv2b0/index","title":"Tensorflow Image Classifier - EfficientNetV2B0","description":"Blue print image classifier using Tensorflow and Keras Applications pre-trained models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-05-tensorflow-i-know-flowers-efficientnetv2s/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-05-tensorflow-i-know-flowers-efficientnetv2s/index","title":"Tensorflow Image Classifier - EfficientNetV2S","description":"Blue print image classifier using Tensorflow and Keras Applications pre-trained models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-06-tensorflow-i-know-flowers-inceptionv3/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-06-tensorflow-i-know-flowers-inceptionv3/index","title":"Tensorflow Image Classifier - InceptionV3","description":"Blue print image classifier using Tensorflow and Keras Applications pre-trained models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-07-tensorflow-i-know-flowers-mobilenetv2/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-07-tensorflow-i-know-flowers-mobilenetv2/index","title":"Tensorflow Image Classifier - MobileNetV2","description":"Blue print image classifier using Tensorflow and Keras Applications pre-trained models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-08-tensorflow-i-know-flowers-mobilenetv3large/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-08-tensorflow-i-know-flowers-mobilenetv3large/index","title":"Tensorflow Image Classifier - MobileNetV3Large","description":"Blue print image classifier using Tensorflow and Keras Applications pre-trained models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-09-tensorflow-i-know-flowers-mobilenetv3small/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-09-tensorflow-i-know-flowers-mobilenetv3small/index","title":"Tensorflow Image Classifier - MobileNetV3Small","description":"Blue print image classifier using Tensorflow and Keras Applications pre-trained models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-10-tensorflow-i-know-flowers-nasnetmobile/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-10-tensorflow-i-know-flowers-nasnetmobile/index","title":"Tensorflow Image Classifier - NASNetMobile","description":"Blue print image classifier using Tensorflow and Keras Applications pre-trained models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-11-tensorflow-i-know-flowers-vit/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-11-tensorflow-i-know-flowers-vit/index","title":"Tensorflow Image Classifier - ViT","description":"Blue print image classifier using Tensorflow and Keras Applications pre-trained models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-12-tensorflow-i-know-flowers-xception/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-12-tensorflow-i-know-flowers-xception/index","title":"Tensorflow Image Classifier - Xception","description":"Blue print image classifier using Tensorflow and Keras Applications pre-trained models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-13-tensorflow-i-know-flowers-model-eval/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-13-tensorflow-i-know-flowers-model-eval/index","title":"Tensorflow Image Classifier - Model Evaluation","description":"Blue print image classifier using Tensorflow and Keras Applications pre-trained models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-21--pytorch-development-in-docker/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-21--pytorch-development-in-docker/index","title":"Containerized PyTorch Dev Workflow","description":"Develop your PyTorch models inside the official PyTorch container image.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-27--image-segmentation-with-pytorch/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-27--image-segmentation-with-pytorch/index","title":"Image Segmentation with PyTorch","description":"Food item segmentation from images of the Tray Food Segmentation dataset","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-28--semantic-segmentation-detectron2-model-zoo/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-28--semantic-segmentation-detectron2-model-zoo/index","title":"Image Segmentation with PyTorch (RCNN)","description":"Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-29--semantic-segmentation-detectron2-model-zoo-faster-rcnn/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-29--semantic-segmentation-detectron2-model-zoo-faster-rcnn/index","title":"Image Segmentation with PyTorch (Faster RCNN)","description":"Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-30--instance_segmentation_detectron2_model_zoo_mask_rcnn/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-30--instance_segmentation_detectron2_model_zoo_mask_rcnn/index","title":"Instance Segmentation with PyTorch (Mask RCNN)","description":"Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-31--semantic_segmentation_detectron2_openimages_dataset/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-31--semantic_segmentation_detectron2_openimages_dataset/index","title":"Detectron Object Detection with OpenImages Dataset (WIP)","description":"Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-09-01--yolo-i-know-flowers/index":{"id":"IoT-and-Machine-Learning/ML/2023-09-01--yolo-i-know-flowers/index","title":"YOLOv8 Image Classifier","description":"I-know-flowers Image Classifier YOLOv8 Model Comparison","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-09-05--semantic-segmentation-in-opencv/index":{"id":"IoT-and-Machine-Learning/ML/2023-09-05--semantic-segmentation-in-opencv/index","title":"Using Tensorflow Models in OpenCV","description":"Using Tensorflow models in OpenCV to perform semantic segmentations on images using the Mask-RCNN model.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-09-10--model-explainability-shap/index":{"id":"IoT-and-Machine-Learning/ML/2023-09-10--model-explainability-shap/index","title":"Scikit-Learn ML Model Explainability","description":"SHAP is a game theoretic approach to explain the output of any machine learning model.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-09-15--yolo8-tracking-and-ocr/index":{"id":"IoT-and-Machine-Learning/ML/2023-09-15--yolo8-tracking-and-ocr/index","title":"YOLOv8 License Plate Detection","description":"Using the YOLOv8 Object Tracker in Combination with EasyOCR","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-09-17--yolo8-nightshift/index":{"id":"IoT-and-Machine-Learning/ML/2023-09-17--yolo8-nightshift/index","title":"YOLOv8 Nightshift","description":"Training an YOLOv8 Object Tracker for Day/Night Cameras","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-09-19--cvat-computer-vision-annotation-tool/index":{"id":"IoT-and-Machine-Learning/ML/2023-09-19--cvat-computer-vision-annotation-tool/index","title":"Computer Vision Annotation Tool (CVAT) Introduction","description":"CVAT supports supervised machine learning tasks pertaining to object detection, image classification, image segmentation and 3D data annotation.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-09-21--cvat-automatic-annotation/index":{"id":"IoT-and-Machine-Learning/ML/2023-09-21--cvat-automatic-annotation/index","title":"CVAT Semi-automatic and Automatic Annotation","description":"CVAT supports supervised machine learning tasks pertaining to object detection, image classification, image segmentation and 3D data annotation.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-09-23--yolo8-listen/index":{"id":"IoT-and-Machine-Learning/ML/2023-09-23--yolo8-listen/index","title":"Audio Classification with Computer Vision","description":"Training an YOLOv8 Classifier to Identify Audio Files","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-10-01--delib-face-detection/index":{"id":"IoT-and-Machine-Learning/ML/2023-10-01--delib-face-detection/index","title":"DLIB Face Recognition","description":"Detect faces in images and compare their feature vector to known entities","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.f9d28ac4.js b/assets/js/935f2afb.f9d28ac4.js new file mode 100644 index 0000000000..e57823550e --- /dev/null +++ b/assets/js/935f2afb.f9d28ac4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmikes_dev_notebook=self.webpackChunkmikes_dev_notebook||[]).push([[80053],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Introduction","href":"/docs/intro","docId":"intro","unlisted":false},{"type":"category","label":"Development","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Javascript","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Typescript for Web APIs","href":"/docs/Development/Javascript/2023-12-31-js-typescript-rest/2023-12-31","docId":"Development/Javascript/2023-12-31-js-typescript-rest/index","unlisted":false},{"type":"link","label":"Redux Toolkit and RTK Query","href":"/docs/Development/Javascript/2023-12-25-redux-toolkit/2023-12-25","docId":"Development/Javascript/2023-12-25-redux-toolkit/index","unlisted":false},{"type":"link","label":"Building a Native IP Camera Client in React","href":"/docs/Development/Javascript/2023-12-24-react-query-tauri-iot-ctrl/2023-12-21","docId":"Development/Javascript/2023-12-24-react-query-tauri-iot-ctrl/index","unlisted":false},{"type":"link","label":"Building a Native Elasticsearch Client in React","href":"/docs/Development/Javascript/2023-12-21-react-query-tauri-elasticsearch/2023-12-21","docId":"Development/Javascript/2023-12-21-react-query-tauri-elasticsearch/index","unlisted":false},{"type":"link","label":"Tanstack React Query AsyncState Management","href":"/docs/Development/Javascript/2023-12-20-react-query-typescript/2023-12-20","docId":"Development/Javascript/2023-12-20-react-query-typescript/index","unlisted":false},{"type":"link","label":"React Query AsyncState Management","href":"/docs/Development/Javascript/2023-12-19-react-query-typescript/2023-12-19","docId":"Development/Javascript/2023-12-19-react-query-typescript/index","unlisted":false},{"type":"link","label":"Redux Toolkit Github API","href":"/docs/Development/Javascript/2023-12-18-reactjs-typescript-redux-toolkit/2023-12-18","docId":"Development/Javascript/2023-12-18-reactjs-typescript-redux-toolkit/index","unlisted":false},{"type":"link","label":"React Hooks Typescript","href":"/docs/Development/Javascript/2023-12-16-reactjs-hooks-typescript/2023-12-16","docId":"Development/Javascript/2023-12-16-reactjs-hooks-typescript/index","unlisted":false},{"type":"link","label":"Simple Redux","href":"/docs/Development/Javascript/2023-12-15-reactjs-typescript-redux/2023-12-15","docId":"Development/Javascript/2023-12-15-reactjs-typescript-redux/index","unlisted":false},{"type":"link","label":"React.js with Typescript 2023","href":"/docs/Development/Javascript/2023-12-14-reactjs-typescript-2023/2023-12-14","docId":"Development/Javascript/2023-12-14-reactjs-typescript-2023/index","unlisted":false},{"type":"link","label":"Typescript DOM Webpack","href":"/docs/Development/Javascript/2023-06-13-typescript-dom-webpack/2023-06-13","docId":"Development/Javascript/2023-06-13-typescript-dom-webpack/index","unlisted":false},{"type":"link","label":"Typescript DOM","href":"/docs/Development/Javascript/2023-06-13-typescript-dom/2023-06-13","docId":"Development/Javascript/2023-06-13-typescript-dom/index","unlisted":false},{"type":"link","label":"Typescript Design Pattern","href":"/docs/Development/Javascript/2023-06-12-typescript-pattern/2023-06-12","docId":"Development/Javascript/2023-06-12-typescript-pattern/index","unlisted":false},{"type":"link","label":"Typescript 2023","href":"/docs/Development/Javascript/2023-06-12-typescript-2023/2023-06-12","docId":"Development/Javascript/2023-06-12-typescript-2023/index","unlisted":false},{"type":"link","label":"Node / Express with Typescript - (Re)Introduction 2023","href":"/docs/Development/Javascript/2023-06-04-nodejs-typescript-sql/2023-06-04","docId":"Development/Javascript/2023-06-04-nodejs-typescript-sql/index","unlisted":false},{"type":"link","label":"React.js 2023 - A (Re)Introduction","href":"/docs/Development/Javascript/2023-04-01-reactjs-2023/2023-04-01","docId":"Development/Javascript/2023-04-01-reactjs-2023/index","unlisted":false},{"type":"link","label":"MeiLi Search for your Gatsby.js Blog","href":"/docs/Development/Javascript/2023-02-13-gatsby-meili-search-starter/2023-02-13","docId":"Development/Javascript/2023-02-13-gatsby-meili-search-starter/index","unlisted":false},{"type":"link","label":"React Frontend for MeiLi Search","href":"/docs/Development/Javascript/2023-02-12-react-meili-search-starter/2023-02-12","docId":"Development/Javascript/2023-02-12-react-meili-search-starter/index","unlisted":false},{"type":"link","label":"Reactive Search Starter","href":"/docs/Development/Javascript/2022-12-29-reactive-search-starter/2022-12-29","docId":"Development/Javascript/2022-12-29-reactive-search-starter/index","unlisted":false},{"type":"link","label":"11ty Static Site Generator","href":"/docs/Development/Javascript/2022-12-11-11ty-starter/2022-12-11","docId":"Development/Javascript/2022-12-11-11ty-starter/index","unlisted":false},{"type":"link","label":"TypeScript 2.0 in React 19 (2023)","href":"/docs/Development/Javascript/2022-11-29-react-typescript-intro-2023/2022-11-29","docId":"Development/Javascript/2022-11-29-react-typescript-intro-2023/index","unlisted":false},{"type":"link","label":"Web3.js Blockchain Application","href":"/docs/Development/Javascript/2022-11-19-web3-javascript-app/2022-11-19","docId":"Development/Javascript/2022-11-19-web3-javascript-app/index","unlisted":false},{"type":"link","label":"WebRTC Introduction - Interactive Connectivity Establishment","href":"/docs/Development/Javascript/2022-11-10-webrtc-introduction-video-chat-part2/2022-11-10","docId":"Development/Javascript/2022-11-10-webrtc-introduction-video-chat-part2/index","unlisted":false},{"type":"link","label":"WebRTC Introduction - Client Side Signalling","href":"/docs/Development/Javascript/2022-10-30-webrtc-introduction-video-chat-part1/2022-10-30","docId":"Development/Javascript/2022-10-30-webrtc-introduction-video-chat-part1/index","unlisted":false},{"type":"link","label":"WebRTC Introduction - Realtime Chat","href":"/docs/Development/Javascript/2022-10-29-webrtc-introduction-realtime-chat/2022-10-29","docId":"Development/Javascript/2022-10-29-webrtc-introduction-realtime-chat/index","unlisted":false},{"type":"link","label":"Docusaurus Introduction","href":"/docs/Development/Javascript/2022-07-01-docusaurus-introduction/2022-07-01","docId":"Development/Javascript/2022-07-01-docusaurus-introduction/index","unlisted":false},{"type":"link","label":"Working with JSON APIs","href":"/docs/Development/Javascript/2022-03-01--json-apis-training/2022-03-01","docId":"Development/Javascript/2022-03-01--json-apis-training/index","unlisted":false},{"type":"link","label":"Reconnecting Websockets","href":"/docs/Development/Javascript/2021-09-10--websocket-recconects/2021-09-10","docId":"Development/Javascript/2021-09-10--websocket-recconects/index","unlisted":false},{"type":"link","label":"Convert Alerts into Toasts","href":"/docs/Development/Javascript/2021-09-10--notifications-alerts-as-toast/2021-09-10","docId":"Development/Javascript/2021-09-10--notifications-alerts-as-toast/index","unlisted":false},{"type":"link","label":"NGINX as a Proxy for Websockets","href":"/docs/Development/Javascript/2021-09-09--websocket-NGINX/2021-09-09","docId":"Development/Javascript/2021-09-09--websocket-NGINX/index","unlisted":false},{"type":"link","label":"HAProxy Loadbalancing and Websockets","href":"/docs/Development/Javascript/2021-09-09--websocket-HAproxy/2021-09-09","docId":"Development/Javascript/2021-09-09--websocket-HAproxy/index","unlisted":false},{"type":"link","label":"HTML Video over Websockets","href":"/docs/Development/Javascript/2021-09-08--websockets-html-video/2021-09-08","docId":"Development/Javascript/2021-09-08--websockets-html-video/index","unlisted":false},{"type":"link","label":"Introduction to Websockets","href":"/docs/Development/Javascript/2021-09-07--intro-to-websockets/2021-09-07","docId":"Development/Javascript/2021-09-07--intro-to-websockets/index","unlisted":false},{"type":"link","label":"React Dashboard for MQTT","href":"/docs/Development/Javascript/2021-06-04--mqtt-dashboard-react/2021-06-04","docId":"Development/Javascript/2021-06-04--mqtt-dashboard-react/index","unlisted":false},{"type":"link","label":"Mosquitto MQTT Cheat Sheet","href":"/docs/Development/Javascript/2021-06-02--mqtt-cheat-sheet/2021-06-02","docId":"Development/Javascript/2021-06-02--mqtt-cheat-sheet/index","unlisted":false},{"type":"link","label":"MQTT Webfrontend with React.js","href":"/docs/Development/Javascript/2021-06-01--mqtt-with-reactjs/2021-06-01","docId":"Development/Javascript/2021-06-01--mqtt-with-reactjs/index","unlisted":false},{"type":"link","label":"Carbon Design System in React.js - Part III","href":"/docs/Development/Javascript/2021-05-12-carbon-design-react-part3/2021-05-12","docId":"Development/Javascript/2021-05-12-carbon-design-react-part3/index","unlisted":false},{"type":"link","label":"Carbon Design System in React.js - Part II","href":"/docs/Development/Javascript/2021-05-11-carbon-design-react-part2/2021-05-11","docId":"Development/Javascript/2021-05-11-carbon-design-react-part2/index","unlisted":false},{"type":"link","label":"Carbon Design System in React.js - Part I","href":"/docs/Development/Javascript/2021-05-10-carbon-design-react/2021-05-10","docId":"Development/Javascript/2021-05-10-carbon-design-react/index","unlisted":false},{"type":"link","label":"Electron@13 and Create-React-App","href":"/docs/Development/Javascript/2021-05-09-electron13-and-react/2021-05-09","docId":"Development/Javascript/2021-05-09-electron13-and-react/index","unlisted":false},{"type":"link","label":"Electron@13 as a Gatsby.js Wrapper","href":"/docs/Development/Javascript/2021-05-08-electron13-gatsby-wrapper/2021-05-08","docId":"Development/Javascript/2021-05-08-electron13-gatsby-wrapper/index","unlisted":false},{"type":"link","label":"Electron for Cross Platform Applications","href":"/docs/Development/Javascript/2021-05-07-electron-cross-platform-apps/2021-05-07","docId":"Development/Javascript/2021-05-07-electron-cross-platform-apps/index","unlisted":false},{"type":"link","label":"Next.js in 2021","href":"/docs/Development/Javascript/2021-02-14-next-js-2021/2021-02-14","docId":"Development/Javascript/2021-02-14-next-js-2021/index","unlisted":false},{"type":"link","label":"Web traffic redirection with Node and Express on CentOS8","href":"/docs/Development/Javascript/2020-01-12--node-express-redirect-server/2020-01-12","docId":"Development/Javascript/2020-01-12--node-express-redirect-server/index","unlisted":false},{"type":"link","label":"Building a MQTT Interface","href":"/docs/Development/Javascript/2019-08-02--building-an-mqtt-interface/2019-08-02","docId":"Development/Javascript/2019-08-02--building-an-mqtt-interface/index","unlisted":false},{"type":"link","label":"Server Rendering with React and React Router","href":"/docs/Development/Javascript/2018-01-17--server-side-render-react-router/2018-01-17","docId":"Development/Javascript/2018-01-17--server-side-render-react-router/index","unlisted":false},{"type":"link","label":"react-transition-group","href":"/docs/Development/Javascript/2018-01-15--react-transition-group-demo/2018-01-15","docId":"Development/Javascript/2018-01-15--react-transition-group-demo/index","unlisted":false},{"type":"link","label":"Gatsby Material UI Starter","href":"/docs/Development/Javascript/2018-01-07--gatsby-material-ui-starter/2018-01-07","docId":"Development/Javascript/2018-01-07--gatsby-material-ui-starter/index","unlisted":false},{"type":"link","label":"Gatsby.js with Bootstrap 4","href":"/docs/Development/Javascript/2017-12-17--gatsby-reactstrap/2017-12-17","docId":"Development/Javascript/2017-12-17--gatsby-reactstrap/index","unlisted":false},{"type":"link","label":"Gatsby.js Knowledgebase","href":"/docs/Development/Javascript/2017-12-14--gatsby-wiki/2017-12-14","docId":"Development/Javascript/2017-12-14--gatsby-wiki/index","unlisted":false},{"type":"link","label":"Next.js Server Side Rendering","href":"/docs/Development/Javascript/2017-12-09--next-start/2017-12-09","docId":"Development/Javascript/2017-12-09--next-start/index","unlisted":false},{"type":"link","label":"React Router 4","href":"/docs/Development/Javascript/2017-12-07--react-router-4/2017-12-07","docId":"Development/Javascript/2017-12-07--react-router-4/index","unlisted":false},{"type":"link","label":"React under the Hood","href":"/docs/Development/Javascript/2017-09-03--react-under-the-hood/2017-09-03","docId":"Development/Javascript/2017-09-03--react-under-the-hood/index","unlisted":false},{"type":"link","label":"create-react-app and Material-UI","href":"/docs/Development/Javascript/2017-08-21--reactive-material/2017-08-21","docId":"Development/Javascript/2017-08-21--reactive-material/index","unlisted":false},{"type":"link","label":"Gatsby Blog Starter","href":"/docs/Development/Javascript/2017-08-15--gatsby-blog-starter/2017-08-15","docId":"Development/Javascript/2017-08-15--gatsby-blog-starter/index","unlisted":false},{"type":"link","label":"Google Analytics in AMP","href":"/docs/Development/Javascript/2017-08-07--google-analytics-amp/2017-08-07","docId":"Development/Javascript/2017-08-07--google-analytics-amp/index","unlisted":false},{"type":"link","label":"React TODO List","href":"/docs/Development/Javascript/2017-07-24--obligatory-react-todo-list/2017-07-24","docId":"Development/Javascript/2017-07-24--obligatory-react-todo-list/index","unlisted":false},{"type":"link","label":"Food Caloric Table App","href":"/docs/Development/Javascript/2017-07-22--caloric-burn/2017-07-22","docId":"Development/Javascript/2017-07-22--caloric-burn/index","unlisted":false},{"type":"link","label":"Random Password Generator","href":"/docs/Development/Javascript/2017-07-04--random-password-generator/2017-07-04","docId":"Development/Javascript/2017-07-04--random-password-generator/index","unlisted":false},{"type":"link","label":"Node Express Static","href":"/docs/Development/Javascript/2016-08-11--node-express-static-wiki/2016-08-11","docId":"Development/Javascript/2016-08-11--node-express-static-wiki/index","unlisted":false},{"type":"link","label":"Node/Express with MongoDB","href":"/docs/Development/Javascript/2016-06-01--node-express-mongodb/2016-06-01","docId":"Development/Javascript/2016-06-01--node-express-mongodb/index","unlisted":false},{"type":"link","label":"JavaScript and Getting Started with APIs and AJAX","href":"/docs/Development/Javascript/2016-05-27--javascript-apis-and-ajax/2016-05-27","docId":"Development/Javascript/2016-05-27--javascript-apis-and-ajax/index","unlisted":false},{"type":"link","label":"React-Live & Code example","href":"/docs/Development/Javascript/2010-01-05--markdown-live-code/2010-01-05","docId":"Development/Javascript/2010-01-05--markdown-live-code/index","unlisted":false},{"type":"link","label":"Markdown Cheatsheet","href":"/docs/Development/Javascript/2010-01-01--mdx/2010-01-01","docId":"Development/Javascript/2010-01-01--mdx/index","unlisted":false}],"href":"/docs/category/javascript"},{"type":"category","label":"Python","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"OpenCV & SciPy and Scikit Image Cheat Sheet","href":"/docs/Development/Python/2023-08-14-python-scikit-image-opencv/2023-08-14","docId":"Development/Python/2023-08-14-python-scikit-image-opencv/index","unlisted":false},{"type":"link","label":"Introduction to Scikit-Image","href":"/docs/Development/Python/2023-07-09-python-scikit-image-intro/2023-07-09","docId":"Development/Python/2023-07-09-python-scikit-image-intro/index","unlisted":false},{"type":"link","label":"Supervised Learning with Scikit-Learn","href":"/docs/Development/Python/2023-05-28-telco-churn-cohort-study/2023-05-28","docId":"Development/Python/2023-05-28-telco-churn-cohort-study/index","unlisted":false},{"type":"link","label":"SciKit-Learn Cheat Sheet","href":"/docs/Development/Python/2023-05-20-python-sklearn-cheat-sheet/2023-05-20","docId":"Development/Python/2023-05-20-python-sklearn-cheat-sheet/index","unlisted":false},{"type":"link","label":"Python Asserts in Data Science Cheat Sheet","href":"/docs/Development/Python/2023-05-18-python-asserts/2023-05-18","docId":"Development/Python/2023-05-18-python-asserts/index","unlisted":false},{"type":"link","label":"FiveThirtyEight Fandango Dataset","href":"/docs/Development/Python/2023-05-17-fandango-ratings-controversy/2023-05-17","docId":"Development/Python/2023-05-17-fandango-ratings-controversy/index","unlisted":false},{"type":"link","label":"Seaborn to Explore the CC Churn Dataset","href":"/docs/Development/Python/2023-05-16-seaborn-cc-churn-vis/2023-05-16","docId":"Development/Python/2023-05-16-seaborn-cc-churn-vis/index","unlisted":false},{"type":"link","label":"Plotly & Seaborn to Explore Text Dataset","href":"/docs/Development/Python/2023-05-14-visualizing-text-datasets/2023-05-14","docId":"Development/Python/2023-05-14-visualizing-text-datasets/index","unlisted":false},{"type":"link","label":"Seaborn Titanic Dataset Exploration","href":"/docs/Development/Python/2023-05-12-matplotlib-seaborn-titanic-dataset/2023-05-12","docId":"Development/Python/2023-05-12-matplotlib-seaborn-titanic-dataset/index","unlisted":false},{"type":"link","label":"Plotly COVID19 Dataset Exploration","href":"/docs/Development/Python/2023-05-10-plotly-COVID19-dataset/2023-05-10","docId":"Development/Python/2023-05-10-plotly-COVID19-dataset/index","unlisted":false},{"type":"link","label":"Seaborn Cheat Sheet 2023","href":"/docs/Development/Python/2023-05-07-python-seaborn-cheat-sheet/2023-05-07","docId":"Development/Python/2023-05-07-python-seaborn-cheat-sheet/index","unlisted":false},{"type":"link","label":"A little bit of SciPy...","href":"/docs/Development/Python/2023-05-07-python-scipy-introduction/2023-05-07","docId":"Development/Python/2023-05-07-python-scipy-introduction/index","unlisted":false},{"type":"link","label":"Matplotlib Pyplot Cheat Sheet 2023","href":"/docs/Development/Python/2023-05-03-python-matplotlib-cheat-sheet/2023-05-03","docId":"Development/Python/2023-05-03-python-matplotlib-cheat-sheet/index","unlisted":false},{"type":"link","label":"Pandas Cheat Sheet 2023","href":"/docs/Development/Python/2023-04-24-python-pandas-cheat-sheet/2023-04-24","docId":"Development/Python/2023-04-24-python-pandas-cheat-sheet/index","unlisted":false},{"type":"link","label":"Python 3.11 New Features","href":"/docs/Development/Python/2023-01-16-python-3-11-features/2023-01-16","docId":"Development/Python/2023-01-16-python-3-11-features/index","unlisted":false},{"type":"link","label":"Pipenv - Welcome NPM","href":"/docs/Development/Python/2022-12-11-pipenv/2022-12-11","docId":"Development/Python/2022-12-11-pipenv/index","unlisted":false},{"type":"link","label":"Python - Natural Language Processing","href":"/docs/Development/Python/2022-10-22-python-nlp/2022-10-22","docId":"Development/Python/2022-10-22-python-nlp/index","unlisted":false},{"type":"link","label":"Python - Build a REST API","href":"/docs/Development/Python/2022-10-15-python-rest-server/2022-10-15","docId":"Development/Python/2022-10-15-python-rest-server/index","unlisted":false},{"type":"link","label":"Python - Working with the Elasticsearch REST API","href":"/docs/Development/Python/2022-10-14-python-rest-elastic/2022-10-14","docId":"Development/Python/2022-10-14-python-rest-elastic/index","unlisted":false},{"type":"link","label":"Python - Working with REST API Requests","href":"/docs/Development/Python/2022-10-13-python-rest-api/2022-10-13","docId":"Development/Python/2022-10-13-python-rest-api/index","unlisted":false},{"type":"link","label":"Python - RE","href":"/docs/Development/Python/2022-10-12-python-regular-expressions/2022-10-12","docId":"Development/Python/2022-10-12-python-regular-expressions/index","unlisted":false},{"type":"link","label":"Python - The Filesystem","href":"/docs/Development/Python/2022-10-10-python-filesystem/2022-10-10","docId":"Development/Python/2022-10-10-python-filesystem/index","unlisted":false},{"type":"link","label":"Python - Flask Frontend to generate Elasticsearch Docs from Sitemaps","href":"/docs/Development/Python/2022-10-09-python-flask-elasticsearch/2022-10-09","docId":"Development/Python/2022-10-09-python-flask-elasticsearch/index","unlisted":false},{"type":"link","label":"Python - PyQt Desktop App","href":"/docs/Development/Python/2022-10-08-python-desktop-app/2022-10-08","docId":"Development/Python/2022-10-08-python-desktop-app/index","unlisted":false},{"type":"link","label":"Python - Deploying a Web App with Flask","href":"/docs/Development/Python/2022-10-08-python-flask-app/2022-10-08","docId":"Development/Python/2022-10-08-python-flask-app/index","unlisted":false},{"type":"link","label":"Python - Build an Elasticsearch Index for your Docusaurus Blog","href":"/docs/Development/Python/2022-10-07-python-docusaurus-elasticsearch/2022-10-07","docId":"Development/Python/2022-10-07-python-docusaurus-elasticsearch/index","unlisted":false},{"type":"link","label":"Python - Minify Text for Elasticsearch","href":"/docs/Development/Python/2022-10-06-python-minify-text/2022-10-06","docId":"Development/Python/2022-10-06-python-minify-text/index","unlisted":false},{"type":"link","label":"Python - Text Processing with","href":"/docs/Development/Python/2022-10-05-python-text-processing/2022-10-05","docId":"Development/Python/2022-10-05-python-text-processing/index","unlisted":false},{"type":"link","label":"Python - Video Processing with OpenCV","href":"/docs/Development/Python/2022-09-17-python-video-processing/2022-09-17","docId":"Development/Python/2022-09-17-python-video-processing/index","unlisted":false},{"type":"link","label":"Web Scraping Essentials with Python","href":"/docs/Development/Python/2022-06-27-python-web-scraping/2022-06-27","docId":"Development/Python/2022-06-27-python-web-scraping/index","unlisted":false},{"type":"link","label":"Introduction to PyScript","href":"/docs/Development/Python/2022-06-01-python-pyscript/2022-06-01","docId":"Development/Python/2022-06-01-python-pyscript/index","unlisted":false},{"type":"link","label":"Getting started with Python Part II","href":"/docs/Development/Python/2017-12-13--getting-started-with-python-part-ii/2017-12-13","docId":"Development/Python/2017-12-13--getting-started-with-python-part-ii/index","unlisted":false},{"type":"link","label":"Getting started with Python","href":"/docs/Development/Python/2017-12-11--getting-started-with-python/2017-12-11","docId":"Development/Python/2017-12-11--getting-started-with-python/index","unlisted":false},{"type":"link","label":"Python Network Logger","href":"/docs/Development/Python/2017-12-17--python-ssh-logger/2017-12-17","docId":"Development/Python/2017-12-17--python-ssh-logger/index","unlisted":false}],"href":"/docs/category/python"},{"type":"category","label":"Go","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Go Data Structures","href":"/docs/Development/Go/2022-12-27-go-data-structures/2022-12-27","docId":"Development/Go/2022-12-27-go-data-structures/index","unlisted":false},{"type":"link","label":"Go Bubbles","href":"/docs/Development/Go/2022-12-27-go-bubbles/2022-12-27","docId":"Development/Go/2022-12-27-go-bubbles/index","unlisted":false},{"type":"link","label":"Go WebAssembly","href":"/docs/Development/Go/2022-12-26-go-webassembly/2022-12-26","docId":"Development/Go/2022-12-26-go-webassembly/index","unlisted":false},{"type":"link","label":"Building a NTP/S Timeserver Client in Go with Gitlab CI","href":"/docs/Development/Go/2022-11-11-go-nts-client-ci/2022-11-11","docId":"Development/Go/2022-11-11-go-nts-client-ci/index","unlisted":false},{"type":"link","label":"Go OAuth2 Server","href":"/docs/Development/Go/2022-10-15-go-oauth2-server/2022-10-15","docId":"Development/Go/2022-10-15-go-oauth2-server/index","unlisted":false},{"type":"link","label":"Go Build!","href":"/docs/Development/Go/2022-10-05-go-reducing-binary-size/2022-10-05","docId":"Development/Go/2022-10-05-go-reducing-binary-size/index","unlisted":false},{"type":"link","label":"Build a NTP/S Timeserver Client in Go","href":"/docs/Development/Go/2022-10-04-go-ntp-client/2022-10-04","docId":"Development/Go/2022-10-04-go-ntp-client/index","unlisted":false},{"type":"link","label":"Wails - Build desktop apps using Go & React","href":"/docs/Development/Go/2022-06-15-wails-go-react/2022-06-15","docId":"Development/Go/2022-06-15-wails-go-react/index","unlisted":false},{"type":"link","label":"goFTP","href":"/docs/Development/Go/2021-10-08--goftp/2021-10-08","docId":"Development/Go/2021-10-08--goftp/index","unlisted":false},{"type":"link","label":"Getting started with Go and React - React & REST API\'s","href":"/docs/Development/Go/2021-09-24--golang-react-starter-part-iv/2021-09-24","docId":"Development/Go/2021-09-24--golang-react-starter-part-iv/index","unlisted":false},{"type":"link","label":"Getting started with Go and React - PostgreSQL","href":"/docs/Development/Go/2021-09-23--golang-react-starter-part-iii/2021-09-23","docId":"Development/Go/2021-09-23--golang-react-starter-part-iii/index","unlisted":false},{"type":"link","label":"Getting started with Go and React - API Routes","href":"/docs/Development/Go/2021-09-22--golang-react-starter-part-ii/2021-09-22","docId":"Development/Go/2021-09-22--golang-react-starter-part-ii/index","unlisted":false},{"type":"link","label":"Getting started with Go and React - Webservice, Routing and Status Log","href":"/docs/Development/Go/2021-09-21--golang-react-starter-part-i/2021-09-21","docId":"Development/Go/2021-09-21--golang-react-starter-part-i/index","unlisted":false},{"type":"link","label":"Golang Refresher :: url & http","href":"/docs/Development/Go/2021-09-11--golang-refresher-network/2021-09-11","docId":"Development/Go/2021-09-11--golang-refresher-network/index","unlisted":false},{"type":"link","label":"Golang Refresher :: math & os","href":"/docs/Development/Go/2021-09-11--golang-refresher-math-os/2021-09-11","docId":"Development/Go/2021-09-11--golang-refresher-math-os/index","unlisted":false},{"type":"link","label":"Golang Refresher :: fmt & strings","href":"/docs/Development/Go/2021-09-11--golang-refresher-fmt-strings/2021-09-11","docId":"Development/Go/2021-09-11--golang-refresher-fmt-strings/index","unlisted":false},{"type":"link","label":"Go Websockets","href":"/docs/Development/Go/2021-09-10--go-websockets/2021-09-10","docId":"Development/Go/2021-09-10--go-websockets/index","unlisted":false},{"type":"link","label":"Paho MQTT Client with Golang","href":"/docs/Development/Go/2021-06-03--mqtt-with-golang/2021-06-03","docId":"Development/Go/2021-06-03--mqtt-with-golang/index","unlisted":false},{"type":"link","label":"GoFiber Container for your Gatsby Build","href":"/docs/Development/Go/2021-02-21-gofiber-container-gatsby/2021-02-21","docId":"Development/Go/2021-02-21-gofiber-container-gatsby/index","unlisted":false}],"href":"/docs/category/go"},{"type":"category","label":"Graphs","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"GraphQL Queries and Mutations","href":"/docs/Development/Graphs/2020-05-05--graphql-queries-and-mutations/2020-05-05","docId":"Development/Graphs/2020-05-05--graphql-queries-and-mutations/index","unlisted":false},{"type":"link","label":"Neo4j Corona Tracing","href":"/docs/Development/Graphs/2020-05-04--neo4j-corona-tracing/2020-05-04","docId":"Development/Graphs/2020-05-04--neo4j-corona-tracing/index","unlisted":false},{"type":"link","label":"Neo4j Cypher Cheat Sheet","href":"/docs/Development/Graphs/2020-05-03--neo4j-cheat-sheet/2020-05-03","docId":"Development/Graphs/2020-05-03--neo4j-cheat-sheet/index","unlisted":false},{"type":"link","label":"Neo4j Movie Graph","href":"/docs/Development/Graphs/2020-05-02--neo4j-movie-graph/2020-05-02","docId":"Development/Graphs/2020-05-02--neo4j-movie-graph/index","unlisted":false},{"type":"link","label":"Getting to Know Neo4j","href":"/docs/Development/Graphs/2020-05-01--getting-to-know-neo4j/2020-05-01","docId":"Development/Graphs/2020-05-01--getting-to-know-neo4j/index","unlisted":false}],"href":"/docs/category/graphs"},{"type":"category","label":"React Native","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"React Native Reducer","href":"/docs/Development/ReactNative/2022-05-06-react-native-reducer/2022-05-06","docId":"Development/ReactNative/2022-05-06-react-native-reducer/index","unlisted":false},{"type":"link","label":"React Native Context & Hooks","href":"/docs/Development/ReactNative/2022-05-05-react-native-context-hooks/2022-05-05","docId":"Development/ReactNative/2022-05-05-react-native-context-hooks/index","unlisted":false},{"type":"link","label":"React Native Hooks","href":"/docs/Development/ReactNative/2022-05-04-react-native-hooks/2022-05-04","docId":"Development/ReactNative/2022-05-04-react-native-hooks/index","unlisted":false},{"type":"link","label":"React Native Context API","href":"/docs/Development/ReactNative/2022-05-03-react-native-contextapi/2022-05-03","docId":"Development/ReactNative/2022-05-03-react-native-contextapi/index","unlisted":false},{"type":"link","label":"React Native Navigation","href":"/docs/Development/ReactNative/2022-05-02-react-native-navigation/2022-05-02","docId":"Development/ReactNative/2022-05-02-react-native-navigation/index","unlisted":false},{"type":"link","label":"React Native Hello World","href":"/docs/Development/ReactNative/2022-05-01-react-native-hello-world/2022-05-01","docId":"Development/ReactNative/2022-05-01-react-native-hello-world/index","unlisted":false}],"href":"/docs/category/react-native"},{"type":"category","label":"Magento","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Adding Google Analytics to Magento 2","href":"/docs/Development/Magento/2021-07-28--magento2-google-analytics-universal/2021-07-28","docId":"Development/Magento/2021-07-28--magento2-google-analytics-universal/index","unlisted":false},{"type":"link","label":"Installing Google Analytics g4 Tag in your Gatsby and Discourse Webservice","href":"/docs/Development/Magento/2020-12-07-google-analytics-g4-tag/2020-12-07","docId":"Development/Magento/2020-12-07-google-analytics-g4-tag/index","unlisted":false},{"type":"link","label":"Adding Google Analytics to Magento 2","href":"/docs/Development/Magento/2019-09-21--magento2-google-analytics/2019-09-21","docId":"Development/Magento/2019-09-21--magento2-google-analytics/index","unlisted":false},{"type":"link","label":"Docker Compose install Magento 2","href":"/docs/Development/Magento/2019-09-21--magento2-docker-install/2019-09-21","docId":"Development/Magento/2019-09-21--magento2-docker-install/index","unlisted":false},{"type":"link","label":"Magento 2 UI Components","href":"/docs/Development/Magento/2019-09-20--magento2-ui-components/2019-09-20","docId":"Development/Magento/2019-09-20--magento2-ui-components/index","unlisted":false},{"type":"link","label":"Creating Magento 2 Console Commands","href":"/docs/Development/Magento/2019-09-19--magento2-console-commands/2019-09-19","docId":"Development/Magento/2019-09-19--magento2-console-commands/index","unlisted":false},{"type":"link","label":"Creating Magento 2 Cron Jobs","href":"/docs/Development/Magento/2019-09-18--magento2-cronjobs/2019-09-18","docId":"Development/Magento/2019-09-18--magento2-cronjobs/index","unlisted":false},{"type":"link","label":"Creating Magento 2 Modules","href":"/docs/Development/Magento/2019-09-17--magento2-modules/2019-09-17","docId":"Development/Magento/2019-09-17--magento2-modules/index","unlisted":false},{"type":"link","label":"Working with SQL Dumps","href":"/docs/Development/Magento/2019-09-16--working-with-sql-dumps/2019-09-16","docId":"Development/Magento/2019-09-16--working-with-sql-dumps/index","unlisted":false},{"type":"link","label":"Updating a Magento Project from PHP v7.0 to v7.3","href":"/docs/Development/Magento/2019-09-15--updating-from-php70-to-php72/2019-09-15","docId":"Development/Magento/2019-09-15--updating-from-php70-to-php72/index","unlisted":false},{"type":"link","label":"Magento 2 Manual Theme Installation","href":"/docs/Development/Magento/2019-09-14--magento-and-themes/2019-09-14","docId":"Development/Magento/2019-09-14--magento-and-themes/index","unlisted":false},{"type":"link","label":"Magento 2 and Varnish 6","href":"/docs/Development/Magento/2019-09-13--magento-and-varnish/2019-09-13","docId":"Development/Magento/2019-09-13--magento-and-varnish/index","unlisted":false},{"type":"link","label":"Magento 2 and Elasticsearch","href":"/docs/Development/Magento/2019-09-12--magento-and-elasticsearch/2019-09-12","docId":"Development/Magento/2019-09-12--magento-and-elasticsearch/index","unlisted":false},{"type":"link","label":"Magento 2 Installation with NGINX on Debian Buster","href":"/docs/Development/Magento/2019-09-11--magento-on-debian-with-nginx/2019-09-11","docId":"Development/Magento/2019-09-11--magento-on-debian-with-nginx/index","unlisted":false},{"type":"link","label":"Magento 2 Dev Environment with Docker Compose","href":"/docs/Development/Magento/2019-09-10--magento2-docker-on-ubuntu/2019-09-10","docId":"Development/Magento/2019-09-10--magento2-docker-on-ubuntu/index","unlisted":false},{"type":"link","label":"Magento 2 Docker Development","href":"/docs/Development/Magento/2019-09-07--magento-development-in-docker/2019-09-07","docId":"Development/Magento/2019-09-07--magento-development-in-docker/index","unlisted":false}],"href":"/docs/category/magento"},{"type":"category","label":"Misc","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Pandoc Universal Markup Converter","href":"/docs/Development/Misc/2023-01-20-pandoc-markup-converter/2023-01-20","docId":"Development/Misc/2023-01-20-pandoc-markup-converter/index","unlisted":false},{"type":"link","label":"Unreal Engine Coding Standards","href":"/docs/Development/Misc/2017-06-17--unreal-engine-coding-standards/2017-06-17","docId":"Development/Misc/2017-06-17--unreal-engine-coding-standards/index","unlisted":false},{"type":"link","label":"Frogfoot Checklists","href":"/docs/Development/Misc/1980-01-02--dcs-su-25-t/1980-01-02","docId":"Development/Misc/1980-01-02--dcs-su-25-t/index","unlisted":false},{"type":"link","label":"Tomcat Checklists","href":"/docs/Development/Misc/1980-01-01--dcs-f-14-tomcat/1980-01-01","docId":"Development/Misc/1980-01-01--dcs-f-14-tomcat/index","unlisted":false}],"href":"/docs/category/misc"}],"href":"/docs/category/development"},{"type":"category","label":"DevOps","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Hashicorp","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Opentofu vs Hashicorp Terraform","href":"/docs/DevOps/Hashicorp/2023-12-23-opentofu-vs-terraform/2023-12-22","docId":"DevOps/Hashicorp/2023-12-23-opentofu-vs-terraform/index","unlisted":false},{"type":"link","label":"Hashicorp Terraform - Docker Provider 2024","href":"/docs/DevOps/Hashicorp/2023-12-22-hashicorp-terraform-docker-2024/2023-12-22","docId":"DevOps/Hashicorp/2023-12-22-hashicorp-terraform-docker-2024/index","unlisted":false},{"type":"link","label":"Hashicorp Terraform - Docker Provider 2023","href":"/docs/DevOps/Hashicorp/2023-10-22-hashicorp-terraform-docker-2023/2023-10-22","docId":"DevOps/Hashicorp/2023-10-22-hashicorp-terraform-docker-2023/index","unlisted":false},{"type":"link","label":"Hashicorp Vault - Certificate Authority","href":"/docs/DevOps/Hashicorp/2022-12-07-hashicorp-vault-ca-certificates/2022-12-07","docId":"DevOps/Hashicorp/2022-12-07-hashicorp-vault-ca-certificates/index","unlisted":false},{"type":"link","label":"Hashicorp Consul - Vault Cert Management Part 3","href":"/docs/DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part3/2022-12-05","docId":"DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part3/index","unlisted":false},{"type":"link","label":"Hashicorp Consul - Vault Cert Management Part 2","href":"/docs/DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part2/2022-12-05","docId":"DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part2/index","unlisted":false},{"type":"link","label":"Hashicorp Consul - Vault Cert Management Part 1","href":"/docs/DevOps/Hashicorp/2022-12-04-hashicorp-consul-vault-certificates-part1/2022-12-04","docId":"DevOps/Hashicorp/2022-12-04-hashicorp-consul-vault-certificates-part1/index","unlisted":false},{"type":"link","label":"Hashicorp Vault - Installation 2023","href":"/docs/DevOps/Hashicorp/2022-12-03-hashicorp-vault-installation/2022-12-03","docId":"DevOps/Hashicorp/2022-12-03-hashicorp-vault-installation/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad - Working with Consul Connect","href":"/docs/DevOps/Hashicorp/2022-11-24-hashicorp-consul-connect/2022-11-24","docId":"DevOps/Hashicorp/2022-11-24-hashicorp-consul-connect/index","unlisted":false},{"type":"link","label":"Deploy Grav CMS with Hashicorp Nomad","href":"/docs/DevOps/Hashicorp/2022-11-18-hashicorp-nomad-grav/2022-11-18","docId":"DevOps/Hashicorp/2022-11-18-hashicorp-nomad-grav/index","unlisted":false},{"type":"link","label":"Deploy Mautic with Hashicorp Nomad","href":"/docs/DevOps/Hashicorp/2022-11-16-hashicorp-nomad-mautic/2022-11-16","docId":"DevOps/Hashicorp/2022-11-16-hashicorp-nomad-mautic/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad for NGINX Load-balancing","href":"/docs/DevOps/Hashicorp/2022-11-15-hashicorp-nomad-nginx-load-balancing/2022-11-15","docId":"DevOps/Hashicorp/2022-11-15-hashicorp-nomad-nginx-load-balancing/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad Secure & Balanced NTS Time Service","href":"/docs/DevOps/Hashicorp/2022-11-15-hashicorp-nomad-balanced-nts/2022-11-15","docId":"DevOps/Hashicorp/2022-11-15-hashicorp-nomad-balanced-nts/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad to Renew your TLS Certificates","href":"/docs/DevOps/Hashicorp/2022-11-12-hashicorp-nomad-certbot-renewal/2022-11-12","docId":"DevOps/Hashicorp/2022-11-12-hashicorp-nomad-certbot-renewal/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad to run periodic backups","href":"/docs/DevOps/Hashicorp/2022-11-11-hashicorp-nomad-for-borg-backups/2022-11-11","docId":"DevOps/Hashicorp/2022-11-11-hashicorp-nomad-for-borg-backups/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad to set up an OSTicket Helpdesk - Part II","href":"/docs/DevOps/Hashicorp/2022-10-25-hashicorp-nomad-for-osticket-part-ii/2022-10-25","docId":"DevOps/Hashicorp/2022-10-25-hashicorp-nomad-for-osticket-part-ii/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad - Working with Ports","href":"/docs/DevOps/Hashicorp/2022-10-23-hashicorp-nomad-ports/2022-10-23","docId":"DevOps/Hashicorp/2022-10-23-hashicorp-nomad-ports/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad - Working with Consul Connect","href":"/docs/DevOps/Hashicorp/2022-10-23-hashicorp-consul-connect/2022-10-23","docId":"DevOps/Hashicorp/2022-10-23-hashicorp-consul-connect/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad Sidecar Pattern","href":"/docs/DevOps/Hashicorp/2022-10-22-hashicorp-nomad-sidecar-pattern/2022-10-22","docId":"DevOps/Hashicorp/2022-10-22-hashicorp-nomad-sidecar-pattern/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad to set up an OSTicket Helpdesk - Part I","href":"/docs/DevOps/Hashicorp/2022-10-21-hashicorp-nomad-for-osticket-part-i/2022-10-21","docId":"DevOps/Hashicorp/2022-10-21-hashicorp-nomad-for-osticket-part-i/index","unlisted":false},{"type":"link","label":"NGINX Ingress with Nomad","href":"/docs/DevOps/Hashicorp/2022-09-24--nomad-nginx-ingress/2022-09-24","docId":"DevOps/Hashicorp/2022-09-24--nomad-nginx-ingress/index","unlisted":false},{"type":"link","label":"Secure Timeserver - Deploying a NTS Server using Hashicorp Nomad","href":"/docs/DevOps/Hashicorp/2022-09-22--nomad-nts-timeserver/2022-09-22","docId":"DevOps/Hashicorp/2022-09-22--nomad-nts-timeserver/index","unlisted":false},{"type":"link","label":"Hashicorp Waypoint with Nomad","href":"/docs/DevOps/Hashicorp/2022-06-08-hashicorp-waypoint-nomad/2022-06-09","docId":"DevOps/Hashicorp/2022-06-08-hashicorp-waypoint-nomad/index","unlisted":false},{"type":"link","label":"Hashicorp Waypoint with Docker","href":"/docs/DevOps/Hashicorp/2022-06-07-hashicorp-waypoint-docker/2022-06-07","docId":"DevOps/Hashicorp/2022-06-07-hashicorp-waypoint-docker/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad with NGINX Loadbalancer","href":"/docs/DevOps/Hashicorp/2022-05-29-hashicorp-nomad-with-nginx-loadbalancer/2022-05-29","docId":"DevOps/Hashicorp/2022-05-29-hashicorp-nomad-with-nginx-loadbalancer/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad to set up an Elasticsearch Cluster Part II","href":"/docs/DevOps/Hashicorp/2022-05-28-hashicorp-nomad-for-elastic-part-2/2022-05-28","docId":"DevOps/Hashicorp/2022-05-28-hashicorp-nomad-for-elastic-part-2/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad to set up an Elasticsearch Cluster","href":"/docs/DevOps/Hashicorp/2022-05-27-hashicorp-nomad-for-elastic/2022-05-27","docId":"DevOps/Hashicorp/2022-05-27-hashicorp-nomad-for-elastic/index","unlisted":false},{"type":"link","label":"App Deployment with Hashicorp Nomad from Gitlab Part Deux","href":"/docs/DevOps/Hashicorp/2022-05-26-hashicorp-nomad-with-gitlab-part-2/2022-05-26","docId":"DevOps/Hashicorp/2022-05-26-hashicorp-nomad-with-gitlab-part-2/index","unlisted":false},{"type":"link","label":"App Deployment with Hashicorp Nomad from Gitlab","href":"/docs/DevOps/Hashicorp/2022-05-25-hashicorp-nomad-with-gitlab/2022-05-25","docId":"DevOps/Hashicorp/2022-05-25-hashicorp-nomad-with-gitlab/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad for NGINX Web Proxies","href":"/docs/DevOps/Hashicorp/2022-05-24-hashicorp-nomad-with-nginx/2022-05-24","docId":"DevOps/Hashicorp/2022-05-24-hashicorp-nomad-with-nginx/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad with Consul II - The Reckoning","href":"/docs/DevOps/Hashicorp/2022-05-22-hashicorp-dojo-nomad-consul-part-2/2022-05-22","docId":"DevOps/Hashicorp/2022-05-22-hashicorp-dojo-nomad-consul-part-2/index","unlisted":false},{"type":"link","label":"Hashicorp Dojo Consul Refresher","href":"/docs/DevOps/Hashicorp/2022-05-21-hashicorp-dojo-consul-refresher/2022-05-21","docId":"DevOps/Hashicorp/2022-05-21-hashicorp-dojo-consul-refresher/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad with Consul Service Discovery","href":"/docs/DevOps/Hashicorp/2022-05-20-hashicorp-dojo-nomad-consul/2022-05-20","docId":"DevOps/Hashicorp/2022-05-20-hashicorp-dojo-nomad-consul/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad Access Control","href":"/docs/DevOps/Hashicorp/2022-05-19-hashicorp-dojo-nomad-access-control/2022-05-19","docId":"DevOps/Hashicorp/2022-05-19-hashicorp-dojo-nomad-access-control/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad Adding Encryption to your Cluster","href":"/docs/DevOps/Hashicorp/2022-05-18-hashicorp-dojo-nomad-adding-encryption/2022-05-18","docId":"DevOps/Hashicorp/2022-05-18-hashicorp-dojo-nomad-adding-encryption/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad Deployment","href":"/docs/DevOps/Hashicorp/2022-05-17-hashicorp-dojo-nomad-deployment/2022-05-17","docId":"DevOps/Hashicorp/2022-05-17-hashicorp-dojo-nomad-deployment/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad Dojo","href":"/docs/DevOps/Hashicorp/2022-05-16-hashicorp-dojo-nomad-starter/2022-05-16","docId":"DevOps/Hashicorp/2022-05-16-hashicorp-dojo-nomad-starter/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad Refresher","href":"/docs/DevOps/Hashicorp/2022-05-15-hashicorp-nomad-refresher/2022-05-15","docId":"DevOps/Hashicorp/2022-05-15-hashicorp-nomad-refresher/index","unlisted":false},{"type":"link","label":"Hashicorp Consul in Production","href":"/docs/DevOps/Hashicorp/2021-10-11--hashicorp-consul-in-production/2021-10-11","docId":"DevOps/Hashicorp/2021-10-11--hashicorp-consul-in-production/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad in Production","href":"/docs/DevOps/Hashicorp/2021-10-10--hashicorp-nomad-in-production/2021-10-10","docId":"DevOps/Hashicorp/2021-10-10--hashicorp-nomad-in-production/index","unlisted":false},{"type":"link","label":"Hashicorp Terraform - Providers, Variables & Attributes","href":"/docs/DevOps/Hashicorp/2021-09-06--hashicorp-terraform-providers-variables-attributes/2021-09-07","docId":"DevOps/Hashicorp/2021-09-06--hashicorp-terraform-providers-variables-attributes/index","unlisted":false},{"type":"link","label":"Hashicorp Terraform - Setup","href":"/docs/DevOps/Hashicorp/2021-09-05--hashicorp-terraform-setup/2021-09-05","docId":"DevOps/Hashicorp/2021-09-05--hashicorp-terraform-setup/index","unlisted":false},{"type":"link","label":"Hashicorp Vault - Logging","href":"/docs/DevOps/Hashicorp/2021-08-25--hashicorp-vault-logging/2021-08-25","docId":"DevOps/Hashicorp/2021-08-25--hashicorp-vault-logging/index","unlisted":false},{"type":"link","label":"Hashicorp Vault - Rest API","href":"/docs/DevOps/Hashicorp/2021-08-23--hashicorp-vault-rest-api/2021-08-23","docId":"DevOps/Hashicorp/2021-08-23--hashicorp-vault-rest-api/index","unlisted":false},{"type":"link","label":"Hashicorp Vault - ACL Policies","href":"/docs/DevOps/Hashicorp/2021-08-22--hashicorp-vault-policies/2021-08-22","docId":"DevOps/Hashicorp/2021-08-22--hashicorp-vault-policies/index","unlisted":false},{"type":"link","label":"Hashicorp Vault - Secrets & Tokens","href":"/docs/DevOps/Hashicorp/2021-08-21--hashicorp-vault-secrets-tokens/2021-08-21","docId":"DevOps/Hashicorp/2021-08-21--hashicorp-vault-secrets-tokens/index","unlisted":false},{"type":"link","label":"Hashicorp Vault - Setup","href":"/docs/DevOps/Hashicorp/2021-08-20--hashicorp-vault-setup/2021-08-20","docId":"DevOps/Hashicorp/2021-08-20--hashicorp-vault-setup/index","unlisted":false},{"type":"link","label":"Hashicorp Consul Refresher - Gossip TLS Encryption","href":"/docs/DevOps/Hashicorp/2021-08-14--hashicorp-consul-tls-encryption/2021-08-14","docId":"DevOps/Hashicorp/2021-08-14--hashicorp-consul-tls-encryption/index","unlisted":false},{"type":"link","label":"Hashicorp Consul Refresher - Access Control Lists","href":"/docs/DevOps/Hashicorp/2021-08-13--hashicorp-consul-access-control-lists/2021-08-13","docId":"DevOps/Hashicorp/2021-08-13--hashicorp-consul-access-control-lists/index","unlisted":false},{"type":"link","label":"Hashicorp Consul Refresher - Service Mesh","href":"/docs/DevOps/Hashicorp/2021-08-12--hashicorp-consul-service-mesh/2021-08-12","docId":"DevOps/Hashicorp/2021-08-12--hashicorp-consul-service-mesh/index","unlisted":false},{"type":"link","label":"Hashicorp Consul Refresher - Backups","href":"/docs/DevOps/Hashicorp/2021-08-11--hashicorp-consul-backups/2021-08-11","docId":"DevOps/Hashicorp/2021-08-11--hashicorp-consul-backups/index","unlisted":false},{"type":"link","label":"Hashicorp Consul Refresher - Key Value Store","href":"/docs/DevOps/Hashicorp/2021-08-10--hashicorp-consul-key-value-store/2021-08-10","docId":"DevOps/Hashicorp/2021-08-10--hashicorp-consul-key-value-store/index","unlisted":false},{"type":"link","label":"Hashicorp Consul Refresher - Services","href":"/docs/DevOps/Hashicorp/2021-08-09--hashicorp-consul-services/2021-08-09","docId":"DevOps/Hashicorp/2021-08-09--hashicorp-consul-services/index","unlisted":false},{"type":"link","label":"Nomad Access Control Lists","href":"/docs/DevOps/Hashicorp/2021-08-08--hashicorp-nomad-access-control-lists/2021-08-08","docId":"DevOps/Hashicorp/2021-08-08--hashicorp-nomad-access-control-lists/index","unlisted":false},{"type":"link","label":"Nomad Job Configuration","href":"/docs/DevOps/Hashicorp/2021-08-07--hashicorp-nomad-job-configuration/2021-08-07","docId":"DevOps/Hashicorp/2021-08-07--hashicorp-nomad-job-configuration/index","unlisted":false},{"type":"link","label":"Hashicorp Consul Refresher - Loadbalancing with Traefik","href":"/docs/DevOps/Hashicorp/2021-08-06--hashicorp-consul-traefik-loadbalancing/2021-08-06","docId":"DevOps/Hashicorp/2021-08-06--hashicorp-consul-traefik-loadbalancing/index","unlisted":false},{"type":"link","label":"Hashicorp Consul Refresher - Loadbalancing with Fabio","href":"/docs/DevOps/Hashicorp/2021-08-06--hashicorp-consul-fabio-loadbalancing/2021-08-06","docId":"DevOps/Hashicorp/2021-08-06--hashicorp-consul-fabio-loadbalancing/index","unlisted":false},{"type":"link","label":"Hashicorp Consul Refresher - Service Discovery","href":"/docs/DevOps/Hashicorp/2021-08-05--hashicorp-consul-service-discovery/2021-08-05","docId":"DevOps/Hashicorp/2021-08-05--hashicorp-consul-service-discovery/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad Refresher - Job Specifications","href":"/docs/DevOps/Hashicorp/2021-08-04--hashicorp-nomad-job-specifications/2021-08-04","docId":"DevOps/Hashicorp/2021-08-04--hashicorp-nomad-job-specifications/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad Refresher - Jobs","href":"/docs/DevOps/Hashicorp/2021-08-03--hashicorp-nomad-jobs/2021-08-03","docId":"DevOps/Hashicorp/2021-08-03--hashicorp-nomad-jobs/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad Refresher - Security","href":"/docs/DevOps/Hashicorp/2021-08-02--hashicorp-nomad-security/2021-08-02","docId":"DevOps/Hashicorp/2021-08-02--hashicorp-nomad-security/index","unlisted":false},{"type":"link","label":"Hashicorp Nomad Refresher - Installation","href":"/docs/DevOps/Hashicorp/2021-08-01--hashicorp-nomad-refresher/2021-08-01","docId":"DevOps/Hashicorp/2021-08-01--hashicorp-nomad-refresher/index","unlisted":false},{"type":"link","label":"HashiCorp Packer Provisioning","href":"/docs/DevOps/Hashicorp/2020-10-26--hashicorp-packer-provisioner/2020-10-26","docId":"DevOps/Hashicorp/2020-10-26--hashicorp-packer-provisioner/index","unlisted":false},{"type":"link","label":"HashiCorp Packer with Virtualbox (Autoinstall)","href":"/docs/DevOps/Hashicorp/2020-10-25--hashicorp-packer-and-virtualbox-autoinstall/2020-10-25","docId":"DevOps/Hashicorp/2020-10-25--hashicorp-packer-and-virtualbox-autoinstall/index","unlisted":false},{"type":"link","label":"HashiCorp Packer with Virtualbox (Preseed)","href":"/docs/DevOps/Hashicorp/2020-10-24--hashicorp-packer-and-virtualbox-preseed/2020-10-24","docId":"DevOps/Hashicorp/2020-10-24--hashicorp-packer-and-virtualbox-preseed/index","unlisted":false},{"type":"link","label":"HashiCorp Packer Machine Images Introduction","href":"/docs/DevOps/Hashicorp/2020-10-23--hashicorp-packer-machine-image/2020-10-23","docId":"DevOps/Hashicorp/2020-10-23--hashicorp-packer-machine-image/index","unlisted":false},{"type":"link","label":"Consul Deployment Guide","href":"/docs/DevOps/Hashicorp/2020-08-19--consul-deployment-guide/2020-08-19","docId":"DevOps/Hashicorp/2020-08-19--consul-deployment-guide/index","unlisted":false},{"type":"link","label":"Consul Service Mesh","href":"/docs/DevOps/Hashicorp/2020-08-18--consul-service-mesh/2020-08-18","docId":"DevOps/Hashicorp/2020-08-18--consul-service-mesh/index","unlisted":false},{"type":"link","label":"Joining Consul Clients","href":"/docs/DevOps/Hashicorp/2020-08-18--consul-mock-datacenter/2020-08-19","docId":"DevOps/Hashicorp/2020-08-18--consul-mock-datacenter/index","unlisted":false},{"type":"link","label":"Installing HashiCorp Consul on Ubuntu Server 20.04","href":"/docs/DevOps/Hashicorp/2020-08-17--installing-consul-ubuntu/2020-08-17","docId":"DevOps/Hashicorp/2020-08-17--installing-consul-ubuntu/index","unlisted":false},{"type":"link","label":"Nomad Server Cluster","href":"/docs/DevOps/Hashicorp/2020-08-16--nomad-cluster/2020-08-16","docId":"DevOps/Hashicorp/2020-08-16--nomad-cluster/index","unlisted":false},{"type":"link","label":"Installing HashiCorp Nomad on Ubuntu Server 20.04","href":"/docs/DevOps/Hashicorp/2020-08-15--installing-nomad-ubuntu/2020-08-15","docId":"DevOps/Hashicorp/2020-08-15--installing-nomad-ubuntu/index","unlisted":false}],"href":"/docs/category/hashicorp"},{"type":"category","label":"Zabbix","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Zabbix v6 SMART HDD and CPU Temperature Check","href":"/docs/DevOps/Zabbix/2024-03-07--zabbix-v6-hdd-cpu-temp-check/2024-03-08","docId":"DevOps/Zabbix/2024-03-07--zabbix-v6-hdd-cpu-temp-check/index","unlisted":false},{"type":"link","label":"Zabbix <3 Zimbra","href":"/docs/DevOps/Zabbix/2022-07-15-zabbix-for-zimbra/2022-07-15","docId":"DevOps/Zabbix/2022-07-15-zabbix-for-zimbra/index","unlisted":false},{"type":"link","label":"Zabbix v6 Creating triggers for Baseline monitoring and Anomaly detection","href":"/docs/DevOps/Zabbix/2022-01-16--zabbix-v6-baseline-monitoring/2022-01-16","docId":"DevOps/Zabbix/2022-01-16--zabbix-v6-baseline-monitoring/index","unlisted":false},{"type":"link","label":"Zabbix v6 SMART HDD Check","href":"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/2022-01-15","docId":"DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/index","unlisted":false},{"type":"link","label":"Zabbix v6 Slack Notifications","href":"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-slack-notifications/2022-01-15","docId":"DevOps/Zabbix/2022-01-15--zabbix-v6-slack-notifications/index","unlisted":false},{"type":"link","label":"Zabbix v6 Email Notifications","href":"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-email-notifications/2022-01-15","docId":"DevOps/Zabbix/2022-01-15--zabbix-v6-email-notifications/index","unlisted":false},{"type":"link","label":"Grafana Dashboard for Zabbix v6","href":"/docs/DevOps/Zabbix/2022-01-15--zabbix-grafana-dashboard/2022-01-15","docId":"DevOps/Zabbix/2022-01-15--zabbix-grafana-dashboard/index","unlisted":false},{"type":"link","label":"Zabbix v6 NGINX Monitor","href":"/docs/DevOps/Zabbix/2022-01-14--zabbix-nginx-monitor/2022-01-14","docId":"DevOps/Zabbix/2022-01-14--zabbix-nginx-monitor/index","unlisted":false},{"type":"link","label":"Zabbix HTTPS Certificate Monitor","href":"/docs/DevOps/Zabbix/2022-01-14--zabbix-http-cert-monitor/2022-01-14","docId":"DevOps/Zabbix/2022-01-14--zabbix-http-cert-monitor/index","unlisted":false},{"type":"link","label":"Zabbix v6 Docker Monitor","href":"/docs/DevOps/Zabbix/2022-01-14--zabbix-docker-monitor/2022-01-14","docId":"DevOps/Zabbix/2022-01-14--zabbix-docker-monitor/index","unlisted":false},{"type":"link","label":"Zabbix v6 Apache 2 Monitor","href":"/docs/DevOps/Zabbix/2022-01-14--zabbix-apache2-monitor/2022-01-14","docId":"DevOps/Zabbix/2022-01-14--zabbix-apache2-monitor/index","unlisted":false},{"type":"link","label":"Zabbix v6 Docker-Compose Setup","href":"/docs/DevOps/Zabbix/2022-01-13--zabbix-server-v6/2022-01-13","docId":"DevOps/Zabbix/2022-01-13--zabbix-server-v6/index","unlisted":false},{"type":"link","label":"Testing the Zabbix API with Postman","href":"/docs/DevOps/Zabbix/2022-01-13--zabbix-api-testing/2022-01-13","docId":"DevOps/Zabbix/2022-01-13--zabbix-api-testing/index","unlisted":false},{"type":"link","label":"Zabbix Docker-Compose Setup","href":"/docs/DevOps/Zabbix/2021-10-13--zabbix-compose-setup/2021-10-13","docId":"DevOps/Zabbix/2021-10-13--zabbix-compose-setup/index","unlisted":false},{"type":"link","label":"Zabbix Apache 2 Monitor","href":"/docs/DevOps/Zabbix/2021-01-14--zabbix-apache2-monitor/2021-10-14","docId":"DevOps/Zabbix/2021-01-14--zabbix-apache2-monitor/index","unlisted":false},{"type":"link","label":"Slack Notifications in DevOps","href":"/docs/DevOps/Zabbix/2020-09-05--slack-notifications-in-devops/2020-09-05","docId":"DevOps/Zabbix/2020-09-05--slack-notifications-in-devops/index","unlisted":false},{"type":"link","label":"Zabbix Multi-Tenant NGINX Docker Ingress","href":"/docs/DevOps/Zabbix/2020-07-20--zabbix-behind-nginx/2020-07-20","docId":"DevOps/Zabbix/2020-07-20--zabbix-behind-nginx/index","unlisted":false},{"type":"link","label":"Zabbix Company Logo","href":"/docs/DevOps/Zabbix/2020-07-19--zabbix-company-logo/2020-07-19","docId":"DevOps/Zabbix/2020-07-19--zabbix-company-logo/index","unlisted":false},{"type":"link","label":"Zabbix Email Notifications","href":"/docs/DevOps/Zabbix/2020-07-18--zabbix-email-notification/2020-07-18","docId":"DevOps/Zabbix/2020-07-18--zabbix-email-notification/index","unlisted":false},{"type":"link","label":"Zabbix Monitoring a Website","href":"/docs/DevOps/Zabbix/2020-07-17--zabbix-website-monitor/2020-07-17","docId":"DevOps/Zabbix/2020-07-17--zabbix-website-monitor/index","unlisted":false},{"type":"link","label":"Zabbix Agent","href":"/docs/DevOps/Zabbix/2020-07-16--zabbix-agent/2020-07-16","docId":"DevOps/Zabbix/2020-07-16--zabbix-agent/index","unlisted":false},{"type":"link","label":"Zabbix Docker Installation","href":"/docs/DevOps/Zabbix/2020-07-15--zabbix-docker-installation/2020-07-15","docId":"DevOps/Zabbix/2020-07-15--zabbix-docker-installation/index","unlisted":false},{"type":"link","label":"Installing Nagios4 on Ubuntu Server 20.04","href":"/docs/DevOps/Zabbix/2020-07-14--nagios-ubuntu-install/2020-07-14","docId":"DevOps/Zabbix/2020-07-14--nagios-ubuntu-install/index","unlisted":false},{"type":"link","label":"Installing Nagios4 with Docker","href":"/docs/DevOps/Zabbix/2020-07-12--nagios-docker-install/2020-07-12","docId":"DevOps/Zabbix/2020-07-12--nagios-docker-install/index","unlisted":false}],"href":"/docs/category/zabbix"},{"type":"category","label":"Server Provisioning","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Uptime Kuma","href":"/docs/DevOps/Provisioning/2024-01-18--uptime-kuma-monitoring/2024-01-18","docId":"DevOps/Provisioning/2024-01-18--uptime-kuma-monitoring/index","unlisted":false},{"type":"link","label":"ntfy Notification Service","href":"/docs/DevOps/Provisioning/2024-01-17--ntfy-notification-service/2024-01-17","docId":"DevOps/Provisioning/2024-01-17--ntfy-notification-service/index","unlisted":false},{"type":"link","label":"Provision OSticket with Docker (2023)","href":"/docs/DevOps/Provisioning/2023-03-09--os-ticket-docker-2023/2023-03-09","docId":"DevOps/Provisioning/2023-03-09--os-ticket-docker-2023/index","unlisted":false},{"type":"link","label":"Gatsby Blog with a MeiLi Search Backend","href":"/docs/DevOps/Provisioning/2023-02-13--meili-search-gatsby/2023-02-13","docId":"DevOps/Provisioning/2023-02-13--meili-search-gatsby/index","unlisted":false},{"type":"link","label":"Deploy Mautic with Docker","href":"/docs/DevOps/Provisioning/2022-11-16--mautic-docker/2022-11-16","docId":"DevOps/Provisioning/2022-11-16--mautic-docker/index","unlisted":false},{"type":"link","label":"Deploy a cPhalcon App with Docker","href":"/docs/DevOps/Provisioning/2022-11-07--cphalcon-docker/2022-11-07","docId":"DevOps/Provisioning/2022-11-07--cphalcon-docker/index","unlisted":false},{"type":"link","label":"OSticket REST API Calls","href":"/docs/DevOps/Provisioning/2022-10-27--os-ticket-rest-api/2022-10-27","docId":"DevOps/Provisioning/2022-10-27--os-ticket-rest-api/index","unlisted":false},{"type":"link","label":"Provision OSticket with Docker","href":"/docs/DevOps/Provisioning/2022-10-16--os-ticket-docker/2022-10-16","docId":"DevOps/Provisioning/2022-10-16--os-ticket-docker/index","unlisted":false},{"type":"link","label":"Bind9 Server Configuration","href":"/docs/DevOps/Provisioning/2022-01-27--bind9-configuration/2022-01-27","docId":"DevOps/Provisioning/2022-01-27--bind9-configuration/index","unlisted":false},{"type":"link","label":"DNS Over TLS Using BIND And Nginx","href":"/docs/DevOps/Provisioning/2022-01-26--dns-over-TLS-docker/2022-01-26","docId":"DevOps/Provisioning/2022-01-26--dns-over-TLS-docker/index","unlisted":false},{"type":"link","label":"Running a DNS Server with Docker","href":"/docs/DevOps/Provisioning/2022-01-25--installing-bind9-docker/2022-01-25","docId":"DevOps/Provisioning/2022-01-25--installing-bind9-docker/index","unlisted":false},{"type":"link","label":"Getting to know the BIND9 DNS Server with Docker","href":"/docs/DevOps/Provisioning/2022-01-24--getting-to-know-bind9-docker/2022-01-24","docId":"DevOps/Provisioning/2022-01-24--getting-to-know-bind9-docker/index","unlisted":false},{"type":"link","label":"Installing a Discourse Forum on Debian Bullseye with Docker","href":"/docs/DevOps/Provisioning/2022-01-23--installing-discourse-docker/2022-01-23","docId":"DevOps/Provisioning/2022-01-23--installing-discourse-docker/index","unlisted":false},{"type":"link","label":"Matrix Secure Messaging","href":"/docs/DevOps/Provisioning/2021-10-25--matrix-secure-messaging/2021-10-25","docId":"DevOps/Provisioning/2021-10-25--matrix-secure-messaging/index","unlisted":false},{"type":"link","label":"Setting up Wordpress with Traefik v2","href":"/docs/DevOps/Provisioning/2021-10-12--traefik-third-attempt/2021-10-12","docId":"DevOps/Provisioning/2021-10-12--traefik-third-attempt/index","unlisted":false},{"type":"link","label":"Traefik v2 Webproxy Configuration - 2nd Attempt","href":"/docs/DevOps/Provisioning/2021-10-12--traefik-second-attempt/2021-10-12","docId":"DevOps/Provisioning/2021-10-12--traefik-second-attempt/index","unlisted":false},{"type":"link","label":"Traefik v2 Webproxy Configuration - 1st Attempt","href":"/docs/DevOps/Provisioning/2021-10-12--traefik-configuration/2021-10-12","docId":"DevOps/Provisioning/2021-10-12--traefik-configuration/index","unlisted":false},{"type":"link","label":"PostgreSQL 14 Database Refresher :: Working with JSON & Node.js","href":"/docs/DevOps/Provisioning/2021-09-14--postgres-refresher-node-json/2021-09-14","docId":"DevOps/Provisioning/2021-09-14--postgres-refresher-node-json/index","unlisted":false},{"type":"link","label":"PostgreSQL 14 Database Refresher :: Working with GraphQL","href":"/docs/DevOps/Provisioning/2021-09-14--postgres-refresher-hasura/2021-09-14","docId":"DevOps/Provisioning/2021-09-14--postgres-refresher-hasura/index","unlisted":false},{"type":"link","label":"PostgreSQL 14 Database Refresher :: Introduction Part II","href":"/docs/DevOps/Provisioning/2021-09-13--postgres-refresher-part-ii/2021-09-13","docId":"DevOps/Provisioning/2021-09-13--postgres-refresher-part-ii/index","unlisted":false},{"type":"link","label":"PostgreSQL 14 Database Refresher :: Introduction Part I","href":"/docs/DevOps/Provisioning/2021-09-13--postgres-refresher-part-i/2021-09-13","docId":"DevOps/Provisioning/2021-09-13--postgres-refresher-part-i/index","unlisted":false},{"type":"link","label":"Loki - Promtail & Grafana for System Logs.","href":"/docs/DevOps/Provisioning/2021-04-07--loki-prometheus-grafana/2021-04-07","docId":"DevOps/Provisioning/2021-04-07--loki-prometheus-grafana/index","unlisted":false},{"type":"link","label":"ownCloud Infinite Scale Stack","href":"/docs/DevOps/Provisioning/2021-01-27-owncloud-ocis/2021-01-27","docId":"DevOps/Provisioning/2021-01-27-owncloud-ocis/index","unlisted":false},{"type":"link","label":"Node.js FTP Server","href":"/docs/DevOps/Provisioning/2021-01-23-nodejs-file-server/2021-01-23","docId":"DevOps/Provisioning/2021-01-23-nodejs-file-server/index","unlisted":false},{"type":"link","label":"File Transfer Tool in Node.js","href":"/docs/DevOps/Provisioning/2021-01-22-file-transfer-tools-in-nodejs/2021-01-22","docId":"DevOps/Provisioning/2021-01-22-file-transfer-tools-in-nodejs/index","unlisted":false},{"type":"link","label":"Installing Wazuh with Docker Compose","href":"/docs/DevOps/Provisioning/2020-10-02--installing-wazuh-in-docker/2020-10-02","docId":"DevOps/Provisioning/2020-10-02--installing-wazuh-in-docker/index","unlisted":false},{"type":"link","label":"Installing OpenProject with Docker Compose","href":"/docs/DevOps/Provisioning/2020-10-01--installing-openproject-in-docker/2020-10-01","docId":"DevOps/Provisioning/2020-10-01--installing-openproject-in-docker/index","unlisted":false},{"type":"link","label":"Docker Compose Networking","href":"/docs/DevOps/Provisioning/2020-09-02--docker-compose-networking/2020-09-02","docId":"DevOps/Provisioning/2020-09-02--docker-compose-networking/index","unlisted":false},{"type":"link","label":"Serving Static Files with Hapi and Docker","href":"/docs/DevOps/Provisioning/2020-08-29--static-server-with-hapi-and-docker/2020-08-29","docId":"DevOps/Provisioning/2020-08-29--static-server-with-hapi-and-docker/index","unlisted":false},{"type":"link","label":"Infrastructure as Code","href":"/docs/DevOps/Provisioning/2020-07-13--infrastructure-as-code/2020-07-13","docId":"DevOps/Provisioning/2020-07-13--infrastructure-as-code/index","unlisted":false},{"type":"link","label":"Developing WikiJS in Docker","href":"/docs/DevOps/Provisioning/2020-06-07--setting-up-wikijs-in-docker/2020-06-07","docId":"DevOps/Provisioning/2020-06-07--setting-up-wikijs-in-docker/index","unlisted":false},{"type":"link","label":"Vanilla Forums Installation on Debian","href":"/docs/DevOps/Provisioning/2019-09-16--installing-vanilla-forum/2019-09-16","docId":"DevOps/Provisioning/2019-09-16--installing-vanilla-forum/index","unlisted":false},{"type":"link","label":"User Login with Facebook for Discourse","href":"/docs/DevOps/Provisioning/2019-06-21--using-facebook-auth-in-discourse/2019-06-21","docId":"DevOps/Provisioning/2019-06-21--using-facebook-auth-in-discourse/index","unlisted":false},{"type":"link","label":"User Login with Github for Discourse","href":"/docs/DevOps/Provisioning/2019-06-20--using-github-auth-in-discourse/2019-06-19","docId":"DevOps/Provisioning/2019-06-20--using-github-auth-in-discourse/index","unlisted":false},{"type":"link","label":"User Login with Twitter for Discourse","href":"/docs/DevOps/Provisioning/2019-06-19--using-twitter-auth-in-discourse/2019-06-20","docId":"DevOps/Provisioning/2019-06-19--using-twitter-auth-in-discourse/index","unlisted":false},{"type":"link","label":"User Login with Google OAuth2 for Discourse","href":"/docs/DevOps/Provisioning/2019-06-18--using-oauth2-in-discourse/2019-06-18","docId":"DevOps/Provisioning/2019-06-18--using-oauth2-in-discourse/index","unlisted":false},{"type":"link","label":"Migrating from vBulletin 5 to Discourse on CentOS 8","href":"/docs/DevOps/Provisioning/2019-06-16--migrating-from-vbulletin-to-discourse-on-centos8/2019-06-16","docId":"DevOps/Provisioning/2019-06-16--migrating-from-vbulletin-to-discourse-on-centos8/index","unlisted":false},{"type":"link","label":"Installing Discourse on Centos 8","href":"/docs/DevOps/Provisioning/2019-06-15--installing-discourse-on-centos8/2019-06-15","docId":"DevOps/Provisioning/2019-06-15--installing-discourse-on-centos8/index","unlisted":false},{"type":"link","label":"Sensors Data and Grafana","href":"/docs/DevOps/Provisioning/2019-01-08--creating-a-grafana-dashboard/2019-01-08","docId":"DevOps/Provisioning/2019-01-08--creating-a-grafana-dashboard/index","unlisted":false},{"type":"link","label":"Red Hat Certified Specialist in Containerized Application Development","href":"/docs/DevOps/Provisioning/2018-12-27--red-hat-containerized-application-development-rhcs/2018-12-27","docId":"DevOps/Provisioning/2018-12-27--red-hat-containerized-application-development-rhcs/index","unlisted":false},{"type":"link","label":"Getting started with PostgreSQL in Windows 10","href":"/docs/DevOps/Provisioning/2018-11-10--postgresql-getting-started/2018-11-10","docId":"DevOps/Provisioning/2018-11-10--postgresql-getting-started/index","unlisted":false},{"type":"link","label":"How to wrap your Source Code into a Docker Container","href":"/docs/DevOps/Provisioning/2018-01-28--express-generator-dockerrized/2018-01-28","docId":"DevOps/Provisioning/2018-01-28--express-generator-dockerrized/index","unlisted":false},{"type":"link","label":"Link your Node Source Code into a Docker Container","href":"/docs/DevOps/Provisioning/2018-01-27--express-generator-app-docker/2018-01-27","docId":"DevOps/Provisioning/2018-01-27--express-generator-app-docker/index","unlisted":false},{"type":"link","label":"Run your Node.js app from a Docker Container","href":"/docs/DevOps/Provisioning/2018-01-26--node-express-docker-container/2018-01-26","docId":"DevOps/Provisioning/2018-01-26--node-express-docker-container/index","unlisted":false},{"type":"link","label":"Proxima Centauri II","href":"/docs/DevOps/Provisioning/2017-09-06--developing-software-in-china-2/2017-09-06","docId":"DevOps/Provisioning/2017-09-06--developing-software-in-china-2/index","unlisted":false},{"type":"link","label":"Proxima Centauri","href":"/docs/DevOps/Provisioning/2017-09-05--developing-software-in-china/2017-09-05","docId":"DevOps/Provisioning/2017-09-05--developing-software-in-china/index","unlisted":false},{"type":"link","label":"Using SVN Subversion on Windows 10","href":"/docs/DevOps/Provisioning/2010-02-02--svn-subversion-windows/2010-02-02","docId":"DevOps/Provisioning/2010-02-02--svn-subversion-windows/index","unlisted":false}],"href":"/docs/category/server-provisioning"},{"type":"category","label":"GitOps","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Github Passkeys","href":"/docs/DevOps/GitOps/2023-10-28-github-passkey/2023-10-28","docId":"DevOps/GitOps/2023-10-28-github-passkey/index","unlisted":false},{"type":"link","label":"Go Gitlab CI Pipeline","href":"/docs/DevOps/GitOps/2022-11-10-go-gitlab-ci-pipeline/2022-11-10","docId":"DevOps/GitOps/2022-11-10-go-gitlab-ci-pipeline/index","unlisted":false},{"type":"link","label":"Install Gitlab with Docker-Compose (Debian Bullseye)","href":"/docs/DevOps/GitOps/2022-03-16--gitlab-docker-compose-on-localhost/2022-03-16","docId":"DevOps/GitOps/2022-03-16--gitlab-docker-compose-on-localhost/index","unlisted":false},{"type":"link","label":"Gatsby Build Gitlab CI Pipeline","href":"/docs/DevOps/GitOps/2021-02-25-gatsby-build-gitlab-pipeline/2021-02-25","docId":"DevOps/GitOps/2021-02-25-gatsby-build-gitlab-pipeline/index","unlisted":false},{"type":"link","label":"Working with Gitlab","href":"/docs/DevOps/GitOps/2020-08-04--working-with-gitlab/2020-08-04","docId":"DevOps/GitOps/2020-08-04--working-with-gitlab/index","unlisted":false},{"type":"link","label":"Gitlab as Docker Registry","href":"/docs/DevOps/GitOps/2020-08-03--gitlab-as-docker-registry/2020-08-03","docId":"DevOps/GitOps/2020-08-03--gitlab-as-docker-registry/index","unlisted":false},{"type":"link","label":"Setting up Gitlab","href":"/docs/DevOps/GitOps/2020-08-02--gitlab-setup/2020-08-02","docId":"DevOps/GitOps/2020-08-02--gitlab-setup/index","unlisted":false},{"type":"link","label":"Installing Gitlab on Ubuntu Server 20.04","href":"/docs/DevOps/GitOps/2020-08-01--gitlab-install-on-ubuntu-server/2020-08-01","docId":"DevOps/GitOps/2020-08-01--gitlab-install-on-ubuntu-server/index","unlisted":false},{"type":"link","label":"Running Gitlab as Docker Registry","href":"/docs/DevOps/GitOps/2020-02-02--docker-images-in-gitlab/2020-02-02","docId":"DevOps/GitOps/2020-02-02--docker-images-in-gitlab/index","unlisted":false},{"type":"link","label":"Running Gitlab in Podman on CentOS8","href":"/docs/DevOps/GitOps/2020-02-01--gitlab-in-podman-on-centos8/2020-02-01","docId":"DevOps/GitOps/2020-02-01--gitlab-in-podman-on-centos8/index","unlisted":false}],"href":"/docs/category/gitops"},{"type":"category","label":"Kubernetes","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Kubernetes Beyond the Edge","href":"/docs/DevOps/Kubernetes/2022-11-19--k3s-air-gapped-kubernetes/2022-11-19","docId":"DevOps/Kubernetes/2022-11-19--k3s-air-gapped-kubernetes/index","unlisted":false},{"type":"link","label":"Setting up an OKD Cluster","href":"/docs/DevOps/Kubernetes/2019-03-05--first-openshift3-cluster/2019-03-05","docId":"DevOps/Kubernetes/2019-03-05--first-openshift3-cluster/index","unlisted":false},{"type":"link","label":"Red Hat OpenShift 3 Container Platform","href":"/docs/DevOps/Kubernetes/2019-03-02--installing-openshift-3-on-centos-7/2019-03-02","docId":"DevOps/Kubernetes/2019-03-02--installing-openshift-3-on-centos-7/index","unlisted":false},{"type":"link","label":"Kubernetes Traefik Ingress","href":"/docs/DevOps/Kubernetes/2019-02-01--kubernetes-traefik-ingress/2019-02-01","docId":"DevOps/Kubernetes/2019-02-01--kubernetes-traefik-ingress/index","unlisted":false},{"type":"link","label":"Kubernetes the Chinese Way","href":"/docs/DevOps/Kubernetes/2019-01-27--kubernetes-the-chinese-way/2019-01-27","docId":"DevOps/Kubernetes/2019-01-27--kubernetes-the-chinese-way/index","unlisted":false},{"type":"link","label":"Kubernetes NGINX Ingress","href":"/docs/DevOps/Kubernetes/2019-01-22--kubernetes-nginx-ingress/2019-01-22","docId":"DevOps/Kubernetes/2019-01-22--kubernetes-nginx-ingress/index","unlisted":false},{"type":"link","label":"Kubernetes NGINX https Service","href":"/docs/DevOps/Kubernetes/2019-01-21--kubernetes-nginx-https-service/2019-01-21","docId":"DevOps/Kubernetes/2019-01-21--kubernetes-nginx-https-service/index","unlisted":false},{"type":"link","label":"Kubernetes Bare Metal Ingress","href":"/docs/DevOps/Kubernetes/2019-01-21--kubernetes-bare-metal-ingress/2019-01-21","docId":"DevOps/Kubernetes/2019-01-21--kubernetes-bare-metal-ingress/index","unlisted":false},{"type":"link","label":"Kubernetes Cluster Monitoring & Logging","href":"/docs/DevOps/Kubernetes/2019-01-19--kubernetes-cluster-logging/2019-01-19","docId":"DevOps/Kubernetes/2019-01-19--kubernetes-cluster-logging/index","unlisted":false},{"type":"link","label":"Kubernetes and Microservices","href":"/docs/DevOps/Kubernetes/2019-01-17--kubernetes-and-microservices/2019-01-17","docId":"DevOps/Kubernetes/2019-01-17--kubernetes-and-microservices/index","unlisted":false},{"type":"link","label":"Creating a Kubernetes Cluster","href":"/docs/DevOps/Kubernetes/2019-01-15--creating-a-kubernetes-cluster/2019-01-15","docId":"DevOps/Kubernetes/2019-01-15--creating-a-kubernetes-cluster/index","unlisted":false},{"type":"link","label":"Managing Containers in Kubernetes","href":"/docs/DevOps/Kubernetes/2019-01-02--managing-containers-in-kubernetes/2019-01-02","docId":"DevOps/Kubernetes/2019-01-02--managing-containers-in-kubernetes/index","unlisted":false}],"href":"/docs/category/kubernetes"},{"type":"category","label":"NGINX","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"NGINX HTTP/2 Docker Ingress","href":"/docs/DevOps/NGINX/2023-06-13-nginx-docker-ingress/2023-06-13","docId":"DevOps/NGINX/2023-06-13-nginx-docker-ingress/index","unlisted":false},{"type":"link","label":"NGINX Websocket Proxy","href":"/docs/DevOps/NGINX/2022-12-08-nginx-websocket-proxy/2022-12-08","docId":"DevOps/NGINX/2022-12-08-nginx-websocket-proxy/index","unlisted":false},{"type":"link","label":"NGINX TCP/UDP Load Balancing","href":"/docs/DevOps/NGINX/2022-11-17-nginx-udp-tcp-load-balancing/2022-11-17","docId":"DevOps/NGINX/2022-11-17-nginx-udp-tcp-load-balancing/index","unlisted":false},{"type":"link","label":"NGINX Redirect based on User Agent","href":"/docs/DevOps/NGINX/2021-02-23-nginx-agent-redirect/2021-02-23","docId":"DevOps/NGINX/2021-02-23-nginx-agent-redirect/index","unlisted":false},{"type":"link","label":"Setting up Certbot Auto-renewal for NGINX (Maintenance Mode)","href":"/docs/DevOps/NGINX/2021-07-29--certbot-nginx-autorenewal/2021-07-29","docId":"DevOps/NGINX/2021-07-29--certbot-nginx-autorenewal/index","unlisted":false},{"type":"link","label":"NGINX Docker Ingress for your Gatsby Build","href":"/docs/DevOps/NGINX/2021-02-22-nginx-docker-ingress/2021-02-22","docId":"DevOps/NGINX/2021-02-22-nginx-docker-ingress/index","unlisted":false},{"type":"link","label":"NGINX Docker Multihost","href":"/docs/DevOps/NGINX/2020-08-30--nginx-docker-multihost/2020-08-30","docId":"DevOps/NGINX/2020-08-30--nginx-docker-multihost/index","unlisted":false},{"type":"link","label":"NGINX Docker with Certbot","href":"/docs/DevOps/NGINX/2020-08-28--nginx-docker-certbot/2020-08-27","docId":"DevOps/NGINX/2020-08-28--nginx-docker-certbot/index","unlisted":false},{"type":"link","label":"NGINX Docker with SSL Encryption (Self-signed)","href":"/docs/DevOps/NGINX/2020-08-27--nginx-docker-ssl-certs-self-signed/2020-08-27","docId":"DevOps/NGINX/2020-08-27--nginx-docker-ssl-certs-self-signed/index","unlisted":false},{"type":"link","label":"NGINX Docker Setup","href":"/docs/DevOps/NGINX/2020-08-26--nginx-docker-setup/2020-08-26","docId":"DevOps/NGINX/2020-08-26--nginx-docker-setup/index","unlisted":false},{"type":"link","label":"Securing Webservers - Apache and NGINX","href":"/docs/DevOps/NGINX/2020-07-29--securing-apache-and-nginx/2020-07-29","docId":"DevOps/NGINX/2020-07-29--securing-apache-and-nginx/index","unlisted":false},{"type":"link","label":"Adding an OBS Stream to your Website","href":"/docs/DevOps/NGINX/2019-11-08--nginx-rtmp-website/2019-11-08","docId":"DevOps/NGINX/2019-11-08--nginx-rtmp-website/index","unlisted":false},{"type":"link","label":"Building an RTMP Streaming Server with Podman","href":"/docs/DevOps/NGINX/2019-11-07--nginx-rtmp-streaming-container/2019-11-07","docId":"DevOps/NGINX/2019-11-07--nginx-rtmp-streaming-container/index","unlisted":false},{"type":"link","label":"NGINX Ingress with Cert-Manager","href":"/docs/DevOps/NGINX/2019-02-05--nginx-ingress-cert-manager/2019-02-05","docId":"DevOps/NGINX/2019-02-05--nginx-ingress-cert-manager/index","unlisted":false},{"type":"link","label":"NGINX, Node.js & Security","href":"/docs/DevOps/NGINX/2017-12-24--nginx-node-security/2017-12-24","docId":"DevOps/NGINX/2017-12-24--nginx-node-security/index","unlisted":false},{"type":"link","label":"Using NGINX as proxy for your nodejs apps","href":"/docs/DevOps/NGINX/2017-10-01--using-nginx-as-proxy-for-your-nodejs-apps/2017-10-01","docId":"DevOps/NGINX/2017-10-01--using-nginx-as-proxy-for-your-nodejs-apps/index","unlisted":false}],"href":"/docs/category/nginx"},{"type":"category","label":"Elasticsearch","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Introduction to MeiLi Search with Docker","href":"/docs/DevOps/Elasticsearch/2023-02-10--meili-rusty-elastic-docker/2023-02-10","docId":"DevOps/Elasticsearch/2023-02-10--meili-rusty-elastic-docker/index","unlisted":false},{"type":"link","label":"Opensearch Rest API","href":"/docs/DevOps/Elasticsearch/2022-10-12--opensearch-rest-api/2022-10-12","docId":"DevOps/Elasticsearch/2022-10-12--opensearch-rest-api/index","unlisted":false},{"type":"link","label":"Opensearch & Dashboard","href":"/docs/DevOps/Elasticsearch/2022-10-11--opensearch-docker-compose/2022-10-11","docId":"DevOps/Elasticsearch/2022-10-11--opensearch-docker-compose/index","unlisted":false},{"type":"link","label":"Elasticsearch v8, Filebeat (Docker) and Apache","href":"/docs/DevOps/Elasticsearch/2022-02-06--elasticsearch-v8-data-ingestion-apache/2022-02-06","docId":"DevOps/Elasticsearch/2022-02-06--elasticsearch-v8-data-ingestion-apache/index","unlisted":false},{"type":"link","label":"Elasticsearch & Kibana v8 Index Management","href":"/docs/DevOps/Elasticsearch/2022-02-05--kibana-v8-index-management/2022-02-05","docId":"DevOps/Elasticsearch/2022-02-05--kibana-v8-index-management/index","unlisted":false},{"type":"link","label":"Elasticsearch & Kibana v8 Search Cheat Sheet","href":"/docs/DevOps/Elasticsearch/2022-02-04--kibana-v8-search-queries/2022-02-04","docId":"DevOps/Elasticsearch/2022-02-04--kibana-v8-search-queries/index","unlisted":false},{"type":"link","label":"Elasticsearch v8, Filebeat (Docker) and NGINX","href":"/docs/DevOps/Elasticsearch/2022-02-03--elasticsearch-v8-data-ingestion/2022-02-03","docId":"DevOps/Elasticsearch/2022-02-03--elasticsearch-v8-data-ingestion/index","unlisted":false},{"type":"link","label":"Performing an Elasticsearch v8 Upgrade","href":"/docs/DevOps/Elasticsearch/2022-02-02--elasticsearch-v8-upgrade/2022-02-02","docId":"DevOps/Elasticsearch/2022-02-02--elasticsearch-v8-upgrade/index","unlisted":false},{"type":"link","label":"Elastic Filebeat and NGINX Access Logs","href":"/docs/DevOps/Elasticsearch/2021-04-01-elastic-filebeats-for-nginx-logs/2021-04-01","docId":"DevOps/Elasticsearch/2021-04-01-elastic-filebeats-for-nginx-logs/index","unlisted":false},{"type":"link","label":"Elastic Filebeat and Apache Access Logs","href":"/docs/DevOps/Elasticsearch/2021-03-31-elastic-filebeats-for-apache-logs/2021-03-31","docId":"DevOps/Elasticsearch/2021-03-31-elastic-filebeats-for-apache-logs/index","unlisted":false},{"type":"link","label":"Elasticsearch 7 and Filebeats","href":"/docs/DevOps/Elasticsearch/2021-03-30-elasticsearch7-and-filebeats/2021-03-30","docId":"DevOps/Elasticsearch/2021-03-30-elasticsearch7-and-filebeats/index","unlisted":false},{"type":"link","label":"Elasticsearch 7 Data Transformation","href":"/docs/DevOps/Elasticsearch/2021-03-29-elasticsearch7-data-transformations/2021-03-29","docId":"DevOps/Elasticsearch/2021-03-29-elasticsearch7-data-transformations/index","unlisted":false},{"type":"link","label":"Elasticsearch 7 Timeseries","href":"/docs/DevOps/Elasticsearch/2021-03-28-elasticsearch7-timeseries/2021-03-28","docId":"DevOps/Elasticsearch/2021-03-28-elasticsearch7-timeseries/index","unlisted":false},{"type":"link","label":"Elasticsearch 7 Aggregations","href":"/docs/DevOps/Elasticsearch/2021-03-27-elasticsearch7-aggregations/2021-03-27","docId":"DevOps/Elasticsearch/2021-03-27-elasticsearch7-aggregations/index","unlisted":false},{"type":"link","label":"Elasticsearch 7 to log Linux System Events","href":"/docs/DevOps/Elasticsearch/2021-03-26-elasticsearch7-for-syslog-messages/2021-03-26","docId":"DevOps/Elasticsearch/2021-03-26-elasticsearch7-for-syslog-messages/index","unlisted":false},{"type":"category","label":"Log all the searches going through Elasticsearch","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Elasticsearch Cheat Sheet","href":"/docs/DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/elasticsearch-cheat-sheet","docId":"DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/cheat-sheet","unlisted":false}],"href":"/docs/DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/2021-03-25"},{"type":"link","label":"Logstash 7 and Common Log Pattern","href":"/docs/DevOps/Elasticsearch/2021-03-24-logstash-common-grok-pattern/2021-03-24","docId":"DevOps/Elasticsearch/2021-03-24-logstash-common-grok-pattern/index","unlisted":false},{"type":"link","label":"Logstash 7 Working with Unstructured Data","href":"/docs/DevOps/Elasticsearch/2021-03-23-logstash-working-with-unstructured-data/2021-03-23","docId":"DevOps/Elasticsearch/2021-03-23-logstash-working-with-unstructured-data/index","unlisted":false},{"type":"link","label":"Logstash 7 Working with Structured Data","href":"/docs/DevOps/Elasticsearch/2021-03-22-logstash-working-with-structured-data/2021-03-22","docId":"DevOps/Elasticsearch/2021-03-22-logstash-working-with-structured-data/index","unlisted":false},{"type":"link","label":"Logstash 7 Digesting Webserver Logs","href":"/docs/DevOps/Elasticsearch/2021-03-21-logstash-digesting-data/2021-03-21","docId":"DevOps/Elasticsearch/2021-03-21-logstash-digesting-data/index","unlisted":false},{"type":"link","label":"Elasticsearch 7 Refresher","href":"/docs/DevOps/Elasticsearch/2021-03-20-elasticsearch-7-refresher/2021-03-20","docId":"DevOps/Elasticsearch/2021-03-20-elasticsearch-7-refresher/index","unlisted":false},{"type":"link","label":"Elasticsearch in Docker","href":"/docs/DevOps/Elasticsearch/2020-06-01--elasticsearch-docker/2020-06-01","docId":"DevOps/Elasticsearch/2020-06-01--elasticsearch-docker/index","unlisted":false},{"type":"link","label":"Elasticsearch 7 with Docker Compose","href":"/docs/DevOps/Elasticsearch/2019-09-08--elasticsearch_7-5_docker/2019-09-08","docId":"DevOps/Elasticsearch/2019-09-08--elasticsearch_7-5_docker/index","unlisted":false},{"type":"link","label":"Securing Elasticsearch with ReadOnlyREST","href":"/docs/DevOps/Elasticsearch/2018-01-01--securing-elasticsearch-readonlyrest/2018-01-01","docId":"DevOps/Elasticsearch/2018-01-01--securing-elasticsearch-readonlyrest/index","unlisted":false},{"type":"link","label":"Securing Elasticsearch with X-Pack","href":"/docs/DevOps/Elasticsearch/2017-12-31--securing-elasticsearch-xpack/2017-12-31","docId":"DevOps/Elasticsearch/2017-12-31--securing-elasticsearch-xpack/index","unlisted":false},{"type":"link","label":"Elasticsearch and Kibana","href":"/docs/DevOps/Elasticsearch/2017-12-26--elasticsearch-kibana/2017-12-16","docId":"DevOps/Elasticsearch/2017-12-26--elasticsearch-kibana/index","unlisted":false},{"type":"link","label":"React Search Interface","href":"/docs/DevOps/Elasticsearch/2017-12-05--elasticsearch-react-example/2017-12-05","docId":"DevOps/Elasticsearch/2017-12-05--elasticsearch-react-example/index","unlisted":false},{"type":"link","label":"Search Engine Setup and Configuration","href":"/docs/DevOps/Elasticsearch/2017-10-03--search-engine-setup-and-configuration/2017-10-03","docId":"DevOps/Elasticsearch/2017-10-03--search-engine-setup-and-configuration/index","unlisted":false}],"href":"/docs/category/elasticsearch"},{"type":"category","label":"Ansible","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Ansible Tower Practical Examples","href":"/docs/DevOps/Ansible/2021-05-02-ansible-tower-examples/2021-05-02","docId":"DevOps/Ansible/2021-05-02-ansible-tower-examples/index","unlisted":false},{"type":"link","label":"Ansible Tower Workflow Templates","href":"/docs/DevOps/Ansible/2021-05-01-ansible-tower-workflow-templates/2021-05-01","docId":"DevOps/Ansible/2021-05-01-ansible-tower-workflow-templates/index","unlisted":false},{"type":"link","label":"Slack Notifications for Ansible Tower (AWX)","href":"/docs/DevOps/Ansible/2021-04-30-ansible-tower-slack-notifications/2021-04-30","docId":"DevOps/Ansible/2021-04-30-ansible-tower-slack-notifications/index","unlisted":false},{"type":"link","label":"Setting up Ansible Tower (AWX)","href":"/docs/DevOps/Ansible/2021-04-29-ansible-tower-setup/2021-04-29","docId":"DevOps/Ansible/2021-04-29-ansible-tower-setup/index","unlisted":false},{"type":"link","label":"Installing Ansible Tower (AWX in Docker) on RHEL8","href":"/docs/DevOps/Ansible/2021-04-28-ansible-tower-rhel/2021-04-28","docId":"DevOps/Ansible/2021-04-28-ansible-tower-rhel/index","unlisted":false},{"type":"link","label":"Ansible Docker-in-Docker","href":"/docs/DevOps/Ansible/2020-11-26--ansible-dind/2020-11-26","docId":"DevOps/Ansible/2020-11-26--ansible-dind/index","unlisted":false},{"type":"link","label":"Ansible in Gitlab CI Pipelines","href":"/docs/DevOps/Ansible/2020-11-25--ansible-in-gitlab-ci/2020-11-25","docId":"DevOps/Ansible/2020-11-25--ansible-in-gitlab-ci/index","unlisted":false},{"type":"link","label":"Ansible Vault for User Logins","href":"/docs/DevOps/Ansible/2020-11-24--ansible-vault-user-login/2020-11-24","docId":"DevOps/Ansible/2020-11-24--ansible-vault-user-login/index","unlisted":false},{"type":"link","label":"Ansible Getting Serious","href":"/docs/DevOps/Ansible/2020-11-23--ansible-getting-serious/2020-11-23","docId":"DevOps/Ansible/2020-11-23--ansible-getting-serious/index","unlisted":false},{"type":"link","label":"Ansible for Docker Deployment","href":"/docs/DevOps/Ansible/2020-11-22--ansible-and-docker/2020-11-22","docId":"DevOps/Ansible/2020-11-22--ansible-and-docker/index","unlisted":false},{"type":"link","label":"Ansible Vault, Modules & Roles","href":"/docs/DevOps/Ansible/2020-11-21--ansible-modules-and-roles/2020-11-21","docId":"DevOps/Ansible/2020-11-21--ansible-modules-and-roles/index","unlisted":false},{"type":"link","label":"Ansible Copy Cheat Sheet","href":"/docs/DevOps/Ansible/2020-11-20--ansible-copy-cheat-sheet/2020-11-20","docId":"DevOps/Ansible/2020-11-20--ansible-copy-cheat-sheet/index","unlisted":false},{"type":"link","label":"Ansible Playbooks","href":"/docs/DevOps/Ansible/2020-11-19--ansible-playbooks/2020-11-19","docId":"DevOps/Ansible/2020-11-19--ansible-playbooks/index","unlisted":false},{"type":"link","label":"Setting up a Ansible on Debian Buster","href":"/docs/DevOps/Ansible/2020-11-18--ansible-on-debian-buster/2020-11-18","docId":"DevOps/Ansible/2020-11-18--ansible-on-debian-buster/index","unlisted":false}],"href":"/docs/category/ansible"},{"type":"category","label":"Server Security","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Analyzing and Decrypting TLS with Wireshark","href":"/docs/DevOps/Security/2022-09-27--wireshark-with-tls-encryption/2022-09-27","docId":"DevOps/Security/2022-09-27--wireshark-with-tls-encryption/index","unlisted":false},{"type":"link","label":"Securing Webservers - Uncomplicated Firewall","href":"/docs/DevOps/Security/2020-07-28--uncomplicated-firewall-ufw/2020-07-28","docId":"DevOps/Security/2020-07-28--uncomplicated-firewall-ufw/index","unlisted":false},{"type":"link","label":"Securing Webservers - Fail2Ban Ubuntu 20.10","href":"/docs/DevOps/Security/2020-07-28--fail2ban-ubuntu-server/2020-07-28","docId":"DevOps/Security/2020-07-28--fail2ban-ubuntu-server/index","unlisted":false},{"type":"link","label":"Securing Webservers - FirewallD Deployment on Ubuntu 20.04","href":"/docs/DevOps/Security/2020-07-27--firewalld-deployment-ubuntu/2020-07-27","docId":"DevOps/Security/2020-07-27--firewalld-deployment-ubuntu/index","unlisted":false},{"type":"link","label":"Securing Webservers - FirewallD Deployment on Debian 9","href":"/docs/DevOps/Security/2020-07-27--firewalld-deployment-debian/2020-07-27","docId":"DevOps/Security/2020-07-27--firewalld-deployment-debian/index","unlisted":false},{"type":"link","label":"Securing Webservers - FirewallD Deployment on CentOS7","href":"/docs/DevOps/Security/2020-07-27--firewalld-deployment-centos7/2020-07-27","docId":"DevOps/Security/2020-07-27--firewalld-deployment-centos7/index","unlisted":false},{"type":"link","label":"Securing Webservers - FirewallD and fail2ban","href":"/docs/DevOps/Security/2020-07-26--firewalld-configuration/2020-07-26","docId":"DevOps/Security/2020-07-26--firewalld-configuration/index","unlisted":false}],"href":"/docs/category/server-security"},{"type":"category","label":"Linux","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"vsftp on Ubuntu","href":"/docs/DevOps/Linux/2024-01-08--vsftp-ubuntu/2024-01-08","docId":"DevOps/Linux/2024-01-08--vsftp-ubuntu/index","unlisted":false},{"type":"link","label":"From NeoVim to LunarVim","href":"/docs/DevOps/Linux/2023-10-28--lunarvim/2023-10-28","docId":"DevOps/Linux/2023-10-28--lunarvim/index","unlisted":false},{"type":"link","label":"Elgato Streamdeck on Arch Linux","href":"/docs/DevOps/Linux/2023-03-29--installing-the-elgato-streamdeck/2023-03-29","docId":"DevOps/Linux/2023-03-29--installing-the-elgato-streamdeck/index","unlisted":false},{"type":"link","label":"ARM Docker","href":"/docs/DevOps/Linux/2023-02-03--installing-docker-raspberry-pi/2023-02-03","docId":"DevOps/Linux/2023-02-03--installing-docker-raspberry-pi/index","unlisted":false},{"type":"link","label":"Resistance is futile - Borg with Docker","href":"/docs/DevOps/Linux/2022-11-09--docker-borg-backupserver/2022-11-09","docId":"DevOps/Linux/2022-11-09--docker-borg-backupserver/index","unlisted":false},{"type":"link","label":"Check the Filesystem","href":"/docs/DevOps/Linux/2022-11-04--check-filesystem/2022-11-04","docId":"DevOps/Linux/2022-11-04--check-filesystem/index","unlisted":false},{"type":"link","label":"Build a Chrony NTS Client from Source","href":"/docs/DevOps/Linux/2022-09-29--build-an-chrony-nts-client-from-source/2022-09-29","docId":"DevOps/Linux/2022-09-29--build-an-chrony-nts-client-from-source/index","unlisted":false},{"type":"link","label":"NTS-Service and Authenticated Time Synchronization","href":"/docs/DevOps/Linux/2022-09-28--nts-client-setup/2022-09-28","docId":"DevOps/Linux/2022-09-28--nts-client-setup/index","unlisted":false},{"type":"link","label":"Secure Timeserver - NTP with NTS with Docker","href":"/docs/DevOps/Linux/2022-09-15--ntp-over-nts-timeserver/2022-09-21","docId":"DevOps/Linux/2022-09-15--ntp-over-nts-timeserver/index","unlisted":false},{"type":"link","label":"nmap Cheat Sheet","href":"/docs/DevOps/Linux/2022-03-10--nmap-network-scanner/2022-03-10","docId":"DevOps/Linux/2022-03-10--nmap-network-scanner/index","unlisted":false},{"type":"link","label":"Fing CLI Network Scanner on Arch Linux","href":"/docs/DevOps/Linux/2022-03-09--fing-cli-network-scanner/2022-03-09","docId":"DevOps/Linux/2022-03-09--fing-cli-network-scanner/index","unlisted":false},{"type":"link","label":"Using the AVM Fritzbox VPN on Manjaro (KDE)","href":"/docs/DevOps/Linux/2022-03-08--arch-kde-fritz-vpn/2022-03-08","docId":"DevOps/Linux/2022-03-08--arch-kde-fritz-vpn/index","unlisted":false},{"type":"link","label":"FFMPEG Cheat Sheet","href":"/docs/DevOps/Linux/2022-03-07--ffmpeg-cheat-sheet/2022-03-07","docId":"DevOps/Linux/2022-03-07--ffmpeg-cheat-sheet/index","unlisted":false},{"type":"link","label":"Install Davinci Resolve on Arch Linux","href":"/docs/DevOps/Linux/2021-10-26--install-davinci-resolve-on-arch/2021-10-26","docId":"DevOps/Linux/2021-10-26--install-davinci-resolve-on-arch/index","unlisted":false},{"type":"link","label":"Install Mesen in Arch Linux","href":"/docs/DevOps/Linux/2021-10-24--arch-linux-install-mesen/2021-10-24","docId":"DevOps/Linux/2021-10-24--arch-linux-install-mesen/index","unlisted":false},{"type":"link","label":"Install Docker in Arch Linux","href":"/docs/DevOps/Linux/2021-10-24--arch-linux-install-docker/2021-10-24","docId":"DevOps/Linux/2021-10-24--arch-linux-install-docker/index","unlisted":false},{"type":"link","label":"Install Packages in Arch Linux","href":"/docs/DevOps/Linux/2021-10-23--arch-linux-install-packages/2021-10-23","docId":"DevOps/Linux/2021-10-23--arch-linux-install-packages/index","unlisted":false},{"type":"link","label":"The friendly Editor","href":"/docs/DevOps/Linux/2021-10-09--the-friendly-editor/2021-10-09","docId":"DevOps/Linux/2021-10-09--the-friendly-editor/index","unlisted":false},{"type":"link","label":"Editor from Hell","href":"/docs/DevOps/Linux/2021-10-09--editor-from-hell/2021-10-09","docId":"DevOps/Linux/2021-10-09--editor-from-hell/index","unlisted":false},{"type":"link","label":"Installing OpenWRT on a Raspberry Pi 4","href":"/docs/DevOps/Linux/2021-09-02--openwrt-raspberry-pi/2021-09-02","docId":"DevOps/Linux/2021-09-02--openwrt-raspberry-pi/index","unlisted":false},{"type":"link","label":"Installing Kali LINUX on a Raspberry Pi 3","href":"/docs/DevOps/Linux/2021-09-01--kali-linux-raspberry-pi/2021-09-01","docId":"DevOps/Linux/2021-09-01--kali-linux-raspberry-pi/index","unlisted":false},{"type":"link","label":"Installing Deb Packages on RHEL8","href":"/docs/DevOps/Linux/2021-04-14-using-deb-files-on-rhel8/2021-04-14","docId":"DevOps/Linux/2021-04-14-using-deb-files-on-rhel8/index","unlisted":false},{"type":"link","label":"Setting up KVM on RedHat Enterprise Linux","href":"/docs/DevOps/Linux/2021-04-13-installing-kvm-on-red-hat-enterprise-linux/2021-04-13","docId":"DevOps/Linux/2021-04-13-installing-kvm-on-red-hat-enterprise-linux/index","unlisted":false},{"type":"link","label":"Gnome3 Cheat Sheet","href":"/docs/DevOps/Linux/2021-04-12-gnome3-cheat-sheet/2021-04-12","docId":"DevOps/Linux/2021-04-12-gnome3-cheat-sheet/index","unlisted":false},{"type":"link","label":"Installing Free Red Hat Enterprise Linux","href":"/docs/DevOps/Linux/2021-04-11-installing-free-red-hat-enterprise-linux/2021-04-11","docId":"DevOps/Linux/2021-04-11-installing-free-red-hat-enterprise-linux/index","unlisted":false},{"type":"link","label":"Debian Upgrade to Bullseye","href":"/docs/DevOps/Linux/2021-03-15-debian-upgrade-bullseye/2021-03-15","docId":"DevOps/Linux/2021-03-15-debian-upgrade-bullseye/index","unlisted":false},{"type":"link","label":"Activating Root Login on Ubuntu 20.10","href":"/docs/DevOps/Linux/2020-10-20--activating-root-login-ubuntu-20-10/2020-10-20","docId":"DevOps/Linux/2020-10-20--activating-root-login-ubuntu-20-10/index","unlisted":false},{"type":"link","label":"HDD Smart Tools for LINUX","href":"/docs/DevOps/Linux/2020-10-13--smarttools-centos/2020-10-13","docId":"DevOps/Linux/2020-10-13--smarttools-centos/index","unlisted":false},{"type":"link","label":"Installing FirewallD on CentOS 8","href":"/docs/DevOps/Linux/2020-01-07--centos8-firewalld/2020-01-05","docId":"DevOps/Linux/2020-01-07--centos8-firewalld/index","unlisted":false},{"type":"link","label":"CentOS 8 Cockpit Web Console","href":"/docs/DevOps/Linux/2020-01-05--centos8-cockpit/2020-01-05","docId":"DevOps/Linux/2020-01-05--centos8-cockpit/index","unlisted":false},{"type":"link","label":"Podman FTP Server Container","href":"/docs/DevOps/Linux/2019-12-03--podman-ftp-server-container/2019-12-03","docId":"DevOps/Linux/2019-12-03--podman-ftp-server-container/index","unlisted":false},{"type":"link","label":"Kali Linux with Docker for Windows","href":"/docs/DevOps/Linux/2019-09-26--kali-docker-windows/2019-09-26","docId":"DevOps/Linux/2019-09-26--kali-docker-windows/index","unlisted":false},{"type":"link","label":"Podman Cheat Sheet","href":"/docs/DevOps/Linux/2019-09-25--podman-cheat-sheet/2019-09-25","docId":"DevOps/Linux/2019-09-25--podman-cheat-sheet/index","unlisted":false},{"type":"link","label":"Installing Oh-My-Zsh on Ubuntu 20.04","href":"/docs/DevOps/Linux/2019-09-22--zsh-on-ubuntu20/2019-09-22","docId":"DevOps/Linux/2019-09-22--zsh-on-ubuntu20/index","unlisted":false},{"type":"link","label":"Installing Oh-My-Zsh on CentOS8","href":"/docs/DevOps/Linux/2019-09-22--zsh-on-centos8/2019-09-22","docId":"DevOps/Linux/2019-09-22--zsh-on-centos8/index","unlisted":false},{"type":"link","label":"CentOS 8 Network Configuration","href":"/docs/DevOps/Linux/2019-09-22--centos8-network-config/2019-09-22","docId":"DevOps/Linux/2019-09-22--centos8-network-config/index","unlisted":false},{"type":"link","label":"Working with TMUX","href":"/docs/DevOps/Linux/2019-06-17--working-with-tmux/2019-06-17","docId":"DevOps/Linux/2019-06-17--working-with-tmux/index","unlisted":false},{"type":"link","label":"Downloading Docker Images for Offline Use","href":"/docs/DevOps/Linux/2019-06-14--download-and-save-docker-image/2019-06-14","docId":"DevOps/Linux/2019-06-14--download-and-save-docker-image/index","unlisted":false},{"type":"link","label":"Setting up Docker on CentOS 8","href":"/docs/DevOps/Linux/2019-06-07--installing-docker-on-centos8/2019-06-07","docId":"DevOps/Linux/2019-06-07--installing-docker-on-centos8/index","unlisted":false},{"type":"link","label":"Centos Administration","href":"/docs/DevOps/Linux/2019-01-13--centos-administration/2019-01-13","docId":"DevOps/Linux/2019-01-13--centos-administration/index","unlisted":false},{"type":"link","label":"Centos Network Configuration","href":"/docs/DevOps/Linux/2019-01-12--centos-network-configuration/2019-01-12","docId":"DevOps/Linux/2019-01-12--centos-network-configuration/index","unlisted":false},{"type":"link","label":"Ubuntu Server Cannot Stop Docker Container","href":"/docs/DevOps/Linux/2019-01-11--ubuntu-server-app-armour/2019-01-11","docId":"DevOps/Linux/2019-01-11--ubuntu-server-app-armour/index","unlisted":false},{"type":"link","label":"Ubuntu Network Configuration","href":"/docs/DevOps/Linux/2019-01-11--ubuntu-network-configuration/2019-01-11","docId":"DevOps/Linux/2019-01-11--ubuntu-network-configuration/index","unlisted":false},{"type":"link","label":"Ubuntu Server Root SSH Remote Access","href":"/docs/DevOps/Linux/2019-01-11--root-access-ubuntu-server/2019-01-11","docId":"DevOps/Linux/2019-01-11--root-access-ubuntu-server/index","unlisted":false},{"type":"link","label":"Debian SSH Port and Hostname","href":"/docs/DevOps/Linux/2019-01-11--debian-change-ssh-port-hostname/2019-01-11","docId":"DevOps/Linux/2019-01-11--debian-change-ssh-port-hostname/index","unlisted":false},{"type":"link","label":"Red Hat Certified Engineer (RHCE) Exam","href":"/docs/DevOps/Linux/2018-10-27--red-hat-certified-engineer-rhce/2018-10-27","docId":"DevOps/Linux/2018-10-27--red-hat-certified-engineer-rhce/index","unlisted":false}],"href":"/docs/category/linux"},{"type":"category","label":"Windows","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Windows Server 2019 - Docker Daemon","href":"/docs/DevOps/Windows/2019-06-13--windows-server-2019-docker-daemon/2019-06-13","docId":"DevOps/Windows/2019-06-13--windows-server-2019-docker-daemon/index","unlisted":false},{"type":"link","label":"Windows Server 2019 - Active Directory Setup","href":"/docs/DevOps/Windows/2019-06-12--windows-server-2019-active-directory/2019-06-12","docId":"DevOps/Windows/2019-06-12--windows-server-2019-active-directory/index","unlisted":false},{"type":"link","label":"Windows Server 2019 - Active Directory Installation","href":"/docs/DevOps/Windows/2019-06-11--windows-server-2019-active-directory/2019-06-11","docId":"DevOps/Windows/2019-06-11--windows-server-2019-active-directory/index","unlisted":false},{"type":"link","label":"Windows Server 2019 - Scripting and Sharing","href":"/docs/DevOps/Windows/2019-06-10--windows-server-2019-scripting-and-sharing/2019-06-10","docId":"DevOps/Windows/2019-06-10--windows-server-2019-scripting-and-sharing/index","unlisted":false},{"type":"link","label":"Getting Started with Windows Server 2019","href":"/docs/DevOps/Windows/2019-06-09--setting-up-windows-server-2019/2019-06-09","docId":"DevOps/Windows/2019-06-09--setting-up-windows-server-2019/index","unlisted":false},{"type":"link","label":"Umlaute","href":"/docs/DevOps/Windows/2017-12-19--umlaute-on-us-keyboard/2017-12-19","docId":"DevOps/Windows/2017-12-19--umlaute-on-us-keyboard/index","unlisted":false},{"type":"link","label":"Windows Control","href":"/docs/DevOps/Windows/2017-07-07--windows10-control/2017-07-07","docId":"DevOps/Windows/2017-07-07--windows10-control/index","unlisted":false},{"type":"link","label":"Windows CMD","href":"/docs/DevOps/Windows/2017-07-06--windows-cmd/2017-07-06","docId":"DevOps/Windows/2017-07-06--windows-cmd/index","unlisted":false}],"href":"/docs/category/windows"},{"type":"category","label":"Tomcat","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Tomcat 10 Cluster with individual Node Server","href":"/docs/DevOps/Tomcat/2020-12-26-tomcat10-cluster-with-individual-nodes/2020-12-26","docId":"DevOps/Tomcat/2020-12-26-tomcat10-cluster-with-individual-nodes/index","unlisted":false},{"type":"link","label":"Tomcat 10 Docker Cluster","href":"/docs/DevOps/Tomcat/2020-12-25-tomcat10-docker-cluster/2020-12-25","docId":"DevOps/Tomcat/2020-12-25-tomcat10-docker-cluster/index","unlisted":false},{"type":"link","label":"Tomcat 9 Cluster & Loadbalancing","href":"/docs/DevOps/Tomcat/2020-12-24-tomcat9-cluster-and-load-balancing/2020-12-24","docId":"DevOps/Tomcat/2020-12-24-tomcat9-cluster-and-load-balancing/index","unlisted":false},{"type":"link","label":"Tomcat 9 Configuration","href":"/docs/DevOps/Tomcat/2020-12-23-tomcat9-configuration/2020-12-23","docId":"DevOps/Tomcat/2020-12-23-tomcat9-configuration/index","unlisted":false},{"type":"link","label":"Install Tomcat 9 on Ubuntu 20.04","href":"/docs/DevOps/Tomcat/2020-12-22-tomcat9-ubuntu-20-10-installation/2020-12-22","docId":"DevOps/Tomcat/2020-12-22-tomcat9-ubuntu-20-10-installation/index","unlisted":false}],"href":"/docs/category/tomcat"},{"type":"category","label":"Salt","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Salt Orchestration for Docker Containers","href":"/docs/DevOps/Salt/2020-06-25--salt-orchestration-for-docker-containers/2020-06-25","docId":"DevOps/Salt/2020-06-25--salt-orchestration-for-docker-containers/index","unlisted":false},{"type":"link","label":"Saltstack Refresh Course 2: Salt Mines","href":"/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-4-salt-mine/2020-06-23","docId":"DevOps/Salt/2020-06-23--saltestack-refresh-course-4-salt-mine/index","unlisted":false},{"type":"link","label":"Saltstack Refresh Course 2: Highstate","href":"/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-3-highstate/2020-06-23","docId":"DevOps/Salt/2020-06-23--saltestack-refresh-course-3-highstate/index","unlisted":false},{"type":"link","label":"Saltstack Refresh Course 2: Salt State","href":"/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-2-salt-state/2020-06-23","docId":"DevOps/Salt/2020-06-23--saltestack-refresh-course-2-salt-state/index","unlisted":false},{"type":"link","label":"Saltstack Refresh Course 1: Setup","href":"/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-1-setup/2020-06-23","docId":"DevOps/Salt/2020-06-23--saltestack-refresh-course-1-setup/index","unlisted":false},{"type":"link","label":"NGINX Salt State","href":"/docs/DevOps/Salt/2020-06-22--salt-nginx-state/2020-06-22","docId":"DevOps/Salt/2020-06-22--salt-nginx-state/index","unlisted":false},{"type":"link","label":"Salt Beacons Module","href":"/docs/DevOps/Salt/2020-06-21--salt-events-and-thirdparty-apps/2020-06-21","docId":"DevOps/Salt/2020-06-21--salt-events-and-thirdparty-apps/index","unlisted":false},{"type":"link","label":"Salt Reactor and System Events","href":"/docs/DevOps/Salt/2020-06-20--salt-reactor-events/2020-06-20","docId":"DevOps/Salt/2020-06-20--salt-reactor-events/index","unlisted":false},{"type":"link","label":"Salt Mine & Orchestrate","href":"/docs/DevOps/Salt/2020-06-19--salt-mine-orchestrate/2020-06-19","docId":"DevOps/Salt/2020-06-19--salt-mine-orchestrate/index","unlisted":false},{"type":"link","label":"Salt Execution Order","href":"/docs/DevOps/Salt/2020-06-18--salt-execution-order/2020-06-18","docId":"DevOps/Salt/2020-06-18--salt-execution-order/index","unlisted":false},{"type":"link","label":"Salt Pillars & Formulas","href":"/docs/DevOps/Salt/2020-06-17--salt-pillars-formulas/2020-06-17","docId":"DevOps/Salt/2020-06-17--salt-pillars-formulas/index","unlisted":false},{"type":"link","label":"Salt State","href":"/docs/DevOps/Salt/2020-06-16--salt-state/2020-06-16","docId":"DevOps/Salt/2020-06-16--salt-state/index","unlisted":false},{"type":"link","label":"Salty DevOps","href":"/docs/DevOps/Salt/2020-06-15--salty-devops/2020-06-15","docId":"DevOps/Salt/2020-06-15--salty-devops/index","unlisted":false},{"type":"link","label":"Install Salt on Ubuntu Server 20.04","href":"/docs/DevOps/Salt/2020-06-14--install-salt-on-ubuntu-20-04/2020-06-14","docId":"DevOps/Salt/2020-06-14--install-salt-on-ubuntu-20-04/index","unlisted":false}],"href":"/docs/category/salt"}],"href":"/docs/category/devops"},{"type":"category","label":"Machine Learning, AI and Computer Vision","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Machine Learning","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"DLIB Face Recognition","href":"/docs/IoT-and-Machine-Learning/ML/2023-10-01--delib-face-detection/2023-10-01","docId":"IoT-and-Machine-Learning/ML/2023-10-01--delib-face-detection/index","unlisted":false},{"type":"link","label":"Audio Classification with Computer Vision","href":"/docs/IoT-and-Machine-Learning/ML/2023-09-23--yolo8-listen/2023-09-23","docId":"IoT-and-Machine-Learning/ML/2023-09-23--yolo8-listen/index","unlisted":false},{"type":"link","label":"CVAT Semi-automatic and Automatic Annotation","href":"/docs/IoT-and-Machine-Learning/ML/2023-09-21--cvat-automatic-annotation/2023-09-21","docId":"IoT-and-Machine-Learning/ML/2023-09-21--cvat-automatic-annotation/index","unlisted":false},{"type":"link","label":"Computer Vision Annotation Tool (CVAT) Introduction","href":"/docs/IoT-and-Machine-Learning/ML/2023-09-19--cvat-computer-vision-annotation-tool/2023-09-19","docId":"IoT-and-Machine-Learning/ML/2023-09-19--cvat-computer-vision-annotation-tool/index","unlisted":false},{"type":"link","label":"YOLOv8 Nightshift","href":"/docs/IoT-and-Machine-Learning/ML/2023-09-17--yolo8-nightshift/2023-09-17","docId":"IoT-and-Machine-Learning/ML/2023-09-17--yolo8-nightshift/index","unlisted":false},{"type":"link","label":"YOLOv8 License Plate Detection","href":"/docs/IoT-and-Machine-Learning/ML/2023-09-15--yolo8-tracking-and-ocr/2023-09-15","docId":"IoT-and-Machine-Learning/ML/2023-09-15--yolo8-tracking-and-ocr/index","unlisted":false},{"type":"link","label":"Scikit-Learn ML Model Explainability","href":"/docs/IoT-and-Machine-Learning/ML/2023-09-10--model-explainability-shap/2023-09-11","docId":"IoT-and-Machine-Learning/ML/2023-09-10--model-explainability-shap/index","unlisted":false},{"type":"link","label":"Using Tensorflow Models in OpenCV","href":"/docs/IoT-and-Machine-Learning/ML/2023-09-05--semantic-segmentation-in-opencv/2023-09-05","docId":"IoT-and-Machine-Learning/ML/2023-09-05--semantic-segmentation-in-opencv/index","unlisted":false},{"type":"link","label":"YOLOv8 Image Classifier","href":"/docs/IoT-and-Machine-Learning/ML/2023-09-01--yolo-i-know-flowers/2023-09-01","docId":"IoT-and-Machine-Learning/ML/2023-09-01--yolo-i-know-flowers/index","unlisted":false},{"type":"link","label":"Detectron Object Detection with OpenImages Dataset (WIP)","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-31--semantic_segmentation_detectron2_openimages_dataset/2023-08-31","docId":"IoT-and-Machine-Learning/ML/2023-08-31--semantic_segmentation_detectron2_openimages_dataset/index","unlisted":false},{"type":"link","label":"Instance Segmentation with PyTorch (Mask RCNN)","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-30--instance_segmentation_detectron2_model_zoo_mask_rcnn/2023-08-30","docId":"IoT-and-Machine-Learning/ML/2023-08-30--instance_segmentation_detectron2_model_zoo_mask_rcnn/index","unlisted":false},{"type":"link","label":"Image Segmentation with PyTorch (Faster RCNN)","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-29--semantic-segmentation-detectron2-model-zoo-faster-rcnn/2023-08-29","docId":"IoT-and-Machine-Learning/ML/2023-08-29--semantic-segmentation-detectron2-model-zoo-faster-rcnn/index","unlisted":false},{"type":"link","label":"Image Segmentation with PyTorch (RCNN)","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-28--semantic-segmentation-detectron2-model-zoo/2023-08-28","docId":"IoT-and-Machine-Learning/ML/2023-08-28--semantic-segmentation-detectron2-model-zoo/index","unlisted":false},{"type":"link","label":"Image Segmentation with PyTorch","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-27--image-segmentation-with-pytorch/2023-08-27","docId":"IoT-and-Machine-Learning/ML/2023-08-27--image-segmentation-with-pytorch/index","unlisted":false},{"type":"link","label":"Containerized PyTorch Dev Workflow","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-21--pytorch-development-in-docker/2023-08-21","docId":"IoT-and-Machine-Learning/ML/2023-08-21--pytorch-development-in-docker/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classifier - Model Evaluation","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-13-tensorflow-i-know-flowers-model-eval/2023-08-13","docId":"IoT-and-Machine-Learning/ML/2023-08-13-tensorflow-i-know-flowers-model-eval/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classifier - Xception","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-12-tensorflow-i-know-flowers-xception/2023-08-12","docId":"IoT-and-Machine-Learning/ML/2023-08-12-tensorflow-i-know-flowers-xception/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classifier - ViT","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-11-tensorflow-i-know-flowers-vit/2023-08-11","docId":"IoT-and-Machine-Learning/ML/2023-08-11-tensorflow-i-know-flowers-vit/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classifier - NASNetMobile","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-10-tensorflow-i-know-flowers-nasnetmobile/2023-08-10","docId":"IoT-and-Machine-Learning/ML/2023-08-10-tensorflow-i-know-flowers-nasnetmobile/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classifier - MobileNetV3Small","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-09-tensorflow-i-know-flowers-mobilenetv3small/2023-08-09","docId":"IoT-and-Machine-Learning/ML/2023-08-09-tensorflow-i-know-flowers-mobilenetv3small/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classifier - MobileNetV3Large","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-08-tensorflow-i-know-flowers-mobilenetv3large/2023-08-08","docId":"IoT-and-Machine-Learning/ML/2023-08-08-tensorflow-i-know-flowers-mobilenetv3large/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classifier - MobileNetV2","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-07-tensorflow-i-know-flowers-mobilenetv2/2023-08-07","docId":"IoT-and-Machine-Learning/ML/2023-08-07-tensorflow-i-know-flowers-mobilenetv2/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classifier - InceptionV3","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-06-tensorflow-i-know-flowers-inceptionv3/2023-08-06","docId":"IoT-and-Machine-Learning/ML/2023-08-06-tensorflow-i-know-flowers-inceptionv3/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classifier - EfficientNetV2S","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-05-tensorflow-i-know-flowers-efficientnetv2s/2023-08-05","docId":"IoT-and-Machine-Learning/ML/2023-08-05-tensorflow-i-know-flowers-efficientnetv2s/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classifier - EfficientNetV2B0","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-04-tensorflow-i-know-flowers-efficientnetv2b0/2023-08-04","docId":"IoT-and-Machine-Learning/ML/2023-08-04-tensorflow-i-know-flowers-efficientnetv2b0/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classifier - Data-efficient Image Transformers","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-03-tensorflow-i-know-flowers-deit/2023-08-03","docId":"IoT-and-Machine-Learning/ML/2023-08-03-tensorflow-i-know-flowers-deit/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classifier - Data Pre-processing","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-02-tensorflow-i-know-flowers-preprocessing/2023-08-02","docId":"IoT-and-Machine-Learning/ML/2023-08-02-tensorflow-i-know-flowers-preprocessing/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classifier - Introduction","href":"/docs/IoT-and-Machine-Learning/ML/2023-08-01-tensorflow-i-know-flowers-intro/2023-08-01","docId":"IoT-and-Machine-Learning/ML/2023-08-01-tensorflow-i-know-flowers-intro/index","unlisted":false},{"type":"link","label":"Tensorflow VITs","href":"/docs/IoT-and-Machine-Learning/ML/2023-07-27-tensorflow-vision-transformer/2023-07-27","docId":"IoT-and-Machine-Learning/ML/2023-07-27-tensorflow-vision-transformer/index","unlisted":false},{"type":"link","label":"Human Emotion Detection with Tensorflow","href":"/docs/IoT-and-Machine-Learning/ML/2023-07-26-tensorflow-human-emotion-detector/2023-07-26","docId":"IoT-and-Machine-Learning/ML/2023-07-26-tensorflow-human-emotion-detector/index","unlisted":false},{"type":"link","label":"Working with ONNX Models","href":"/docs/IoT-and-Machine-Learning/ML/2023-07-25-onnx-models/2023-07-25","docId":"IoT-and-Machine-Learning/ML/2023-07-25-onnx-models/index","unlisted":false},{"type":"link","label":"Introduction to Caffe2","href":"/docs/IoT-and-Machine-Learning/ML/2023-07-21-introduction-to-pytorch-caffe2/2023-07-21","docId":"IoT-and-Machine-Learning/ML/2023-07-21-introduction-to-pytorch-caffe2/index","unlisted":false},{"type":"link","label":"SQL in Data Science - Machine Learning","href":"/docs/IoT-and-Machine-Learning/ML/2023-07-02-sql-in-data-science-ml/2023-07-02","docId":"IoT-and-Machine-Learning/ML/2023-07-02-sql-in-data-science-ml/index","unlisted":false},{"type":"link","label":"SQL in Data Science - Slightly more Advanced Queries","href":"/docs/IoT-and-Machine-Learning/ML/2023-06-30-sql-in-data-science-advanced/2023-06-30","docId":"IoT-and-Machine-Learning/ML/2023-06-30-sql-in-data-science-advanced/index","unlisted":false},{"type":"link","label":"SQL in Data Science - The Basics using Python","href":"/docs/IoT-and-Machine-Learning/ML/2023-06-27-sql-in-data-science-basics/2023-06-27","docId":"IoT-and-Machine-Learning/ML/2023-06-27-sql-in-data-science-basics/index","unlisted":false},{"type":"link","label":"Detection of Exoplanets using Transit Photometry","href":"/docs/IoT-and-Machine-Learning/ML/2023-06-26-autogluon-transit-photometry-dataset/2023-06-26","docId":"IoT-and-Machine-Learning/ML/2023-06-26-autogluon-transit-photometry-dataset/index","unlisted":false},{"type":"link","label":"(Re) Introduction to Tensorflow Natural Language Processing","href":"/docs/IoT-and-Machine-Learning/ML/2023-04-19-tensorflow-natural-language-processing/2023-04-19","docId":"IoT-and-Machine-Learning/ML/2023-04-19-tensorflow-natural-language-processing/index","unlisted":false},{"type":"link","label":"3D Image Classification","href":"/docs/IoT-and-Machine-Learning/ML/2023-04-16-deep-3d-image-segmentation/2023-04-16","docId":"IoT-and-Machine-Learning/ML/2023-04-16-deep-3d-image-segmentation/index","unlisted":false},{"type":"link","label":"Dimensionality Reduction for Image Segmentation","href":"/docs/IoT-and-Machine-Learning/ML/2023-04-14-manifold-learning-for-image-segmentation/2023-04-14","docId":"IoT-and-Machine-Learning/ML/2023-04-14-manifold-learning-for-image-segmentation/index","unlisted":false},{"type":"link","label":"Fisher Linear Discriminant Analysis (LDA)","href":"/docs/IoT-and-Machine-Learning/ML/2023-04-13-fisher-discriminant-analysis/2023-04-13","docId":"IoT-and-Machine-Learning/ML/2023-04-13-fisher-discriminant-analysis/index","unlisted":false},{"type":"link","label":"Isometric Mapping (ISOMAP)","href":"/docs/IoT-and-Machine-Learning/ML/2023-04-13-isometric-mapping/2023-04-13","docId":"IoT-and-Machine-Learning/ML/2023-04-13-isometric-mapping/index","unlisted":false},{"type":"link","label":"Multidimensional Scaling (MDS)","href":"/docs/IoT-and-Machine-Learning/ML/2023-04-13-multi-dimensional-scaling/2023-04-13","docId":"IoT-and-Machine-Learning/ML/2023-04-13-multi-dimensional-scaling/index","unlisted":false},{"type":"link","label":"tStochastic Neighbor Embedding (t-SNE)","href":"/docs/IoT-and-Machine-Learning/ML/2023-04-12-tstochastic-neighbor-embedding/2023-04-12","docId":"IoT-and-Machine-Learning/ML/2023-04-12-tstochastic-neighbor-embedding/index","unlisted":false},{"type":"link","label":"Locally Linear Embedding (LLE)","href":"/docs/IoT-and-Machine-Learning/ML/2023-04-11-locally-linear-embedding/2023-04-11","docId":"IoT-and-Machine-Learning/ML/2023-04-11-locally-linear-embedding/index","unlisted":false},{"type":"link","label":"Principal Component Analysis (PCA)","href":"/docs/IoT-and-Machine-Learning/ML/2023-04-09-principal-component-analysis/2023-04-09","docId":"IoT-and-Machine-Learning/ML/2023-04-09-principal-component-analysis/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Unsupervised Learning","href":"/docs/IoT-and-Machine-Learning/ML/2023-03-26-tensorflow-unsupervised-learning-generative-adversial-networks/2023-03-26","docId":"IoT-and-Machine-Learning/ML/2023-03-26-tensorflow-unsupervised-learning-generative-adversial-networks/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Unsupervised Learning","href":"/docs/IoT-and-Machine-Learning/ML/2023-03-26-tensorflow-unsupervised-learning-autoencoders-super-resolution/2023-03-26","docId":"IoT-and-Machine-Learning/ML/2023-03-26-tensorflow-unsupervised-learning-autoencoders-super-resolution/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Unsupervised Learning","href":"/docs/IoT-and-Machine-Learning/ML/2023-03-24-tensorflow-unsupervised-learning-autoencoders/2023-03-24","docId":"IoT-and-Machine-Learning/ML/2023-03-24-tensorflow-unsupervised-learning-autoencoders/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Transfer Learning","href":"/docs/IoT-and-Machine-Learning/ML/2023-03-16-tensorflow-transfer-learning-scaling/2023-03-16","docId":"IoT-and-Machine-Learning/ML/2023-03-16-tensorflow-transfer-learning-scaling/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Transfer Learning","href":"/docs/IoT-and-Machine-Learning/ML/2023-03-11-tensorflow-transfer-learning-fine-tuning/2023-03-11","docId":"IoT-and-Machine-Learning/ML/2023-03-11-tensorflow-transfer-learning-fine-tuning/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Transfer Learning","href":"/docs/IoT-and-Machine-Learning/ML/2023-03-06-tensorflow-transfer-learning-feature-extraction/2023-03-06","docId":"IoT-and-Machine-Learning/ML/2023-03-06-tensorflow-transfer-learning-feature-extraction/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Convolutional Neural Networks","href":"/docs/IoT-and-Machine-Learning/ML/2023-03-05-tensorflow-convolutional-neural-network-multiclass-classifications/2023-03-05","docId":"IoT-and-Machine-Learning/ML/2023-03-05-tensorflow-convolutional-neural-network-multiclass-classifications/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Convolutional Neural Networks","href":"/docs/IoT-and-Machine-Learning/ML/2023-03-03-tensorflow-convolutional-neural-network-binary-classifications/2023-03-03","docId":"IoT-and-Machine-Learning/ML/2023-03-03-tensorflow-convolutional-neural-network-binary-classifications/index","unlisted":false},{"type":"category","label":"Tensorflow 2 - Neural Network Classifications","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Tensorflow 2 - Neural Network Classification","href":"/docs/IoT-and-Machine-Learning/ML/2023-03-02-tensorflow-neural-network-multi-classification/2023-02-28-tensorflow-neural-network-classification-model-evaluation/2023-02-28","docId":"IoT-and-Machine-Learning/ML/2023-03-02-tensorflow-neural-network-multi-classification/2023-02-28-tensorflow-neural-network-classification-model-evaluation/index","unlisted":false}],"href":"/docs/IoT-and-Machine-Learning/ML/2023-03-02-tensorflow-neural-network-multi-classification/2023-03-02"},{"type":"link","label":"Tensorflow 2 - Neural Network Classification","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-28-tensorflow-neural-network-classification-model-evaluation/2023-02-28","docId":"IoT-and-Machine-Learning/ML/2023-02-28-tensorflow-neural-network-classification-model-evaluation/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Neural Network Classification","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-27-tensorflow-neural-network-classification/2023-02-27","docId":"IoT-and-Machine-Learning/ML/2023-02-27-tensorflow-neural-network-classification/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Neural Network Regression","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-26-tensorflow-neural-network-regression-data-preprocessing/2023-02-26","docId":"IoT-and-Machine-Learning/ML/2023-02-26-tensorflow-neural-network-regression-data-preprocessing/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Neural Network Regression","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-26-tensorflow-neural-network-regression-real-dataset/2023-02-26","docId":"IoT-and-Machine-Learning/ML/2023-02-26-tensorflow-neural-network-regression-real-dataset/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Neural Network Regression","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-25-tensorflow-neural-network-regression-experiments/2023-02-25","docId":"IoT-and-Machine-Learning/ML/2023-02-25-tensorflow-neural-network-regression-experiments/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Neural Network Regression","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-24-tensorflow-neural-network-regression-evaluation/2023-02-24","docId":"IoT-and-Machine-Learning/ML/2023-02-24-tensorflow-neural-network-regression-evaluation/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - Neural Network Regression","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-23-tensorflow-neural-network-regression/2023-02-23","docId":"IoT-and-Machine-Learning/ML/2023-02-23-tensorflow-neural-network-regression/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - An (Re)Introduction 2023 (3)","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-22-tensorflow-tensors-3/2023-02-22","docId":"IoT-and-Machine-Learning/ML/2023-02-22-tensorflow-tensors-3/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - An (Re)Introduction 2023 (2)","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-21-tensorflow-tensors-2/2023-02-21","docId":"IoT-and-Machine-Learning/ML/2023-02-21-tensorflow-tensors-2/index","unlisted":false},{"type":"link","label":"Tensorflow 2 - An (Re)Introduction 2023","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-19-tensorflow-introduction/2023-02-19","docId":"IoT-and-Machine-Learning/ML/2023-02-19-tensorflow-introduction/index","unlisted":false},{"type":"link","label":"Keras for Tensorflow - VGG16 Network Architecture","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-18-keras-introduction-vgg16/2023-02-18","docId":"IoT-and-Machine-Learning/ML/2023-02-18-keras-introduction-vgg16/index","unlisted":false},{"type":"link","label":"Keras for Tensorflow - Recurrent Neural Networks","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-18-keras-introduction-rnn/2023-02-18","docId":"IoT-and-Machine-Learning/ML/2023-02-18-keras-introduction-rnn/index","unlisted":false},{"type":"link","label":"Keras for Tensorflow - Convolutional Neural Networks","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-17-keras-introduction-cnn/2023-02-17","docId":"IoT-and-Machine-Learning/ML/2023-02-17-keras-introduction-cnn/index","unlisted":false},{"type":"link","label":"Keras for Tensorflow - Artificial Neural Networks","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-16-keras-introduction-ann/2023-02-16","docId":"IoT-and-Machine-Learning/ML/2023-02-16-keras-introduction-ann/index","unlisted":false},{"type":"link","label":"YOLOv8 with AS-One","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-15-as-one-yolo-object-tracking/2023-02-15","docId":"IoT-and-Machine-Learning/ML/2023-02-15-as-one-yolo-object-tracking/index","unlisted":false},{"type":"link","label":"Keras for Tensorflow - An (Re)Introduction 2023","href":"/docs/IoT-and-Machine-Learning/ML/2023-02-14-keras-introduction/2023-02-14","docId":"IoT-and-Machine-Learning/ML/2023-02-14-keras-introduction/index","unlisted":false},{"type":"link","label":"SciKit Wine Quality","href":"/docs/IoT-and-Machine-Learning/ML/2023-01-30-predicting-wine-quality/2023-01-30","docId":"IoT-and-Machine-Learning/ML/2023-01-30-predicting-wine-quality/index","unlisted":false},{"type":"link","label":"OpenCV Count My Money","href":"/docs/IoT-and-Machine-Learning/ML/2023-01-28-opencv-coin-counter/2023-01-28","docId":"IoT-and-Machine-Learning/ML/2023-01-28-opencv-coin-counter/index","unlisted":false},{"type":"link","label":"YOLOv7 to Tensorflow","href":"/docs/IoT-and-Machine-Learning/ML/2023-01-14-yolov7_to_tensorflow/2023-01-14","docId":"IoT-and-Machine-Learning/ML/2023-01-14-yolov7_to_tensorflow/index","unlisted":false},{"type":"link","label":"YOLOv7 Label Conversion","href":"/docs/IoT-and-Machine-Learning/ML/2023-01-13-yolov7_data_conversion/2023-01-13","docId":"IoT-and-Machine-Learning/ML/2023-01-13-yolov7_data_conversion/index","unlisted":false},{"type":"link","label":"YOLOv7 Training with Custom Data","href":"/docs/IoT-and-Machine-Learning/ML/2023-01-10-yolov7_custom_data/2023-01-10","docId":"IoT-and-Machine-Learning/ML/2023-01-10-yolov7_custom_data/index","unlisted":false},{"type":"link","label":"MiDaS Depth Vision","href":"/docs/IoT-and-Machine-Learning/ML/2023-01-08-depth-vision-midas/2023-01-08","docId":"IoT-and-Machine-Learning/ML/2023-01-08-depth-vision-midas/index","unlisted":false},{"type":"link","label":"YOLOv7 Introduction","href":"/docs/IoT-and-Machine-Learning/ML/2023-01-05-yolov7/2023-01-05","docId":"IoT-and-Machine-Learning/ML/2023-01-05-yolov7/index","unlisted":false},{"type":"link","label":"Recurrent Neural Networks","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-31-tf-rnn-text-generation/2022-12-31","docId":"IoT-and-Machine-Learning/ML/2022-12-31-tf-rnn-text-generation/index","unlisted":false},{"type":"link","label":"Deep Convolutional Generative Adversarial Network","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-28-tf-gan-image-generator/2022-12-28","docId":"IoT-and-Machine-Learning/ML/2022-12-28-tf-gan-image-generator/index","unlisted":false},{"type":"link","label":"Tensorflow Downsampling","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-21-tf-downsampling/2022-12-21","docId":"IoT-and-Machine-Learning/ML/2022-12-21-tf-downsampling/index","unlisted":false},{"type":"link","label":"Tensorflow Deep Dream","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-21-tf-deepdream/2022-12-21","docId":"IoT-and-Machine-Learning/ML/2022-12-21-tf-deepdream/index","unlisted":false},{"type":"link","label":"Tensorflow Representation Learning","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-20-tf-representation/2022-12-19","docId":"IoT-and-Machine-Learning/ML/2022-12-20-tf-representation/index","unlisted":false},{"type":"link","label":"Tensorflow Hub","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-19-tf-hub/2022-12-19","docId":"IoT-and-Machine-Learning/ML/2022-12-19-tf-hub/index","unlisted":false},{"type":"link","label":"Tensorflow Transfer Learning","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-18-tf-transfer-learning/2022-12-18","docId":"IoT-and-Machine-Learning/ML/2022-12-18-tf-transfer-learning/index","unlisted":false},{"type":"link","label":"Tensorflow Image Classification","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-16-tf-cifar/2022-12-16","docId":"IoT-and-Machine-Learning/ML/2022-12-16-tf-cifar/index","unlisted":false},{"type":"link","label":"Breast Histopathology Image Segmentation Part 6","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-12-tf-breast-cancer-classification-part6/2022-12-12","docId":"IoT-and-Machine-Learning/ML/2022-12-12-tf-breast-cancer-classification-part6/index","unlisted":false},{"type":"link","label":"Breast Histopathology Image Segmentation Part 5","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-12-tf-breast-cancer-classification-part5/2022-12-12","docId":"IoT-and-Machine-Learning/ML/2022-12-12-tf-breast-cancer-classification-part5/index","unlisted":false},{"type":"link","label":"Breast Histopathology Image Segmentation Part 4","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part4/2022-12-11","docId":"IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part4/index","unlisted":false},{"type":"link","label":"Breast Histopathology Image Segmentation Part 3","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part3/2022-12-11","docId":"IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part3/index","unlisted":false},{"type":"link","label":"Breast Histopathology Image Segmentation Part 2","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part2/2022-12-11","docId":"IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part2/index","unlisted":false},{"type":"link","label":"Breast Histopathology Image Segmentation Part 1","href":"/docs/IoT-and-Machine-Learning/ML/2022-12-10-tf-breast-cancer-classification-part1/2022-12-10","docId":"IoT-and-Machine-Learning/ML/2022-12-10-tf-breast-cancer-classification-part1/index","unlisted":false},{"type":"link","label":"Deep Docker on Arch","href":"/docs/IoT-and-Machine-Learning/ML/2022-11-27-containerized-deep-learning/2022-11-27","docId":"IoT-and-Machine-Learning/ML/2022-11-27-containerized-deep-learning/index","unlisted":false},{"type":"link","label":"Face Restoration with GFPGAN","href":"/docs/IoT-and-Machine-Learning/ML/2022-04-04-pytorch-face-restoration/2022-04-04","docId":"IoT-and-Machine-Learning/ML/2022-04-04-pytorch-face-restoration/index","unlisted":false},{"type":"link","label":"Super Resolution with Real-ESRGAN","href":"/docs/IoT-and-Machine-Learning/ML/2022-04-03-pytorch-real-super-resolution/2022-04-03","docId":"IoT-and-Machine-Learning/ML/2022-04-03-pytorch-real-super-resolution/index","unlisted":false},{"type":"link","label":"Super Resolution with ESRGAN","href":"/docs/IoT-and-Machine-Learning/ML/2022-04-02-pytorch-super-resolution/2022-04-02","docId":"IoT-and-Machine-Learning/ML/2022-04-02-pytorch-super-resolution/index","unlisted":false},{"type":"link","label":"Deep Audio","href":"/docs/IoT-and-Machine-Learning/ML/2022-04-01-tensorflow-audio-classifier/2022-04-01","docId":"IoT-and-Machine-Learning/ML/2022-04-01-tensorflow-audio-classifier/index","unlisted":false},{"type":"link","label":"Yolo App - YOLOv5 Data Preparation","href":"/docs/IoT-and-Machine-Learning/ML/2022-02-20--yolo-app-yolov5-data-prep/2022-02-20","docId":"IoT-and-Machine-Learning/ML/2022-02-20--yolo-app-yolov5-data-prep/index","unlisted":false},{"type":"link","label":"Yolo App - Flask Web Application","href":"/docs/IoT-and-Machine-Learning/ML/2022-02-19--yolo-app-flask/2022-02-19","docId":"IoT-and-Machine-Learning/ML/2022-02-19--yolo-app-flask/index","unlisted":false},{"type":"link","label":"Yolo App - Tesseract Optical Character Recognition","href":"/docs/IoT-and-Machine-Learning/ML/2022-02-18--yolo-app-ocr/2022-02-18","docId":"IoT-and-Machine-Learning/ML/2022-02-18--yolo-app-ocr/index","unlisted":false},{"type":"link","label":"Yolo App - Pipeline Predictions","href":"/docs/IoT-and-Machine-Learning/ML/2022-02-17--yolo-app-prediction-pipeline/2022-02-17","docId":"IoT-and-Machine-Learning/ML/2022-02-17--yolo-app-prediction-pipeline/index","unlisted":false},{"type":"link","label":"Yolo App - Train a Model with Tensorflow","href":"/docs/IoT-and-Machine-Learning/ML/2022-02-16--yolo-app-tensorflow-model/2022-02-16","docId":"IoT-and-Machine-Learning/ML/2022-02-16--yolo-app-tensorflow-model/index","unlisted":false},{"type":"link","label":"Yolo App - Data Collection","href":"/docs/IoT-and-Machine-Learning/ML/2022-02-15--yolo-app-get-data/2022-02-15","docId":"IoT-and-Machine-Learning/ML/2022-02-15--yolo-app-get-data/index","unlisted":false},{"type":"link","label":"OpenCV Optical Flow Algorithm for Object Tracking","href":"/docs/IoT-and-Machine-Learning/ML/2021-12-10--opencv-optical-flow-tracking/2021-12-10","docId":"IoT-and-Machine-Learning/ML/2021-12-10--opencv-optical-flow-tracking/index","unlisted":false},{"type":"link","label":"OpenCV CAMshift Algorithm for Object Tracking","href":"/docs/IoT-and-Machine-Learning/ML/2021-12-09--opencv-camshift-tracking/2021-12-09","docId":"IoT-and-Machine-Learning/ML/2021-12-09--opencv-camshift-tracking/index","unlisted":false},{"type":"link","label":"OpenCV Meanshift Algorithm for Object Tracking","href":"/docs/IoT-and-Machine-Learning/ML/2021-12-08--opencv-meanshift-tracking/2021-12-08","docId":"IoT-and-Machine-Learning/ML/2021-12-08--opencv-meanshift-tracking/index","unlisted":false},{"type":"link","label":"OpenCV Object Detection and Tracking","href":"/docs/IoT-and-Machine-Learning/ML/2021-12-07--opencv-detection-and-tracking/2021-12-07","docId":"IoT-and-Machine-Learning/ML/2021-12-07--opencv-detection-and-tracking/index","unlisted":false},{"type":"link","label":"OpenCV Object Tracking","href":"/docs/IoT-and-Machine-Learning/ML/2021-12-06--opencv-object-tracking/2021-12-06","docId":"IoT-and-Machine-Learning/ML/2021-12-06--opencv-object-tracking/index","unlisted":false},{"type":"link","label":"OpenCV Face Detection and Privacy","href":"/docs/IoT-and-Machine-Learning/ML/2021-12-05--opencv-face-detection/2021-12-05","docId":"IoT-and-Machine-Learning/ML/2021-12-05--opencv-face-detection/index","unlisted":false},{"type":"link","label":"OpenCV Image Objects","href":"/docs/IoT-and-Machine-Learning/ML/2021-12-04--opencv-image-objects/2021-12-04","docId":"IoT-and-Machine-Learning/ML/2021-12-04--opencv-image-objects/index","unlisted":false},{"type":"link","label":"OpenCV Image Operations","href":"/docs/IoT-and-Machine-Learning/ML/2021-12-03--opencv-image-operations/2021-12-03","docId":"IoT-and-Machine-Learning/ML/2021-12-03--opencv-image-operations/index","unlisted":false},{"type":"link","label":"OpenCV, Streams and Video Files","href":"/docs/IoT-and-Machine-Learning/ML/2021-12-02--opencv-with-videos/2021-12-02","docId":"IoT-and-Machine-Learning/ML/2021-12-02--opencv-with-videos/index","unlisted":false},{"type":"link","label":"OpenCV and Images","href":"/docs/IoT-and-Machine-Learning/ML/2021-12-01--opencv-with-images/2021-12-01","docId":"IoT-and-Machine-Learning/ML/2021-12-01--opencv-with-images/index","unlisted":false},{"type":"link","label":"Introduction into FB Prophet","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-15--facebook-prophet-introduction/2021-11-15","docId":"IoT-and-Machine-Learning/ML/2021-11-15--facebook-prophet-introduction/index","unlisted":false},{"type":"link","label":"Tensorflow.js React App","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-14--tensorflow-model-for-tfjs/2021-11-14","docId":"IoT-and-Machine-Learning/ML/2021-11-14--tensorflow-model-for-tfjs/index","unlisted":false},{"type":"link","label":"Tensorflow2 Model Zoo","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-13--tensorflow-model-zoo/2021-11-13","docId":"IoT-and-Machine-Learning/ML/2021-11-13--tensorflow-model-zoo/index","unlisted":false},{"type":"link","label":"Tensorflow2 Crash Course - Part V","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-12--tensorflow-crash-course-part-v/2021-11-12","docId":"IoT-and-Machine-Learning/ML/2021-11-12--tensorflow-crash-course-part-v/index","unlisted":false},{"type":"link","label":"Tensorflow2 Crash Course - Part IV","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-11--tensorflow-crash-course-part-iv/2021-11-11","docId":"IoT-and-Machine-Learning/ML/2021-11-11--tensorflow-crash-course-part-iv/index","unlisted":false},{"type":"link","label":"Tensorflow2 Crash Course - Part III","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-10--tensorflow-crash-course-part-iii/2021-11-10","docId":"IoT-and-Machine-Learning/ML/2021-11-10--tensorflow-crash-course-part-iii/index","unlisted":false},{"type":"link","label":"Tensorflow2 Crash Course - Part II","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-09--tensorflow-crash-course-part-ii/2021-11-09","docId":"IoT-and-Machine-Learning/ML/2021-11-09--tensorflow-crash-course-part-ii/index","unlisted":false},{"type":"category","label":"Tensorflow Crash Course - Part I","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"activate_webcam","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-08--tensorflow-crash-course-part-i/activate_webcam","docId":"IoT-and-Machine-Learning/ML/2021-11-08--tensorflow-crash-course-part-i/activate_webcam","unlisted":false}],"href":"/docs/IoT-and-Machine-Learning/ML/2021-11-08--tensorflow-crash-course-part-i/2021-11-08"},{"type":"link","label":"OpenCV Crash Course Part II","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-07--opencv-crash-course-part-ii/2021-11-07","docId":"IoT-and-Machine-Learning/ML/2021-11-07--opencv-crash-course-part-ii/index","unlisted":false},{"type":"link","label":"OpenCV Crash Course Part I","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-06--opencv-crash-course-part-i/2021-11-06","docId":"IoT-and-Machine-Learning/ML/2021-11-06--opencv-crash-course-part-i/index","unlisted":false},{"type":"link","label":"License Plate Recognition with YOLOv4, OpenCV and Tesseract","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-05--license-plates-yolov4-opencv-tesseract/2021-11-05","docId":"IoT-and-Machine-Learning/ML/2021-11-05--license-plates-yolov4-opencv-tesseract/index","unlisted":false},{"type":"link","label":"Installing YOLOv4 with Anaconda","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-04--installing-yolov4/2021-11-04","docId":"IoT-and-Machine-Learning/ML/2021-11-04--installing-yolov4/index","unlisted":false},{"type":"link","label":"Streamlit user interface for openCV/Mediapipe face mesh app","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-03--streamlit-opencv-mediapipe/2021-11-03","docId":"IoT-and-Machine-Learning/ML/2021-11-03--streamlit-opencv-mediapipe/index","unlisted":false},{"type":"link","label":"spaCy NER Predictions","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-02--spacy_ner_predictions/2021-11-02","docId":"IoT-and-Machine-Learning/ML/2021-11-02--spacy_ner_predictions/index","unlisted":false},{"type":"link","label":"spaCy NER on Arch Linux","href":"/docs/IoT-and-Machine-Learning/ML/2021-11-01--spacy_natural_language_processing/2021-11-01","docId":"IoT-and-Machine-Learning/ML/2021-11-01--spacy_natural_language_processing/index","unlisted":false},{"type":"link","label":"Introduction to Keras","href":"/docs/IoT-and-Machine-Learning/ML/2019-04-01--introduction-to-keras/2019-04-01","docId":"IoT-and-Machine-Learning/ML/2019-04-01--introduction-to-keras/index","unlisted":false},{"type":"link","label":"Tesseract OCR on Arch Linux","href":"/docs/IoT-and-Machine-Learning/ML/2021-10-31--tesseract_ocr_arch_linux/2021-10-31","docId":"IoT-and-Machine-Learning/ML/2021-10-31--tesseract_ocr_arch_linux/index","unlisted":false},{"type":"link","label":"Introduction to TensorFlow 2 Beta","href":"/docs/IoT-and-Machine-Learning/ML/2019-03-31--introduction-to-tensorflow-2-beta/2019-03-31","docId":"IoT-and-Machine-Learning/ML/2019-03-31--introduction-to-tensorflow-2-beta/index","unlisted":false},{"type":"link","label":"Machine Learning with SciKit Learn","href":"/docs/IoT-and-Machine-Learning/ML/2018-01-02--machine-learning-with-python/2018-01-02","docId":"IoT-and-Machine-Learning/ML/2018-01-02--machine-learning-with-python/index","unlisted":false}],"href":"/docs/category/machine-learning"},{"type":"category","label":"AIOps","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"MLflow Integration for Ultralytics YOLO","href":"/docs/IoT-and-Machine-Learning/AIOps/2024-02-26-mlflow-with-yolov81/2024-02-26","docId":"IoT-and-Machine-Learning/AIOps/2024-02-26-mlflow-with-yolov81/index","unlisted":false},{"type":"link","label":"MLFlow Hyperparameter Tuning in Docker","href":"/docs/IoT-and-Machine-Learning/AIOps/2024-02-24-mlflow-hyperparameter-tuning/2024-02-24","docId":"IoT-and-Machine-Learning/AIOps/2024-02-24-mlflow-hyperparameter-tuning/index","unlisted":false},{"type":"link","label":"MLFlow with PyTorch Lighning in Docker","href":"/docs/IoT-and-Machine-Learning/AIOps/2024-02-21-mlflow-pytorch-lightning-docker/2024-02-21","docId":"IoT-and-Machine-Learning/AIOps/2024-02-21-mlflow-pytorch-lightning-docker/index","unlisted":false},{"type":"link","label":"MLOps with ZenML - SKLearn Classifier Pipeline","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-09-27-zenml-intro-sklearn-pipeline/2023-09-27","docId":"IoT-and-Machine-Learning/AIOps/2023-09-27-zenml-intro-sklearn-pipeline/index","unlisted":false},{"type":"link","label":"Tensorflow Serving API","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-08-19-tensorflow-serving-api/2023-08-19","docId":"IoT-and-Machine-Learning/AIOps/2023-08-19-tensorflow-serving-api/index","unlisted":false},{"type":"link","label":"Serving your SciKit Image Model as a Prediction API","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-07-12-scikit-image-model-deployment-part2/2023-07-12","docId":"IoT-and-Machine-Learning/AIOps/2023-07-12-scikit-image-model-deployment-part2/index","unlisted":false},{"type":"link","label":"Serving your SciKit Image Model as a Prediction API","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-07-10-scikit-image-model-deployment-part1/2023-07-10","docId":"IoT-and-Machine-Learning/AIOps/2023-07-10-scikit-image-model-deployment-part1/index","unlisted":false},{"type":"link","label":"AutoML with AutoGluon for Timeseries Forecasts","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-06-23-automl-with-autogluon-timeseries-forecast/2023-06-23","docId":"IoT-and-Machine-Learning/AIOps/2023-06-23-automl-with-autogluon-timeseries-forecast/index","unlisted":false},{"type":"link","label":"AutoML with AutoGluon for Multi-Modal Data NLP","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-06-21-automl-with-autogluon-multiclass-nlp/2023-06-21","docId":"IoT-and-Machine-Learning/AIOps/2023-06-21-automl-with-autogluon-multiclass-nlp/index","unlisted":false},{"type":"link","label":"AutoML with AutoGluon for Tabular Data","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-06-18-automl-with-autogluon-tabular-data/2023-06-18","docId":"IoT-and-Machine-Learning/AIOps/2023-06-18-automl-with-autogluon-tabular-data/index","unlisted":false},{"type":"link","label":"Serving your SciKit Learn Model as a Prediction API","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-06-17-scikit-learn-model-deployment/2023-06-17","docId":"IoT-and-Machine-Learning/AIOps/2023-06-17-scikit-learn-model-deployment/index","unlisted":false},{"type":"link","label":"Deploying Prediction APIs","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-03-27-deploying-prediction-apis-with-flask/2023-03-27","docId":"IoT-and-Machine-Learning/AIOps/2023-03-27-deploying-prediction-apis-with-flask/index","unlisted":false},{"type":"link","label":"MLflow 2.1 Introduction","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-02-09-mlflow-introduction/2023-02-09","docId":"IoT-and-Machine-Learning/AIOps/2023-02-09-mlflow-introduction/index","unlisted":false},{"type":"link","label":"Apache Airflow Dynamic DAGs","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-02-06-apache-airflow-dynamic-dags/2023-02-06","docId":"IoT-and-Machine-Learning/AIOps/2023-02-06-apache-airflow-dynamic-dags/index","unlisted":false},{"type":"link","label":"Apache Airflow DAG Scheduling","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-02-05-apache-airflow-scheduler/2023-02-05","docId":"IoT-and-Machine-Learning/AIOps/2023-02-05-apache-airflow-scheduler/index","unlisted":false},{"type":"link","label":"Apache Airflow Data Pipelines","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-02-04-apache-airflow-data-pipelines/2023-02-04","docId":"IoT-and-Machine-Learning/AIOps/2023-02-04-apache-airflow-data-pipelines/index","unlisted":false},{"type":"link","label":"Apache Airflow Introduction","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-02-01-apache-airflow-introduction/2023-02-01","docId":"IoT-and-Machine-Learning/AIOps/2023-02-01-apache-airflow-introduction/index","unlisted":false},{"type":"link","label":"Python Ray Model Serving","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-31-python-ray-model-serving/2023-01-31","docId":"IoT-and-Machine-Learning/AIOps/2023-01-31-python-ray-model-serving/index","unlisted":false},{"type":"link","label":"Python Ray Deployments","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-29-python-ray-deployments/2023-01-29","docId":"IoT-and-Machine-Learning/AIOps/2023-01-29-python-ray-deployments/index","unlisted":false},{"type":"link","label":"Python Ray Remote Actors","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-26-python-ray-remote-actors/2023-01-26","docId":"IoT-and-Machine-Learning/AIOps/2023-01-26-python-ray-remote-actors/index","unlisted":false},{"type":"link","label":"Python Ray Remote Functions","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-23-python-ray-remote-functions/2023-01-23","docId":"IoT-and-Machine-Learning/AIOps/2023-01-23-python-ray-remote-functions/index","unlisted":false},{"type":"link","label":"Python Ray Basic Concepts","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-22-python-ray-introduction/2023-01-22","docId":"IoT-and-Machine-Learning/AIOps/2023-01-22-python-ray-introduction/index","unlisted":false},{"type":"link","label":"DVC Model Access","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-06-dvc-model-access/2023-01-05","docId":"IoT-and-Machine-Learning/AIOps/2023-01-06-dvc-model-access/index","unlisted":false},{"type":"link","label":"Data Version Control","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-05-dvc-model-version-control/2023-01-05","docId":"IoT-and-Machine-Learning/AIOps/2023-01-05-dvc-model-version-control/index","unlisted":false},{"type":"link","label":"Distributed training with TensorFlow","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-04-tf-distributed-strategy/2023-01-04","docId":"IoT-and-Machine-Learning/AIOps/2023-01-04-tf-distributed-strategy/index","unlisted":false},{"type":"link","label":"Tensorflow Tensorboard","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-03-tf-tensorboard/2023-01-03","docId":"IoT-and-Machine-Learning/AIOps/2023-01-03-tf-tensorboard/index","unlisted":false},{"type":"link","label":"Tensorflow Serving REST API","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-02-tf-serve-own-models/2023-01-02","docId":"IoT-and-Machine-Learning/AIOps/2023-01-02-tf-serve-own-models/index","unlisted":false},{"type":"link","label":"Tensorflow Docker Model Server","href":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-01-tf-model-server/2023-01-01","docId":"IoT-and-Machine-Learning/AIOps/2023-01-01-tf-model-server/index","unlisted":false}],"href":"/docs/category/aiops"}],"href":"/docs/category/machine-learning-ai-and-computer-vision"},{"type":"category","label":"Automation, Deep Vision and Robotics","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Home Automation","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"INSTAR go2rtc for Home Assistant","href":"/docs/Automation_and_Robotics/Home_Automation/2024-01-10--go2rtc/2024-01-09","docId":"Automation_and_Robotics/Home_Automation/2024-01-10--go2rtc/index","unlisted":false},{"type":"link","label":"Home Assistant with RTSPtoWeb","href":"/docs/Automation_and_Robotics/Home_Automation/2024-01-09--home-assistant-rtsptoweb/2024-01-09","docId":"Automation_and_Robotics/Home_Automation/2024-01-09--home-assistant-rtsptoweb/index","unlisted":false},{"type":"link","label":"Home Assistant, OpenHAB, Node-RED, ioBroker, MotionEye, ZoneMinder, Frigate, iSpy Agent, Kerberos Containerized (Docker)","href":"/docs/Automation_and_Robotics/Home_Automation/2023-04-18--home-assistant-node-red-iobroker-docker/2023-04-18","docId":"Automation_and_Robotics/Home_Automation/2023-04-18--home-assistant-node-red-iobroker-docker/index","unlisted":false},{"type":"link","label":"Camera Surveillance System with OpenCV","href":"/docs/Automation_and_Robotics/Home_Automation/2023-02-07-python-home-security/2023-02-07","docId":"Automation_and_Robotics/Home_Automation/2023-02-07-python-home-security/index","unlisted":false},{"type":"link","label":"(Re) Introduction to Home Assistant Auto-discovery","href":"/docs/Automation_and_Robotics/Home_Automation/2023-04-17-home-assistant-mqtt-autodiscovery-part-iii/2023-04-17","docId":"Automation_and_Robotics/Home_Automation/2023-04-17-home-assistant-mqtt-autodiscovery-part-iii/index","unlisted":false},{"type":"link","label":"OpenThread Border Router with Docker with Docker","href":"/docs/Automation_and_Robotics/Home_Automation/2023-01-23-thread-edge-router-docker/2023-01-23","docId":"Automation_and_Robotics/Home_Automation/2023-01-23-thread-edge-router-docker/index","unlisted":false},{"type":"link","label":"OpenThread Border Router","href":"/docs/Automation_and_Robotics/Home_Automation/2023-01-23-thread-edge-router/2023-01-23","docId":"Automation_and_Robotics/Home_Automation/2023-01-23-thread-edge-router/index","unlisted":false},{"type":"link","label":"MQTT Auto-Discovery - Use Node-RED to register Smarthome Devices","href":"/docs/Automation_and_Robotics/Home_Automation/2022-07-17-node-red-for-mqtt-autodiscovery/2022-07-17","docId":"Automation_and_Robotics/Home_Automation/2022-07-17-node-red-for-mqtt-autodiscovery/index","unlisted":false},{"type":"link","label":"Run Camera.UI with Docker-Compose","href":"/docs/Automation_and_Robotics/Home_Automation/2022-10-18-camera-ui-docker/2022-10-18","docId":"Automation_and_Robotics/Home_Automation/2022-10-18-camera-ui-docker/index","unlisted":false},{"type":"link","label":"Convert RTSP to HLS using FFmpeg","href":"/docs/Automation_and_Robotics/Home_Automation/2022-12-15--rtsp-to-hls-ffmpeg/2022-12-15","docId":"Automation_and_Robotics/Home_Automation/2022-12-15--rtsp-to-hls-ffmpeg/index","unlisted":false},{"type":"link","label":"Grafana IoT Dashboard","href":"/docs/Automation_and_Robotics/Home_Automation/2022-12-22--grafana-for-iot/2022-12-22","docId":"Automation_and_Robotics/Home_Automation/2022-12-22--grafana-for-iot/index","unlisted":false},{"type":"link","label":"OpenHab - MQTT Homie Convention","href":"/docs/Automation_and_Robotics/Home_Automation/2022-07-16-openhab-mqtt-homie/2022-07-16","docId":"Automation_and_Robotics/Home_Automation/2022-07-16-openhab-mqtt-homie/index","unlisted":false},{"type":"link","label":"Node-RED - MQTT Homie Convention","href":"/docs/Automation_and_Robotics/Home_Automation/2022-07-15-node-red-mqtt-homie/2022-07-15","docId":"Automation_and_Robotics/Home_Automation/2022-07-15-node-red-mqtt-homie/index","unlisted":false},{"type":"link","label":"Home Assistant - MQTT Auto-Discovery :: Configuration","href":"/docs/Automation_and_Robotics/Home_Automation/2022-07-10-home-assistant-mqtt-autodiscovery-part-i/2022-07-10","docId":"Automation_and_Robotics/Home_Automation/2022-07-10-home-assistant-mqtt-autodiscovery-part-i/index","unlisted":false},{"type":"link","label":"Home Assistant - MQTT Auto-Discovery :: Automation","href":"/docs/Automation_and_Robotics/Home_Automation/2022-07-11-home-assistant-mqtt-autodiscovery-part-ii/2022-07-11","docId":"Automation_and_Robotics/Home_Automation/2022-07-11-home-assistant-mqtt-autodiscovery-part-ii/index","unlisted":false},{"type":"link","label":"Home Assistant - Python Scripts as Service","href":"/docs/Automation_and_Robotics/Home_Automation/2022-07-12-home-assistant-mqtt-python/2022-07-12","docId":"Automation_and_Robotics/Home_Automation/2022-07-12-home-assistant-mqtt-python/index","unlisted":false},{"type":"link","label":"OpenHAB 3 INSTAR Camera Binding","href":"/docs/Automation_and_Robotics/Home_Automation/2020-12-03--openhab3-camera-binding/2020-12-03","docId":"Automation_and_Robotics/Home_Automation/2020-12-03--openhab3-camera-binding/index","unlisted":false},{"type":"link","label":"OpenHAB 3 MQTT Binding","href":"/docs/Automation_and_Robotics/Home_Automation/2020-12-02--openhab3-mqtt-binding/2020-12-02","docId":"Automation_and_Robotics/Home_Automation/2020-12-02--openhab3-mqtt-binding/index","unlisted":false},{"type":"link","label":"Trying out OpenHAB 3 in Docker","href":"/docs/Automation_and_Robotics/Home_Automation/2020-12-01--openhab3-in-docker/2020-12-01","docId":"Automation_and_Robotics/Home_Automation/2020-12-01--openhab3-in-docker/index","unlisted":false},{"type":"link","label":"Testing a new REST API in Node-RED","href":"/docs/Automation_and_Robotics/Home_Automation/2020-09-16--testing-new-rest-api-with-nodered/2020-09-16","docId":"Automation_and_Robotics/Home_Automation/2020-09-16--testing-new-rest-api-with-nodered/index","unlisted":false},{"type":"link","label":"A Mock REST API in Node-RED and Docker","href":"/docs/Automation_and_Robotics/Home_Automation/2020-09-15--mock-rest-api-with-nodered/2020-09-16","docId":"Automation_and_Robotics/Home_Automation/2020-09-15--mock-rest-api-with-nodered/index","unlisted":false},{"type":"link","label":"Loxone Miniserver","href":"/docs/Automation_and_Robotics/Home_Automation/2019-02-11--loxone-miniserver/2019-02-11","docId":"Automation_and_Robotics/Home_Automation/2019-02-11--loxone-miniserver/index","unlisted":false},{"type":"link","label":"Podman Homebridge to MQTT","href":"/docs/Automation_and_Robotics/Home_Automation/2019-12-01--podman-hombridge-to-mqtt/2019-12-01","docId":"Automation_and_Robotics/Home_Automation/2019-12-01--podman-hombridge-to-mqtt/index","unlisted":false},{"type":"link","label":"Zoneminder Dockerized","href":"/docs/Automation_and_Robotics/Home_Automation/2019-02-09--zoneminder-in-docker/2019-02-09","docId":"Automation_and_Robotics/Home_Automation/2019-02-09--zoneminder-in-docker/index","unlisted":false},{"type":"link","label":"Adding Homekit to your Node-RED Container in Podman","href":"/docs/Automation_and_Robotics/Home_Automation/2019-09-28--node-red-homekit-containerized/2019-09-28","docId":"Automation_and_Robotics/Home_Automation/2019-09-28--node-red-homekit-containerized/index","unlisted":false},{"type":"link","label":"Shinobi Video Surveillance","href":"/docs/Automation_and_Robotics/Home_Automation/2019-02-08--shinobi-on-debian/2019-02-08","docId":"Automation_and_Robotics/Home_Automation/2019-02-08--shinobi-on-debian/index","unlisted":false},{"type":"link","label":"Home Assistant, OpenHAB, Node-RED, ioBroker, MotionEye Containerized (Podman)","href":"/docs/Automation_and_Robotics/Home_Automation/2019-09-27--home-assistant-podman-centos8/2019-09-27","docId":"Automation_and_Robotics/Home_Automation/2019-09-27--home-assistant-podman-centos8/index","unlisted":false},{"type":"link","label":"MotionEye Video Surveillance","href":"/docs/Automation_and_Robotics/Home_Automation/2019-02-07--motioneye-on-debian/2019-02-07","docId":"Automation_and_Robotics/Home_Automation/2019-02-07--motioneye-on-debian/index","unlisted":false},{"type":"link","label":"Installing MotionEye on CentOS8 with Podman","href":"/docs/Automation_and_Robotics/Home_Automation/2019-09-24--motioneye-podman-centos8/2019-09-24","docId":"Automation_and_Robotics/Home_Automation/2019-09-24--motioneye-podman-centos8/index","unlisted":false},{"type":"link","label":"Zigbee Sensors in FHEM","href":"/docs/Automation_and_Robotics/Home_Automation/2019-01-05--zigbee2mqtt-xiaomi-fhem/2019-01-05","docId":"Automation_and_Robotics/Home_Automation/2019-01-05--zigbee2mqtt-xiaomi-fhem/index","unlisted":false},{"type":"link","label":"Installing ioBroker on CentOS8 with Podman","href":"/docs/Automation_and_Robotics/Home_Automation/2019-09-24--iobroker-podman-centos8/2019-09-24","docId":"Automation_and_Robotics/Home_Automation/2019-09-24--iobroker-podman-centos8/index","unlisted":false},{"type":"link","label":"OpenHAB2 and MQTT","href":"/docs/Automation_and_Robotics/Home_Automation/2018-12-01--openhab2-on-debian/2018-12-01","docId":"Automation_and_Robotics/Home_Automation/2018-12-01--openhab2-on-debian/index","unlisted":false},{"type":"link","label":"MQTT Camera AI Enhanced Security","href":"/docs/Automation_and_Robotics/Home_Automation/2019-09-23--mqtt-camera-ai-video-security/2019-09-23","docId":"Automation_and_Robotics/Home_Automation/2019-09-23--mqtt-camera-ai-video-security/index","unlisted":false},{"type":"link","label":"Home Assistant and MQTT","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-30--home-assistant-on-debian/2018-11-30","docId":"Automation_and_Robotics/Home_Automation/2018-11-30--home-assistant-on-debian/index","unlisted":false},{"type":"link","label":"Node-RED and MQTT","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-29--node-red-and-mqtt/2018-11-29","docId":"Automation_and_Robotics/Home_Automation/2018-11-29--node-red-and-mqtt/index","unlisted":false},{"type":"link","label":"Developing an App for the Homey Smarthome Gateway","href":"/docs/Automation_and_Robotics/Home_Automation/2019-03-26--writing-a-homey-app/2019-03-26","docId":"Automation_and_Robotics/Home_Automation/2019-03-26--writing-a-homey-app/index","unlisted":false},{"type":"link","label":"Node-RED on Android","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-28--node-red-on-android/2018-11-28","docId":"Automation_and_Robotics/Home_Automation/2018-11-28--node-red-on-android/index","unlisted":false},{"type":"link","label":"IFTTT Alarmserver for IP Cameras","href":"/docs/Automation_and_Robotics/Home_Automation/2019-02-16--ifttt-ip-camera-alarmserver/2019-02-15","docId":"Automation_and_Robotics/Home_Automation/2019-02-16--ifttt-ip-camera-alarmserver/index","unlisted":false},{"type":"link","label":"Node-RED SQL Logging Datastreams","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-27--node-red-sql-logging/2018-11-27","docId":"Automation_and_Robotics/Home_Automation/2018-11-27--node-red-sql-logging/index","unlisted":false},{"type":"link","label":"IFTTT IP Camera","href":"/docs/Automation_and_Robotics/Home_Automation/2019-02-15--ifttt-ip-camera/2019-02-15","docId":"Automation_and_Robotics/Home_Automation/2019-02-15--ifttt-ip-camera/index","unlisted":false},{"type":"link","label":"Node-RED Dashboard and Videostreams","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-26--node-red-and-live-video/2018-11-26","docId":"Automation_and_Robotics/Home_Automation/2018-11-26--node-red-and-live-video/index","unlisted":false},{"type":"link","label":"Webhooks with URL Queries","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-25--webhooks-with-url-queries/2018-11-25","docId":"Automation_and_Robotics/Home_Automation/2018-11-25--webhooks-with-url-queries/index","unlisted":false},{"type":"link","label":"Node-RED Webhooks","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-24--node-red-webhooks/2018-11-24","docId":"Automation_and_Robotics/Home_Automation/2018-11-24--node-red-webhooks/index","unlisted":false},{"type":"link","label":"Node-RED Flows and how to Import them","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-23--node-red-flows/2018-11-23","docId":"Automation_and_Robotics/Home_Automation/2018-11-23--node-red-flows/index","unlisted":false},{"type":"link","label":"Creating Node-RED Admin Panel using node-red-dashboard","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-21--nodered-dashboard-getting-started/2018-11-21","docId":"Automation_and_Robotics/Home_Automation/2018-11-21--nodered-dashboard-getting-started/index","unlisted":false},{"type":"link","label":"Node-RED Interaction over HTTP","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-20--nodered-http-connect/2018-11-20","docId":"Automation_and_Robotics/Home_Automation/2018-11-20--nodered-http-connect/index","unlisted":false},{"type":"link","label":"A Collection of Node-RED MQTT Recipes","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-17--nodered-mqtt-connect/2018-11-17","docId":"Automation_and_Robotics/Home_Automation/2018-11-17--nodered-mqtt-connect/index","unlisted":false},{"type":"link","label":"Node-RED with IFTTT","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-13--nodered-ifttt/2018-11-13","docId":"Automation_and_Robotics/Home_Automation/2018-11-13--nodered-ifttt/index","unlisted":false},{"type":"link","label":"Using SQLite with Node-RED on Windows","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-12--nodered-sqlite/2018-11-12","docId":"Automation_and_Robotics/Home_Automation/2018-11-12--nodered-sqlite/index","unlisted":false},{"type":"link","label":"Creating a Dashboard displaying Cryptocurrency Data using Node-RED","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-05--nodered-cryptocurrency-dashboard/2018-11-05","docId":"Automation_and_Robotics/Home_Automation/2018-11-05--nodered-cryptocurrency-dashboard/index","unlisted":false},{"type":"link","label":"Home Automation and IP Cameras","href":"/docs/Automation_and_Robotics/Home_Automation/2018-11-01--openhab2-mqtt-nodered/2018-11-01","docId":"Automation_and_Robotics/Home_Automation/2018-11-01--openhab2-mqtt-nodered/index","unlisted":false},{"type":"link","label":"Getting Started with Node-RED (Windows 10 Edition)","href":"/docs/Automation_and_Robotics/Home_Automation/2018-10-28--nodered-getting-started/2018-10-28","docId":"Automation_and_Robotics/Home_Automation/2018-10-28--nodered-getting-started/index","unlisted":false}],"href":"/docs/category/home-automation"},{"type":"category","label":"MQTT","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"EMQX MQTT Broker with Docker","href":"/docs/Automation_and_Robotics/MQTT/2023-07-25-emqx-mqtt-broker-docker/2023-07-25","docId":"Automation_and_Robotics/MQTT/2023-07-25-emqx-mqtt-broker-docker/index","unlisted":false},{"type":"link","label":"Mosquitto Broker Docker Cross-Compile","href":"/docs/Automation_and_Robotics/MQTT/2022-07-24-mosquitto-broker-cross-compilation/2022-07-24","docId":"Automation_and_Robotics/MQTT/2022-07-24-mosquitto-broker-cross-compilation/index","unlisted":false},{"type":"link","label":"Mosquitto Broker from Source","href":"/docs/Automation_and_Robotics/MQTT/2022-07-23-mosquitto-broker-compilation/2022-07-23","docId":"Automation_and_Robotics/MQTT/2022-07-23-mosquitto-broker-compilation/index","unlisted":false},{"type":"link","label":"Go - MQTT Hello World","href":"/docs/Automation_and_Robotics/MQTT/2022-07-22-go-hello-world/2022-07-22","docId":"Automation_and_Robotics/MQTT/2022-07-22-go-hello-world/index","unlisted":false},{"type":"link","label":"Rust - MQTT Hello World","href":"/docs/Automation_and_Robotics/MQTT/2022-07-21-rust-hello-world/2022-07-21","docId":"Automation_and_Robotics/MQTT/2022-07-21-rust-hello-world/index","unlisted":false},{"type":"link","label":"INSTAR MQTTv5 with Python - Client Connection","href":"/docs/Automation_and_Robotics/MQTT/2022-06-23-instar-mqtt-python-part-I/2022-06-23","docId":"Automation_and_Robotics/MQTT/2022-06-23-instar-mqtt-python-part-I/index","unlisted":false},{"type":"link","label":"INSTAR MQTT with RabbitMQ","href":"/docs/Automation_and_Robotics/MQTT/2022-03-30--mqtt-with-rabbit-mq/2022-03-30","docId":"Automation_and_Robotics/MQTT/2022-03-30--mqtt-with-rabbit-mq/index","unlisted":false},{"type":"link","label":"MQTT Message Server and Angular Frontend","href":"/docs/Automation_and_Robotics/MQTT/2022-03-28--mqtt-message-server/2022-03-28","docId":"Automation_and_Robotics/MQTT/2022-03-28--mqtt-message-server/index","unlisted":false},{"type":"link","label":"Building Eclipse Mosquitto v2 from Source","href":"/docs/Automation_and_Robotics/MQTT/2022-03-27--build-mosquitto-from-source/2022-03-27","docId":"Automation_and_Robotics/MQTT/2022-03-27--build-mosquitto-from-source/index","unlisted":false},{"type":"link","label":"MQTT Clients","href":"/docs/Automation_and_Robotics/MQTT/2022-03-26--mqtt-clients/2022-03-26","docId":"Automation_and_Robotics/MQTT/2022-03-26--mqtt-clients/index","unlisted":false},{"type":"link","label":"Mosquitto v2 MQTT Broker on Debian Bullseye","href":"/docs/Automation_and_Robotics/MQTT/2022-02-01--mosquitto-2-broker/2022-02-01","docId":"Automation_and_Robotics/MQTT/2022-02-01--mosquitto-2-broker/index","unlisted":false},{"type":"link","label":"Go Paho MQTT Client","href":"/docs/Automation_and_Robotics/MQTT/2021-09-12--golang-paho-mqtt/2021-09-12","docId":"Automation_and_Robotics/MQTT/2021-09-12--golang-paho-mqtt/index","unlisted":false},{"type":"link","label":"MQTT Networks with Home Assistant","href":"/docs/Automation_and_Robotics/MQTT/2019-08-11--mqtt-home-assistant/2019-08-11","docId":"Automation_and_Robotics/MQTT/2019-08-11--mqtt-home-assistant/index","unlisted":false},{"type":"link","label":"MQTT Networks with Athom Homey","href":"/docs/Automation_and_Robotics/MQTT/2019-08-10--mqtt-athom-homey/2019-08-10","docId":"Automation_and_Robotics/MQTT/2019-08-10--mqtt-athom-homey/index","unlisted":false},{"type":"link","label":"MQTT Networks with homee","href":"/docs/Automation_and_Robotics/MQTT/2019-08-09--mqtt-homee/2019-08-09","docId":"Automation_and_Robotics/MQTT/2019-08-09--mqtt-homee/index","unlisted":false},{"type":"link","label":"MQTT Networks with Homematic","href":"/docs/Automation_and_Robotics/MQTT/2019-08-08--mqtt-homematic/2019-08-08","docId":"Automation_and_Robotics/MQTT/2019-08-08--mqtt-homematic/index","unlisted":false},{"type":"link","label":"MQTT Networks with ioBroker","href":"/docs/Automation_and_Robotics/MQTT/2019-08-07--mqtt-iobroker/2019-08-07","docId":"Automation_and_Robotics/MQTT/2019-08-07--mqtt-iobroker/index","unlisted":false},{"type":"link","label":"MQTT Networks with Node-RED","href":"/docs/Automation_and_Robotics/MQTT/2019-08-06--mqtt-node-red/2019-08-06","docId":"Automation_and_Robotics/MQTT/2019-08-06--mqtt-node-red/index","unlisted":false},{"type":"link","label":"MQTT Networks with OpenHAB 2","href":"/docs/Automation_and_Robotics/MQTT/2019-08-05--mqtt-openhab2/2019-08-05","docId":"Automation_and_Robotics/MQTT/2019-08-05--mqtt-openhab2/index","unlisted":false},{"type":"link","label":"MQTT Android Dashboards","href":"/docs/Automation_and_Robotics/MQTT/2019-08-04--mqtt-android-dashboards/2019-08-04","docId":"Automation_and_Robotics/MQTT/2019-08-04--mqtt-android-dashboards/index","unlisted":false},{"type":"link","label":"Debugging MQTT Sensor Networks","href":"/docs/Automation_and_Robotics/MQTT/2019-08-03--mqtt-debugging/2019-08-03","docId":"Automation_and_Robotics/MQTT/2019-08-03--mqtt-debugging/index","unlisted":false}],"href":"/docs/category/mqtt"},{"type":"category","label":"Robotics & Simulation","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Tello Drone - Getting Started","href":"/docs/Automation_and_Robotics/Robotics_Simulation/2023-12-16--tellopy-drone-api/2023-12-16","docId":"Automation_and_Robotics/Robotics_Simulation/2023-12-16--tellopy-drone-api/index","unlisted":false},{"type":"link","label":"ROS2 Webots Robot Simulation","href":"/docs/Automation_and_Robotics/Robotics_Simulation/2023-11-26--ros2-webots/2023-11-26","docId":"Automation_and_Robotics/Robotics_Simulation/2023-11-26--ros2-webots/index","unlisted":false},{"type":"link","label":"ROS2 Gazebo Robot Simulation","href":"/docs/Automation_and_Robotics/Robotics_Simulation/2023-11-26--ros2-gazebo-simulation/2023-11-26","docId":"Automation_and_Robotics/Robotics_Simulation/2023-11-26--ros2-gazebo-simulation/index","unlisted":false},{"type":"link","label":"ROS2 Graph Concepts","href":"/docs/Automation_and_Robotics/Robotics_Simulation/2023-11-24--ros2-graph/2023-11-24","docId":"Automation_and_Robotics/Robotics_Simulation/2023-11-24--ros2-graph/index","unlisted":false},{"type":"link","label":"Gazebo & ROS2 Basic Installation","href":"/docs/Automation_and_Robotics/Robotics_Simulation/2023-11-19--ros2-gazebo-installation/2023-11-19","docId":"Automation_and_Robotics/Robotics_Simulation/2023-11-19--ros2-gazebo-installation/index","unlisted":false}],"href":"/docs/category/robotics--simulation"}],"href":"/docs/category/automation-deep-vision-and-robotics"}]},"docs":{"Automation_and_Robotics/Home_Automation/2018-10-28--nodered-getting-started/index":{"id":"Automation_and_Robotics/Home_Automation/2018-10-28--nodered-getting-started/index","title":"Getting Started with Node-RED (Windows 10 Edition)","description":"Harbin, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-01--openhab2-mqtt-nodered/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-01--openhab2-mqtt-nodered/index","title":"Home Automation and IP Cameras","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-05--nodered-cryptocurrency-dashboard/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-05--nodered-cryptocurrency-dashboard/index","title":"Creating a Dashboard displaying Cryptocurrency Data using Node-RED","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-12--nodered-sqlite/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-12--nodered-sqlite/index","title":"Using SQLite with Node-RED on Windows","description":"Pokhara, Nepal","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-13--nodered-ifttt/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-13--nodered-ifttt/index","title":"Node-RED with IFTTT","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-17--nodered-mqtt-connect/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-17--nodered-mqtt-connect/index","title":"A Collection of Node-RED MQTT Recipes","description":"Tanna Island, Vanuatu","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-20--nodered-http-connect/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-20--nodered-http-connect/index","title":"Node-RED Interaction over HTTP","description":"Harbin, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-21--nodered-dashboard-getting-started/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-21--nodered-dashboard-getting-started/index","title":"Creating Node-RED Admin Panel using node-red-dashboard","description":"Harbin, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-23--node-red-flows/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-23--node-red-flows/index","title":"Node-RED Flows and how to Import them","description":"Abashiri, Japan","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-24--node-red-webhooks/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-24--node-red-webhooks/index","title":"Node-RED Webhooks","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-25--webhooks-with-url-queries/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-25--webhooks-with-url-queries/index","title":"Webhooks with URL Queries","description":"Sapporo, Japan","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-26--node-red-and-live-video/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-26--node-red-and-live-video/index","title":"Node-RED Dashboard and Videostreams","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-27--node-red-sql-logging/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-27--node-red-sql-logging/index","title":"Node-RED SQL Logging Datastreams","description":"Annapurna, Nepal","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-28--node-red-on-android/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-28--node-red-on-android/index","title":"Node-RED on Android","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-29--node-red-and-mqtt/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-29--node-red-and-mqtt/index","title":"Node-RED and MQTT","description":"Mongkok, Hong Kong","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-11-30--home-assistant-on-debian/index":{"id":"Automation_and_Robotics/Home_Automation/2018-11-30--home-assistant-on-debian/index","title":"Home Assistant and MQTT","description":"Harbin, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2018-12-01--openhab2-on-debian/index":{"id":"Automation_and_Robotics/Home_Automation/2018-12-01--openhab2-on-debian/index","title":"OpenHAB2 and MQTT","description":"Kathmandu, Nepal","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-01-05--zigbee2mqtt-xiaomi-fhem/index":{"id":"Automation_and_Robotics/Home_Automation/2019-01-05--zigbee2mqtt-xiaomi-fhem/index","title":"Zigbee Sensors in FHEM","description":"Hongkong","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-02-07--motioneye-on-debian/index":{"id":"Automation_and_Robotics/Home_Automation/2019-02-07--motioneye-on-debian/index","title":"MotionEye Video Surveillance","description":"Harbin, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-02-08--shinobi-on-debian/index":{"id":"Automation_and_Robotics/Home_Automation/2019-02-08--shinobi-on-debian/index","title":"Shinobi Video Surveillance","description":"Furano, Japan","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-02-09--zoneminder-in-docker/index":{"id":"Automation_and_Robotics/Home_Automation/2019-02-09--zoneminder-in-docker/index","title":"Zoneminder Dockerized","description":"Furano, Japan","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-02-11--loxone-miniserver/index":{"id":"Automation_and_Robotics/Home_Automation/2019-02-11--loxone-miniserver/index","title":"Loxone Miniserver","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-02-15--ifttt-ip-camera/index":{"id":"Automation_and_Robotics/Home_Automation/2019-02-15--ifttt-ip-camera/index","title":"IFTTT IP Camera","description":"Mustang, Nepal","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-02-16--ifttt-ip-camera-alarmserver/index":{"id":"Automation_and_Robotics/Home_Automation/2019-02-16--ifttt-ip-camera-alarmserver/index","title":"IFTTT Alarmserver for IP Cameras","description":"Mustang, Nepal","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-03-26--writing-a-homey-app/index":{"id":"Automation_and_Robotics/Home_Automation/2019-03-26--writing-a-homey-app/index","title":"Developing an App for the Homey Smarthome Gateway","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-09-23--mqtt-camera-ai-video-security/index":{"id":"Automation_and_Robotics/Home_Automation/2019-09-23--mqtt-camera-ai-video-security/index","title":"MQTT Camera AI Enhanced Security","description":"Central, Hong Kong","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-09-24--iobroker-podman-centos8/index":{"id":"Automation_and_Robotics/Home_Automation/2019-09-24--iobroker-podman-centos8/index","title":"Installing ioBroker on CentOS8 with Podman","description":"Shanghai, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-09-24--motioneye-podman-centos8/index":{"id":"Automation_and_Robotics/Home_Automation/2019-09-24--motioneye-podman-centos8/index","title":"Installing MotionEye on CentOS8 with Podman","description":"Shanghai, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-09-27--home-assistant-podman-centos8/index":{"id":"Automation_and_Robotics/Home_Automation/2019-09-27--home-assistant-podman-centos8/index","title":"Home Assistant, OpenHAB, Node-RED, ioBroker, MotionEye Containerized (Podman)","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-09-28--node-red-homekit-containerized/index":{"id":"Automation_and_Robotics/Home_Automation/2019-09-28--node-red-homekit-containerized/index","title":"Adding Homekit to your Node-RED Container in Podman","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2019-12-01--podman-hombridge-to-mqtt/index":{"id":"Automation_and_Robotics/Home_Automation/2019-12-01--podman-hombridge-to-mqtt/index","title":"Podman Homebridge to MQTT","description":"Sapporo, Japan","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2020-09-15--mock-rest-api-with-nodered/index":{"id":"Automation_and_Robotics/Home_Automation/2020-09-15--mock-rest-api-with-nodered/index","title":"A Mock REST API in Node-RED and Docker","description":"Koh Rong, Cambodia","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2020-09-16--testing-new-rest-api-with-nodered/index":{"id":"Automation_and_Robotics/Home_Automation/2020-09-16--testing-new-rest-api-with-nodered/index","title":"Testing a new REST API in Node-RED","description":"Koh Rong, Cambodia","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2020-12-01--openhab3-in-docker/index":{"id":"Automation_and_Robotics/Home_Automation/2020-12-01--openhab3-in-docker/index","title":"Trying out OpenHAB 3 in Docker","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2020-12-02--openhab3-mqtt-binding/index":{"id":"Automation_and_Robotics/Home_Automation/2020-12-02--openhab3-mqtt-binding/index","title":"OpenHAB 3 MQTT Binding","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2020-12-03--openhab3-camera-binding/index":{"id":"Automation_and_Robotics/Home_Automation/2020-12-03--openhab3-camera-binding/index","title":"OpenHAB 3 INSTAR Camera Binding","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2022-07-10-home-assistant-mqtt-autodiscovery-part-i/index":{"id":"Automation_and_Robotics/Home_Automation/2022-07-10-home-assistant-mqtt-autodiscovery-part-i/index","title":"Home Assistant - MQTT Auto-Discovery :: Configuration","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2022-07-11-home-assistant-mqtt-autodiscovery-part-ii/index":{"id":"Automation_and_Robotics/Home_Automation/2022-07-11-home-assistant-mqtt-autodiscovery-part-ii/index","title":"Home Assistant - MQTT Auto-Discovery :: Automation","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2022-07-12-home-assistant-mqtt-python/index":{"id":"Automation_and_Robotics/Home_Automation/2022-07-12-home-assistant-mqtt-python/index","title":"Home Assistant - Python Scripts as Service","description":"The discovery of MQTT devices will enable one to use MQTT devices with only minimal configuration effort on the side of Home Assistant. Two parts are required on the device side - The configuration topic which contains the necessary device type and unique identifier, and the remaining device configuration without the device type.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2022-07-15-node-red-mqtt-homie/index":{"id":"Automation_and_Robotics/Home_Automation/2022-07-15-node-red-mqtt-homie/index","title":"Node-RED - MQTT Homie Convention","description":"I want to use Node-RED to explore how to configure devices using the Homie Convention with the goal of adding this feature to INSTAR MQTT cameras.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2022-07-16-openhab-mqtt-homie/index":{"id":"Automation_and_Robotics/Home_Automation/2022-07-16-openhab-mqtt-homie/index","title":"OpenHab - MQTT Homie Convention","description":"I want to use OpenHab 3 to explore how to configure devices using the Homie Convention with the goal of adding this feature to INSTAR MQTT cameras. I already set-up the OpenHab MQTT Binding which supports the convention. So all I have to do is to add a few configuration topics to register a Homie Device with our MQTT broker using the MQTT Explorer.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2022-07-17-node-red-for-mqtt-autodiscovery/index":{"id":"Automation_and_Robotics/Home_Automation/2022-07-17-node-red-for-mqtt-autodiscovery/index","title":"MQTT Auto-Discovery - Use Node-RED to register Smarthome Devices","description":"Previously I wrote a Python Script that allowed me to register MQTT devices with Home Assistant using the HA internal auto-discovery service. The same script can be used to register those devices with OpenHAB using the homie convention. Now I want to use Node-RED to dynamically register devices, instead of providing fixed configuration files for each device.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2022-10-18-camera-ui-docker/index":{"id":"Automation_and_Robotics/Home_Automation/2022-10-18-camera-ui-docker/index","title":"Run Camera.UI with Docker-Compose","description":"camera.ui is a NVR like PWA to control your RTSP capable cameras with.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2022-12-15--rtsp-to-hls-ffmpeg/index":{"id":"Automation_and_Robotics/Home_Automation/2022-12-15--rtsp-to-hls-ffmpeg/index","title":"Convert RTSP to HLS using FFmpeg","description":"INSTAR IP Camera RTSP Stream to HLS with FFMPEG","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2022-12-22--grafana-for-iot/index":{"id":"Automation_and_Robotics/Home_Automation/2022-12-22--grafana-for-iot/index","title":"Grafana IoT Dashboard","description":"Building IoT Visualizations using Grafana","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2023-01-23-thread-edge-router-docker/index":{"id":"Automation_and_Robotics/Home_Automation/2023-01-23-thread-edge-router-docker/index","title":"OpenThread Border Router with Docker with Docker","description":"Build an OpenThread Border Router with Raspberry Pi 3B+ and Pitaya Go.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2023-01-23-thread-edge-router/index":{"id":"Automation_and_Robotics/Home_Automation/2023-01-23-thread-edge-router/index","title":"OpenThread Border Router","description":"Build an OpenThread Border Router with Raspberry Pi 3B+ and Pitaya Go.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2023-02-07-python-home-security/index":{"id":"Automation_and_Robotics/Home_Automation/2023-02-07-python-home-security/index","title":"Camera Surveillance System with OpenCV","description":"Using OpenCV to detect motion in an RTSP Stream and display detection in an PyQt Interface","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2023-04-17-home-assistant-mqtt-autodiscovery-part-iii/index":{"id":"Automation_and_Robotics/Home_Automation/2023-04-17-home-assistant-mqtt-autodiscovery-part-iii/index","title":"(Re) Introduction to Home Assistant Auto-discovery","description":"Using the INSTAR IP Cameras MQTT Interface to add your Camera to Home Assistant.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2023-04-18--home-assistant-node-red-iobroker-docker/index":{"id":"Automation_and_Robotics/Home_Automation/2023-04-18--home-assistant-node-red-iobroker-docker/index","title":"Home Assistant, OpenHAB, Node-RED, ioBroker, MotionEye, ZoneMinder, Frigate, iSpy Agent, Kerberos Containerized (Docker)","description":"Smarthome Cheat Sheet (Docker Edition)","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2024-01-09--home-assistant-rtsptoweb/index":{"id":"Automation_and_Robotics/Home_Automation/2024-01-09--home-assistant-rtsptoweb/index","title":"Home Assistant with RTSPtoWeb","description":"Home Assistant with WebRTC for INSTAR IP cameras using RTSPtoWeb.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Home_Automation/2024-01-10--go2rtc/index":{"id":"Automation_and_Robotics/Home_Automation/2024-01-10--go2rtc/index","title":"INSTAR go2rtc for Home Assistant","description":"Use go2rtc to embed your INSTAR IP camera\'s webRTC live video in Home Assistant, ioBroker, Node-RED or OpenHab (Docker)","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2019-08-03--mqtt-debugging/index":{"id":"Automation_and_Robotics/MQTT/2019-08-03--mqtt-debugging/index","title":"Debugging MQTT Sensor Networks","description":"Mustang, Nepal","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2019-08-04--mqtt-android-dashboards/index":{"id":"Automation_and_Robotics/MQTT/2019-08-04--mqtt-android-dashboards/index","title":"MQTT Android Dashboards","description":"Shanghai, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2019-08-05--mqtt-openhab2/index":{"id":"Automation_and_Robotics/MQTT/2019-08-05--mqtt-openhab2/index","title":"MQTT Networks with OpenHAB 2","description":"Bhaktapur, Nepal","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2019-08-06--mqtt-node-red/index":{"id":"Automation_and_Robotics/MQTT/2019-08-06--mqtt-node-red/index","title":"MQTT Networks with Node-RED","description":"Mustang, Nepal","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2019-08-07--mqtt-iobroker/index":{"id":"Automation_and_Robotics/MQTT/2019-08-07--mqtt-iobroker/index","title":"MQTT Networks with ioBroker","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2019-08-08--mqtt-homematic/index":{"id":"Automation_and_Robotics/MQTT/2019-08-08--mqtt-homematic/index","title":"MQTT Networks with Homematic","description":"Central, Hong Kong","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2019-08-09--mqtt-homee/index":{"id":"Automation_and_Robotics/MQTT/2019-08-09--mqtt-homee/index","title":"MQTT Networks with homee","description":"Kowloon, Hong Kong","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2019-08-10--mqtt-athom-homey/index":{"id":"Automation_and_Robotics/MQTT/2019-08-10--mqtt-athom-homey/index","title":"MQTT Networks with Athom Homey","description":"Central, Hong Kong","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2019-08-11--mqtt-home-assistant/index":{"id":"Automation_and_Robotics/MQTT/2019-08-11--mqtt-home-assistant/index","title":"MQTT Networks with Home Assistant","description":"Taipa, Macau","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2021-09-12--golang-paho-mqtt/index":{"id":"Automation_and_Robotics/MQTT/2021-09-12--golang-paho-mqtt/index","title":"Go Paho MQTT Client","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2022-02-01--mosquitto-2-broker/index":{"id":"Automation_and_Robotics/MQTT/2022-02-01--mosquitto-2-broker/index","title":"Mosquitto v2 MQTT Broker on Debian Bullseye","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2022-03-26--mqtt-clients/index":{"id":"Automation_and_Robotics/MQTT/2022-03-26--mqtt-clients/index","title":"MQTT Clients","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2022-03-27--build-mosquitto-from-source/index":{"id":"Automation_and_Robotics/MQTT/2022-03-27--build-mosquitto-from-source/index","title":"Building Eclipse Mosquitto v2 from Source","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2022-03-28--mqtt-message-server/index":{"id":"Automation_and_Robotics/MQTT/2022-03-28--mqtt-message-server/index","title":"MQTT Message Server and Angular Frontend","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2022-03-30--mqtt-with-rabbit-mq/index":{"id":"Automation_and_Robotics/MQTT/2022-03-30--mqtt-with-rabbit-mq/index","title":"INSTAR MQTT with RabbitMQ","description":"Using RabbitMQ as MQTT Broker for your INSTAR IP Camera","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2022-06-23-instar-mqtt-python-part-I/index":{"id":"Automation_and_Robotics/MQTT/2022-06-23-instar-mqtt-python-part-I/index","title":"INSTAR MQTTv5 with Python - Client Connection","description":"The discovery of MQTT devices will enable one to use MQTT devices with only minimal configuration effort on the side of Home Assistant. Two parts are required on the device side - The configuration topic which contains the necessary device type and unique identifier, and the remaining device configuration without the device type.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2022-07-21-rust-hello-world/index":{"id":"Automation_and_Robotics/MQTT/2022-07-21-rust-hello-world/index","title":"Rust - MQTT Hello World","description":"Rust is a multi-paradigm programming language designed for performance and safety, especially safe concurrency. Rust is syntactically similar to C++, but can guarantee memory safety by using a borrow checker to validate references.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2022-07-22-go-hello-world/index":{"id":"Automation_and_Robotics/MQTT/2022-07-22-go-hello-world/index","title":"Go - MQTT Hello World","description":"Writing a Go program that connects to my camera MQTT broker, subscribes to the last-will topic and publishes updates to the privacy mask to turn it on and off again after 15s. The client disconnects after 250ms after that.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2022-07-23-mosquitto-broker-compilation/index":{"id":"Automation_and_Robotics/MQTT/2022-07-23-mosquitto-broker-compilation/index","title":"Mosquitto Broker from Source","description":"Building the Mosquitto MQTT broker from source on an Arch Linux System with Websocket support.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2022-07-24-mosquitto-broker-cross-compilation/index":{"id":"Automation_and_Robotics/MQTT/2022-07-24-mosquitto-broker-cross-compilation/index","title":"Mosquitto Broker Docker Cross-Compile","description":"In the previous article I compiled the Mosquitto broker on Arch Linux and was able to get it to work with Websocket support. The target system - an INSTAR IP camera - uses an ARM processor which means that I have to find a way to cross-compile a binary that I can run on that system","sidebar":"tutorialSidebar"},"Automation_and_Robotics/MQTT/2023-07-25-emqx-mqtt-broker-docker/index":{"id":"Automation_and_Robotics/MQTT/2023-07-25-emqx-mqtt-broker-docker/index","title":"EMQX MQTT Broker with Docker","description":"EMQX is an open-source (opens new window), highly scalable, and feature-rich MQTT broker designed for IoT and real-time messaging applications.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Robotics_Simulation/2023-11-19--ros2-gazebo-installation/index":{"id":"Automation_and_Robotics/Robotics_Simulation/2023-11-19--ros2-gazebo-installation/index","title":"Gazebo & ROS2 Basic Installation","description":"Gazebo brings a fresh approach to simulation with a complete toolbox of development libraries and cloud services to make simulation easy.","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Robotics_Simulation/2023-11-24--ros2-graph/index":{"id":"Automation_and_Robotics/Robotics_Simulation/2023-11-24--ros2-graph/index","title":"ROS2 Graph Concepts","description":"ROS2 Architecture and Concepts","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Robotics_Simulation/2023-11-26--ros2-gazebo-simulation/index":{"id":"Automation_and_Robotics/Robotics_Simulation/2023-11-26--ros2-gazebo-simulation/index","title":"ROS2 Gazebo Robot Simulation","description":"Launch a Simulation with Gazebo and ROS2","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Robotics_Simulation/2023-11-26--ros2-webots/index":{"id":"Automation_and_Robotics/Robotics_Simulation/2023-11-26--ros2-webots/index","title":"ROS2 Webots Robot Simulation","description":"Configure the Webots simulator with ROS2","sidebar":"tutorialSidebar"},"Automation_and_Robotics/Robotics_Simulation/2023-12-16--tellopy-drone-api/index":{"id":"Automation_and_Robotics/Robotics_Simulation/2023-12-16--tellopy-drone-api/index","title":"Tello Drone - Getting Started","description":"Introduction to programming your Tello Drone using Python","sidebar":"tutorialSidebar"},"Development/Go/2021-02-21-gofiber-container-gatsby/index":{"id":"Development/Go/2021-02-21-gofiber-container-gatsby/index","title":"GoFiber Container for your Gatsby Build","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Go/2021-06-03--mqtt-with-golang/index":{"id":"Development/Go/2021-06-03--mqtt-with-golang/index","title":"Paho MQTT Client with Golang","description":"Mong Kok, Hongkong","sidebar":"tutorialSidebar"},"Development/Go/2021-09-10--go-websockets/index":{"id":"Development/Go/2021-09-10--go-websockets/index","title":"Go Websockets","description":"Jomsom, Nepal","sidebar":"tutorialSidebar"},"Development/Go/2021-09-11--golang-refresher-fmt-strings/index":{"id":"Development/Go/2021-09-11--golang-refresher-fmt-strings/index","title":"Golang Refresher :: fmt & strings","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"Development/Go/2021-09-11--golang-refresher-math-os/index":{"id":"Development/Go/2021-09-11--golang-refresher-math-os/index","title":"Golang Refresher :: math & os","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"Development/Go/2021-09-11--golang-refresher-network/index":{"id":"Development/Go/2021-09-11--golang-refresher-network/index","title":"Golang Refresher :: url & http","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"Development/Go/2021-09-21--golang-react-starter-part-i/index":{"id":"Development/Go/2021-09-21--golang-react-starter-part-i/index","title":"Getting started with Go and React - Webservice, Routing and Status Log","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Go/2021-09-22--golang-react-starter-part-ii/index":{"id":"Development/Go/2021-09-22--golang-react-starter-part-ii/index","title":"Getting started with Go and React - API Routes","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Go/2021-09-23--golang-react-starter-part-iii/index":{"id":"Development/Go/2021-09-23--golang-react-starter-part-iii/index","title":"Getting started with Go and React - PostgreSQL","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Go/2021-09-24--golang-react-starter-part-iv/index":{"id":"Development/Go/2021-09-24--golang-react-starter-part-iv/index","title":"Getting started with Go and React - React & REST API\'s","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Go/2021-10-08--goftp/index":{"id":"Development/Go/2021-10-08--goftp/index","title":"goFTP","description":"Victoria , Hong Kong","sidebar":"tutorialSidebar"},"Development/Go/2022-06-15-wails-go-react/index":{"id":"Development/Go/2022-06-15-wails-go-react/index","title":"Wails - Build desktop apps using Go & React","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"Development/Go/2022-10-04-go-ntp-client/index":{"id":"Development/Go/2022-10-04-go-ntp-client/index","title":"Build a NTP/S Timeserver Client in Go","description":"A Go client that can interact with a key-secured Chrony NTS timeserver.","sidebar":"tutorialSidebar"},"Development/Go/2022-10-05-go-reducing-binary-size/index":{"id":"Development/Go/2022-10-05-go-reducing-binary-size/index","title":"Go Build!","description":"Cross-compile in Go and reduce the binary size of your Go program.","sidebar":"tutorialSidebar"},"Development/Go/2022-10-15-go-oauth2-server/index":{"id":"Development/Go/2022-10-15-go-oauth2-server/index","title":"Go OAuth2 Server","description":"Simple OAuth2 Implementation in Go","sidebar":"tutorialSidebar"},"Development/Go/2022-11-11-go-nts-client-ci/index":{"id":"Development/Go/2022-11-11-go-nts-client-ci/index","title":"Building a NTP/S Timeserver Client in Go with Gitlab CI","description":"A Go client that can interact with a key-secured Chrony NTS timeserver.","sidebar":"tutorialSidebar"},"Development/Go/2022-12-26-go-webassembly/index":{"id":"Development/Go/2022-12-26-go-webassembly/index","title":"Go WebAssembly","description":"Build WebAssembly Apps in Go","sidebar":"tutorialSidebar"},"Development/Go/2022-12-27-go-bubbles/index":{"id":"Development/Go/2022-12-27-go-bubbles/index","title":"Go Bubbles","description":"Bubble Sorting through Slices in Go","sidebar":"tutorialSidebar"},"Development/Go/2022-12-27-go-data-structures/index":{"id":"Development/Go/2022-12-27-go-data-structures/index","title":"Go Data Structures","description":"Available data representations in the Go programming language","sidebar":"tutorialSidebar"},"Development/Graphs/2020-05-01--getting-to-know-neo4j/index":{"id":"Development/Graphs/2020-05-01--getting-to-know-neo4j/index","title":"Getting to Know Neo4j","description":"Mongkok, Hong Kong","sidebar":"tutorialSidebar"},"Development/Graphs/2020-05-02--neo4j-movie-graph/index":{"id":"Development/Graphs/2020-05-02--neo4j-movie-graph/index","title":"Neo4j Movie Graph","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Graphs/2020-05-03--neo4j-cheat-sheet/index":{"id":"Development/Graphs/2020-05-03--neo4j-cheat-sheet/index","title":"Neo4j Cypher Cheat Sheet","description":"Maritime Museum, Hong Kong","sidebar":"tutorialSidebar"},"Development/Graphs/2020-05-04--neo4j-corona-tracing/index":{"id":"Development/Graphs/2020-05-04--neo4j-corona-tracing/index","title":"Neo4j Corona Tracing","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Graphs/2020-05-05--graphql-queries-and-mutations/index":{"id":"Development/Graphs/2020-05-05--graphql-queries-and-mutations/index","title":"GraphQL Queries and Mutations","description":"Kathmandu, Nepal","sidebar":"tutorialSidebar"},"Development/Javascript/2010-01-01--mdx/index":{"id":"Development/Javascript/2010-01-01--mdx/index","title":"Markdown Cheatsheet","description":"View raw (TEST.md)","sidebar":"tutorialSidebar"},"Development/Javascript/2010-01-05--markdown-live-code/index":{"id":"Development/Javascript/2010-01-05--markdown-live-code/index","title":"React-Live & Code example","description":"A live code sample:","sidebar":"tutorialSidebar"},"Development/Javascript/2016-05-27--javascript-apis-and-ajax/index":{"id":"Development/Javascript/2016-05-27--javascript-apis-and-ajax/index","title":"JavaScript and Getting Started with APIs and AJAX","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Javascript/2016-06-01--node-express-mongodb/index":{"id":"Development/Javascript/2016-06-01--node-express-mongodb/index","title":"Node/Express with MongoDB","description":"Hongkong","sidebar":"tutorialSidebar"},"Development/Javascript/2016-08-11--node-express-static-wiki/index":{"id":"Development/Javascript/2016-08-11--node-express-static-wiki/index","title":"Node Express Static","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"Development/Javascript/2017-07-04--random-password-generator/index":{"id":"Development/Javascript/2017-07-04--random-password-generator/index","title":"Random Password Generator","description":"Tana Island, Vanuatu","sidebar":"tutorialSidebar"},"Development/Javascript/2017-07-22--caloric-burn/index":{"id":"Development/Javascript/2017-07-22--caloric-burn/index","title":"Food Caloric Table App","description":"Port Vila, Vanuatu","sidebar":"tutorialSidebar"},"Development/Javascript/2017-07-24--obligatory-react-todo-list/index":{"id":"Development/Javascript/2017-07-24--obligatory-react-todo-list/index","title":"React TODO List","description":"\x3c!--","sidebar":"tutorialSidebar"},"Development/Javascript/2017-08-07--google-analytics-amp/index":{"id":"Development/Javascript/2017-08-07--google-analytics-amp/index","title":"Google Analytics in AMP","description":"Harbin, China","sidebar":"tutorialSidebar"},"Development/Javascript/2017-08-15--gatsby-blog-starter/index":{"id":"Development/Javascript/2017-08-15--gatsby-blog-starter/index","title":"Gatsby Blog Starter","description":"Harbin, China","sidebar":"tutorialSidebar"},"Development/Javascript/2017-08-21--reactive-material/index":{"id":"Development/Javascript/2017-08-21--reactive-material/index","title":"create-react-app and Material-UI","description":"Harbin, China","sidebar":"tutorialSidebar"},"Development/Javascript/2017-09-03--react-under-the-hood/index":{"id":"Development/Javascript/2017-09-03--react-under-the-hood/index","title":"React under the Hood","description":"Harbin, China","sidebar":"tutorialSidebar"},"Development/Javascript/2017-12-07--react-router-4/index":{"id":"Development/Javascript/2017-12-07--react-router-4/index","title":"React Router 4","description":"Hongkong","sidebar":"tutorialSidebar"},"Development/Javascript/2017-12-09--next-start/index":{"id":"Development/Javascript/2017-12-09--next-start/index","title":"Next.js Server Side Rendering","description":"Tanna Island, Vanuatu","sidebar":"tutorialSidebar"},"Development/Javascript/2017-12-14--gatsby-wiki/index":{"id":"Development/Javascript/2017-12-14--gatsby-wiki/index","title":"Gatsby.js Knowledgebase","description":"Tanna Island, Vanuatu","sidebar":"tutorialSidebar"},"Development/Javascript/2017-12-17--gatsby-reactstrap/index":{"id":"Development/Javascript/2017-12-17--gatsby-reactstrap/index","title":"Gatsby.js with Bootstrap 4","description":"Harbin, China","sidebar":"tutorialSidebar"},"Development/Javascript/2018-01-07--gatsby-material-ui-starter/index":{"id":"Development/Javascript/2018-01-07--gatsby-material-ui-starter/index","title":"Gatsby Material UI Starter","description":"Koh Rong, Cambodia","sidebar":"tutorialSidebar"},"Development/Javascript/2018-01-15--react-transition-group-demo/index":{"id":"Development/Javascript/2018-01-15--react-transition-group-demo/index","title":"react-transition-group","description":"Angkor Wat, Cambodia","sidebar":"tutorialSidebar"},"Development/Javascript/2018-01-17--server-side-render-react-router/index":{"id":"Development/Javascript/2018-01-17--server-side-render-react-router/index","title":"Server Rendering with React and React Router","description":"Angkor, Cambodia","sidebar":"tutorialSidebar"},"Development/Javascript/2019-08-02--building-an-mqtt-interface/index":{"id":"Development/Javascript/2019-08-02--building-an-mqtt-interface/index","title":"Building a MQTT Interface","description":"Shanghai, China","sidebar":"tutorialSidebar"},"Development/Javascript/2020-01-12--node-express-redirect-server/index":{"id":"Development/Javascript/2020-01-12--node-express-redirect-server/index","title":"Web traffic redirection with Node and Express on CentOS8","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Javascript/2021-02-14-next-js-2021/index":{"id":"Development/Javascript/2021-02-14-next-js-2021/index","title":"Next.js in 2021","description":"Jomson, Nepal","sidebar":"tutorialSidebar"},"Development/Javascript/2021-05-07-electron-cross-platform-apps/index":{"id":"Development/Javascript/2021-05-07-electron-cross-platform-apps/index","title":"Electron for Cross Platform Applications","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Javascript/2021-05-08-electron13-gatsby-wrapper/index":{"id":"Development/Javascript/2021-05-08-electron13-gatsby-wrapper/index","title":"Electron@13 as a Gatsby.js Wrapper","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Javascript/2021-05-09-electron13-and-react/index":{"id":"Development/Javascript/2021-05-09-electron13-and-react/index","title":"Electron@13 and Create-React-App","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Javascript/2021-05-10-carbon-design-react/index":{"id":"Development/Javascript/2021-05-10-carbon-design-react/index","title":"Carbon Design System in React.js - Part I","description":"Mongkok, Hongkong","sidebar":"tutorialSidebar"},"Development/Javascript/2021-05-11-carbon-design-react-part2/index":{"id":"Development/Javascript/2021-05-11-carbon-design-react-part2/index","title":"Carbon Design System in React.js - Part II","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"Development/Javascript/2021-05-12-carbon-design-react-part3/index":{"id":"Development/Javascript/2021-05-12-carbon-design-react-part3/index","title":"Carbon Design System in React.js - Part III","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"Development/Javascript/2021-06-01--mqtt-with-reactjs/index":{"id":"Development/Javascript/2021-06-01--mqtt-with-reactjs/index","title":"MQTT Webfrontend with React.js","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Javascript/2021-06-02--mqtt-cheat-sheet/index":{"id":"Development/Javascript/2021-06-02--mqtt-cheat-sheet/index","title":"Mosquitto MQTT Cheat Sheet","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"Development/Javascript/2021-06-04--mqtt-dashboard-react/index":{"id":"Development/Javascript/2021-06-04--mqtt-dashboard-react/index","title":"React Dashboard for MQTT","description":"Wanchai, Hongkong","sidebar":"tutorialSidebar"},"Development/Javascript/2021-09-07--intro-to-websockets/index":{"id":"Development/Javascript/2021-09-07--intro-to-websockets/index","title":"Introduction to Websockets","description":"Tsim Sha Tsui, Hong Kong","sidebar":"tutorialSidebar"},"Development/Javascript/2021-09-08--websockets-html-video/index":{"id":"Development/Javascript/2021-09-08--websockets-html-video/index","title":"HTML Video over Websockets","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Javascript/2021-09-09--websocket-HAproxy/index":{"id":"Development/Javascript/2021-09-09--websocket-HAproxy/index","title":"HAProxy Loadbalancing and Websockets","description":"Wan Chai, Hong Kong","sidebar":"tutorialSidebar"},"Development/Javascript/2021-09-09--websocket-NGINX/index":{"id":"Development/Javascript/2021-09-09--websocket-NGINX/index","title":"NGINX as a Proxy for Websockets","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Javascript/2021-09-10--notifications-alerts-as-toast/index":{"id":"Development/Javascript/2021-09-10--notifications-alerts-as-toast/index","title":"Convert Alerts into Toasts","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Javascript/2021-09-10--websocket-recconects/index":{"id":"Development/Javascript/2021-09-10--websocket-recconects/index","title":"Reconnecting Websockets","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Javascript/2022-03-01--json-apis-training/index":{"id":"Development/Javascript/2022-03-01--json-apis-training/index","title":"Working with JSON APIs","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"Development/Javascript/2022-07-01-docusaurus-introduction/index":{"id":"Development/Javascript/2022-07-01-docusaurus-introduction/index","title":"Docusaurus Introduction","description":"- Scaffold your website","sidebar":"tutorialSidebar"},"Development/Javascript/2022-10-29-webrtc-introduction-realtime-chat/index":{"id":"Development/Javascript/2022-10-29-webrtc-introduction-realtime-chat/index","title":"WebRTC Introduction - Realtime Chat","description":"Establishing a bidirectional Websocket connection.","sidebar":"tutorialSidebar"},"Development/Javascript/2022-10-30-webrtc-introduction-video-chat-part1/index":{"id":"Development/Javascript/2022-10-30-webrtc-introduction-video-chat-part1/index","title":"WebRTC Introduction - Client Side Signalling","description":"Signalling intend from the web client","sidebar":"tutorialSidebar"},"Development/Javascript/2022-11-10-webrtc-introduction-video-chat-part2/index":{"id":"Development/Javascript/2022-11-10-webrtc-introduction-video-chat-part2/index","title":"WebRTC Introduction - Interactive Connectivity Establishment","description":"Establishing a connection between the clients","sidebar":"tutorialSidebar"},"Development/Javascript/2022-11-19-web3-javascript-app/index":{"id":"Development/Javascript/2022-11-19-web3-javascript-app/index","title":"Web3.js Blockchain Application","description":"Ethereum and Metamask for Decentralized Authentication","sidebar":"tutorialSidebar"},"Development/Javascript/2022-11-29-react-typescript-intro-2023/index":{"id":"Development/Javascript/2022-11-29-react-typescript-intro-2023/index","title":"TypeScript 2.0 in React 19 (2023)","description":"Typescript Workshop","sidebar":"tutorialSidebar"},"Development/Javascript/2022-12-11-11ty-starter/index":{"id":"Development/Javascript/2022-12-11-11ty-starter/index","title":"11ty Static Site Generator","description":"Eleventy, a simpler static site\xa0generator.","sidebar":"tutorialSidebar"},"Development/Javascript/2022-12-29-reactive-search-starter/index":{"id":"Development/Javascript/2022-12-29-reactive-search-starter/index","title":"Reactive Search Starter","description":"Use the ReactiveSearch library to build a React.js Interface for Elasticsearch and OpenSearch.","sidebar":"tutorialSidebar"},"Development/Javascript/2023-02-12-react-meili-search-starter/index":{"id":"Development/Javascript/2023-02-12-react-meili-search-starter/index","title":"React Frontend for MeiLi Search","description":"A lightning-fast search engine that fits effortlessly into your apps, websites, and workflow.","sidebar":"tutorialSidebar"},"Development/Javascript/2023-02-13-gatsby-meili-search-starter/index":{"id":"Development/Javascript/2023-02-13-gatsby-meili-search-starter/index","title":"MeiLi Search for your Gatsby.js Blog","description":"A lightning-fast search engine that fits effortlessly into your apps, websites, and workflow.","sidebar":"tutorialSidebar"},"Development/Javascript/2023-04-01-reactjs-2023/index":{"id":"Development/Javascript/2023-04-01-reactjs-2023/index","title":"React.js 2023 - A (Re)Introduction","description":"Just a React Cheat Sheet to refer to in times of need...","sidebar":"tutorialSidebar"},"Development/Javascript/2023-06-04-nodejs-typescript-sql/index":{"id":"Development/Javascript/2023-06-04-nodejs-typescript-sql/index","title":"Node / Express with Typescript - (Re)Introduction 2023","description":"Part 1 - Building a Node.js, Express.js App with a MySQL Backend.","sidebar":"tutorialSidebar"},"Development/Javascript/2023-06-12-typescript-2023/index":{"id":"Development/Javascript/2023-06-12-typescript-2023/index","title":"Typescript 2023","description":"Using Typescript 5 to consume Web Application Programming Interfaces","sidebar":"tutorialSidebar"},"Development/Javascript/2023-06-12-typescript-pattern/index":{"id":"Development/Javascript/2023-06-12-typescript-pattern/index","title":"Typescript Design Pattern","description":"Using Typescript 5 to consume Web Application Programming Interfaces","sidebar":"tutorialSidebar"},"Development/Javascript/2023-06-13-typescript-dom-webpack/index":{"id":"Development/Javascript/2023-06-13-typescript-dom-webpack/index","title":"Typescript DOM Webpack","description":"Using Typescript 5 to build browser applications with Webpack","sidebar":"tutorialSidebar"},"Development/Javascript/2023-06-13-typescript-dom/index":{"id":"Development/Javascript/2023-06-13-typescript-dom/index","title":"Typescript DOM","description":"Using Typescript 5 to build browser applications","sidebar":"tutorialSidebar"},"Development/Javascript/2023-12-14-reactjs-typescript-2023/index":{"id":"Development/Javascript/2023-12-14-reactjs-typescript-2023/index","title":"React.js with Typescript 2023","description":"Looking into using Typescript in building React.js Frontends","sidebar":"tutorialSidebar"},"Development/Javascript/2023-12-15-reactjs-typescript-redux/index":{"id":"Development/Javascript/2023-12-15-reactjs-typescript-redux/index","title":"Simple Redux","description":"Redux and Redux Devtools Setup","sidebar":"tutorialSidebar"},"Development/Javascript/2023-12-16-reactjs-hooks-typescript/index":{"id":"Development/Javascript/2023-12-16-reactjs-hooks-typescript/index","title":"React Hooks Typescript","description":"Using React State and Ref Hooks with Typescript","sidebar":"tutorialSidebar"},"Development/Javascript/2023-12-18-reactjs-typescript-redux-toolkit/index":{"id":"Development/Javascript/2023-12-18-reactjs-typescript-redux-toolkit/index","title":"Redux Toolkit Github API","description":"Using the Redux Toolkit and AsyncThunk with Typescript & React","sidebar":"tutorialSidebar"},"Development/Javascript/2023-12-19-react-query-typescript/index":{"id":"Development/Javascript/2023-12-19-react-query-typescript/index","title":"React Query AsyncState Management","description":"Leveraging React Query to manage frontend state from REST JSON APIs","sidebar":"tutorialSidebar"},"Development/Javascript/2023-12-20-react-query-typescript/index":{"id":"Development/Javascript/2023-12-20-react-query-typescript/index","title":"Tanstack React Query AsyncState Management","description":"Leveraging Tanstack React Query v5 to manage frontend state from REST JSON APIs","sidebar":"tutorialSidebar"},"Development/Javascript/2023-12-21-react-query-tauri-elasticsearch/index":{"id":"Development/Javascript/2023-12-21-react-query-tauri-elasticsearch/index","title":"Building a Native Elasticsearch Client in React","description":"Use Tauri to build a native application using Vite.js and Tanstack React Query","sidebar":"tutorialSidebar"},"Development/Javascript/2023-12-24-react-query-tauri-iot-ctrl/index":{"id":"Development/Javascript/2023-12-24-react-query-tauri-iot-ctrl/index","title":"Building a Native IP Camera Client in React","description":"Use Tauri to build a native application using Vite.js and Tanstack React Query","sidebar":"tutorialSidebar"},"Development/Javascript/2023-12-25-redux-toolkit/index":{"id":"Development/Javascript/2023-12-25-redux-toolkit/index","title":"Redux Toolkit and RTK Query","description":"RTK Query or React Query ?","sidebar":"tutorialSidebar"},"Development/Javascript/2023-12-31-js-typescript-rest/index":{"id":"Development/Javascript/2023-12-31-js-typescript-rest/index","title":"Typescript for Web APIs","description":"Using Typescript 5 to consume Web Application Programming Interfaces","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-07--magento-development-in-docker/index":{"id":"Development/Magento/2019-09-07--magento-development-in-docker/index","title":"Magento 2 Docker Development","description":"Siam Reap, Cambodia","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-10--magento2-docker-on-ubuntu/index":{"id":"Development/Magento/2019-09-10--magento2-docker-on-ubuntu/index","title":"Magento 2 Dev Environment with Docker Compose","description":"Angkor Wat, Cambodia","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-11--magento-on-debian-with-nginx/index":{"id":"Development/Magento/2019-09-11--magento-on-debian-with-nginx/index","title":"Magento 2 Installation with NGINX on Debian Buster","description":"Angkor Wat, Cambodia","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-12--magento-and-elasticsearch/index":{"id":"Development/Magento/2019-09-12--magento-and-elasticsearch/index","title":"Magento 2 and Elasticsearch","description":"Patan, Nepal","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-13--magento-and-varnish/index":{"id":"Development/Magento/2019-09-13--magento-and-varnish/index","title":"Magento 2 and Varnish 6","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-14--magento-and-themes/index":{"id":"Development/Magento/2019-09-14--magento-and-themes/index","title":"Magento 2 Manual Theme Installation","description":"Patan, Nepal","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-15--updating-from-php70-to-php72/index":{"id":"Development/Magento/2019-09-15--updating-from-php70-to-php72/index","title":"Updating a Magento Project from PHP v7.0 to v7.3","description":"Katmandu, Nepal","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-16--working-with-sql-dumps/index":{"id":"Development/Magento/2019-09-16--working-with-sql-dumps/index","title":"Working with SQL Dumps","description":"Harbin, China","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-17--magento2-modules/index":{"id":"Development/Magento/2019-09-17--magento2-modules/index","title":"Creating Magento 2 Modules","description":"Mong Kok, Hongkong","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-18--magento2-cronjobs/index":{"id":"Development/Magento/2019-09-18--magento2-cronjobs/index","title":"Creating Magento 2 Cron Jobs","description":"Pokhara, Nepal","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-19--magento2-console-commands/index":{"id":"Development/Magento/2019-09-19--magento2-console-commands/index","title":"Creating Magento 2 Console Commands","description":"TST, Hongkong","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-20--magento2-ui-components/index":{"id":"Development/Magento/2019-09-20--magento2-ui-components/index","title":"Magento 2 UI Components","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-21--magento2-docker-install/index":{"id":"Development/Magento/2019-09-21--magento2-docker-install/index","title":"Docker Compose install Magento 2","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"Development/Magento/2019-09-21--magento2-google-analytics/index":{"id":"Development/Magento/2019-09-21--magento2-google-analytics/index","title":"Adding Google Analytics to Magento 2","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"Development/Magento/2020-12-07-google-analytics-g4-tag/index":{"id":"Development/Magento/2020-12-07-google-analytics-g4-tag/index","title":"Installing Google Analytics g4 Tag in your Gatsby and Discourse Webservice","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"Development/Magento/2021-07-28--magento2-google-analytics-universal/index":{"id":"Development/Magento/2021-07-28--magento2-google-analytics-universal/index","title":"Adding Google Analytics to Magento 2","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"Development/Misc/1980-01-01--dcs-f-14-tomcat/index":{"id":"Development/Misc/1980-01-01--dcs-f-14-tomcat/index","title":"Tomcat Checklists","description":"- Pilot Cold Startup","sidebar":"tutorialSidebar"},"Development/Misc/1980-01-02--dcs-su-25-t/index":{"id":"Development/Misc/1980-01-02--dcs-su-25-t/index","title":"Frogfoot Checklists","description":"SU-25T Frogfoot","sidebar":"tutorialSidebar"},"Development/Misc/2017-06-17--unreal-engine-coding-standards/index":{"id":"Development/Misc/2017-06-17--unreal-engine-coding-standards/index","title":"Unreal Engine Coding Standards","description":"Unreal Engine Coding Standards","sidebar":"tutorialSidebar"},"Development/Misc/2023-01-20-pandoc-markup-converter/index":{"id":"Development/Misc/2023-01-20-pandoc-markup-converter/index","title":"Pandoc Universal Markup Converter","description":"Pandoc is a Haskell library for converting from one markup format to another.","sidebar":"tutorialSidebar"},"Development/Python/2017-12-11--getting-started-with-python/index":{"id":"Development/Python/2017-12-11--getting-started-with-python/index","title":"Getting started with Python","description":"Port Vila, Vanuatu","sidebar":"tutorialSidebar"},"Development/Python/2017-12-13--getting-started-with-python-part-ii/index":{"id":"Development/Python/2017-12-13--getting-started-with-python-part-ii/index","title":"Getting started with Python Part II","description":"Port Vila, Vanuatu","sidebar":"tutorialSidebar"},"Development/Python/2017-12-17--python-ssh-logger/index":{"id":"Development/Python/2017-12-17--python-ssh-logger/index","title":"Python Network Logger","description":"Harbin, China","sidebar":"tutorialSidebar"},"Development/Python/2022-06-01-python-pyscript/index":{"id":"Development/Python/2022-06-01-python-pyscript/index","title":"Introduction to PyScript","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"Development/Python/2022-06-27-python-web-scraping/index":{"id":"Development/Python/2022-06-27-python-web-scraping/index","title":"Web Scraping Essentials with Python","description":"Sham Sui Po, Hong Kong","sidebar":"tutorialSidebar"},"Development/Python/2022-09-17-python-video-processing/index":{"id":"Development/Python/2022-09-17-python-video-processing/index","title":"Python - Video Processing with OpenCV","description":"Sham Sui Po, Hong Kong","sidebar":"tutorialSidebar"},"Development/Python/2022-10-05-python-text-processing/index":{"id":"Development/Python/2022-10-05-python-text-processing/index","title":"Python - Text Processing with","description":"Processing text using Python","sidebar":"tutorialSidebar"},"Development/Python/2022-10-06-python-minify-text/index":{"id":"Development/Python/2022-10-06-python-minify-text/index","title":"Python - Minify Text for Elasticsearch","description":"Use Python to create an Elasticsearch index file.","sidebar":"tutorialSidebar"},"Development/Python/2022-10-07-python-docusaurus-elasticsearch/index":{"id":"Development/Python/2022-10-07-python-docusaurus-elasticsearch/index","title":"Python - Build an Elasticsearch Index for your Docusaurus Blog","description":"I was able to bring both together by pulling text from an URL, process the content and write it into an Elasticsearch JSON Document. Now I want to automate this process a little by using a pages sitemap.","sidebar":"tutorialSidebar"},"Development/Python/2022-10-08-python-desktop-app/index":{"id":"Development/Python/2022-10-08-python-desktop-app/index","title":"Python - PyQt Desktop App","description":"Using PyQt6 to build desktop app with Python.","sidebar":"tutorialSidebar"},"Development/Python/2022-10-08-python-flask-app/index":{"id":"Development/Python/2022-10-08-python-flask-app/index","title":"Python - Deploying a Web App with Flask","description":"Use Flask to build a web frontend for your Python App.","sidebar":"tutorialSidebar"},"Development/Python/2022-10-09-python-flask-elasticsearch/index":{"id":"Development/Python/2022-10-09-python-flask-elasticsearch/index","title":"Python - Flask Frontend to generate Elasticsearch Docs from Sitemaps","description":"Use Flask to build a web frontend for your Python App.","sidebar":"tutorialSidebar"},"Development/Python/2022-10-10-python-filesystem/index":{"id":"Development/Python/2022-10-10-python-filesystem/index","title":"Python - The Filesystem","description":"Using Python to manipulate your Filesystem.","sidebar":"tutorialSidebar"},"Development/Python/2022-10-12-python-regular-expressions/index":{"id":"Development/Python/2022-10-12-python-regular-expressions/index","title":"Python - RE","description":"Using Regular Expressions with Python.","sidebar":"tutorialSidebar"},"Development/Python/2022-10-13-python-rest-api/index":{"id":"Development/Python/2022-10-13-python-rest-api/index","title":"Python - Working with REST API Requests","description":"Retrieve information from JSON web APIs and process them.","sidebar":"tutorialSidebar"},"Development/Python/2022-10-14-python-rest-elastic/index":{"id":"Development/Python/2022-10-14-python-rest-elastic/index","title":"Python - Working with the Elasticsearch REST API","description":"Run OpenSearch search queries and process the JSON response.","sidebar":"tutorialSidebar"},"Development/Python/2022-10-15-python-rest-server/index":{"id":"Development/Python/2022-10-15-python-rest-server/index","title":"Python - Build a REST API","description":"Using Flask to deploy an JSON REST API.","sidebar":"tutorialSidebar"},"Development/Python/2022-10-22-python-nlp/index":{"id":"Development/Python/2022-10-22-python-nlp/index","title":"Python - Natural Language Processing","description":"Python Natural Language Toolkit - Stemming, Similarity, Sentiment Examples","sidebar":"tutorialSidebar"},"Development/Python/2022-12-11-pipenv/index":{"id":"Development/Python/2022-12-11-pipenv/index","title":"Pipenv - Welcome NPM","description":"Python Dev Workflow for Humans","sidebar":"tutorialSidebar"},"Development/Python/2023-01-16-python-3-11-features/index":{"id":"Development/Python/2023-01-16-python-3-11-features/index","title":"Python 3.11 New Features","description":"Error Messages and Customized Exception Notes","sidebar":"tutorialSidebar"},"Development/Python/2023-04-24-python-pandas-cheat-sheet/index":{"id":"Development/Python/2023-04-24-python-pandas-cheat-sheet/index","title":"Pandas Cheat Sheet 2023","description":"Common Python Pandas Operations","sidebar":"tutorialSidebar"},"Development/Python/2023-05-03-python-matplotlib-cheat-sheet/index":{"id":"Development/Python/2023-05-03-python-matplotlib-cheat-sheet/index","title":"Matplotlib Pyplot Cheat Sheet 2023","description":"Common Python Matplotlib Operations","sidebar":"tutorialSidebar"},"Development/Python/2023-05-07-python-scipy-introduction/index":{"id":"Development/Python/2023-05-07-python-scipy-introduction/index","title":"A little bit of SciPy...","description":"A quick introduction to Scientific Python","sidebar":"tutorialSidebar"},"Development/Python/2023-05-07-python-seaborn-cheat-sheet/index":{"id":"Development/Python/2023-05-07-python-seaborn-cheat-sheet/index","title":"Seaborn Cheat Sheet 2023","description":"Common Python Seaborn Operations","sidebar":"tutorialSidebar"},"Development/Python/2023-05-10-plotly-COVID19-dataset/index":{"id":"Development/Python/2023-05-10-plotly-COVID19-dataset/index","title":"Plotly COVID19 Dataset Exploration","description":"Using Python Plotly Visualizations to explore a COVID19 Dataset","sidebar":"tutorialSidebar"},"Development/Python/2023-05-12-matplotlib-seaborn-titanic-dataset/index":{"id":"Development/Python/2023-05-12-matplotlib-seaborn-titanic-dataset/index","title":"Seaborn Titanic Dataset Exploration","description":"Using Python Seaborn Visualizations to explore the Titanic Dataset","sidebar":"tutorialSidebar"},"Development/Python/2023-05-14-visualizing-text-datasets/index":{"id":"Development/Python/2023-05-14-visualizing-text-datasets/index","title":"Plotly & Seaborn to Explore Text Dataset","description":"Using Python Plotly and Seaborn Visualizations to explore the Women\'s E-Commerce Clothing Reviews Dataset","sidebar":"tutorialSidebar"},"Development/Python/2023-05-16-seaborn-cc-churn-vis/index":{"id":"Development/Python/2023-05-16-seaborn-cc-churn-vis/index","title":"Seaborn to Explore the CC Churn Dataset","description":"Using Python Pandas and Seaborn Visualizations to explore the Credit Card Customer Churn Prediction Dataset","sidebar":"tutorialSidebar"},"Development/Python/2023-05-17-fandango-ratings-controversy/index":{"id":"Development/Python/2023-05-17-fandango-ratings-controversy/index","title":"FiveThirtyEight Fandango Dataset","description":"Whose ratings should you trust? IMDB, Rotten Tomatoes, Metacritic, or Fandango?","sidebar":"tutorialSidebar"},"Development/Python/2023-05-18-python-asserts/index":{"id":"Development/Python/2023-05-18-python-asserts/index","title":"Python Asserts in Data Science Cheat Sheet","description":"Using Assert Statements to ensure Dataset Cleanliness","sidebar":"tutorialSidebar"},"Development/Python/2023-05-20-python-sklearn-cheat-sheet/index":{"id":"Development/Python/2023-05-20-python-sklearn-cheat-sheet/index","title":"SciKit-Learn Cheat Sheet","description":"List of common SkLearn functions for Data Scientists","sidebar":"tutorialSidebar"},"Development/Python/2023-05-28-telco-churn-cohort-study/index":{"id":"Development/Python/2023-05-28-telco-churn-cohort-study/index","title":"Supervised Learning with Scikit-Learn","description":"Telco Customer Churn Cohort Study","sidebar":"tutorialSidebar"},"Development/Python/2023-07-09-python-scikit-image-intro/index":{"id":"Development/Python/2023-07-09-python-scikit-image-intro/index","title":"Introduction to Scikit-Image","description":"Is Scikit Image an alternative for openCV and pillow?","sidebar":"tutorialSidebar"},"Development/Python/2023-08-14-python-scikit-image-opencv/index":{"id":"Development/Python/2023-08-14-python-scikit-image-opencv/index","title":"OpenCV & SciPy and Scikit Image Cheat Sheet","description":"Is Scikit Image an alternative for openCV and pillow?","sidebar":"tutorialSidebar"},"Development/ReactNative/2022-05-01-react-native-hello-world/index":{"id":"Development/ReactNative/2022-05-01-react-native-hello-world/index","title":"React Native Hello World","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"Development/ReactNative/2022-05-02-react-native-navigation/index":{"id":"Development/ReactNative/2022-05-02-react-native-navigation/index","title":"React Native Navigation","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"Development/ReactNative/2022-05-03-react-native-contextapi/index":{"id":"Development/ReactNative/2022-05-03-react-native-contextapi/index","title":"React Native Context API","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"Development/ReactNative/2022-05-04-react-native-hooks/index":{"id":"Development/ReactNative/2022-05-04-react-native-hooks/index","title":"React Native Hooks","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"Development/ReactNative/2022-05-05-react-native-context-hooks/index":{"id":"Development/ReactNative/2022-05-05-react-native-context-hooks/index","title":"React Native Context & Hooks","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"Development/ReactNative/2022-05-06-react-native-reducer/index":{"id":"Development/ReactNative/2022-05-06-react-native-reducer/index","title":"React Native Reducer","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Ansible/2020-11-18--ansible-on-debian-buster/index":{"id":"DevOps/Ansible/2020-11-18--ansible-on-debian-buster/index","title":"Setting up a Ansible on Debian Buster","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Ansible/2020-11-19--ansible-playbooks/index":{"id":"DevOps/Ansible/2020-11-19--ansible-playbooks/index","title":"Ansible Playbooks","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Ansible/2020-11-20--ansible-copy-cheat-sheet/index":{"id":"DevOps/Ansible/2020-11-20--ansible-copy-cheat-sheet/index","title":"Ansible Copy Cheat Sheet","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Ansible/2020-11-21--ansible-modules-and-roles/index":{"id":"DevOps/Ansible/2020-11-21--ansible-modules-and-roles/index","title":"Ansible Vault, Modules & Roles","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Ansible/2020-11-22--ansible-and-docker/index":{"id":"DevOps/Ansible/2020-11-22--ansible-and-docker/index","title":"Ansible for Docker Deployment","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Ansible/2020-11-23--ansible-getting-serious/index":{"id":"DevOps/Ansible/2020-11-23--ansible-getting-serious/index","title":"Ansible Getting Serious","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Ansible/2020-11-24--ansible-vault-user-login/index":{"id":"DevOps/Ansible/2020-11-24--ansible-vault-user-login/index","title":"Ansible Vault for User Logins","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Ansible/2020-11-25--ansible-in-gitlab-ci/index":{"id":"DevOps/Ansible/2020-11-25--ansible-in-gitlab-ci/index","title":"Ansible in Gitlab CI Pipelines","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Ansible/2020-11-26--ansible-dind/index":{"id":"DevOps/Ansible/2020-11-26--ansible-dind/index","title":"Ansible Docker-in-Docker","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Ansible/2021-04-28-ansible-tower-rhel/index":{"id":"DevOps/Ansible/2021-04-28-ansible-tower-rhel/index","title":"Installing Ansible Tower (AWX in Docker) on RHEL8","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Ansible/2021-04-29-ansible-tower-setup/index":{"id":"DevOps/Ansible/2021-04-29-ansible-tower-setup/index","title":"Setting up Ansible Tower (AWX)","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Ansible/2021-04-30-ansible-tower-slack-notifications/index":{"id":"DevOps/Ansible/2021-04-30-ansible-tower-slack-notifications/index","title":"Slack Notifications for Ansible Tower (AWX)","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Ansible/2021-05-01-ansible-tower-workflow-templates/index":{"id":"DevOps/Ansible/2021-05-01-ansible-tower-workflow-templates/index","title":"Ansible Tower Workflow Templates","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Ansible/2021-05-02-ansible-tower-examples/index":{"id":"DevOps/Ansible/2021-05-02-ansible-tower-examples/index","title":"Ansible Tower Practical Examples","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2017-10-03--search-engine-setup-and-configuration/index":{"id":"DevOps/Elasticsearch/2017-10-03--search-engine-setup-and-configuration/index","title":"Search Engine Setup and Configuration","description":"Search Engine Setup and Configuration","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2017-12-05--elasticsearch-react-example/index":{"id":"DevOps/Elasticsearch/2017-12-05--elasticsearch-react-example/index","title":"React Search Interface","description":"Tanna Island, Vanuatu","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2017-12-26--elasticsearch-kibana/index":{"id":"DevOps/Elasticsearch/2017-12-26--elasticsearch-kibana/index","title":"Elasticsearch and Kibana","description":"Battambang, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2017-12-31--securing-elasticsearch-xpack/index":{"id":"DevOps/Elasticsearch/2017-12-31--securing-elasticsearch-xpack/index","title":"Securing Elasticsearch with X-Pack","description":"Battambang, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2018-01-01--securing-elasticsearch-readonlyrest/index":{"id":"DevOps/Elasticsearch/2018-01-01--securing-elasticsearch-readonlyrest/index","title":"Securing Elasticsearch with ReadOnlyREST","description":"Jomsom, Nepal","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2019-09-08--elasticsearch_7-5_docker/index":{"id":"DevOps/Elasticsearch/2019-09-08--elasticsearch_7-5_docker/index","title":"Elasticsearch 7 with Docker Compose","description":"ShenZhen, China","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2020-06-01--elasticsearch-docker/index":{"id":"DevOps/Elasticsearch/2020-06-01--elasticsearch-docker/index","title":"Elasticsearch in Docker","description":"Shanghai, China","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-03-20-elasticsearch-7-refresher/index":{"id":"DevOps/Elasticsearch/2021-03-20-elasticsearch-7-refresher/index","title":"Elasticsearch 7 Refresher","description":"Hongkong, TST","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-03-21-logstash-digesting-data/index":{"id":"DevOps/Elasticsearch/2021-03-21-logstash-digesting-data/index","title":"Logstash 7 Digesting Webserver Logs","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-03-22-logstash-working-with-structured-data/index":{"id":"DevOps/Elasticsearch/2021-03-22-logstash-working-with-structured-data/index","title":"Logstash 7 Working with Structured Data","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-03-23-logstash-working-with-unstructured-data/index":{"id":"DevOps/Elasticsearch/2021-03-23-logstash-working-with-unstructured-data/index","title":"Logstash 7 Working with Unstructured Data","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-03-24-logstash-common-grok-pattern/index":{"id":"DevOps/Elasticsearch/2021-03-24-logstash-common-grok-pattern/index","title":"Logstash 7 and Common Log Pattern","description":"Cheung Chau, Hongkon","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/cheat-sheet":{"id":"DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/cheat-sheet","title":"Elasticsearch Cheat Sheet","description":"Source: JoliCode","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/index":{"id":"DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/index","title":"Log all the searches going through Elasticsearch","description":"Bakhtapur, Nepal","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-03-26-elasticsearch7-for-syslog-messages/index":{"id":"DevOps/Elasticsearch/2021-03-26-elasticsearch7-for-syslog-messages/index","title":"Elasticsearch 7 to log Linux System Events","description":"Harbin, China","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-03-27-elasticsearch7-aggregations/index":{"id":"DevOps/Elasticsearch/2021-03-27-elasticsearch7-aggregations/index","title":"Elasticsearch 7 Aggregations","description":"Abashiri, Japan","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-03-28-elasticsearch7-timeseries/index":{"id":"DevOps/Elasticsearch/2021-03-28-elasticsearch7-timeseries/index","title":"Elasticsearch 7 Timeseries","description":"Kathmandu, Nepal","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-03-29-elasticsearch7-data-transformations/index":{"id":"DevOps/Elasticsearch/2021-03-29-elasticsearch7-data-transformations/index","title":"Elasticsearch 7 Data Transformation","description":"Harbin, China","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-03-30-elasticsearch7-and-filebeats/index":{"id":"DevOps/Elasticsearch/2021-03-30-elasticsearch7-and-filebeats/index","title":"Elasticsearch 7 and Filebeats","description":"Harbin, China","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-03-31-elastic-filebeats-for-apache-logs/index":{"id":"DevOps/Elasticsearch/2021-03-31-elastic-filebeats-for-apache-logs/index","title":"Elastic Filebeat and Apache Access Logs","description":"Otaru, Japan","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2021-04-01-elastic-filebeats-for-nginx-logs/index":{"id":"DevOps/Elasticsearch/2021-04-01-elastic-filebeats-for-nginx-logs/index","title":"Elastic Filebeat and NGINX Access Logs","description":"Mongkok, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2022-02-02--elasticsearch-v8-upgrade/index":{"id":"DevOps/Elasticsearch/2022-02-02--elasticsearch-v8-upgrade/index","title":"Performing an Elasticsearch v8 Upgrade","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2022-02-03--elasticsearch-v8-data-ingestion/index":{"id":"DevOps/Elasticsearch/2022-02-03--elasticsearch-v8-data-ingestion/index","title":"Elasticsearch v8, Filebeat (Docker) and NGINX","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2022-02-04--kibana-v8-search-queries/index":{"id":"DevOps/Elasticsearch/2022-02-04--kibana-v8-search-queries/index","title":"Elasticsearch & Kibana v8 Search Cheat Sheet","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2022-02-05--kibana-v8-index-management/index":{"id":"DevOps/Elasticsearch/2022-02-05--kibana-v8-index-management/index","title":"Elasticsearch & Kibana v8 Index Management","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2022-02-06--elasticsearch-v8-data-ingestion-apache/index":{"id":"DevOps/Elasticsearch/2022-02-06--elasticsearch-v8-data-ingestion-apache/index","title":"Elasticsearch v8, Filebeat (Docker) and Apache","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2022-10-11--opensearch-docker-compose/index":{"id":"DevOps/Elasticsearch/2022-10-11--opensearch-docker-compose/index","title":"Opensearch & Dashboard","description":"Run a single Opensearch node + Dashboard cluster with Docker-Compose.","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2022-10-12--opensearch-rest-api/index":{"id":"DevOps/Elasticsearch/2022-10-12--opensearch-rest-api/index","title":"Opensearch Rest API","description":"Run search queries using the Opensearch REST API.","sidebar":"tutorialSidebar"},"DevOps/Elasticsearch/2023-02-10--meili-rusty-elastic-docker/index":{"id":"DevOps/Elasticsearch/2023-02-10--meili-rusty-elastic-docker/index","title":"Introduction to MeiLi Search with Docker","description":"A lightning-fast search engine that fits effortlessly into your apps, websites, and workflow.","sidebar":"tutorialSidebar"},"DevOps/GitOps/2020-02-01--gitlab-in-podman-on-centos8/index":{"id":"DevOps/GitOps/2020-02-01--gitlab-in-podman-on-centos8/index","title":"Running Gitlab in Podman on CentOS8","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"DevOps/GitOps/2020-02-02--docker-images-in-gitlab/index":{"id":"DevOps/GitOps/2020-02-02--docker-images-in-gitlab/index","title":"Running Gitlab as Docker Registry","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"DevOps/GitOps/2020-08-01--gitlab-install-on-ubuntu-server/index":{"id":"DevOps/GitOps/2020-08-01--gitlab-install-on-ubuntu-server/index","title":"Installing Gitlab on Ubuntu Server 20.04","description":"Mong Kok, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/GitOps/2020-08-02--gitlab-setup/index":{"id":"DevOps/GitOps/2020-08-02--gitlab-setup/index","title":"Setting up Gitlab","description":"Mong Kok, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/GitOps/2020-08-03--gitlab-as-docker-registry/index":{"id":"DevOps/GitOps/2020-08-03--gitlab-as-docker-registry/index","title":"Gitlab as Docker Registry","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/GitOps/2020-08-04--working-with-gitlab/index":{"id":"DevOps/GitOps/2020-08-04--working-with-gitlab/index","title":"Working with Gitlab","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/GitOps/2021-02-25-gatsby-build-gitlab-pipeline/index":{"id":"DevOps/GitOps/2021-02-25-gatsby-build-gitlab-pipeline/index","title":"Gatsby Build Gitlab CI Pipeline","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/GitOps/2022-03-16--gitlab-docker-compose-on-localhost/index":{"id":"DevOps/GitOps/2022-03-16--gitlab-docker-compose-on-localhost/index","title":"Install Gitlab with Docker-Compose (Debian Bullseye)","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/GitOps/2022-11-10-go-gitlab-ci-pipeline/index":{"id":"DevOps/GitOps/2022-11-10-go-gitlab-ci-pipeline/index","title":"Go Gitlab CI Pipeline","description":"Build your Go app in Gitlab","sidebar":"tutorialSidebar"},"DevOps/GitOps/2023-10-28-github-passkey/index":{"id":"DevOps/GitOps/2023-10-28-github-passkey/index","title":"Github Passkeys","description":"Use Github Passkeys without a Mobile Phone","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2020-08-15--installing-nomad-ubuntu/index":{"id":"DevOps/Hashicorp/2020-08-15--installing-nomad-ubuntu/index","title":"Installing HashiCorp Nomad on Ubuntu Server 20.04","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2020-08-16--nomad-cluster/index":{"id":"DevOps/Hashicorp/2020-08-16--nomad-cluster/index","title":"Nomad Server Cluster","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2020-08-17--installing-consul-ubuntu/index":{"id":"DevOps/Hashicorp/2020-08-17--installing-consul-ubuntu/index","title":"Installing HashiCorp Consul on Ubuntu Server 20.04","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2020-08-18--consul-mock-datacenter/index":{"id":"DevOps/Hashicorp/2020-08-18--consul-mock-datacenter/index","title":"Joining Consul Clients","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2020-08-18--consul-service-mesh/index":{"id":"DevOps/Hashicorp/2020-08-18--consul-service-mesh/index","title":"Consul Service Mesh","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2020-08-19--consul-deployment-guide/index":{"id":"DevOps/Hashicorp/2020-08-19--consul-deployment-guide/index","title":"Consul Deployment Guide","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2020-10-23--hashicorp-packer-machine-image/index":{"id":"DevOps/Hashicorp/2020-10-23--hashicorp-packer-machine-image/index","title":"HashiCorp Packer Machine Images Introduction","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2020-10-24--hashicorp-packer-and-virtualbox-preseed/index":{"id":"DevOps/Hashicorp/2020-10-24--hashicorp-packer-and-virtualbox-preseed/index","title":"HashiCorp Packer with Virtualbox (Preseed)","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2020-10-25--hashicorp-packer-and-virtualbox-autoinstall/index":{"id":"DevOps/Hashicorp/2020-10-25--hashicorp-packer-and-virtualbox-autoinstall/index","title":"HashiCorp Packer with Virtualbox (Autoinstall)","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2020-10-26--hashicorp-packer-provisioner/index":{"id":"DevOps/Hashicorp/2020-10-26--hashicorp-packer-provisioner/index","title":"HashiCorp Packer Provisioning","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-01--hashicorp-nomad-refresher/index":{"id":"DevOps/Hashicorp/2021-08-01--hashicorp-nomad-refresher/index","title":"Hashicorp Nomad Refresher - Installation","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-02--hashicorp-nomad-security/index":{"id":"DevOps/Hashicorp/2021-08-02--hashicorp-nomad-security/index","title":"Hashicorp Nomad Refresher - Security","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-03--hashicorp-nomad-jobs/index":{"id":"DevOps/Hashicorp/2021-08-03--hashicorp-nomad-jobs/index","title":"Hashicorp Nomad Refresher - Jobs","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-04--hashicorp-nomad-job-specifications/index":{"id":"DevOps/Hashicorp/2021-08-04--hashicorp-nomad-job-specifications/index","title":"Hashicorp Nomad Refresher - Job Specifications","description":"Cheung Chau, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-05--hashicorp-consul-service-discovery/index":{"id":"DevOps/Hashicorp/2021-08-05--hashicorp-consul-service-discovery/index","title":"Hashicorp Consul Refresher - Service Discovery","description":"Cheung Chau, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-06--hashicorp-consul-fabio-loadbalancing/index":{"id":"DevOps/Hashicorp/2021-08-06--hashicorp-consul-fabio-loadbalancing/index","title":"Hashicorp Consul Refresher - Loadbalancing with Fabio","description":"Tsim Sha Tsui, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-06--hashicorp-consul-traefik-loadbalancing/index":{"id":"DevOps/Hashicorp/2021-08-06--hashicorp-consul-traefik-loadbalancing/index","title":"Hashicorp Consul Refresher - Loadbalancing with Traefik","description":"Tsim Sha Tsui, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-07--hashicorp-nomad-job-configuration/index":{"id":"DevOps/Hashicorp/2021-08-07--hashicorp-nomad-job-configuration/index","title":"Nomad Job Configuration","description":"Central, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-08--hashicorp-nomad-access-control-lists/index":{"id":"DevOps/Hashicorp/2021-08-08--hashicorp-nomad-access-control-lists/index","title":"Nomad Access Control Lists","description":"Central, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-09--hashicorp-consul-services/index":{"id":"DevOps/Hashicorp/2021-08-09--hashicorp-consul-services/index","title":"Hashicorp Consul Refresher - Services","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-10--hashicorp-consul-key-value-store/index":{"id":"DevOps/Hashicorp/2021-08-10--hashicorp-consul-key-value-store/index","title":"Hashicorp Consul Refresher - Key Value Store","description":"Mongkok, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-11--hashicorp-consul-backups/index":{"id":"DevOps/Hashicorp/2021-08-11--hashicorp-consul-backups/index","title":"Hashicorp Consul Refresher - Backups","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-12--hashicorp-consul-service-mesh/index":{"id":"DevOps/Hashicorp/2021-08-12--hashicorp-consul-service-mesh/index","title":"Hashicorp Consul Refresher - Service Mesh","description":"Wan Chai, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-13--hashicorp-consul-access-control-lists/index":{"id":"DevOps/Hashicorp/2021-08-13--hashicorp-consul-access-control-lists/index","title":"Hashicorp Consul Refresher - Access Control Lists","description":"Phnom Penh, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-14--hashicorp-consul-tls-encryption/index":{"id":"DevOps/Hashicorp/2021-08-14--hashicorp-consul-tls-encryption/index","title":"Hashicorp Consul Refresher - Gossip TLS Encryption","description":"Phnom Penh, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-20--hashicorp-vault-setup/index":{"id":"DevOps/Hashicorp/2021-08-20--hashicorp-vault-setup/index","title":"Hashicorp Vault - Setup","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-21--hashicorp-vault-secrets-tokens/index":{"id":"DevOps/Hashicorp/2021-08-21--hashicorp-vault-secrets-tokens/index","title":"Hashicorp Vault - Secrets & Tokens","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-22--hashicorp-vault-policies/index":{"id":"DevOps/Hashicorp/2021-08-22--hashicorp-vault-policies/index","title":"Hashicorp Vault - ACL Policies","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-23--hashicorp-vault-rest-api/index":{"id":"DevOps/Hashicorp/2021-08-23--hashicorp-vault-rest-api/index","title":"Hashicorp Vault - Rest API","description":"Tsim Sha Tsui, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-08-25--hashicorp-vault-logging/index":{"id":"DevOps/Hashicorp/2021-08-25--hashicorp-vault-logging/index","title":"Hashicorp Vault - Logging","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-09-05--hashicorp-terraform-setup/index":{"id":"DevOps/Hashicorp/2021-09-05--hashicorp-terraform-setup/index","title":"Hashicorp Terraform - Setup","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-09-06--hashicorp-terraform-providers-variables-attributes/index":{"id":"DevOps/Hashicorp/2021-09-06--hashicorp-terraform-providers-variables-attributes/index","title":"Hashicorp Terraform - Providers, Variables & Attributes","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-10-10--hashicorp-nomad-in-production/index":{"id":"DevOps/Hashicorp/2021-10-10--hashicorp-nomad-in-production/index","title":"Hashicorp Nomad in Production","description":"Koh Rong, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2021-10-11--hashicorp-consul-in-production/index":{"id":"DevOps/Hashicorp/2021-10-11--hashicorp-consul-in-production/index","title":"Hashicorp Consul in Production","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-15-hashicorp-nomad-refresher/index":{"id":"DevOps/Hashicorp/2022-05-15-hashicorp-nomad-refresher/index","title":"Hashicorp Nomad Refresher","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-16-hashicorp-dojo-nomad-starter/index":{"id":"DevOps/Hashicorp/2022-05-16-hashicorp-dojo-nomad-starter/index","title":"Hashicorp Nomad Dojo","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-17-hashicorp-dojo-nomad-deployment/index":{"id":"DevOps/Hashicorp/2022-05-17-hashicorp-dojo-nomad-deployment/index","title":"Hashicorp Nomad Deployment","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-18-hashicorp-dojo-nomad-adding-encryption/index":{"id":"DevOps/Hashicorp/2022-05-18-hashicorp-dojo-nomad-adding-encryption/index","title":"Hashicorp Nomad Adding Encryption to your Cluster","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-19-hashicorp-dojo-nomad-access-control/index":{"id":"DevOps/Hashicorp/2022-05-19-hashicorp-dojo-nomad-access-control/index","title":"Hashicorp Nomad Access Control","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-20-hashicorp-dojo-nomad-consul/index":{"id":"DevOps/Hashicorp/2022-05-20-hashicorp-dojo-nomad-consul/index","title":"Hashicorp Nomad with Consul Service Discovery","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-21-hashicorp-dojo-consul-refresher/index":{"id":"DevOps/Hashicorp/2022-05-21-hashicorp-dojo-consul-refresher/index","title":"Hashicorp Dojo Consul Refresher","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-22-hashicorp-dojo-nomad-consul-part-2/index":{"id":"DevOps/Hashicorp/2022-05-22-hashicorp-dojo-nomad-consul-part-2/index","title":"Hashicorp Nomad with Consul II - The Reckoning","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-24-hashicorp-nomad-with-nginx/index":{"id":"DevOps/Hashicorp/2022-05-24-hashicorp-nomad-with-nginx/index","title":"Hashicorp Nomad for NGINX Web Proxies","description":"","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-25-hashicorp-nomad-with-gitlab/index":{"id":"DevOps/Hashicorp/2022-05-25-hashicorp-nomad-with-gitlab/index","title":"App Deployment with Hashicorp Nomad from Gitlab","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-26-hashicorp-nomad-with-gitlab-part-2/index":{"id":"DevOps/Hashicorp/2022-05-26-hashicorp-nomad-with-gitlab-part-2/index","title":"App Deployment with Hashicorp Nomad from Gitlab Part Deux","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-27-hashicorp-nomad-for-elastic/index":{"id":"DevOps/Hashicorp/2022-05-27-hashicorp-nomad-for-elastic/index","title":"Hashicorp Nomad to set up an Elasticsearch Cluster","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-28-hashicorp-nomad-for-elastic-part-2/index":{"id":"DevOps/Hashicorp/2022-05-28-hashicorp-nomad-for-elastic-part-2/index","title":"Hashicorp Nomad to set up an Elasticsearch Cluster Part II","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-05-29-hashicorp-nomad-with-nginx-loadbalancer/index":{"id":"DevOps/Hashicorp/2022-05-29-hashicorp-nomad-with-nginx-loadbalancer/index","title":"Hashicorp Nomad with NGINX Loadbalancer","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-06-07-hashicorp-waypoint-docker/index":{"id":"DevOps/Hashicorp/2022-06-07-hashicorp-waypoint-docker/index","title":"Hashicorp Waypoint with Docker","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-06-08-hashicorp-waypoint-nomad/index":{"id":"DevOps/Hashicorp/2022-06-08-hashicorp-waypoint-nomad/index","title":"Hashicorp Waypoint with Nomad","description":"Shen Zhen, China","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-09-22--nomad-nts-timeserver/index":{"id":"DevOps/Hashicorp/2022-09-22--nomad-nts-timeserver/index","title":"Secure Timeserver - Deploying a NTS Server using Hashicorp Nomad","description":"In the previous step I deployed Chrony using Docker Compose. This time I try to migrate the deployment to Nomad & Consul.","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-09-24--nomad-nginx-ingress/index":{"id":"DevOps/Hashicorp/2022-09-24--nomad-nginx-ingress/index","title":"NGINX Ingress with Nomad","description":"Provision a containerized NGINX ingress using Hashicorp Nomad.","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-10-21-hashicorp-nomad-for-osticket-part-i/index":{"id":"DevOps/Hashicorp/2022-10-21-hashicorp-nomad-for-osticket-part-i/index","title":"Hashicorp Nomad to set up an OSTicket Helpdesk - Part I","description":"Porting a OSTicket/MariaDB helpdesk service from Docker-Compose to Nomad","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-10-22-hashicorp-nomad-sidecar-pattern/index":{"id":"DevOps/Hashicorp/2022-10-22-hashicorp-nomad-sidecar-pattern/index","title":"Hashicorp Nomad Sidecar Pattern","description":"Combine two applications in a single Nomad Job.","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-10-23-hashicorp-consul-connect/index":{"id":"DevOps/Hashicorp/2022-10-23-hashicorp-consul-connect/index","title":"Hashicorp Nomad - Working with Consul Connect","description":"CNI Error message with Consul Connect","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-10-23-hashicorp-nomad-ports/index":{"id":"DevOps/Hashicorp/2022-10-23-hashicorp-nomad-ports/index","title":"Hashicorp Nomad - Working with Ports","description":"How to declare Ports to be used in Nomad Job files","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-10-25-hashicorp-nomad-for-osticket-part-ii/index":{"id":"DevOps/Hashicorp/2022-10-25-hashicorp-nomad-for-osticket-part-ii/index","title":"Hashicorp Nomad to set up an OSTicket Helpdesk - Part II","description":"Porting a OSTicket/MariaDB helpdesk service from Docker-Compose to Nomad","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-11-11-hashicorp-nomad-for-borg-backups/index":{"id":"DevOps/Hashicorp/2022-11-11-hashicorp-nomad-for-borg-backups/index","title":"Hashicorp Nomad to run periodic backups","description":"Dockerized version of Borg Backup Server with Docker and Nomad","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-11-12-hashicorp-nomad-certbot-renewal/index":{"id":"DevOps/Hashicorp/2022-11-12-hashicorp-nomad-certbot-renewal/index","title":"Hashicorp Nomad to Renew your TLS Certificates","description":"Using the Periodic Stanza to execute Certbot Renewals","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-11-15-hashicorp-nomad-balanced-nts/index":{"id":"DevOps/Hashicorp/2022-11-15-hashicorp-nomad-balanced-nts/index","title":"Hashicorp Nomad Secure & Balanced NTS Time Service","description":"Using Nomad to deploy a secure time server.","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-11-15-hashicorp-nomad-nginx-load-balancing/index":{"id":"DevOps/Hashicorp/2022-11-15-hashicorp-nomad-nginx-load-balancing/index","title":"Hashicorp Nomad for NGINX Load-balancing","description":"Following along the official NGINX load-balancing tutorial.","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-11-16-hashicorp-nomad-mautic/index":{"id":"DevOps/Hashicorp/2022-11-16-hashicorp-nomad-mautic/index","title":"Deploy Mautic with Hashicorp Nomad","description":"Using Nomad to deploy the Mautic Marketing Automation Platform","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-11-18-hashicorp-nomad-grav/index":{"id":"DevOps/Hashicorp/2022-11-18-hashicorp-nomad-grav/index","title":"Deploy Grav CMS with Hashicorp Nomad","description":"Using Nomad to deploy the Grav open source flat-file CMS","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-11-24-hashicorp-consul-connect/index":{"id":"DevOps/Hashicorp/2022-11-24-hashicorp-consul-connect/index","title":"Hashicorp Nomad - Working with Consul Connect","description":"Use the Consul service mesh to connect a frontend with it\'s API backend.","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-12-03-hashicorp-vault-installation/index":{"id":"DevOps/Hashicorp/2022-12-03-hashicorp-vault-installation/index","title":"Hashicorp Vault - Installation 2023","description":"Getting started with Hashicorp Vault","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-12-04-hashicorp-consul-vault-certificates-part1/index":{"id":"DevOps/Hashicorp/2022-12-04-hashicorp-consul-vault-certificates-part1/index","title":"Hashicorp Consul - Vault Cert Management Part 1","description":"Set-up Vault to be the Certificate Authority","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part2/index":{"id":"DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part2/index","title":"Hashicorp Consul - Vault Cert Management Part 2","description":"Set-up Vault to be the Certificate Authority","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part3/index":{"id":"DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part3/index","title":"Hashicorp Consul - Vault Cert Management Part 3","description":"Set-up Vault to be the Certificate Authority","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2022-12-07-hashicorp-vault-ca-certificates/index":{"id":"DevOps/Hashicorp/2022-12-07-hashicorp-vault-ca-certificates/index","title":"Hashicorp Vault - Certificate Authority","description":"Generating CA certificates through Hashicorp Vault user interface.","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2023-10-22-hashicorp-terraform-docker-2023/index":{"id":"DevOps/Hashicorp/2023-10-22-hashicorp-terraform-docker-2023/index","title":"Hashicorp Terraform - Docker Provider 2023","description":"Build, change, and destroy Docker infrastructure using Terraform.","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2023-12-22-hashicorp-terraform-docker-2024/index":{"id":"DevOps/Hashicorp/2023-12-22-hashicorp-terraform-docker-2024/index","title":"Hashicorp Terraform - Docker Provider 2024","description":"Build, change, and destroy Docker infrastructure using Terraform.","sidebar":"tutorialSidebar"},"DevOps/Hashicorp/2023-12-23-opentofu-vs-terraform/index":{"id":"DevOps/Hashicorp/2023-12-23-opentofu-vs-terraform/index","title":"Opentofu vs Hashicorp Terraform","description":"The open source infrastructure as code alternative to Hashicorp Terraform.","sidebar":"tutorialSidebar"},"DevOps/Kubernetes/2019-01-02--managing-containers-in-kubernetes/index":{"id":"DevOps/Kubernetes/2019-01-02--managing-containers-in-kubernetes/index","title":"Managing Containers in Kubernetes","description":"Shanghai, China","sidebar":"tutorialSidebar"},"DevOps/Kubernetes/2019-01-15--creating-a-kubernetes-cluster/index":{"id":"DevOps/Kubernetes/2019-01-15--creating-a-kubernetes-cluster/index","title":"Creating a Kubernetes Cluster","description":"Shanghai, China","sidebar":"tutorialSidebar"},"DevOps/Kubernetes/2019-01-17--kubernetes-and-microservices/index":{"id":"DevOps/Kubernetes/2019-01-17--kubernetes-and-microservices/index","title":"Kubernetes and Microservices","description":"Sydney, Australia","sidebar":"tutorialSidebar"},"DevOps/Kubernetes/2019-01-19--kubernetes-cluster-logging/index":{"id":"DevOps/Kubernetes/2019-01-19--kubernetes-cluster-logging/index","title":"Kubernetes Cluster Monitoring & Logging","description":"Angkor Wat, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Kubernetes/2019-01-21--kubernetes-bare-metal-ingress/index":{"id":"DevOps/Kubernetes/2019-01-21--kubernetes-bare-metal-ingress/index","title":"Kubernetes Bare Metal Ingress","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Kubernetes/2019-01-21--kubernetes-nginx-https-service/index":{"id":"DevOps/Kubernetes/2019-01-21--kubernetes-nginx-https-service/index","title":"Kubernetes NGINX https Service","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Kubernetes/2019-01-22--kubernetes-nginx-ingress/index":{"id":"DevOps/Kubernetes/2019-01-22--kubernetes-nginx-ingress/index","title":"Kubernetes NGINX Ingress","description":"Malekula, Vanuatu","sidebar":"tutorialSidebar"},"DevOps/Kubernetes/2019-01-27--kubernetes-the-chinese-way/index":{"id":"DevOps/Kubernetes/2019-01-27--kubernetes-the-chinese-way/index","title":"Kubernetes the Chinese Way","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Kubernetes/2019-02-01--kubernetes-traefik-ingress/index":{"id":"DevOps/Kubernetes/2019-02-01--kubernetes-traefik-ingress/index","title":"Kubernetes Traefik Ingress","description":"Tanna, Vanuatu","sidebar":"tutorialSidebar"},"DevOps/Kubernetes/2019-03-02--installing-openshift-3-on-centos-7/index":{"id":"DevOps/Kubernetes/2019-03-02--installing-openshift-3-on-centos-7/index","title":"Red Hat OpenShift 3 Container Platform","description":"Harbin, China","sidebar":"tutorialSidebar"},"DevOps/Kubernetes/2019-03-05--first-openshift3-cluster/index":{"id":"DevOps/Kubernetes/2019-03-05--first-openshift3-cluster/index","title":"Setting up an OKD Cluster","description":"Mustang, Nepal","sidebar":"tutorialSidebar"},"DevOps/Kubernetes/2022-11-19--k3s-air-gapped-kubernetes/index":{"id":"DevOps/Kubernetes/2022-11-19--k3s-air-gapped-kubernetes/index","title":"Kubernetes Beyond the Edge","description":"Installing K3S on Air-Gapped Bare-Metal Server","sidebar":"tutorialSidebar"},"DevOps/Linux/2018-10-27--red-hat-certified-engineer-rhce/index":{"id":"DevOps/Linux/2018-10-27--red-hat-certified-engineer-rhce/index","title":"Red Hat Certified Engineer (RHCE) Exam","description":"Angkor Wat, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-01-11--debian-change-ssh-port-hostname/index":{"id":"DevOps/Linux/2019-01-11--debian-change-ssh-port-hostname/index","title":"Debian SSH Port and Hostname","description":"Battambang, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-01-11--root-access-ubuntu-server/index":{"id":"DevOps/Linux/2019-01-11--root-access-ubuntu-server/index","title":"Ubuntu Server Root SSH Remote Access","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-01-11--ubuntu-network-configuration/index":{"id":"DevOps/Linux/2019-01-11--ubuntu-network-configuration/index","title":"Ubuntu Network Configuration","description":"Battambang, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-01-11--ubuntu-server-app-armour/index":{"id":"DevOps/Linux/2019-01-11--ubuntu-server-app-armour/index","title":"Ubuntu Server Cannot Stop Docker Container","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-01-12--centos-network-configuration/index":{"id":"DevOps/Linux/2019-01-12--centos-network-configuration/index","title":"Centos Network Configuration","description":"Battambang, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-01-13--centos-administration/index":{"id":"DevOps/Linux/2019-01-13--centos-administration/index","title":"Centos Administration","description":"Abashiri, Japan","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-06-07--installing-docker-on-centos8/index":{"id":"DevOps/Linux/2019-06-07--installing-docker-on-centos8/index","title":"Setting up Docker on CentOS 8","description":"Harbin, China","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-06-14--download-and-save-docker-image/index":{"id":"DevOps/Linux/2019-06-14--download-and-save-docker-image/index","title":"Downloading Docker Images for Offline Use","description":"Mustang, Nepal","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-06-17--working-with-tmux/index":{"id":"DevOps/Linux/2019-06-17--working-with-tmux/index","title":"Working with TMUX","description":"Wan Chai, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-09-22--centos8-network-config/index":{"id":"DevOps/Linux/2019-09-22--centos8-network-config/index","title":"CentOS 8 Network Configuration","description":"Mong Kok, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-09-22--zsh-on-centos8/index":{"id":"DevOps/Linux/2019-09-22--zsh-on-centos8/index","title":"Installing Oh-My-Zsh on CentOS8","description":"Central, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-09-22--zsh-on-ubuntu20/index":{"id":"DevOps/Linux/2019-09-22--zsh-on-ubuntu20/index","title":"Installing Oh-My-Zsh on Ubuntu 20.04","description":"Central, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-09-25--podman-cheat-sheet/index":{"id":"DevOps/Linux/2019-09-25--podman-cheat-sheet/index","title":"Podman Cheat Sheet","description":"This cheat sheet was written by Doug Tidwell, with huge thanks to Dan Walsh and Scott McCarty.","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-09-26--kali-docker-windows/index":{"id":"DevOps/Linux/2019-09-26--kali-docker-windows/index","title":"Kali Linux with Docker for Windows","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Linux/2019-12-03--podman-ftp-server-container/index":{"id":"DevOps/Linux/2019-12-03--podman-ftp-server-container/index","title":"Podman FTP Server Container","description":"Victory Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Linux/2020-01-05--centos8-cockpit/index":{"id":"DevOps/Linux/2020-01-05--centos8-cockpit/index","title":"CentOS 8 Cockpit Web Console","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Linux/2020-01-07--centos8-firewalld/index":{"id":"DevOps/Linux/2020-01-07--centos8-firewalld/index","title":"Installing FirewallD on CentOS 8","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Linux/2020-10-13--smarttools-centos/index":{"id":"DevOps/Linux/2020-10-13--smarttools-centos/index","title":"HDD Smart Tools for LINUX","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Linux/2020-10-20--activating-root-login-ubuntu-20-10/index":{"id":"DevOps/Linux/2020-10-20--activating-root-login-ubuntu-20-10/index","title":"Activating Root Login on Ubuntu 20.10","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Linux/2021-03-15-debian-upgrade-bullseye/index":{"id":"DevOps/Linux/2021-03-15-debian-upgrade-bullseye/index","title":"Debian Upgrade to Bullseye","description":"Hongkong, TST","sidebar":"tutorialSidebar"},"DevOps/Linux/2021-04-11-installing-free-red-hat-enterprise-linux/index":{"id":"DevOps/Linux/2021-04-11-installing-free-red-hat-enterprise-linux/index","title":"Installing Free Red Hat Enterprise Linux","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Linux/2021-04-12-gnome3-cheat-sheet/index":{"id":"DevOps/Linux/2021-04-12-gnome3-cheat-sheet/index","title":"Gnome3 Cheat Sheet","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Linux/2021-04-13-installing-kvm-on-red-hat-enterprise-linux/index":{"id":"DevOps/Linux/2021-04-13-installing-kvm-on-red-hat-enterprise-linux/index","title":"Setting up KVM on RedHat Enterprise Linux","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Linux/2021-04-14-using-deb-files-on-rhel8/index":{"id":"DevOps/Linux/2021-04-14-using-deb-files-on-rhel8/index","title":"Installing Deb Packages on RHEL8","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Linux/2021-09-01--kali-linux-raspberry-pi/index":{"id":"DevOps/Linux/2021-09-01--kali-linux-raspberry-pi/index","title":"Installing Kali LINUX on a Raspberry Pi 3","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Linux/2021-09-02--openwrt-raspberry-pi/index":{"id":"DevOps/Linux/2021-09-02--openwrt-raspberry-pi/index","title":"Installing OpenWRT on a Raspberry Pi 4","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Linux/2021-10-09--editor-from-hell/index":{"id":"DevOps/Linux/2021-10-09--editor-from-hell/index","title":"Editor from Hell","description":"Harbin , China","sidebar":"tutorialSidebar"},"DevOps/Linux/2021-10-09--the-friendly-editor/index":{"id":"DevOps/Linux/2021-10-09--the-friendly-editor/index","title":"The friendly Editor","description":"Harbin , China","sidebar":"tutorialSidebar"},"DevOps/Linux/2021-10-23--arch-linux-install-packages/index":{"id":"DevOps/Linux/2021-10-23--arch-linux-install-packages/index","title":"Install Packages in Arch Linux","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Linux/2021-10-24--arch-linux-install-docker/index":{"id":"DevOps/Linux/2021-10-24--arch-linux-install-docker/index","title":"Install Docker in Arch Linux","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Linux/2021-10-24--arch-linux-install-mesen/index":{"id":"DevOps/Linux/2021-10-24--arch-linux-install-mesen/index","title":"Install Mesen in Arch Linux","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Linux/2021-10-26--install-davinci-resolve-on-arch/index":{"id":"DevOps/Linux/2021-10-26--install-davinci-resolve-on-arch/index","title":"Install Davinci Resolve on Arch Linux","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Linux/2022-03-07--ffmpeg-cheat-sheet/index":{"id":"DevOps/Linux/2022-03-07--ffmpeg-cheat-sheet/index","title":"FFMPEG Cheat Sheet","description":"ffmpeg version 5.0-full_build-www.gyan.dev Copyright (c) 2000-2022","sidebar":"tutorialSidebar"},"DevOps/Linux/2022-03-08--arch-kde-fritz-vpn/index":{"id":"DevOps/Linux/2022-03-08--arch-kde-fritz-vpn/index","title":"Using the AVM Fritzbox VPN on Manjaro (KDE)","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Linux/2022-03-09--fing-cli-network-scanner/index":{"id":"DevOps/Linux/2022-03-09--fing-cli-network-scanner/index","title":"Fing CLI Network Scanner on Arch Linux","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Linux/2022-03-10--nmap-network-scanner/index":{"id":"DevOps/Linux/2022-03-10--nmap-network-scanner/index","title":"nmap Cheat Sheet","description":"Syntax for Nmap Commands","sidebar":"tutorialSidebar"},"DevOps/Linux/2022-09-15--ntp-over-nts-timeserver/index":{"id":"DevOps/Linux/2022-09-15--ntp-over-nts-timeserver/index","title":"Secure Timeserver - NTP with NTS with Docker","description":"NTS is a method for using TLS/SSL to authenticate NTP traffic on the net.","sidebar":"tutorialSidebar"},"DevOps/Linux/2022-09-28--nts-client-setup/index":{"id":"DevOps/Linux/2022-09-28--nts-client-setup/index","title":"NTS-Service and Authenticated Time Synchronization","description":"Building a client for a time service which uses IETF RFC 8915 called \u201cNetwork Time Security\u201c (NTS).","sidebar":"tutorialSidebar"},"DevOps/Linux/2022-09-29--build-an-chrony-nts-client-from-source/index":{"id":"DevOps/Linux/2022-09-29--build-an-chrony-nts-client-from-source/index","title":"Build a Chrony NTS Client from Source","description":"Building a client from source for a time service which uses IETF RFC 8915 called \u201cNetwork Time Security\u201c (NTS).","sidebar":"tutorialSidebar"},"DevOps/Linux/2022-11-04--check-filesystem/index":{"id":"DevOps/Linux/2022-11-04--check-filesystem/index","title":"Check the Filesystem","description":"Check the Filesystem of a mounted SD Card using fsck","sidebar":"tutorialSidebar"},"DevOps/Linux/2022-11-09--docker-borg-backupserver/index":{"id":"DevOps/Linux/2022-11-09--docker-borg-backupserver/index","title":"Resistance is futile - Borg with Docker","description":"Backup server using Docker","sidebar":"tutorialSidebar"},"DevOps/Linux/2023-02-03--installing-docker-raspberry-pi/index":{"id":"DevOps/Linux/2023-02-03--installing-docker-raspberry-pi/index","title":"ARM Docker","description":"Installing Docker on a Raspberry Pi","sidebar":"tutorialSidebar"},"DevOps/Linux/2023-03-29--installing-the-elgato-streamdeck/index":{"id":"DevOps/Linux/2023-03-29--installing-the-elgato-streamdeck/index","title":"Elgato Streamdeck on Arch Linux","description":"Installing the Elgato Streamdeck on Arch Linux","sidebar":"tutorialSidebar"},"DevOps/Linux/2023-10-28--lunarvim/index":{"id":"DevOps/Linux/2023-10-28--lunarvim/index","title":"From NeoVim to LunarVim","description":"An IDE layer for Neovim with sane defaults. Completely free and community driven.","sidebar":"tutorialSidebar"},"DevOps/Linux/2024-01-08--vsftp-ubuntu/index":{"id":"DevOps/Linux/2024-01-08--vsftp-ubuntu/index","title":"vsftp on Ubuntu","description":"Setting up an FTP server on Ubuntu 22.04.","sidebar":"tutorialSidebar"},"DevOps/NGINX/2017-10-01--using-nginx-as-proxy-for-your-nodejs-apps/index":{"id":"DevOps/NGINX/2017-10-01--using-nginx-as-proxy-for-your-nodejs-apps/index","title":"Using NGINX as proxy for your nodejs apps","description":"Hongkong","sidebar":"tutorialSidebar"},"DevOps/NGINX/2017-12-24--nginx-node-security/index":{"id":"DevOps/NGINX/2017-12-24--nginx-node-security/index","title":"NGINX, Node.js & Security","description":"Sydney, Australia","sidebar":"tutorialSidebar"},"DevOps/NGINX/2019-02-05--nginx-ingress-cert-manager/index":{"id":"DevOps/NGINX/2019-02-05--nginx-ingress-cert-manager/index","title":"NGINX Ingress with Cert-Manager","description":"Port Vila, Vanuatu","sidebar":"tutorialSidebar"},"DevOps/NGINX/2019-11-07--nginx-rtmp-streaming-container/index":{"id":"DevOps/NGINX/2019-11-07--nginx-rtmp-streaming-container/index","title":"Building an RTMP Streaming Server with Podman","description":"Harbin, China","sidebar":"tutorialSidebar"},"DevOps/NGINX/2019-11-08--nginx-rtmp-website/index":{"id":"DevOps/NGINX/2019-11-08--nginx-rtmp-website/index","title":"Adding an OBS Stream to your Website","description":"Koh Rong, Cambodia","sidebar":"tutorialSidebar"},"DevOps/NGINX/2020-07-29--securing-apache-and-nginx/index":{"id":"DevOps/NGINX/2020-07-29--securing-apache-and-nginx/index","title":"Securing Webservers - Apache and NGINX","description":"Central, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/NGINX/2020-08-26--nginx-docker-setup/index":{"id":"DevOps/NGINX/2020-08-26--nginx-docker-setup/index","title":"NGINX Docker Setup","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/NGINX/2020-08-27--nginx-docker-ssl-certs-self-signed/index":{"id":"DevOps/NGINX/2020-08-27--nginx-docker-ssl-certs-self-signed/index","title":"NGINX Docker with SSL Encryption (Self-signed)","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/NGINX/2020-08-28--nginx-docker-certbot/index":{"id":"DevOps/NGINX/2020-08-28--nginx-docker-certbot/index","title":"NGINX Docker with Certbot","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/NGINX/2020-08-30--nginx-docker-multihost/index":{"id":"DevOps/NGINX/2020-08-30--nginx-docker-multihost/index","title":"NGINX Docker Multihost","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/NGINX/2021-02-22-nginx-docker-ingress/index":{"id":"DevOps/NGINX/2021-02-22-nginx-docker-ingress/index","title":"NGINX Docker Ingress for your Gatsby Build","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/NGINX/2021-02-23-nginx-agent-redirect/index":{"id":"DevOps/NGINX/2021-02-23-nginx-agent-redirect/index","title":"NGINX Redirect based on User Agent","description":"Tsim Sha Tsui, Hongkong","sidebar":"tutorialSidebar"},"DevOps/NGINX/2021-07-29--certbot-nginx-autorenewal/index":{"id":"DevOps/NGINX/2021-07-29--certbot-nginx-autorenewal/index","title":"Setting up Certbot Auto-renewal for NGINX (Maintenance Mode)","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/NGINX/2022-11-17-nginx-udp-tcp-load-balancing/index":{"id":"DevOps/NGINX/2022-11-17-nginx-udp-tcp-load-balancing/index","title":"NGINX TCP/UDP Load Balancing","description":"Using the NGINX Stream Module to balance TCP/UDP Traffic","sidebar":"tutorialSidebar"},"DevOps/NGINX/2022-12-08-nginx-websocket-proxy/index":{"id":"DevOps/NGINX/2022-12-08-nginx-websocket-proxy/index","title":"NGINX Websocket Proxy","description":"Using the NGINX as a Proxy for Websocket APIs","sidebar":"tutorialSidebar"},"DevOps/NGINX/2023-06-13-nginx-docker-ingress/index":{"id":"DevOps/NGINX/2023-06-13-nginx-docker-ingress/index","title":"NGINX HTTP/2 Docker Ingress","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2010-02-02--svn-subversion-windows/index":{"id":"DevOps/Provisioning/2010-02-02--svn-subversion-windows/index","title":"Using SVN Subversion on Windows 10","description":"Installing Subversion","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2017-09-05--developing-software-in-china/index":{"id":"DevOps/Provisioning/2017-09-05--developing-software-in-china/index","title":"Proxima Centauri","description":"Phnom Penh, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2017-09-06--developing-software-in-china-2/index":{"id":"DevOps/Provisioning/2017-09-06--developing-software-in-china-2/index","title":"Proxima Centauri II","description":"Phnom Penh, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2018-01-26--node-express-docker-container/index":{"id":"DevOps/Provisioning/2018-01-26--node-express-docker-container/index","title":"Run your Node.js app from a Docker Container","description":"Abashiri, Hokkaido, Japan","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2018-01-27--express-generator-app-docker/index":{"id":"DevOps/Provisioning/2018-01-27--express-generator-app-docker/index","title":"Link your Node Source Code into a Docker Container","description":"Mustang, Nepal","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2018-01-28--express-generator-dockerrized/index":{"id":"DevOps/Provisioning/2018-01-28--express-generator-dockerrized/index","title":"How to wrap your Source Code into a Docker Container","description":"Shanghai, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2018-11-10--postgresql-getting-started/index":{"id":"DevOps/Provisioning/2018-11-10--postgresql-getting-started/index","title":"Getting started with PostgreSQL in Windows 10","description":"Muktinath, Nepal","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2018-12-27--red-hat-containerized-application-development-rhcs/index":{"id":"DevOps/Provisioning/2018-12-27--red-hat-containerized-application-development-rhcs/index","title":"Red Hat Certified Specialist in Containerized Application Development","description":"Shanghai, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2019-01-08--creating-a-grafana-dashboard/index":{"id":"DevOps/Provisioning/2019-01-08--creating-a-grafana-dashboard/index","title":"Sensors Data and Grafana","description":"Hongkong","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2019-06-15--installing-discourse-on-centos8/index":{"id":"DevOps/Provisioning/2019-06-15--installing-discourse-on-centos8/index","title":"Installing Discourse on Centos 8","description":"Mongkok, Hongkong","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2019-06-16--migrating-from-vbulletin-to-discourse-on-centos8/index":{"id":"DevOps/Provisioning/2019-06-16--migrating-from-vbulletin-to-discourse-on-centos8/index","title":"Migrating from vBulletin 5 to Discourse on CentOS 8","description":"Taipa, Macau","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2019-06-18--using-oauth2-in-discourse/index":{"id":"DevOps/Provisioning/2019-06-18--using-oauth2-in-discourse/index","title":"User Login with Google OAuth2 for Discourse","description":"Katmandu, Nepal","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2019-06-19--using-twitter-auth-in-discourse/index":{"id":"DevOps/Provisioning/2019-06-19--using-twitter-auth-in-discourse/index","title":"User Login with Twitter for Discourse","description":"Taipa, Macau","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2019-06-20--using-github-auth-in-discourse/index":{"id":"DevOps/Provisioning/2019-06-20--using-github-auth-in-discourse/index","title":"User Login with Github for Discourse","description":"Mustang, Nepal","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2019-06-21--using-facebook-auth-in-discourse/index":{"id":"DevOps/Provisioning/2019-06-21--using-facebook-auth-in-discourse/index","title":"User Login with Facebook for Discourse","description":"Bakhtapur, Nepal","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2019-09-16--installing-vanilla-forum/index":{"id":"DevOps/Provisioning/2019-09-16--installing-vanilla-forum/index","title":"Vanilla Forums Installation on Debian","description":"Katmandu, Nepal","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2020-06-07--setting-up-wikijs-in-docker/index":{"id":"DevOps/Provisioning/2020-06-07--setting-up-wikijs-in-docker/index","title":"Developing WikiJS in Docker","description":"Central, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2020-07-13--infrastructure-as-code/index":{"id":"DevOps/Provisioning/2020-07-13--infrastructure-as-code/index","title":"Infrastructure as Code","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2020-08-29--static-server-with-hapi-and-docker/index":{"id":"DevOps/Provisioning/2020-08-29--static-server-with-hapi-and-docker/index","title":"Serving Static Files with Hapi and Docker","description":"Central, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2020-09-02--docker-compose-networking/index":{"id":"DevOps/Provisioning/2020-09-02--docker-compose-networking/index","title":"Docker Compose Networking","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2020-10-01--installing-openproject-in-docker/index":{"id":"DevOps/Provisioning/2020-10-01--installing-openproject-in-docker/index","title":"Installing OpenProject with Docker Compose","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2020-10-02--installing-wazuh-in-docker/index":{"id":"DevOps/Provisioning/2020-10-02--installing-wazuh-in-docker/index","title":"Installing Wazuh with Docker Compose","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2021-01-22-file-transfer-tools-in-nodejs/index":{"id":"DevOps/Provisioning/2021-01-22-file-transfer-tools-in-nodejs/index","title":"File Transfer Tool in Node.js","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2021-01-23-nodejs-file-server/index":{"id":"DevOps/Provisioning/2021-01-23-nodejs-file-server/index","title":"Node.js FTP Server","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2021-01-27-owncloud-ocis/index":{"id":"DevOps/Provisioning/2021-01-27-owncloud-ocis/index","title":"ownCloud Infinite Scale Stack","description":"Jomson, Nepal","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2021-04-07--loki-prometheus-grafana/index":{"id":"DevOps/Provisioning/2021-04-07--loki-prometheus-grafana/index","title":"Loki - Promtail & Grafana for System Logs.","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2021-09-13--postgres-refresher-part-i/index":{"id":"DevOps/Provisioning/2021-09-13--postgres-refresher-part-i/index","title":"PostgreSQL 14 Database Refresher :: Introduction Part I","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2021-09-13--postgres-refresher-part-ii/index":{"id":"DevOps/Provisioning/2021-09-13--postgres-refresher-part-ii/index","title":"PostgreSQL 14 Database Refresher :: Introduction Part II","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2021-09-14--postgres-refresher-hasura/index":{"id":"DevOps/Provisioning/2021-09-14--postgres-refresher-hasura/index","title":"PostgreSQL 14 Database Refresher :: Working with GraphQL","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2021-09-14--postgres-refresher-node-json/index":{"id":"DevOps/Provisioning/2021-09-14--postgres-refresher-node-json/index","title":"PostgreSQL 14 Database Refresher :: Working with JSON & Node.js","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2021-10-12--traefik-configuration/index":{"id":"DevOps/Provisioning/2021-10-12--traefik-configuration/index","title":"Traefik v2 Webproxy Configuration - 1st Attempt","description":"Central, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2021-10-12--traefik-second-attempt/index":{"id":"DevOps/Provisioning/2021-10-12--traefik-second-attempt/index","title":"Traefik v2 Webproxy Configuration - 2nd Attempt","description":"Central, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2021-10-12--traefik-third-attempt/index":{"id":"DevOps/Provisioning/2021-10-12--traefik-third-attempt/index","title":"Setting up Wordpress with Traefik v2","description":"Central, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2021-10-25--matrix-secure-messaging/index":{"id":"DevOps/Provisioning/2021-10-25--matrix-secure-messaging/index","title":"Matrix Secure Messaging","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2022-01-23--installing-discourse-docker/index":{"id":"DevOps/Provisioning/2022-01-23--installing-discourse-docker/index","title":"Installing a Discourse Forum on Debian Bullseye with Docker","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2022-01-24--getting-to-know-bind9-docker/index":{"id":"DevOps/Provisioning/2022-01-24--getting-to-know-bind9-docker/index","title":"Getting to know the BIND9 DNS Server with Docker","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2022-01-25--installing-bind9-docker/index":{"id":"DevOps/Provisioning/2022-01-25--installing-bind9-docker/index","title":"Running a DNS Server with Docker","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2022-01-26--dns-over-TLS-docker/index":{"id":"DevOps/Provisioning/2022-01-26--dns-over-TLS-docker/index","title":"DNS Over TLS Using BIND And Nginx","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2022-01-27--bind9-configuration/index":{"id":"DevOps/Provisioning/2022-01-27--bind9-configuration/index","title":"Bind9 Server Configuration","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2022-10-16--os-ticket-docker/index":{"id":"DevOps/Provisioning/2022-10-16--os-ticket-docker/index","title":"Provision OSticket with Docker","description":"Use Docker, Docker-Compose and Nomad to provide an OSTicket Service","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2022-10-27--os-ticket-rest-api/index":{"id":"DevOps/Provisioning/2022-10-27--os-ticket-rest-api/index","title":"OSticket REST API Calls","description":"Use Docker, Docker-Compose and Nomad to provide an OSTicket Service","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2022-11-07--cphalcon-docker/index":{"id":"DevOps/Provisioning/2022-11-07--cphalcon-docker/index","title":"Deploy a cPhalcon App with Docker","description":"User Docker to provision a cPhalcon PHP application","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2022-11-16--mautic-docker/index":{"id":"DevOps/Provisioning/2022-11-16--mautic-docker/index","title":"Deploy Mautic with Docker","description":"User Docker to provision the Mautic Free and Open Source Marketing Automation Platform","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2023-02-13--meili-search-gatsby/index":{"id":"DevOps/Provisioning/2023-02-13--meili-search-gatsby/index","title":"Gatsby Blog with a MeiLi Search Backend","description":"Serve your Gatsby.js Blog in a goFiber container and connect a Search Engine.","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2023-03-09--os-ticket-docker-2023/index":{"id":"DevOps/Provisioning/2023-03-09--os-ticket-docker-2023/index","title":"Provision OSticket with Docker (2023)","description":"Use Docker, Docker-Compose and Nomad to provide an OSTicket Service","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2024-01-17--ntfy-notification-service/index":{"id":"DevOps/Provisioning/2024-01-17--ntfy-notification-service/index","title":"ntfy Notification Service","description":"ntfy lets you send push notifications to your phone or desktop via scripts from any computer, using simple HTTP PUT or POST requests.","sidebar":"tutorialSidebar"},"DevOps/Provisioning/2024-01-18--uptime-kuma-monitoring/index":{"id":"DevOps/Provisioning/2024-01-18--uptime-kuma-monitoring/index","title":"Uptime Kuma","description":"Uptime Kuma is an easy-to-use self-hosted monitoring tool.","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-14--install-salt-on-ubuntu-20-04/index":{"id":"DevOps/Salt/2020-06-14--install-salt-on-ubuntu-20-04/index","title":"Install Salt on Ubuntu Server 20.04","description":"Battambang, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-15--salty-devops/index":{"id":"DevOps/Salt/2020-06-15--salty-devops/index","title":"Salty DevOps","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-16--salt-state/index":{"id":"DevOps/Salt/2020-06-16--salt-state/index","title":"Salt State","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-17--salt-pillars-formulas/index":{"id":"DevOps/Salt/2020-06-17--salt-pillars-formulas/index","title":"Salt Pillars & Formulas","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-18--salt-execution-order/index":{"id":"DevOps/Salt/2020-06-18--salt-execution-order/index","title":"Salt Execution Order","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-19--salt-mine-orchestrate/index":{"id":"DevOps/Salt/2020-06-19--salt-mine-orchestrate/index","title":"Salt Mine & Orchestrate","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-20--salt-reactor-events/index":{"id":"DevOps/Salt/2020-06-20--salt-reactor-events/index","title":"Salt Reactor and System Events","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-21--salt-events-and-thirdparty-apps/index":{"id":"DevOps/Salt/2020-06-21--salt-events-and-thirdparty-apps/index","title":"Salt Beacons Module","description":"Mon Kok, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-22--salt-nginx-state/index":{"id":"DevOps/Salt/2020-06-22--salt-nginx-state/index","title":"NGINX Salt State","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-23--saltestack-refresh-course-1-setup/index":{"id":"DevOps/Salt/2020-06-23--saltestack-refresh-course-1-setup/index","title":"Saltstack Refresh Course 1: Setup","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-23--saltestack-refresh-course-2-salt-state/index":{"id":"DevOps/Salt/2020-06-23--saltestack-refresh-course-2-salt-state/index","title":"Saltstack Refresh Course 2: Salt State","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-23--saltestack-refresh-course-3-highstate/index":{"id":"DevOps/Salt/2020-06-23--saltestack-refresh-course-3-highstate/index","title":"Saltstack Refresh Course 2: Highstate","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-23--saltestack-refresh-course-4-salt-mine/index":{"id":"DevOps/Salt/2020-06-23--saltestack-refresh-course-4-salt-mine/index","title":"Saltstack Refresh Course 2: Salt Mines","description":"Cheung Chau, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Salt/2020-06-25--salt-orchestration-for-docker-containers/index":{"id":"DevOps/Salt/2020-06-25--salt-orchestration-for-docker-containers/index","title":"Salt Orchestration for Docker Containers","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Security/2020-07-26--firewalld-configuration/index":{"id":"DevOps/Security/2020-07-26--firewalld-configuration/index","title":"Securing Webservers - FirewallD and fail2ban","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Security/2020-07-27--firewalld-deployment-centos7/index":{"id":"DevOps/Security/2020-07-27--firewalld-deployment-centos7/index","title":"Securing Webservers - FirewallD Deployment on CentOS7","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Security/2020-07-27--firewalld-deployment-debian/index":{"id":"DevOps/Security/2020-07-27--firewalld-deployment-debian/index","title":"Securing Webservers - FirewallD Deployment on Debian 9","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Security/2020-07-27--firewalld-deployment-ubuntu/index":{"id":"DevOps/Security/2020-07-27--firewalld-deployment-ubuntu/index","title":"Securing Webservers - FirewallD Deployment on Ubuntu 20.04","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Security/2020-07-28--fail2ban-ubuntu-server/index":{"id":"DevOps/Security/2020-07-28--fail2ban-ubuntu-server/index","title":"Securing Webservers - Fail2Ban Ubuntu 20.10","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Security/2020-07-28--uncomplicated-firewall-ufw/index":{"id":"DevOps/Security/2020-07-28--uncomplicated-firewall-ufw/index","title":"Securing Webservers - Uncomplicated Firewall","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Security/2022-09-27--wireshark-with-tls-encryption/index":{"id":"DevOps/Security/2022-09-27--wireshark-with-tls-encryption/index","title":"Analyzing and Decrypting TLS with Wireshark","description":"Capturing session keys to decrypt TLS traffic.","sidebar":"tutorialSidebar"},"DevOps/Tomcat/2020-12-22-tomcat9-ubuntu-20-10-installation/index":{"id":"DevOps/Tomcat/2020-12-22-tomcat9-ubuntu-20-10-installation/index","title":"Install Tomcat 9 on Ubuntu 20.04","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Tomcat/2020-12-23-tomcat9-configuration/index":{"id":"DevOps/Tomcat/2020-12-23-tomcat9-configuration/index","title":"Tomcat 9 Configuration","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Tomcat/2020-12-24-tomcat9-cluster-and-load-balancing/index":{"id":"DevOps/Tomcat/2020-12-24-tomcat9-cluster-and-load-balancing/index","title":"Tomcat 9 Cluster & Loadbalancing","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Tomcat/2020-12-25-tomcat10-docker-cluster/index":{"id":"DevOps/Tomcat/2020-12-25-tomcat10-docker-cluster/index","title":"Tomcat 10 Docker Cluster","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Tomcat/2020-12-26-tomcat10-cluster-with-individual-nodes/index":{"id":"DevOps/Tomcat/2020-12-26-tomcat10-cluster-with-individual-nodes/index","title":"Tomcat 10 Cluster with individual Node Server","description":"Siem Reap, Cambodia","sidebar":"tutorialSidebar"},"DevOps/Windows/2017-07-06--windows-cmd/index":{"id":"DevOps/Windows/2017-07-06--windows-cmd/index","title":"Windows CMD","description":"Hokkaido, Abashiri","sidebar":"tutorialSidebar"},"DevOps/Windows/2017-07-07--windows10-control/index":{"id":"DevOps/Windows/2017-07-07--windows10-control/index","title":"Windows Control","description":"Hokkaido, Abashiri","sidebar":"tutorialSidebar"},"DevOps/Windows/2017-12-19--umlaute-on-us-keyboard/index":{"id":"DevOps/Windows/2017-12-19--umlaute-on-us-keyboard/index","title":"Umlaute","description":"Harbin, China","sidebar":"tutorialSidebar"},"DevOps/Windows/2019-06-09--setting-up-windows-server-2019/index":{"id":"DevOps/Windows/2019-06-09--setting-up-windows-server-2019/index","title":"Getting Started with Windows Server 2019","description":"Central, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Windows/2019-06-10--windows-server-2019-scripting-and-sharing/index":{"id":"DevOps/Windows/2019-06-10--windows-server-2019-scripting-and-sharing/index","title":"Windows Server 2019 - Scripting and Sharing","description":"Wan Chai, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Windows/2019-06-11--windows-server-2019-active-directory/index":{"id":"DevOps/Windows/2019-06-11--windows-server-2019-active-directory/index","title":"Windows Server 2019 - Active Directory Installation","description":"Shanghai, China","sidebar":"tutorialSidebar"},"DevOps/Windows/2019-06-12--windows-server-2019-active-directory/index":{"id":"DevOps/Windows/2019-06-12--windows-server-2019-active-directory/index","title":"Windows Server 2019 - Active Directory Setup","description":"Shanghai, China","sidebar":"tutorialSidebar"},"DevOps/Windows/2019-06-13--windows-server-2019-docker-daemon/index":{"id":"DevOps/Windows/2019-06-13--windows-server-2019-docker-daemon/index","title":"Windows Server 2019 - Docker Daemon","description":"Shanghai, China","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2020-07-12--nagios-docker-install/index":{"id":"DevOps/Zabbix/2020-07-12--nagios-docker-install/index","title":"Installing Nagios4 with Docker","description":"Cheung Chau, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2020-07-14--nagios-ubuntu-install/index":{"id":"DevOps/Zabbix/2020-07-14--nagios-ubuntu-install/index","title":"Installing Nagios4 on Ubuntu Server 20.04","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2020-07-15--zabbix-docker-installation/index":{"id":"DevOps/Zabbix/2020-07-15--zabbix-docker-installation/index","title":"Zabbix Docker Installation","description":"Victoria Harbour, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2020-07-16--zabbix-agent/index":{"id":"DevOps/Zabbix/2020-07-16--zabbix-agent/index","title":"Zabbix Agent","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2020-07-17--zabbix-website-monitor/index":{"id":"DevOps/Zabbix/2020-07-17--zabbix-website-monitor/index","title":"Zabbix Monitoring a Website","description":"Mong Kok, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2020-07-18--zabbix-email-notification/index":{"id":"DevOps/Zabbix/2020-07-18--zabbix-email-notification/index","title":"Zabbix Email Notifications","description":"Mong Kok, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2020-07-19--zabbix-company-logo/index":{"id":"DevOps/Zabbix/2020-07-19--zabbix-company-logo/index","title":"Zabbix Company Logo","description":"Mong Kok, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2020-07-20--zabbix-behind-nginx/index":{"id":"DevOps/Zabbix/2020-07-20--zabbix-behind-nginx/index","title":"Zabbix Multi-Tenant NGINX Docker Ingress","description":"Mong Kok, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2020-09-05--slack-notifications-in-devops/index":{"id":"DevOps/Zabbix/2020-09-05--slack-notifications-in-devops/index","title":"Slack Notifications in DevOps","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2021-01-14--zabbix-apache2-monitor/index":{"id":"DevOps/Zabbix/2021-01-14--zabbix-apache2-monitor/index","title":"Zabbix Apache 2 Monitor","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2021-10-13--zabbix-compose-setup/index":{"id":"DevOps/Zabbix/2021-10-13--zabbix-compose-setup/index","title":"Zabbix Docker-Compose Setup","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2022-01-13--zabbix-api-testing/index":{"id":"DevOps/Zabbix/2022-01-13--zabbix-api-testing/index","title":"Testing the Zabbix API with Postman","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2022-01-13--zabbix-server-v6/index":{"id":"DevOps/Zabbix/2022-01-13--zabbix-server-v6/index","title":"Zabbix v6 Docker-Compose Setup","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2022-01-14--zabbix-apache2-monitor/index":{"id":"DevOps/Zabbix/2022-01-14--zabbix-apache2-monitor/index","title":"Zabbix v6 Apache 2 Monitor","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2022-01-14--zabbix-docker-monitor/index":{"id":"DevOps/Zabbix/2022-01-14--zabbix-docker-monitor/index","title":"Zabbix v6 Docker Monitor","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2022-01-14--zabbix-http-cert-monitor/index":{"id":"DevOps/Zabbix/2022-01-14--zabbix-http-cert-monitor/index","title":"Zabbix HTTPS Certificate Monitor","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2022-01-14--zabbix-nginx-monitor/index":{"id":"DevOps/Zabbix/2022-01-14--zabbix-nginx-monitor/index","title":"Zabbix v6 NGINX Monitor","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2022-01-15--zabbix-grafana-dashboard/index":{"id":"DevOps/Zabbix/2022-01-15--zabbix-grafana-dashboard/index","title":"Grafana Dashboard for Zabbix v6","description":"Guangzhou, China","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2022-01-15--zabbix-v6-email-notifications/index":{"id":"DevOps/Zabbix/2022-01-15--zabbix-v6-email-notifications/index","title":"Zabbix v6 Email Notifications","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2022-01-15--zabbix-v6-slack-notifications/index":{"id":"DevOps/Zabbix/2022-01-15--zabbix-v6-slack-notifications/index","title":"Zabbix v6 Slack Notifications","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/index":{"id":"DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/index","title":"Zabbix v6 SMART HDD Check","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2022-01-16--zabbix-v6-baseline-monitoring/index":{"id":"DevOps/Zabbix/2022-01-16--zabbix-v6-baseline-monitoring/index","title":"Zabbix v6 Creating triggers for Baseline monitoring and Anomaly detection","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2022-07-15-zabbix-for-zimbra/index":{"id":"DevOps/Zabbix/2022-07-15-zabbix-for-zimbra/index","title":"Zabbix <3 Zimbra","description":"Sydney, Australia","sidebar":"tutorialSidebar"},"DevOps/Zabbix/2024-03-07--zabbix-v6-hdd-cpu-temp-check/index":{"id":"DevOps/Zabbix/2024-03-07--zabbix-v6-hdd-cpu-temp-check/index","title":"Zabbix v6 SMART HDD and CPU Temperature Check","description":"TST, Hong Kong","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"Introduction","description":"Web Development","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-01-01-tf-model-server/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-01-01-tf-model-server/index","title":"Tensorflow Docker Model Server","description":"Use Tensorflow Serving to Provision your ML Model","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-01-02-tf-serve-own-models/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-01-02-tf-serve-own-models/index","title":"Tensorflow Serving REST API","description":"Provide your prediction model through the Tensorflow Serving REST API","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-01-03-tf-tensorboard/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-01-03-tf-tensorboard/index","title":"Tensorflow Tensorboard","description":"Tensorflow dashboard that allows you to track the network performance by accuracy and loss statistics.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-01-04-tf-distributed-strategy/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-01-04-tf-distributed-strategy/index","title":"Distributed training with TensorFlow","description":"Distribute training across multiple GPUs, multiple machines, or TPUs.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-01-05-dvc-model-version-control/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-01-05-dvc-model-version-control/index","title":"Data Version Control","description":"Open-source Version Control System for Machine Learning Projects.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-01-06-dvc-model-access/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-01-06-dvc-model-access/index","title":"DVC Model Access","description":"Retrieve your Model Data","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-01-22-python-ray-introduction/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-01-22-python-ray-introduction/index","title":"Python Ray Basic Concepts","description":"Ray is an open-source unified compute framework that makes it easy to scale AI and general Python workloads","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-01-23-python-ray-remote-functions/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-01-23-python-ray-remote-functions/index","title":"Python Ray Remote Functions","description":"Remote functions can be run in a separate process on the local machine - spreading out the workload over several cores. Or can be executed on remote machines in your server cluster.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-01-26-python-ray-remote-actors/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-01-26-python-ray-remote-actors/index","title":"Python Ray Remote Actors","description":"Use Ray Actors to maintain a state between invocations.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-01-29-python-ray-deployments/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-01-29-python-ray-deployments/index","title":"Python Ray Deployments","description":"Use Ray to deploy your remote services.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-01-31-python-ray-model-serving/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-01-31-python-ray-model-serving/index","title":"Python Ray Model Serving","description":"Using Ray Serve for ML Model Serving.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-02-01-apache-airflow-introduction/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-02-01-apache-airflow-introduction/index","title":"Apache Airflow Introduction","description":"Airflow is a platform to author, schedule and monitor workflows.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-02-04-apache-airflow-data-pipelines/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-02-04-apache-airflow-data-pipelines/index","title":"Apache Airflow Data Pipelines","description":"Airflow is a platform to author, schedule and monitor workflows.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-02-05-apache-airflow-scheduler/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-02-05-apache-airflow-scheduler/index","title":"Apache Airflow DAG Scheduling","description":"Airflow is a platform to author, schedule and monitor workflows.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-02-06-apache-airflow-dynamic-dags/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-02-06-apache-airflow-dynamic-dags/index","title":"Apache Airflow Dynamic DAGs","description":"Airflow is a platform to author, schedule and monitor workflows.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-02-09-mlflow-introduction/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-02-09-mlflow-introduction/index","title":"MLflow 2.1 Introduction","description":"An open source platform for the machine learning lifecycle.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-03-27-deploying-prediction-apis-with-flask/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-03-27-deploying-prediction-apis-with-flask/index","title":"Deploying Prediction APIs","description":"Using Flask to deploy your ML Model as a Web Application","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-06-17-scikit-learn-model-deployment/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-06-17-scikit-learn-model-deployment/index","title":"Serving your SciKit Learn Model as a Prediction API","description":"Use Flask, Docker and React.js to Deploy your ML Model to the Web","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-06-18-automl-with-autogluon-tabular-data/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-06-18-automl-with-autogluon-tabular-data/index","title":"AutoML with AutoGluon for Tabular Data","description":"Using Amazon SageMaker / AutoGluon to find your perfect model fit.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-06-21-automl-with-autogluon-multiclass-nlp/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-06-21-automl-with-autogluon-multiclass-nlp/index","title":"AutoML with AutoGluon for Multi-Modal Data NLP","description":"Using Amazon SageMaker / AutoGluon to find your perfect model fit.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-06-23-automl-with-autogluon-timeseries-forecast/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-06-23-automl-with-autogluon-timeseries-forecast/index","title":"AutoML with AutoGluon for Timeseries Forecasts","description":"Using Amazon SageMaker / AutoGluon to find your perfect model fit.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-07-10-scikit-image-model-deployment-part1/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-07-10-scikit-image-model-deployment-part1/index","title":"Serving your SciKit Image Model as a Prediction API","description":"Use Flask, Docker to Deploy your ML Model to the Web","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-07-12-scikit-image-model-deployment-part2/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-07-12-scikit-image-model-deployment-part2/index","title":"Serving your SciKit Image Model as a Prediction API","description":"Use Flask, Docker to Deploy your ML Model to the Web","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-08-19-tensorflow-serving-api/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-08-19-tensorflow-serving-api/index","title":"Tensorflow Serving API","description":"Once you build a machine learning model, the next step is to serve it with TensorFlow Serving.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2023-09-27-zenml-intro-sklearn-pipeline/index":{"id":"IoT-and-Machine-Learning/AIOps/2023-09-27-zenml-intro-sklearn-pipeline/index","title":"MLOps with ZenML - SKLearn Classifier Pipeline","description":"Use ZenML to build a SciKit-Learn SVC Image Classifier Pipeline","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2024-02-21-mlflow-pytorch-lightning-docker/index":{"id":"IoT-and-Machine-Learning/AIOps/2024-02-21-mlflow-pytorch-lightning-docker/index","title":"MLFlow with PyTorch Lighning in Docker","description":"Experiment with running pyTorch, Jupyter and MLFlow in Docker","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2024-02-24-mlflow-hyperparameter-tuning/index":{"id":"IoT-and-Machine-Learning/AIOps/2024-02-24-mlflow-hyperparameter-tuning/index","title":"MLFlow Hyperparameter Tuning in Docker","description":"Experiment to run pyTorch, Jupyter, Hyperopt and MLFlow in Docker","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/AIOps/2024-02-26-mlflow-with-yolov81/index":{"id":"IoT-and-Machine-Learning/AIOps/2024-02-26-mlflow-with-yolov81/index","title":"MLflow Integration for Ultralytics YOLO","description":"Experiment to run pyTorch, Jupyter, YOLOv8.1 with MLFlow in Docker","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2018-01-02--machine-learning-with-python/index":{"id":"IoT-and-Machine-Learning/ML/2018-01-02--machine-learning-with-python/index","title":"Machine Learning with SciKit Learn","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2019-03-31--introduction-to-tensorflow-2-beta/index":{"id":"IoT-and-Machine-Learning/ML/2019-03-31--introduction-to-tensorflow-2-beta/index","title":"Introduction to TensorFlow 2 Beta","description":"Shanghai, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2019-04-01--introduction-to-keras/index":{"id":"IoT-and-Machine-Learning/ML/2019-04-01--introduction-to-keras/index","title":"Introduction to Keras","description":"Shanghai, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-10-31--tesseract_ocr_arch_linux/index":{"id":"IoT-and-Machine-Learning/ML/2021-10-31--tesseract_ocr_arch_linux/index","title":"Tesseract OCR on Arch Linux","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-01--spacy_natural_language_processing/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-01--spacy_natural_language_processing/index","title":"spaCy NER on Arch Linux","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-02--spacy_ner_predictions/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-02--spacy_ner_predictions/index","title":"spaCy NER Predictions","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-03--streamlit-opencv-mediapipe/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-03--streamlit-opencv-mediapipe/index","title":"Streamlit user interface for openCV/Mediapipe face mesh app","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-04--installing-yolov4/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-04--installing-yolov4/index","title":"Installing YOLOv4 with Anaconda","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-05--license-plates-yolov4-opencv-tesseract/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-05--license-plates-yolov4-opencv-tesseract/index","title":"License Plate Recognition with YOLOv4, OpenCV and Tesseract","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-06--opencv-crash-course-part-i/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-06--opencv-crash-course-part-i/index","title":"OpenCV Crash Course Part I","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-07--opencv-crash-course-part-ii/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-07--opencv-crash-course-part-ii/index","title":"OpenCV Crash Course Part II","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-08--tensorflow-crash-course-part-i/activate_webcam":{"id":"IoT-and-Machine-Learning/ML/2021-11-08--tensorflow-crash-course-part-i/activate_webcam","title":"activate_webcam","description":"Find Mount","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-08--tensorflow-crash-course-part-i/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-08--tensorflow-crash-course-part-i/index","title":"Tensorflow Crash Course - Part I","description":"Mong Kok, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-09--tensorflow-crash-course-part-ii/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-09--tensorflow-crash-course-part-ii/index","title":"Tensorflow2 Crash Course - Part II","description":"Mong Kok, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-10--tensorflow-crash-course-part-iii/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-10--tensorflow-crash-course-part-iii/index","title":"Tensorflow2 Crash Course - Part III","description":"Mong Kok, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-11--tensorflow-crash-course-part-iv/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-11--tensorflow-crash-course-part-iv/index","title":"Tensorflow2 Crash Course - Part IV","description":"Mong Kok, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-12--tensorflow-crash-course-part-v/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-12--tensorflow-crash-course-part-v/index","title":"Tensorflow2 Crash Course - Part V","description":"Mong Kok, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-13--tensorflow-model-zoo/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-13--tensorflow-model-zoo/index","title":"Tensorflow2 Model Zoo","description":"Mong Kok, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-14--tensorflow-model-for-tfjs/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-14--tensorflow-model-for-tfjs/index","title":"Tensorflow.js React App","description":"Mong Kok, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-11-15--facebook-prophet-introduction/index":{"id":"IoT-and-Machine-Learning/ML/2021-11-15--facebook-prophet-introduction/index","title":"Introduction into FB Prophet","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-12-01--opencv-with-images/index":{"id":"IoT-and-Machine-Learning/ML/2021-12-01--opencv-with-images/index","title":"OpenCV and Images","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-12-02--opencv-with-videos/index":{"id":"IoT-and-Machine-Learning/ML/2021-12-02--opencv-with-videos/index","title":"OpenCV, Streams and Video Files","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-12-03--opencv-image-operations/index":{"id":"IoT-and-Machine-Learning/ML/2021-12-03--opencv-image-operations/index","title":"OpenCV Image Operations","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-12-04--opencv-image-objects/index":{"id":"IoT-and-Machine-Learning/ML/2021-12-04--opencv-image-objects/index","title":"OpenCV Image Objects","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-12-05--opencv-face-detection/index":{"id":"IoT-and-Machine-Learning/ML/2021-12-05--opencv-face-detection/index","title":"OpenCV Face Detection and Privacy","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-12-06--opencv-object-tracking/index":{"id":"IoT-and-Machine-Learning/ML/2021-12-06--opencv-object-tracking/index","title":"OpenCV Object Tracking","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-12-07--opencv-detection-and-tracking/index":{"id":"IoT-and-Machine-Learning/ML/2021-12-07--opencv-detection-and-tracking/index","title":"OpenCV Object Detection and Tracking","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-12-08--opencv-meanshift-tracking/index":{"id":"IoT-and-Machine-Learning/ML/2021-12-08--opencv-meanshift-tracking/index","title":"OpenCV Meanshift Algorithm for Object Tracking","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-12-09--opencv-camshift-tracking/index":{"id":"IoT-and-Machine-Learning/ML/2021-12-09--opencv-camshift-tracking/index","title":"OpenCV CAMshift Algorithm for Object Tracking","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2021-12-10--opencv-optical-flow-tracking/index":{"id":"IoT-and-Machine-Learning/ML/2021-12-10--opencv-optical-flow-tracking/index","title":"OpenCV Optical Flow Algorithm for Object Tracking","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-02-15--yolo-app-get-data/index":{"id":"IoT-and-Machine-Learning/ML/2022-02-15--yolo-app-get-data/index","title":"Yolo App - Data Collection","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-02-16--yolo-app-tensorflow-model/index":{"id":"IoT-and-Machine-Learning/ML/2022-02-16--yolo-app-tensorflow-model/index","title":"Yolo App - Train a Model with Tensorflow","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-02-17--yolo-app-prediction-pipeline/index":{"id":"IoT-and-Machine-Learning/ML/2022-02-17--yolo-app-prediction-pipeline/index","title":"Yolo App - Pipeline Predictions","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-02-18--yolo-app-ocr/index":{"id":"IoT-and-Machine-Learning/ML/2022-02-18--yolo-app-ocr/index","title":"Yolo App - Tesseract Optical Character Recognition","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-02-19--yolo-app-flask/index":{"id":"IoT-and-Machine-Learning/ML/2022-02-19--yolo-app-flask/index","title":"Yolo App - Flask Web Application","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-02-20--yolo-app-yolov5-data-prep/index":{"id":"IoT-and-Machine-Learning/ML/2022-02-20--yolo-app-yolov5-data-prep/index","title":"Yolo App - YOLOv5 Data Preparation","description":"Shenzhen, China","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-04-01-tensorflow-audio-classifier/index":{"id":"IoT-and-Machine-Learning/ML/2022-04-01-tensorflow-audio-classifier/index","title":"Deep Audio","description":"Deep Audio Classifier with Tensorflow","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-04-02-pytorch-super-resolution/index":{"id":"IoT-and-Machine-Learning/ML/2022-04-02-pytorch-super-resolution/index","title":"Super Resolution with ESRGAN","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-04-03-pytorch-real-super-resolution/index":{"id":"IoT-and-Machine-Learning/ML/2022-04-03-pytorch-real-super-resolution/index","title":"Super Resolution with Real-ESRGAN","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-04-04-pytorch-face-restoration/index":{"id":"IoT-and-Machine-Learning/ML/2022-04-04-pytorch-face-restoration/index","title":"Face Restoration with GFPGAN","description":"Victoria Harbour, Hongkong","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-11-27-containerized-deep-learning/index":{"id":"IoT-and-Machine-Learning/ML/2022-11-27-containerized-deep-learning/index","title":"Deep Docker on Arch","description":"The NVIDIA Container Toolkit run GPU accelerated Docker containers","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-10-tf-breast-cancer-classification-part1/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-10-tf-breast-cancer-classification-part1/index","title":"Breast Histopathology Image Segmentation Part 1","description":"Data Inspection and Pre-processing","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part2/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part2/index","title":"Breast Histopathology Image Segmentation Part 2","description":"Balancing skewed datasets and data augmentation","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part3/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part3/index","title":"Breast Histopathology Image Segmentation Part 3","description":"Model creation based on a pre-trained and a custom model","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part4/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part4/index","title":"Breast Histopathology Image Segmentation Part 4","description":"Train our model to fit the dataset","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-12-tf-breast-cancer-classification-part5/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-12-tf-breast-cancer-classification-part5/index","title":"Breast Histopathology Image Segmentation Part 5","description":"Evaluate the performance of your trained model","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-12-tf-breast-cancer-classification-part6/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-12-tf-breast-cancer-classification-part6/index","title":"Breast Histopathology Image Segmentation Part 6","description":"Running Predictions","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-16-tf-cifar/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-16-tf-cifar/index","title":"Tensorflow Image Classification","description":"The CIFAR-10 is a labeled subset of the 80 million tiny images dataset that can be directly downloaded using Keras.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-18-tf-transfer-learning/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-18-tf-transfer-learning/index","title":"Tensorflow Transfer Learning","description":"Transfer learning is a machine learning technique in which intelligence from a base ann is being transferred to a new network as a starting point.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-19-tf-hub/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-19-tf-hub/index","title":"Tensorflow Hub","description":"TensorFlow Hub is a repository of trained machine learning models.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-20-tf-representation/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-20-tf-representation/index","title":"Tensorflow Representation Learning","description":"Build a Denoising Autoencoder in Tensorflow using the mnist Digits Dataset","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-21-tf-deepdream/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-21-tf-deepdream/index","title":"Tensorflow Deep Dream","description":"DeepDream is an experiment that visualizes the patterns learned by a neural network.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-21-tf-downsampling/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-21-tf-downsampling/index","title":"Tensorflow Downsampling","description":"Using Representation Learning to Downsample Images","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-28-tf-gan-image-generator/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-28-tf-gan-image-generator/index","title":"Deep Convolutional Generative Adversarial Network","description":"Use Adversarial Networks to generate Images","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2022-12-31-tf-rnn-text-generation/index":{"id":"IoT-and-Machine-Learning/ML/2022-12-31-tf-rnn-text-generation/index","title":"Recurrent Neural Networks","description":"Generate text using a character-based RNN","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-01-05-yolov7/index":{"id":"IoT-and-Machine-Learning/ML/2023-01-05-yolov7/index","title":"YOLOv7 Introduction","description":"Getting started with object detection in YOLOv7","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-01-08-depth-vision-midas/index":{"id":"IoT-and-Machine-Learning/ML/2023-01-08-depth-vision-midas/index","title":"MiDaS Depth Vision","description":"MiDaS computes relative inverse depth from a single image.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-01-10-yolov7_custom_data/index":{"id":"IoT-and-Machine-Learning/ML/2023-01-10-yolov7_custom_data/index","title":"YOLOv7 Training with Custom Data","description":"Use your Custom Dataset to train YOLOv7","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-01-13-yolov7_data_conversion/index":{"id":"IoT-and-Machine-Learning/ML/2023-01-13-yolov7_data_conversion/index","title":"YOLOv7 Label Conversion","description":"Transferring PASCAL VOC labels to the YOLO format","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-01-14-yolov7_to_tensorflow/index":{"id":"IoT-and-Machine-Learning/ML/2023-01-14-yolov7_to_tensorflow/index","title":"YOLOv7 to Tensorflow","description":"Converting a YOLOv7 PyTorch Model to Tensorflow (Lite)","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-01-28-opencv-coin-counter/index":{"id":"IoT-and-Machine-Learning/ML/2023-01-28-opencv-coin-counter/index","title":"OpenCV Count My Money","description":"Differentiate Objects based on their Contour and Colour with cvZone.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-01-30-predicting-wine-quality/index":{"id":"IoT-and-Machine-Learning/ML/2023-01-30-predicting-wine-quality/index","title":"SciKit Wine Quality","description":"Predicting Wine Quality with Several Classification Techniques using SciKit Learn.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-14-keras-introduction/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-14-keras-introduction/index","title":"Keras for Tensorflow - An (Re)Introduction 2023","description":"Keras is built on top of TensorFlow 2 and provides an API designed for human beings.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-15-as-one-yolo-object-tracking/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-15-as-one-yolo-object-tracking/index","title":"YOLOv8 with AS-One","description":"A Modular Libary for YOLO Object Detection and Object Tracking.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-16-keras-introduction-ann/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-16-keras-introduction-ann/index","title":"Keras for Tensorflow - Artificial Neural Networks","description":"Building a deep neural network using the MNIST dataset.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-17-keras-introduction-cnn/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-17-keras-introduction-cnn/index","title":"Keras for Tensorflow - Convolutional Neural Networks","description":"Convolutional Neural Networks are ideal for Computer Vision tasks.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-18-keras-introduction-rnn/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-18-keras-introduction-rnn/index","title":"Keras for Tensorflow - Recurrent Neural Networks","description":"Recurrent Neural Networks are widely used to work with sequence data such as time series or natural language.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-18-keras-introduction-vgg16/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-18-keras-introduction-vgg16/index","title":"Keras for Tensorflow - VGG16 Network Architecture","description":"An example convolutional neural network is the VGG16 Architecture.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-19-tensorflow-introduction/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-19-tensorflow-introduction/index","title":"Tensorflow 2 - An (Re)Introduction 2023","description":"Tensor Constants, Variables and Attributes","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-21-tensorflow-tensors-2/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-21-tensorflow-tensors-2/index","title":"Tensorflow 2 - An (Re)Introduction 2023 (2)","description":"Tensor Indexing, Expanding and Manipulations","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-22-tensorflow-tensors-3/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-22-tensorflow-tensors-3/index","title":"Tensorflow 2 - An (Re)Introduction 2023 (3)","description":"Matrix multiplications, Squeeze, One-hot and Numpy","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-23-tensorflow-neural-network-regression/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-23-tensorflow-neural-network-regression/index","title":"Tensorflow 2 - Neural Network Regression","description":"Building a Regression Model and Improving it\'s Performance","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-24-tensorflow-neural-network-regression-evaluation/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-24-tensorflow-neural-network-regression-evaluation/index","title":"Tensorflow 2 - Neural Network Regression","description":"Visualizing Models and Evaluating Model Performance","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-25-tensorflow-neural-network-regression-experiments/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-25-tensorflow-neural-network-regression-experiments/index","title":"Tensorflow 2 - Neural Network Regression","description":"Optimizing model performance","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-26-tensorflow-neural-network-regression-data-preprocessing/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-26-tensorflow-neural-network-regression-data-preprocessing/index","title":"Tensorflow 2 - Neural Network Regression","description":"Data pre-processing - normalization and feature-scaling","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-26-tensorflow-neural-network-regression-real-dataset/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-26-tensorflow-neural-network-regression-real-dataset/index","title":"Tensorflow 2 - Neural Network Regression","description":"Working with the medical cost dataset","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-27-tensorflow-neural-network-classification/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-27-tensorflow-neural-network-classification/index","title":"Tensorflow 2 - Neural Network Classification","description":"Working with a non-linear dataset and activation functions","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-02-28-tensorflow-neural-network-classification-model-evaluation/index":{"id":"IoT-and-Machine-Learning/ML/2023-02-28-tensorflow-neural-network-classification-model-evaluation/index","title":"Tensorflow 2 - Neural Network Classification","description":"Model Evaluation and Performance Improvement","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-03-02-tensorflow-neural-network-multi-classification/2023-02-28-tensorflow-neural-network-classification-model-evaluation/index":{"id":"IoT-and-Machine-Learning/ML/2023-03-02-tensorflow-neural-network-multi-classification/2023-02-28-tensorflow-neural-network-classification-model-evaluation/index","title":"Tensorflow 2 - Neural Network Classification","description":"Model Evaluation and Performance Improvement","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-03-02-tensorflow-neural-network-multi-classification/index":{"id":"IoT-and-Machine-Learning/ML/2023-03-02-tensorflow-neural-network-multi-classification/index","title":"Tensorflow 2 - Neural Network Classifications","description":"Multiclass Classification Problems","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-03-03-tensorflow-convolutional-neural-network-binary-classifications/index":{"id":"IoT-and-Machine-Learning/ML/2023-03-03-tensorflow-convolutional-neural-network-binary-classifications/index","title":"Tensorflow 2 - Convolutional Neural Networks","description":"Computer Vision for Binary Image Classifications","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-03-05-tensorflow-convolutional-neural-network-multiclass-classifications/index":{"id":"IoT-and-Machine-Learning/ML/2023-03-05-tensorflow-convolutional-neural-network-multiclass-classifications/index","title":"Tensorflow 2 - Convolutional Neural Networks","description":"Computer Vision for Multiclass Image Classifications","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-03-06-tensorflow-transfer-learning-feature-extraction/index":{"id":"IoT-and-Machine-Learning/ML/2023-03-06-tensorflow-transfer-learning-feature-extraction/index","title":"Tensorflow 2 - Transfer Learning","description":"Using a Pre-trained Model to Extract Features","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-03-11-tensorflow-transfer-learning-fine-tuning/index":{"id":"IoT-and-Machine-Learning/ML/2023-03-11-tensorflow-transfer-learning-fine-tuning/index","title":"Tensorflow 2 - Transfer Learning","description":"Fine-tuning Pre-trained Models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-03-16-tensorflow-transfer-learning-scaling/index":{"id":"IoT-and-Machine-Learning/ML/2023-03-16-tensorflow-transfer-learning-scaling/index","title":"Tensorflow 2 - Transfer Learning","description":"Scale a pre-trained model to fit your needs","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-03-24-tensorflow-unsupervised-learning-autoencoders/index":{"id":"IoT-and-Machine-Learning/ML/2023-03-24-tensorflow-unsupervised-learning-autoencoders/index","title":"Tensorflow 2 - Unsupervised Learning","description":"Use Autoencoders to Reduce Dimensionality and Feature Discovery","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-03-26-tensorflow-unsupervised-learning-autoencoders-super-resolution/index":{"id":"IoT-and-Machine-Learning/ML/2023-03-26-tensorflow-unsupervised-learning-autoencoders-super-resolution/index","title":"Tensorflow 2 - Unsupervised Learning","description":"Use Autoencoders to Increase Feature Resolution","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-03-26-tensorflow-unsupervised-learning-generative-adversial-networks/index":{"id":"IoT-and-Machine-Learning/ML/2023-03-26-tensorflow-unsupervised-learning-generative-adversial-networks/index","title":"Tensorflow 2 - Unsupervised Learning","description":"Generative Adverserial Networks for Image Data Generation","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-04-09-principal-component-analysis/index":{"id":"IoT-and-Machine-Learning/ML/2023-04-09-principal-component-analysis/index","title":"Principal Component Analysis (PCA)","description":"To aid visualization of the structure of a dataset, the dimension must be reduced in some way.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-04-11-locally-linear-embedding/index":{"id":"IoT-and-Machine-Learning/ML/2023-04-11-locally-linear-embedding/index","title":"Locally Linear Embedding (LLE)","description":"LLE is an unsupervised learning algorithm that computes low dimensional, neighborhood preserving embeddings of high dimensional data.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-04-12-tstochastic-neighbor-embedding/index":{"id":"IoT-and-Machine-Learning/ML/2023-04-12-tstochastic-neighbor-embedding/index","title":"tStochastic Neighbor Embedding (t-SNE)","description":"t-distributed stochastic neighbor embedding (t-SNE) is a statistical method for visualizing high-dimensional data by giving each datapoint a location in a two or three-dimensional map.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-04-13-fisher-discriminant-analysis/index":{"id":"IoT-and-Machine-Learning/ML/2023-04-13-fisher-discriminant-analysis/index","title":"Fisher Linear Discriminant Analysis (LDA)","description":"LDA is a widely used dimensionality reduction technique built on Fisher\u2019s linear discriminant.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-04-13-isometric-mapping/index":{"id":"IoT-and-Machine-Learning/ML/2023-04-13-isometric-mapping/index","title":"Isometric Mapping (ISOMAP)","description":"Non-linear dimensionality reduction through Isometric Mapping","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-04-13-multi-dimensional-scaling/index":{"id":"IoT-and-Machine-Learning/ML/2023-04-13-multi-dimensional-scaling/index","title":"Multidimensional Scaling (MDS)","description":"Multidimensional Scaling is a family of statistical methods that focus on creating mappings of items based on distance.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-04-14-manifold-learning-for-image-segmentation/index":{"id":"IoT-and-Machine-Learning/ML/2023-04-14-manifold-learning-for-image-segmentation/index","title":"Dimensionality Reduction for Image Segmentation","description":"Use Manifold Learning and the LD Analysis to Visualize Image Datasets.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-04-16-deep-3d-image-segmentation/index":{"id":"IoT-and-Machine-Learning/ML/2023-04-16-deep-3d-image-segmentation/index","title":"3D Image Classification","description":"Learn how to train a 3D convolutional neural network (3D CNN) to predict presence of pneumonia.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-04-19-tensorflow-natural-language-processing/index":{"id":"IoT-and-Machine-Learning/ML/2023-04-19-tensorflow-natural-language-processing/index","title":"(Re) Introduction to Tensorflow Natural Language Processing","description":"Using Tensorflow to classify Disaster Tweet.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-06-26-autogluon-transit-photometry-dataset/index":{"id":"IoT-and-Machine-Learning/ML/2023-06-26-autogluon-transit-photometry-dataset/index","title":"Detection of Exoplanets using Transit Photometry","description":"Exoplanets are the planets found outside of the solar system. When a planet passes in front of a star, the brightness of that star as observed by us becomes dimmer depending on the size of the planet. The data we observe will show a dip in flux if a planet is transiting the star we are observing.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-06-27-sql-in-data-science-basics/index":{"id":"IoT-and-Machine-Learning/ML/2023-06-27-sql-in-data-science-basics/index","title":"SQL in Data Science - The Basics using Python","description":"Cheat Sheet using Psycopg2 to interact with PostgreSQL Databases","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-06-30-sql-in-data-science-advanced/index":{"id":"IoT-and-Machine-Learning/ML/2023-06-30-sql-in-data-science-advanced/index","title":"SQL in Data Science - Slightly more Advanced Queries","description":"Cheat Sheet using Psycopg2 to interact with PostgreSQL Databases","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-07-02-sql-in-data-science-ml/index":{"id":"IoT-and-Machine-Learning/ML/2023-07-02-sql-in-data-science-ml/index","title":"SQL in Data Science - Machine Learning","description":"Cheat Sheet using Psycopg2 to interact with PostgreSQL Databases","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-07-21-introduction-to-pytorch-caffe2/index":{"id":"IoT-and-Machine-Learning/ML/2023-07-21-introduction-to-pytorch-caffe2/index","title":"Introduction to Caffe2","description":"Deep Learning Framework with Python for flexibility and C++ for speed.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-07-25-onnx-models/index":{"id":"IoT-and-Machine-Learning/ML/2023-07-25-onnx-models/index","title":"Working with ONNX Models","description":"Open Neural Network Exchange (ONNX)","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-07-26-tensorflow-human-emotion-detector/index":{"id":"IoT-and-Machine-Learning/ML/2023-07-26-tensorflow-human-emotion-detector/index","title":"Human Emotion Detection with Tensorflow","description":"Create a TF Image Classifier that can distinguish between different human emotion based on portrait photos.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-07-27-tensorflow-vision-transformer/index":{"id":"IoT-and-Machine-Learning/ML/2023-07-27-tensorflow-vision-transformer/index","title":"Tensorflow VITs","description":"ViT models apply the Transformer architecture with self-attention to sequences of image patches, without using convolution layers.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-01-tensorflow-i-know-flowers-intro/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-01-tensorflow-i-know-flowers-intro/index","title":"Tensorflow Image Classifier - Introduction","description":"Blue print image classifier using Tensorflow and Keras Applications pre-trained models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-02-tensorflow-i-know-flowers-preprocessing/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-02-tensorflow-i-know-flowers-preprocessing/index","title":"Tensorflow Image Classifier - Data Pre-processing","description":"Blue print image classifier using Tensorflow and Keras Applications pre-trained models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-03-tensorflow-i-know-flowers-deit/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-03-tensorflow-i-know-flowers-deit/index","title":"Tensorflow Image Classifier - Data-efficient Image Transformers","description":"Blue print image classifier using Tensorflow and Keras Applications pre-trained models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-04-tensorflow-i-know-flowers-efficientnetv2b0/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-04-tensorflow-i-know-flowers-efficientnetv2b0/index","title":"Tensorflow Image Classifier - EfficientNetV2B0","description":"Blue print image classifier using Tensorflow and Keras Applications pre-trained models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-05-tensorflow-i-know-flowers-efficientnetv2s/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-05-tensorflow-i-know-flowers-efficientnetv2s/index","title":"Tensorflow Image Classifier - EfficientNetV2S","description":"Blue print image classifier using Tensorflow and Keras Applications pre-trained models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-06-tensorflow-i-know-flowers-inceptionv3/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-06-tensorflow-i-know-flowers-inceptionv3/index","title":"Tensorflow Image Classifier - InceptionV3","description":"Blue print image classifier using Tensorflow and Keras Applications pre-trained models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-07-tensorflow-i-know-flowers-mobilenetv2/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-07-tensorflow-i-know-flowers-mobilenetv2/index","title":"Tensorflow Image Classifier - MobileNetV2","description":"Blue print image classifier using Tensorflow and Keras Applications pre-trained models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-08-tensorflow-i-know-flowers-mobilenetv3large/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-08-tensorflow-i-know-flowers-mobilenetv3large/index","title":"Tensorflow Image Classifier - MobileNetV3Large","description":"Blue print image classifier using Tensorflow and Keras Applications pre-trained models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-09-tensorflow-i-know-flowers-mobilenetv3small/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-09-tensorflow-i-know-flowers-mobilenetv3small/index","title":"Tensorflow Image Classifier - MobileNetV3Small","description":"Blue print image classifier using Tensorflow and Keras Applications pre-trained models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-10-tensorflow-i-know-flowers-nasnetmobile/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-10-tensorflow-i-know-flowers-nasnetmobile/index","title":"Tensorflow Image Classifier - NASNetMobile","description":"Blue print image classifier using Tensorflow and Keras Applications pre-trained models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-11-tensorflow-i-know-flowers-vit/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-11-tensorflow-i-know-flowers-vit/index","title":"Tensorflow Image Classifier - ViT","description":"Blue print image classifier using Tensorflow and Keras Applications pre-trained models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-12-tensorflow-i-know-flowers-xception/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-12-tensorflow-i-know-flowers-xception/index","title":"Tensorflow Image Classifier - Xception","description":"Blue print image classifier using Tensorflow and Keras Applications pre-trained models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-13-tensorflow-i-know-flowers-model-eval/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-13-tensorflow-i-know-flowers-model-eval/index","title":"Tensorflow Image Classifier - Model Evaluation","description":"Blue print image classifier using Tensorflow and Keras Applications pre-trained models","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-21--pytorch-development-in-docker/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-21--pytorch-development-in-docker/index","title":"Containerized PyTorch Dev Workflow","description":"Develop your PyTorch models inside the official PyTorch container image.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-27--image-segmentation-with-pytorch/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-27--image-segmentation-with-pytorch/index","title":"Image Segmentation with PyTorch","description":"Food item segmentation from images of the Tray Food Segmentation dataset","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-28--semantic-segmentation-detectron2-model-zoo/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-28--semantic-segmentation-detectron2-model-zoo/index","title":"Image Segmentation with PyTorch (RCNN)","description":"Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-29--semantic-segmentation-detectron2-model-zoo-faster-rcnn/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-29--semantic-segmentation-detectron2-model-zoo-faster-rcnn/index","title":"Image Segmentation with PyTorch (Faster RCNN)","description":"Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-30--instance_segmentation_detectron2_model_zoo_mask_rcnn/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-30--instance_segmentation_detectron2_model_zoo_mask_rcnn/index","title":"Instance Segmentation with PyTorch (Mask RCNN)","description":"Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-08-31--semantic_segmentation_detectron2_openimages_dataset/index":{"id":"IoT-and-Machine-Learning/ML/2023-08-31--semantic_segmentation_detectron2_openimages_dataset/index","title":"Detectron Object Detection with OpenImages Dataset (WIP)","description":"Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-09-01--yolo-i-know-flowers/index":{"id":"IoT-and-Machine-Learning/ML/2023-09-01--yolo-i-know-flowers/index","title":"YOLOv8 Image Classifier","description":"I-know-flowers Image Classifier YOLOv8 Model Comparison","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-09-05--semantic-segmentation-in-opencv/index":{"id":"IoT-and-Machine-Learning/ML/2023-09-05--semantic-segmentation-in-opencv/index","title":"Using Tensorflow Models in OpenCV","description":"Using Tensorflow models in OpenCV to perform semantic segmentations on images using the Mask-RCNN model.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-09-10--model-explainability-shap/index":{"id":"IoT-and-Machine-Learning/ML/2023-09-10--model-explainability-shap/index","title":"Scikit-Learn ML Model Explainability","description":"SHAP is a game theoretic approach to explain the output of any machine learning model.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-09-15--yolo8-tracking-and-ocr/index":{"id":"IoT-and-Machine-Learning/ML/2023-09-15--yolo8-tracking-and-ocr/index","title":"YOLOv8 License Plate Detection","description":"Using the YOLOv8 Object Tracker in Combination with EasyOCR","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-09-17--yolo8-nightshift/index":{"id":"IoT-and-Machine-Learning/ML/2023-09-17--yolo8-nightshift/index","title":"YOLOv8 Nightshift","description":"Training an YOLOv8 Object Tracker for Day/Night Cameras","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-09-19--cvat-computer-vision-annotation-tool/index":{"id":"IoT-and-Machine-Learning/ML/2023-09-19--cvat-computer-vision-annotation-tool/index","title":"Computer Vision Annotation Tool (CVAT) Introduction","description":"CVAT supports supervised machine learning tasks pertaining to object detection, image classification, image segmentation and 3D data annotation.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-09-21--cvat-automatic-annotation/index":{"id":"IoT-and-Machine-Learning/ML/2023-09-21--cvat-automatic-annotation/index","title":"CVAT Semi-automatic and Automatic Annotation","description":"CVAT supports supervised machine learning tasks pertaining to object detection, image classification, image segmentation and 3D data annotation.","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-09-23--yolo8-listen/index":{"id":"IoT-and-Machine-Learning/ML/2023-09-23--yolo8-listen/index","title":"Audio Classification with Computer Vision","description":"Training an YOLOv8 Classifier to Identify Audio Files","sidebar":"tutorialSidebar"},"IoT-and-Machine-Learning/ML/2023-10-01--delib-face-detection/index":{"id":"IoT-and-Machine-Learning/ML/2023-10-01--delib-face-detection/index","title":"DLIB Face Recognition","description":"Detect faces in images and compare their feature vector to known entities","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/946280d0.5c98efa2.js b/assets/js/946280d0.18dbf6cc.js similarity index 67% rename from assets/js/946280d0.5c98efa2.js rename to assets/js/946280d0.18dbf6cc.js index 3257a4b2e4..bd18841e1e 100644 --- a/assets/js/946280d0.5c98efa2.js +++ b/assets/js/946280d0.18dbf6cc.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmikes_dev_notebook=self.webpackChunkmikes_dev_notebook||[]).push([[59504],{122383:e=>{e.exports=JSON.parse('{"title":"Zabbix","description":"Zabbix","slug":"/category/zabbix","permalink":"/docs/category/zabbix","navigation":{"previous":{"title":"Installing HashiCorp Nomad on Ubuntu Server 20.04","permalink":"/docs/DevOps/Hashicorp/2020-08-15--installing-nomad-ubuntu/2020-08-15"},"next":{"title":"Zabbix <3 Zimbra","permalink":"/docs/DevOps/Zabbix/2022-07-15-zabbix-for-zimbra/2022-07-15"}}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmikes_dev_notebook=self.webpackChunkmikes_dev_notebook||[]).push([[59504],{122383:e=>{e.exports=JSON.parse('{"title":"Zabbix","description":"Zabbix","slug":"/category/zabbix","permalink":"/docs/category/zabbix","navigation":{"previous":{"title":"Installing HashiCorp Nomad on Ubuntu Server 20.04","permalink":"/docs/DevOps/Hashicorp/2020-08-15--installing-nomad-ubuntu/2020-08-15"},"next":{"title":"Zabbix v6 SMART HDD and CPU Temperature Check","permalink":"/docs/DevOps/Zabbix/2024-03-07--zabbix-v6-hdd-cpu-temp-check/2024-03-08"}}}')}}]); \ No newline at end of file diff --git a/assets/js/e6f9d239.14b729c8.js b/assets/js/e6f9d239.14b729c8.js new file mode 100644 index 0000000000..5d0a38971e --- /dev/null +++ b/assets/js/e6f9d239.14b729c8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmikes_dev_notebook=self.webpackChunkmikes_dev_notebook||[]).push([[1976],{289029:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var a=t(785893),r=t(603905);const i={sidebar_position:7070,slug:"2022-07-15",title:"Zabbix <3 Zimbra",authors:"mpolinowski",tags:["Markdown","React"]},s=void 0,o={id:"DevOps/Zabbix/2022-07-15-zabbix-for-zimbra/index",title:"Zabbix <3 Zimbra",description:"Sydney, Australia",source:"@site/docs/DevOps/Zabbix/2022-07-15-zabbix-for-zimbra/index.md",sourceDirName:"DevOps/Zabbix/2022-07-15-zabbix-for-zimbra",slug:"/DevOps/Zabbix/2022-07-15-zabbix-for-zimbra/2022-07-15",permalink:"/docs/DevOps/Zabbix/2022-07-15-zabbix-for-zimbra/2022-07-15",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/DevOps/Zabbix/2022-07-15-zabbix-for-zimbra/index.md",tags:[{label:"Markdown",permalink:"/docs/tags/markdown"},{label:"React",permalink:"/docs/tags/react"}],version:"current",sidebarPosition:7070,frontMatter:{sidebar_position:7070,slug:"2022-07-15",title:"Zabbix <3 Zimbra",authors:"mpolinowski",tags:["Markdown","React"]},sidebar:"tutorialSidebar",previous:{title:"Zabbix v6 SMART HDD and CPU Temperature Check",permalink:"/docs/DevOps/Zabbix/2024-03-07--zabbix-v6-hdd-cpu-temp-check/2024-03-08"},next:{title:"Zabbix v6 Creating triggers for Baseline monitoring and Anomaly detection",permalink:"/docs/DevOps/Zabbix/2022-01-16--zabbix-v6-baseline-monitoring/2022-01-16"}},c={},l=[{value:"Zimbra Template",id:"zimbra-template",level:2},{value:"zmcontrol_status",id:"zmcontrol_status",level:2},{value:"Zabbix Agent",id:"zabbix-agent",level:2},{value:"Zabbix Agent 2",id:"zabbix-agent-2",level:3},{value:"Configure the Server",id:"configure-the-server",level:2}];function b(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.ah)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Sydney, Australia",src:t(856950).Z+"",width:"1594",height:"601"})}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"#zimbra-template",children:"Zimbra Template"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"#zmcontrol_status",children:"zmcontrol_status"})}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"#zabbix-agent",children:"Zabbix Agent"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"#zabbix-agent-2",children:"Zabbix Agent 2"})}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"#configure-the-server",children:"Configure the Server"})}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"zimbra-template",children:"Zimbra Template"}),"\n",(0,a.jsxs)(n.p,{children:["Download the ",(0,a.jsx)(n.a,{href:"https://github.com/zabbix/community-templates/tree/main/Applications/Mail_servers/template_zimbra_zmcontrol_status/6.0",children:"Zimbra Template"})," for Zabbix version 6.0."]}),"\n",(0,a.jsxs)(n.p,{children:["In the ",(0,a.jsx)(n.code,{children:"Configuration"})," \u2192 ",(0,a.jsx)(n.code,{children:"Templates"})," section users can configure and maintain templates. Click on ",(0,a.jsx)(n.strong,{children:"Import"})," to load the template YAML file:"]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Zabbix for Zimbra",src:t(228887).Z+"",width:"896",height:"478"})}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Zabbix for Zimbra",src:t(347274).Z+"",width:"899",height:"818"})}),"\n",(0,a.jsx)(n.h2,{id:"zmcontrol_status",children:"zmcontrol_status"}),"\n",(0,a.jsxs)(n.p,{children:["Prepare the Zimbra server, by adding the following line to the ROOT CRONTAB. This will put the output of the ",(0,a.jsx)(n.code,{children:"zmcontrol_status"})," on a file in ",(0,a.jsx)(n.code,{children:"/tmp"}),". It will run every 3 min:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"crontab -u root -e\n"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"*/3 * * * * sudo -u zimbra /opt/zimbra/bin/zmcontrol status > /tmp/zmcontrol_status\n"})}),"\n",(0,a.jsx)(n.p,{children:"This will generate the following file:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"cat /tmp/zmcontrol_status\nHost my.zimbra.com\n amavis Running\n antispam Running\n antivirus Running\n ldap Running\n logger Running\n mailbox Running\n memcached Running\n mta Running\n opendkim Running\n proxy Running\n service webapp Running\n snmp Running\n spell Running\n stats Running\n zimbra webapp Running\n zimbraAdmin webapp Running\n zimlet webapp Running\n zmconfigd Running\n"})}),"\n",(0,a.jsx)(n.h2,{id:"zabbix-agent",children:"Zabbix Agent"}),"\n",(0,a.jsxs)(n.p,{children:["Add the following UserParameter to the ",(0,a.jsx)(n.code,{children:"zabbix_agentd.conf"})," file, or the ",(0,a.jsx)(n.code,{children:"zabbix_agentd.d"})," folder:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"nano /etc/zabbix/zabbix_agentd.d/zimbra_template.conf\n"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# Zimbra Monitor Template\nUserParameter=zimbra.amavis.status,awk '/amavis/{print $2}' /tmp/zmcontrol_status\nUserParameter=zimbra.antispam.status,awk '/antispam/{print $2}' /tmp/zmcontrol_status\nUserParameter=zimbra.antivirus.status,awk '/antivirus/{print $2}' /tmp/zmcontrol_status\nUserParameter=zimbra.mailbox.status,awk '/mailbox/{print $2}' /tmp/zmcontrol_status\nUserParameter=zimbra.mta.status,awk '/mta/{print $2}' /tmp/zmcontrol_status\nUserParameter=zimbra.zmconfigd.status,awk '/zmconfigd/{print $2}' /tmp/zmcontrol_status\nUserParameter=zimbra.webmail.status,awk '/service webapp/{print $3}' /tmp/zmcontrol_status\nUserParameter=zimbra.webadm.status,awk '/zimbraAdmin/{print $3}' /tmp/zmcontrol_status\nUserParameter=zimbra.proxy.status,awk '/proxy/{print $2}' /tmp/zmcontrol_status\n"})}),"\n",(0,a.jsx)(n.h3,{id:"zabbix-agent-2",children:"Zabbix Agent 2"}),"\n",(0,a.jsx)(n.p,{children:"The version 2 configuration file does not use this directory. But it imports conf files from:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"Include=./zabbix_agent2.d/plugins.d/*.conf\n"})}),"\n",(0,a.jsx)(n.p,{children:"So I am placing the Zimbra Template configuration there:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"nano zabbix_agent2.d/plugins.d/zimbra_template.conf\n"})}),"\n",(0,a.jsx)(n.p,{children:"And restart the agent with:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"service zabbix-agent2 restart\nservice zabbix-agent2 status\n"})}),"\n",(0,a.jsx)(n.h2,{id:"configure-the-server",children:"Configure the Server"}),"\n",(0,a.jsx)(n.p,{children:"Now we can configure our server to use the Zimbra template:"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Zabbix for Zimbra",src:t(908494).Z+"",width:"899",height:"395"})}),"\n",(0,a.jsxs)(n.p,{children:["Wait a while and verify the latest data received from your server. ",(0,a.jsx)(n.strong,{children:"Note"}),": the template maps ",(0,a.jsx)(n.code,{children:"RUNNING"})," with the value ",(0,a.jsx)(n.code,{children:"0"}),". So seeing zeros is here a good thing:"]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Zabbix for Zimbra",src:t(322918).Z+"",width:"855",height:"798"})})]})}function m(e={}){const{wrapper:n}={...(0,r.ah)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(b,{...e})}):b(e)}},603905:(e,n,t)=>{t.d(n,{ah:()=>l});var a=t(667294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function s(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var c=a.createContext({}),l=function(e){var n=a.useContext(c),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},b={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,c=e.parentName,m=o(e,["components","mdxType","originalType","parentName"]),d=l(t),p=r,h=d["".concat(c,".").concat(p)]||d[p]||b[p]||i;return t?a.createElement(h,s(s({ref:n},m),{},{components:t})):a.createElement(h,s({ref:n},m))}));m.displayName="MDXCreateElement"},228887:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/Zabbix_for_Zimbra_01-242a3c162e1687bfdb77179585091ae6.png"},347274:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/Zabbix_for_Zimbra_02-dc82a08ef528430800218c2ec2d4314f.png"},908494:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/Zabbix_for_Zimbra_03-fb60b63a971c2b65f8138cf21ea63d8a.png"},322918:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/Zabbix_for_Zimbra_04-f1572c27e4b1eed321ba8e226b294aa8.png"},856950:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/photo-kt443t6d_64hdh43hfh6dgjdfhg4_d-639bd38d59a5e55ec0c382905cd02a5c.jpg"}}]); \ No newline at end of file diff --git a/assets/js/e6f9d239.d3bcb133.js b/assets/js/e6f9d239.d3bcb133.js deleted file mode 100644 index 6ca922d224..0000000000 --- a/assets/js/e6f9d239.d3bcb133.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmikes_dev_notebook=self.webpackChunkmikes_dev_notebook||[]).push([[1976],{289029:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>o,toc:()=>c});var a=t(785893),r=t(603905);const i={sidebar_position:7070,slug:"2022-07-15",title:"Zabbix <3 Zimbra",authors:"mpolinowski",tags:["Markdown","React"]},s=void 0,o={id:"DevOps/Zabbix/2022-07-15-zabbix-for-zimbra/index",title:"Zabbix <3 Zimbra",description:"Sydney, Australia",source:"@site/docs/DevOps/Zabbix/2022-07-15-zabbix-for-zimbra/index.md",sourceDirName:"DevOps/Zabbix/2022-07-15-zabbix-for-zimbra",slug:"/DevOps/Zabbix/2022-07-15-zabbix-for-zimbra/2022-07-15",permalink:"/docs/DevOps/Zabbix/2022-07-15-zabbix-for-zimbra/2022-07-15",draft:!1,unlisted:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/DevOps/Zabbix/2022-07-15-zabbix-for-zimbra/index.md",tags:[{label:"Markdown",permalink:"/docs/tags/markdown"},{label:"React",permalink:"/docs/tags/react"}],version:"current",sidebarPosition:7070,frontMatter:{sidebar_position:7070,slug:"2022-07-15",title:"Zabbix <3 Zimbra",authors:"mpolinowski",tags:["Markdown","React"]},sidebar:"tutorialSidebar",previous:{title:"Zabbix",permalink:"/docs/category/zabbix"},next:{title:"Zabbix v6 Creating triggers for Baseline monitoring and Anomaly detection",permalink:"/docs/DevOps/Zabbix/2022-01-16--zabbix-v6-baseline-monitoring/2022-01-16"}},l={},c=[{value:"Zimbra Template",id:"zimbra-template",level:2},{value:"zmcontrol_status",id:"zmcontrol_status",level:2},{value:"Zabbix Agent",id:"zabbix-agent",level:2},{value:"Zabbix Agent 2",id:"zabbix-agent-2",level:3},{value:"Configure the Server",id:"configure-the-server",level:2}];function b(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.ah)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Sydney, Australia",src:t(856950).Z+"",width:"1594",height:"601"})}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"#zimbra-template",children:"Zimbra Template"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"#zmcontrol_status",children:"zmcontrol_status"})}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.a,{href:"#zabbix-agent",children:"Zabbix Agent"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"#zabbix-agent-2",children:"Zabbix Agent 2"})}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"#configure-the-server",children:"Configure the Server"})}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"zimbra-template",children:"Zimbra Template"}),"\n",(0,a.jsxs)(n.p,{children:["Download the ",(0,a.jsx)(n.a,{href:"https://github.com/zabbix/community-templates/tree/main/Applications/Mail_servers/template_zimbra_zmcontrol_status/6.0",children:"Zimbra Template"})," for Zabbix version 6.0."]}),"\n",(0,a.jsxs)(n.p,{children:["In the ",(0,a.jsx)(n.code,{children:"Configuration"})," \u2192 ",(0,a.jsx)(n.code,{children:"Templates"})," section users can configure and maintain templates. Click on ",(0,a.jsx)(n.strong,{children:"Import"})," to load the template YAML file:"]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Zabbix for Zimbra",src:t(228887).Z+"",width:"896",height:"478"})}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Zabbix for Zimbra",src:t(347274).Z+"",width:"899",height:"818"})}),"\n",(0,a.jsx)(n.h2,{id:"zmcontrol_status",children:"zmcontrol_status"}),"\n",(0,a.jsxs)(n.p,{children:["Prepare the Zimbra server, by adding the following line to the ROOT CRONTAB. This will put the output of the ",(0,a.jsx)(n.code,{children:"zmcontrol_status"})," on a file in ",(0,a.jsx)(n.code,{children:"/tmp"}),". It will run every 3 min:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"crontab -u root -e\n"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"*/3 * * * * sudo -u zimbra /opt/zimbra/bin/zmcontrol status > /tmp/zmcontrol_status\n"})}),"\n",(0,a.jsx)(n.p,{children:"This will generate the following file:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"cat /tmp/zmcontrol_status\nHost my.zimbra.com\n amavis Running\n antispam Running\n antivirus Running\n ldap Running\n logger Running\n mailbox Running\n memcached Running\n mta Running\n opendkim Running\n proxy Running\n service webapp Running\n snmp Running\n spell Running\n stats Running\n zimbra webapp Running\n zimbraAdmin webapp Running\n zimlet webapp Running\n zmconfigd Running\n"})}),"\n",(0,a.jsx)(n.h2,{id:"zabbix-agent",children:"Zabbix Agent"}),"\n",(0,a.jsxs)(n.p,{children:["Add the following UserParameter to the ",(0,a.jsx)(n.code,{children:"zabbix_agentd.conf"})," file, or the ",(0,a.jsx)(n.code,{children:"zabbix_agentd.d"})," folder:"]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"nano /etc/zabbix/zabbix_agentd.d/zimbra_template.conf\n"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# Zimbra Monitor Template\nUserParameter=zimbra.amavis.status,awk '/amavis/{print $2}' /tmp/zmcontrol_status\nUserParameter=zimbra.antispam.status,awk '/antispam/{print $2}' /tmp/zmcontrol_status\nUserParameter=zimbra.antivirus.status,awk '/antivirus/{print $2}' /tmp/zmcontrol_status\nUserParameter=zimbra.mailbox.status,awk '/mailbox/{print $2}' /tmp/zmcontrol_status\nUserParameter=zimbra.mta.status,awk '/mta/{print $2}' /tmp/zmcontrol_status\nUserParameter=zimbra.zmconfigd.status,awk '/zmconfigd/{print $2}' /tmp/zmcontrol_status\nUserParameter=zimbra.webmail.status,awk '/service webapp/{print $3}' /tmp/zmcontrol_status\nUserParameter=zimbra.webadm.status,awk '/zimbraAdmin/{print $3}' /tmp/zmcontrol_status\nUserParameter=zimbra.proxy.status,awk '/proxy/{print $2}' /tmp/zmcontrol_status\n"})}),"\n",(0,a.jsx)(n.h3,{id:"zabbix-agent-2",children:"Zabbix Agent 2"}),"\n",(0,a.jsx)(n.p,{children:"The version 2 configuration file does not use this directory. But it imports conf files from:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"Include=./zabbix_agent2.d/plugins.d/*.conf\n"})}),"\n",(0,a.jsx)(n.p,{children:"So I am placing the Zimbra Template configuration there:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"nano zabbix_agent2.d/plugins.d/zimbra_template.conf\n"})}),"\n",(0,a.jsx)(n.p,{children:"And restart the agent with:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"service zabbix-agent2 restart\nservice zabbix-agent2 status\n"})}),"\n",(0,a.jsx)(n.h2,{id:"configure-the-server",children:"Configure the Server"}),"\n",(0,a.jsx)(n.p,{children:"Now we can configure our server to use the Zimbra template:"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Zabbix for Zimbra",src:t(908494).Z+"",width:"899",height:"395"})}),"\n",(0,a.jsxs)(n.p,{children:["Wait a while and verify the latest data received from your server. ",(0,a.jsx)(n.strong,{children:"Note"}),": the template maps ",(0,a.jsx)(n.code,{children:"RUNNING"})," with the value ",(0,a.jsx)(n.code,{children:"0"}),". So seeing zeros is here a good thing:"]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Zabbix for Zimbra",src:t(322918).Z+"",width:"855",height:"798"})})]})}function m(e={}){const{wrapper:n}={...(0,r.ah)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(b,{...e})}):b(e)}},603905:(e,n,t)=>{t.d(n,{ah:()=>c});var a=t(667294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function s(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var l=a.createContext({}),c=function(e){var n=a.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},b={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,m=o(e,["components","mdxType","originalType","parentName"]),d=c(t),p=r,h=d["".concat(l,".").concat(p)]||d[p]||b[p]||i;return t?a.createElement(h,s(s({ref:n},m),{},{components:t})):a.createElement(h,s({ref:n},m))}));m.displayName="MDXCreateElement"},228887:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/Zabbix_for_Zimbra_01-242a3c162e1687bfdb77179585091ae6.png"},347274:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/Zabbix_for_Zimbra_02-dc82a08ef528430800218c2ec2d4314f.png"},908494:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/Zabbix_for_Zimbra_03-fb60b63a971c2b65f8138cf21ea63d8a.png"},322918:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/Zabbix_for_Zimbra_04-f1572c27e4b1eed321ba8e226b294aa8.png"},856950:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/photo-kt443t6d_64hdh43hfh6dgjdfhg4_d-639bd38d59a5e55ec0c382905cd02a5c.jpg"}}]); \ No newline at end of file diff --git a/assets/js/main.93a0244f.js b/assets/js/main.93a0244f.js deleted file mode 100644 index fcf05310cb..0000000000 --- a/assets/js/main.93a0244f.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.93a0244f.js.LICENSE.txt */ -(self.webpackChunkmikes_dev_notebook=self.webpackChunkmikes_dev_notebook||[]).push([[40179],{150997:(e,t,o)=>{"use strict";o.d(t,{Z:()=>u});o(667294);var n=o(268356),a=o.n(n),i=o(916887);const r={"00e3e3f7":[()=>o.e(96278).then(o.bind(o,108011)),"@site/docs/IoT-and-Machine-Learning/ML/2022-12-21-tf-deepdream/index.md",108011],"01a85c17":[()=>Promise.all([o.e(40532),o.e(64013)]).then(o.bind(o,523977)),"@theme/BlogTagsListPage",523977],"0204db0b":[()=>o.e(78571).then(o.bind(o,474416)),"@site/docs/Development/Python/2022-06-27-python-web-scraping/index.md",474416],"020b784b":[()=>o.e(85833).then(o.bind(o,51156)),"@site/docs/DevOps/Linux/2022-09-15--ntp-over-nts-timeserver/index.md",51156],"02126e17":[()=>o.e(47015).then(o.bind(o,331604)),"@site/docs/DevOps/Ansible/2020-11-19--ansible-playbooks/index.md",331604],"026919cd":[()=>o.e(16743).then(o.bind(o,119163)),"@site/docs/DevOps/Hashicorp/2021-08-05--hashicorp-consul-service-discovery/index.md",119163],"02fa3188":[()=>o.e(89830).then(o.bind(o,920453)),"@site/docs/Automation_and_Robotics/Home_Automation/2020-09-16--testing-new-rest-api-with-nodered/index.md",920453],"0310ea19":[()=>o.e(25055).then(o.bind(o,336118)),"@site/docs/DevOps/Security/2020-07-27--firewalld-deployment-debian/index.md",336118],"03685665":[()=>o.e(54672).then(o.t.bind(o,744279,19)),"~docs/default/tag-docs-tags-docker-f43.json",744279],"040eb15c":[()=>o.e(61768).then(o.bind(o,110661)),"@site/docs/IoT-and-Machine-Learning/AIOps/2023-08-19-tensorflow-serving-api/index.md",110661],"042b1f9f":[()=>o.e(58479).then(o.bind(o,783303)),"@site/docs/DevOps/NGINX/2021-02-22-nginx-docker-ingress/index.md",783303],"0478f960":[()=>o.e(49543).then(o.bind(o,555816)),"@site/docs/DevOps/Hashicorp/2020-10-26--hashicorp-packer-provisioner/index.md",555816],"04b4f6e3":[()=>o.e(53814).then(o.bind(o,44417)),"@site/docs/Automation_and_Robotics/Home_Automation/2020-09-15--mock-rest-api-with-nodered/index.md",44417],"04bd0780":[()=>o.e(61719).then(o.bind(o,823095)),"@site/docs/DevOps/Linux/2019-06-07--installing-docker-on-centos8/index.mdx",823095],"051811d4":[()=>o.e(42223).then(o.bind(o,32211)),"@site/docs/Automation_and_Robotics/Home_Automation/2023-02-07-python-home-security/index.md",32211],"058ff1fd":[()=>o.e(31926).then(o.bind(o,257191)),"@site/docs/DevOps/Hashicorp/2022-11-16-hashicorp-nomad-mautic/index.md",257191],"05a29c15":[()=>o.e(87201).then(o.bind(o,167274)),"@site/docs/IoT-and-Machine-Learning/ML/2023-08-12-tensorflow-i-know-flowers-xception/index.md",167274],"05e124a8":[()=>o.e(64012).then(o.bind(o,657356)),"@site/docs/DevOps/Salt/2020-06-22--salt-nginx-state/index.md",657356],"05f312eb":[()=>o.e(65926).then(o.bind(o,654439)),"@site/docs/DevOps/Salt/2020-06-19--salt-mine-orchestrate/index.md",654439],"060afd93":[()=>o.e(8037).then(o.bind(o,446611)),"@site/docs/Automation_and_Robotics/MQTT/2022-03-30--mqtt-with-rabbit-mq/index.md",446611],"060fba97":[()=>o.e(89517).then(o.bind(o,158873)),"@site/docs/DevOps/Provisioning/2021-09-13--postgres-refresher-part-ii/index.md",158873],"06e02c68":[()=>o.e(56791).then(o.bind(o,544881)),"@site/docs/DevOps/Hashicorp/2022-10-22-hashicorp-nomad-sidecar-pattern/index.md",544881],"0708254a":[()=>o.e(19852).then(o.bind(o,873463)),"@site/docs/DevOps/Elasticsearch/2021-03-26-elasticsearch7-for-syslog-messages/index.md",873463],"07442ddf":[()=>o.e(60818).then(o.bind(o,567606)),"@site/docs/Development/Go/2021-02-21-gofiber-container-gatsby/index.md",567606],"074598b7":[()=>o.e(80863).then(o.bind(o,204871)),"@site/docs/DevOps/Hashicorp/2022-05-16-hashicorp-dojo-nomad-starter/index.md",204871],"07a178b2":[()=>o.e(46044).then(o.bind(o,166373)),"@site/docs/Automation_and_Robotics/Home_Automation/2022-07-12-home-assistant-mqtt-python/index.md",166373],"07b8ceab":[()=>o.e(2666).then(o.bind(o,36744)),"@site/docs/Development/Magento/2019-09-18--magento2-cronjobs/index.mdx",36744],"07f43f88":[()=>o.e(37696).then(o.t.bind(o,431195,19)),"~docs/default/tag-docs-tags-next-e63.json",431195],"07fca0d3":[()=>o.e(77210).then(o.bind(o,205664)),"@site/docs/DevOps/Hashicorp/2020-10-25--hashicorp-packer-and-virtualbox-autoinstall/index.md",205664],"08b8a39f":[()=>o.e(90214).then(o.bind(o,71557)),"@site/docs/DevOps/Linux/2021-04-12-gnome3-cheat-sheet/index.md",71557],"09454981":[()=>o.e(81809).then(o.t.bind(o,494849,19)),"~docs/default/category-docs-tutorialsidebar-category-aiops-0c3.json",494849],"09485d72":[()=>o.e(92105).then(o.bind(o,493458)),"@site/docs/Development/Magento/2019-09-13--magento-and-varnish/index.mdx",493458],"09857244":[()=>o.e(30630).then(o.bind(o,781541)),"@site/docs/IoT-and-Machine-Learning/AIOps/2023-06-21-automl-with-autogluon-multiclass-nlp/index.md",781541],"0a11a64e":[()=>o.e(97909).then(o.bind(o,493295)),"@site/docs/DevOps/Salt/2020-06-18--salt-execution-order/index.md",493295],"0a3efcc3":[()=>o.e(10349).then(o.bind(o,622141)),"@site/docs/IoT-and-Machine-Learning/AIOps/2023-02-04-apache-airflow-data-pipelines/index.md",622141],"0aea39b7":[()=>o.e(30875).then(o.bind(o,89243)),"@site/docs/Development/Javascript/2020-01-12--node-express-redirect-server/index.md",89243],"0b041ce6":[()=>o.e(56040).then(o.bind(o,689970)),"@site/docs/DevOps/Zabbix/2020-07-17--zabbix-website-monitor/index.md",689970],"0b113744":[()=>o.e(76419).then(o.t.bind(o,254490,19)),"~docs/default/category-docs-tutorialsidebar-category-windows-ac3.json",254490],"0b84cd8f":[()=>o.e(13278).then(o.bind(o,687968)),"@site/docs/DevOps/Linux/2019-09-26--kali-docker-windows/index.md",687968],"0c374ced":[()=>o.e(5785).then(o.bind(o,550022)),"@site/docs/Development/Python/2023-05-07-python-seaborn-cheat-sheet/index.md",550022],"0c3d484e":[()=>o.e(5177).then(o.bind(o,921532)),"@site/docs/DevOps/Hashicorp/2022-11-18-hashicorp-nomad-grav/index.md",921532],"0d34986c":[()=>o.e(48387).then(o.bind(o,536336)),"@site/docs/IoT-and-Machine-Learning/ML/2022-11-27-containerized-deep-learning/index.md",536336],"0da64c13":[()=>o.e(22995).then(o.bind(o,791602)),"@site/docs/DevOps/Provisioning/2021-09-13--postgres-refresher-part-i/index.md",791602],"0db9675e":[()=>o.e(95603).then(o.bind(o,121810)),"@site/docs/DevOps/Hashicorp/2020-08-16--nomad-cluster/index.md",121810],"0e06d869":[()=>o.e(92698).then(o.t.bind(o,713832,19)),"~docs/default/tag-docs-tags-os-ticket-b7c.json",713832],"0e148920":[()=>o.e(92483).then(o.bind(o,630509)),"@site/docs/Development/Javascript/2017-08-15--gatsby-blog-starter/index.mdx",630509],"0e384e19":[()=>o.e(59671).then(o.bind(o,802445)),"@site/docs/intro.md",802445],"0e3e448e":[()=>o.e(49195).then(o.t.bind(o,578926,19)),"~docs/default/tag-docs-tags-web-rtc-472.json",578926],"0f2c1873":[()=>o.e(46424).then(o.bind(o,232706)),"@site/docs/DevOps/Provisioning/2018-01-28--express-generator-dockerrized/index.mdx",232706],"0f315388":[()=>o.e(84051).then(o.bind(o,980829)),"@site/docs/DevOps/Hashicorp/2022-06-08-hashicorp-waypoint-nomad/index.md",980829],"0f9a890b":[()=>o.e(75945).then(o.bind(o,392498)),"@site/docs/DevOps/NGINX/2021-07-29--certbot-nginx-autorenewal/index.md",392498],"0fc1549e":[()=>o.e(78830).then(o.bind(o,13451)),"@site/docs/Development/Graphs/2020-05-05--graphql-queries-and-mutations/index.mdx",13451],"0fd7db69":[()=>o.e(20248).then(o.t.bind(o,722731,19)),"~docs/default/tag-docs-tags-flask-ca4.json",722731],"0fe3b00e":[()=>o.e(87221).then(o.bind(o,164715)),"@site/docs/IoT-and-Machine-Learning/ML/2023-04-13-isometric-mapping/index.md",164715],"0fef7ecf":[()=>o.e(81441).then(o.bind(o,364920)),"@site/docs/DevOps/Linux/2022-11-09--docker-borg-backupserver/index.md",364920],"1004329b":[()=>o.e(16068).then(o.t.bind(o,902646,19)),"~docs/default/tag-docs-tags-opensearch-333.json",902646],"1080cd4b":[()=>o.e(15150).then(o.bind(o,499193)),"@site/docs/Automation_and_Robotics/Home_Automation/2022-07-10-home-assistant-mqtt-autodiscovery-part-i/index.md",499193],"117a5973":[()=>o.e(24670).then(o.bind(o,942719)),"@site/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-2-salt-state/index.md",942719],"11aed6c0":[()=>o.e(46173).then(o.bind(o,395705)),"@site/docs/DevOps/Zabbix/2022-01-15--zabbix-grafana-dashboard/index.md",395705],"11f3e68c":[()=>o.e(81558).then(o.bind(o,308342)),"@site/docs/DevOps/Salt/2020-06-17--salt-pillars-formulas/index.mdx",308342],"12b31575":[()=>o.e(40065).then(o.bind(o,258427)),"@site/docs/DevOps/Zabbix/2022-01-13--zabbix-api-testing/index.md",258427],"12d50866":[()=>o.e(10449).then(o.bind(o,46011)),"@site/docs/Development/Misc/1980-01-02--dcs-su-25-t/index.md",46011],"1344fbda":[()=>o.e(84134).then(o.bind(o,57864)),"@site/docs/DevOps/Kubernetes/2019-01-19--kubernetes-cluster-logging/index.mdx",57864],"13ab464e":[()=>o.e(59179).then(o.bind(o,116640)),"@site/docs/IoT-and-Machine-Learning/ML/2022-12-12-tf-breast-cancer-classification-part6/index.md",116640],"13c98fd5":[()=>o.e(12353).then(o.bind(o,291142)),"@site/docs/DevOps/Elasticsearch/2020-06-01--elasticsearch-docker/index.mdx",291142],"13f1ba9b":[()=>o.e(72325).then(o.bind(o,196382)),"@site/docs/Automation_and_Robotics/MQTT/2022-03-26--mqtt-clients/index.md",196382],"14ace9b9":[()=>o.e(8608).then(o.bind(o,54812)),"@site/docs/DevOps/Zabbix/2020-09-05--slack-notifications-in-devops/index.md",54812],"14eb3368":[()=>Promise.all([o.e(40532),o.e(9817)]).then(o.bind(o,980853)),"@theme/DocCategoryGeneratedIndexPage",980853],16923400:[()=>o.e(78370).then(o.bind(o,496241)),"@site/docs/Development/Javascript/2022-12-11-11ty-starter/index.md",496241],"16a9e9aa":[()=>o.e(91158).then(o.bind(o,744767)),"@site/docs/DevOps/Linux/2020-10-20--activating-root-login-ubuntu-20-10/index.md",744767],"17057f31":[()=>o.e(19558).then(o.bind(o,255454)),"@site/docs/IoT-and-Machine-Learning/ML/2021-12-03--opencv-image-operations/index.md",255454],"17140fc0":[()=>o.e(47380).then(o.bind(o,867078)),"@site/docs/DevOps/Linux/2021-03-15-debian-upgrade-bullseye/index.md",867078],"175a2674":[()=>o.e(89991).then(o.bind(o,731918)),"@site/docs/Automation_and_Robotics/Home_Automation/2019-01-05--zigbee2mqtt-xiaomi-fhem/index.mdx",731918],17896441:[()=>Promise.all([o.e(40532),o.e(66567),o.e(27918)]).then(o.bind(o,642889)),"@theme/DocItem",642889],"17d0c39b":[()=>o.e(75937).then(o.bind(o,780101)),"@site/docs/Development/Javascript/2022-12-29-reactive-search-starter/index.md",780101],18147091:[()=>o.e(44639).then(o.bind(o,941447)),"@site/docs/IoT-and-Machine-Learning/ML/2023-07-25-onnx-models/index.md",941447],"188d41b9":[()=>o.e(14978).then(o.bind(o,841792)),"@site/docs/Automation_and_Robotics/MQTT/2019-08-04--mqtt-android-dashboards/index.mdx",841792],"188fd040":[()=>o.e(77956).then(o.bind(o,248670)),"@site/docs/IoT-and-Machine-Learning/AIOps/2023-01-31-python-ray-model-serving/index.md",248670],"18a22dbb":[()=>o.e(35092).then(o.bind(o,288179)),"@site/docs/Development/Go/2021-09-24--golang-react-starter-part-iv/index.md",288179],"18cb949a":[()=>o.e(74156).then(o.bind(o,770895)),"@site/docs/Automation_and_Robotics/Home_Automation/2018-10-28--nodered-getting-started/index.mdx",770895],"18d3e195":[()=>o.e(18195).then(o.bind(o,571857)),"@site/docs/IoT-and-Machine-Learning/ML/2021-12-01--opencv-with-images/index.md",571857],"18e13af3":[()=>o.e(25725).then(o.bind(o,999451)),"@site/docs/DevOps/Provisioning/2019-01-08--creating-a-grafana-dashboard/index.mdx",999451],"18ee1abb":[()=>o.e(2986).then(o.bind(o,498257)),"@site/docs/DevOps/Hashicorp/2022-05-20-hashicorp-dojo-nomad-consul/index.md",498257],"191287bd":[()=>o.e(9846).then(o.t.bind(o,615745,19)),"/run/media/xiaodie/dev/mp-docs/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",615745],"19356d29":[()=>o.e(32137).then(o.bind(o,998847)),"@site/docs/DevOps/NGINX/2020-08-26--nginx-docker-setup/index.md",998847],"197e496a":[()=>o.e(69550).then(o.bind(o,917917)),"@site/docs/Development/Magento/2019-09-12--magento-and-elasticsearch/index.mdx",917917],"1a0df621":[()=>o.e(62956).then(o.bind(o,598384)),"@site/docs/DevOps/Hashicorp/2021-08-06--hashicorp-consul-fabio-loadbalancing/index.md",598384],"1a57084d":[()=>o.e(13677).then(o.bind(o,472450)),"@site/docs/DevOps/Elasticsearch/2021-03-20-elasticsearch-7-refresher/index.md",472450],"1a6b2235":[()=>o.e(19188).then(o.bind(o,612436)),"@site/docs/DevOps/Linux/2021-10-26--install-davinci-resolve-on-arch/index.md",612436],"1a7ec85d":[()=>o.e(8665).then(o.bind(o,16097)),"@site/docs/DevOps/Elasticsearch/2021-03-29-elasticsearch7-data-transformations/index.md",16097],"1ad412fc":[()=>o.e(42364).then(o.bind(o,799133)),"@site/docs/Development/Javascript/2023-02-12-react-meili-search-starter/index.md",799133],"1b527a07":[()=>o.e(37239).then(o.bind(o,626502)),"@site/docs/DevOps/Provisioning/2019-06-19--using-twitter-auth-in-discourse/index.mdx",626502],"1c9f8e23":[()=>o.e(22058).then(o.bind(o,727091)),"@site/docs/IoT-and-Machine-Learning/ML/2018-01-02--machine-learning-with-python/index.mdx",727091],"1cd33929":[()=>o.e(98364).then(o.t.bind(o,920625,19)),"~docs/default/tag-docs-tags-pandas-466.json",920625],"1cebcda1":[()=>o.e(73720).then(o.bind(o,88602)),"@site/docs/DevOps/Linux/2019-06-17--working-with-tmux/index.mdx",88602],"1d43ab79":[()=>o.e(16416).then(o.bind(o,47614)),"@site/docs/IoT-and-Machine-Learning/ML/2023-08-01-tensorflow-i-know-flowers-intro/index.md",47614],"1d77bf99":[()=>o.e(5208).then(o.bind(o,114045)),"@site/docs/Automation_and_Robotics/Home_Automation/2019-02-07--motioneye-on-debian/index.mdx",114045],"1db19413":[()=>o.e(4104).then(o.bind(o,83525)),"@site/docs/IoT-and-Machine-Learning/ML/2022-12-20-tf-representation/index.md",83525],"1e037f3f":[()=>o.e(80082).then(o.bind(o,675004)),"@site/docs/IoT-and-Machine-Learning/ML/2023-02-16-keras-introduction-ann/index.md",675004],"1e18061d":[()=>o.e(72099).then(o.t.bind(o,848918,19)),"~docs/default/tag-docs-tags-smarthome-874.json",848918],"1e619dbd":[()=>o.e(16504).then(o.t.bind(o,937848,19)),"~docs/default/tag-docs-tags-node-b1a.json",937848],"1e95f88e":[()=>o.e(10037).then(o.bind(o,37870)),"@site/docs/Automation_and_Robotics/Home_Automation/2020-12-03--openhab3-camera-binding/index.md",37870],"1ec7f3be":[()=>o.e(49611).then(o.bind(o,30633)),"@site/docs/DevOps/Hashicorp/2022-05-24-hashicorp-nomad-with-nginx/index.md",30633],"1ef1e47d":[()=>o.e(49039).then(o.bind(o,522650)),"@site/docs/DevOps/Tomcat/2020-12-23-tomcat9-configuration/index.md",522650],"1f5e18d3":[()=>o.e(99292).then(o.bind(o,201361)),"@site/docs/Development/Python/2017-12-11--getting-started-with-python/index.mdx",201361],"1faf586c":[()=>o.e(93155).then(o.t.bind(o,395625,19)),"~docs/default/tag-docs-tags-seaborn-ca9.json",395625],"1ff9488e":[()=>o.e(50579).then(o.bind(o,540950)),"@site/docs/DevOps/Kubernetes/2019-01-27--kubernetes-the-chinese-way/index.mdx",540950],"203af87a":[()=>o.e(83312).then(o.bind(o,929716)),"@site/docs/DevOps/Windows/2019-06-09--setting-up-windows-server-2019/index.mdx",929716],"2050ee40":[()=>o.e(14159).then(o.bind(o,350640)),"@site/docs/Development/Graphs/2020-05-04--neo4j-corona-tracing/index.mdx",350640],"2068b66d":[()=>o.e(72650).then(o.bind(o,254103)),"@site/docs/Development/Javascript/2017-12-09--next-start/index.mdx",254103],"21d7a717":[()=>o.e(28108).then(o.bind(o,88066)),"@site/docs/DevOps/Zabbix/2020-07-16--zabbix-agent/index.md",88066],"2217f49d":[()=>o.e(47687).then(o.bind(o,827771)),"@site/docs/Development/Python/2022-12-11-pipenv/index.md",827771],"22ce5520":[()=>o.e(78550).then(o.bind(o,557446)),"@site/docs/DevOps/Provisioning/2021-04-07--loki-prometheus-grafana/index.md",557446],"23062db0":[()=>o.e(83409).then(o.t.bind(o,52655,19)),"~docs/default/tag-docs-tags-terraform-fdc.json",52655],"2350fe41":[()=>o.e(61188).then(o.bind(o,286833)),"@site/docs/Automation_and_Robotics/Home_Automation/2023-04-17-home-assistant-mqtt-autodiscovery-part-iii/index.md",286833],"235b3975":[()=>o.e(86944).then(o.bind(o,192916)),"@site/docs/Development/Python/2023-05-07-python-scipy-introduction/index.md",192916],"23a9d2ac":[()=>o.e(30077).then(o.t.bind(o,456360,19)),"~docs/default/category-docs-tutorialsidebar-category-nginx-0c0.json",456360],"23ab727c":[()=>o.e(20900).then(o.bind(o,987125)),"@site/docs/Automation_and_Robotics/Home_Automation/2019-09-23--mqtt-camera-ai-video-security/index.md",987125],"23b7d115":[()=>o.e(14875).then(o.bind(o,820374)),"@site/docs/Development/ReactNative/2022-05-04-react-native-hooks/index.md",820374],"23ccef93":[()=>o.e(69391).then(o.bind(o,834951)),"@site/docs/DevOps/Windows/2019-06-10--windows-server-2019-scripting-and-sharing/index.mdx",834951],"243daced":[()=>o.e(88634).then(o.bind(o,825213)),"@site/docs/IoT-and-Machine-Learning/AIOps/2023-01-06-dvc-model-access/index.md",825213],"24cfa20c":[()=>o.e(87266).then(o.bind(o,786144)),"@site/docs/DevOps/Linux/2022-11-04--check-filesystem/index.md",786144],"24ecb0d8":[()=>o.e(69638).then(o.bind(o,656501)),"@site/docs/Development/Javascript/2017-07-04--random-password-generator/index.mdx",656501],25738489:[()=>o.e(923).then(o.bind(o,377397)),"@site/docs/Development/Javascript/2021-06-04--mqtt-dashboard-react/index.md",377397],"25cde98c":[()=>o.e(16503).then(o.t.bind(o,442191,19)),"~docs/default/category-docs-tutorialsidebar-category-tomcat-d9c.json",442191],"25e39a0d":[()=>o.e(54208).then(o.bind(o,822646)),"@site/docs/DevOps/Elasticsearch/2017-10-03--search-engine-setup-and-configuration/index.mdx",822646],"25fa6e4a":[()=>o.e(72569).then(o.bind(o,438754)),"@site/docs/Development/Python/2023-05-20-python-sklearn-cheat-sheet/index.md",438754],"2605700e":[()=>o.e(44287).then(o.bind(o,66548)),"@site/docs/Development/Go/2021-10-08--goftp/index.md",66548],"2645d6c2":[()=>o.e(91501).then(o.bind(o,55678)),"@site/docs/IoT-and-Machine-Learning/ML/2023-07-26-tensorflow-human-emotion-detector/index.md",55678],"264bb177":[()=>o.e(11886).then(o.bind(o,983969)),"@site/docs/DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/index.md",983969],"26bf8666":[()=>o.e(18237).then(o.bind(o,519656)),"@site/docs/Automation_and_Robotics/Home_Automation/2023-01-23-thread-edge-router-docker/index.md",519656],"26cdd42e":[()=>o.e(75817).then(o.bind(o,541878)),"@site/docs/DevOps/Zabbix/2020-07-18--zabbix-email-notification/index.md",541878],27167659:[()=>o.e(95137).then(o.bind(o,92583)),"@site/docs/Development/Javascript/2021-06-01--mqtt-with-reactjs/index.md",92583],"273f27a1":[()=>o.e(91499).then(o.bind(o,627324)),"@site/docs/IoT-and-Machine-Learning/ML/2021-11-08--tensorflow-crash-course-part-i/activate_webcam.md",627324],"286c5f67":[()=>o.e(81495).then(o.t.bind(o,675273,19)),"~docs/default/tag-docs-tags-magento-d1b.json",675273],"288ebaf4":[()=>o.e(7743).then(o.bind(o,939074)),"@site/docs/DevOps/NGINX/2020-08-28--nginx-docker-certbot/index.md",939074],"28db4479":[()=>o.e(86736).then(o.bind(o,491951)),"@site/docs/DevOps/Ansible/2020-11-18--ansible-on-debian-buster/index.md",491951],"290e495d":[()=>o.e(55011).then(o.bind(o,247463)),"@site/docs/IoT-and-Machine-Learning/ML/2023-08-10-tensorflow-i-know-flowers-nasnetmobile/index.md",247463],"292e5282":[()=>o.e(74309).then(o.bind(o,927470)),"@site/docs/DevOps/Hashicorp/2021-08-23--hashicorp-vault-rest-api/index.md",927470],"2945e117":[()=>o.e(41559).then(o.bind(o,810660)),"@site/docs/DevOps/Provisioning/2021-09-14--postgres-refresher-node-json/index.md",810660],"295c7fd1":[()=>o.e(49829).then(o.t.bind(o,25204,19)),"~docs/default/category-docs-tutorialsidebar-category-python-93b.json",25204],"2985c20d":[()=>o.e(56925).then(o.t.bind(o,693438,19)),"~docs/default/tag-docs-tags-google-analytics-7c3.json",693438],"29a36bd7":[()=>o.e(14694).then(o.t.bind(o,503061,19)),"~blog/default/blog-tags-development-9e5-list.json",503061],"29c6a57e":[()=>o.e(4969).then(o.bind(o,7750)),"@site/docs/DevOps/Hashicorp/2022-10-25-hashicorp-nomad-for-osticket-part-ii/index.md",7750],"29e93fad":[()=>o.e(77131).then(o.bind(o,996407)),"@site/docs/Development/ReactNative/2022-05-03-react-native-contextapi/index.md",996407],"2a1433ef":[()=>o.e(16078).then(o.bind(o,203983)),"@site/docs/DevOps/Elasticsearch/2021-03-24-logstash-common-grok-pattern/index.md",203983],"2a7040f7":[()=>o.e(10601).then(o.bind(o,182329)),"@site/docs/IoT-and-Machine-Learning/ML/2023-02-26-tensorflow-neural-network-regression-real-dataset/index.md",182329],"2a7ca6b8":[()=>o.e(53636).then(o.bind(o,934837)),"@site/docs/Development/Python/2023-05-18-python-asserts/index.md",934837],"2aa567b7":[()=>o.e(30066).then(o.bind(o,209872)),"@site/docs/Development/Javascript/2016-06-01--node-express-mongodb/index.md",209872],"2ae5c0b1":[()=>o.e(14664).then(o.bind(o,648261)),"@site/docs/DevOps/Linux/2021-09-01--kali-linux-raspberry-pi/index.md",648261],"2aef3a12":[()=>o.e(70041).then(o.bind(o,242097)),"@site/docs/IoT-and-Machine-Learning/ML/2023-01-10-yolov7_custom_data/index.md",242097],"2bccce27":[()=>o.e(9589).then(o.bind(o,291277)),"@site/docs/DevOps/Windows/2019-06-11--windows-server-2019-active-directory/index.mdx",291277],"2bfaf4ec":[()=>o.e(9277).then(o.bind(o,611448)),"@site/docs/IoT-and-Machine-Learning/AIOps/2023-02-09-mlflow-introduction/index.md",611448],"2c227209":[()=>o.e(45454).then(o.t.bind(o,668272,19)),"~docs/default/tag-docs-tags-webots-45f.json",668272],"2c38a31b":[()=>o.e(65917).then(o.bind(o,482949)),"@site/docs/DevOps/Security/2020-07-28--uncomplicated-firewall-ufw/index.md",482949],"2c45c7d3":[()=>o.e(7788).then(o.bind(o,46196)),"@site/docs/Development/Go/2022-12-27-go-data-structures/index.md",46196],"2c8b403a":[()=>o.e(70363).then(o.bind(o,225295)),"@site/docs/Automation_and_Robotics/Home_Automation/2022-07-15-node-red-mqtt-homie/index.md",225295],"2cd78bb1":[()=>o.e(83378).then(o.bind(o,318753)),"@site/docs/IoT-and-Machine-Learning/ML/2022-02-17--yolo-app-prediction-pipeline/index.md",318753],"2cf0c21f":[()=>o.e(64219).then(o.bind(o,505375)),"@site/docs/DevOps/Hashicorp/2020-10-23--hashicorp-packer-machine-image/index.md",505375],"2cfde092":[()=>o.e(18428).then(o.t.bind(o,804989,19)),"~blog/default/blog-tags-markdown-102.json",804989],"2e7726be":[()=>o.e(1769).then(o.bind(o,475625)),"@site/docs/IoT-and-Machine-Learning/ML/2023-01-13-yolov7_data_conversion/index.md",475625],"2ea89cc3":[()=>o.e(92821).then(o.bind(o,316913)),"@site/docs/IoT-and-Machine-Learning/ML/2023-04-11-locally-linear-embedding/index.md",316913],"2eac4fad":[()=>o.e(2504).then(o.bind(o,645168)),"@site/docs/DevOps/Provisioning/2021-01-22-file-transfer-tools-in-nodejs/index.md",645168],"2f1339e7":[()=>o.e(60471).then(o.bind(o,745428)),"@site/docs/IoT-and-Machine-Learning/ML/2023-02-22-tensorflow-tensors-3/index.md",745428],"2f31b43b":[()=>o.e(34595).then(o.bind(o,48525)),"@site/docs/DevOps/Elasticsearch/2021-03-21-logstash-digesting-data/index.md",48525],"3055514b":[()=>o.e(18310).then(o.bind(o,993916)),"@site/docs/Development/Graphs/2020-05-01--getting-to-know-neo4j/index.mdx",993916],"3086056e":[()=>o.e(35447).then(o.bind(o,687470)),"@site/docs/Automation_and_Robotics/MQTT/2022-03-28--mqtt-message-server/index.md",687470],"30c1b2da":[()=>o.e(67419).then(o.bind(o,68849)),"@site/docs/DevOps/Hashicorp/2020-10-24--hashicorp-packer-and-virtualbox-preseed/index.md",68849],"31f74473":[()=>o.e(91886).then(o.bind(o,610943)),"@site/docs/IoT-and-Machine-Learning/ML/2023-09-17--yolo8-nightshift/index.md",610943],"31f8d908":[()=>o.e(29578).then(o.bind(o,398990)),"@site/docs/Development/Python/2022-10-22-python-nlp/index.md",398990],32170927:[()=>o.e(23736).then(o.bind(o,505262)),"@site/docs/DevOps/Ansible/2020-11-22--ansible-and-docker/index.md",505262],"337e4b68":[()=>o.e(91257).then(o.t.bind(o,924469,19)),"/run/media/xiaodie/dev/mp-docs/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",924469],"34429c79":[()=>o.e(75118).then(o.bind(o,105907)),"@site/docs/Automation_and_Robotics/Home_Automation/2022-07-17-node-red-for-mqtt-autodiscovery/index.md",105907],"347f19b4":[()=>o.e(76799).then(o.bind(o,449341)),"@site/docs/DevOps/Linux/2022-09-29--build-an-chrony-nts-client-from-source/index.md",449341],"3490c21d":[()=>o.e(84466).then(o.bind(o,329933)),"@site/docs/DevOps/Provisioning/2023-02-13--meili-search-gatsby/index.md",329933],"34e02df2":[()=>o.e(59111).then(o.bind(o,123362)),"@site/docs/Development/Magento/2019-09-11--magento-on-debian-with-nginx/index.mdx",123362],"35302bab":[()=>o.e(57605).then(o.bind(o,932275)),"@site/docs/DevOps/Provisioning/2022-01-25--installing-bind9-docker/index.md",932275],"35642be8":[()=>o.e(49627).then(o.bind(o,991657)),"@site/docs/Automation_and_Robotics/MQTT/2023-07-25-emqx-mqtt-broker-docker/index.md",991657],"3574fad8":[()=>o.e(441).then(o.bind(o,664453)),"@site/docs/Development/Javascript/2023-06-13-typescript-dom/index.md",664453],"35c7122d":[()=>o.e(48827).then(o.t.bind(o,402134,19)),"~docs/default/tag-docs-tags-databases-983.json",402134],"35cc1693":[()=>o.e(70740).then(o.t.bind(o,79045,19)),"~docs/default/tag-docs-tags-electron-2ab.json",79045],"35d51d21":[()=>o.e(46493).then(o.t.bind(o,19650,19)),"~docs/default/tag-docs-tags-ap-is-b36.json",19650],"35e63312":[()=>o.e(5446).then(o.bind(o,500378)),"@site/docs/Development/Javascript/2023-12-24-react-query-tauri-iot-ctrl/index.md",500378],"36308b6a":[()=>o.e(11964).then(o.bind(o,419927)),"@site/docs/DevOps/Provisioning/2022-01-26--dns-over-TLS-docker/index.md",419927],"363a367c":[()=>o.e(11842).then(o.bind(o,387944)),"@site/docs/DevOps/Linux/2021-04-13-installing-kvm-on-red-hat-enterprise-linux/index.md",387944],"36477df5":[()=>o.e(89297).then(o.t.bind(o,378452,19)),"~docs/default/tag-docs-tags-meili-12c.json",378452],"36874b54":[()=>o.e(8749).then(o.bind(o,769744)),"@site/docs/DevOps/Hashicorp/2022-06-07-hashicorp-waypoint-docker/index.md",769744],"36da8626":[()=>o.e(81117).then(o.bind(o,353775)),"@site/docs/DevOps/NGINX/2020-08-27--nginx-docker-ssl-certs-self-signed/index.md",353775],"3720c009":[()=>Promise.all([o.e(40532),o.e(13751)]).then(o.bind(o,41618)),"@theme/DocTagsListPage",41618],"37bd2da2":[()=>o.e(6741).then(o.bind(o,623422)),"@site/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-slack-notifications/index.md",623422],"3819b441":[()=>o.e(67998).then(o.bind(o,489642)),"@site/docs/DevOps/Elasticsearch/2022-02-03--elasticsearch-v8-data-ingestion/index.md",489642],"3871860d":[()=>o.e(51553).then(o.bind(o,735851)),"@site/docs/Development/Python/2023-05-03-python-matplotlib-cheat-sheet/index.md",735851],"387a211c":[()=>o.e(64063).then(o.bind(o,231469)),"@site/docs/Development/Javascript/2017-12-17--gatsby-reactstrap/index.mdx",231469],"39267a2d":[()=>o.e(24189).then(o.bind(o,580699)),"@site/docs/DevOps/Hashicorp/2020-08-17--installing-consul-ubuntu/index.md",580699],39680677:[()=>o.e(38443).then(o.bind(o,758418)),"@site/docs/DevOps/Linux/2019-01-11--debian-change-ssh-port-hostname/index.md",758418],"39c524e2":[()=>o.e(16511).then(o.bind(o,775767)),"@site/docs/DevOps/Zabbix/2022-01-16--zabbix-v6-baseline-monitoring/index.md",775767],"3a6971b8":[()=>o.e(19167).then(o.bind(o,149257)),"@site/docs/IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part4/index.md",149257],"3ad20200":[()=>o.e(54818).then(o.bind(o,914687)),"@site/blog/2017-08-01-mdx-blog-post/index.mdx?truncated=true",914687],"3b24a72b":[()=>o.e(46662).then(o.bind(o,458870)),"@site/docs/DevOps/Zabbix/2020-07-15--zabbix-docker-installation/index.md",458870],"3c4693de":[()=>o.e(27776).then(o.bind(o,70702)),"@site/docs/IoT-and-Machine-Learning/ML/2022-04-01-tensorflow-audio-classifier/index.md",70702],"3c473a21":[()=>o.e(74631).then(o.bind(o,849791)),"@site/docs/IoT-and-Machine-Learning/ML/2023-08-08-tensorflow-i-know-flowers-mobilenetv3large/index.md",849791],"3c4b5461":[()=>o.e(28458).then(o.bind(o,649842)),"@site/docs/DevOps/Elasticsearch/2022-10-11--opensearch-docker-compose/index.md",649842],"3ca730a4":[()=>o.e(37776).then(o.bind(o,620168)),"@site/docs/DevOps/Hashicorp/2021-08-07--hashicorp-nomad-job-configuration/index.md",620168],"3ceeb3ff":[()=>o.e(67369).then(o.bind(o,226842)),"@site/docs/Development/Python/2023-01-16-python-3-11-features/index.md",226842],"3d1e2de0":[()=>o.e(16257).then(o.t.bind(o,644045,19)),"~docs/default/tag-docs-tags-rust-571.json",644045],"3d43e0e8":[()=>o.e(14227).then(o.bind(o,265430)),"@site/docs/DevOps/Provisioning/2020-10-01--installing-openproject-in-docker/index.md",265430],"3d9a44cc":[()=>o.e(57392).then(o.bind(o,28915)),"@site/docs/DevOps/Kubernetes/2019-02-01--kubernetes-traefik-ingress/index.mdx",28915],"3dea18ca":[()=>o.e(81840).then(o.bind(o,921887)),"@site/docs/Automation_and_Robotics/Home_Automation/2022-12-15--rtsp-to-hls-ffmpeg/index.md",921887],"3e130f95":[()=>o.e(79840).then(o.bind(o,783686)),"@site/docs/DevOps/Elasticsearch/2022-02-05--kibana-v8-index-management/index.md",783686],"3e52a057":[()=>o.e(50292).then(o.bind(o,124546)),"@site/docs/Automation_and_Robotics/MQTT/2022-03-27--build-mosquitto-from-source/index.md",124546],"3f668459":[()=>o.e(37880).then(o.bind(o,673440)),"@site/docs/DevOps/Salt/2020-06-21--salt-events-and-thirdparty-apps/index.md",673440],"3fa9c46f":[()=>o.e(51430).then(o.bind(o,884635)),"@site/docs/Automation_and_Robotics/Home_Automation/2023-01-23-thread-edge-router/index.md",884635],"3fc0a868":[()=>o.e(20100).then(o.bind(o,989112)),"@site/docs/DevOps/Provisioning/2021-01-27-owncloud-ocis/index.md",989112],"405af3fd":[()=>o.e(48757).then(o.bind(o,724965)),"@site/docs/Automation_and_Robotics/Home_Automation/2018-12-01--openhab2-on-debian/index.mdx",724965],"40e6efc5":[()=>o.e(6776).then(o.bind(o,181542)),"@site/docs/DevOps/Hashicorp/2021-08-25--hashicorp-vault-logging/index.md",181542],"40ed66f4":[()=>o.e(34913).then(o.bind(o,919672)),"@site/docs/IoT-and-Machine-Learning/ML/2023-04-13-fisher-discriminant-analysis/index.md",919672],"41aa559c":[()=>o.e(39540).then(o.bind(o,63293)),"@site/docs/Development/Javascript/2023-06-13-typescript-dom-webpack/index.md",63293],"41b306e7":[()=>o.e(24842).then(o.bind(o,249374)),"@site/docs/Development/Magento/2019-09-16--working-with-sql-dumps/index.mdx",249374],"41cb6fab":[()=>o.e(17884).then(o.bind(o,714683)),"@site/docs/Automation_and_Robotics/Home_Automation/2019-09-27--home-assistant-podman-centos8/index.mdx",714683],"42bea6e5":[()=>o.e(39358).then(o.bind(o,914315)),"@site/docs/DevOps/Provisioning/2021-01-23-nodejs-file-server/index.md",914315],"42c3e530":[()=>o.e(11269).then(o.bind(o,841806)),"@site/docs/Development/Python/2022-10-06-python-minify-text/index.md",841806],"43ef91f5":[()=>o.e(32640).then(o.bind(o,606505)),"@site/docs/Automation_and_Robotics/Home_Automation/2018-11-29--node-red-and-mqtt/index.mdx",606505],"444eb899":[()=>o.e(36048).then(o.bind(o,959600)),"@site/docs/Automation_and_Robotics/MQTT/2019-08-05--mqtt-openhab2/index.mdx",959600],"44966f64":[()=>o.e(66086).then(o.bind(o,132079)),"@site/docs/DevOps/Provisioning/2022-01-27--bind9-configuration/index.md",132079],"44d9930b":[()=>o.e(89191).then(o.t.bind(o,744963,19)),"~blog/default/blog-tags-dev-ops-e2f-list.json",744963],"451db38e":[()=>o.e(92869).then(o.bind(o,192638)),"@site/docs/IoT-and-Machine-Learning/ML/2023-08-04-tensorflow-i-know-flowers-efficientnetv2b0/index.md",192638],"45fe91df":[()=>o.e(21809).then(o.bind(o,257489)),"@site/docs/Development/Python/2017-12-17--python-ssh-logger/index.mdx",257489],"463f0bb6":[()=>o.e(95272).then(o.bind(o,513855)),"@site/blog/2019-06-02-typical_ci_process/index.md?truncated=true",513855],"46509b24":[()=>o.e(12421).then(o.bind(o,429261)),"@site/docs/IoT-and-Machine-Learning/ML/2023-02-26-tensorflow-neural-network-regression-data-preprocessing/index.md",429261],"46a8be5a":[()=>o.e(61056).then(o.t.bind(o,797213,19)),"~docs/default/tag-docs-tags-yolo-826.json",797213],"46dfc4aa":[()=>o.e(32749).then(o.bind(o,495122)),"@site/docs/IoT-and-Machine-Learning/ML/2023-02-21-tensorflow-tensors-2/index.md",495122],"47a517d1":[()=>o.e(71107).then(o.bind(o,907453)),"@site/docs/DevOps/Hashicorp/2020-08-18--consul-mock-datacenter/index.md",907453],"47a70c04":[()=>o.e(87656).then(o.bind(o,317314)),"@site/docs/IoT-and-Machine-Learning/ML/2022-12-19-tf-hub/index.md",317314],"48009aa2":[()=>o.e(50946).then(o.bind(o,31960)),"@site/docs/Automation_and_Robotics/MQTT/2021-09-12--golang-paho-mqtt/index.md",31960],"48485c98":[()=>o.e(5584).then(o.bind(o,895855)),"@site/docs/DevOps/Linux/2022-03-10--nmap-network-scanner/index.md",895855],"48aa9936":[()=>o.e(51254).then(o.bind(o,318012)),"@site/docs/IoT-and-Machine-Learning/AIOps/2023-01-05-dvc-model-version-control/index.md",318012],"49128f6c":[()=>o.e(674).then(o.bind(o,249623)),"@site/docs/DevOps/GitOps/2020-02-01--gitlab-in-podman-on-centos8/index.mdx",249623],"4977a9dd":[()=>o.e(93520).then(o.t.bind(o,309777,19)),"~docs/default/tag-docs-tags-hapi-5fe.json",309777],"4a106c0e":[()=>o.e(22657).then(o.bind(o,63122)),"@site/docs/IoT-and-Machine-Learning/ML/2023-01-28-opencv-coin-counter/index.md",63122],"4a485d99":[()=>o.e(47769).then(o.t.bind(o,973933,19)),"~docs/default/tag-docs-tags-traefik-3ba.json",973933],"4a65081f":[()=>o.e(55922).then(o.bind(o,308594)),"@site/docs/DevOps/Hashicorp/2022-12-07-hashicorp-vault-ca-certificates/index.md",308594],"4aa4810b":[()=>o.e(79181).then(o.bind(o,488554)),"@site/docs/DevOps/Linux/2019-09-22--zsh-on-centos8/index.mdx",488554],"4afa59ce":[()=>o.e(52964).then(o.bind(o,58811)),"@site/docs/DevOps/Kubernetes/2019-03-05--first-openshift3-cluster/index.mdx",58811],"4b137547":[()=>o.e(32301).then(o.bind(o,997714)),"@site/docs/DevOps/Linux/2019-12-03--podman-ftp-server-container/index.md",997714],"4bf2706b":[()=>o.e(20593).then(o.bind(o,154401)),"@site/docs/DevOps/Provisioning/2019-06-15--installing-discourse-on-centos8/index.mdx",154401],"4c89999a":[()=>o.e(37782).then(o.bind(o,533675)),"@site/docs/Automation_and_Robotics/Home_Automation/2019-09-24--motioneye-podman-centos8/index.mdx",533675],"4cf9d733":[()=>o.e(60244).then(o.bind(o,100939)),"@site/docs/DevOps/Provisioning/2020-08-29--static-server-with-hapi-and-docker/index.md",100939],"4d00c0d7":[()=>o.e(69261).then(o.bind(o,269243)),"@site/docs/DevOps/Provisioning/2017-09-06--developing-software-in-china-2/index.mdx",269243],"4d1b3b00":[()=>o.e(58719).then(o.bind(o,480310)),"@site/docs/DevOps/GitOps/2020-08-01--gitlab-install-on-ubuntu-server/index.md",480310],"4d92722b":[()=>o.e(23357).then(o.bind(o,849796)),"@site/docs/Automation_and_Robotics/Home_Automation/2019-12-01--podman-hombridge-to-mqtt/index.mdx",849796],"4def38c1":[()=>o.e(45563).then(o.bind(o,400151)),"@site/docs/DevOps/Linux/2019-01-13--centos-administration/index.mdx",400151],"4df56b61":[()=>o.e(57769).then(o.bind(o,881628)),"@site/docs/DevOps/Provisioning/2022-11-07--cphalcon-docker/index.md",881628],"4e48f71c":[()=>o.e(10424).then(o.t.bind(o,742622,19)),"~docs/default/category-docs-tutorialsidebar-category-go-1b1.json",742622],"5016bfe3":[()=>o.e(78809).then(o.bind(o,472006)),"@site/docs/Development/ReactNative/2022-05-01-react-native-hello-world/index.md",472006],"50af5f81":[()=>o.e(34921).then(o.bind(o,303052)),"@site/docs/IoT-and-Machine-Learning/ML/2023-02-18-keras-introduction-rnn/index.md",303052],"51338e97":[()=>o.e(97289).then(o.bind(o,406645)),"@site/docs/DevOps/Elasticsearch/2018-01-01--securing-elasticsearch-readonlyrest/index.mdx",406645],"514b5792":[()=>o.e(11878).then(o.bind(o,349249)),"@site/docs/DevOps/Provisioning/2021-09-14--postgres-refresher-hasura/index.md",349249],"51c87118":[()=>o.e(55483).then(o.t.bind(o,744857,19)),"~docs/default/tag-docs-tags-torch-b57.json",744857],"51f39fe4":[()=>o.e(41871).then(o.bind(o,266219)),"@site/docs/DevOps/Security/2020-07-28--fail2ban-ubuntu-server/index.md",266219],"5243cb2a":[()=>o.e(52920).then(o.bind(o,366432)),"@site/docs/DevOps/Kubernetes/2019-01-02--managing-containers-in-kubernetes/index.mdx",366432],"528a5c9b":[()=>o.e(3035).then(o.bind(o,189044)),"@site/docs/DevOps/Provisioning/2019-06-16--migrating-from-vbulletin-to-discourse-on-centos8/index.mdx",189044],"52d6a343":[()=>o.e(77270).then(o.bind(o,148702)),"@site/docs/Automation_and_Robotics/MQTT/2022-07-24-mosquitto-broker-cross-compilation/index.md",148702],"54a226d4":[()=>o.e(25675).then(o.bind(o,801400)),"@site/docs/IoT-and-Machine-Learning/ML/2023-08-07-tensorflow-i-know-flowers-mobilenetv2/index.md",801400],"54afdbe4":[()=>o.e(78004).then(o.bind(o,532651)),"@site/docs/Development/Go/2022-11-11-go-nts-client-ci/index.md",532651],"55561f41":[()=>o.e(55500).then(o.t.bind(o,260943,19)),"~docs/default/tag-docs-tags-node-red-7ef.json",260943],"55960ee5":[()=>o.e(74121).then(o.t.bind(o,88070,19)),"~docs/default/tags-list-current-prop-15a.json",88070],"55a8fcc8":[()=>o.e(56311).then(o.bind(o,509248)),"@site/docs/DevOps/NGINX/2023-06-13-nginx-docker-ingress/index.md",509248],"55e3a788":[()=>o.e(82498).then(o.bind(o,43994)),"@site/docs/Automation_and_Robotics/Home_Automation/2024-01-09--home-assistant-rtsptoweb/index.md",43994],"5606d085":[()=>o.e(80569).then(o.bind(o,250065)),"@site/docs/IoT-and-Machine-Learning/ML/2023-08-29--semantic-segmentation-detectron2-model-zoo-faster-rcnn/index.md",250065],56322598:[()=>o.e(28862).then(o.bind(o,838067)),"@site/blog/2017-08-01-mdx-blog-post/index.mdx",838067],"568e2d4f":[()=>o.e(63702).then(o.bind(o,213437)),"@site/docs/DevOps/Hashicorp/2021-08-22--hashicorp-vault-policies/index.md",213437],"5709bcde":[()=>o.e(22827).then(o.bind(o,789652)),"@site/docs/Automation_and_Robotics/Home_Automation/2022-07-11-home-assistant-mqtt-autodiscovery-part-ii/index.md",789652],"57fe13bc":[()=>o.e(64682).then(o.bind(o,871534)),"@site/docs/IoT-and-Machine-Learning/ML/2023-09-21--cvat-automatic-annotation/index.md",871534],"57fed0a4":[()=>o.e(10804).then(o.bind(o,752310)),"@site/docs/DevOps/Tomcat/2020-12-24-tomcat9-cluster-and-load-balancing/index.md",752310],"583e2af5":[()=>o.e(6576).then(o.bind(o,282965)),"@site/docs/DevOps/Linux/2023-10-28--lunarvim/index.md",282965],"585e76b0":[()=>o.e(14226).then(o.bind(o,468108)),"@site/docs/IoT-and-Machine-Learning/ML/2022-12-18-tf-transfer-learning/index.md",468108],"5864e6a6":[()=>o.e(91937).then(o.bind(o,648679)),"@site/docs/DevOps/Kubernetes/2019-01-17--kubernetes-and-microservices/index.mdx",648679],"58b59c10":[()=>o.e(63798).then(o.bind(o,598647)),"@site/docs/Development/Go/2022-10-05-go-reducing-binary-size/index.md",598647],"58bfa4cd":[()=>o.e(81421).then(o.bind(o,691639)),"@site/docs/DevOps/Provisioning/2022-01-23--installing-discourse-docker/index.md",691639],"59221dbe":[()=>o.e(28804).then(o.bind(o,228194)),"@site/docs/Automation_and_Robotics/Home_Automation/2018-11-28--node-red-on-android/index.mdx",228194],"5965bea3":[()=>o.e(26217).then(o.bind(o,428696)),"@site/docs/Development/Javascript/2023-06-12-typescript-pattern/index.md",428696],"5a08510e":[()=>o.e(31178).then(o.bind(o,404036)),"@site/docs/IoT-and-Machine-Learning/ML/2021-11-03--streamlit-opencv-mediapipe/index.md",404036],"5a1fdc02":[()=>o.e(79903).then(o.t.bind(o,532114,19)),"~docs/default/category-docs-tutorialsidebar-category-machine-learning-e04.json",532114],"5a6aab28":[()=>o.e(80786).then(o.bind(o,114449)),"@site/docs/Development/Go/2022-12-27-go-bubbles/index.md",114449],"5a76391c":[()=>o.e(79672).then(o.bind(o,120159)),"@site/docs/DevOps/Hashicorp/2022-12-04-hashicorp-consul-vault-certificates-part1/index.md",120159],"5aa7f277":[()=>o.e(8472).then(o.t.bind(o,264991,19)),"~docs/default/tag-docs-tags-ansible-3e2.json",264991],"5b24ac37":[()=>o.e(11117).then(o.bind(o,711963)),"@site/docs/DevOps/Hashicorp/2022-05-25-hashicorp-nomad-with-gitlab/index.md",711963],"5bfb5d03":[()=>o.e(22132).then(o.bind(o,471704)),"@site/docs/DevOps/Linux/2022-03-08--arch-kde-fritz-vpn/index.md",471704],"5bfc7c41":[()=>o.e(96205).then(o.t.bind(o,923288,19)),"~docs/default/category-docs-tutorialsidebar-category-kubernetes-2fd.json",923288],"5ddf0d5d":[()=>o.e(31127).then(o.bind(o,372087)),"@site/docs/IoT-and-Machine-Learning/ML/2021-11-07--opencv-crash-course-part-ii/index.md",372087],"5e1090f7":[()=>o.e(16348).then(o.bind(o,836745)),"@site/docs/Development/Go/2022-10-04-go-ntp-client/index.md",836745],"5e4b68bb":[()=>o.e(7077).then(o.bind(o,502628)),"@site/docs/Development/Python/2022-10-10-python-filesystem/index.md",502628],"5e95c892":[()=>o.e(29661).then(o.bind(o,34942)),"@theme/DocsRoot",34942],"5e9f5e1a":[()=>Promise.resolve().then(o.bind(o,636809)),"@generated/docusaurus.config",636809],"5ec8f3fc":[()=>o.e(68255).then(o.bind(o,928329)),"@site/docs/Development/Javascript/2022-11-10-webrtc-introduction-video-chat-part2/index.md",928329],"5f1752aa":[()=>o.e(83840).then(o.bind(o,25965)),"@site/docs/DevOps/Hashicorp/2022-10-23-hashicorp-nomad-ports/index.md",25965],"5f6cd305":[()=>o.e(33861).then(o.bind(o,594124)),"@site/docs/Automation_and_Robotics/Home_Automation/2018-11-25--webhooks-with-url-queries/index.mdx",594124],"602111e9":[()=>o.e(81502).then(o.bind(o,150425)),"@site/docs/IoT-and-Machine-Learning/ML/2023-04-14-manifold-learning-for-image-segmentation/index.md",150425],"602cfe27":[()=>o.e(48417).then(o.bind(o,385923)),"@site/docs/IoT-and-Machine-Learning/ML/2023-04-12-tstochastic-neighbor-embedding/index.md",385923],"603a5735":[()=>o.e(13024).then(o.bind(o,241449)),"@site/docs/Development/Python/2022-10-14-python-rest-elastic/index.md",241449],"6091f2e1":[()=>o.e(95775).then(o.t.bind(o,493146,19)),"~docs/default/tag-docs-tags-py-torch-64a.json",493146],"60e0771a":[()=>o.e(92128).then(o.bind(o,237614)),"@site/docs/IoT-and-Machine-Learning/ML/2023-10-01--delib-face-detection/index.md",237614],61238600:[()=>o.e(68768).then(o.bind(o,754129)),"@site/docs/Development/Python/2022-10-08-python-desktop-app/index.md",754129],"616455a9":[()=>o.e(21632).then(o.t.bind(o,486146,19)),"~docs/default/tag-docs-tags-go-fiber-1d9.json",486146],"61946cb1":[()=>o.e(69944).then(o.bind(o,331959)),"@site/docs/DevOps/Provisioning/2022-01-24--getting-to-know-bind9-docker/index.md",331959],"61b85e15":[()=>o.e(24483).then(o.bind(o,754282)),"@site/docs/DevOps/Hashicorp/2022-05-28-hashicorp-nomad-for-elastic-part-2/index.md",754282],"6251edf2":[()=>o.e(69616).then(o.bind(o,842045)),"@site/docs/Development/Javascript/2023-12-19-react-query-typescript/index.md",842045],"6302f00d":[()=>o.e(9319).then(o.bind(o,158901)),"@site/docs/DevOps/GitOps/2021-02-25-gatsby-build-gitlab-pipeline/index.md",158901],"63b01924":[()=>o.e(28207).then(o.bind(o,183529)),"@site/docs/IoT-and-Machine-Learning/ML/2023-03-05-tensorflow-convolutional-neural-network-multiclass-classifications/index.md",183529],"63b220b9":[()=>o.e(15970).then(o.bind(o,260824)),"@site/docs/IoT-and-Machine-Learning/ML/2023-09-15--yolo8-tracking-and-ocr/index.md",260824],"643ba409":[()=>o.e(95867).then(o.bind(o,602275)),"@site/docs/IoT-and-Machine-Learning/ML/2022-12-12-tf-breast-cancer-classification-part5/index.md",602275],"6489fa50":[()=>o.e(82230).then(o.bind(o,162152)),"@site/docs/IoT-and-Machine-Learning/ML/2023-08-30--instance_segmentation_detectron2_model_zoo_mask_rcnn/index.md",162152],"648e5e1d":[()=>o.e(77079).then(o.t.bind(o,289207,19)),"~docs/default/tag-docs-tags-zabbix-86f.json",289207],"64dd0bda":[()=>o.e(12710).then(o.bind(o,843419)),"@site/docs/DevOps/Provisioning/2019-09-16--installing-vanilla-forum/index.md",843419],65680494:[()=>o.e(16037).then(o.t.bind(o,955311,19)),"~docs/default/tag-docs-tags-express-74d.json",955311],"659119ec":[()=>o.e(21997).then(o.bind(o,191637)),"@site/docs/IoT-and-Machine-Learning/AIOps/2023-07-12-scikit-image-model-deployment-part2/index.md",191637],"65ad011d":[()=>o.e(28850).then(o.bind(o,992874)),"@site/docs/IoT-and-Machine-Learning/AIOps/2023-01-03-tf-tensorboard/index.md",992874],"65d846ee":[()=>o.e(55795).then(o.bind(o,113282)),"@site/docs/Development/Javascript/2021-09-10--notifications-alerts-as-toast/index.md",113282],"661132b8":[()=>o.e(97092).then(o.t.bind(o,319572,19)),"~blog/default/blog-tags-development-9e5.json",319572],"66ace468":[()=>o.e(99997).then(o.t.bind(o,87055,19)),"~docs/default/tag-docs-tags-neo-4-j-638.json",87055],"66cb4728":[()=>o.e(42604).then(o.bind(o,971385)),"@site/docs/DevOps/Provisioning/2023-03-09--os-ticket-docker-2023/index.md",971385],"66dba8d3":[()=>o.e(86078).then(o.bind(o,323164)),"@site/docs/DevOps/Kubernetes/2019-01-21--kubernetes-nginx-https-service/index.mdx",323164],"6727c735":[()=>o.e(77769).then(o.bind(o,675709)),"@site/docs/Development/Magento/2021-07-28--magento2-google-analytics-universal/index.md",675709],"676e3c06":[()=>o.e(4147).then(o.t.bind(o,741002,19)),"~docs/default/category-docs-tutorialsidebar-category-gitops-f04.json",741002],"679fafee":[()=>o.e(48350).then(o.bind(o,951690)),"@site/docs/DevOps/Ansible/2021-05-02-ansible-tower-examples/index.md",951690],"67e10659":[()=>o.e(55209).then(o.bind(o,636150)),"@site/docs/DevOps/Ansible/2021-04-29-ansible-tower-setup/index.md",636150],"6875c492":[()=>Promise.all([o.e(40532),o.e(66567),o.e(40864),o.e(48610)]).then(o.bind(o,474883)),"@theme/BlogTagsPostsPage",474883],"6915bf67":[()=>o.e(68455).then(o.t.bind(o,705091,19)),"~docs/default/tag-docs-tags-nts-da2.json",705091],"697d08e9":[()=>o.e(19190).then(o.bind(o,522079)),"@site/docs/DevOps/Salt/2020-06-14--install-salt-on-ubuntu-20-04/index.mdx",522079],"69f4eb98":[()=>o.e(28629).then(o.t.bind(o,872113,19)),"~docs/default/category-docs-tutorialsidebar-category-react-native-90a.json",872113],"6aba53af":[()=>o.e(68718).then(o.t.bind(o,692057,19)),"~docs/default/tag-docs-tags-svn-3f9.json",692057],"6af14956":[()=>o.e(58221).then(o.t.bind(o,916567,19)),"~docs/default/tag-docs-tags-linux-f75.json",916567],"6bf8e2d8":[()=>o.e(35937).then(o.bind(o,681009)),"@site/docs/IoT-and-Machine-Learning/ML/2023-02-18-keras-introduction-vgg16/index.md",681009],"6c50920a":[()=>o.e(79803).then(o.bind(o,940442)),"@site/docs/IoT-and-Machine-Learning/ML/2021-11-11--tensorflow-crash-course-part-iv/index.md",940442],"6cad628f":[()=>o.e(24992).then(o.bind(o,153172)),"@site/docs/DevOps/Elasticsearch/2021-03-23-logstash-working-with-unstructured-data/index.md",153172],"6cecf99e":[()=>o.e(95604).then(o.bind(o,742462)),"@site/docs/Automation_and_Robotics/Home_Automation/2018-11-30--home-assistant-on-debian/index.mdx",742462],"6d0ff233":[()=>o.e(14331).then(o.bind(o,100741)),"@site/docs/Automation_and_Robotics/Robotics_Simulation/2023-11-19--ros2-gazebo-installation/index.md",100741],"6d57b215":[()=>o.e(46999).then(o.bind(o,985251)),"@site/docs/IoT-and-Machine-Learning/ML/2023-06-27-sql-in-data-science-basics/index.md",985251],"6d81b8c1":[()=>o.e(52784).then(o.bind(o,575744)),"@site/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/index.md",575744],"6e1edcbc":[()=>o.e(86788).then(o.bind(o,898930)),"@site/docs/Development/Javascript/2022-10-30-webrtc-introduction-video-chat-part1/index.md",898930],"6e83399a":[()=>o.e(35412).then(o.bind(o,933397)),"@site/docs/DevOps/Security/2020-07-27--firewalld-deployment-ubuntu/index.md",933397],"6f0e4994":[()=>o.e(69724).then(o.t.bind(o,87383,19)),"~docs/default/tag-docs-tags-io-t-232.json",87383],"6f3dae10":[()=>o.e(78766).then(o.bind(o,859693)),"@site/docs/IoT-and-Machine-Learning/ML/2023-07-02-sql-in-data-science-ml/index.md",859693],"6f54bf7c":[()=>o.e(75671).then(o.bind(o,56050)),"@site/docs/IoT-and-Machine-Learning/ML/2023-02-23-tensorflow-neural-network-regression/index.md",56050],"7097cc0d":[()=>o.e(54869).then(o.bind(o,510037)),"@site/docs/Development/Python/2022-10-13-python-rest-api/index.md",510037],"709ddadc":[()=>o.e(47971).then(o.t.bind(o,809878,19)),"~docs/default/tag-docs-tags-sci-kit-71f.json",809878],"709fbfbe":[()=>o.e(74885).then(o.bind(o,77765)),"@site/docs/DevOps/Elasticsearch/2017-12-26--elasticsearch-kibana/index.mdx",77765],"715bee62":[()=>o.e(53264).then(o.bind(o,555745)),"@site/docs/DevOps/Hashicorp/2023-10-22-hashicorp-terraform-docker-2023/index.md",555745],"716880c8":[()=>o.e(2565).then(o.bind(o,619365)),"@site/docs/DevOps/Windows/2017-12-19--umlaute-on-us-keyboard/index.mdx",619365],"71a7667a":[()=>o.e(31528).then(o.bind(o,179647)),"@site/docs/IoT-and-Machine-Learning/ML/2022-12-21-tf-downsampling/index.md",179647],"71c0490d":[()=>o.e(47118).then(o.bind(o,528403)),"@site/docs/Development/Go/2022-06-15-wails-go-react/index.md",528403],"71f35c7b":[()=>o.e(37664).then(o.t.bind(o,777876,19)),"~docs/default/category-docs-tutorialsidebar-category-development-8c5.json",777876],"72d585da":[()=>o.e(48397).then(o.bind(o,552669)),"@site/docs/IoT-and-Machine-Learning/AIOps/2023-01-23-python-ray-remote-functions/index.md",552669],"730f0a4c":[()=>o.e(37224).then(o.bind(o,568252)),"@site/docs/DevOps/Kubernetes/2022-11-19--k3s-air-gapped-kubernetes/index.md",568252],"7367f417":[()=>o.e(38046).then(o.bind(o,724255)),"@site/docs/Automation_and_Robotics/Home_Automation/2018-11-26--node-red-and-live-video/index.mdx",724255],"737d225d":[()=>o.e(1735).then(o.bind(o,876614)),"@site/docs/DevOps/Hashicorp/2022-05-19-hashicorp-dojo-nomad-access-control/index.md",876614],"742321c3":[()=>o.e(95031).then(o.bind(o,113579)),"@site/docs/Automation_and_Robotics/Home_Automation/2022-07-16-openhab-mqtt-homie/index.md",113579],"743935d4":[()=>o.e(67858).then(o.bind(o,851239)),"@site/docs/Development/Javascript/2023-12-21-react-query-tauri-elasticsearch/index.md",851239],"746f9772":[()=>o.e(87161).then(o.bind(o,183422)),"@site/docs/DevOps/Hashicorp/2021-08-20--hashicorp-vault-setup/index.md",183422],"74ae4105":[()=>o.e(22958).then(o.bind(o,540257)),"@site/docs/Automation_and_Robotics/MQTT/2022-07-22-go-hello-world/index.md",540257],"74e2b0bd":[()=>o.e(8435).then(o.bind(o,167148)),"@site/blog/2019-05-30-devops-introduction/index.md?truncated=true",167148],75026316:[()=>o.e(62055).then(o.t.bind(o,238414,19)),"~docs/default/tag-docs-tags-keras-ac2.json",238414],"751dde26":[()=>o.e(38370).then(o.t.bind(o,458116,19)),"~docs/default/tag-docs-tags-matplotlib-afb.json",458116],"75319fae":[()=>o.e(165).then(o.t.bind(o,326023,19)),"~docs/default/tag-docs-tags-ufw-299.json",326023],"755433b5":[()=>o.e(84644).then(o.bind(o,704927)),"@site/docs/Development/Python/2023-05-17-fandango-ratings-controversy/index.md",704927],"758fb027":[()=>o.e(83987).then(o.bind(o,177299)),"@site/docs/Development/Python/2023-04-24-python-pandas-cheat-sheet/index.md",177299],"75d1ed9d":[()=>o.e(6881).then(o.bind(o,381706)),"@site/docs/IoT-and-Machine-Learning/ML/2021-11-05--license-plates-yolov4-opencv-tesseract/index.md",381706],"763eb49e":[()=>o.e(68749).then(o.bind(o,374835)),"@site/blog/2019-06-02-typical_ci_process/index.md",374835],77346808:[()=>o.e(41035).then(o.bind(o,490902)),"@site/docs/IoT-and-Machine-Learning/ML/2022-02-18--yolo-app-ocr/index.md",490902],77510121:[()=>o.e(62163).then(o.bind(o,550003)),"@site/docs/IoT-and-Machine-Learning/ML/2022-12-28-tf-gan-image-generator/index.md",550003],"7784cde5":[()=>o.e(86847).then(o.t.bind(o,671009,19)),"~docs/default/tag-docs-tags-c-5ba.json",671009],78198861:[()=>o.e(55131).then(o.bind(o,522185)),"@site/docs/DevOps/Elasticsearch/2022-02-02--elasticsearch-v8-upgrade/index.md",522185],"7932b885":[()=>o.e(60052).then(o.bind(o,728926)),"@site/docs/DevOps/Ansible/2020-11-25--ansible-in-gitlab-ci/index.md",728926],79399661:[()=>o.e(86347).then(o.bind(o,4015)),"@site/docs/Automation_and_Robotics/Home_Automation/2024-01-10--go2rtc/index.md",4015],"79665d43":[()=>o.e(92111).then(o.t.bind(o,866920,19)),"~docs/default/tag-docs-tags-kubernetes-664.json",866920],"799fe687":[()=>o.e(23157).then(o.bind(o,265663)),"@site/docs/DevOps/NGINX/2017-10-01--using-nginx-as-proxy-for-your-nodejs-apps/index.mdx",265663],"79d1e5b7":[()=>o.e(73582).then(o.t.bind(o,229014,19)),"~docs/default/tag-docs-tags-postgre-sql-3b6.json",229014],"79e82b42":[()=>o.e(20246).then(o.bind(o,841292)),"@site/docs/DevOps/Zabbix/2020-07-14--nagios-ubuntu-install/index.md",841292],"79f81411":[()=>o.e(32626).then(o.t.bind(o,726398,19)),"~docs/default/category-docs-tutorialsidebar-category-robotics-simulation-010.json",726398],"7a2a807d":[()=>o.e(6076).then(o.bind(o,193613)),"@site/docs/DevOps/Provisioning/2020-09-02--docker-compose-networking/index.md",193613],"7aec7013":[()=>o.e(82079).then(o.t.bind(o,654875,19)),"~docs/default/tag-docs-tags-open-cv-076.json",654875],"7b156495":[()=>o.e(83109).then(o.bind(o,251604)),"@site/docs/Automation_and_Robotics/Home_Automation/2019-02-09--zoneminder-in-docker/index.mdx",251604],"7b851434":[()=>o.e(6638).then(o.t.bind(o,1893,19)),"~docs/default/tag-docs-tags-certbot-601.json",1893],"7b9e17f1":[()=>o.e(25464).then(o.bind(o,112419)),"@site/docs/DevOps/Windows/2017-07-07--windows10-control/index.mdx",112419],"7bd63322":[()=>o.e(4483).then(o.bind(o,4625)),"@site/docs/DevOps/Hashicorp/2022-11-11-hashicorp-nomad-for-borg-backups/index.md",4625],"7bd9da5d":[()=>o.e(17479).then(o.bind(o,557418)),"@site/docs/IoT-and-Machine-Learning/ML/2022-02-19--yolo-app-flask/index.md",557418],"7c19738a":[()=>o.e(31909).then(o.bind(o,455173)),"@site/docs/Development/Python/2023-08-14-python-scikit-image-opencv/index.md",455173],"7c461ab6":[()=>o.e(12970).then(o.t.bind(o,773670,19)),"~docs/default/tag-docs-tags-own-cloud-ecb.json",773670],"7c59cc9c":[()=>o.e(33151).then(o.bind(o,703676)),"@site/docs/DevOps/Elasticsearch/2022-02-06--elasticsearch-v8-data-ingestion-apache/index.md",703676],"7d045ec8":[()=>o.e(94061).then(o.bind(o,856747)),"@site/docs/Automation_and_Robotics/MQTT/2019-08-03--mqtt-debugging/index.mdx",856747],"7d4a493f":[()=>o.e(18937).then(o.bind(o,287026)),"@site/docs/IoT-and-Machine-Learning/ML/2021-12-02--opencv-with-videos/index.md",287026],"7e808bb6":[()=>o.e(48515).then(o.bind(o,202088)),"@site/docs/Automation_and_Robotics/Robotics_Simulation/2023-11-26--ros2-gazebo-simulation/index.md",202088],"7e81c719":[()=>o.e(15193).then(o.bind(o,980750)),"@site/docs/IoT-and-Machine-Learning/ML/2023-08-28--semantic-segmentation-detectron2-model-zoo/index.md",980750],"7e9bff24":[()=>o.e(95806).then(o.bind(o,324707)),"@site/docs/IoT-and-Machine-Learning/AIOps/2023-03-27-deploying-prediction-apis-with-flask/index.md",324707],"7efc1279":[()=>o.e(34821).then(o.t.bind(o,319538,19)),"~docs/default/category-docs-tutorialsidebar-category-devops-6b2.json",319538],"7f30d4bb":[()=>o.e(4783).then(o.bind(o,455215)),"@site/docs/DevOps/Hashicorp/2020-08-18--consul-service-mesh/index.md",455215],"7f38315f":[()=>o.e(62365).then(o.t.bind(o,665629,19)),"~docs/default/tag-docs-tags-graph-ql-267.json",665629],"7fa39b83":[()=>o.e(54248).then(o.bind(o,668426)),"@site/docs/IoT-and-Machine-Learning/ML/2023-06-30-sql-in-data-science-advanced/index.md",668426],"7fd3a56a":[()=>o.e(96704).then(o.t.bind(o,572552,19)),"~docs/default/tag-docs-tags-mqtt-755.json",572552],"806cac79":[()=>o.e(79315).then(o.bind(o,48679)),"@site/docs/DevOps/Hashicorp/2022-05-29-hashicorp-nomad-with-nginx-loadbalancer/index.md",48679],"8074eba7":[()=>o.e(66888).then(o.bind(o,682981)),"@site/docs/Automation_and_Robotics/Home_Automation/2018-11-21--nodered-dashboard-getting-started/index.mdx",682981],"814f3328":[()=>o.e(52535).then(o.t.bind(o,245641,19)),"~blog/default/blog-post-list-prop-default.json",245641],"81dc375d":[()=>o.e(75886).then(o.bind(o,83754)),"@site/docs/IoT-and-Machine-Learning/ML/2023-01-30-predicting-wine-quality/index.md",83754],"820ce5d2":[()=>o.e(13456).then(o.bind(o,24152)),"@site/docs/Development/Python/2023-05-16-seaborn-cc-churn-vis/index.md",24152],"828132bd":[()=>o.e(10894).then(o.bind(o,21197)),"@site/docs/IoT-and-Machine-Learning/ML/2021-11-12--tensorflow-crash-course-part-v/index.md",21197],"83b6085b":[()=>o.e(85914).then(o.bind(o,480024)),"@site/docs/DevOps/Provisioning/2018-01-26--node-express-docker-container/index.mdx",480024],"8493ba59":[()=>o.e(80448).then(o.bind(o,150754)),"@site/docs/DevOps/Provisioning/2019-06-20--using-github-auth-in-discourse/index.mdx",150754],"84b5f09a":[()=>o.e(19870).then(o.bind(o,108085)),"@site/docs/Development/ReactNative/2022-05-06-react-native-reducer/index.md",108085],"84c0a044":[()=>o.e(85317).then(o.bind(o,627078)),"@site/docs/IoT-and-Machine-Learning/ML/2023-09-23--yolo8-listen/index.md",627078],"84e378d1":[()=>o.e(24190).then(o.bind(o,453027)),"@site/docs/DevOps/Provisioning/2018-12-27--red-hat-containerized-application-development-rhcs/index.mdx",453027],"857f1d40":[()=>o.e(21153).then(o.bind(o,756233)),"@site/docs/DevOps/NGINX/2019-11-08--nginx-rtmp-website/index.md",756233],"8685d21d":[()=>o.e(8570).then(o.bind(o,867324)),"@site/docs/IoT-and-Machine-Learning/ML/2023-04-19-tensorflow-natural-language-processing/index.md",867324],"86aeb65b":[()=>o.e(85806).then(o.bind(o,248928)),"@site/docs/DevOps/Provisioning/2020-06-07--setting-up-wikijs-in-docker/index.mdx",248928],"8739bf63":[()=>o.e(47212).then(o.bind(o,950513)),"@site/docs/DevOps/Security/2020-07-27--firewalld-deployment-centos7/index.md",950513],"87735dde":[()=>o.e(78486).then(o.bind(o,3830)),"@site/docs/Development/Graphs/2020-05-02--neo4j-movie-graph/index.mdx",3830],87942859:[()=>o.e(72886).then(o.bind(o,105125)),"@site/docs/Automation_and_Robotics/MQTT/2019-08-10--mqtt-athom-homey/index.mdx",105125],"885458c1":[()=>o.e(62160).then(o.bind(o,856469)),"@site/docs/DevOps/Zabbix/2021-01-14--zabbix-apache2-monitor/index.md",856469],"88e5a067":[()=>o.e(61102).then(o.bind(o,210538)),"@site/docs/DevOps/Elasticsearch/2021-04-01-elastic-filebeats-for-nginx-logs/index.md",210538],89238625:[()=>o.e(50862).then(o.bind(o,154365)),"@site/docs/Development/Javascript/2017-09-03--react-under-the-hood/index.mdx",154365],"8937d59d":[()=>o.e(28201).then(o.bind(o,835301)),"@site/docs/DevOps/Hashicorp/2022-10-21-hashicorp-nomad-for-osticket-part-i/index.md",835301],"8948970b":[()=>o.e(75176).then(o.bind(o,880477)),"@site/docs/Development/Javascript/2021-02-14-next-js-2021/index.md",880477],"89c62600":[()=>o.e(29854).then(o.bind(o,305570)),"@site/docs/DevOps/Provisioning/2019-06-21--using-facebook-auth-in-discourse/index.mdx",305570],"89dd2359":[()=>o.e(45742).then(o.bind(o,697711)),"@site/docs/Automation_and_Robotics/Home_Automation/2018-11-05--nodered-cryptocurrency-dashboard/index.mdx",697711],"8a08e525":[()=>o.e(22950).then(o.bind(o,576817)),"@site/docs/DevOps/Hashicorp/2022-05-22-hashicorp-dojo-nomad-consul-part-2/index.md",576817],"8a0d888e":[()=>o.e(34087).then(o.bind(o,938311)),"@site/docs/DevOps/Ansible/2020-11-24--ansible-vault-user-login/index.md",938311],"8a1ab6e3":[()=>o.e(14617).then(o.bind(o,75963)),"@site/docs/IoT-and-Machine-Learning/ML/2021-12-09--opencv-camshift-tracking/index.md",75963],"8a67e237":[()=>o.e(17320).then(o.bind(o,652769)),"@site/docs/DevOps/NGINX/2020-07-29--securing-apache-and-nginx/index.md",652769],"8ab18599":[()=>o.e(65578).then(o.bind(o,612344)),"@site/docs/DevOps/Hashicorp/2021-08-08--hashicorp-nomad-access-control-lists/index.md",612344],"8ac7e090":[()=>o.e(85609).then(o.bind(o,479743)),"@site/docs/Development/Python/2017-12-13--getting-started-with-python-part-ii/index.mdx",479743],"8b0e4ff9":[()=>o.e(41492).then(o.bind(o,309730)),"@site/docs/DevOps/Kubernetes/2019-01-21--kubernetes-bare-metal-ingress/index.mdx",309730],"8b3fff71":[()=>o.e(51757).then(o.bind(o,906274)),"@site/docs/DevOps/NGINX/2019-11-07--nginx-rtmp-streaming-container/index.mdx",906274],"8c02a337":[()=>o.e(78122).then(o.bind(o,883916)),"@site/docs/DevOps/Windows/2019-06-12--windows-server-2019-active-directory/index.mdx",883916],"8c2cb96d":[()=>o.e(45226).then(o.bind(o,753967)),"@site/docs/DevOps/Linux/2021-10-24--arch-linux-install-docker/index.md",753967],"8cb64b56":[()=>o.e(72759).then(o.bind(o,22746)),"@site/docs/DevOps/NGINX/2020-08-30--nginx-docker-multihost/index.md",22746],"8cce1bed":[()=>o.e(45682).then(o.bind(o,902339)),"@site/docs/IoT-and-Machine-Learning/AIOps/2023-02-05-apache-airflow-scheduler/index.md",902339],"8cdf05d8":[()=>o.e(27197).then(o.t.bind(o,482939,19)),"~docs/default/tag-docs-tags-ros-7db.json",482939],"8cf072f3":[()=>o.e(43003).then(o.bind(o,906879)),"@site/docs/IoT-and-Machine-Learning/ML/2021-11-14--tensorflow-model-for-tfjs/index.md",906879],"8d26db46":[()=>o.e(85071).then(o.t.bind(o,188001,19)),"~docs/default/tag-docs-tags-bootstrap-58a.json",188001],"8d6d3888":[()=>o.e(20946).then(o.bind(o,258509)),"@site/docs/IoT-and-Machine-Learning/ML/2021-11-02--spacy_ner_predictions/index.md",258509],"8d9a2411":[()=>o.e(74498).then(o.bind(o,961382)),"@site/docs/Development/Javascript/2021-05-07-electron-cross-platform-apps/index.md",961382],"8d9bae1c":[()=>o.e(39114).then(o.bind(o,679944)),"@site/docs/DevOps/Security/2022-09-27--wireshark-with-tls-encryption/index.md",679944],"8dab77a1":[()=>o.e(46714).then(o.bind(o,489045)),"@site/docs/DevOps/Hashicorp/2021-08-13--hashicorp-consul-access-control-lists/index.md",489045],"8dbbc23b":[()=>o.e(27488).then(o.bind(o,618262)),"@site/docs/Development/Misc/2017-06-17--unreal-engine-coding-standards/index.mdx",618262],"8e0859e7":[()=>o.e(3296).then(o.bind(o,608141)),"@site/docs/IoT-and-Machine-Learning/AIOps/2024-02-24-mlflow-hyperparameter-tuning/index.md",608141],"8e3ed55c":[()=>o.e(74738).then(o.bind(o,256202)),"@site/docs/DevOps/Elasticsearch/2021-03-28-elasticsearch7-timeseries/index.md",256202],"8e5fa59a":[()=>o.e(45186).then(o.bind(o,272130)),"@site/docs/Development/Javascript/2021-05-09-electron13-and-react/index.md",272130],"8e7551a5":[()=>o.e(27013).then(o.bind(o,726400)),"@site/docs/IoT-and-Machine-Learning/ML/2023-04-13-multi-dimensional-scaling/index.md",726400],"8e9476f0":[()=>o.e(21318).then(o.bind(o,709081)),"@site/docs/Development/Javascript/2017-12-07--react-router-4/index.mdx",709081],"8f1dce51":[()=>o.e(14996).then(o.bind(o,418830)),"@site/docs/DevOps/Elasticsearch/2022-10-12--opensearch-rest-api/index.md",418830],"8f589cfd":[()=>o.e(86434).then(o.bind(o,897905)),"@site/docs/Development/Go/2021-09-11--golang-refresher-network/index.md",897905],"8f687ee9":[()=>o.e(19716).then(o.bind(o,776503)),"@site/docs/DevOps/Elasticsearch/2021-03-31-elastic-filebeats-for-apache-logs/index.md",776503],"8fc8c93a":[()=>o.e(53892).then(o.bind(o,135199)),"@site/docs/DevOps/Provisioning/2017-09-05--developing-software-in-china/index.mdx",135199],"8fd1efbb":[()=>o.e(2911).then(o.t.bind(o,639677,19)),"~docs/default/category-docs-tutorialsidebar-category-mqtt-44d.json",639677],"8fe7940c":[()=>o.e(40845).then(o.bind(o,323842)),"@site/docs/Development/Go/2022-12-26-go-webassembly/index.md",323842],"900489d8":[()=>o.e(55046).then(o.bind(o,739641)),"@site/docs/Development/Javascript/2022-03-01--json-apis-training/index.md",739641],"90bd589b":[()=>o.e(11933).then(o.bind(o,523398)),"@site/docs/IoT-and-Machine-Learning/ML/2021-12-04--opencv-image-objects/index.md",523398],"90d43c45":[()=>o.e(10392).then(o.bind(o,62975)),"@site/docs/DevOps/Zabbix/2022-01-14--zabbix-apache2-monitor/index.md",62975],"90fa3c2c":[()=>o.e(7).then(o.bind(o,485797)),"@site/docs/DevOps/Linux/2021-04-11-installing-free-red-hat-enterprise-linux/index.md",485797],"9128d6b3":[()=>o.e(75588).then(o.bind(o,688859)),"@site/docs/DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part3/index.md",688859],"915eff18":[()=>o.e(50171).then(o.bind(o,389595)),"@site/docs/DevOps/Hashicorp/2021-08-11--hashicorp-consul-backups/index.md",389595],"91e40257":[()=>o.e(37077).then(o.bind(o,102062)),"@site/docs/DevOps/Provisioning/2021-10-12--traefik-configuration/index.md",102062],"923be60f":[()=>o.e(70898).then(o.t.bind(o,662395,19)),"~docs/default/tag-docs-tags-ala-sql-631.json",662395],"928fd47f":[()=>o.e(18561).then(o.bind(o,216859)),"@site/docs/DevOps/Linux/2019-09-25--podman-cheat-sheet/index.mdx",216859],"930e4c6a":[()=>o.e(89015).then(o.bind(o,69232)),"@site/docs/IoT-and-Machine-Learning/ML/2023-01-05-yolov7/index.md",69232],"935f2afb":[()=>o.e(80053).then(o.t.bind(o,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"93a807f6":[()=>o.e(95558).then(o.bind(o,914145)),"@site/docs/IoT-and-Machine-Learning/ML/2021-12-10--opencv-optical-flow-tracking/index.md",914145],"93cd8abf":[()=>o.e(3428).then(o.t.bind(o,354566,19)),"~docs/default/tag-docs-tags-vault-533.json",354566],"93d882f0":[()=>o.e(79493).then(o.bind(o,873353)),"@site/docs/Development/Javascript/2023-12-16-reactjs-hooks-typescript/index.md",873353],"93eef4cb":[()=>o.e(7098).then(o.bind(o,711978)),"@site/docs/DevOps/Security/2020-07-26--firewalld-configuration/index.md",711978],"946280d0":[()=>o.e(59504).then(o.t.bind(o,122383,19)),"~docs/default/category-docs-tutorialsidebar-category-zabbix-c22.json",122383],"946afdb7":[()=>o.e(37498).then(o.bind(o,495758)),"@site/docs/IoT-and-Machine-Learning/ML/2021-11-10--tensorflow-crash-course-part-iii/index.md",495758],"94739da0":[()=>o.e(34045).then(o.bind(o,288305)),"@site/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-4-salt-mine/index.md",288305],"94d7800e":[()=>o.e(89443).then(o.bind(o,289462)),"@site/blog/2019-06-01-continuous_integration_deployment/index.md?truncated=true",289462],"94e1b08c":[()=>o.e(83465).then(o.bind(o,904323)),"@site/docs/Development/Javascript/2023-12-31-js-typescript-rest/index.md",904323],"950e19c6":[()=>o.e(23129).then(o.bind(o,554768)),"@site/docs/Development/Go/2021-06-03--mqtt-with-golang/index.md",554768],"9562e636":[()=>o.e(37997).then(o.bind(o,538768)),"@site/docs/DevOps/Linux/2018-10-27--red-hat-certified-engineer-rhce/index.mdx",538768],"956ffc60":[()=>o.e(12760).then(o.bind(o,892467)),"@site/docs/Automation_and_Robotics/Home_Automation/2018-11-24--node-red-webhooks/index.mdx",892467],"9592f0b1":[()=>o.e(55343).then(o.bind(o,511338)),"@site/docs/IoT-and-Machine-Learning/ML/2023-09-05--semantic-segmentation-in-opencv/index.md",511338],"95bf6d18":[()=>o.e(45483).then(o.bind(o,457888)),"@site/docs/DevOps/Linux/2022-03-09--fing-cli-network-scanner/index.md",457888],"95ca3464":[()=>o.e(10744).then(o.bind(o,444077)),"@site/docs/DevOps/Salt/2020-06-20--salt-reactor-events/index.md",444077],96182989:[()=>o.e(18650).then(o.bind(o,895047)),"@site/docs/DevOps/Linux/2021-10-23--arch-linux-install-packages/index.md",895047],"968552a6":[()=>o.e(54262).then(o.bind(o,559675)),"@site/docs/IoT-and-Machine-Learning/ML/2023-09-01--yolo-i-know-flowers/index.md",559675],"969ab12e":[()=>o.e(67399).then(o.bind(o,337959)),"@site/docs/Automation_and_Robotics/Home_Automation/2022-10-18-camera-ui-docker/index.md",337959],"972daa59":[()=>o.e(99327).then(o.bind(o,327794)),"@site/docs/IoT-and-Machine-Learning/ML/2023-03-26-tensorflow-unsupervised-learning-generative-adversial-networks/index.md",327794],"97300c2c":[()=>o.e(59635).then(o.bind(o,741767)),"@site/docs/DevOps/Linux/2020-01-07--centos8-firewalld/index.mdx",741767],"975ce238":[()=>o.e(29681).then(o.t.bind(o,389845,19)),"~docs/default/category-docs-tutorialsidebar-category-machine-learning-ai-and-computer-vision-2a7.json",389845],"97750e54":[()=>o.e(91279).then(o.bind(o,832331)),"@site/docs/Automation_and_Robotics/Home_Automation/2018-11-12--nodered-sqlite/index.mdx",832331],"9799c029":[()=>o.e(72837).then(o.bind(o,227084)),"@site/docs/DevOps/Linux/2022-09-28--nts-client-setup/index.md",227084],98018126:[()=>o.e(44795).then(o.t.bind(o,989441,19)),"~docs/default/tag-docs-tags-slack-ed7.json",989441],"987f2422":[()=>o.e(73385).then(o.bind(o,173685)),"@site/docs/Automation_and_Robotics/MQTT/2022-06-23-instar-mqtt-python-part-I/index.mdx",173685],"98b7d063":[()=>o.e(21861).then(o.bind(o,220244)),"@site/docs/DevOps/GitOps/2022-11-10-go-gitlab-ci-pipeline/index.md",220244],"98bffa5a":[()=>o.e(90569).then(o.bind(o,731290)),"@site/docs/DevOps/Hashicorp/2021-09-05--hashicorp-terraform-setup/index.md",731290],"994a0b2d":[()=>o.e(95065).then(o.bind(o,313267)),"@site/docs/Development/Go/2021-09-10--go-websockets/index.md",313267],"99543b66":[()=>o.e(1441).then(o.bind(o,97403)),"@site/docs/Automation_and_Robotics/Home_Automation/2019-02-11--loxone-miniserver/index.mdx",97403],"99d8eb02":[()=>o.e(4079).then(o.bind(o,818608)),"@site/docs/Automation_and_Robotics/Home_Automation/2022-12-22--grafana-for-iot/index.md",818608],"9adaa05d":[()=>o.e(54803).then(o.bind(o,430712)),"@site/docs/IoT-and-Machine-Learning/AIOps/2023-01-22-python-ray-introduction/index.md",430712],"9b11abd3":[()=>o.e(53217).then(o.bind(o,732922)),"@site/docs/DevOps/Hashicorp/2021-09-06--hashicorp-terraform-providers-variables-attributes/index.md",732922],"9bd6697c":[()=>o.e(88529).then(o.bind(o,844084)),"@site/docs/DevOps/Linux/2023-02-03--installing-docker-raspberry-pi/index.md",844084],"9c28f777":[()=>o.e(59460).then(o.bind(o,266830)),"@site/docs/DevOps/Ansible/2020-11-21--ansible-modules-and-roles/index.md",266830],"9c683011":[()=>o.e(39218).then(o.bind(o,220012)),"@site/docs/Development/Python/2023-05-14-visualizing-text-datasets/index.md",220012],"9cf407db":[()=>o.e(65971).then(o.bind(o,643495)),"@site/docs/Development/Javascript/2023-02-13-gatsby-meili-search-starter/index.md",643495],"9d81374a":[()=>o.e(97948).then(o.bind(o,952062)),"@site/docs/Development/Magento/2019-09-14--magento-and-themes/index.mdx",952062],"9db67866":[()=>o.e(27953).then(o.bind(o,368491)),"@site/docs/IoT-and-Machine-Learning/ML/2023-07-21-introduction-to-pytorch-caffe2/index.md",368491],"9dd8a0d2":[()=>Promise.all([o.e(40532),o.e(87054)]).then(o.bind(o,430338)),"@site/src/pages/index.jsx",430338],"9de70091":[()=>o.e(90679).then(o.bind(o,568034)),"@site/docs/Development/Magento/2019-09-20--magento2-ui-components/index.mdx",568034],"9e0151c2":[()=>o.e(59091).then(o.bind(o,694287)),"@site/docs/DevOps/Hashicorp/2021-08-10--hashicorp-consul-key-value-store/index.md",694287],"9e4087bc":[()=>o.e(53608).then(o.bind(o,828151)),"@theme/BlogArchivePage",828151],"9e4cd02b":[()=>o.e(60207).then(o.bind(o,823687)),"@site/docs/DevOps/Salt/2020-06-16--salt-state/index.mdx",823687],"9e6ba01a":[()=>o.e(33571).then(o.t.bind(o,370721,19)),"~docs/default/tag-docs-tags-discourse-c0b.json",370721],"9ef9e111":[()=>o.e(34954).then(o.bind(o,97227)),"@site/docs/Development/Javascript/2017-12-14--gatsby-wiki/index.mdx",97227],"9f29f1e0":[()=>o.e(99818).then(o.bind(o,663374)),"@site/docs/DevOps/Linux/2019-01-11--root-access-ubuntu-server/index.md",663374],"9fc0c783":[()=>o.e(87302).then(o.t.bind(o,717283,19)),"~docs/default/category-docs-tutorialsidebar-category-salt-e7e.json",717283],"9fc274ef":[()=>o.e(36111).then(o.bind(o,813037)),"@site/docs/Development/Javascript/2017-08-07--google-analytics-amp/index.mdx",813037],"9fcfecc4":[()=>o.e(88586).then(o.bind(o,923331)),"@site/docs/DevOps/NGINX/2017-12-24--nginx-node-security/index.mdx",923331],"9ff5d104":[()=>o.e(57221).then(o.t.bind(o,168057,19)),"~docs/default/tag-docs-tags-security-eea.json",168057],"9ffd72ee":[()=>o.e(82457).then(o.t.bind(o,162621,19)),"~docs/default/tag-docs-tags-airflow-9bd.json",162621],a0393e49:[()=>o.e(89511).then(o.bind(o,672062)),"@site/docs/DevOps/Linux/2021-10-09--the-friendly-editor/index.md",672062],a0a9accb:[()=>o.e(17355).then(o.t.bind(o,896895,19)),"~docs/default/tag-docs-tags-open-project-097.json",896895],a11f7564:[()=>o.e(28527).then(o.bind(o,98337)),"@site/docs/Development/Python/2022-10-12-python-regular-expressions/index.md",98337],a1353569:[()=>o.e(71221).then(o.bind(o,901276)),"@site/docs/IoT-and-Machine-Learning/ML/2023-07-27-tensorflow-vision-transformer/index.md",901276],a14a1d33:[()=>o.e(18139).then(o.bind(o,530819)),"@site/docs/DevOps/Ansible/2020-11-26--ansible-dind/index.md",530819],a180f2d1:[()=>o.e(70874).then(o.bind(o,569072)),"@site/docs/DevOps/Hashicorp/2022-11-15-hashicorp-nomad-balanced-nts/index.md",569072],a1fd4635:[()=>o.e(51490).then(o.bind(o,549148)),"@site/docs/Automation_and_Robotics/Home_Automation/2020-12-01--openhab3-in-docker/index.md",549148],a22deced:[()=>o.e(94387).then(o.bind(o,30605)),"@site/docs/Development/Magento/2019-09-19--magento2-console-commands/index.mdx",30605],a2a190b0:[()=>o.e(2828).then(o.bind(o,468884)),"@site/docs/Development/Go/2021-09-11--golang-refresher-fmt-strings/index.md",468884],a2e74530:[()=>o.e(23883).then(o.bind(o,895393)),"@site/docs/DevOps/Linux/2019-06-14--download-and-save-docker-image/index.mdx",895393],a3699ddd:[()=>o.e(89579).then(o.bind(o,992556)),"@site/docs/IoT-and-Machine-Learning/ML/2022-02-15--yolo-app-get-data/index.md",992556],a377bf02:[()=>o.e(38592).then(o.bind(o,568420)),"@site/docs/DevOps/GitOps/2020-08-04--working-with-gitlab/index.md",568420],a3e7f6c1:[()=>o.e(58048).then(o.bind(o,914996)),"@site/docs/DevOps/Linux/2019-09-22--centos8-network-config/index.mdx",914996],a42c62c6:[()=>o.e(98560).then(o.bind(o,436165)),"@site/docs/IoT-and-Machine-Learning/ML/2019-04-01--introduction-to-keras/index.mdx",436165],a4488c21:[()=>o.e(77689).then(o.bind(o,229505)),"@site/docs/Development/Python/2023-05-12-matplotlib-seaborn-titanic-dataset/index.md",229505],a5781f84:[()=>o.e(93131).then(o.bind(o,731772)),"@site/docs/Automation_and_Robotics/MQTT/2019-08-11--mqtt-home-assistant/index.mdx",731772],a5b85432:[()=>o.e(58365).then(o.bind(o,114292)),"@site/docs/IoT-and-Machine-Learning/ML/2023-03-26-tensorflow-unsupervised-learning-autoencoders-super-resolution/index.md",114292],a602cfd8:[()=>o.e(43939).then(o.bind(o,815702)),"@site/docs/IoT-and-Machine-Learning/ML/2022-12-10-tf-breast-cancer-classification-part1/index.md",815702],a6382515:[()=>o.e(48705).then(o.bind(o,441052)),"@site/docs/DevOps/Windows/2019-06-13--windows-server-2019-docker-daemon/index.mdx",441052],a66acb73:[()=>o.e(84080).then(o.bind(o,995266)),"@site/docs/DevOps/Zabbix/2020-07-19--zabbix-company-logo/index.md",995266],a679c16f:[()=>o.e(22439).then(o.bind(o,16536)),"@site/docs/Development/Magento/2019-09-17--magento2-modules/index.mdx",16536],a6aa9e1f:[()=>Promise.all([o.e(40532),o.e(66567),o.e(40864),o.e(93089)]).then(o.bind(o,509928)),"@theme/BlogListPage",509928],a7023ddc:[()=>o.e(11713).then(o.t.bind(o,953457,19)),"~blog/default/blog-tags-tags-4c2.json",953457],a7511ca9:[()=>o.e(2238).then(o.bind(o,74826)),"@site/docs/Development/Magento/2019-09-21--magento2-docker-install/index.md",74826],a75781ec:[()=>o.e(43587).then(o.bind(o,541351)),"@site/docs/Automation_and_Robotics/Home_Automation/2019-02-16--ifttt-ip-camera-alarmserver/index.mdx",541351],a75dcdd0:[()=>o.e(85868).then(o.bind(o,998507)),"@site/docs/IoT-and-Machine-Learning/ML/2023-03-06-tensorflow-transfer-learning-feature-extraction/index.md",998507],a766a857:[()=>o.e(21342).then(o.t.bind(o,276018,19)),"~docs/default/tag-docs-tags-windows-4a4.json",276018],a7b59e44:[()=>o.e(8935).then(o.bind(o,982839)),"@site/docs/Automation_and_Robotics/Home_Automation/2023-04-18--home-assistant-node-red-iobroker-docker/index.md",982839],a7bd4aaa:[()=>o.e(18518).then(o.bind(o,760604)),"@theme/DocVersionRoot",760604],a7eb5e90:[()=>o.e(3462).then(o.bind(o,538048)),"@site/docs/IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part3/index.md",538048],a7ede9e3:[()=>o.e(19889).then(o.bind(o,122003)),"@site/docs/Automation_and_Robotics/MQTT/2022-07-21-rust-hello-world/index.md",122003],a84b2ae1:[()=>o.e(27205).then(o.bind(o,442185)),"@site/blog/2019-05-29-web-development/index.md?truncated=true",442185],a8522d5b:[()=>o.e(70668).then(o.bind(o,908849)),"@site/docs/Development/Javascript/2022-11-29-react-typescript-intro-2023/index.md",908849],a88bd3ce:[()=>o.e(80734).then(o.bind(o,383829)),"@site/docs/IoT-and-Machine-Learning/ML/2022-04-03-pytorch-real-super-resolution/index.md",383829],a8c52cef:[()=>o.e(7629).then(o.bind(o,940508)),"@site/docs/DevOps/Windows/2017-07-06--windows-cmd/index.md",940508],a8ff1784:[()=>o.e(52479).then(o.bind(o,214635)),"@site/docs/IoT-and-Machine-Learning/ML/2021-12-07--opencv-detection-and-tracking/index.md",214635],a94703ab:[()=>Promise.all([o.e(40532),o.e(94368)]).then(o.bind(o,103699)),"@theme/DocRoot",103699],a9801f95:[()=>o.e(65281).then(o.bind(o,500593)),"@site/docs/Development/Python/2022-06-01-python-pyscript/index.md",500593],a9a64996:[()=>o.e(23846).then(o.bind(o,173662)),"@site/docs/Development/Go/2021-09-23--golang-react-starter-part-iii/index.md",173662],aa046c97:[()=>o.e(34328).then(o.bind(o,318292)),"@site/docs/DevOps/Provisioning/2021-10-12--traefik-second-attempt/index.md",318292],aa4a12ec:[()=>o.e(66864).then(o.bind(o,657752)),"@site/docs/IoT-and-Machine-Learning/ML/2023-02-15-as-one-yolo-object-tracking/index.md",657752],aa7f0533:[()=>o.e(25621).then(o.t.bind(o,232933,19)),"~docs/default/tag-docs-tags-open-hab-890.json",232933],aaa3495f:[()=>o.e(29827).then(o.bind(o,909224)),"@site/docs/DevOps/Provisioning/2024-01-18--uptime-kuma-monitoring/index.md",909224],aab16bef:[()=>o.e(38175).then(o.bind(o,719601)),"@site/docs/IoT-and-Machine-Learning/ML/2021-12-05--opencv-face-detection/index.md",719601],ab43517a:[()=>o.e(58459).then(o.bind(o,368504)),"@site/docs/DevOps/Hashicorp/2021-10-10--hashicorp-nomad-in-production/index.md",368504],ac363189:[()=>o.e(36188).then(o.bind(o,359559)),"@site/docs/IoT-and-Machine-Learning/AIOps/2023-01-02-tf-serve-own-models/index.md",359559],adb1ff2b:[()=>o.e(36558).then(o.bind(o,835664)),"@site/docs/DevOps/Provisioning/2022-10-16--os-ticket-docker/index.md",835664],ae7952fb:[()=>o.e(96274).then(o.bind(o,593163)),"@site/docs/DevOps/Tomcat/2020-12-22-tomcat9-ubuntu-20-10-installation/index.md",593163],aeb0a603:[()=>o.e(99637).then(o.bind(o,552309)),"@site/docs/IoT-and-Machine-Learning/ML/2022-12-16-tf-cifar/index.md",552309],aec0bea7:[()=>o.e(63773).then(o.bind(o,754309)),"@site/docs/IoT-and-Machine-Learning/ML/2023-01-08-depth-vision-midas/index.md",754309],af7c1f75:[()=>o.e(78899).then(o.bind(o,50450)),"@site/docs/IoT-and-Machine-Learning/ML/2021-11-08--tensorflow-crash-course-part-i/index.md",50450],b06ebe54:[()=>o.e(82945).then(o.bind(o,875259)),"@site/docs/DevOps/Linux/2022-03-07--ffmpeg-cheat-sheet/index.md",875259],b087f797:[()=>o.e(28907).then(o.t.bind(o,267341,19)),"~docs/default/tag-docs-tags-fail-2-ban-e23.json",267341],b0a1f3ef:[()=>o.e(59485).then(o.bind(o,880985)),"@site/docs/IoT-and-Machine-Learning/ML/2023-03-02-tensorflow-neural-network-multi-classification/2023-02-28-tensorflow-neural-network-classification-model-evaluation/index.md",880985],b0b79613:[()=>o.e(97237).then(o.t.bind(o,523224,19)),"~docs/default/tag-docs-tags-react-aaf.json",523224],b0cc8e17:[()=>o.e(5362).then(o.bind(o,185426)),"@site/docs/DevOps/Elasticsearch/2021-03-27-elasticsearch7-aggregations/index.md",185426],b133ab64:[()=>o.e(28010).then(o.bind(o,665149)),"@site/docs/DevOps/GitOps/2022-03-16--gitlab-docker-compose-on-localhost/index.mdx",665149],b1644447:[()=>o.e(41245).then(o.bind(o,653687)),"@site/docs/DevOps/Tomcat/2020-12-25-tomcat10-docker-cluster/index.md",653687],b2163d4d:[()=>o.e(36443).then(o.bind(o,510682)),"@site/docs/Automation_and_Robotics/Robotics_Simulation/2023-12-16--tellopy-drone-api/index.md",510682],b23e28ad:[()=>o.e(77971).then(o.bind(o,331836)),"@site/docs/IoT-and-Machine-Learning/ML/2023-02-17-keras-introduction-cnn/index.md",331836],b29190e5:[()=>o.e(59043).then(o.bind(o,62144)),"@site/docs/DevOps/NGINX/2022-11-17-nginx-udp-tcp-load-balancing/index.md",62144],b2b675dd:[()=>o.e(90533).then(o.t.bind(o,828017,19)),"~blog/default/blog-c06.json",828017],b2f554cd:[()=>o.e(11477).then(o.t.bind(o,430010,19)),"~blog/default/blog-archive-80c.json",430010],b347ad5d:[()=>o.e(27609).then(o.bind(o,93413)),"@site/docs/IoT-and-Machine-Learning/ML/2023-01-14-yolov7_to_tensorflow/index.md",93413],b35ab52b:[()=>o.e(73009).then(o.bind(o,782851)),"@site/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-3-highstate/index.md",782851],b397d330:[()=>o.e(33546).then(o.t.bind(o,883769,19)),"/run/media/xiaodie/dev/mp-docs/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",883769],b4759a92:[()=>o.e(73245).then(o.t.bind(o,688747,19)),"~docs/default/tag-docs-tags-grafana-a00.json",688747],b5b25536:[()=>o.e(78269).then(o.bind(o,146731)),"@site/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-email-notifications/index.md",146731],b5e26da7:[()=>o.e(8636).then(o.t.bind(o,242539,19)),"~docs/default/category-docs-tutorialsidebar-category-linux-996.json",242539],b60cd072:[()=>o.e(38124).then(o.bind(o,656689)),"@site/docs/IoT-and-Machine-Learning/ML/2023-02-24-tensorflow-neural-network-regression-evaluation/index.md",656689],b6c5e70b:[()=>o.e(70028).then(o.t.bind(o,892125,19)),"~docs/default/category-docs-tutorialsidebar-category-elasticsearch-0ae.json",892125],b702476a:[()=>o.e(31365).then(o.bind(o,499608)),"@site/docs/IoT-and-Machine-Learning/AIOps/2023-06-23-automl-with-autogluon-timeseries-forecast/index.md",499608],b73fcd98:[()=>o.e(91939).then(o.bind(o,779158)),"@site/docs/DevOps/Zabbix/2020-07-20--zabbix-behind-nginx/index.md",779158],b7b2103d:[()=>o.e(77542).then(o.bind(o,984757)),"@site/docs/DevOps/Provisioning/2018-11-10--postgresql-getting-started/index.mdx",984757],b7e08572:[()=>o.e(7380).then(o.bind(o,380360)),"@site/docs/IoT-and-Machine-Learning/ML/2023-02-25-tensorflow-neural-network-regression-experiments/index.md",380360],b80b334a:[()=>o.e(15161).then(o.bind(o,218710)),"@site/docs/DevOps/Zabbix/2021-10-13--zabbix-compose-setup/index.md",218710],b8245228:[()=>o.e(80887).then(o.bind(o,391784)),"@site/docs/DevOps/Elasticsearch/2023-02-10--meili-rusty-elastic-docker/index.md",391784],b8800d60:[()=>o.e(95779).then(o.bind(o,427613)),"@site/docs/Development/Javascript/2019-08-02--building-an-mqtt-interface/index.mdx",427613],b88ef832:[()=>o.e(32670).then(o.t.bind(o,535039,19)),"~docs/default/category-docs-tutorialsidebar-category-magento-42d.json",535039],b91a7ad3:[()=>o.e(25913).then(o.bind(o,450726)),"@site/docs/DevOps/Hashicorp/2022-11-24-hashicorp-consul-connect/index.md",450726],b95209a1:[()=>o.e(43900).then(o.t.bind(o,180803,19)),"~docs/default/tag-docs-tags-nomad-ef7.json",180803],b9f7c776:[()=>o.e(14921).then(o.bind(o,143106)),"@site/docs/DevOps/Hashicorp/2022-05-21-hashicorp-dojo-consul-refresher/index.md",143106],ba0b4bcc:[()=>o.e(98916).then(o.bind(o,299490)),"@site/docs/Development/Javascript/2018-01-07--gatsby-material-ui-starter/index.mdx",299490],ba3acdbb:[()=>o.e(57902).then(o.bind(o,314711)),"@site/docs/Development/Graphs/2020-05-03--neo4j-cheat-sheet/index.mdx",314711],ba6d627d:[()=>o.e(93229).then(o.bind(o,453089)),"@site/docs/IoT-and-Machine-Learning/ML/2019-03-31--introduction-to-tensorflow-2-beta/index.mdx",453089],ba89da54:[()=>o.e(66665).then(o.bind(o,112358)),"@site/docs/Development/Python/2023-05-28-telco-churn-cohort-study/index.md",112358],bada6cbd:[()=>o.e(71987).then(o.t.bind(o,279544,19)),"~docs/default/category-docs-tutorialsidebar-category-server-security-e21.json",279544],bae46b79:[()=>o.e(9299).then(o.t.bind(o,584342,19)),"~blog/default/blog-tags-markdown-102-list.json",584342],bb550564:[()=>o.e(28051).then(o.bind(o,971839)),"@site/docs/DevOps/Linux/2019-01-11--ubuntu-server-app-armour/index.md",971839],bc0e71db:[()=>o.e(63543).then(o.bind(o,852567)),"@site/docs/IoT-and-Machine-Learning/ML/2023-08-03-tensorflow-i-know-flowers-deit/index.md",852567],bc78ac96:[()=>o.e(52757).then(o.t.bind(o,346559,19)),"~docs/default/tag-docs-tags-tomcat-7af.json",346559],bd1d5fd2:[()=>o.e(17784).then(o.t.bind(o,281640,19)),"~docs/default/tag-docs-tags-ray-530.json",281640],bdb2d8cf:[()=>o.e(75334).then(o.t.bind(o,52219,19)),"~docs/default/tag-docs-tags-dcs-c25.json",52219],bdff8c55:[()=>o.e(34376).then(o.bind(o,810792)),"@site/docs/Development/Javascript/2023-06-04-nodejs-typescript-sql/index.md",810792],be44728b:[()=>o.e(32701).then(o.bind(o,212748)),"@site/docs/Development/Go/2021-09-21--golang-react-starter-part-i/index.md",212748],be4f1060:[()=>o.e(15774).then(o.bind(o,234083)),"@site/docs/IoT-and-Machine-Learning/ML/2021-11-15--facebook-prophet-introduction/index.md",234083],be536a27:[()=>o.e(82608).then(o.bind(o,310079)),"@site/docs/DevOps/Ansible/2021-04-30-ansible-tower-slack-notifications/index.md",310079],be83ccff:[()=>o.e(75011).then(o.t.bind(o,690821,19)),"~docs/default/tag-docs-tags-databases-mongo-db-b23.json",690821],bedef060:[()=>o.e(43381).then(o.bind(o,607521)),"@site/docs/IoT-and-Machine-Learning/ML/2023-08-13-tensorflow-i-know-flowers-model-eval/index.md",607521],bee490dd:[()=>o.e(23399).then(o.bind(o,798041)),"@site/docs/DevOps/Linux/2019-01-12--centos-network-configuration/index.mdx",798041],beff4672:[()=>o.e(86380).then(o.bind(o,5427)),"@site/docs/DevOps/Hashicorp/2021-10-11--hashicorp-consul-in-production/index.md",5427],bf5211fb:[()=>o.e(68315).then(o.t.bind(o,241703,19)),"~docs/default/category-docs-tutorialsidebar-category-misc-bbd.json",241703],c06ce9e3:[()=>o.e(4183).then(o.bind(o,496687)),"@site/docs/Automation_and_Robotics/Home_Automation/2019-09-28--node-red-homekit-containerized/index.mdx",496687],c08e5c22:[()=>o.e(77861).then(o.bind(o,264736)),"@site/docs/DevOps/Linux/2019-01-11--ubuntu-network-configuration/index.md",264736],c09905f5:[()=>o.e(71430).then(o.bind(o,507662)),"@site/docs/IoT-and-Machine-Learning/ML/2023-08-09-tensorflow-i-know-flowers-mobilenetv3small/index.md",507662],c0a0d864:[()=>o.e(6583).then(o.t.bind(o,525705,19)),"~docs/default/tag-docs-tags-sql-a7a.json",525705],c10bb01f:[()=>o.e(48265).then(o.bind(o,874909)),"@site/docs/Automation_and_Robotics/MQTT/2019-08-08--mqtt-homematic/index.mdx",874909],c115821b:[()=>o.e(34754).then(o.t.bind(o,277239,19)),"~docs/default/tag-docs-tags-open-shift-1c5.json",277239],c1763002:[()=>o.e(88304).then(o.t.bind(o,42778,19)),"~docs/default/tag-docs-tags-github-9bd.json",42778],c192e32c:[()=>o.e(79544).then(o.bind(o,533791)),"@site/docs/IoT-and-Machine-Learning/ML/2023-03-11-tensorflow-transfer-learning-fine-tuning/index.md",533791],c1b99e60:[()=>o.e(5213).then(o.bind(o,704730)),"@site/docs/IoT-and-Machine-Learning/ML/2022-04-02-pytorch-super-resolution/index.md",704730],c24b6153:[()=>o.e(47906).then(o.t.bind(o,579228,19)),"~docs/default/tag-docs-tags-machine-learning-2a3.json",579228],c29aff73:[()=>o.e(14312).then(o.bind(o,721437)),"@site/docs/Automation_and_Robotics/MQTT/2022-07-23-mosquitto-broker-compilation/index.md",721437],c2cf0b3c:[()=>o.e(8965).then(o.bind(o,788744)),"@site/docs/DevOps/Hashicorp/2022-05-27-hashicorp-nomad-for-elastic/index.md",788744],c31db722:[()=>Promise.all([o.e(72239),o.e(18707)]).then(o.bind(o,672389)),"@site/src/pages/Search.jsx",672389],c3321eb4:[()=>o.e(87105).then(o.bind(o,144773)),"@site/docs/Development/Misc/1980-01-01--dcs-f-14-tomcat/index.md",144773],c35acc61:[()=>o.e(84422).then(o.bind(o,577896)),"@site/docs/Automation_and_Robotics/Home_Automation/2018-11-13--nodered-ifttt/index.mdx",577896],c39e8593:[()=>o.e(62292).then(o.bind(o,41589)),"@site/docs/DevOps/Elasticsearch/2017-12-05--elasticsearch-react-example/index.mdx",41589],c3f66085:[()=>o.e(89284).then(o.t.bind(o,143181,19)),"~docs/default/tag-docs-tags-elasticsearch-726.json",143181],c4495d2c:[()=>o.e(49053).then(o.bind(o,975489)),"@site/docs/IoT-and-Machine-Learning/AIOps/2024-02-21-mlflow-pytorch-lightning-docker/index.md",975489],c4cf2bb2:[()=>o.e(10988).then(o.bind(o,443316)),"@site/docs/Development/Javascript/2021-09-10--websocket-recconects/index.md",443316],c50a6e3c:[()=>o.e(28891).then(o.bind(o,44012)),"@site/docs/DevOps/Ansible/2021-05-01-ansible-tower-workflow-templates/index.md",44012],c54263d5:[()=>o.e(95904).then(o.bind(o,23225)),"@site/docs/Development/Magento/2019-09-15--updating-from-php70-to-php72/index.mdx",23225],c5938c55:[()=>o.e(41605).then(o.bind(o,376417)),"@site/docs/IoT-and-Machine-Learning/AIOps/2023-07-10-scikit-image-model-deployment-part1/index.md",376417],c5a21041:[()=>o.e(38613).then(o.bind(o,243510)),"@site/docs/DevOps/Hashicorp/2022-05-17-hashicorp-dojo-nomad-deployment/index.md",243510],c60995f6:[()=>o.e(6199).then(o.t.bind(o,662474,19)),"~docs/default/tag-docs-tags-nginx-3b7.json",662474],c658f1e6:[()=>o.e(30681).then(o.bind(o,131984)),"@site/docs/Development/Python/2023-07-09-python-scikit-image-intro/index.md",131984],c6c2190b:[()=>o.e(60259).then(o.bind(o,913274)),"@site/docs/Automation_and_Robotics/Home_Automation/2018-11-27--node-red-sql-logging/index.mdx",913274],c7eafd0b:[()=>o.e(87342).then(o.bind(o,956012)),"@site/docs/DevOps/Provisioning/2020-07-13--infrastructure-as-code/index.md",956012],c80f5c2a:[()=>o.e(51816).then(o.bind(o,665585)),"@site/docs/Development/Javascript/2018-01-15--react-transition-group-demo/index.mdx",665585],c8848c68:[()=>o.e(4777).then(o.bind(o,858322)),"@site/docs/IoT-and-Machine-Learning/ML/2023-08-31--semantic_segmentation_detectron2_openimages_dataset/index.md",858322],c91b7a9d:[()=>o.e(42080).then(o.bind(o,191479)),"@site/docs/IoT-and-Machine-Learning/ML/2021-11-04--installing-yolov4/index.md",191479],c925ffce:[()=>o.e(21623).then(o.t.bind(o,172107,19)),"~docs/default/tag-docs-tags-gazebo-720.json",172107],c9526497:[()=>o.e(15896).then(o.bind(o,41302)),"@site/docs/IoT-and-Machine-Learning/ML/2023-03-24-tensorflow-unsupervised-learning-autoencoders/index.md",41302],c98eb359:[()=>o.e(91190).then(o.bind(o,456452)),"@site/docs/IoT-and-Machine-Learning/ML/2023-09-19--cvat-computer-vision-annotation-tool/index.md",456452],c9c4ece2:[()=>o.e(44893).then(o.bind(o,651495)),"@site/docs/Development/Javascript/2023-12-18-reactjs-typescript-redux-toolkit/index.md",651495],c9c4f4a4:[()=>o.e(61603).then(o.bind(o,539647)),"@site/docs/DevOps/Hashicorp/2022-11-15-hashicorp-nomad-nginx-load-balancing/index.md",539647],c9d68ef6:[()=>o.e(22853).then(o.bind(o,564867)),"@site/docs/Automation_and_Robotics/Home_Automation/2018-11-23--node-red-flows/index.mdx",564867],c9fa19ae:[()=>o.e(52355).then(o.bind(o,545310)),"@site/docs/IoT-and-Machine-Learning/ML/2021-11-06--opencv-crash-course-part-i/index.md",545310],ca51ca6c:[()=>o.e(97819).then(o.bind(o,757514)),"@site/docs/Development/Python/2022-10-07-python-docusaurus-elasticsearch/index.md",757514],cad10480:[()=>o.e(12040).then(o.bind(o,637396)),"@site/docs/IoT-and-Machine-Learning/AIOps/2023-06-17-scikit-learn-model-deployment/index.md",637396],cb857b89:[()=>o.e(72810).then(o.bind(o,67475)),"@site/docs/DevOps/Hashicorp/2022-09-22--nomad-nts-timeserver/index.md",67475],cbb5e55c:[()=>Promise.all([o.e(91765),o.e(94345)]).then(o.bind(o,502054)),"@site/docs/Development/Javascript/2022-07-01-docusaurus-introduction/index.mdx",502054],cbf5f6b8:[()=>o.e(33927).then(o.bind(o,253869)),"@site/docs/DevOps/NGINX/2022-12-08-nginx-websocket-proxy/index.md",253869],cc031077:[()=>o.e(77304).then(o.bind(o,906553)),"@site/docs/Development/Go/2022-10-15-go-oauth2-server/index.md",906553],cc04a2bf:[()=>o.e(78665).then(o.t.bind(o,304445,19)),"~docs/default/tag-docs-tags-waypoint-c77.json",304445],cc23b826:[()=>o.e(57334).then(o.bind(o,420277)),"@site/docs/Automation_and_Robotics/MQTT/2022-02-01--mosquitto-2-broker/index.md",420277],cc6a2af6:[()=>o.e(60692).then(o.t.bind(o,375504,19)),"~docs/default/tag-docs-tags-material-ui-ee4.json",375504],ccc49370:[()=>Promise.all([o.e(40532),o.e(66567),o.e(40864),o.e(46103)]).then(o.bind(o,300324)),"@theme/BlogPostPage",300324],ccff67fc:[()=>o.e(90026).then(o.bind(o,772157)),"@site/docs/Development/Go/2021-09-22--golang-react-starter-part-ii/index.md",772157],cd07c98d:[()=>o.e(31725).then(o.t.bind(o,727052,19)),"~docs/default/tag-docs-tags-simulation-0cc.json",727052],cd14b7d1:[()=>o.e(36861).then(o.bind(o,828259)),"@site/docs/DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part2/index.md",828259],cd1731d5:[()=>o.e(48028).then(o.bind(o,824182)),"@site/docs/Automation_and_Robotics/Home_Automation/2019-02-15--ifttt-ip-camera/index.mdx",824182],cd8e1d33:[()=>o.e(97350).then(o.t.bind(o,815213,19)),"~docs/default/tag-docs-tags-salt-566.json",815213],cdb44745:[()=>o.e(43445).then(o.bind(o,791492)),"@site/docs/DevOps/Linux/2024-01-08--vsftp-ubuntu/index.md",791492],cf59a740:[()=>o.e(48001).then(o.t.bind(o,609913,19)),"~docs/default/tag-docs-tags-react-native-b11.json",609913],cf80176a:[()=>o.e(48077).then(o.bind(o,483337)),"@site/docs/DevOps/Provisioning/2021-10-12--traefik-third-attempt/index.md",483337],d00c529d:[()=>o.e(42557).then(o.t.bind(o,342741,19)),"~docs/default/tag-docs-tags-cheating-da9.json",342741],d01e25c4:[()=>o.e(30649).then(o.t.bind(o,110750,19)),"~docs/default/tag-docs-tags-python-9c4.json",110750],d063e382:[()=>o.e(8264).then(o.t.bind(o,391961,19)),"~docs/default/tag-docs-tags-tensorflow-7a7.json",391961],d07fc892:[()=>o.e(14241).then(o.bind(o,789720)),"@site/docs/DevOps/Provisioning/2022-11-16--mautic-docker/index.md",789720],d099b125:[()=>o.e(58088).then(o.t.bind(o,731301,19)),"~docs/default/category-docs-tutorialsidebar-category-server-provisioning-19d.json",731301],d1048c8a:[()=>o.e(14217).then(o.bind(o,245198)),"@site/docs/Development/Javascript/2017-08-21--reactive-material/index.mdx",245198],d11371bd:[()=>o.e(67629).then(o.bind(o,143396)),"@site/docs/Development/Javascript/2016-08-11--node-express-static-wiki/index.mdx",143396],d13f61ed:[()=>o.e(43204).then(o.bind(o,108317)),"@site/docs/DevOps/Kubernetes/2019-01-15--creating-a-kubernetes-cluster/index.mdx",108317],d1bc99af:[()=>o.e(34254).then(o.bind(o,795695)),"@site/docs/Development/ReactNative/2022-05-05-react-native-context-hooks/index.md",795695],d22a62cd:[()=>o.e(19741).then(o.t.bind(o,974691,19)),"~docs/default/category-docs-tutorialsidebar-category-home-automation-80b.json",974691],d2359087:[()=>o.e(66365).then(o.bind(o,949363)),"@site/docs/Development/Python/2023-05-10-plotly-COVID19-dataset/index.md",949363],d39409a9:[()=>o.e(12077).then(o.bind(o,708641)),"@site/docs/Development/Javascript/2023-12-14-reactjs-typescript-2023/index.md",708641],d3ab7d9a:[()=>o.e(23842).then(o.t.bind(o,632095,19)),"~docs/default/category-docs-tutorialsidebar-category-hashicorp-73a.json",632095],d3b7c1c6:[()=>o.e(3537).then(o.t.bind(o,869563,19)),"~docs/default/tag-docs-tags-consul-106.json",869563],d401a20e:[()=>o.e(9516).then(o.bind(o,225590)),"@site/docs/Automation_and_Robotics/Home_Automation/2018-11-17--nodered-mqtt-connect/index.mdx",225590],d4318ffa:[()=>o.e(33859).then(o.bind(o,435366)),"@site/docs/Development/Magento/2019-09-21--magento2-google-analytics/index.md",435366],d4485e77:[()=>o.e(48454).then(o.t.bind(o,725409,19)),"~docs/default/category-docs-tutorialsidebar-category-ansible-37f.json",725409],d571d61b:[()=>o.e(12687).then(o.bind(o,495002)),"@site/docs/Automation_and_Robotics/Robotics_Simulation/2023-11-26--ros2-webots/index.md",495002],d726bbfe:[()=>o.e(17432).then(o.bind(o,368726)),"@site/blog/2019-05-29-web-development/index.md",368726],d7392ba8:[()=>o.e(7053).then(o.bind(o,674164)),"@site/docs/IoT-and-Machine-Learning/AIOps/2023-02-06-apache-airflow-dynamic-dags/index.md",674164],d7711360:[()=>o.e(1319).then(o.bind(o,599264)),"@site/docs/Development/Javascript/2023-12-20-react-query-typescript/index.md",599264],d77e8908:[()=>o.e(54938).then(o.bind(o,855223)),"@site/docs/DevOps/Ansible/2021-04-28-ansible-tower-rhel/index.md",855223],d7c454be:[()=>o.e(95112).then(o.bind(o,146224)),"@site/docs/DevOps/NGINX/2021-02-23-nginx-agent-redirect/index.md",146224],d8054357:[()=>o.e(34454).then(o.bind(o,538370)),"@site/docs/DevOps/GitOps/2023-10-28-github-passkey/index.md",538370],d8bcf2df:[()=>o.e(20436).then(o.bind(o,698747)),"@site/docs/IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part2/index.md",698747],d906f0d4:[()=>o.e(63822).then(o.t.bind(o,835072,19)),"~docs/default/tag-docs-tags-gatsby-b03.json",835072],d925ac32:[()=>o.e(17312).then(o.bind(o,951727)),"@site/docs/DevOps/Salt/2020-06-15--salty-devops/index.mdx",951727],d9270ab1:[()=>o.e(93998).then(o.bind(o,980938)),"@site/docs/DevOps/Hashicorp/2020-08-15--installing-nomad-ubuntu/index.md",980938],d94af6b2:[()=>o.e(68797).then(o.bind(o,451470)),"@site/docs/DevOps/Provisioning/2024-01-17--ntfy-notification-service/index.md",451470],d97f1aeb:[()=>o.e(75196).then(o.bind(o,435278)),"@site/docs/DevOps/Linux/2019-09-22--zsh-on-ubuntu20/index.md",435278],d990198c:[()=>o.e(82917).then(o.bind(o,304472)),"@site/docs/DevOps/Hashicorp/2022-10-23-hashicorp-consul-connect/index.md",304472],d9a7b3d1:[()=>o.e(84007).then(o.bind(o,373364)),"@site/docs/Development/ReactNative/2022-05-02-react-native-navigation/index.md",373364],d9c053d8:[()=>o.e(45417).then(o.bind(o,925923)),"@site/docs/IoT-and-Machine-Learning/ML/2023-09-10--model-explainability-shap/index.md",925923],da165bfa:[()=>o.e(52974).then(o.bind(o,23799)),"@site/docs/DevOps/Hashicorp/2021-08-04--hashicorp-nomad-job-specifications/index.md",23799],da83f208:[()=>o.e(53885).then(o.t.bind(o,214695,19)),"~docs/default/tag-docs-tags-wazuh-78c.json",214695],da88eee6:[()=>o.e(14965).then(o.t.bind(o,678267,19)),"~docs/default/tag-docs-tags-gitlab-7a1.json",678267],da8f1b0e:[()=>o.e(87573).then(o.bind(o,182518)),"@site/docs/DevOps/Hashicorp/2022-09-24--nomad-nginx-ingress/index.md",182518],daf5412b:[()=>o.e(75113).then(o.bind(o,445026)),"@site/docs/Development/Python/2022-10-15-python-rest-server/index.md",445026],db36164d:[()=>o.e(8267).then(o.t.bind(o,847928,19)),"~docs/default/category-docs-tutorialsidebar-category-javascript-0ee.json",847928],db3b17b6:[()=>o.e(4510).then(o.bind(o,905871)),"@site/docs/Development/Javascript/2018-01-17--server-side-render-react-router/index.mdx",905871],db5d3a0e:[()=>o.e(91089).then(o.bind(o,350788)),"@site/docs/IoT-and-Machine-Learning/ML/2023-02-27-tensorflow-neural-network-classification/index.md",350788],db664dc0:[()=>o.e(94970).then(o.bind(o,835381)),"@site/docs/DevOps/GitOps/2020-08-02--gitlab-setup/index.md",835381],db6b6695:[()=>o.e(29161).then(o.bind(o,671063)),"@site/docs/DevOps/Hashicorp/2022-12-03-hashicorp-vault-installation/index.md",671063],dbd687c6:[()=>o.e(61567).then(o.bind(o,205890)),"@site/docs/DevOps/Elasticsearch/2021-03-30-elasticsearch7-and-filebeats/index.md",205890],dbeda19b:[()=>o.e(40263).then(o.bind(o,742731)),"@site/docs/Automation_and_Robotics/MQTT/2019-08-07--mqtt-iobroker/index.mdx",742731],dbf12f29:[()=>o.e(84340).then(o.bind(o,794683)),"@site/docs/DevOps/Linux/2021-10-09--editor-from-hell/index.md",794683],dca5cb1c:[()=>o.e(53272).then(o.bind(o,234264)),"@site/docs/DevOps/Elasticsearch/2017-12-31--securing-elasticsearch-xpack/index.mdx",234264],dcdaf62e:[()=>o.e(10310).then(o.t.bind(o,663717,19)),"~docs/default/tag-docs-tags-markdown-e24.json",663717],dd58db2f:[()=>o.e(14517).then(o.t.bind(o,800089,19)),"~docs/default/tag-docs-tags-s-klearn-dc9.json",800089],dd6ae268:[()=>o.e(6671).then(o.bind(o,957556)),"@site/docs/Automation_and_Robotics/Home_Automation/2019-02-08--shinobi-on-debian/index.mdx",957556],dd954a41:[()=>o.e(89069).then(o.bind(o,271524)),"@site/docs/IoT-and-Machine-Learning/ML/2021-11-09--tensorflow-crash-course-part-ii/index.md",271524],de605d67:[()=>o.e(64088).then(o.bind(o,63814)),"@site/docs/DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/cheat-sheet.md",63814],debe04e4:[()=>o.e(63813).then(o.bind(o,77181)),"@site/docs/IoT-and-Machine-Learning/AIOps/2023-01-01-tf-model-server/index.md",77181],dedca094:[()=>o.e(95360).then(o.t.bind(o,585725,19)),"~docs/default/tag-docs-tags-apache-0be.json",585725],df028509:[()=>o.e(93581).then(o.bind(o,702435)),"@site/docs/IoT-and-Machine-Learning/AIOps/2023-06-18-automl-with-autogluon-tabular-data/index.md",702435],df1971c3:[()=>o.e(64832).then(o.t.bind(o,124942,19)),"~docs/default/tag-docs-tags-auto-gluon-506.json",124942],df203c0f:[()=>Promise.all([o.e(40532),o.e(99924)]).then(o.bind(o,200615)),"@theme/DocTagDocListPage",200615],e051f334:[()=>o.e(27411).then(o.bind(o,179484)),"@site/docs/DevOps/Linux/2020-01-05--centos8-cockpit/index.mdx",179484],e132a354:[()=>o.e(47722).then(o.bind(o,999508)),"@site/docs/DevOps/Hashicorp/2021-08-02--hashicorp-nomad-security/index.md",999508],e1501821:[()=>o.e(84056).then(o.bind(o,322100)),"@site/docs/DevOps/Zabbix/2022-01-14--zabbix-http-cert-monitor/index.md",322100],e1be0d22:[()=>o.e(19073).then(o.bind(o,741702)),"@site/docs/IoT-and-Machine-Learning/ML/2021-12-06--opencv-object-tracking/index.md",741702],e1e3ac97:[()=>o.e(15098).then(o.bind(o,292037)),"@site/docs/Automation_and_Robotics/Home_Automation/2018-11-20--nodered-http-connect/index.mdx",292037],e22a6fec:[()=>o.e(29362).then(o.bind(o,985546)),"@site/docs/Development/Javascript/2021-06-02--mqtt-cheat-sheet/index.md",985546],e2596a88:[()=>o.e(24963).then(o.bind(o,88535)),"@site/docs/Automation_and_Robotics/MQTT/2019-08-09--mqtt-homee/index.mdx",88535],e2759faf:[()=>o.e(64433).then(o.bind(o,391468)),"@site/docs/Development/Javascript/2021-05-10-carbon-design-react/index.md",391468],e2767dab:[()=>o.e(59748).then(o.bind(o,229845)),"@site/docs/IoT-and-Machine-Learning/ML/2023-08-06-tensorflow-i-know-flowers-inceptionv3/index.md",229845],e27dcffb:[()=>o.e(44455).then(o.bind(o,846983)),"@site/blog/2019-05-30-devops-introduction/index.md",846983],e286006a:[()=>o.e(25960).then(o.bind(o,718774)),"@site/docs/IoT-and-Machine-Learning/ML/2023-02-14-keras-introduction/index.md",718774],e290ba7d:[()=>o.e(51886).then(o.bind(o,692050)),"@site/docs/IoT-and-Machine-Learning/AIOps/2023-09-27-zenml-intro-sklearn-pipeline/index.md",692050],e2ea1873:[()=>o.e(46777).then(o.bind(o,321475)),"@site/docs/IoT-and-Machine-Learning/AIOps/2023-01-29-python-ray-deployments/index.md",321475],e328a4f1:[()=>o.e(42424).then(o.bind(o,123896)),"@site/docs/DevOps/Kubernetes/2019-01-22--kubernetes-nginx-ingress/index.mdx",123896],e38eae5a:[()=>o.e(89880).then(o.t.bind(o,176382,19)),"~docs/default/tag-docs-tags-ml-flow-e1d.json",176382],e3c1bbe2:[()=>o.e(34945).then(o.bind(o,447051)),"@site/docs/Development/Javascript/2021-05-12-carbon-design-react-part3/index.md",447051],e3d79d99:[()=>o.e(23977).then(o.bind(o,496978)),"@site/docs/DevOps/Hashicorp/2022-05-18-hashicorp-dojo-nomad-adding-encryption/index.md",496978],e3f91531:[()=>o.e(1508).then(o.bind(o,159310)),"@site/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-1-setup/index.md",159310],e419017e:[()=>o.e(94514).then(o.bind(o,864751)),"@site/docs/IoT-and-Machine-Learning/ML/2023-02-19-tensorflow-introduction/index.md",864751],e42c8983:[()=>o.e(30878).then(o.bind(o,818437)),"@site/docs/IoT-and-Machine-Learning/ML/2023-08-02-tensorflow-i-know-flowers-preprocessing/index.md",818437],e46dbd9b:[()=>o.e(4115).then(o.bind(o,306237)),"@site/docs/Development/Magento/2019-09-10--magento2-docker-on-ubuntu/index.md",306237],e4d964aa:[()=>o.e(9698).then(o.bind(o,344967)),"@site/docs/DevOps/Hashicorp/2022-05-15-hashicorp-nomad-refresher/index.md",344967],e50f711f:[()=>o.e(73490).then(o.bind(o,617360)),"@site/docs/IoT-and-Machine-Learning/ML/2023-08-05-tensorflow-i-know-flowers-efficientnetv2s/index.md",617360],e52b9eb6:[()=>o.e(5965).then(o.bind(o,502672)),"@site/docs/DevOps/Salt/2020-06-25--salt-orchestration-for-docker-containers/index.md",502672],e5a6cd84:[()=>o.e(61991).then(o.bind(o,900409)),"@site/docs/DevOps/Ansible/2020-11-23--ansible-getting-serious/index.md",900409],e5b1f1c1:[()=>o.e(67636).then(o.bind(o,581753)),"@site/docs/DevOps/Hashicorp/2021-08-14--hashicorp-consul-tls-encryption/index.md",581753],e5ea339b:[()=>o.e(51196).then(o.bind(o,580680)),"@site/docs/DevOps/GitOps/2020-08-03--gitlab-as-docker-registry/index.md",580680],e6226a27:[()=>o.e(54456).then(o.bind(o,326294)),"@site/docs/Development/Javascript/2023-12-15-reactjs-typescript-redux/index.md",326294],e6416e6b:[()=>o.e(50446).then(o.bind(o,146256)),"@site/docs/DevOps/Linux/2021-04-14-using-deb-files-on-rhel8/index.md",146256],e64b2c0b:[()=>o.e(28535).then(o.bind(o,107358)),"@site/docs/IoT-and-Machine-Learning/ML/2023-04-09-principal-component-analysis/index.md",107358],e6f9d239:[()=>o.e(1976).then(o.bind(o,289029)),"@site/docs/DevOps/Zabbix/2022-07-15-zabbix-for-zimbra/index.md",289029],e710cb79:[()=>o.e(78333).then(o.bind(o,799628)),"@site/docs/Automation_and_Robotics/Home_Automation/2019-03-26--writing-a-homey-app/index.mdx",799628],e76d8c90:[()=>o.e(66147).then(o.bind(o,511468)),"@site/blog/2019-06-01-continuous_integration_deployment/index.md",511468],e77cce3d:[()=>o.e(72663).then(o.bind(o,890103)),"@site/docs/Automation_and_Robotics/MQTT/2019-08-06--mqtt-node-red/index.mdx",890103],e7c40ef6:[()=>o.e(27017).then(o.bind(o,902500)),"@site/docs/IoT-and-Machine-Learning/ML/2023-03-03-tensorflow-convolutional-neural-network-binary-classifications/index.md",902500],e7d49125:[()=>o.e(46095).then(o.bind(o,250646)),"@site/docs/DevOps/Zabbix/2022-01-13--zabbix-server-v6/index.md",250646],e822e679:[()=>o.e(68133).then(o.bind(o,933556)),"@site/docs/DevOps/Zabbix/2022-01-14--zabbix-nginx-monitor/index.md",933556],e8b8784f:[()=>o.e(38462).then(o.t.bind(o,711895,19)),"~docs/default/tag-docs-tags-javascript-c37.json",711895],e8de32e0:[()=>o.e(48587).then(o.t.bind(o,376646,19)),"~docs/default/tag-docs-tags-nagios-ba0.json",376646],e91164a1:[()=>o.e(47430).then(o.t.bind(o,62084,19)),"~docs/default/category-docs-tutorialsidebar-category-graphs-799.json",62084],e9a87ba6:[()=>o.e(27301).then(o.bind(o,110811)),"@site/docs/Development/Magento/2019-09-07--magento-development-in-docker/index.mdx",110811],e9b427fe:[()=>o.e(58153).then(o.bind(o,210501)),"@site/docs/Automation_and_Robotics/Home_Automation/2018-11-01--openhab2-mqtt-nodered/index.mdx",210501],e9f313dd:[()=>o.e(16335).then(o.bind(o,693554)),"@site/docs/Development/Javascript/2016-05-27--javascript-apis-and-ajax/index.mdx",693554],ea80ed8d:[()=>o.e(68588).then(o.bind(o,946737)),"@site/docs/Development/Magento/2020-12-07-google-analytics-g4-tag/index.md",946737],eb8e8a3a:[()=>o.e(8363).then(o.bind(o,607202)),"@site/docs/Development/Javascript/2021-09-09--websocket-HAproxy/index.md",607202],eb9aa5f7:[()=>o.e(34717).then(o.t.bind(o,224507,19)),"~blog/default/blog-tags-dev-ops-e2f.json",224507],ebf50f06:[()=>o.e(71536).then(o.bind(o,412115)),"@site/docs/IoT-and-Machine-Learning/ML/2023-04-16-deep-3d-image-segmentation/index.md",412115],ec097ace:[()=>o.e(51448).then(o.bind(o,323989)),"@site/docs/IoT-and-Machine-Learning/ML/2021-10-31--tesseract_ocr_arch_linux/index.md",323989],ec2743b2:[()=>o.e(18902).then(o.t.bind(o,235680,19)),"~docs/default/tag-docs-tags-robotics-7d0.json",235680],ec31d839:[()=>o.e(7337).then(o.bind(o,323769)),"@site/docs/DevOps/Hashicorp/2021-08-03--hashicorp-nomad-jobs/index.md",323769],ec7ebf60:[()=>o.e(51256).then(o.bind(o,763480)),"@site/docs/IoT-and-Machine-Learning/ML/2021-11-01--spacy_natural_language_processing/index.md",763480],ec8f2dc3:[()=>o.e(37851).then(o.bind(o,734255)),"@site/docs/DevOps/Provisioning/2020-10-02--installing-wazuh-in-docker/index.md",734255],ed4f2354:[()=>o.e(97402).then(o.bind(o,106399)),"@site/docs/IoT-and-Machine-Learning/ML/2022-12-31-tf-rnn-text-generation/index.md",106399],ed6f7adc:[()=>o.e(79662).then(o.bind(o,55789)),"@site/docs/DevOps/Hashicorp/2022-05-26-hashicorp-nomad-with-gitlab-part-2/index.md",55789],ed708df9:[()=>o.e(22895).then(o.bind(o,960306)),"@site/docs/Development/Misc/2023-01-20-pandoc-markup-converter/index.md",960306],ee05e013:[()=>o.e(89359).then(o.bind(o,301713)),"@site/docs/Development/Javascript/2023-12-25-redux-toolkit/index.md",301713],ee5b9f05:[()=>o.e(12649).then(o.t.bind(o,353430,19)),"~docs/default/tag-docs-tags-sq-lite-cb5.json",353430],ee96f43e:[()=>o.e(90275).then(o.bind(o,546165)),"@site/docs/IoT-and-Machine-Learning/AIOps/2023-01-26-python-ray-remote-actors/index.md",546165],ef213563:[()=>o.e(551).then(o.bind(o,597101)),"@site/docs/Development/Javascript/2021-05-08-electron13-gatsby-wrapper/index.md",597101],ef5a2713:[()=>o.e(74100).then(o.bind(o,16355)),"@site/docs/DevOps/Hashicorp/2021-08-01--hashicorp-nomad-refresher/index.md",16355],ef5e2c02:[()=>o.e(68704).then(o.bind(o,99340)),"@site/docs/Development/Javascript/2021-09-08--websockets-html-video/index.md",99340],ef7feed7:[()=>o.e(67568).then(o.t.bind(o,22428,19)),"~docs/default/category-docs-tutorialsidebar-category-automation-deep-vision-and-robotics-fe6.json",22428],ef932304:[()=>o.e(28078).then(o.bind(o,409054)),"@site/docs/IoT-and-Machine-Learning/ML/2023-06-26-autogluon-transit-photometry-dataset/index.md",409054],efac23cd:[()=>o.e(53868).then(o.t.bind(o,881430,19)),"~docs/default/tag-docs-tags-firewall-d-9bb.json",881430],efddfdcd:[()=>o.e(87279).then(o.bind(o,401281)),"@site/docs/DevOps/Provisioning/2022-10-27--os-ticket-rest-api/index.md",401281],f06c4998:[()=>o.e(59830).then(o.bind(o,568208)),"@site/docs/DevOps/Provisioning/2021-10-25--matrix-secure-messaging/index.md",568208],f0d12deb:[()=>o.e(75885).then(o.bind(o,540450)),"@site/docs/Development/Javascript/2017-07-22--caloric-burn/index.mdx",540450],f149e051:[()=>o.e(82584).then(o.bind(o,252322)),"@site/docs/Development/Javascript/2021-05-11-carbon-design-react-part2/index.md",252322],f294f024:[()=>o.e(62826).then(o.bind(o,315821)),"@site/docs/IoT-and-Machine-Learning/ML/2023-08-21--pytorch-development-in-docker/index.md",315821],f2bbb35e:[()=>o.e(27444).then(o.bind(o,547299)),"@site/docs/DevOps/Elasticsearch/2022-02-04--kibana-v8-search-queries/index.md",547299],f2d00bc8:[()=>o.e(9098).then(o.bind(o,59819)),"@site/docs/Automation_and_Robotics/Robotics_Simulation/2023-11-24--ros2-graph/index.md",59819],f2e2fce1:[()=>o.e(24392).then(o.bind(o,794347)),"@site/docs/DevOps/Kubernetes/2019-03-02--installing-openshift-3-on-centos-7/index.mdx",794347],f2f774b9:[()=>o.e(6541).then(o.bind(o,754622)),"@site/docs/DevOps/Linux/2023-03-29--installing-the-elgato-streamdeck/index.md",754622],f30ebb7d:[()=>o.e(87647).then(o.bind(o,329090)),"@site/docs/Development/Python/2022-10-09-python-flask-elasticsearch/index.md",329090],f3276ba0:[()=>o.e(79454).then(o.bind(o,333048)),"@site/docs/DevOps/Hashicorp/2020-08-19--consul-deployment-guide/index.mdx",333048],f33d6ff4:[()=>o.e(38682).then(o.bind(o,894959)),"@site/docs/Development/Javascript/2010-01-05--markdown-live-code/index.mdx",894959],f375bf51:[()=>o.e(67398).then(o.bind(o,515491)),"@site/docs/IoT-and-Machine-Learning/ML/2023-08-27--image-segmentation-with-pytorch/index.md",515491],f37cde3f:[()=>o.e(41208).then(o.bind(o,77425)),"@site/docs/Development/Python/2022-09-17-python-video-processing/index.md",77425],f3aea4a7:[()=>o.e(85772).then(o.bind(o,728397)),"@site/docs/DevOps/Linux/2021-10-24--arch-linux-install-mesen/index.md",728397],f3af48e7:[()=>o.e(58286).then(o.t.bind(o,20062,19)),"~docs/default/tag-docs-tags-packer-931.json",20062],f43178d1:[()=>o.e(18017).then(o.bind(o,90022)),"@site/docs/DevOps/Provisioning/2010-02-02--svn-subversion-windows/index.mdx",90022],f449143c:[()=>o.e(86632).then(o.bind(o,844638)),"@site/docs/Development/Javascript/2021-09-07--intro-to-websockets/index.md",844638],f4880861:[()=>o.e(43686).then(o.bind(o,640309)),"@site/docs/IoT-and-Machine-Learning/ML/2022-04-04-pytorch-face-restoration/index.md",640309],f4b2c8ad:[()=>o.e(76395).then(o.bind(o,387286)),"@site/docs/DevOps/Hashicorp/2021-08-06--hashicorp-consul-traefik-loadbalancing/index.md",387286],f4d073b0:[()=>o.e(48095).then(o.bind(o,841853)),"@site/docs/IoT-and-Machine-Learning/ML/2022-02-16--yolo-app-tensorflow-model/index.md",841853],f5044fcc:[()=>o.e(85698).then(o.t.bind(o,825997,19)),"~docs/default/tag-docs-tags-ffmpeg-7e9.json",825997],f51172ef:[()=>o.e(84465).then(o.bind(o,615665)),"@site/docs/IoT-and-Machine-Learning/AIOps/2023-01-04-tf-distributed-strategy/index.md",615665],f5d563f4:[()=>o.e(43180).then(o.bind(o,652002)),"@site/docs/IoT-and-Machine-Learning/ML/2022-02-20--yolo-app-yolov5-data-prep/index.md",652002],f5d668df:[()=>o.e(94356).then(o.bind(o,53938)),"@site/docs/DevOps/Zabbix/2020-07-12--nagios-docker-install/index.md",53938],f624f12e:[()=>o.e(97745).then(o.bind(o,111212)),"@site/docs/IoT-and-Machine-Learning/ML/2023-02-28-tensorflow-neural-network-classification-model-evaluation/index.md",111212],f696140d:[()=>o.e(76764).then(o.bind(o,292612)),"@site/docs/DevOps/Zabbix/2022-01-14--zabbix-docker-monitor/index.md",292612],f6ec9431:[()=>o.e(55787).then(o.bind(o,144e3)),"@site/docs/DevOps/Linux/2020-10-13--smarttools-centos/index.md",144e3],f71da73c:[()=>o.e(40856).then(o.bind(o,837702)),"@site/docs/IoT-and-Machine-Learning/AIOps/2023-02-01-apache-airflow-introduction/index.md",837702],f7550cce:[()=>o.e(76949).then(o.bind(o,83340)),"@site/docs/Development/Javascript/2023-04-01-reactjs-2023/index.md",83340],f76a17ba:[()=>o.e(9640).then(o.bind(o,77231)),"@site/docs/IoT-and-Machine-Learning/ML/2023-08-11-tensorflow-i-know-flowers-vit/index.md",77231],f777078b:[()=>o.e(79554).then(o.bind(o,284477)),"@site/docs/DevOps/Linux/2021-09-02--openwrt-raspberry-pi/index.md",284477],f7f7e98f:[()=>o.e(89062).then(o.bind(o,587950)),"@site/docs/DevOps/Tomcat/2020-12-26-tomcat10-cluster-with-individual-nodes/index.md",587950],f80b8f51:[()=>o.e(61431).then(o.bind(o,984572)),"@site/docs/DevOps/Hashicorp/2023-12-23-opentofu-vs-terraform/index.md",984572],f87b70b9:[()=>o.e(89189).then(o.bind(o,100402)),"@site/docs/Development/Javascript/2010-01-01--mdx/index.mdx",100402],f89af66a:[()=>Promise.all([o.e(56030),o.e(30532)]).then(o.bind(o,587800)),"@site/src/pages/Curriculum-Vitae.jsx",587800],f89f514c:[()=>o.e(6332).then(o.bind(o,406267)),"@site/docs/DevOps/Hashicorp/2022-11-12-hashicorp-nomad-certbot-renewal/index.md",406267],f8d56026:[()=>o.e(40633).then(o.bind(o,273407)),"@site/docs/Development/Python/2022-10-05-python-text-processing/index.md",273407],f9432c9b:[()=>o.e(34606).then(o.bind(o,44310)),"@site/docs/IoT-and-Machine-Learning/AIOps/2024-02-26-mlflow-with-yolov81/index.md",44310],f9a19a40:[()=>o.e(84129).then(o.bind(o,415328)),"@site/docs/DevOps/Elasticsearch/2019-09-08--elasticsearch_7-5_docker/index.mdx",415328],f9f7673e:[()=>o.e(32025).then(o.bind(o,130293)),"@site/docs/DevOps/NGINX/2019-02-05--nginx-ingress-cert-manager/index.mdx",130293],fa494fd7:[()=>o.e(46302).then(o.bind(o,757)),"@site/docs/DevOps/Hashicorp/2021-08-21--hashicorp-vault-secrets-tokens/index.md",757],fa7e25b0:[()=>o.e(84032).then(o.bind(o,981851)),"@site/docs/DevOps/Ansible/2020-11-20--ansible-copy-cheat-sheet/index.md",981851],fab0b3fa:[()=>o.e(38677).then(o.bind(o,792264)),"@site/docs/DevOps/Provisioning/2019-06-18--using-oauth2-in-discourse/index.mdx",792264],fadd57cc:[()=>o.e(137).then(o.bind(o,143984)),"@site/docs/Development/Javascript/2021-09-09--websocket-NGINX/index.md",143984],fadf6512:[()=>o.e(19999).then(o.bind(o,998432)),"@site/docs/DevOps/Hashicorp/2021-08-09--hashicorp-consul-services/index.md",998432],fb462fa5:[()=>o.e(79790).then(o.bind(o,241744)),"@site/docs/Automation_and_Robotics/Home_Automation/2019-09-24--iobroker-podman-centos8/index.mdx",241744],fb92e3fa:[()=>o.e(72887).then(o.bind(o,58150)),"@site/docs/Development/Go/2021-09-11--golang-refresher-math-os/index.md",58150],fc3c7c65:[()=>o.e(79588).then(o.bind(o,971947)),"@site/docs/DevOps/Hashicorp/2021-08-12--hashicorp-consul-service-mesh/index.md",971947],fc5bfcba:[()=>o.e(7377).then(o.bind(o,797878)),"@site/docs/IoT-and-Machine-Learning/ML/2021-12-08--opencv-meanshift-tracking/index.md",797878],fd48b0f3:[()=>o.e(38684).then(o.bind(o,465430)),"@site/docs/IoT-and-Machine-Learning/ML/2023-03-16-tensorflow-transfer-learning-scaling/index.md",465430],fd5adcb1:[()=>o.e(5900).then(o.bind(o,573189)),"@site/docs/Automation_and_Robotics/Home_Automation/2020-12-02--openhab3-mqtt-binding/index.md",573189],fda0f49a:[()=>o.e(50828).then(o.bind(o,984578)),"@site/docs/DevOps/GitOps/2020-02-02--docker-images-in-gitlab/index.mdx",984578],fda2ef36:[()=>o.e(98460).then(o.bind(o,827201)),"@site/docs/IoT-and-Machine-Learning/ML/2023-03-02-tensorflow-neural-network-multi-classification/index.md",827201],fe08baec:[()=>o.e(85477).then(o.t.bind(o,504106,19)),"~docs/default/tag-docs-tags-go-519.json",504106],fe955e57:[()=>o.e(19662).then(o.bind(o,28826)),"@site/docs/Development/Javascript/2023-06-12-typescript-2023/index.md",28826],fe9e33c3:[()=>Promise.all([o.e(91765),o.e(66657)]).then(o.bind(o,437197)),"@site/docs/Development/Javascript/2017-07-24--obligatory-react-todo-list/index.mdx",437197],fee41df3:[()=>o.e(56686).then(o.bind(o,82455)),"@site/docs/IoT-and-Machine-Learning/ML/2021-11-13--tensorflow-model-zoo/index.md",82455],fefbd1a7:[()=>o.e(3521).then(o.bind(o,796855)),"@site/docs/DevOps/Provisioning/2018-01-27--express-generator-app-docker/index.mdx",796855],ff2e873e:[()=>o.e(70375).then(o.bind(o,120127)),"@site/docs/DevOps/Elasticsearch/2021-03-22-logstash-working-with-structured-data/index.md",120127],ff7134fa:[()=>o.e(23915).then(o.bind(o,324977)),"@site/docs/Development/Python/2022-10-08-python-flask-app/index.md",324977],ff8c9b46:[()=>o.e(75155).then(o.bind(o,116241)),"@site/docs/DevOps/Hashicorp/2023-12-22-hashicorp-terraform-docker-2024/index.md",116241],ffcc883a:[()=>o.e(84927).then(o.bind(o,643988)),"@site/docs/Development/Javascript/2022-11-19-web3-javascript-app/index.md",643988],fff63921:[()=>o.e(11826).then(o.bind(o,521325)),"@site/docs/Development/Javascript/2022-10-29-webrtc-introduction-realtime-chat/index.md",521325]};var s=o(785893);function c(e){let{error:t,retry:o,pastDelay:n}=e;return t?(0,s.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:o,children:"Retry"})})]}):n?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var d=o(205304),l=o(469656);function p(e,t){if("*"===e)return a()({loading:c,loader:()=>o.e(60868).then(o.bind(o,260868)),modules:["@theme/NotFound"],webpack:()=>[260868],render(e,t){const o=e.default;return(0,s.jsx)(l.z,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(o,{...t})})}});const n=i[`${e}-${t}`],p={},u=[],m=[],h=(0,d.Z)(n);return Object.entries(h).forEach((e=>{let[t,o]=e;const n=r[o];n&&(p[t]=n[0],u.push(n[1]),m.push(n[2]))})),a().Map({loading:c,loader:p,modules:u,webpack:()=>m,render(t,o){const a=JSON.parse(JSON.stringify(n));Object.entries(t).forEach((t=>{let[o,n]=t;const i=n.default;if(!i)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof i&&"function"!=typeof i||Object.keys(n).filter((e=>"default"!==e)).forEach((e=>{i[e]=n[e]}));let r=a;const s=o.split(".");s.slice(0,-1).forEach((e=>{r=r[e]})),r[s[s.length-1]]=i}));const i=a.__comp;delete a.__comp;const r=a.__context;return delete a.__context,(0,s.jsx)(l.z,{value:r,children:(0,s.jsx)(i,{...a,...o})})}})}const u=[{path:"/blog",component:p("/blog","967"),exact:!0},{path:"/blog/archive",component:p("/blog/archive","6d5"),exact:!0},{path:"/blog/continuous-integration",component:p("/blog/continuous-integration","8a9"),exact:!0},{path:"/blog/devops-introduction",component:p("/blog/devops-introduction","7ed"),exact:!0},{path:"/blog/mdx-blog-post",component:p("/blog/mdx-blog-post","3dd"),exact:!0},{path:"/blog/tags",component:p("/blog/tags","1d5"),exact:!0},{path:"/blog/tags/dev-ops",component:p("/blog/tags/dev-ops","775"),exact:!0},{path:"/blog/tags/development",component:p("/blog/tags/development","05e"),exact:!0},{path:"/blog/tags/markdown",component:p("/blog/tags/markdown","4e4"),exact:!0},{path:"/blog/the-modern-web",component:p("/blog/the-modern-web","130"),exact:!0},{path:"/blog/typical_ci_process",component:p("/blog/typical_ci_process","e60"),exact:!0},{path:"/Curriculum-Vitae",component:p("/Curriculum-Vitae","5cd"),exact:!0},{path:"/Search",component:p("/Search","eea"),exact:!0},{path:"/docs",component:p("/docs","714"),routes:[{path:"/docs",component:p("/docs","258"),routes:[{path:"/docs/tags",component:p("/docs/tags","0cc"),exact:!0},{path:"/docs/tags/airflow",component:p("/docs/tags/airflow","9df"),exact:!0},{path:"/docs/tags/ala-sql",component:p("/docs/tags/ala-sql","4e6"),exact:!0},{path:"/docs/tags/ansible",component:p("/docs/tags/ansible","427"),exact:!0},{path:"/docs/tags/ap-is",component:p("/docs/tags/ap-is","c8b"),exact:!0},{path:"/docs/tags/apache",component:p("/docs/tags/apache","e57"),exact:!0},{path:"/docs/tags/auto-gluon",component:p("/docs/tags/auto-gluon","47a"),exact:!0},{path:"/docs/tags/bootstrap",component:p("/docs/tags/bootstrap","b8e"),exact:!0},{path:"/docs/tags/c",component:p("/docs/tags/c","666"),exact:!0},{path:"/docs/tags/certbot",component:p("/docs/tags/certbot","ed0"),exact:!0},{path:"/docs/tags/cheating",component:p("/docs/tags/cheating","e80"),exact:!0},{path:"/docs/tags/consul",component:p("/docs/tags/consul","374"),exact:!0},{path:"/docs/tags/databases",component:p("/docs/tags/databases","469"),exact:!0},{path:"/docs/tags/databases-mongo-db",component:p("/docs/tags/databases-mongo-db","06b"),exact:!0},{path:"/docs/tags/dcs",component:p("/docs/tags/dcs","134"),exact:!0},{path:"/docs/tags/discourse",component:p("/docs/tags/discourse","07b"),exact:!0},{path:"/docs/tags/docker",component:p("/docs/tags/docker","8ce"),exact:!0},{path:"/docs/tags/elasticsearch",component:p("/docs/tags/elasticsearch","251"),exact:!0},{path:"/docs/tags/electron",component:p("/docs/tags/electron","de7"),exact:!0},{path:"/docs/tags/express",component:p("/docs/tags/express","bea"),exact:!0},{path:"/docs/tags/fail-2-ban",component:p("/docs/tags/fail-2-ban","96f"),exact:!0},{path:"/docs/tags/ffmpeg",component:p("/docs/tags/ffmpeg","caa"),exact:!0},{path:"/docs/tags/firewall-d",component:p("/docs/tags/firewall-d","cd8"),exact:!0},{path:"/docs/tags/flask",component:p("/docs/tags/flask","658"),exact:!0},{path:"/docs/tags/gatsby",component:p("/docs/tags/gatsby","163"),exact:!0},{path:"/docs/tags/gazebo",component:p("/docs/tags/gazebo","3ce"),exact:!0},{path:"/docs/tags/github",component:p("/docs/tags/github","326"),exact:!0},{path:"/docs/tags/gitlab",component:p("/docs/tags/gitlab","dee"),exact:!0},{path:"/docs/tags/go",component:p("/docs/tags/go","365"),exact:!0},{path:"/docs/tags/go-fiber",component:p("/docs/tags/go-fiber","58c"),exact:!0},{path:"/docs/tags/google-analytics",component:p("/docs/tags/google-analytics","359"),exact:!0},{path:"/docs/tags/grafana",component:p("/docs/tags/grafana","109"),exact:!0},{path:"/docs/tags/graph-ql",component:p("/docs/tags/graph-ql","7b6"),exact:!0},{path:"/docs/tags/hapi",component:p("/docs/tags/hapi","2ac"),exact:!0},{path:"/docs/tags/io-t",component:p("/docs/tags/io-t","3b5"),exact:!0},{path:"/docs/tags/javascript",component:p("/docs/tags/javascript","273"),exact:!0},{path:"/docs/tags/keras",component:p("/docs/tags/keras","d7a"),exact:!0},{path:"/docs/tags/kubernetes",component:p("/docs/tags/kubernetes","fbb"),exact:!0},{path:"/docs/tags/linux",component:p("/docs/tags/linux","083"),exact:!0},{path:"/docs/tags/machine-learning",component:p("/docs/tags/machine-learning","83a"),exact:!0},{path:"/docs/tags/magento",component:p("/docs/tags/magento","dcf"),exact:!0},{path:"/docs/tags/markdown",component:p("/docs/tags/markdown","1a3"),exact:!0},{path:"/docs/tags/material-ui",component:p("/docs/tags/material-ui","20c"),exact:!0},{path:"/docs/tags/matplotlib",component:p("/docs/tags/matplotlib","7b3"),exact:!0},{path:"/docs/tags/meili",component:p("/docs/tags/meili","79e"),exact:!0},{path:"/docs/tags/ml-flow",component:p("/docs/tags/ml-flow","84d"),exact:!0},{path:"/docs/tags/mqtt",component:p("/docs/tags/mqtt","7b8"),exact:!0},{path:"/docs/tags/nagios",component:p("/docs/tags/nagios","839"),exact:!0},{path:"/docs/tags/neo-4-j",component:p("/docs/tags/neo-4-j","e97"),exact:!0},{path:"/docs/tags/next",component:p("/docs/tags/next","0e9"),exact:!0},{path:"/docs/tags/nginx",component:p("/docs/tags/nginx","379"),exact:!0},{path:"/docs/tags/node",component:p("/docs/tags/node","c2b"),exact:!0},{path:"/docs/tags/node-red",component:p("/docs/tags/node-red","2f5"),exact:!0},{path:"/docs/tags/nomad",component:p("/docs/tags/nomad","99f"),exact:!0},{path:"/docs/tags/nts",component:p("/docs/tags/nts","dcb"),exact:!0},{path:"/docs/tags/open-cv",component:p("/docs/tags/open-cv","bf4"),exact:!0},{path:"/docs/tags/open-hab",component:p("/docs/tags/open-hab","0fe"),exact:!0},{path:"/docs/tags/open-project",component:p("/docs/tags/open-project","7ad"),exact:!0},{path:"/docs/tags/open-shift",component:p("/docs/tags/open-shift","22e"),exact:!0},{path:"/docs/tags/opensearch",component:p("/docs/tags/opensearch","2e9"),exact:!0},{path:"/docs/tags/os-ticket",component:p("/docs/tags/os-ticket","4b6"),exact:!0},{path:"/docs/tags/own-cloud",component:p("/docs/tags/own-cloud","820"),exact:!0},{path:"/docs/tags/packer",component:p("/docs/tags/packer","4cc"),exact:!0},{path:"/docs/tags/pandas",component:p("/docs/tags/pandas","3ea"),exact:!0},{path:"/docs/tags/postgre-sql",component:p("/docs/tags/postgre-sql","942"),exact:!0},{path:"/docs/tags/py-torch",component:p("/docs/tags/py-torch","d28"),exact:!0},{path:"/docs/tags/python",component:p("/docs/tags/python","d96"),exact:!0},{path:"/docs/tags/ray",component:p("/docs/tags/ray","89c"),exact:!0},{path:"/docs/tags/react",component:p("/docs/tags/react","7c3"),exact:!0},{path:"/docs/tags/react-native",component:p("/docs/tags/react-native","873"),exact:!0},{path:"/docs/tags/robotics",component:p("/docs/tags/robotics","574"),exact:!0},{path:"/docs/tags/ros",component:p("/docs/tags/ros","1db"),exact:!0},{path:"/docs/tags/rust",component:p("/docs/tags/rust","f29"),exact:!0},{path:"/docs/tags/s-klearn",component:p("/docs/tags/s-klearn","39a"),exact:!0},{path:"/docs/tags/salt",component:p("/docs/tags/salt","288"),exact:!0},{path:"/docs/tags/sci-kit",component:p("/docs/tags/sci-kit","b3e"),exact:!0},{path:"/docs/tags/seaborn",component:p("/docs/tags/seaborn","9c7"),exact:!0},{path:"/docs/tags/security",component:p("/docs/tags/security","276"),exact:!0},{path:"/docs/tags/simulation",component:p("/docs/tags/simulation","db8"),exact:!0},{path:"/docs/tags/slack",component:p("/docs/tags/slack","005"),exact:!0},{path:"/docs/tags/smarthome",component:p("/docs/tags/smarthome","829"),exact:!0},{path:"/docs/tags/sq-lite",component:p("/docs/tags/sq-lite","8f2"),exact:!0},{path:"/docs/tags/sql",component:p("/docs/tags/sql","1aa"),exact:!0},{path:"/docs/tags/svn",component:p("/docs/tags/svn","a3f"),exact:!0},{path:"/docs/tags/tensorflow",component:p("/docs/tags/tensorflow","24b"),exact:!0},{path:"/docs/tags/terraform",component:p("/docs/tags/terraform","cc4"),exact:!0},{path:"/docs/tags/tomcat",component:p("/docs/tags/tomcat","f46"),exact:!0},{path:"/docs/tags/torch",component:p("/docs/tags/torch","2f1"),exact:!0},{path:"/docs/tags/traefik",component:p("/docs/tags/traefik","4d5"),exact:!0},{path:"/docs/tags/ufw",component:p("/docs/tags/ufw","2f3"),exact:!0},{path:"/docs/tags/vault",component:p("/docs/tags/vault","0ae"),exact:!0},{path:"/docs/tags/waypoint",component:p("/docs/tags/waypoint","116"),exact:!0},{path:"/docs/tags/wazuh",component:p("/docs/tags/wazuh","279"),exact:!0},{path:"/docs/tags/web-rtc",component:p("/docs/tags/web-rtc","864"),exact:!0},{path:"/docs/tags/webots",component:p("/docs/tags/webots","d96"),exact:!0},{path:"/docs/tags/windows",component:p("/docs/tags/windows","bd3"),exact:!0},{path:"/docs/tags/yolo",component:p("/docs/tags/yolo","955"),exact:!0},{path:"/docs/tags/zabbix",component:p("/docs/tags/zabbix","3dd"),exact:!0},{path:"/docs",component:p("/docs","39f"),routes:[{path:"/docs/Automation_and_Robotics/Home_Automation/2018-10-28--nodered-getting-started/2018-10-28",component:p("/docs/Automation_and_Robotics/Home_Automation/2018-10-28--nodered-getting-started/2018-10-28","fb2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2018-11-01--openhab2-mqtt-nodered/2018-11-01",component:p("/docs/Automation_and_Robotics/Home_Automation/2018-11-01--openhab2-mqtt-nodered/2018-11-01","b8a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2018-11-05--nodered-cryptocurrency-dashboard/2018-11-05",component:p("/docs/Automation_and_Robotics/Home_Automation/2018-11-05--nodered-cryptocurrency-dashboard/2018-11-05","711"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2018-11-12--nodered-sqlite/2018-11-12",component:p("/docs/Automation_and_Robotics/Home_Automation/2018-11-12--nodered-sqlite/2018-11-12","a26"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2018-11-13--nodered-ifttt/2018-11-13",component:p("/docs/Automation_and_Robotics/Home_Automation/2018-11-13--nodered-ifttt/2018-11-13","4c8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2018-11-17--nodered-mqtt-connect/2018-11-17",component:p("/docs/Automation_and_Robotics/Home_Automation/2018-11-17--nodered-mqtt-connect/2018-11-17","f00"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2018-11-20--nodered-http-connect/2018-11-20",component:p("/docs/Automation_and_Robotics/Home_Automation/2018-11-20--nodered-http-connect/2018-11-20","eaa"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2018-11-21--nodered-dashboard-getting-started/2018-11-21",component:p("/docs/Automation_and_Robotics/Home_Automation/2018-11-21--nodered-dashboard-getting-started/2018-11-21","5b2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2018-11-23--node-red-flows/2018-11-23",component:p("/docs/Automation_and_Robotics/Home_Automation/2018-11-23--node-red-flows/2018-11-23","538"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2018-11-24--node-red-webhooks/2018-11-24",component:p("/docs/Automation_and_Robotics/Home_Automation/2018-11-24--node-red-webhooks/2018-11-24","840"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2018-11-25--webhooks-with-url-queries/2018-11-25",component:p("/docs/Automation_and_Robotics/Home_Automation/2018-11-25--webhooks-with-url-queries/2018-11-25","d35"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2018-11-26--node-red-and-live-video/2018-11-26",component:p("/docs/Automation_and_Robotics/Home_Automation/2018-11-26--node-red-and-live-video/2018-11-26","6c1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2018-11-27--node-red-sql-logging/2018-11-27",component:p("/docs/Automation_and_Robotics/Home_Automation/2018-11-27--node-red-sql-logging/2018-11-27","349"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2018-11-28--node-red-on-android/2018-11-28",component:p("/docs/Automation_and_Robotics/Home_Automation/2018-11-28--node-red-on-android/2018-11-28","7a3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2018-11-29--node-red-and-mqtt/2018-11-29",component:p("/docs/Automation_and_Robotics/Home_Automation/2018-11-29--node-red-and-mqtt/2018-11-29","45f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2018-11-30--home-assistant-on-debian/2018-11-30",component:p("/docs/Automation_and_Robotics/Home_Automation/2018-11-30--home-assistant-on-debian/2018-11-30","6d5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2018-12-01--openhab2-on-debian/2018-12-01",component:p("/docs/Automation_and_Robotics/Home_Automation/2018-12-01--openhab2-on-debian/2018-12-01","987"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2019-01-05--zigbee2mqtt-xiaomi-fhem/2019-01-05",component:p("/docs/Automation_and_Robotics/Home_Automation/2019-01-05--zigbee2mqtt-xiaomi-fhem/2019-01-05","80b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2019-02-07--motioneye-on-debian/2019-02-07",component:p("/docs/Automation_and_Robotics/Home_Automation/2019-02-07--motioneye-on-debian/2019-02-07","cf9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2019-02-08--shinobi-on-debian/2019-02-08",component:p("/docs/Automation_and_Robotics/Home_Automation/2019-02-08--shinobi-on-debian/2019-02-08","975"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2019-02-09--zoneminder-in-docker/2019-02-09",component:p("/docs/Automation_and_Robotics/Home_Automation/2019-02-09--zoneminder-in-docker/2019-02-09","df4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2019-02-11--loxone-miniserver/2019-02-11",component:p("/docs/Automation_and_Robotics/Home_Automation/2019-02-11--loxone-miniserver/2019-02-11","db1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2019-02-15--ifttt-ip-camera/2019-02-15",component:p("/docs/Automation_and_Robotics/Home_Automation/2019-02-15--ifttt-ip-camera/2019-02-15","87b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2019-02-16--ifttt-ip-camera-alarmserver/2019-02-15",component:p("/docs/Automation_and_Robotics/Home_Automation/2019-02-16--ifttt-ip-camera-alarmserver/2019-02-15","37f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2019-03-26--writing-a-homey-app/2019-03-26",component:p("/docs/Automation_and_Robotics/Home_Automation/2019-03-26--writing-a-homey-app/2019-03-26","8eb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2019-09-23--mqtt-camera-ai-video-security/2019-09-23",component:p("/docs/Automation_and_Robotics/Home_Automation/2019-09-23--mqtt-camera-ai-video-security/2019-09-23","15c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2019-09-24--iobroker-podman-centos8/2019-09-24",component:p("/docs/Automation_and_Robotics/Home_Automation/2019-09-24--iobroker-podman-centos8/2019-09-24","f27"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2019-09-24--motioneye-podman-centos8/2019-09-24",component:p("/docs/Automation_and_Robotics/Home_Automation/2019-09-24--motioneye-podman-centos8/2019-09-24","0ab"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2019-09-27--home-assistant-podman-centos8/2019-09-27",component:p("/docs/Automation_and_Robotics/Home_Automation/2019-09-27--home-assistant-podman-centos8/2019-09-27","2a3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2019-09-28--node-red-homekit-containerized/2019-09-28",component:p("/docs/Automation_and_Robotics/Home_Automation/2019-09-28--node-red-homekit-containerized/2019-09-28","28b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2019-12-01--podman-hombridge-to-mqtt/2019-12-01",component:p("/docs/Automation_and_Robotics/Home_Automation/2019-12-01--podman-hombridge-to-mqtt/2019-12-01","c30"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2020-09-15--mock-rest-api-with-nodered/2020-09-16",component:p("/docs/Automation_and_Robotics/Home_Automation/2020-09-15--mock-rest-api-with-nodered/2020-09-16","d49"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2020-09-16--testing-new-rest-api-with-nodered/2020-09-16",component:p("/docs/Automation_and_Robotics/Home_Automation/2020-09-16--testing-new-rest-api-with-nodered/2020-09-16","474"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2020-12-01--openhab3-in-docker/2020-12-01",component:p("/docs/Automation_and_Robotics/Home_Automation/2020-12-01--openhab3-in-docker/2020-12-01","892"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2020-12-02--openhab3-mqtt-binding/2020-12-02",component:p("/docs/Automation_and_Robotics/Home_Automation/2020-12-02--openhab3-mqtt-binding/2020-12-02","fdf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2020-12-03--openhab3-camera-binding/2020-12-03",component:p("/docs/Automation_and_Robotics/Home_Automation/2020-12-03--openhab3-camera-binding/2020-12-03","f22"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2022-07-10-home-assistant-mqtt-autodiscovery-part-i/2022-07-10",component:p("/docs/Automation_and_Robotics/Home_Automation/2022-07-10-home-assistant-mqtt-autodiscovery-part-i/2022-07-10","458"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2022-07-11-home-assistant-mqtt-autodiscovery-part-ii/2022-07-11",component:p("/docs/Automation_and_Robotics/Home_Automation/2022-07-11-home-assistant-mqtt-autodiscovery-part-ii/2022-07-11","a5c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2022-07-12-home-assistant-mqtt-python/2022-07-12",component:p("/docs/Automation_and_Robotics/Home_Automation/2022-07-12-home-assistant-mqtt-python/2022-07-12","28f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2022-07-15-node-red-mqtt-homie/2022-07-15",component:p("/docs/Automation_and_Robotics/Home_Automation/2022-07-15-node-red-mqtt-homie/2022-07-15","0ef"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2022-07-16-openhab-mqtt-homie/2022-07-16",component:p("/docs/Automation_and_Robotics/Home_Automation/2022-07-16-openhab-mqtt-homie/2022-07-16","6d8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2022-07-17-node-red-for-mqtt-autodiscovery/2022-07-17",component:p("/docs/Automation_and_Robotics/Home_Automation/2022-07-17-node-red-for-mqtt-autodiscovery/2022-07-17","a7f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2022-10-18-camera-ui-docker/2022-10-18",component:p("/docs/Automation_and_Robotics/Home_Automation/2022-10-18-camera-ui-docker/2022-10-18","ff6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2022-12-15--rtsp-to-hls-ffmpeg/2022-12-15",component:p("/docs/Automation_and_Robotics/Home_Automation/2022-12-15--rtsp-to-hls-ffmpeg/2022-12-15","d67"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2022-12-22--grafana-for-iot/2022-12-22",component:p("/docs/Automation_and_Robotics/Home_Automation/2022-12-22--grafana-for-iot/2022-12-22","188"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2023-01-23-thread-edge-router-docker/2023-01-23",component:p("/docs/Automation_and_Robotics/Home_Automation/2023-01-23-thread-edge-router-docker/2023-01-23","8b7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2023-01-23-thread-edge-router/2023-01-23",component:p("/docs/Automation_and_Robotics/Home_Automation/2023-01-23-thread-edge-router/2023-01-23","ca6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2023-02-07-python-home-security/2023-02-07",component:p("/docs/Automation_and_Robotics/Home_Automation/2023-02-07-python-home-security/2023-02-07","8f7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2023-04-17-home-assistant-mqtt-autodiscovery-part-iii/2023-04-17",component:p("/docs/Automation_and_Robotics/Home_Automation/2023-04-17-home-assistant-mqtt-autodiscovery-part-iii/2023-04-17","a7a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2023-04-18--home-assistant-node-red-iobroker-docker/2023-04-18",component:p("/docs/Automation_and_Robotics/Home_Automation/2023-04-18--home-assistant-node-red-iobroker-docker/2023-04-18","b9d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2024-01-09--home-assistant-rtsptoweb/2024-01-09",component:p("/docs/Automation_and_Robotics/Home_Automation/2024-01-09--home-assistant-rtsptoweb/2024-01-09","e1b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Home_Automation/2024-01-10--go2rtc/2024-01-09",component:p("/docs/Automation_and_Robotics/Home_Automation/2024-01-10--go2rtc/2024-01-09","907"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/MQTT/2019-08-03--mqtt-debugging/2019-08-03",component:p("/docs/Automation_and_Robotics/MQTT/2019-08-03--mqtt-debugging/2019-08-03","6ec"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/MQTT/2019-08-04--mqtt-android-dashboards/2019-08-04",component:p("/docs/Automation_and_Robotics/MQTT/2019-08-04--mqtt-android-dashboards/2019-08-04","1b8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/MQTT/2019-08-05--mqtt-openhab2/2019-08-05",component:p("/docs/Automation_and_Robotics/MQTT/2019-08-05--mqtt-openhab2/2019-08-05","6f2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/MQTT/2019-08-06--mqtt-node-red/2019-08-06",component:p("/docs/Automation_and_Robotics/MQTT/2019-08-06--mqtt-node-red/2019-08-06","ca0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/MQTT/2019-08-07--mqtt-iobroker/2019-08-07",component:p("/docs/Automation_and_Robotics/MQTT/2019-08-07--mqtt-iobroker/2019-08-07","b66"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/MQTT/2019-08-08--mqtt-homematic/2019-08-08",component:p("/docs/Automation_and_Robotics/MQTT/2019-08-08--mqtt-homematic/2019-08-08","6dc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/MQTT/2019-08-09--mqtt-homee/2019-08-09",component:p("/docs/Automation_and_Robotics/MQTT/2019-08-09--mqtt-homee/2019-08-09","ac6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/MQTT/2019-08-10--mqtt-athom-homey/2019-08-10",component:p("/docs/Automation_and_Robotics/MQTT/2019-08-10--mqtt-athom-homey/2019-08-10","7ef"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/MQTT/2019-08-11--mqtt-home-assistant/2019-08-11",component:p("/docs/Automation_and_Robotics/MQTT/2019-08-11--mqtt-home-assistant/2019-08-11","3a4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/MQTT/2021-09-12--golang-paho-mqtt/2021-09-12",component:p("/docs/Automation_and_Robotics/MQTT/2021-09-12--golang-paho-mqtt/2021-09-12","73a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/MQTT/2022-02-01--mosquitto-2-broker/2022-02-01",component:p("/docs/Automation_and_Robotics/MQTT/2022-02-01--mosquitto-2-broker/2022-02-01","ad8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/MQTT/2022-03-26--mqtt-clients/2022-03-26",component:p("/docs/Automation_and_Robotics/MQTT/2022-03-26--mqtt-clients/2022-03-26","81a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/MQTT/2022-03-27--build-mosquitto-from-source/2022-03-27",component:p("/docs/Automation_and_Robotics/MQTT/2022-03-27--build-mosquitto-from-source/2022-03-27","c99"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/MQTT/2022-03-28--mqtt-message-server/2022-03-28",component:p("/docs/Automation_and_Robotics/MQTT/2022-03-28--mqtt-message-server/2022-03-28","59f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/MQTT/2022-03-30--mqtt-with-rabbit-mq/2022-03-30",component:p("/docs/Automation_and_Robotics/MQTT/2022-03-30--mqtt-with-rabbit-mq/2022-03-30","fa0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/MQTT/2022-06-23-instar-mqtt-python-part-I/2022-06-23",component:p("/docs/Automation_and_Robotics/MQTT/2022-06-23-instar-mqtt-python-part-I/2022-06-23","67f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/MQTT/2022-07-21-rust-hello-world/2022-07-21",component:p("/docs/Automation_and_Robotics/MQTT/2022-07-21-rust-hello-world/2022-07-21","f2a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/MQTT/2022-07-22-go-hello-world/2022-07-22",component:p("/docs/Automation_and_Robotics/MQTT/2022-07-22-go-hello-world/2022-07-22","ee0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/MQTT/2022-07-23-mosquitto-broker-compilation/2022-07-23",component:p("/docs/Automation_and_Robotics/MQTT/2022-07-23-mosquitto-broker-compilation/2022-07-23","b94"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/MQTT/2022-07-24-mosquitto-broker-cross-compilation/2022-07-24",component:p("/docs/Automation_and_Robotics/MQTT/2022-07-24-mosquitto-broker-cross-compilation/2022-07-24","859"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/MQTT/2023-07-25-emqx-mqtt-broker-docker/2023-07-25",component:p("/docs/Automation_and_Robotics/MQTT/2023-07-25-emqx-mqtt-broker-docker/2023-07-25","0e0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Robotics_Simulation/2023-11-19--ros2-gazebo-installation/2023-11-19",component:p("/docs/Automation_and_Robotics/Robotics_Simulation/2023-11-19--ros2-gazebo-installation/2023-11-19","67d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Robotics_Simulation/2023-11-24--ros2-graph/2023-11-24",component:p("/docs/Automation_and_Robotics/Robotics_Simulation/2023-11-24--ros2-graph/2023-11-24","905"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Robotics_Simulation/2023-11-26--ros2-gazebo-simulation/2023-11-26",component:p("/docs/Automation_and_Robotics/Robotics_Simulation/2023-11-26--ros2-gazebo-simulation/2023-11-26","762"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Robotics_Simulation/2023-11-26--ros2-webots/2023-11-26",component:p("/docs/Automation_and_Robotics/Robotics_Simulation/2023-11-26--ros2-webots/2023-11-26","483"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Automation_and_Robotics/Robotics_Simulation/2023-12-16--tellopy-drone-api/2023-12-16",component:p("/docs/Automation_and_Robotics/Robotics_Simulation/2023-12-16--tellopy-drone-api/2023-12-16","7fd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/aiops",component:p("/docs/category/aiops","542"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/ansible",component:p("/docs/category/ansible","e7e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/automation-deep-vision-and-robotics",component:p("/docs/category/automation-deep-vision-and-robotics","a48"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/development",component:p("/docs/category/development","089"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/devops",component:p("/docs/category/devops","440"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/elasticsearch",component:p("/docs/category/elasticsearch","941"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/gitops",component:p("/docs/category/gitops","280"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/go",component:p("/docs/category/go","685"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/graphs",component:p("/docs/category/graphs","2f5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/hashicorp",component:p("/docs/category/hashicorp","6e8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/home-automation",component:p("/docs/category/home-automation","a92"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/javascript",component:p("/docs/category/javascript","bb0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/kubernetes",component:p("/docs/category/kubernetes","9d7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/linux",component:p("/docs/category/linux","c77"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/machine-learning",component:p("/docs/category/machine-learning","8d4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/machine-learning-ai-and-computer-vision",component:p("/docs/category/machine-learning-ai-and-computer-vision","7a8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/magento",component:p("/docs/category/magento","1b3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/misc",component:p("/docs/category/misc","0b9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/mqtt",component:p("/docs/category/mqtt","23f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/nginx",component:p("/docs/category/nginx","512"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/python",component:p("/docs/category/python","5ff"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/react-native",component:p("/docs/category/react-native","fcf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/robotics--simulation",component:p("/docs/category/robotics--simulation","327"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/salt",component:p("/docs/category/salt","d21"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/server-provisioning",component:p("/docs/category/server-provisioning","04d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/server-security",component:p("/docs/category/server-security","1c1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/tomcat",component:p("/docs/category/tomcat","dd8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/windows",component:p("/docs/category/windows","2d2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/zabbix",component:p("/docs/category/zabbix","617"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Go/2021-02-21-gofiber-container-gatsby/2021-02-21",component:p("/docs/Development/Go/2021-02-21-gofiber-container-gatsby/2021-02-21","e63"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Go/2021-06-03--mqtt-with-golang/2021-06-03",component:p("/docs/Development/Go/2021-06-03--mqtt-with-golang/2021-06-03","390"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Go/2021-09-10--go-websockets/2021-09-10",component:p("/docs/Development/Go/2021-09-10--go-websockets/2021-09-10","a5a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Go/2021-09-11--golang-refresher-fmt-strings/2021-09-11",component:p("/docs/Development/Go/2021-09-11--golang-refresher-fmt-strings/2021-09-11","e6a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Go/2021-09-11--golang-refresher-math-os/2021-09-11",component:p("/docs/Development/Go/2021-09-11--golang-refresher-math-os/2021-09-11","76f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Go/2021-09-11--golang-refresher-network/2021-09-11",component:p("/docs/Development/Go/2021-09-11--golang-refresher-network/2021-09-11","968"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Go/2021-09-21--golang-react-starter-part-i/2021-09-21",component:p("/docs/Development/Go/2021-09-21--golang-react-starter-part-i/2021-09-21","269"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Go/2021-09-22--golang-react-starter-part-ii/2021-09-22",component:p("/docs/Development/Go/2021-09-22--golang-react-starter-part-ii/2021-09-22","b3f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Go/2021-09-23--golang-react-starter-part-iii/2021-09-23",component:p("/docs/Development/Go/2021-09-23--golang-react-starter-part-iii/2021-09-23","ebe"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Go/2021-09-24--golang-react-starter-part-iv/2021-09-24",component:p("/docs/Development/Go/2021-09-24--golang-react-starter-part-iv/2021-09-24","0c4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Go/2021-10-08--goftp/2021-10-08",component:p("/docs/Development/Go/2021-10-08--goftp/2021-10-08","5e3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Go/2022-06-15-wails-go-react/2022-06-15",component:p("/docs/Development/Go/2022-06-15-wails-go-react/2022-06-15","66c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Go/2022-10-04-go-ntp-client/2022-10-04",component:p("/docs/Development/Go/2022-10-04-go-ntp-client/2022-10-04","188"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Go/2022-10-05-go-reducing-binary-size/2022-10-05",component:p("/docs/Development/Go/2022-10-05-go-reducing-binary-size/2022-10-05","df1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Go/2022-10-15-go-oauth2-server/2022-10-15",component:p("/docs/Development/Go/2022-10-15-go-oauth2-server/2022-10-15","0fd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Go/2022-11-11-go-nts-client-ci/2022-11-11",component:p("/docs/Development/Go/2022-11-11-go-nts-client-ci/2022-11-11","0f2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Go/2022-12-26-go-webassembly/2022-12-26",component:p("/docs/Development/Go/2022-12-26-go-webassembly/2022-12-26","3b6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Go/2022-12-27-go-bubbles/2022-12-27",component:p("/docs/Development/Go/2022-12-27-go-bubbles/2022-12-27","938"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Go/2022-12-27-go-data-structures/2022-12-27",component:p("/docs/Development/Go/2022-12-27-go-data-structures/2022-12-27","34f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Graphs/2020-05-01--getting-to-know-neo4j/2020-05-01",component:p("/docs/Development/Graphs/2020-05-01--getting-to-know-neo4j/2020-05-01","85d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Graphs/2020-05-02--neo4j-movie-graph/2020-05-02",component:p("/docs/Development/Graphs/2020-05-02--neo4j-movie-graph/2020-05-02","8c7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Graphs/2020-05-03--neo4j-cheat-sheet/2020-05-03",component:p("/docs/Development/Graphs/2020-05-03--neo4j-cheat-sheet/2020-05-03","a0e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Graphs/2020-05-04--neo4j-corona-tracing/2020-05-04",component:p("/docs/Development/Graphs/2020-05-04--neo4j-corona-tracing/2020-05-04","af9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Graphs/2020-05-05--graphql-queries-and-mutations/2020-05-05",component:p("/docs/Development/Graphs/2020-05-05--graphql-queries-and-mutations/2020-05-05","8f8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2010-01-01--mdx/2010-01-01",component:p("/docs/Development/Javascript/2010-01-01--mdx/2010-01-01","90b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2010-01-05--markdown-live-code/2010-01-05",component:p("/docs/Development/Javascript/2010-01-05--markdown-live-code/2010-01-05","f6e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2016-05-27--javascript-apis-and-ajax/2016-05-27",component:p("/docs/Development/Javascript/2016-05-27--javascript-apis-and-ajax/2016-05-27","2e3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2016-06-01--node-express-mongodb/2016-06-01",component:p("/docs/Development/Javascript/2016-06-01--node-express-mongodb/2016-06-01","6d0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2016-08-11--node-express-static-wiki/2016-08-11",component:p("/docs/Development/Javascript/2016-08-11--node-express-static-wiki/2016-08-11","2c5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2017-07-04--random-password-generator/2017-07-04",component:p("/docs/Development/Javascript/2017-07-04--random-password-generator/2017-07-04","260"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2017-07-22--caloric-burn/2017-07-22",component:p("/docs/Development/Javascript/2017-07-22--caloric-burn/2017-07-22","979"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2017-07-24--obligatory-react-todo-list/2017-07-24",component:p("/docs/Development/Javascript/2017-07-24--obligatory-react-todo-list/2017-07-24","55e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2017-08-07--google-analytics-amp/2017-08-07",component:p("/docs/Development/Javascript/2017-08-07--google-analytics-amp/2017-08-07","98c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2017-08-15--gatsby-blog-starter/2017-08-15",component:p("/docs/Development/Javascript/2017-08-15--gatsby-blog-starter/2017-08-15","f2d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2017-08-21--reactive-material/2017-08-21",component:p("/docs/Development/Javascript/2017-08-21--reactive-material/2017-08-21","f16"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2017-09-03--react-under-the-hood/2017-09-03",component:p("/docs/Development/Javascript/2017-09-03--react-under-the-hood/2017-09-03","25b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2017-12-07--react-router-4/2017-12-07",component:p("/docs/Development/Javascript/2017-12-07--react-router-4/2017-12-07","13c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2017-12-09--next-start/2017-12-09",component:p("/docs/Development/Javascript/2017-12-09--next-start/2017-12-09","d58"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2017-12-14--gatsby-wiki/2017-12-14",component:p("/docs/Development/Javascript/2017-12-14--gatsby-wiki/2017-12-14","06a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2017-12-17--gatsby-reactstrap/2017-12-17",component:p("/docs/Development/Javascript/2017-12-17--gatsby-reactstrap/2017-12-17","9ab"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2018-01-07--gatsby-material-ui-starter/2018-01-07",component:p("/docs/Development/Javascript/2018-01-07--gatsby-material-ui-starter/2018-01-07","aa0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2018-01-15--react-transition-group-demo/2018-01-15",component:p("/docs/Development/Javascript/2018-01-15--react-transition-group-demo/2018-01-15","310"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2018-01-17--server-side-render-react-router/2018-01-17",component:p("/docs/Development/Javascript/2018-01-17--server-side-render-react-router/2018-01-17","f83"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2019-08-02--building-an-mqtt-interface/2019-08-02",component:p("/docs/Development/Javascript/2019-08-02--building-an-mqtt-interface/2019-08-02","278"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2020-01-12--node-express-redirect-server/2020-01-12",component:p("/docs/Development/Javascript/2020-01-12--node-express-redirect-server/2020-01-12","590"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2021-02-14-next-js-2021/2021-02-14",component:p("/docs/Development/Javascript/2021-02-14-next-js-2021/2021-02-14","6b9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2021-05-07-electron-cross-platform-apps/2021-05-07",component:p("/docs/Development/Javascript/2021-05-07-electron-cross-platform-apps/2021-05-07","6d9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2021-05-08-electron13-gatsby-wrapper/2021-05-08",component:p("/docs/Development/Javascript/2021-05-08-electron13-gatsby-wrapper/2021-05-08","01e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2021-05-09-electron13-and-react/2021-05-09",component:p("/docs/Development/Javascript/2021-05-09-electron13-and-react/2021-05-09","7dc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2021-05-10-carbon-design-react/2021-05-10",component:p("/docs/Development/Javascript/2021-05-10-carbon-design-react/2021-05-10","70f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2021-05-11-carbon-design-react-part2/2021-05-11",component:p("/docs/Development/Javascript/2021-05-11-carbon-design-react-part2/2021-05-11","815"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2021-05-12-carbon-design-react-part3/2021-05-12",component:p("/docs/Development/Javascript/2021-05-12-carbon-design-react-part3/2021-05-12","5ba"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2021-06-01--mqtt-with-reactjs/2021-06-01",component:p("/docs/Development/Javascript/2021-06-01--mqtt-with-reactjs/2021-06-01","e41"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2021-06-02--mqtt-cheat-sheet/2021-06-02",component:p("/docs/Development/Javascript/2021-06-02--mqtt-cheat-sheet/2021-06-02","876"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2021-06-04--mqtt-dashboard-react/2021-06-04",component:p("/docs/Development/Javascript/2021-06-04--mqtt-dashboard-react/2021-06-04","c09"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2021-09-07--intro-to-websockets/2021-09-07",component:p("/docs/Development/Javascript/2021-09-07--intro-to-websockets/2021-09-07","1c3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2021-09-08--websockets-html-video/2021-09-08",component:p("/docs/Development/Javascript/2021-09-08--websockets-html-video/2021-09-08","037"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2021-09-09--websocket-HAproxy/2021-09-09",component:p("/docs/Development/Javascript/2021-09-09--websocket-HAproxy/2021-09-09","136"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2021-09-09--websocket-NGINX/2021-09-09",component:p("/docs/Development/Javascript/2021-09-09--websocket-NGINX/2021-09-09","150"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2021-09-10--notifications-alerts-as-toast/2021-09-10",component:p("/docs/Development/Javascript/2021-09-10--notifications-alerts-as-toast/2021-09-10","b53"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2021-09-10--websocket-recconects/2021-09-10",component:p("/docs/Development/Javascript/2021-09-10--websocket-recconects/2021-09-10","3bf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2022-03-01--json-apis-training/2022-03-01",component:p("/docs/Development/Javascript/2022-03-01--json-apis-training/2022-03-01","2cf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2022-07-01-docusaurus-introduction/2022-07-01",component:p("/docs/Development/Javascript/2022-07-01-docusaurus-introduction/2022-07-01","b4d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2022-10-29-webrtc-introduction-realtime-chat/2022-10-29",component:p("/docs/Development/Javascript/2022-10-29-webrtc-introduction-realtime-chat/2022-10-29","fe9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2022-10-30-webrtc-introduction-video-chat-part1/2022-10-30",component:p("/docs/Development/Javascript/2022-10-30-webrtc-introduction-video-chat-part1/2022-10-30","12c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2022-11-10-webrtc-introduction-video-chat-part2/2022-11-10",component:p("/docs/Development/Javascript/2022-11-10-webrtc-introduction-video-chat-part2/2022-11-10","c0f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2022-11-19-web3-javascript-app/2022-11-19",component:p("/docs/Development/Javascript/2022-11-19-web3-javascript-app/2022-11-19","84b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2022-11-29-react-typescript-intro-2023/2022-11-29",component:p("/docs/Development/Javascript/2022-11-29-react-typescript-intro-2023/2022-11-29","91c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2022-12-11-11ty-starter/2022-12-11",component:p("/docs/Development/Javascript/2022-12-11-11ty-starter/2022-12-11","4e5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2022-12-29-reactive-search-starter/2022-12-29",component:p("/docs/Development/Javascript/2022-12-29-reactive-search-starter/2022-12-29","a4e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2023-02-12-react-meili-search-starter/2023-02-12",component:p("/docs/Development/Javascript/2023-02-12-react-meili-search-starter/2023-02-12","f56"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2023-02-13-gatsby-meili-search-starter/2023-02-13",component:p("/docs/Development/Javascript/2023-02-13-gatsby-meili-search-starter/2023-02-13","244"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2023-04-01-reactjs-2023/2023-04-01",component:p("/docs/Development/Javascript/2023-04-01-reactjs-2023/2023-04-01","f88"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2023-06-04-nodejs-typescript-sql/2023-06-04",component:p("/docs/Development/Javascript/2023-06-04-nodejs-typescript-sql/2023-06-04","78a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2023-06-12-typescript-2023/2023-06-12",component:p("/docs/Development/Javascript/2023-06-12-typescript-2023/2023-06-12","7f3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2023-06-12-typescript-pattern/2023-06-12",component:p("/docs/Development/Javascript/2023-06-12-typescript-pattern/2023-06-12","24e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2023-06-13-typescript-dom-webpack/2023-06-13",component:p("/docs/Development/Javascript/2023-06-13-typescript-dom-webpack/2023-06-13","dac"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2023-06-13-typescript-dom/2023-06-13",component:p("/docs/Development/Javascript/2023-06-13-typescript-dom/2023-06-13","55e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2023-12-14-reactjs-typescript-2023/2023-12-14",component:p("/docs/Development/Javascript/2023-12-14-reactjs-typescript-2023/2023-12-14","e1d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2023-12-15-reactjs-typescript-redux/2023-12-15",component:p("/docs/Development/Javascript/2023-12-15-reactjs-typescript-redux/2023-12-15","575"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2023-12-16-reactjs-hooks-typescript/2023-12-16",component:p("/docs/Development/Javascript/2023-12-16-reactjs-hooks-typescript/2023-12-16","38d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2023-12-18-reactjs-typescript-redux-toolkit/2023-12-18",component:p("/docs/Development/Javascript/2023-12-18-reactjs-typescript-redux-toolkit/2023-12-18","8d4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2023-12-19-react-query-typescript/2023-12-19",component:p("/docs/Development/Javascript/2023-12-19-react-query-typescript/2023-12-19","85e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2023-12-20-react-query-typescript/2023-12-20",component:p("/docs/Development/Javascript/2023-12-20-react-query-typescript/2023-12-20","0ca"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2023-12-21-react-query-tauri-elasticsearch/2023-12-21",component:p("/docs/Development/Javascript/2023-12-21-react-query-tauri-elasticsearch/2023-12-21","197"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2023-12-24-react-query-tauri-iot-ctrl/2023-12-21",component:p("/docs/Development/Javascript/2023-12-24-react-query-tauri-iot-ctrl/2023-12-21","9a7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2023-12-25-redux-toolkit/2023-12-25",component:p("/docs/Development/Javascript/2023-12-25-redux-toolkit/2023-12-25","81b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Javascript/2023-12-31-js-typescript-rest/2023-12-31",component:p("/docs/Development/Javascript/2023-12-31-js-typescript-rest/2023-12-31","594"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Magento/2019-09-07--magento-development-in-docker/2019-09-07",component:p("/docs/Development/Magento/2019-09-07--magento-development-in-docker/2019-09-07","373"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Magento/2019-09-10--magento2-docker-on-ubuntu/2019-09-10",component:p("/docs/Development/Magento/2019-09-10--magento2-docker-on-ubuntu/2019-09-10","cb4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Magento/2019-09-11--magento-on-debian-with-nginx/2019-09-11",component:p("/docs/Development/Magento/2019-09-11--magento-on-debian-with-nginx/2019-09-11","caf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Magento/2019-09-12--magento-and-elasticsearch/2019-09-12",component:p("/docs/Development/Magento/2019-09-12--magento-and-elasticsearch/2019-09-12","80a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Magento/2019-09-13--magento-and-varnish/2019-09-13",component:p("/docs/Development/Magento/2019-09-13--magento-and-varnish/2019-09-13","77f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Magento/2019-09-14--magento-and-themes/2019-09-14",component:p("/docs/Development/Magento/2019-09-14--magento-and-themes/2019-09-14","2e7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Magento/2019-09-15--updating-from-php70-to-php72/2019-09-15",component:p("/docs/Development/Magento/2019-09-15--updating-from-php70-to-php72/2019-09-15","4b1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Magento/2019-09-16--working-with-sql-dumps/2019-09-16",component:p("/docs/Development/Magento/2019-09-16--working-with-sql-dumps/2019-09-16","643"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Magento/2019-09-17--magento2-modules/2019-09-17",component:p("/docs/Development/Magento/2019-09-17--magento2-modules/2019-09-17","e26"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Magento/2019-09-18--magento2-cronjobs/2019-09-18",component:p("/docs/Development/Magento/2019-09-18--magento2-cronjobs/2019-09-18","17c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Magento/2019-09-19--magento2-console-commands/2019-09-19",component:p("/docs/Development/Magento/2019-09-19--magento2-console-commands/2019-09-19","e55"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Magento/2019-09-20--magento2-ui-components/2019-09-20",component:p("/docs/Development/Magento/2019-09-20--magento2-ui-components/2019-09-20","1fc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Magento/2019-09-21--magento2-docker-install/2019-09-21",component:p("/docs/Development/Magento/2019-09-21--magento2-docker-install/2019-09-21","158"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Magento/2019-09-21--magento2-google-analytics/2019-09-21",component:p("/docs/Development/Magento/2019-09-21--magento2-google-analytics/2019-09-21","945"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Magento/2020-12-07-google-analytics-g4-tag/2020-12-07",component:p("/docs/Development/Magento/2020-12-07-google-analytics-g4-tag/2020-12-07","a70"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Magento/2021-07-28--magento2-google-analytics-universal/2021-07-28",component:p("/docs/Development/Magento/2021-07-28--magento2-google-analytics-universal/2021-07-28","f74"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Misc/1980-01-01--dcs-f-14-tomcat/1980-01-01",component:p("/docs/Development/Misc/1980-01-01--dcs-f-14-tomcat/1980-01-01","48b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Misc/1980-01-02--dcs-su-25-t/1980-01-02",component:p("/docs/Development/Misc/1980-01-02--dcs-su-25-t/1980-01-02","f7f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Misc/2017-06-17--unreal-engine-coding-standards/2017-06-17",component:p("/docs/Development/Misc/2017-06-17--unreal-engine-coding-standards/2017-06-17","4b4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Misc/2023-01-20-pandoc-markup-converter/2023-01-20",component:p("/docs/Development/Misc/2023-01-20-pandoc-markup-converter/2023-01-20","66f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2017-12-11--getting-started-with-python/2017-12-11",component:p("/docs/Development/Python/2017-12-11--getting-started-with-python/2017-12-11","dee"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2017-12-13--getting-started-with-python-part-ii/2017-12-13",component:p("/docs/Development/Python/2017-12-13--getting-started-with-python-part-ii/2017-12-13","a23"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2017-12-17--python-ssh-logger/2017-12-17",component:p("/docs/Development/Python/2017-12-17--python-ssh-logger/2017-12-17","037"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2022-06-01-python-pyscript/2022-06-01",component:p("/docs/Development/Python/2022-06-01-python-pyscript/2022-06-01","912"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2022-06-27-python-web-scraping/2022-06-27",component:p("/docs/Development/Python/2022-06-27-python-web-scraping/2022-06-27","309"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2022-09-17-python-video-processing/2022-09-17",component:p("/docs/Development/Python/2022-09-17-python-video-processing/2022-09-17","e3f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2022-10-05-python-text-processing/2022-10-05",component:p("/docs/Development/Python/2022-10-05-python-text-processing/2022-10-05","b4b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2022-10-06-python-minify-text/2022-10-06",component:p("/docs/Development/Python/2022-10-06-python-minify-text/2022-10-06","5a0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2022-10-07-python-docusaurus-elasticsearch/2022-10-07",component:p("/docs/Development/Python/2022-10-07-python-docusaurus-elasticsearch/2022-10-07","8db"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2022-10-08-python-desktop-app/2022-10-08",component:p("/docs/Development/Python/2022-10-08-python-desktop-app/2022-10-08","d17"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2022-10-08-python-flask-app/2022-10-08",component:p("/docs/Development/Python/2022-10-08-python-flask-app/2022-10-08","cc5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2022-10-09-python-flask-elasticsearch/2022-10-09",component:p("/docs/Development/Python/2022-10-09-python-flask-elasticsearch/2022-10-09","21e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2022-10-10-python-filesystem/2022-10-10",component:p("/docs/Development/Python/2022-10-10-python-filesystem/2022-10-10","917"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2022-10-12-python-regular-expressions/2022-10-12",component:p("/docs/Development/Python/2022-10-12-python-regular-expressions/2022-10-12","5b9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2022-10-13-python-rest-api/2022-10-13",component:p("/docs/Development/Python/2022-10-13-python-rest-api/2022-10-13","37e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2022-10-14-python-rest-elastic/2022-10-14",component:p("/docs/Development/Python/2022-10-14-python-rest-elastic/2022-10-14","ed3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2022-10-15-python-rest-server/2022-10-15",component:p("/docs/Development/Python/2022-10-15-python-rest-server/2022-10-15","aa6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2022-10-22-python-nlp/2022-10-22",component:p("/docs/Development/Python/2022-10-22-python-nlp/2022-10-22","aa4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2022-12-11-pipenv/2022-12-11",component:p("/docs/Development/Python/2022-12-11-pipenv/2022-12-11","c6c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2023-01-16-python-3-11-features/2023-01-16",component:p("/docs/Development/Python/2023-01-16-python-3-11-features/2023-01-16","761"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2023-04-24-python-pandas-cheat-sheet/2023-04-24",component:p("/docs/Development/Python/2023-04-24-python-pandas-cheat-sheet/2023-04-24","bcf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2023-05-03-python-matplotlib-cheat-sheet/2023-05-03",component:p("/docs/Development/Python/2023-05-03-python-matplotlib-cheat-sheet/2023-05-03","5c7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2023-05-07-python-scipy-introduction/2023-05-07",component:p("/docs/Development/Python/2023-05-07-python-scipy-introduction/2023-05-07","364"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2023-05-07-python-seaborn-cheat-sheet/2023-05-07",component:p("/docs/Development/Python/2023-05-07-python-seaborn-cheat-sheet/2023-05-07","1e0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2023-05-10-plotly-COVID19-dataset/2023-05-10",component:p("/docs/Development/Python/2023-05-10-plotly-COVID19-dataset/2023-05-10","f6a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2023-05-12-matplotlib-seaborn-titanic-dataset/2023-05-12",component:p("/docs/Development/Python/2023-05-12-matplotlib-seaborn-titanic-dataset/2023-05-12","813"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2023-05-14-visualizing-text-datasets/2023-05-14",component:p("/docs/Development/Python/2023-05-14-visualizing-text-datasets/2023-05-14","74c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2023-05-16-seaborn-cc-churn-vis/2023-05-16",component:p("/docs/Development/Python/2023-05-16-seaborn-cc-churn-vis/2023-05-16","a7f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2023-05-17-fandango-ratings-controversy/2023-05-17",component:p("/docs/Development/Python/2023-05-17-fandango-ratings-controversy/2023-05-17","047"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2023-05-18-python-asserts/2023-05-18",component:p("/docs/Development/Python/2023-05-18-python-asserts/2023-05-18","f8d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2023-05-20-python-sklearn-cheat-sheet/2023-05-20",component:p("/docs/Development/Python/2023-05-20-python-sklearn-cheat-sheet/2023-05-20","525"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2023-05-28-telco-churn-cohort-study/2023-05-28",component:p("/docs/Development/Python/2023-05-28-telco-churn-cohort-study/2023-05-28","03f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2023-07-09-python-scikit-image-intro/2023-07-09",component:p("/docs/Development/Python/2023-07-09-python-scikit-image-intro/2023-07-09","664"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/Python/2023-08-14-python-scikit-image-opencv/2023-08-14",component:p("/docs/Development/Python/2023-08-14-python-scikit-image-opencv/2023-08-14","fc6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/ReactNative/2022-05-01-react-native-hello-world/2022-05-01",component:p("/docs/Development/ReactNative/2022-05-01-react-native-hello-world/2022-05-01","9d5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/ReactNative/2022-05-02-react-native-navigation/2022-05-02",component:p("/docs/Development/ReactNative/2022-05-02-react-native-navigation/2022-05-02","c6c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/ReactNative/2022-05-03-react-native-contextapi/2022-05-03",component:p("/docs/Development/ReactNative/2022-05-03-react-native-contextapi/2022-05-03","5fa"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/ReactNative/2022-05-04-react-native-hooks/2022-05-04",component:p("/docs/Development/ReactNative/2022-05-04-react-native-hooks/2022-05-04","1ef"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/ReactNative/2022-05-05-react-native-context-hooks/2022-05-05",component:p("/docs/Development/ReactNative/2022-05-05-react-native-context-hooks/2022-05-05","1ba"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/Development/ReactNative/2022-05-06-react-native-reducer/2022-05-06",component:p("/docs/Development/ReactNative/2022-05-06-react-native-reducer/2022-05-06","8b1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Ansible/2020-11-18--ansible-on-debian-buster/2020-11-18",component:p("/docs/DevOps/Ansible/2020-11-18--ansible-on-debian-buster/2020-11-18","b6e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Ansible/2020-11-19--ansible-playbooks/2020-11-19",component:p("/docs/DevOps/Ansible/2020-11-19--ansible-playbooks/2020-11-19","32d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Ansible/2020-11-20--ansible-copy-cheat-sheet/2020-11-20",component:p("/docs/DevOps/Ansible/2020-11-20--ansible-copy-cheat-sheet/2020-11-20","c58"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Ansible/2020-11-21--ansible-modules-and-roles/2020-11-21",component:p("/docs/DevOps/Ansible/2020-11-21--ansible-modules-and-roles/2020-11-21","97f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Ansible/2020-11-22--ansible-and-docker/2020-11-22",component:p("/docs/DevOps/Ansible/2020-11-22--ansible-and-docker/2020-11-22","5e4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Ansible/2020-11-23--ansible-getting-serious/2020-11-23",component:p("/docs/DevOps/Ansible/2020-11-23--ansible-getting-serious/2020-11-23","21f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Ansible/2020-11-24--ansible-vault-user-login/2020-11-24",component:p("/docs/DevOps/Ansible/2020-11-24--ansible-vault-user-login/2020-11-24","447"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Ansible/2020-11-25--ansible-in-gitlab-ci/2020-11-25",component:p("/docs/DevOps/Ansible/2020-11-25--ansible-in-gitlab-ci/2020-11-25","b59"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Ansible/2020-11-26--ansible-dind/2020-11-26",component:p("/docs/DevOps/Ansible/2020-11-26--ansible-dind/2020-11-26","b03"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Ansible/2021-04-28-ansible-tower-rhel/2021-04-28",component:p("/docs/DevOps/Ansible/2021-04-28-ansible-tower-rhel/2021-04-28","134"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Ansible/2021-04-29-ansible-tower-setup/2021-04-29",component:p("/docs/DevOps/Ansible/2021-04-29-ansible-tower-setup/2021-04-29","248"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Ansible/2021-04-30-ansible-tower-slack-notifications/2021-04-30",component:p("/docs/DevOps/Ansible/2021-04-30-ansible-tower-slack-notifications/2021-04-30","01c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Ansible/2021-05-01-ansible-tower-workflow-templates/2021-05-01",component:p("/docs/DevOps/Ansible/2021-05-01-ansible-tower-workflow-templates/2021-05-01","c22"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Ansible/2021-05-02-ansible-tower-examples/2021-05-02",component:p("/docs/DevOps/Ansible/2021-05-02-ansible-tower-examples/2021-05-02","3ee"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2017-10-03--search-engine-setup-and-configuration/2017-10-03",component:p("/docs/DevOps/Elasticsearch/2017-10-03--search-engine-setup-and-configuration/2017-10-03","157"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2017-12-05--elasticsearch-react-example/2017-12-05",component:p("/docs/DevOps/Elasticsearch/2017-12-05--elasticsearch-react-example/2017-12-05","23c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2017-12-26--elasticsearch-kibana/2017-12-16",component:p("/docs/DevOps/Elasticsearch/2017-12-26--elasticsearch-kibana/2017-12-16","960"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2017-12-31--securing-elasticsearch-xpack/2017-12-31",component:p("/docs/DevOps/Elasticsearch/2017-12-31--securing-elasticsearch-xpack/2017-12-31","1a3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2018-01-01--securing-elasticsearch-readonlyrest/2018-01-01",component:p("/docs/DevOps/Elasticsearch/2018-01-01--securing-elasticsearch-readonlyrest/2018-01-01","cc1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2019-09-08--elasticsearch_7-5_docker/2019-09-08",component:p("/docs/DevOps/Elasticsearch/2019-09-08--elasticsearch_7-5_docker/2019-09-08","fe2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2020-06-01--elasticsearch-docker/2020-06-01",component:p("/docs/DevOps/Elasticsearch/2020-06-01--elasticsearch-docker/2020-06-01","18a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2021-03-20-elasticsearch-7-refresher/2021-03-20",component:p("/docs/DevOps/Elasticsearch/2021-03-20-elasticsearch-7-refresher/2021-03-20","11a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2021-03-21-logstash-digesting-data/2021-03-21",component:p("/docs/DevOps/Elasticsearch/2021-03-21-logstash-digesting-data/2021-03-21","b6c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2021-03-22-logstash-working-with-structured-data/2021-03-22",component:p("/docs/DevOps/Elasticsearch/2021-03-22-logstash-working-with-structured-data/2021-03-22","f96"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2021-03-23-logstash-working-with-unstructured-data/2021-03-23",component:p("/docs/DevOps/Elasticsearch/2021-03-23-logstash-working-with-unstructured-data/2021-03-23","7f8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2021-03-24-logstash-common-grok-pattern/2021-03-24",component:p("/docs/DevOps/Elasticsearch/2021-03-24-logstash-common-grok-pattern/2021-03-24","49b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/2021-03-25",component:p("/docs/DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/2021-03-25","de4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/elasticsearch-cheat-sheet",component:p("/docs/DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/elasticsearch-cheat-sheet","fdf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2021-03-26-elasticsearch7-for-syslog-messages/2021-03-26",component:p("/docs/DevOps/Elasticsearch/2021-03-26-elasticsearch7-for-syslog-messages/2021-03-26","4a0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2021-03-27-elasticsearch7-aggregations/2021-03-27",component:p("/docs/DevOps/Elasticsearch/2021-03-27-elasticsearch7-aggregations/2021-03-27","2c0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2021-03-28-elasticsearch7-timeseries/2021-03-28",component:p("/docs/DevOps/Elasticsearch/2021-03-28-elasticsearch7-timeseries/2021-03-28","35c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2021-03-29-elasticsearch7-data-transformations/2021-03-29",component:p("/docs/DevOps/Elasticsearch/2021-03-29-elasticsearch7-data-transformations/2021-03-29","695"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2021-03-30-elasticsearch7-and-filebeats/2021-03-30",component:p("/docs/DevOps/Elasticsearch/2021-03-30-elasticsearch7-and-filebeats/2021-03-30","425"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2021-03-31-elastic-filebeats-for-apache-logs/2021-03-31",component:p("/docs/DevOps/Elasticsearch/2021-03-31-elastic-filebeats-for-apache-logs/2021-03-31","879"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2021-04-01-elastic-filebeats-for-nginx-logs/2021-04-01",component:p("/docs/DevOps/Elasticsearch/2021-04-01-elastic-filebeats-for-nginx-logs/2021-04-01","fe4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2022-02-02--elasticsearch-v8-upgrade/2022-02-02",component:p("/docs/DevOps/Elasticsearch/2022-02-02--elasticsearch-v8-upgrade/2022-02-02","f85"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2022-02-03--elasticsearch-v8-data-ingestion/2022-02-03",component:p("/docs/DevOps/Elasticsearch/2022-02-03--elasticsearch-v8-data-ingestion/2022-02-03","f9d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2022-02-04--kibana-v8-search-queries/2022-02-04",component:p("/docs/DevOps/Elasticsearch/2022-02-04--kibana-v8-search-queries/2022-02-04","f21"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2022-02-05--kibana-v8-index-management/2022-02-05",component:p("/docs/DevOps/Elasticsearch/2022-02-05--kibana-v8-index-management/2022-02-05","2ed"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2022-02-06--elasticsearch-v8-data-ingestion-apache/2022-02-06",component:p("/docs/DevOps/Elasticsearch/2022-02-06--elasticsearch-v8-data-ingestion-apache/2022-02-06","c9d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2022-10-11--opensearch-docker-compose/2022-10-11",component:p("/docs/DevOps/Elasticsearch/2022-10-11--opensearch-docker-compose/2022-10-11","e63"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2022-10-12--opensearch-rest-api/2022-10-12",component:p("/docs/DevOps/Elasticsearch/2022-10-12--opensearch-rest-api/2022-10-12","5ae"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Elasticsearch/2023-02-10--meili-rusty-elastic-docker/2023-02-10",component:p("/docs/DevOps/Elasticsearch/2023-02-10--meili-rusty-elastic-docker/2023-02-10","b47"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/GitOps/2020-02-01--gitlab-in-podman-on-centos8/2020-02-01",component:p("/docs/DevOps/GitOps/2020-02-01--gitlab-in-podman-on-centos8/2020-02-01","ccf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/GitOps/2020-02-02--docker-images-in-gitlab/2020-02-02",component:p("/docs/DevOps/GitOps/2020-02-02--docker-images-in-gitlab/2020-02-02","39c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/GitOps/2020-08-01--gitlab-install-on-ubuntu-server/2020-08-01",component:p("/docs/DevOps/GitOps/2020-08-01--gitlab-install-on-ubuntu-server/2020-08-01","b9a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/GitOps/2020-08-02--gitlab-setup/2020-08-02",component:p("/docs/DevOps/GitOps/2020-08-02--gitlab-setup/2020-08-02","748"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/GitOps/2020-08-03--gitlab-as-docker-registry/2020-08-03",component:p("/docs/DevOps/GitOps/2020-08-03--gitlab-as-docker-registry/2020-08-03","2db"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/GitOps/2020-08-04--working-with-gitlab/2020-08-04",component:p("/docs/DevOps/GitOps/2020-08-04--working-with-gitlab/2020-08-04","9e9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/GitOps/2021-02-25-gatsby-build-gitlab-pipeline/2021-02-25",component:p("/docs/DevOps/GitOps/2021-02-25-gatsby-build-gitlab-pipeline/2021-02-25","604"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/GitOps/2022-03-16--gitlab-docker-compose-on-localhost/2022-03-16",component:p("/docs/DevOps/GitOps/2022-03-16--gitlab-docker-compose-on-localhost/2022-03-16","598"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/GitOps/2022-11-10-go-gitlab-ci-pipeline/2022-11-10",component:p("/docs/DevOps/GitOps/2022-11-10-go-gitlab-ci-pipeline/2022-11-10","7aa"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/GitOps/2023-10-28-github-passkey/2023-10-28",component:p("/docs/DevOps/GitOps/2023-10-28-github-passkey/2023-10-28","1fa"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2020-08-15--installing-nomad-ubuntu/2020-08-15",component:p("/docs/DevOps/Hashicorp/2020-08-15--installing-nomad-ubuntu/2020-08-15","a86"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2020-08-16--nomad-cluster/2020-08-16",component:p("/docs/DevOps/Hashicorp/2020-08-16--nomad-cluster/2020-08-16","c1f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2020-08-17--installing-consul-ubuntu/2020-08-17",component:p("/docs/DevOps/Hashicorp/2020-08-17--installing-consul-ubuntu/2020-08-17","cb5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2020-08-18--consul-mock-datacenter/2020-08-19",component:p("/docs/DevOps/Hashicorp/2020-08-18--consul-mock-datacenter/2020-08-19","dde"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2020-08-18--consul-service-mesh/2020-08-18",component:p("/docs/DevOps/Hashicorp/2020-08-18--consul-service-mesh/2020-08-18","29f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2020-08-19--consul-deployment-guide/2020-08-19",component:p("/docs/DevOps/Hashicorp/2020-08-19--consul-deployment-guide/2020-08-19","34c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2020-10-23--hashicorp-packer-machine-image/2020-10-23",component:p("/docs/DevOps/Hashicorp/2020-10-23--hashicorp-packer-machine-image/2020-10-23","a14"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2020-10-24--hashicorp-packer-and-virtualbox-preseed/2020-10-24",component:p("/docs/DevOps/Hashicorp/2020-10-24--hashicorp-packer-and-virtualbox-preseed/2020-10-24","503"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2020-10-25--hashicorp-packer-and-virtualbox-autoinstall/2020-10-25",component:p("/docs/DevOps/Hashicorp/2020-10-25--hashicorp-packer-and-virtualbox-autoinstall/2020-10-25","c95"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2020-10-26--hashicorp-packer-provisioner/2020-10-26",component:p("/docs/DevOps/Hashicorp/2020-10-26--hashicorp-packer-provisioner/2020-10-26","9ba"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2021-08-01--hashicorp-nomad-refresher/2021-08-01",component:p("/docs/DevOps/Hashicorp/2021-08-01--hashicorp-nomad-refresher/2021-08-01","e18"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2021-08-02--hashicorp-nomad-security/2021-08-02",component:p("/docs/DevOps/Hashicorp/2021-08-02--hashicorp-nomad-security/2021-08-02","fef"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2021-08-03--hashicorp-nomad-jobs/2021-08-03",component:p("/docs/DevOps/Hashicorp/2021-08-03--hashicorp-nomad-jobs/2021-08-03","083"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2021-08-04--hashicorp-nomad-job-specifications/2021-08-04",component:p("/docs/DevOps/Hashicorp/2021-08-04--hashicorp-nomad-job-specifications/2021-08-04","906"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2021-08-05--hashicorp-consul-service-discovery/2021-08-05",component:p("/docs/DevOps/Hashicorp/2021-08-05--hashicorp-consul-service-discovery/2021-08-05","d6a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2021-08-06--hashicorp-consul-fabio-loadbalancing/2021-08-06",component:p("/docs/DevOps/Hashicorp/2021-08-06--hashicorp-consul-fabio-loadbalancing/2021-08-06","a06"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2021-08-06--hashicorp-consul-traefik-loadbalancing/2021-08-06",component:p("/docs/DevOps/Hashicorp/2021-08-06--hashicorp-consul-traefik-loadbalancing/2021-08-06","f86"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2021-08-07--hashicorp-nomad-job-configuration/2021-08-07",component:p("/docs/DevOps/Hashicorp/2021-08-07--hashicorp-nomad-job-configuration/2021-08-07","6d9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2021-08-08--hashicorp-nomad-access-control-lists/2021-08-08",component:p("/docs/DevOps/Hashicorp/2021-08-08--hashicorp-nomad-access-control-lists/2021-08-08","7b7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2021-08-09--hashicorp-consul-services/2021-08-09",component:p("/docs/DevOps/Hashicorp/2021-08-09--hashicorp-consul-services/2021-08-09","353"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2021-08-10--hashicorp-consul-key-value-store/2021-08-10",component:p("/docs/DevOps/Hashicorp/2021-08-10--hashicorp-consul-key-value-store/2021-08-10","272"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2021-08-11--hashicorp-consul-backups/2021-08-11",component:p("/docs/DevOps/Hashicorp/2021-08-11--hashicorp-consul-backups/2021-08-11","862"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2021-08-12--hashicorp-consul-service-mesh/2021-08-12",component:p("/docs/DevOps/Hashicorp/2021-08-12--hashicorp-consul-service-mesh/2021-08-12","555"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2021-08-13--hashicorp-consul-access-control-lists/2021-08-13",component:p("/docs/DevOps/Hashicorp/2021-08-13--hashicorp-consul-access-control-lists/2021-08-13","e6e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2021-08-14--hashicorp-consul-tls-encryption/2021-08-14",component:p("/docs/DevOps/Hashicorp/2021-08-14--hashicorp-consul-tls-encryption/2021-08-14","359"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2021-08-20--hashicorp-vault-setup/2021-08-20",component:p("/docs/DevOps/Hashicorp/2021-08-20--hashicorp-vault-setup/2021-08-20","db4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2021-08-21--hashicorp-vault-secrets-tokens/2021-08-21",component:p("/docs/DevOps/Hashicorp/2021-08-21--hashicorp-vault-secrets-tokens/2021-08-21","824"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2021-08-22--hashicorp-vault-policies/2021-08-22",component:p("/docs/DevOps/Hashicorp/2021-08-22--hashicorp-vault-policies/2021-08-22","86c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2021-08-23--hashicorp-vault-rest-api/2021-08-23",component:p("/docs/DevOps/Hashicorp/2021-08-23--hashicorp-vault-rest-api/2021-08-23","3b7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2021-08-25--hashicorp-vault-logging/2021-08-25",component:p("/docs/DevOps/Hashicorp/2021-08-25--hashicorp-vault-logging/2021-08-25","392"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2021-09-05--hashicorp-terraform-setup/2021-09-05",component:p("/docs/DevOps/Hashicorp/2021-09-05--hashicorp-terraform-setup/2021-09-05","e0d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2021-09-06--hashicorp-terraform-providers-variables-attributes/2021-09-07",component:p("/docs/DevOps/Hashicorp/2021-09-06--hashicorp-terraform-providers-variables-attributes/2021-09-07","c30"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2021-10-10--hashicorp-nomad-in-production/2021-10-10",component:p("/docs/DevOps/Hashicorp/2021-10-10--hashicorp-nomad-in-production/2021-10-10","bc7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2021-10-11--hashicorp-consul-in-production/2021-10-11",component:p("/docs/DevOps/Hashicorp/2021-10-11--hashicorp-consul-in-production/2021-10-11","9b7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-05-15-hashicorp-nomad-refresher/2022-05-15",component:p("/docs/DevOps/Hashicorp/2022-05-15-hashicorp-nomad-refresher/2022-05-15","24e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-05-16-hashicorp-dojo-nomad-starter/2022-05-16",component:p("/docs/DevOps/Hashicorp/2022-05-16-hashicorp-dojo-nomad-starter/2022-05-16","93a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-05-17-hashicorp-dojo-nomad-deployment/2022-05-17",component:p("/docs/DevOps/Hashicorp/2022-05-17-hashicorp-dojo-nomad-deployment/2022-05-17","a85"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-05-18-hashicorp-dojo-nomad-adding-encryption/2022-05-18",component:p("/docs/DevOps/Hashicorp/2022-05-18-hashicorp-dojo-nomad-adding-encryption/2022-05-18","f41"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-05-19-hashicorp-dojo-nomad-access-control/2022-05-19",component:p("/docs/DevOps/Hashicorp/2022-05-19-hashicorp-dojo-nomad-access-control/2022-05-19","8a2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-05-20-hashicorp-dojo-nomad-consul/2022-05-20",component:p("/docs/DevOps/Hashicorp/2022-05-20-hashicorp-dojo-nomad-consul/2022-05-20","4f1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-05-21-hashicorp-dojo-consul-refresher/2022-05-21",component:p("/docs/DevOps/Hashicorp/2022-05-21-hashicorp-dojo-consul-refresher/2022-05-21","972"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-05-22-hashicorp-dojo-nomad-consul-part-2/2022-05-22",component:p("/docs/DevOps/Hashicorp/2022-05-22-hashicorp-dojo-nomad-consul-part-2/2022-05-22","594"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-05-24-hashicorp-nomad-with-nginx/2022-05-24",component:p("/docs/DevOps/Hashicorp/2022-05-24-hashicorp-nomad-with-nginx/2022-05-24","582"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-05-25-hashicorp-nomad-with-gitlab/2022-05-25",component:p("/docs/DevOps/Hashicorp/2022-05-25-hashicorp-nomad-with-gitlab/2022-05-25","972"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-05-26-hashicorp-nomad-with-gitlab-part-2/2022-05-26",component:p("/docs/DevOps/Hashicorp/2022-05-26-hashicorp-nomad-with-gitlab-part-2/2022-05-26","59f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-05-27-hashicorp-nomad-for-elastic/2022-05-27",component:p("/docs/DevOps/Hashicorp/2022-05-27-hashicorp-nomad-for-elastic/2022-05-27","22b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-05-28-hashicorp-nomad-for-elastic-part-2/2022-05-28",component:p("/docs/DevOps/Hashicorp/2022-05-28-hashicorp-nomad-for-elastic-part-2/2022-05-28","b68"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-05-29-hashicorp-nomad-with-nginx-loadbalancer/2022-05-29",component:p("/docs/DevOps/Hashicorp/2022-05-29-hashicorp-nomad-with-nginx-loadbalancer/2022-05-29","779"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-06-07-hashicorp-waypoint-docker/2022-06-07",component:p("/docs/DevOps/Hashicorp/2022-06-07-hashicorp-waypoint-docker/2022-06-07","d90"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-06-08-hashicorp-waypoint-nomad/2022-06-09",component:p("/docs/DevOps/Hashicorp/2022-06-08-hashicorp-waypoint-nomad/2022-06-09","71d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-09-22--nomad-nts-timeserver/2022-09-22",component:p("/docs/DevOps/Hashicorp/2022-09-22--nomad-nts-timeserver/2022-09-22","af3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-09-24--nomad-nginx-ingress/2022-09-24",component:p("/docs/DevOps/Hashicorp/2022-09-24--nomad-nginx-ingress/2022-09-24","291"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-10-21-hashicorp-nomad-for-osticket-part-i/2022-10-21",component:p("/docs/DevOps/Hashicorp/2022-10-21-hashicorp-nomad-for-osticket-part-i/2022-10-21","985"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-10-22-hashicorp-nomad-sidecar-pattern/2022-10-22",component:p("/docs/DevOps/Hashicorp/2022-10-22-hashicorp-nomad-sidecar-pattern/2022-10-22","ac8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-10-23-hashicorp-consul-connect/2022-10-23",component:p("/docs/DevOps/Hashicorp/2022-10-23-hashicorp-consul-connect/2022-10-23","1cd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-10-23-hashicorp-nomad-ports/2022-10-23",component:p("/docs/DevOps/Hashicorp/2022-10-23-hashicorp-nomad-ports/2022-10-23","155"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-10-25-hashicorp-nomad-for-osticket-part-ii/2022-10-25",component:p("/docs/DevOps/Hashicorp/2022-10-25-hashicorp-nomad-for-osticket-part-ii/2022-10-25","c3e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-11-11-hashicorp-nomad-for-borg-backups/2022-11-11",component:p("/docs/DevOps/Hashicorp/2022-11-11-hashicorp-nomad-for-borg-backups/2022-11-11","48e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-11-12-hashicorp-nomad-certbot-renewal/2022-11-12",component:p("/docs/DevOps/Hashicorp/2022-11-12-hashicorp-nomad-certbot-renewal/2022-11-12","0c3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-11-15-hashicorp-nomad-balanced-nts/2022-11-15",component:p("/docs/DevOps/Hashicorp/2022-11-15-hashicorp-nomad-balanced-nts/2022-11-15","dbe"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-11-15-hashicorp-nomad-nginx-load-balancing/2022-11-15",component:p("/docs/DevOps/Hashicorp/2022-11-15-hashicorp-nomad-nginx-load-balancing/2022-11-15","03b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-11-16-hashicorp-nomad-mautic/2022-11-16",component:p("/docs/DevOps/Hashicorp/2022-11-16-hashicorp-nomad-mautic/2022-11-16","2c8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-11-18-hashicorp-nomad-grav/2022-11-18",component:p("/docs/DevOps/Hashicorp/2022-11-18-hashicorp-nomad-grav/2022-11-18","e89"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-11-24-hashicorp-consul-connect/2022-11-24",component:p("/docs/DevOps/Hashicorp/2022-11-24-hashicorp-consul-connect/2022-11-24","b91"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-12-03-hashicorp-vault-installation/2022-12-03",component:p("/docs/DevOps/Hashicorp/2022-12-03-hashicorp-vault-installation/2022-12-03","e36"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-12-04-hashicorp-consul-vault-certificates-part1/2022-12-04",component:p("/docs/DevOps/Hashicorp/2022-12-04-hashicorp-consul-vault-certificates-part1/2022-12-04","c4a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part2/2022-12-05",component:p("/docs/DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part2/2022-12-05","c92"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part3/2022-12-05",component:p("/docs/DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part3/2022-12-05","0b1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2022-12-07-hashicorp-vault-ca-certificates/2022-12-07",component:p("/docs/DevOps/Hashicorp/2022-12-07-hashicorp-vault-ca-certificates/2022-12-07","bc1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2023-10-22-hashicorp-terraform-docker-2023/2023-10-22",component:p("/docs/DevOps/Hashicorp/2023-10-22-hashicorp-terraform-docker-2023/2023-10-22","918"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2023-12-22-hashicorp-terraform-docker-2024/2023-12-22",component:p("/docs/DevOps/Hashicorp/2023-12-22-hashicorp-terraform-docker-2024/2023-12-22","e8e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Hashicorp/2023-12-23-opentofu-vs-terraform/2023-12-22",component:p("/docs/DevOps/Hashicorp/2023-12-23-opentofu-vs-terraform/2023-12-22","f8d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Kubernetes/2019-01-02--managing-containers-in-kubernetes/2019-01-02",component:p("/docs/DevOps/Kubernetes/2019-01-02--managing-containers-in-kubernetes/2019-01-02","1b8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Kubernetes/2019-01-15--creating-a-kubernetes-cluster/2019-01-15",component:p("/docs/DevOps/Kubernetes/2019-01-15--creating-a-kubernetes-cluster/2019-01-15","5fd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Kubernetes/2019-01-17--kubernetes-and-microservices/2019-01-17",component:p("/docs/DevOps/Kubernetes/2019-01-17--kubernetes-and-microservices/2019-01-17","162"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Kubernetes/2019-01-19--kubernetes-cluster-logging/2019-01-19",component:p("/docs/DevOps/Kubernetes/2019-01-19--kubernetes-cluster-logging/2019-01-19","80d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Kubernetes/2019-01-21--kubernetes-bare-metal-ingress/2019-01-21",component:p("/docs/DevOps/Kubernetes/2019-01-21--kubernetes-bare-metal-ingress/2019-01-21","a07"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Kubernetes/2019-01-21--kubernetes-nginx-https-service/2019-01-21",component:p("/docs/DevOps/Kubernetes/2019-01-21--kubernetes-nginx-https-service/2019-01-21","ad2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Kubernetes/2019-01-22--kubernetes-nginx-ingress/2019-01-22",component:p("/docs/DevOps/Kubernetes/2019-01-22--kubernetes-nginx-ingress/2019-01-22","7e9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Kubernetes/2019-01-27--kubernetes-the-chinese-way/2019-01-27",component:p("/docs/DevOps/Kubernetes/2019-01-27--kubernetes-the-chinese-way/2019-01-27","82b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Kubernetes/2019-02-01--kubernetes-traefik-ingress/2019-02-01",component:p("/docs/DevOps/Kubernetes/2019-02-01--kubernetes-traefik-ingress/2019-02-01","6ef"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Kubernetes/2019-03-02--installing-openshift-3-on-centos-7/2019-03-02",component:p("/docs/DevOps/Kubernetes/2019-03-02--installing-openshift-3-on-centos-7/2019-03-02","dd8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Kubernetes/2019-03-05--first-openshift3-cluster/2019-03-05",component:p("/docs/DevOps/Kubernetes/2019-03-05--first-openshift3-cluster/2019-03-05","209"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Kubernetes/2022-11-19--k3s-air-gapped-kubernetes/2022-11-19",component:p("/docs/DevOps/Kubernetes/2022-11-19--k3s-air-gapped-kubernetes/2022-11-19","b49"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2018-10-27--red-hat-certified-engineer-rhce/2018-10-27",component:p("/docs/DevOps/Linux/2018-10-27--red-hat-certified-engineer-rhce/2018-10-27","755"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2019-01-11--debian-change-ssh-port-hostname/2019-01-11",component:p("/docs/DevOps/Linux/2019-01-11--debian-change-ssh-port-hostname/2019-01-11","57c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2019-01-11--root-access-ubuntu-server/2019-01-11",component:p("/docs/DevOps/Linux/2019-01-11--root-access-ubuntu-server/2019-01-11","d1a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2019-01-11--ubuntu-network-configuration/2019-01-11",component:p("/docs/DevOps/Linux/2019-01-11--ubuntu-network-configuration/2019-01-11","abe"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2019-01-11--ubuntu-server-app-armour/2019-01-11",component:p("/docs/DevOps/Linux/2019-01-11--ubuntu-server-app-armour/2019-01-11","5a4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2019-01-12--centos-network-configuration/2019-01-12",component:p("/docs/DevOps/Linux/2019-01-12--centos-network-configuration/2019-01-12","f44"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2019-01-13--centos-administration/2019-01-13",component:p("/docs/DevOps/Linux/2019-01-13--centos-administration/2019-01-13","15b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2019-06-07--installing-docker-on-centos8/2019-06-07",component:p("/docs/DevOps/Linux/2019-06-07--installing-docker-on-centos8/2019-06-07","22c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2019-06-14--download-and-save-docker-image/2019-06-14",component:p("/docs/DevOps/Linux/2019-06-14--download-and-save-docker-image/2019-06-14","781"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2019-06-17--working-with-tmux/2019-06-17",component:p("/docs/DevOps/Linux/2019-06-17--working-with-tmux/2019-06-17","3af"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2019-09-22--centos8-network-config/2019-09-22",component:p("/docs/DevOps/Linux/2019-09-22--centos8-network-config/2019-09-22","a3f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2019-09-22--zsh-on-centos8/2019-09-22",component:p("/docs/DevOps/Linux/2019-09-22--zsh-on-centos8/2019-09-22","4c7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2019-09-22--zsh-on-ubuntu20/2019-09-22",component:p("/docs/DevOps/Linux/2019-09-22--zsh-on-ubuntu20/2019-09-22","0da"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2019-09-25--podman-cheat-sheet/2019-09-25",component:p("/docs/DevOps/Linux/2019-09-25--podman-cheat-sheet/2019-09-25","f88"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2019-09-26--kali-docker-windows/2019-09-26",component:p("/docs/DevOps/Linux/2019-09-26--kali-docker-windows/2019-09-26","0e5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2019-12-03--podman-ftp-server-container/2019-12-03",component:p("/docs/DevOps/Linux/2019-12-03--podman-ftp-server-container/2019-12-03","ccf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2020-01-05--centos8-cockpit/2020-01-05",component:p("/docs/DevOps/Linux/2020-01-05--centos8-cockpit/2020-01-05","36c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2020-01-07--centos8-firewalld/2020-01-05",component:p("/docs/DevOps/Linux/2020-01-07--centos8-firewalld/2020-01-05","a53"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2020-10-13--smarttools-centos/2020-10-13",component:p("/docs/DevOps/Linux/2020-10-13--smarttools-centos/2020-10-13","7da"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2020-10-20--activating-root-login-ubuntu-20-10/2020-10-20",component:p("/docs/DevOps/Linux/2020-10-20--activating-root-login-ubuntu-20-10/2020-10-20","e9e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2021-03-15-debian-upgrade-bullseye/2021-03-15",component:p("/docs/DevOps/Linux/2021-03-15-debian-upgrade-bullseye/2021-03-15","8a1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2021-04-11-installing-free-red-hat-enterprise-linux/2021-04-11",component:p("/docs/DevOps/Linux/2021-04-11-installing-free-red-hat-enterprise-linux/2021-04-11","8b1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2021-04-12-gnome3-cheat-sheet/2021-04-12",component:p("/docs/DevOps/Linux/2021-04-12-gnome3-cheat-sheet/2021-04-12","255"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2021-04-13-installing-kvm-on-red-hat-enterprise-linux/2021-04-13",component:p("/docs/DevOps/Linux/2021-04-13-installing-kvm-on-red-hat-enterprise-linux/2021-04-13","2d7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2021-04-14-using-deb-files-on-rhel8/2021-04-14",component:p("/docs/DevOps/Linux/2021-04-14-using-deb-files-on-rhel8/2021-04-14","062"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2021-09-01--kali-linux-raspberry-pi/2021-09-01",component:p("/docs/DevOps/Linux/2021-09-01--kali-linux-raspberry-pi/2021-09-01","7e6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2021-09-02--openwrt-raspberry-pi/2021-09-02",component:p("/docs/DevOps/Linux/2021-09-02--openwrt-raspberry-pi/2021-09-02","424"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2021-10-09--editor-from-hell/2021-10-09",component:p("/docs/DevOps/Linux/2021-10-09--editor-from-hell/2021-10-09","769"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2021-10-09--the-friendly-editor/2021-10-09",component:p("/docs/DevOps/Linux/2021-10-09--the-friendly-editor/2021-10-09","863"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2021-10-23--arch-linux-install-packages/2021-10-23",component:p("/docs/DevOps/Linux/2021-10-23--arch-linux-install-packages/2021-10-23","b08"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2021-10-24--arch-linux-install-docker/2021-10-24",component:p("/docs/DevOps/Linux/2021-10-24--arch-linux-install-docker/2021-10-24","508"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2021-10-24--arch-linux-install-mesen/2021-10-24",component:p("/docs/DevOps/Linux/2021-10-24--arch-linux-install-mesen/2021-10-24","e9b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2021-10-26--install-davinci-resolve-on-arch/2021-10-26",component:p("/docs/DevOps/Linux/2021-10-26--install-davinci-resolve-on-arch/2021-10-26","b70"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2022-03-07--ffmpeg-cheat-sheet/2022-03-07",component:p("/docs/DevOps/Linux/2022-03-07--ffmpeg-cheat-sheet/2022-03-07","926"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2022-03-08--arch-kde-fritz-vpn/2022-03-08",component:p("/docs/DevOps/Linux/2022-03-08--arch-kde-fritz-vpn/2022-03-08","112"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2022-03-09--fing-cli-network-scanner/2022-03-09",component:p("/docs/DevOps/Linux/2022-03-09--fing-cli-network-scanner/2022-03-09","6da"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2022-03-10--nmap-network-scanner/2022-03-10",component:p("/docs/DevOps/Linux/2022-03-10--nmap-network-scanner/2022-03-10","edc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2022-09-15--ntp-over-nts-timeserver/2022-09-21",component:p("/docs/DevOps/Linux/2022-09-15--ntp-over-nts-timeserver/2022-09-21","a97"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2022-09-28--nts-client-setup/2022-09-28",component:p("/docs/DevOps/Linux/2022-09-28--nts-client-setup/2022-09-28","f4a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2022-09-29--build-an-chrony-nts-client-from-source/2022-09-29",component:p("/docs/DevOps/Linux/2022-09-29--build-an-chrony-nts-client-from-source/2022-09-29","8d2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2022-11-04--check-filesystem/2022-11-04",component:p("/docs/DevOps/Linux/2022-11-04--check-filesystem/2022-11-04","42d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2022-11-09--docker-borg-backupserver/2022-11-09",component:p("/docs/DevOps/Linux/2022-11-09--docker-borg-backupserver/2022-11-09","0b1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2023-02-03--installing-docker-raspberry-pi/2023-02-03",component:p("/docs/DevOps/Linux/2023-02-03--installing-docker-raspberry-pi/2023-02-03","0a9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2023-03-29--installing-the-elgato-streamdeck/2023-03-29",component:p("/docs/DevOps/Linux/2023-03-29--installing-the-elgato-streamdeck/2023-03-29","1ae"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2023-10-28--lunarvim/2023-10-28",component:p("/docs/DevOps/Linux/2023-10-28--lunarvim/2023-10-28","54c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Linux/2024-01-08--vsftp-ubuntu/2024-01-08",component:p("/docs/DevOps/Linux/2024-01-08--vsftp-ubuntu/2024-01-08","2cc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/NGINX/2017-10-01--using-nginx-as-proxy-for-your-nodejs-apps/2017-10-01",component:p("/docs/DevOps/NGINX/2017-10-01--using-nginx-as-proxy-for-your-nodejs-apps/2017-10-01","76a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/NGINX/2017-12-24--nginx-node-security/2017-12-24",component:p("/docs/DevOps/NGINX/2017-12-24--nginx-node-security/2017-12-24","961"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/NGINX/2019-02-05--nginx-ingress-cert-manager/2019-02-05",component:p("/docs/DevOps/NGINX/2019-02-05--nginx-ingress-cert-manager/2019-02-05","b37"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/NGINX/2019-11-07--nginx-rtmp-streaming-container/2019-11-07",component:p("/docs/DevOps/NGINX/2019-11-07--nginx-rtmp-streaming-container/2019-11-07","881"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/NGINX/2019-11-08--nginx-rtmp-website/2019-11-08",component:p("/docs/DevOps/NGINX/2019-11-08--nginx-rtmp-website/2019-11-08","456"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/NGINX/2020-07-29--securing-apache-and-nginx/2020-07-29",component:p("/docs/DevOps/NGINX/2020-07-29--securing-apache-and-nginx/2020-07-29","fa7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/NGINX/2020-08-26--nginx-docker-setup/2020-08-26",component:p("/docs/DevOps/NGINX/2020-08-26--nginx-docker-setup/2020-08-26","df7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/NGINX/2020-08-27--nginx-docker-ssl-certs-self-signed/2020-08-27",component:p("/docs/DevOps/NGINX/2020-08-27--nginx-docker-ssl-certs-self-signed/2020-08-27","c05"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/NGINX/2020-08-28--nginx-docker-certbot/2020-08-27",component:p("/docs/DevOps/NGINX/2020-08-28--nginx-docker-certbot/2020-08-27","9fd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/NGINX/2020-08-30--nginx-docker-multihost/2020-08-30",component:p("/docs/DevOps/NGINX/2020-08-30--nginx-docker-multihost/2020-08-30","4a3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/NGINX/2021-02-22-nginx-docker-ingress/2021-02-22",component:p("/docs/DevOps/NGINX/2021-02-22-nginx-docker-ingress/2021-02-22","9b6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/NGINX/2021-02-23-nginx-agent-redirect/2021-02-23",component:p("/docs/DevOps/NGINX/2021-02-23-nginx-agent-redirect/2021-02-23","c9d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/NGINX/2021-07-29--certbot-nginx-autorenewal/2021-07-29",component:p("/docs/DevOps/NGINX/2021-07-29--certbot-nginx-autorenewal/2021-07-29","2e6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/NGINX/2022-11-17-nginx-udp-tcp-load-balancing/2022-11-17",component:p("/docs/DevOps/NGINX/2022-11-17-nginx-udp-tcp-load-balancing/2022-11-17","9ad"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/NGINX/2022-12-08-nginx-websocket-proxy/2022-12-08",component:p("/docs/DevOps/NGINX/2022-12-08-nginx-websocket-proxy/2022-12-08","ddb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/NGINX/2023-06-13-nginx-docker-ingress/2023-06-13",component:p("/docs/DevOps/NGINX/2023-06-13-nginx-docker-ingress/2023-06-13","aa6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2010-02-02--svn-subversion-windows/2010-02-02",component:p("/docs/DevOps/Provisioning/2010-02-02--svn-subversion-windows/2010-02-02","120"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2017-09-05--developing-software-in-china/2017-09-05",component:p("/docs/DevOps/Provisioning/2017-09-05--developing-software-in-china/2017-09-05","cd3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2017-09-06--developing-software-in-china-2/2017-09-06",component:p("/docs/DevOps/Provisioning/2017-09-06--developing-software-in-china-2/2017-09-06","d12"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2018-01-26--node-express-docker-container/2018-01-26",component:p("/docs/DevOps/Provisioning/2018-01-26--node-express-docker-container/2018-01-26","e35"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2018-01-27--express-generator-app-docker/2018-01-27",component:p("/docs/DevOps/Provisioning/2018-01-27--express-generator-app-docker/2018-01-27","0f1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2018-01-28--express-generator-dockerrized/2018-01-28",component:p("/docs/DevOps/Provisioning/2018-01-28--express-generator-dockerrized/2018-01-28","3ff"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2018-11-10--postgresql-getting-started/2018-11-10",component:p("/docs/DevOps/Provisioning/2018-11-10--postgresql-getting-started/2018-11-10","097"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2018-12-27--red-hat-containerized-application-development-rhcs/2018-12-27",component:p("/docs/DevOps/Provisioning/2018-12-27--red-hat-containerized-application-development-rhcs/2018-12-27","3d5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2019-01-08--creating-a-grafana-dashboard/2019-01-08",component:p("/docs/DevOps/Provisioning/2019-01-08--creating-a-grafana-dashboard/2019-01-08","62a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2019-06-15--installing-discourse-on-centos8/2019-06-15",component:p("/docs/DevOps/Provisioning/2019-06-15--installing-discourse-on-centos8/2019-06-15","8ee"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2019-06-16--migrating-from-vbulletin-to-discourse-on-centos8/2019-06-16",component:p("/docs/DevOps/Provisioning/2019-06-16--migrating-from-vbulletin-to-discourse-on-centos8/2019-06-16","af2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2019-06-18--using-oauth2-in-discourse/2019-06-18",component:p("/docs/DevOps/Provisioning/2019-06-18--using-oauth2-in-discourse/2019-06-18","0e9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2019-06-19--using-twitter-auth-in-discourse/2019-06-20",component:p("/docs/DevOps/Provisioning/2019-06-19--using-twitter-auth-in-discourse/2019-06-20","0f3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2019-06-20--using-github-auth-in-discourse/2019-06-19",component:p("/docs/DevOps/Provisioning/2019-06-20--using-github-auth-in-discourse/2019-06-19","e68"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2019-06-21--using-facebook-auth-in-discourse/2019-06-21",component:p("/docs/DevOps/Provisioning/2019-06-21--using-facebook-auth-in-discourse/2019-06-21","88a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2019-09-16--installing-vanilla-forum/2019-09-16",component:p("/docs/DevOps/Provisioning/2019-09-16--installing-vanilla-forum/2019-09-16","455"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2020-06-07--setting-up-wikijs-in-docker/2020-06-07",component:p("/docs/DevOps/Provisioning/2020-06-07--setting-up-wikijs-in-docker/2020-06-07","9f3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2020-07-13--infrastructure-as-code/2020-07-13",component:p("/docs/DevOps/Provisioning/2020-07-13--infrastructure-as-code/2020-07-13","456"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2020-08-29--static-server-with-hapi-and-docker/2020-08-29",component:p("/docs/DevOps/Provisioning/2020-08-29--static-server-with-hapi-and-docker/2020-08-29","ad5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2020-09-02--docker-compose-networking/2020-09-02",component:p("/docs/DevOps/Provisioning/2020-09-02--docker-compose-networking/2020-09-02","4ad"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2020-10-01--installing-openproject-in-docker/2020-10-01",component:p("/docs/DevOps/Provisioning/2020-10-01--installing-openproject-in-docker/2020-10-01","93b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2020-10-02--installing-wazuh-in-docker/2020-10-02",component:p("/docs/DevOps/Provisioning/2020-10-02--installing-wazuh-in-docker/2020-10-02","3c3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2021-01-22-file-transfer-tools-in-nodejs/2021-01-22",component:p("/docs/DevOps/Provisioning/2021-01-22-file-transfer-tools-in-nodejs/2021-01-22","c22"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2021-01-23-nodejs-file-server/2021-01-23",component:p("/docs/DevOps/Provisioning/2021-01-23-nodejs-file-server/2021-01-23","20c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2021-01-27-owncloud-ocis/2021-01-27",component:p("/docs/DevOps/Provisioning/2021-01-27-owncloud-ocis/2021-01-27","ad0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2021-04-07--loki-prometheus-grafana/2021-04-07",component:p("/docs/DevOps/Provisioning/2021-04-07--loki-prometheus-grafana/2021-04-07","ebf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2021-09-13--postgres-refresher-part-i/2021-09-13",component:p("/docs/DevOps/Provisioning/2021-09-13--postgres-refresher-part-i/2021-09-13","d6d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2021-09-13--postgres-refresher-part-ii/2021-09-13",component:p("/docs/DevOps/Provisioning/2021-09-13--postgres-refresher-part-ii/2021-09-13","d3f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2021-09-14--postgres-refresher-hasura/2021-09-14",component:p("/docs/DevOps/Provisioning/2021-09-14--postgres-refresher-hasura/2021-09-14","c02"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2021-09-14--postgres-refresher-node-json/2021-09-14",component:p("/docs/DevOps/Provisioning/2021-09-14--postgres-refresher-node-json/2021-09-14","7a8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2021-10-12--traefik-configuration/2021-10-12",component:p("/docs/DevOps/Provisioning/2021-10-12--traefik-configuration/2021-10-12","151"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2021-10-12--traefik-second-attempt/2021-10-12",component:p("/docs/DevOps/Provisioning/2021-10-12--traefik-second-attempt/2021-10-12","63e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2021-10-12--traefik-third-attempt/2021-10-12",component:p("/docs/DevOps/Provisioning/2021-10-12--traefik-third-attempt/2021-10-12","ca8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2021-10-25--matrix-secure-messaging/2021-10-25",component:p("/docs/DevOps/Provisioning/2021-10-25--matrix-secure-messaging/2021-10-25","c7a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2022-01-23--installing-discourse-docker/2022-01-23",component:p("/docs/DevOps/Provisioning/2022-01-23--installing-discourse-docker/2022-01-23","85f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2022-01-24--getting-to-know-bind9-docker/2022-01-24",component:p("/docs/DevOps/Provisioning/2022-01-24--getting-to-know-bind9-docker/2022-01-24","1a7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2022-01-25--installing-bind9-docker/2022-01-25",component:p("/docs/DevOps/Provisioning/2022-01-25--installing-bind9-docker/2022-01-25","ab8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2022-01-26--dns-over-TLS-docker/2022-01-26",component:p("/docs/DevOps/Provisioning/2022-01-26--dns-over-TLS-docker/2022-01-26","3d0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2022-01-27--bind9-configuration/2022-01-27",component:p("/docs/DevOps/Provisioning/2022-01-27--bind9-configuration/2022-01-27","1f3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2022-10-16--os-ticket-docker/2022-10-16",component:p("/docs/DevOps/Provisioning/2022-10-16--os-ticket-docker/2022-10-16","1a4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2022-10-27--os-ticket-rest-api/2022-10-27",component:p("/docs/DevOps/Provisioning/2022-10-27--os-ticket-rest-api/2022-10-27","4ef"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2022-11-07--cphalcon-docker/2022-11-07",component:p("/docs/DevOps/Provisioning/2022-11-07--cphalcon-docker/2022-11-07","21f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2022-11-16--mautic-docker/2022-11-16",component:p("/docs/DevOps/Provisioning/2022-11-16--mautic-docker/2022-11-16","58f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2023-02-13--meili-search-gatsby/2023-02-13",component:p("/docs/DevOps/Provisioning/2023-02-13--meili-search-gatsby/2023-02-13","9ac"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2023-03-09--os-ticket-docker-2023/2023-03-09",component:p("/docs/DevOps/Provisioning/2023-03-09--os-ticket-docker-2023/2023-03-09","8e8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2024-01-17--ntfy-notification-service/2024-01-17",component:p("/docs/DevOps/Provisioning/2024-01-17--ntfy-notification-service/2024-01-17","d78"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Provisioning/2024-01-18--uptime-kuma-monitoring/2024-01-18",component:p("/docs/DevOps/Provisioning/2024-01-18--uptime-kuma-monitoring/2024-01-18","de5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Salt/2020-06-14--install-salt-on-ubuntu-20-04/2020-06-14",component:p("/docs/DevOps/Salt/2020-06-14--install-salt-on-ubuntu-20-04/2020-06-14","7e1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Salt/2020-06-15--salty-devops/2020-06-15",component:p("/docs/DevOps/Salt/2020-06-15--salty-devops/2020-06-15","838"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Salt/2020-06-16--salt-state/2020-06-16",component:p("/docs/DevOps/Salt/2020-06-16--salt-state/2020-06-16","d46"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Salt/2020-06-17--salt-pillars-formulas/2020-06-17",component:p("/docs/DevOps/Salt/2020-06-17--salt-pillars-formulas/2020-06-17","f15"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Salt/2020-06-18--salt-execution-order/2020-06-18",component:p("/docs/DevOps/Salt/2020-06-18--salt-execution-order/2020-06-18","37f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Salt/2020-06-19--salt-mine-orchestrate/2020-06-19",component:p("/docs/DevOps/Salt/2020-06-19--salt-mine-orchestrate/2020-06-19","ebe"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Salt/2020-06-20--salt-reactor-events/2020-06-20",component:p("/docs/DevOps/Salt/2020-06-20--salt-reactor-events/2020-06-20","3e5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Salt/2020-06-21--salt-events-and-thirdparty-apps/2020-06-21",component:p("/docs/DevOps/Salt/2020-06-21--salt-events-and-thirdparty-apps/2020-06-21","1dd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Salt/2020-06-22--salt-nginx-state/2020-06-22",component:p("/docs/DevOps/Salt/2020-06-22--salt-nginx-state/2020-06-22","adb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-1-setup/2020-06-23",component:p("/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-1-setup/2020-06-23","9ed"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-2-salt-state/2020-06-23",component:p("/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-2-salt-state/2020-06-23","f49"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-3-highstate/2020-06-23",component:p("/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-3-highstate/2020-06-23","72c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-4-salt-mine/2020-06-23",component:p("/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-4-salt-mine/2020-06-23","7fa"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Salt/2020-06-25--salt-orchestration-for-docker-containers/2020-06-25",component:p("/docs/DevOps/Salt/2020-06-25--salt-orchestration-for-docker-containers/2020-06-25","747"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Security/2020-07-26--firewalld-configuration/2020-07-26",component:p("/docs/DevOps/Security/2020-07-26--firewalld-configuration/2020-07-26","1d9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Security/2020-07-27--firewalld-deployment-centos7/2020-07-27",component:p("/docs/DevOps/Security/2020-07-27--firewalld-deployment-centos7/2020-07-27","a8f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Security/2020-07-27--firewalld-deployment-debian/2020-07-27",component:p("/docs/DevOps/Security/2020-07-27--firewalld-deployment-debian/2020-07-27","808"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Security/2020-07-27--firewalld-deployment-ubuntu/2020-07-27",component:p("/docs/DevOps/Security/2020-07-27--firewalld-deployment-ubuntu/2020-07-27","c8a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Security/2020-07-28--fail2ban-ubuntu-server/2020-07-28",component:p("/docs/DevOps/Security/2020-07-28--fail2ban-ubuntu-server/2020-07-28","1c9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Security/2020-07-28--uncomplicated-firewall-ufw/2020-07-28",component:p("/docs/DevOps/Security/2020-07-28--uncomplicated-firewall-ufw/2020-07-28","dc7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Security/2022-09-27--wireshark-with-tls-encryption/2022-09-27",component:p("/docs/DevOps/Security/2022-09-27--wireshark-with-tls-encryption/2022-09-27","3a4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Tomcat/2020-12-22-tomcat9-ubuntu-20-10-installation/2020-12-22",component:p("/docs/DevOps/Tomcat/2020-12-22-tomcat9-ubuntu-20-10-installation/2020-12-22","b16"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Tomcat/2020-12-23-tomcat9-configuration/2020-12-23",component:p("/docs/DevOps/Tomcat/2020-12-23-tomcat9-configuration/2020-12-23","cdc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Tomcat/2020-12-24-tomcat9-cluster-and-load-balancing/2020-12-24",component:p("/docs/DevOps/Tomcat/2020-12-24-tomcat9-cluster-and-load-balancing/2020-12-24","feb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Tomcat/2020-12-25-tomcat10-docker-cluster/2020-12-25",component:p("/docs/DevOps/Tomcat/2020-12-25-tomcat10-docker-cluster/2020-12-25","508"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Tomcat/2020-12-26-tomcat10-cluster-with-individual-nodes/2020-12-26",component:p("/docs/DevOps/Tomcat/2020-12-26-tomcat10-cluster-with-individual-nodes/2020-12-26","c35"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Windows/2017-07-06--windows-cmd/2017-07-06",component:p("/docs/DevOps/Windows/2017-07-06--windows-cmd/2017-07-06","973"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Windows/2017-07-07--windows10-control/2017-07-07",component:p("/docs/DevOps/Windows/2017-07-07--windows10-control/2017-07-07","465"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Windows/2017-12-19--umlaute-on-us-keyboard/2017-12-19",component:p("/docs/DevOps/Windows/2017-12-19--umlaute-on-us-keyboard/2017-12-19","5bb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Windows/2019-06-09--setting-up-windows-server-2019/2019-06-09",component:p("/docs/DevOps/Windows/2019-06-09--setting-up-windows-server-2019/2019-06-09","4a8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Windows/2019-06-10--windows-server-2019-scripting-and-sharing/2019-06-10",component:p("/docs/DevOps/Windows/2019-06-10--windows-server-2019-scripting-and-sharing/2019-06-10","7f3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Windows/2019-06-11--windows-server-2019-active-directory/2019-06-11",component:p("/docs/DevOps/Windows/2019-06-11--windows-server-2019-active-directory/2019-06-11","49b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Windows/2019-06-12--windows-server-2019-active-directory/2019-06-12",component:p("/docs/DevOps/Windows/2019-06-12--windows-server-2019-active-directory/2019-06-12","69d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Windows/2019-06-13--windows-server-2019-docker-daemon/2019-06-13",component:p("/docs/DevOps/Windows/2019-06-13--windows-server-2019-docker-daemon/2019-06-13","e73"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Zabbix/2020-07-12--nagios-docker-install/2020-07-12",component:p("/docs/DevOps/Zabbix/2020-07-12--nagios-docker-install/2020-07-12","876"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Zabbix/2020-07-14--nagios-ubuntu-install/2020-07-14",component:p("/docs/DevOps/Zabbix/2020-07-14--nagios-ubuntu-install/2020-07-14","f7b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Zabbix/2020-07-15--zabbix-docker-installation/2020-07-15",component:p("/docs/DevOps/Zabbix/2020-07-15--zabbix-docker-installation/2020-07-15","6e4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Zabbix/2020-07-16--zabbix-agent/2020-07-16",component:p("/docs/DevOps/Zabbix/2020-07-16--zabbix-agent/2020-07-16","2f7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Zabbix/2020-07-17--zabbix-website-monitor/2020-07-17",component:p("/docs/DevOps/Zabbix/2020-07-17--zabbix-website-monitor/2020-07-17","ab5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Zabbix/2020-07-18--zabbix-email-notification/2020-07-18",component:p("/docs/DevOps/Zabbix/2020-07-18--zabbix-email-notification/2020-07-18","b19"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Zabbix/2020-07-19--zabbix-company-logo/2020-07-19",component:p("/docs/DevOps/Zabbix/2020-07-19--zabbix-company-logo/2020-07-19","a61"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Zabbix/2020-07-20--zabbix-behind-nginx/2020-07-20",component:p("/docs/DevOps/Zabbix/2020-07-20--zabbix-behind-nginx/2020-07-20","c74"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Zabbix/2020-09-05--slack-notifications-in-devops/2020-09-05",component:p("/docs/DevOps/Zabbix/2020-09-05--slack-notifications-in-devops/2020-09-05","2de"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Zabbix/2021-01-14--zabbix-apache2-monitor/2021-10-14",component:p("/docs/DevOps/Zabbix/2021-01-14--zabbix-apache2-monitor/2021-10-14","ab9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Zabbix/2021-10-13--zabbix-compose-setup/2021-10-13",component:p("/docs/DevOps/Zabbix/2021-10-13--zabbix-compose-setup/2021-10-13","4b9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Zabbix/2022-01-13--zabbix-api-testing/2022-01-13",component:p("/docs/DevOps/Zabbix/2022-01-13--zabbix-api-testing/2022-01-13","4e5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Zabbix/2022-01-13--zabbix-server-v6/2022-01-13",component:p("/docs/DevOps/Zabbix/2022-01-13--zabbix-server-v6/2022-01-13","4c9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Zabbix/2022-01-14--zabbix-apache2-monitor/2022-01-14",component:p("/docs/DevOps/Zabbix/2022-01-14--zabbix-apache2-monitor/2022-01-14","4d5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Zabbix/2022-01-14--zabbix-docker-monitor/2022-01-14",component:p("/docs/DevOps/Zabbix/2022-01-14--zabbix-docker-monitor/2022-01-14","14e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Zabbix/2022-01-14--zabbix-http-cert-monitor/2022-01-14",component:p("/docs/DevOps/Zabbix/2022-01-14--zabbix-http-cert-monitor/2022-01-14","98e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Zabbix/2022-01-14--zabbix-nginx-monitor/2022-01-14",component:p("/docs/DevOps/Zabbix/2022-01-14--zabbix-nginx-monitor/2022-01-14","aa5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Zabbix/2022-01-15--zabbix-grafana-dashboard/2022-01-15",component:p("/docs/DevOps/Zabbix/2022-01-15--zabbix-grafana-dashboard/2022-01-15","922"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-email-notifications/2022-01-15",component:p("/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-email-notifications/2022-01-15","64e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-slack-notifications/2022-01-15",component:p("/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-slack-notifications/2022-01-15","f62"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/2022-01-15",component:p("/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/2022-01-15","122"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Zabbix/2022-01-16--zabbix-v6-baseline-monitoring/2022-01-16",component:p("/docs/DevOps/Zabbix/2022-01-16--zabbix-v6-baseline-monitoring/2022-01-16","a33"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/DevOps/Zabbix/2022-07-15-zabbix-for-zimbra/2022-07-15",component:p("/docs/DevOps/Zabbix/2022-07-15-zabbix-for-zimbra/2022-07-15","56d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/intro",component:p("/docs/intro","aed"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2023-01-01-tf-model-server/2023-01-01",component:p("/docs/IoT-and-Machine-Learning/AIOps/2023-01-01-tf-model-server/2023-01-01","882"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2023-01-02-tf-serve-own-models/2023-01-02",component:p("/docs/IoT-and-Machine-Learning/AIOps/2023-01-02-tf-serve-own-models/2023-01-02","c75"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2023-01-03-tf-tensorboard/2023-01-03",component:p("/docs/IoT-and-Machine-Learning/AIOps/2023-01-03-tf-tensorboard/2023-01-03","d0a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2023-01-04-tf-distributed-strategy/2023-01-04",component:p("/docs/IoT-and-Machine-Learning/AIOps/2023-01-04-tf-distributed-strategy/2023-01-04","8f1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2023-01-05-dvc-model-version-control/2023-01-05",component:p("/docs/IoT-and-Machine-Learning/AIOps/2023-01-05-dvc-model-version-control/2023-01-05","894"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2023-01-06-dvc-model-access/2023-01-05",component:p("/docs/IoT-and-Machine-Learning/AIOps/2023-01-06-dvc-model-access/2023-01-05","b80"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2023-01-22-python-ray-introduction/2023-01-22",component:p("/docs/IoT-and-Machine-Learning/AIOps/2023-01-22-python-ray-introduction/2023-01-22","080"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2023-01-23-python-ray-remote-functions/2023-01-23",component:p("/docs/IoT-and-Machine-Learning/AIOps/2023-01-23-python-ray-remote-functions/2023-01-23","a07"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2023-01-26-python-ray-remote-actors/2023-01-26",component:p("/docs/IoT-and-Machine-Learning/AIOps/2023-01-26-python-ray-remote-actors/2023-01-26","f90"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2023-01-29-python-ray-deployments/2023-01-29",component:p("/docs/IoT-and-Machine-Learning/AIOps/2023-01-29-python-ray-deployments/2023-01-29","b64"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2023-01-31-python-ray-model-serving/2023-01-31",component:p("/docs/IoT-and-Machine-Learning/AIOps/2023-01-31-python-ray-model-serving/2023-01-31","eee"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2023-02-01-apache-airflow-introduction/2023-02-01",component:p("/docs/IoT-and-Machine-Learning/AIOps/2023-02-01-apache-airflow-introduction/2023-02-01","ab7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2023-02-04-apache-airflow-data-pipelines/2023-02-04",component:p("/docs/IoT-and-Machine-Learning/AIOps/2023-02-04-apache-airflow-data-pipelines/2023-02-04","7d2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2023-02-05-apache-airflow-scheduler/2023-02-05",component:p("/docs/IoT-and-Machine-Learning/AIOps/2023-02-05-apache-airflow-scheduler/2023-02-05","089"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2023-02-06-apache-airflow-dynamic-dags/2023-02-06",component:p("/docs/IoT-and-Machine-Learning/AIOps/2023-02-06-apache-airflow-dynamic-dags/2023-02-06","10b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2023-02-09-mlflow-introduction/2023-02-09",component:p("/docs/IoT-and-Machine-Learning/AIOps/2023-02-09-mlflow-introduction/2023-02-09","074"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2023-03-27-deploying-prediction-apis-with-flask/2023-03-27",component:p("/docs/IoT-and-Machine-Learning/AIOps/2023-03-27-deploying-prediction-apis-with-flask/2023-03-27","a71"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2023-06-17-scikit-learn-model-deployment/2023-06-17",component:p("/docs/IoT-and-Machine-Learning/AIOps/2023-06-17-scikit-learn-model-deployment/2023-06-17","780"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2023-06-18-automl-with-autogluon-tabular-data/2023-06-18",component:p("/docs/IoT-and-Machine-Learning/AIOps/2023-06-18-automl-with-autogluon-tabular-data/2023-06-18","c86"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2023-06-21-automl-with-autogluon-multiclass-nlp/2023-06-21",component:p("/docs/IoT-and-Machine-Learning/AIOps/2023-06-21-automl-with-autogluon-multiclass-nlp/2023-06-21","85a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2023-06-23-automl-with-autogluon-timeseries-forecast/2023-06-23",component:p("/docs/IoT-and-Machine-Learning/AIOps/2023-06-23-automl-with-autogluon-timeseries-forecast/2023-06-23","e6b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2023-07-10-scikit-image-model-deployment-part1/2023-07-10",component:p("/docs/IoT-and-Machine-Learning/AIOps/2023-07-10-scikit-image-model-deployment-part1/2023-07-10","447"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2023-07-12-scikit-image-model-deployment-part2/2023-07-12",component:p("/docs/IoT-and-Machine-Learning/AIOps/2023-07-12-scikit-image-model-deployment-part2/2023-07-12","eb6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2023-08-19-tensorflow-serving-api/2023-08-19",component:p("/docs/IoT-and-Machine-Learning/AIOps/2023-08-19-tensorflow-serving-api/2023-08-19","f95"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2023-09-27-zenml-intro-sklearn-pipeline/2023-09-27",component:p("/docs/IoT-and-Machine-Learning/AIOps/2023-09-27-zenml-intro-sklearn-pipeline/2023-09-27","aa9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2024-02-21-mlflow-pytorch-lightning-docker/2024-02-21",component:p("/docs/IoT-and-Machine-Learning/AIOps/2024-02-21-mlflow-pytorch-lightning-docker/2024-02-21","62c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2024-02-24-mlflow-hyperparameter-tuning/2024-02-24",component:p("/docs/IoT-and-Machine-Learning/AIOps/2024-02-24-mlflow-hyperparameter-tuning/2024-02-24","0b7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/AIOps/2024-02-26-mlflow-with-yolov81/2024-02-26",component:p("/docs/IoT-and-Machine-Learning/AIOps/2024-02-26-mlflow-with-yolov81/2024-02-26","a94"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2018-01-02--machine-learning-with-python/2018-01-02",component:p("/docs/IoT-and-Machine-Learning/ML/2018-01-02--machine-learning-with-python/2018-01-02","e21"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2019-03-31--introduction-to-tensorflow-2-beta/2019-03-31",component:p("/docs/IoT-and-Machine-Learning/ML/2019-03-31--introduction-to-tensorflow-2-beta/2019-03-31","3f3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2019-04-01--introduction-to-keras/2019-04-01",component:p("/docs/IoT-and-Machine-Learning/ML/2019-04-01--introduction-to-keras/2019-04-01","4ee"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2021-10-31--tesseract_ocr_arch_linux/2021-10-31",component:p("/docs/IoT-and-Machine-Learning/ML/2021-10-31--tesseract_ocr_arch_linux/2021-10-31","fa6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2021-11-01--spacy_natural_language_processing/2021-11-01",component:p("/docs/IoT-and-Machine-Learning/ML/2021-11-01--spacy_natural_language_processing/2021-11-01","17c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2021-11-02--spacy_ner_predictions/2021-11-02",component:p("/docs/IoT-and-Machine-Learning/ML/2021-11-02--spacy_ner_predictions/2021-11-02","c08"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2021-11-03--streamlit-opencv-mediapipe/2021-11-03",component:p("/docs/IoT-and-Machine-Learning/ML/2021-11-03--streamlit-opencv-mediapipe/2021-11-03","f5b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2021-11-04--installing-yolov4/2021-11-04",component:p("/docs/IoT-and-Machine-Learning/ML/2021-11-04--installing-yolov4/2021-11-04","414"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2021-11-05--license-plates-yolov4-opencv-tesseract/2021-11-05",component:p("/docs/IoT-and-Machine-Learning/ML/2021-11-05--license-plates-yolov4-opencv-tesseract/2021-11-05","947"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2021-11-06--opencv-crash-course-part-i/2021-11-06",component:p("/docs/IoT-and-Machine-Learning/ML/2021-11-06--opencv-crash-course-part-i/2021-11-06","968"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2021-11-07--opencv-crash-course-part-ii/2021-11-07",component:p("/docs/IoT-and-Machine-Learning/ML/2021-11-07--opencv-crash-course-part-ii/2021-11-07","b80"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2021-11-08--tensorflow-crash-course-part-i/2021-11-08",component:p("/docs/IoT-and-Machine-Learning/ML/2021-11-08--tensorflow-crash-course-part-i/2021-11-08","17c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2021-11-08--tensorflow-crash-course-part-i/activate_webcam",component:p("/docs/IoT-and-Machine-Learning/ML/2021-11-08--tensorflow-crash-course-part-i/activate_webcam","d16"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2021-11-09--tensorflow-crash-course-part-ii/2021-11-09",component:p("/docs/IoT-and-Machine-Learning/ML/2021-11-09--tensorflow-crash-course-part-ii/2021-11-09","6c9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2021-11-10--tensorflow-crash-course-part-iii/2021-11-10",component:p("/docs/IoT-and-Machine-Learning/ML/2021-11-10--tensorflow-crash-course-part-iii/2021-11-10","5a6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2021-11-11--tensorflow-crash-course-part-iv/2021-11-11",component:p("/docs/IoT-and-Machine-Learning/ML/2021-11-11--tensorflow-crash-course-part-iv/2021-11-11","f0a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2021-11-12--tensorflow-crash-course-part-v/2021-11-12",component:p("/docs/IoT-and-Machine-Learning/ML/2021-11-12--tensorflow-crash-course-part-v/2021-11-12","a03"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2021-11-13--tensorflow-model-zoo/2021-11-13",component:p("/docs/IoT-and-Machine-Learning/ML/2021-11-13--tensorflow-model-zoo/2021-11-13","2ec"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2021-11-14--tensorflow-model-for-tfjs/2021-11-14",component:p("/docs/IoT-and-Machine-Learning/ML/2021-11-14--tensorflow-model-for-tfjs/2021-11-14","c9a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2021-11-15--facebook-prophet-introduction/2021-11-15",component:p("/docs/IoT-and-Machine-Learning/ML/2021-11-15--facebook-prophet-introduction/2021-11-15","b04"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2021-12-01--opencv-with-images/2021-12-01",component:p("/docs/IoT-and-Machine-Learning/ML/2021-12-01--opencv-with-images/2021-12-01","816"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2021-12-02--opencv-with-videos/2021-12-02",component:p("/docs/IoT-and-Machine-Learning/ML/2021-12-02--opencv-with-videos/2021-12-02","f23"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2021-12-03--opencv-image-operations/2021-12-03",component:p("/docs/IoT-and-Machine-Learning/ML/2021-12-03--opencv-image-operations/2021-12-03","529"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2021-12-04--opencv-image-objects/2021-12-04",component:p("/docs/IoT-and-Machine-Learning/ML/2021-12-04--opencv-image-objects/2021-12-04","468"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2021-12-05--opencv-face-detection/2021-12-05",component:p("/docs/IoT-and-Machine-Learning/ML/2021-12-05--opencv-face-detection/2021-12-05","7c5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2021-12-06--opencv-object-tracking/2021-12-06",component:p("/docs/IoT-and-Machine-Learning/ML/2021-12-06--opencv-object-tracking/2021-12-06","021"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2021-12-07--opencv-detection-and-tracking/2021-12-07",component:p("/docs/IoT-and-Machine-Learning/ML/2021-12-07--opencv-detection-and-tracking/2021-12-07","0bb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2021-12-08--opencv-meanshift-tracking/2021-12-08",component:p("/docs/IoT-and-Machine-Learning/ML/2021-12-08--opencv-meanshift-tracking/2021-12-08","eae"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2021-12-09--opencv-camshift-tracking/2021-12-09",component:p("/docs/IoT-and-Machine-Learning/ML/2021-12-09--opencv-camshift-tracking/2021-12-09","5d5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2021-12-10--opencv-optical-flow-tracking/2021-12-10",component:p("/docs/IoT-and-Machine-Learning/ML/2021-12-10--opencv-optical-flow-tracking/2021-12-10","e0c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2022-02-15--yolo-app-get-data/2022-02-15",component:p("/docs/IoT-and-Machine-Learning/ML/2022-02-15--yolo-app-get-data/2022-02-15","202"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2022-02-16--yolo-app-tensorflow-model/2022-02-16",component:p("/docs/IoT-and-Machine-Learning/ML/2022-02-16--yolo-app-tensorflow-model/2022-02-16","a1b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2022-02-17--yolo-app-prediction-pipeline/2022-02-17",component:p("/docs/IoT-and-Machine-Learning/ML/2022-02-17--yolo-app-prediction-pipeline/2022-02-17","e5a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2022-02-18--yolo-app-ocr/2022-02-18",component:p("/docs/IoT-and-Machine-Learning/ML/2022-02-18--yolo-app-ocr/2022-02-18","afe"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2022-02-19--yolo-app-flask/2022-02-19",component:p("/docs/IoT-and-Machine-Learning/ML/2022-02-19--yolo-app-flask/2022-02-19","21b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2022-02-20--yolo-app-yolov5-data-prep/2022-02-20",component:p("/docs/IoT-and-Machine-Learning/ML/2022-02-20--yolo-app-yolov5-data-prep/2022-02-20","1d1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2022-04-01-tensorflow-audio-classifier/2022-04-01",component:p("/docs/IoT-and-Machine-Learning/ML/2022-04-01-tensorflow-audio-classifier/2022-04-01","84d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2022-04-02-pytorch-super-resolution/2022-04-02",component:p("/docs/IoT-and-Machine-Learning/ML/2022-04-02-pytorch-super-resolution/2022-04-02","666"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2022-04-03-pytorch-real-super-resolution/2022-04-03",component:p("/docs/IoT-and-Machine-Learning/ML/2022-04-03-pytorch-real-super-resolution/2022-04-03","4e9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2022-04-04-pytorch-face-restoration/2022-04-04",component:p("/docs/IoT-and-Machine-Learning/ML/2022-04-04-pytorch-face-restoration/2022-04-04","ebd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2022-11-27-containerized-deep-learning/2022-11-27",component:p("/docs/IoT-and-Machine-Learning/ML/2022-11-27-containerized-deep-learning/2022-11-27","30d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2022-12-10-tf-breast-cancer-classification-part1/2022-12-10",component:p("/docs/IoT-and-Machine-Learning/ML/2022-12-10-tf-breast-cancer-classification-part1/2022-12-10","9b5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part2/2022-12-11",component:p("/docs/IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part2/2022-12-11","8af"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part3/2022-12-11",component:p("/docs/IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part3/2022-12-11","af7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part4/2022-12-11",component:p("/docs/IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part4/2022-12-11","28a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2022-12-12-tf-breast-cancer-classification-part5/2022-12-12",component:p("/docs/IoT-and-Machine-Learning/ML/2022-12-12-tf-breast-cancer-classification-part5/2022-12-12","d48"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2022-12-12-tf-breast-cancer-classification-part6/2022-12-12",component:p("/docs/IoT-and-Machine-Learning/ML/2022-12-12-tf-breast-cancer-classification-part6/2022-12-12","21e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2022-12-16-tf-cifar/2022-12-16",component:p("/docs/IoT-and-Machine-Learning/ML/2022-12-16-tf-cifar/2022-12-16","49e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2022-12-18-tf-transfer-learning/2022-12-18",component:p("/docs/IoT-and-Machine-Learning/ML/2022-12-18-tf-transfer-learning/2022-12-18","540"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2022-12-19-tf-hub/2022-12-19",component:p("/docs/IoT-and-Machine-Learning/ML/2022-12-19-tf-hub/2022-12-19","9c7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2022-12-20-tf-representation/2022-12-19",component:p("/docs/IoT-and-Machine-Learning/ML/2022-12-20-tf-representation/2022-12-19","817"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2022-12-21-tf-deepdream/2022-12-21",component:p("/docs/IoT-and-Machine-Learning/ML/2022-12-21-tf-deepdream/2022-12-21","8d0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2022-12-21-tf-downsampling/2022-12-21",component:p("/docs/IoT-and-Machine-Learning/ML/2022-12-21-tf-downsampling/2022-12-21","b70"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2022-12-28-tf-gan-image-generator/2022-12-28",component:p("/docs/IoT-and-Machine-Learning/ML/2022-12-28-tf-gan-image-generator/2022-12-28","7ad"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2022-12-31-tf-rnn-text-generation/2022-12-31",component:p("/docs/IoT-and-Machine-Learning/ML/2022-12-31-tf-rnn-text-generation/2022-12-31","8b3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-01-05-yolov7/2023-01-05",component:p("/docs/IoT-and-Machine-Learning/ML/2023-01-05-yolov7/2023-01-05","136"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-01-08-depth-vision-midas/2023-01-08",component:p("/docs/IoT-and-Machine-Learning/ML/2023-01-08-depth-vision-midas/2023-01-08","825"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-01-10-yolov7_custom_data/2023-01-10",component:p("/docs/IoT-and-Machine-Learning/ML/2023-01-10-yolov7_custom_data/2023-01-10","6ab"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-01-13-yolov7_data_conversion/2023-01-13",component:p("/docs/IoT-and-Machine-Learning/ML/2023-01-13-yolov7_data_conversion/2023-01-13","e9f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-01-14-yolov7_to_tensorflow/2023-01-14",component:p("/docs/IoT-and-Machine-Learning/ML/2023-01-14-yolov7_to_tensorflow/2023-01-14","290"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-01-28-opencv-coin-counter/2023-01-28",component:p("/docs/IoT-and-Machine-Learning/ML/2023-01-28-opencv-coin-counter/2023-01-28","4da"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-01-30-predicting-wine-quality/2023-01-30",component:p("/docs/IoT-and-Machine-Learning/ML/2023-01-30-predicting-wine-quality/2023-01-30","840"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-02-14-keras-introduction/2023-02-14",component:p("/docs/IoT-and-Machine-Learning/ML/2023-02-14-keras-introduction/2023-02-14","afc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-02-15-as-one-yolo-object-tracking/2023-02-15",component:p("/docs/IoT-and-Machine-Learning/ML/2023-02-15-as-one-yolo-object-tracking/2023-02-15","271"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-02-16-keras-introduction-ann/2023-02-16",component:p("/docs/IoT-and-Machine-Learning/ML/2023-02-16-keras-introduction-ann/2023-02-16","bf9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-02-17-keras-introduction-cnn/2023-02-17",component:p("/docs/IoT-and-Machine-Learning/ML/2023-02-17-keras-introduction-cnn/2023-02-17","a2c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-02-18-keras-introduction-rnn/2023-02-18",component:p("/docs/IoT-and-Machine-Learning/ML/2023-02-18-keras-introduction-rnn/2023-02-18","d4c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-02-18-keras-introduction-vgg16/2023-02-18",component:p("/docs/IoT-and-Machine-Learning/ML/2023-02-18-keras-introduction-vgg16/2023-02-18","9d6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-02-19-tensorflow-introduction/2023-02-19",component:p("/docs/IoT-and-Machine-Learning/ML/2023-02-19-tensorflow-introduction/2023-02-19","b42"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-02-21-tensorflow-tensors-2/2023-02-21",component:p("/docs/IoT-and-Machine-Learning/ML/2023-02-21-tensorflow-tensors-2/2023-02-21","040"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-02-22-tensorflow-tensors-3/2023-02-22",component:p("/docs/IoT-and-Machine-Learning/ML/2023-02-22-tensorflow-tensors-3/2023-02-22","d58"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-02-23-tensorflow-neural-network-regression/2023-02-23",component:p("/docs/IoT-and-Machine-Learning/ML/2023-02-23-tensorflow-neural-network-regression/2023-02-23","cdc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-02-24-tensorflow-neural-network-regression-evaluation/2023-02-24",component:p("/docs/IoT-and-Machine-Learning/ML/2023-02-24-tensorflow-neural-network-regression-evaluation/2023-02-24","74e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-02-25-tensorflow-neural-network-regression-experiments/2023-02-25",component:p("/docs/IoT-and-Machine-Learning/ML/2023-02-25-tensorflow-neural-network-regression-experiments/2023-02-25","2ff"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-02-26-tensorflow-neural-network-regression-data-preprocessing/2023-02-26",component:p("/docs/IoT-and-Machine-Learning/ML/2023-02-26-tensorflow-neural-network-regression-data-preprocessing/2023-02-26","c0a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-02-26-tensorflow-neural-network-regression-real-dataset/2023-02-26",component:p("/docs/IoT-and-Machine-Learning/ML/2023-02-26-tensorflow-neural-network-regression-real-dataset/2023-02-26","cd0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-02-27-tensorflow-neural-network-classification/2023-02-27",component:p("/docs/IoT-and-Machine-Learning/ML/2023-02-27-tensorflow-neural-network-classification/2023-02-27","278"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-02-28-tensorflow-neural-network-classification-model-evaluation/2023-02-28",component:p("/docs/IoT-and-Machine-Learning/ML/2023-02-28-tensorflow-neural-network-classification-model-evaluation/2023-02-28","c41"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-03-02-tensorflow-neural-network-multi-classification/2023-02-28-tensorflow-neural-network-classification-model-evaluation/2023-02-28",component:p("/docs/IoT-and-Machine-Learning/ML/2023-03-02-tensorflow-neural-network-multi-classification/2023-02-28-tensorflow-neural-network-classification-model-evaluation/2023-02-28","a31"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-03-02-tensorflow-neural-network-multi-classification/2023-03-02",component:p("/docs/IoT-and-Machine-Learning/ML/2023-03-02-tensorflow-neural-network-multi-classification/2023-03-02","908"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-03-03-tensorflow-convolutional-neural-network-binary-classifications/2023-03-03",component:p("/docs/IoT-and-Machine-Learning/ML/2023-03-03-tensorflow-convolutional-neural-network-binary-classifications/2023-03-03","262"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-03-05-tensorflow-convolutional-neural-network-multiclass-classifications/2023-03-05",component:p("/docs/IoT-and-Machine-Learning/ML/2023-03-05-tensorflow-convolutional-neural-network-multiclass-classifications/2023-03-05","f76"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-03-06-tensorflow-transfer-learning-feature-extraction/2023-03-06",component:p("/docs/IoT-and-Machine-Learning/ML/2023-03-06-tensorflow-transfer-learning-feature-extraction/2023-03-06","d8a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-03-11-tensorflow-transfer-learning-fine-tuning/2023-03-11",component:p("/docs/IoT-and-Machine-Learning/ML/2023-03-11-tensorflow-transfer-learning-fine-tuning/2023-03-11","10c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-03-16-tensorflow-transfer-learning-scaling/2023-03-16",component:p("/docs/IoT-and-Machine-Learning/ML/2023-03-16-tensorflow-transfer-learning-scaling/2023-03-16","ded"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-03-24-tensorflow-unsupervised-learning-autoencoders/2023-03-24",component:p("/docs/IoT-and-Machine-Learning/ML/2023-03-24-tensorflow-unsupervised-learning-autoencoders/2023-03-24","586"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-03-26-tensorflow-unsupervised-learning-autoencoders-super-resolution/2023-03-26",component:p("/docs/IoT-and-Machine-Learning/ML/2023-03-26-tensorflow-unsupervised-learning-autoencoders-super-resolution/2023-03-26","213"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-03-26-tensorflow-unsupervised-learning-generative-adversial-networks/2023-03-26",component:p("/docs/IoT-and-Machine-Learning/ML/2023-03-26-tensorflow-unsupervised-learning-generative-adversial-networks/2023-03-26","a2b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-04-09-principal-component-analysis/2023-04-09",component:p("/docs/IoT-and-Machine-Learning/ML/2023-04-09-principal-component-analysis/2023-04-09","0bb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-04-11-locally-linear-embedding/2023-04-11",component:p("/docs/IoT-and-Machine-Learning/ML/2023-04-11-locally-linear-embedding/2023-04-11","c0f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-04-12-tstochastic-neighbor-embedding/2023-04-12",component:p("/docs/IoT-and-Machine-Learning/ML/2023-04-12-tstochastic-neighbor-embedding/2023-04-12","d30"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-04-13-fisher-discriminant-analysis/2023-04-13",component:p("/docs/IoT-and-Machine-Learning/ML/2023-04-13-fisher-discriminant-analysis/2023-04-13","084"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-04-13-isometric-mapping/2023-04-13",component:p("/docs/IoT-and-Machine-Learning/ML/2023-04-13-isometric-mapping/2023-04-13","cfe"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-04-13-multi-dimensional-scaling/2023-04-13",component:p("/docs/IoT-and-Machine-Learning/ML/2023-04-13-multi-dimensional-scaling/2023-04-13","e1a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-04-14-manifold-learning-for-image-segmentation/2023-04-14",component:p("/docs/IoT-and-Machine-Learning/ML/2023-04-14-manifold-learning-for-image-segmentation/2023-04-14","a55"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-04-16-deep-3d-image-segmentation/2023-04-16",component:p("/docs/IoT-and-Machine-Learning/ML/2023-04-16-deep-3d-image-segmentation/2023-04-16","fd0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-04-19-tensorflow-natural-language-processing/2023-04-19",component:p("/docs/IoT-and-Machine-Learning/ML/2023-04-19-tensorflow-natural-language-processing/2023-04-19","ff4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-06-26-autogluon-transit-photometry-dataset/2023-06-26",component:p("/docs/IoT-and-Machine-Learning/ML/2023-06-26-autogluon-transit-photometry-dataset/2023-06-26","2c1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-06-27-sql-in-data-science-basics/2023-06-27",component:p("/docs/IoT-and-Machine-Learning/ML/2023-06-27-sql-in-data-science-basics/2023-06-27","741"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-06-30-sql-in-data-science-advanced/2023-06-30",component:p("/docs/IoT-and-Machine-Learning/ML/2023-06-30-sql-in-data-science-advanced/2023-06-30","be3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-07-02-sql-in-data-science-ml/2023-07-02",component:p("/docs/IoT-and-Machine-Learning/ML/2023-07-02-sql-in-data-science-ml/2023-07-02","5c0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-07-21-introduction-to-pytorch-caffe2/2023-07-21",component:p("/docs/IoT-and-Machine-Learning/ML/2023-07-21-introduction-to-pytorch-caffe2/2023-07-21","069"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-07-25-onnx-models/2023-07-25",component:p("/docs/IoT-and-Machine-Learning/ML/2023-07-25-onnx-models/2023-07-25","b07"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-07-26-tensorflow-human-emotion-detector/2023-07-26",component:p("/docs/IoT-and-Machine-Learning/ML/2023-07-26-tensorflow-human-emotion-detector/2023-07-26","7d7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-07-27-tensorflow-vision-transformer/2023-07-27",component:p("/docs/IoT-and-Machine-Learning/ML/2023-07-27-tensorflow-vision-transformer/2023-07-27","c90"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-08-01-tensorflow-i-know-flowers-intro/2023-08-01",component:p("/docs/IoT-and-Machine-Learning/ML/2023-08-01-tensorflow-i-know-flowers-intro/2023-08-01","1bc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-08-02-tensorflow-i-know-flowers-preprocessing/2023-08-02",component:p("/docs/IoT-and-Machine-Learning/ML/2023-08-02-tensorflow-i-know-flowers-preprocessing/2023-08-02","810"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-08-03-tensorflow-i-know-flowers-deit/2023-08-03",component:p("/docs/IoT-and-Machine-Learning/ML/2023-08-03-tensorflow-i-know-flowers-deit/2023-08-03","367"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-08-04-tensorflow-i-know-flowers-efficientnetv2b0/2023-08-04",component:p("/docs/IoT-and-Machine-Learning/ML/2023-08-04-tensorflow-i-know-flowers-efficientnetv2b0/2023-08-04","44f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-08-05-tensorflow-i-know-flowers-efficientnetv2s/2023-08-05",component:p("/docs/IoT-and-Machine-Learning/ML/2023-08-05-tensorflow-i-know-flowers-efficientnetv2s/2023-08-05","35d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-08-06-tensorflow-i-know-flowers-inceptionv3/2023-08-06",component:p("/docs/IoT-and-Machine-Learning/ML/2023-08-06-tensorflow-i-know-flowers-inceptionv3/2023-08-06","dd0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-08-07-tensorflow-i-know-flowers-mobilenetv2/2023-08-07",component:p("/docs/IoT-and-Machine-Learning/ML/2023-08-07-tensorflow-i-know-flowers-mobilenetv2/2023-08-07","9e0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-08-08-tensorflow-i-know-flowers-mobilenetv3large/2023-08-08",component:p("/docs/IoT-and-Machine-Learning/ML/2023-08-08-tensorflow-i-know-flowers-mobilenetv3large/2023-08-08","df8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-08-09-tensorflow-i-know-flowers-mobilenetv3small/2023-08-09",component:p("/docs/IoT-and-Machine-Learning/ML/2023-08-09-tensorflow-i-know-flowers-mobilenetv3small/2023-08-09","c11"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-08-10-tensorflow-i-know-flowers-nasnetmobile/2023-08-10",component:p("/docs/IoT-and-Machine-Learning/ML/2023-08-10-tensorflow-i-know-flowers-nasnetmobile/2023-08-10","1f4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-08-11-tensorflow-i-know-flowers-vit/2023-08-11",component:p("/docs/IoT-and-Machine-Learning/ML/2023-08-11-tensorflow-i-know-flowers-vit/2023-08-11","76b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-08-12-tensorflow-i-know-flowers-xception/2023-08-12",component:p("/docs/IoT-and-Machine-Learning/ML/2023-08-12-tensorflow-i-know-flowers-xception/2023-08-12","29e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-08-13-tensorflow-i-know-flowers-model-eval/2023-08-13",component:p("/docs/IoT-and-Machine-Learning/ML/2023-08-13-tensorflow-i-know-flowers-model-eval/2023-08-13","d51"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-08-21--pytorch-development-in-docker/2023-08-21",component:p("/docs/IoT-and-Machine-Learning/ML/2023-08-21--pytorch-development-in-docker/2023-08-21","b13"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-08-27--image-segmentation-with-pytorch/2023-08-27",component:p("/docs/IoT-and-Machine-Learning/ML/2023-08-27--image-segmentation-with-pytorch/2023-08-27","c29"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-08-28--semantic-segmentation-detectron2-model-zoo/2023-08-28",component:p("/docs/IoT-and-Machine-Learning/ML/2023-08-28--semantic-segmentation-detectron2-model-zoo/2023-08-28","6f0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-08-29--semantic-segmentation-detectron2-model-zoo-faster-rcnn/2023-08-29",component:p("/docs/IoT-and-Machine-Learning/ML/2023-08-29--semantic-segmentation-detectron2-model-zoo-faster-rcnn/2023-08-29","805"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-08-30--instance_segmentation_detectron2_model_zoo_mask_rcnn/2023-08-30",component:p("/docs/IoT-and-Machine-Learning/ML/2023-08-30--instance_segmentation_detectron2_model_zoo_mask_rcnn/2023-08-30","75e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-08-31--semantic_segmentation_detectron2_openimages_dataset/2023-08-31",component:p("/docs/IoT-and-Machine-Learning/ML/2023-08-31--semantic_segmentation_detectron2_openimages_dataset/2023-08-31","f67"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-09-01--yolo-i-know-flowers/2023-09-01",component:p("/docs/IoT-and-Machine-Learning/ML/2023-09-01--yolo-i-know-flowers/2023-09-01","841"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-09-05--semantic-segmentation-in-opencv/2023-09-05",component:p("/docs/IoT-and-Machine-Learning/ML/2023-09-05--semantic-segmentation-in-opencv/2023-09-05","2b8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-09-10--model-explainability-shap/2023-09-11",component:p("/docs/IoT-and-Machine-Learning/ML/2023-09-10--model-explainability-shap/2023-09-11","901"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-09-15--yolo8-tracking-and-ocr/2023-09-15",component:p("/docs/IoT-and-Machine-Learning/ML/2023-09-15--yolo8-tracking-and-ocr/2023-09-15","46d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-09-17--yolo8-nightshift/2023-09-17",component:p("/docs/IoT-and-Machine-Learning/ML/2023-09-17--yolo8-nightshift/2023-09-17","ab4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-09-19--cvat-computer-vision-annotation-tool/2023-09-19",component:p("/docs/IoT-and-Machine-Learning/ML/2023-09-19--cvat-computer-vision-annotation-tool/2023-09-19","145"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-09-21--cvat-automatic-annotation/2023-09-21",component:p("/docs/IoT-and-Machine-Learning/ML/2023-09-21--cvat-automatic-annotation/2023-09-21","cfe"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-09-23--yolo8-listen/2023-09-23",component:p("/docs/IoT-and-Machine-Learning/ML/2023-09-23--yolo8-listen/2023-09-23","bf7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/IoT-and-Machine-Learning/ML/2023-10-01--delib-face-detection/2023-10-01",component:p("/docs/IoT-and-Machine-Learning/ML/2023-10-01--delib-face-detection/2023-10-01","e35"),exact:!0,sidebar:"tutorialSidebar"}]}]}]},{path:"/",component:p("/","d5b"),exact:!0},{path:"*",component:p("*")}]},488121:(e,t,o)=>{"use strict";o.d(t,{_:()=>i,t:()=>r});var n=o(667294),a=o(785893);const i=n.createContext(!1);function r(e){let{children:t}=e;const[o,r]=(0,n.useState)(!1);return(0,n.useEffect)((()=>{r(!0)}),[]),(0,a.jsx)(i.Provider,{value:o,children:t})}},149717:(e,t,o)=>{"use strict";var n=o(667294),a=o(620745),i=o(473727),r=o(370405),s=o(836136);const c=[o(30984),o(982251),o(379957),o(146930),o(245117),o(374313)];var d=o(150997),l=o(616550),p=o(318790),u=o(785893);function m(e){let{children:t}=e;return(0,u.jsx)(u.Fragment,{children:t})}var h=o(631514),b=o(639962),f=o(779524),g=o(820107),v=o(335463),x=o(340626),y=o(978181),_=o(660246),w=o(963905),D=o(433647);function k(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:o}}=(0,b.Z)(),n=(0,x.l)(),a=o[e].htmlLang,i=e=>e.replace("-","_");return(0,u.jsxs)(h.Z,{children:[Object.entries(o).map((e=>{let[t,{htmlLang:o}]=e;return(0,u.jsx)("link",{rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:o},t)})),(0,u.jsx)("link",{rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,u.jsx)("meta",{property:"og:locale",content:i(a)}),Object.values(o).filter((e=>a!==e.htmlLang)).map((e=>(0,u.jsx)("meta",{property:"og:locale:alternate",content:i(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function L(e){let{permalink:t}=e;const{siteConfig:{url:o}}=(0,b.Z)(),n=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:o}}=(0,b.Z)(),{pathname:n}=(0,l.TH)();return e+(0,w.applyTrailingSlash)((0,f.Z)(n),{trailingSlash:o,baseUrl:t})}(),a=t?`${o}${t}`:n;return(0,u.jsxs)(h.Z,{children:[(0,u.jsx)("meta",{property:"og:url",content:a}),(0,u.jsx)("link",{rel:"canonical",href:a})]})}function O(){const{i18n:{currentLocale:e}}=(0,b.Z)(),{metadata:t,image:o}=(0,g.L)();return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsxs)(h.Z,{children:[(0,u.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,u.jsx)("body",{className:y.h})]}),o&&(0,u.jsx)(v.d,{image:o}),(0,u.jsx)(L,{}),(0,u.jsx)(k,{}),(0,u.jsx)(D.Z,{tag:_.HX,locale:e}),(0,u.jsx)(h.Z,{children:t.map(((e,t)=>(0,u.jsx)("meta",{...e},t)))})]})}const S=new Map;function M(e){if(S.has(e.pathname))return{...e,pathname:S.get(e.pathname)};if((0,p.f)(d.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return S.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return S.set(e.pathname,t),{...e,pathname:t}}var T=o(488121),A=o(980694),I=o(81270);function R(e){for(var t=arguments.length,o=new Array(t>1?t-1:0),n=1;n{const n=t.default?.[e]??t[e];return n?.(...o)}));return()=>a.forEach((e=>e?.()))}const E=function(e){let{children:t,location:o,previousLocation:n}=e;return(0,I.Z)((()=>{n!==o&&(!function(e){let{location:t,previousLocation:o}=e;if(!o)return;const n=t.pathname===o.pathname,a=t.hash===o.hash,i=t.search===o.search;if(n&&a&&!i)return;const{hash:r}=t;if(r){const e=decodeURIComponent(r.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:o,previousLocation:n}),R("onRouteDidUpdate",{previousLocation:n,location:o}))}),[n,o]),t};function P(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,p.f)(d.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class j extends n.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=s.Z.canUseDOM?R("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const o=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=R("onRouteUpdate",{previousLocation:this.previousLocation,location:o}),P(o.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,u.jsx)(E,{previousLocation:this.previousLocation,location:t,children:(0,u.jsx)(l.AW,{location:t,render:()=>e})})}}const H=j,C="__docusaurus-base-url-issue-banner-container",N="__docusaurus-base-url-issue-banner",q="__docusaurus-base-url-issue-banner-suggestion-container";function z(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${C}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{if("undefined"==typeof document)return void o();const n=document.createElement("link");n.setAttribute("rel","prefetch"),n.setAttribute("href",e),n.onload=()=>t(),n.onerror=()=>o();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(n)}))}:function(e){return new Promise(((t,o)=>{const n=new XMLHttpRequest;n.open("GET",e,!0),n.withCredentials=!0,n.onload=()=>{200===n.status?t():o()},n.send(null)}))};var V=o(205304);const X=new Set,K=new Set,Y=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!Y()&&!K.has(e)&&!X.has(e))(e))return!1;X.add(e);const t=(0,p.f)(d.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(Q).filter((e=>{let[o]=e;return o.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,V.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=o.gca(e);return t&&!t.includes("undefined")?W(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!Y()&&!K.has(e))(e)&&(K.add(e),P(e))},te=Object.freeze(ee),oe=Boolean(!0);if(s.Z.canUseDOM){window.docusaurus=te;const e=document.getElementById("__docusaurus"),t=(0,u.jsx)(r.B6,{children:(0,u.jsx)(i.VK,{children:(0,u.jsx)(U,{})})}),o=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},s=()=>{if(oe)n.startTransition((()=>{a.hydrateRoot(e,t,{onRecoverableError:o})}));else{const i=a.createRoot(e,{onRecoverableError:o});n.startTransition((()=>{i.render(t)}))}};P(window.location.pathname).then(s)}},980694:(e,t,o)=>{"use strict";o.d(t,{_:()=>p,M:()=>u});var n=o(667294),a=o(636809);const i=JSON.parse('{"docusaurus-plugin-google-gtag":{"default":{"trackingID":["G-P74BDWF0C6"],"anonymizeIP":false,"id":"default"}},"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"intro","docs":[{"id":"Automation_and_Robotics/Home_Automation/2018-10-28--nodered-getting-started/index","path":"/docs/Automation_and_Robotics/Home_Automation/2018-10-28--nodered-getting-started/2018-10-28","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2018-11-01--openhab2-mqtt-nodered/index","path":"/docs/Automation_and_Robotics/Home_Automation/2018-11-01--openhab2-mqtt-nodered/2018-11-01","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2018-11-05--nodered-cryptocurrency-dashboard/index","path":"/docs/Automation_and_Robotics/Home_Automation/2018-11-05--nodered-cryptocurrency-dashboard/2018-11-05","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2018-11-12--nodered-sqlite/index","path":"/docs/Automation_and_Robotics/Home_Automation/2018-11-12--nodered-sqlite/2018-11-12","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2018-11-13--nodered-ifttt/index","path":"/docs/Automation_and_Robotics/Home_Automation/2018-11-13--nodered-ifttt/2018-11-13","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2018-11-17--nodered-mqtt-connect/index","path":"/docs/Automation_and_Robotics/Home_Automation/2018-11-17--nodered-mqtt-connect/2018-11-17","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2018-11-20--nodered-http-connect/index","path":"/docs/Automation_and_Robotics/Home_Automation/2018-11-20--nodered-http-connect/2018-11-20","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2018-11-21--nodered-dashboard-getting-started/index","path":"/docs/Automation_and_Robotics/Home_Automation/2018-11-21--nodered-dashboard-getting-started/2018-11-21","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2018-11-23--node-red-flows/index","path":"/docs/Automation_and_Robotics/Home_Automation/2018-11-23--node-red-flows/2018-11-23","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2018-11-24--node-red-webhooks/index","path":"/docs/Automation_and_Robotics/Home_Automation/2018-11-24--node-red-webhooks/2018-11-24","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2018-11-25--webhooks-with-url-queries/index","path":"/docs/Automation_and_Robotics/Home_Automation/2018-11-25--webhooks-with-url-queries/2018-11-25","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2018-11-26--node-red-and-live-video/index","path":"/docs/Automation_and_Robotics/Home_Automation/2018-11-26--node-red-and-live-video/2018-11-26","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2018-11-27--node-red-sql-logging/index","path":"/docs/Automation_and_Robotics/Home_Automation/2018-11-27--node-red-sql-logging/2018-11-27","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2018-11-28--node-red-on-android/index","path":"/docs/Automation_and_Robotics/Home_Automation/2018-11-28--node-red-on-android/2018-11-28","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2018-11-29--node-red-and-mqtt/index","path":"/docs/Automation_and_Robotics/Home_Automation/2018-11-29--node-red-and-mqtt/2018-11-29","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2018-11-30--home-assistant-on-debian/index","path":"/docs/Automation_and_Robotics/Home_Automation/2018-11-30--home-assistant-on-debian/2018-11-30","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2018-12-01--openhab2-on-debian/index","path":"/docs/Automation_and_Robotics/Home_Automation/2018-12-01--openhab2-on-debian/2018-12-01","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2019-01-05--zigbee2mqtt-xiaomi-fhem/index","path":"/docs/Automation_and_Robotics/Home_Automation/2019-01-05--zigbee2mqtt-xiaomi-fhem/2019-01-05","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2019-02-07--motioneye-on-debian/index","path":"/docs/Automation_and_Robotics/Home_Automation/2019-02-07--motioneye-on-debian/2019-02-07","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2019-02-08--shinobi-on-debian/index","path":"/docs/Automation_and_Robotics/Home_Automation/2019-02-08--shinobi-on-debian/2019-02-08","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2019-02-09--zoneminder-in-docker/index","path":"/docs/Automation_and_Robotics/Home_Automation/2019-02-09--zoneminder-in-docker/2019-02-09","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2019-02-11--loxone-miniserver/index","path":"/docs/Automation_and_Robotics/Home_Automation/2019-02-11--loxone-miniserver/2019-02-11","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2019-02-15--ifttt-ip-camera/index","path":"/docs/Automation_and_Robotics/Home_Automation/2019-02-15--ifttt-ip-camera/2019-02-15","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2019-02-16--ifttt-ip-camera-alarmserver/index","path":"/docs/Automation_and_Robotics/Home_Automation/2019-02-16--ifttt-ip-camera-alarmserver/2019-02-15","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2019-03-26--writing-a-homey-app/index","path":"/docs/Automation_and_Robotics/Home_Automation/2019-03-26--writing-a-homey-app/2019-03-26","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2019-09-23--mqtt-camera-ai-video-security/index","path":"/docs/Automation_and_Robotics/Home_Automation/2019-09-23--mqtt-camera-ai-video-security/2019-09-23","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2019-09-24--iobroker-podman-centos8/index","path":"/docs/Automation_and_Robotics/Home_Automation/2019-09-24--iobroker-podman-centos8/2019-09-24","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2019-09-24--motioneye-podman-centos8/index","path":"/docs/Automation_and_Robotics/Home_Automation/2019-09-24--motioneye-podman-centos8/2019-09-24","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2019-09-27--home-assistant-podman-centos8/index","path":"/docs/Automation_and_Robotics/Home_Automation/2019-09-27--home-assistant-podman-centos8/2019-09-27","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2019-09-28--node-red-homekit-containerized/index","path":"/docs/Automation_and_Robotics/Home_Automation/2019-09-28--node-red-homekit-containerized/2019-09-28","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2019-12-01--podman-hombridge-to-mqtt/index","path":"/docs/Automation_and_Robotics/Home_Automation/2019-12-01--podman-hombridge-to-mqtt/2019-12-01","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2020-09-15--mock-rest-api-with-nodered/index","path":"/docs/Automation_and_Robotics/Home_Automation/2020-09-15--mock-rest-api-with-nodered/2020-09-16","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2020-09-16--testing-new-rest-api-with-nodered/index","path":"/docs/Automation_and_Robotics/Home_Automation/2020-09-16--testing-new-rest-api-with-nodered/2020-09-16","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2020-12-01--openhab3-in-docker/index","path":"/docs/Automation_and_Robotics/Home_Automation/2020-12-01--openhab3-in-docker/2020-12-01","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2020-12-02--openhab3-mqtt-binding/index","path":"/docs/Automation_and_Robotics/Home_Automation/2020-12-02--openhab3-mqtt-binding/2020-12-02","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2020-12-03--openhab3-camera-binding/index","path":"/docs/Automation_and_Robotics/Home_Automation/2020-12-03--openhab3-camera-binding/2020-12-03","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2022-07-10-home-assistant-mqtt-autodiscovery-part-i/index","path":"/docs/Automation_and_Robotics/Home_Automation/2022-07-10-home-assistant-mqtt-autodiscovery-part-i/2022-07-10","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2022-07-11-home-assistant-mqtt-autodiscovery-part-ii/index","path":"/docs/Automation_and_Robotics/Home_Automation/2022-07-11-home-assistant-mqtt-autodiscovery-part-ii/2022-07-11","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2022-07-12-home-assistant-mqtt-python/index","path":"/docs/Automation_and_Robotics/Home_Automation/2022-07-12-home-assistant-mqtt-python/2022-07-12","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2022-07-15-node-red-mqtt-homie/index","path":"/docs/Automation_and_Robotics/Home_Automation/2022-07-15-node-red-mqtt-homie/2022-07-15","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2022-07-16-openhab-mqtt-homie/index","path":"/docs/Automation_and_Robotics/Home_Automation/2022-07-16-openhab-mqtt-homie/2022-07-16","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2022-07-17-node-red-for-mqtt-autodiscovery/index","path":"/docs/Automation_and_Robotics/Home_Automation/2022-07-17-node-red-for-mqtt-autodiscovery/2022-07-17","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2022-10-18-camera-ui-docker/index","path":"/docs/Automation_and_Robotics/Home_Automation/2022-10-18-camera-ui-docker/2022-10-18","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2022-12-15--rtsp-to-hls-ffmpeg/index","path":"/docs/Automation_and_Robotics/Home_Automation/2022-12-15--rtsp-to-hls-ffmpeg/2022-12-15","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2022-12-22--grafana-for-iot/index","path":"/docs/Automation_and_Robotics/Home_Automation/2022-12-22--grafana-for-iot/2022-12-22","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2023-01-23-thread-edge-router-docker/index","path":"/docs/Automation_and_Robotics/Home_Automation/2023-01-23-thread-edge-router-docker/2023-01-23","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2023-01-23-thread-edge-router/index","path":"/docs/Automation_and_Robotics/Home_Automation/2023-01-23-thread-edge-router/2023-01-23","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2023-02-07-python-home-security/index","path":"/docs/Automation_and_Robotics/Home_Automation/2023-02-07-python-home-security/2023-02-07","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2023-04-17-home-assistant-mqtt-autodiscovery-part-iii/index","path":"/docs/Automation_and_Robotics/Home_Automation/2023-04-17-home-assistant-mqtt-autodiscovery-part-iii/2023-04-17","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2023-04-18--home-assistant-node-red-iobroker-docker/index","path":"/docs/Automation_and_Robotics/Home_Automation/2023-04-18--home-assistant-node-red-iobroker-docker/2023-04-18","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2024-01-09--home-assistant-rtsptoweb/index","path":"/docs/Automation_and_Robotics/Home_Automation/2024-01-09--home-assistant-rtsptoweb/2024-01-09","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Home_Automation/2024-01-10--go2rtc/index","path":"/docs/Automation_and_Robotics/Home_Automation/2024-01-10--go2rtc/2024-01-09","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/MQTT/2019-08-03--mqtt-debugging/index","path":"/docs/Automation_and_Robotics/MQTT/2019-08-03--mqtt-debugging/2019-08-03","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/MQTT/2019-08-04--mqtt-android-dashboards/index","path":"/docs/Automation_and_Robotics/MQTT/2019-08-04--mqtt-android-dashboards/2019-08-04","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/MQTT/2019-08-05--mqtt-openhab2/index","path":"/docs/Automation_and_Robotics/MQTT/2019-08-05--mqtt-openhab2/2019-08-05","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/MQTT/2019-08-06--mqtt-node-red/index","path":"/docs/Automation_and_Robotics/MQTT/2019-08-06--mqtt-node-red/2019-08-06","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/MQTT/2019-08-07--mqtt-iobroker/index","path":"/docs/Automation_and_Robotics/MQTT/2019-08-07--mqtt-iobroker/2019-08-07","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/MQTT/2019-08-08--mqtt-homematic/index","path":"/docs/Automation_and_Robotics/MQTT/2019-08-08--mqtt-homematic/2019-08-08","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/MQTT/2019-08-09--mqtt-homee/index","path":"/docs/Automation_and_Robotics/MQTT/2019-08-09--mqtt-homee/2019-08-09","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/MQTT/2019-08-10--mqtt-athom-homey/index","path":"/docs/Automation_and_Robotics/MQTT/2019-08-10--mqtt-athom-homey/2019-08-10","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/MQTT/2019-08-11--mqtt-home-assistant/index","path":"/docs/Automation_and_Robotics/MQTT/2019-08-11--mqtt-home-assistant/2019-08-11","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/MQTT/2021-09-12--golang-paho-mqtt/index","path":"/docs/Automation_and_Robotics/MQTT/2021-09-12--golang-paho-mqtt/2021-09-12","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/MQTT/2022-02-01--mosquitto-2-broker/index","path":"/docs/Automation_and_Robotics/MQTT/2022-02-01--mosquitto-2-broker/2022-02-01","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/MQTT/2022-03-26--mqtt-clients/index","path":"/docs/Automation_and_Robotics/MQTT/2022-03-26--mqtt-clients/2022-03-26","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/MQTT/2022-03-27--build-mosquitto-from-source/index","path":"/docs/Automation_and_Robotics/MQTT/2022-03-27--build-mosquitto-from-source/2022-03-27","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/MQTT/2022-03-28--mqtt-message-server/index","path":"/docs/Automation_and_Robotics/MQTT/2022-03-28--mqtt-message-server/2022-03-28","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/MQTT/2022-03-30--mqtt-with-rabbit-mq/index","path":"/docs/Automation_and_Robotics/MQTT/2022-03-30--mqtt-with-rabbit-mq/2022-03-30","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/MQTT/2022-06-23-instar-mqtt-python-part-I/index","path":"/docs/Automation_and_Robotics/MQTT/2022-06-23-instar-mqtt-python-part-I/2022-06-23","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/MQTT/2022-07-21-rust-hello-world/index","path":"/docs/Automation_and_Robotics/MQTT/2022-07-21-rust-hello-world/2022-07-21","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/MQTT/2022-07-22-go-hello-world/index","path":"/docs/Automation_and_Robotics/MQTT/2022-07-22-go-hello-world/2022-07-22","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/MQTT/2022-07-23-mosquitto-broker-compilation/index","path":"/docs/Automation_and_Robotics/MQTT/2022-07-23-mosquitto-broker-compilation/2022-07-23","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/MQTT/2022-07-24-mosquitto-broker-cross-compilation/index","path":"/docs/Automation_and_Robotics/MQTT/2022-07-24-mosquitto-broker-cross-compilation/2022-07-24","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/MQTT/2023-07-25-emqx-mqtt-broker-docker/index","path":"/docs/Automation_and_Robotics/MQTT/2023-07-25-emqx-mqtt-broker-docker/2023-07-25","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Robotics_Simulation/2023-11-19--ros2-gazebo-installation/index","path":"/docs/Automation_and_Robotics/Robotics_Simulation/2023-11-19--ros2-gazebo-installation/2023-11-19","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Robotics_Simulation/2023-11-24--ros2-graph/index","path":"/docs/Automation_and_Robotics/Robotics_Simulation/2023-11-24--ros2-graph/2023-11-24","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Robotics_Simulation/2023-11-26--ros2-gazebo-simulation/index","path":"/docs/Automation_and_Robotics/Robotics_Simulation/2023-11-26--ros2-gazebo-simulation/2023-11-26","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Robotics_Simulation/2023-11-26--ros2-webots/index","path":"/docs/Automation_and_Robotics/Robotics_Simulation/2023-11-26--ros2-webots/2023-11-26","sidebar":"tutorialSidebar"},{"id":"Automation_and_Robotics/Robotics_Simulation/2023-12-16--tellopy-drone-api/index","path":"/docs/Automation_and_Robotics/Robotics_Simulation/2023-12-16--tellopy-drone-api/2023-12-16","sidebar":"tutorialSidebar"},{"id":"Development/Go/2021-02-21-gofiber-container-gatsby/index","path":"/docs/Development/Go/2021-02-21-gofiber-container-gatsby/2021-02-21","sidebar":"tutorialSidebar"},{"id":"Development/Go/2021-06-03--mqtt-with-golang/index","path":"/docs/Development/Go/2021-06-03--mqtt-with-golang/2021-06-03","sidebar":"tutorialSidebar"},{"id":"Development/Go/2021-09-10--go-websockets/index","path":"/docs/Development/Go/2021-09-10--go-websockets/2021-09-10","sidebar":"tutorialSidebar"},{"id":"Development/Go/2021-09-11--golang-refresher-fmt-strings/index","path":"/docs/Development/Go/2021-09-11--golang-refresher-fmt-strings/2021-09-11","sidebar":"tutorialSidebar"},{"id":"Development/Go/2021-09-11--golang-refresher-math-os/index","path":"/docs/Development/Go/2021-09-11--golang-refresher-math-os/2021-09-11","sidebar":"tutorialSidebar"},{"id":"Development/Go/2021-09-11--golang-refresher-network/index","path":"/docs/Development/Go/2021-09-11--golang-refresher-network/2021-09-11","sidebar":"tutorialSidebar"},{"id":"Development/Go/2021-09-21--golang-react-starter-part-i/index","path":"/docs/Development/Go/2021-09-21--golang-react-starter-part-i/2021-09-21","sidebar":"tutorialSidebar"},{"id":"Development/Go/2021-09-22--golang-react-starter-part-ii/index","path":"/docs/Development/Go/2021-09-22--golang-react-starter-part-ii/2021-09-22","sidebar":"tutorialSidebar"},{"id":"Development/Go/2021-09-23--golang-react-starter-part-iii/index","path":"/docs/Development/Go/2021-09-23--golang-react-starter-part-iii/2021-09-23","sidebar":"tutorialSidebar"},{"id":"Development/Go/2021-09-24--golang-react-starter-part-iv/index","path":"/docs/Development/Go/2021-09-24--golang-react-starter-part-iv/2021-09-24","sidebar":"tutorialSidebar"},{"id":"Development/Go/2021-10-08--goftp/index","path":"/docs/Development/Go/2021-10-08--goftp/2021-10-08","sidebar":"tutorialSidebar"},{"id":"Development/Go/2022-06-15-wails-go-react/index","path":"/docs/Development/Go/2022-06-15-wails-go-react/2022-06-15","sidebar":"tutorialSidebar"},{"id":"Development/Go/2022-10-04-go-ntp-client/index","path":"/docs/Development/Go/2022-10-04-go-ntp-client/2022-10-04","sidebar":"tutorialSidebar"},{"id":"Development/Go/2022-10-05-go-reducing-binary-size/index","path":"/docs/Development/Go/2022-10-05-go-reducing-binary-size/2022-10-05","sidebar":"tutorialSidebar"},{"id":"Development/Go/2022-10-15-go-oauth2-server/index","path":"/docs/Development/Go/2022-10-15-go-oauth2-server/2022-10-15","sidebar":"tutorialSidebar"},{"id":"Development/Go/2022-11-11-go-nts-client-ci/index","path":"/docs/Development/Go/2022-11-11-go-nts-client-ci/2022-11-11","sidebar":"tutorialSidebar"},{"id":"Development/Go/2022-12-26-go-webassembly/index","path":"/docs/Development/Go/2022-12-26-go-webassembly/2022-12-26","sidebar":"tutorialSidebar"},{"id":"Development/Go/2022-12-27-go-bubbles/index","path":"/docs/Development/Go/2022-12-27-go-bubbles/2022-12-27","sidebar":"tutorialSidebar"},{"id":"Development/Go/2022-12-27-go-data-structures/index","path":"/docs/Development/Go/2022-12-27-go-data-structures/2022-12-27","sidebar":"tutorialSidebar"},{"id":"Development/Graphs/2020-05-01--getting-to-know-neo4j/index","path":"/docs/Development/Graphs/2020-05-01--getting-to-know-neo4j/2020-05-01","sidebar":"tutorialSidebar"},{"id":"Development/Graphs/2020-05-02--neo4j-movie-graph/index","path":"/docs/Development/Graphs/2020-05-02--neo4j-movie-graph/2020-05-02","sidebar":"tutorialSidebar"},{"id":"Development/Graphs/2020-05-03--neo4j-cheat-sheet/index","path":"/docs/Development/Graphs/2020-05-03--neo4j-cheat-sheet/2020-05-03","sidebar":"tutorialSidebar"},{"id":"Development/Graphs/2020-05-04--neo4j-corona-tracing/index","path":"/docs/Development/Graphs/2020-05-04--neo4j-corona-tracing/2020-05-04","sidebar":"tutorialSidebar"},{"id":"Development/Graphs/2020-05-05--graphql-queries-and-mutations/index","path":"/docs/Development/Graphs/2020-05-05--graphql-queries-and-mutations/2020-05-05","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2010-01-01--mdx/index","path":"/docs/Development/Javascript/2010-01-01--mdx/2010-01-01","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2010-01-05--markdown-live-code/index","path":"/docs/Development/Javascript/2010-01-05--markdown-live-code/2010-01-05","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2016-05-27--javascript-apis-and-ajax/index","path":"/docs/Development/Javascript/2016-05-27--javascript-apis-and-ajax/2016-05-27","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2016-06-01--node-express-mongodb/index","path":"/docs/Development/Javascript/2016-06-01--node-express-mongodb/2016-06-01","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2016-08-11--node-express-static-wiki/index","path":"/docs/Development/Javascript/2016-08-11--node-express-static-wiki/2016-08-11","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2017-07-04--random-password-generator/index","path":"/docs/Development/Javascript/2017-07-04--random-password-generator/2017-07-04","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2017-07-22--caloric-burn/index","path":"/docs/Development/Javascript/2017-07-22--caloric-burn/2017-07-22","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2017-07-24--obligatory-react-todo-list/index","path":"/docs/Development/Javascript/2017-07-24--obligatory-react-todo-list/2017-07-24","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2017-08-07--google-analytics-amp/index","path":"/docs/Development/Javascript/2017-08-07--google-analytics-amp/2017-08-07","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2017-08-15--gatsby-blog-starter/index","path":"/docs/Development/Javascript/2017-08-15--gatsby-blog-starter/2017-08-15","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2017-08-21--reactive-material/index","path":"/docs/Development/Javascript/2017-08-21--reactive-material/2017-08-21","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2017-09-03--react-under-the-hood/index","path":"/docs/Development/Javascript/2017-09-03--react-under-the-hood/2017-09-03","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2017-12-07--react-router-4/index","path":"/docs/Development/Javascript/2017-12-07--react-router-4/2017-12-07","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2017-12-09--next-start/index","path":"/docs/Development/Javascript/2017-12-09--next-start/2017-12-09","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2017-12-14--gatsby-wiki/index","path":"/docs/Development/Javascript/2017-12-14--gatsby-wiki/2017-12-14","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2017-12-17--gatsby-reactstrap/index","path":"/docs/Development/Javascript/2017-12-17--gatsby-reactstrap/2017-12-17","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2018-01-07--gatsby-material-ui-starter/index","path":"/docs/Development/Javascript/2018-01-07--gatsby-material-ui-starter/2018-01-07","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2018-01-15--react-transition-group-demo/index","path":"/docs/Development/Javascript/2018-01-15--react-transition-group-demo/2018-01-15","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2018-01-17--server-side-render-react-router/index","path":"/docs/Development/Javascript/2018-01-17--server-side-render-react-router/2018-01-17","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2019-08-02--building-an-mqtt-interface/index","path":"/docs/Development/Javascript/2019-08-02--building-an-mqtt-interface/2019-08-02","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2020-01-12--node-express-redirect-server/index","path":"/docs/Development/Javascript/2020-01-12--node-express-redirect-server/2020-01-12","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2021-02-14-next-js-2021/index","path":"/docs/Development/Javascript/2021-02-14-next-js-2021/2021-02-14","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2021-05-07-electron-cross-platform-apps/index","path":"/docs/Development/Javascript/2021-05-07-electron-cross-platform-apps/2021-05-07","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2021-05-08-electron13-gatsby-wrapper/index","path":"/docs/Development/Javascript/2021-05-08-electron13-gatsby-wrapper/2021-05-08","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2021-05-09-electron13-and-react/index","path":"/docs/Development/Javascript/2021-05-09-electron13-and-react/2021-05-09","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2021-05-10-carbon-design-react/index","path":"/docs/Development/Javascript/2021-05-10-carbon-design-react/2021-05-10","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2021-05-11-carbon-design-react-part2/index","path":"/docs/Development/Javascript/2021-05-11-carbon-design-react-part2/2021-05-11","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2021-05-12-carbon-design-react-part3/index","path":"/docs/Development/Javascript/2021-05-12-carbon-design-react-part3/2021-05-12","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2021-06-01--mqtt-with-reactjs/index","path":"/docs/Development/Javascript/2021-06-01--mqtt-with-reactjs/2021-06-01","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2021-06-02--mqtt-cheat-sheet/index","path":"/docs/Development/Javascript/2021-06-02--mqtt-cheat-sheet/2021-06-02","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2021-06-04--mqtt-dashboard-react/index","path":"/docs/Development/Javascript/2021-06-04--mqtt-dashboard-react/2021-06-04","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2021-09-07--intro-to-websockets/index","path":"/docs/Development/Javascript/2021-09-07--intro-to-websockets/2021-09-07","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2021-09-08--websockets-html-video/index","path":"/docs/Development/Javascript/2021-09-08--websockets-html-video/2021-09-08","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2021-09-09--websocket-HAproxy/index","path":"/docs/Development/Javascript/2021-09-09--websocket-HAproxy/2021-09-09","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2021-09-09--websocket-NGINX/index","path":"/docs/Development/Javascript/2021-09-09--websocket-NGINX/2021-09-09","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2021-09-10--notifications-alerts-as-toast/index","path":"/docs/Development/Javascript/2021-09-10--notifications-alerts-as-toast/2021-09-10","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2021-09-10--websocket-recconects/index","path":"/docs/Development/Javascript/2021-09-10--websocket-recconects/2021-09-10","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2022-03-01--json-apis-training/index","path":"/docs/Development/Javascript/2022-03-01--json-apis-training/2022-03-01","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2022-07-01-docusaurus-introduction/index","path":"/docs/Development/Javascript/2022-07-01-docusaurus-introduction/2022-07-01","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2022-10-29-webrtc-introduction-realtime-chat/index","path":"/docs/Development/Javascript/2022-10-29-webrtc-introduction-realtime-chat/2022-10-29","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2022-10-30-webrtc-introduction-video-chat-part1/index","path":"/docs/Development/Javascript/2022-10-30-webrtc-introduction-video-chat-part1/2022-10-30","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2022-11-10-webrtc-introduction-video-chat-part2/index","path":"/docs/Development/Javascript/2022-11-10-webrtc-introduction-video-chat-part2/2022-11-10","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2022-11-19-web3-javascript-app/index","path":"/docs/Development/Javascript/2022-11-19-web3-javascript-app/2022-11-19","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2022-11-29-react-typescript-intro-2023/index","path":"/docs/Development/Javascript/2022-11-29-react-typescript-intro-2023/2022-11-29","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2022-12-11-11ty-starter/index","path":"/docs/Development/Javascript/2022-12-11-11ty-starter/2022-12-11","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2022-12-29-reactive-search-starter/index","path":"/docs/Development/Javascript/2022-12-29-reactive-search-starter/2022-12-29","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2023-02-12-react-meili-search-starter/index","path":"/docs/Development/Javascript/2023-02-12-react-meili-search-starter/2023-02-12","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2023-02-13-gatsby-meili-search-starter/index","path":"/docs/Development/Javascript/2023-02-13-gatsby-meili-search-starter/2023-02-13","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2023-04-01-reactjs-2023/index","path":"/docs/Development/Javascript/2023-04-01-reactjs-2023/2023-04-01","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2023-06-04-nodejs-typescript-sql/index","path":"/docs/Development/Javascript/2023-06-04-nodejs-typescript-sql/2023-06-04","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2023-06-12-typescript-2023/index","path":"/docs/Development/Javascript/2023-06-12-typescript-2023/2023-06-12","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2023-06-12-typescript-pattern/index","path":"/docs/Development/Javascript/2023-06-12-typescript-pattern/2023-06-12","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2023-06-13-typescript-dom-webpack/index","path":"/docs/Development/Javascript/2023-06-13-typescript-dom-webpack/2023-06-13","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2023-06-13-typescript-dom/index","path":"/docs/Development/Javascript/2023-06-13-typescript-dom/2023-06-13","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2023-12-14-reactjs-typescript-2023/index","path":"/docs/Development/Javascript/2023-12-14-reactjs-typescript-2023/2023-12-14","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2023-12-15-reactjs-typescript-redux/index","path":"/docs/Development/Javascript/2023-12-15-reactjs-typescript-redux/2023-12-15","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2023-12-16-reactjs-hooks-typescript/index","path":"/docs/Development/Javascript/2023-12-16-reactjs-hooks-typescript/2023-12-16","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2023-12-18-reactjs-typescript-redux-toolkit/index","path":"/docs/Development/Javascript/2023-12-18-reactjs-typescript-redux-toolkit/2023-12-18","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2023-12-19-react-query-typescript/index","path":"/docs/Development/Javascript/2023-12-19-react-query-typescript/2023-12-19","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2023-12-20-react-query-typescript/index","path":"/docs/Development/Javascript/2023-12-20-react-query-typescript/2023-12-20","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2023-12-21-react-query-tauri-elasticsearch/index","path":"/docs/Development/Javascript/2023-12-21-react-query-tauri-elasticsearch/2023-12-21","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2023-12-24-react-query-tauri-iot-ctrl/index","path":"/docs/Development/Javascript/2023-12-24-react-query-tauri-iot-ctrl/2023-12-21","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2023-12-25-redux-toolkit/index","path":"/docs/Development/Javascript/2023-12-25-redux-toolkit/2023-12-25","sidebar":"tutorialSidebar"},{"id":"Development/Javascript/2023-12-31-js-typescript-rest/index","path":"/docs/Development/Javascript/2023-12-31-js-typescript-rest/2023-12-31","sidebar":"tutorialSidebar"},{"id":"Development/Magento/2019-09-07--magento-development-in-docker/index","path":"/docs/Development/Magento/2019-09-07--magento-development-in-docker/2019-09-07","sidebar":"tutorialSidebar"},{"id":"Development/Magento/2019-09-10--magento2-docker-on-ubuntu/index","path":"/docs/Development/Magento/2019-09-10--magento2-docker-on-ubuntu/2019-09-10","sidebar":"tutorialSidebar"},{"id":"Development/Magento/2019-09-11--magento-on-debian-with-nginx/index","path":"/docs/Development/Magento/2019-09-11--magento-on-debian-with-nginx/2019-09-11","sidebar":"tutorialSidebar"},{"id":"Development/Magento/2019-09-12--magento-and-elasticsearch/index","path":"/docs/Development/Magento/2019-09-12--magento-and-elasticsearch/2019-09-12","sidebar":"tutorialSidebar"},{"id":"Development/Magento/2019-09-13--magento-and-varnish/index","path":"/docs/Development/Magento/2019-09-13--magento-and-varnish/2019-09-13","sidebar":"tutorialSidebar"},{"id":"Development/Magento/2019-09-14--magento-and-themes/index","path":"/docs/Development/Magento/2019-09-14--magento-and-themes/2019-09-14","sidebar":"tutorialSidebar"},{"id":"Development/Magento/2019-09-15--updating-from-php70-to-php72/index","path":"/docs/Development/Magento/2019-09-15--updating-from-php70-to-php72/2019-09-15","sidebar":"tutorialSidebar"},{"id":"Development/Magento/2019-09-16--working-with-sql-dumps/index","path":"/docs/Development/Magento/2019-09-16--working-with-sql-dumps/2019-09-16","sidebar":"tutorialSidebar"},{"id":"Development/Magento/2019-09-17--magento2-modules/index","path":"/docs/Development/Magento/2019-09-17--magento2-modules/2019-09-17","sidebar":"tutorialSidebar"},{"id":"Development/Magento/2019-09-18--magento2-cronjobs/index","path":"/docs/Development/Magento/2019-09-18--magento2-cronjobs/2019-09-18","sidebar":"tutorialSidebar"},{"id":"Development/Magento/2019-09-19--magento2-console-commands/index","path":"/docs/Development/Magento/2019-09-19--magento2-console-commands/2019-09-19","sidebar":"tutorialSidebar"},{"id":"Development/Magento/2019-09-20--magento2-ui-components/index","path":"/docs/Development/Magento/2019-09-20--magento2-ui-components/2019-09-20","sidebar":"tutorialSidebar"},{"id":"Development/Magento/2019-09-21--magento2-docker-install/index","path":"/docs/Development/Magento/2019-09-21--magento2-docker-install/2019-09-21","sidebar":"tutorialSidebar"},{"id":"Development/Magento/2019-09-21--magento2-google-analytics/index","path":"/docs/Development/Magento/2019-09-21--magento2-google-analytics/2019-09-21","sidebar":"tutorialSidebar"},{"id":"Development/Magento/2020-12-07-google-analytics-g4-tag/index","path":"/docs/Development/Magento/2020-12-07-google-analytics-g4-tag/2020-12-07","sidebar":"tutorialSidebar"},{"id":"Development/Magento/2021-07-28--magento2-google-analytics-universal/index","path":"/docs/Development/Magento/2021-07-28--magento2-google-analytics-universal/2021-07-28","sidebar":"tutorialSidebar"},{"id":"Development/Misc/1980-01-01--dcs-f-14-tomcat/index","path":"/docs/Development/Misc/1980-01-01--dcs-f-14-tomcat/1980-01-01","sidebar":"tutorialSidebar"},{"id":"Development/Misc/1980-01-02--dcs-su-25-t/index","path":"/docs/Development/Misc/1980-01-02--dcs-su-25-t/1980-01-02","sidebar":"tutorialSidebar"},{"id":"Development/Misc/2017-06-17--unreal-engine-coding-standards/index","path":"/docs/Development/Misc/2017-06-17--unreal-engine-coding-standards/2017-06-17","sidebar":"tutorialSidebar"},{"id":"Development/Misc/2023-01-20-pandoc-markup-converter/index","path":"/docs/Development/Misc/2023-01-20-pandoc-markup-converter/2023-01-20","sidebar":"tutorialSidebar"},{"id":"Development/Python/2017-12-11--getting-started-with-python/index","path":"/docs/Development/Python/2017-12-11--getting-started-with-python/2017-12-11","sidebar":"tutorialSidebar"},{"id":"Development/Python/2017-12-13--getting-started-with-python-part-ii/index","path":"/docs/Development/Python/2017-12-13--getting-started-with-python-part-ii/2017-12-13","sidebar":"tutorialSidebar"},{"id":"Development/Python/2017-12-17--python-ssh-logger/index","path":"/docs/Development/Python/2017-12-17--python-ssh-logger/2017-12-17","sidebar":"tutorialSidebar"},{"id":"Development/Python/2022-06-01-python-pyscript/index","path":"/docs/Development/Python/2022-06-01-python-pyscript/2022-06-01","sidebar":"tutorialSidebar"},{"id":"Development/Python/2022-06-27-python-web-scraping/index","path":"/docs/Development/Python/2022-06-27-python-web-scraping/2022-06-27","sidebar":"tutorialSidebar"},{"id":"Development/Python/2022-09-17-python-video-processing/index","path":"/docs/Development/Python/2022-09-17-python-video-processing/2022-09-17","sidebar":"tutorialSidebar"},{"id":"Development/Python/2022-10-05-python-text-processing/index","path":"/docs/Development/Python/2022-10-05-python-text-processing/2022-10-05","sidebar":"tutorialSidebar"},{"id":"Development/Python/2022-10-06-python-minify-text/index","path":"/docs/Development/Python/2022-10-06-python-minify-text/2022-10-06","sidebar":"tutorialSidebar"},{"id":"Development/Python/2022-10-07-python-docusaurus-elasticsearch/index","path":"/docs/Development/Python/2022-10-07-python-docusaurus-elasticsearch/2022-10-07","sidebar":"tutorialSidebar"},{"id":"Development/Python/2022-10-08-python-desktop-app/index","path":"/docs/Development/Python/2022-10-08-python-desktop-app/2022-10-08","sidebar":"tutorialSidebar"},{"id":"Development/Python/2022-10-08-python-flask-app/index","path":"/docs/Development/Python/2022-10-08-python-flask-app/2022-10-08","sidebar":"tutorialSidebar"},{"id":"Development/Python/2022-10-09-python-flask-elasticsearch/index","path":"/docs/Development/Python/2022-10-09-python-flask-elasticsearch/2022-10-09","sidebar":"tutorialSidebar"},{"id":"Development/Python/2022-10-10-python-filesystem/index","path":"/docs/Development/Python/2022-10-10-python-filesystem/2022-10-10","sidebar":"tutorialSidebar"},{"id":"Development/Python/2022-10-12-python-regular-expressions/index","path":"/docs/Development/Python/2022-10-12-python-regular-expressions/2022-10-12","sidebar":"tutorialSidebar"},{"id":"Development/Python/2022-10-13-python-rest-api/index","path":"/docs/Development/Python/2022-10-13-python-rest-api/2022-10-13","sidebar":"tutorialSidebar"},{"id":"Development/Python/2022-10-14-python-rest-elastic/index","path":"/docs/Development/Python/2022-10-14-python-rest-elastic/2022-10-14","sidebar":"tutorialSidebar"},{"id":"Development/Python/2022-10-15-python-rest-server/index","path":"/docs/Development/Python/2022-10-15-python-rest-server/2022-10-15","sidebar":"tutorialSidebar"},{"id":"Development/Python/2022-10-22-python-nlp/index","path":"/docs/Development/Python/2022-10-22-python-nlp/2022-10-22","sidebar":"tutorialSidebar"},{"id":"Development/Python/2022-12-11-pipenv/index","path":"/docs/Development/Python/2022-12-11-pipenv/2022-12-11","sidebar":"tutorialSidebar"},{"id":"Development/Python/2023-01-16-python-3-11-features/index","path":"/docs/Development/Python/2023-01-16-python-3-11-features/2023-01-16","sidebar":"tutorialSidebar"},{"id":"Development/Python/2023-04-24-python-pandas-cheat-sheet/index","path":"/docs/Development/Python/2023-04-24-python-pandas-cheat-sheet/2023-04-24","sidebar":"tutorialSidebar"},{"id":"Development/Python/2023-05-03-python-matplotlib-cheat-sheet/index","path":"/docs/Development/Python/2023-05-03-python-matplotlib-cheat-sheet/2023-05-03","sidebar":"tutorialSidebar"},{"id":"Development/Python/2023-05-07-python-scipy-introduction/index","path":"/docs/Development/Python/2023-05-07-python-scipy-introduction/2023-05-07","sidebar":"tutorialSidebar"},{"id":"Development/Python/2023-05-07-python-seaborn-cheat-sheet/index","path":"/docs/Development/Python/2023-05-07-python-seaborn-cheat-sheet/2023-05-07","sidebar":"tutorialSidebar"},{"id":"Development/Python/2023-05-10-plotly-COVID19-dataset/index","path":"/docs/Development/Python/2023-05-10-plotly-COVID19-dataset/2023-05-10","sidebar":"tutorialSidebar"},{"id":"Development/Python/2023-05-12-matplotlib-seaborn-titanic-dataset/index","path":"/docs/Development/Python/2023-05-12-matplotlib-seaborn-titanic-dataset/2023-05-12","sidebar":"tutorialSidebar"},{"id":"Development/Python/2023-05-14-visualizing-text-datasets/index","path":"/docs/Development/Python/2023-05-14-visualizing-text-datasets/2023-05-14","sidebar":"tutorialSidebar"},{"id":"Development/Python/2023-05-16-seaborn-cc-churn-vis/index","path":"/docs/Development/Python/2023-05-16-seaborn-cc-churn-vis/2023-05-16","sidebar":"tutorialSidebar"},{"id":"Development/Python/2023-05-17-fandango-ratings-controversy/index","path":"/docs/Development/Python/2023-05-17-fandango-ratings-controversy/2023-05-17","sidebar":"tutorialSidebar"},{"id":"Development/Python/2023-05-18-python-asserts/index","path":"/docs/Development/Python/2023-05-18-python-asserts/2023-05-18","sidebar":"tutorialSidebar"},{"id":"Development/Python/2023-05-20-python-sklearn-cheat-sheet/index","path":"/docs/Development/Python/2023-05-20-python-sklearn-cheat-sheet/2023-05-20","sidebar":"tutorialSidebar"},{"id":"Development/Python/2023-05-28-telco-churn-cohort-study/index","path":"/docs/Development/Python/2023-05-28-telco-churn-cohort-study/2023-05-28","sidebar":"tutorialSidebar"},{"id":"Development/Python/2023-07-09-python-scikit-image-intro/index","path":"/docs/Development/Python/2023-07-09-python-scikit-image-intro/2023-07-09","sidebar":"tutorialSidebar"},{"id":"Development/Python/2023-08-14-python-scikit-image-opencv/index","path":"/docs/Development/Python/2023-08-14-python-scikit-image-opencv/2023-08-14","sidebar":"tutorialSidebar"},{"id":"Development/ReactNative/2022-05-01-react-native-hello-world/index","path":"/docs/Development/ReactNative/2022-05-01-react-native-hello-world/2022-05-01","sidebar":"tutorialSidebar"},{"id":"Development/ReactNative/2022-05-02-react-native-navigation/index","path":"/docs/Development/ReactNative/2022-05-02-react-native-navigation/2022-05-02","sidebar":"tutorialSidebar"},{"id":"Development/ReactNative/2022-05-03-react-native-contextapi/index","path":"/docs/Development/ReactNative/2022-05-03-react-native-contextapi/2022-05-03","sidebar":"tutorialSidebar"},{"id":"Development/ReactNative/2022-05-04-react-native-hooks/index","path":"/docs/Development/ReactNative/2022-05-04-react-native-hooks/2022-05-04","sidebar":"tutorialSidebar"},{"id":"Development/ReactNative/2022-05-05-react-native-context-hooks/index","path":"/docs/Development/ReactNative/2022-05-05-react-native-context-hooks/2022-05-05","sidebar":"tutorialSidebar"},{"id":"Development/ReactNative/2022-05-06-react-native-reducer/index","path":"/docs/Development/ReactNative/2022-05-06-react-native-reducer/2022-05-06","sidebar":"tutorialSidebar"},{"id":"DevOps/Ansible/2020-11-18--ansible-on-debian-buster/index","path":"/docs/DevOps/Ansible/2020-11-18--ansible-on-debian-buster/2020-11-18","sidebar":"tutorialSidebar"},{"id":"DevOps/Ansible/2020-11-19--ansible-playbooks/index","path":"/docs/DevOps/Ansible/2020-11-19--ansible-playbooks/2020-11-19","sidebar":"tutorialSidebar"},{"id":"DevOps/Ansible/2020-11-20--ansible-copy-cheat-sheet/index","path":"/docs/DevOps/Ansible/2020-11-20--ansible-copy-cheat-sheet/2020-11-20","sidebar":"tutorialSidebar"},{"id":"DevOps/Ansible/2020-11-21--ansible-modules-and-roles/index","path":"/docs/DevOps/Ansible/2020-11-21--ansible-modules-and-roles/2020-11-21","sidebar":"tutorialSidebar"},{"id":"DevOps/Ansible/2020-11-22--ansible-and-docker/index","path":"/docs/DevOps/Ansible/2020-11-22--ansible-and-docker/2020-11-22","sidebar":"tutorialSidebar"},{"id":"DevOps/Ansible/2020-11-23--ansible-getting-serious/index","path":"/docs/DevOps/Ansible/2020-11-23--ansible-getting-serious/2020-11-23","sidebar":"tutorialSidebar"},{"id":"DevOps/Ansible/2020-11-24--ansible-vault-user-login/index","path":"/docs/DevOps/Ansible/2020-11-24--ansible-vault-user-login/2020-11-24","sidebar":"tutorialSidebar"},{"id":"DevOps/Ansible/2020-11-25--ansible-in-gitlab-ci/index","path":"/docs/DevOps/Ansible/2020-11-25--ansible-in-gitlab-ci/2020-11-25","sidebar":"tutorialSidebar"},{"id":"DevOps/Ansible/2020-11-26--ansible-dind/index","path":"/docs/DevOps/Ansible/2020-11-26--ansible-dind/2020-11-26","sidebar":"tutorialSidebar"},{"id":"DevOps/Ansible/2021-04-28-ansible-tower-rhel/index","path":"/docs/DevOps/Ansible/2021-04-28-ansible-tower-rhel/2021-04-28","sidebar":"tutorialSidebar"},{"id":"DevOps/Ansible/2021-04-29-ansible-tower-setup/index","path":"/docs/DevOps/Ansible/2021-04-29-ansible-tower-setup/2021-04-29","sidebar":"tutorialSidebar"},{"id":"DevOps/Ansible/2021-04-30-ansible-tower-slack-notifications/index","path":"/docs/DevOps/Ansible/2021-04-30-ansible-tower-slack-notifications/2021-04-30","sidebar":"tutorialSidebar"},{"id":"DevOps/Ansible/2021-05-01-ansible-tower-workflow-templates/index","path":"/docs/DevOps/Ansible/2021-05-01-ansible-tower-workflow-templates/2021-05-01","sidebar":"tutorialSidebar"},{"id":"DevOps/Ansible/2021-05-02-ansible-tower-examples/index","path":"/docs/DevOps/Ansible/2021-05-02-ansible-tower-examples/2021-05-02","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2017-10-03--search-engine-setup-and-configuration/index","path":"/docs/DevOps/Elasticsearch/2017-10-03--search-engine-setup-and-configuration/2017-10-03","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2017-12-05--elasticsearch-react-example/index","path":"/docs/DevOps/Elasticsearch/2017-12-05--elasticsearch-react-example/2017-12-05","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2017-12-26--elasticsearch-kibana/index","path":"/docs/DevOps/Elasticsearch/2017-12-26--elasticsearch-kibana/2017-12-16","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2017-12-31--securing-elasticsearch-xpack/index","path":"/docs/DevOps/Elasticsearch/2017-12-31--securing-elasticsearch-xpack/2017-12-31","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2018-01-01--securing-elasticsearch-readonlyrest/index","path":"/docs/DevOps/Elasticsearch/2018-01-01--securing-elasticsearch-readonlyrest/2018-01-01","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2019-09-08--elasticsearch_7-5_docker/index","path":"/docs/DevOps/Elasticsearch/2019-09-08--elasticsearch_7-5_docker/2019-09-08","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2020-06-01--elasticsearch-docker/index","path":"/docs/DevOps/Elasticsearch/2020-06-01--elasticsearch-docker/2020-06-01","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2021-03-20-elasticsearch-7-refresher/index","path":"/docs/DevOps/Elasticsearch/2021-03-20-elasticsearch-7-refresher/2021-03-20","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2021-03-21-logstash-digesting-data/index","path":"/docs/DevOps/Elasticsearch/2021-03-21-logstash-digesting-data/2021-03-21","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2021-03-22-logstash-working-with-structured-data/index","path":"/docs/DevOps/Elasticsearch/2021-03-22-logstash-working-with-structured-data/2021-03-22","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2021-03-23-logstash-working-with-unstructured-data/index","path":"/docs/DevOps/Elasticsearch/2021-03-23-logstash-working-with-unstructured-data/2021-03-23","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2021-03-24-logstash-common-grok-pattern/index","path":"/docs/DevOps/Elasticsearch/2021-03-24-logstash-common-grok-pattern/2021-03-24","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/cheat-sheet","path":"/docs/DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/elasticsearch-cheat-sheet","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/index","path":"/docs/DevOps/Elasticsearch/2021-03-25-elasticsearch7-activate-logging-of-search-queries/2021-03-25","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2021-03-26-elasticsearch7-for-syslog-messages/index","path":"/docs/DevOps/Elasticsearch/2021-03-26-elasticsearch7-for-syslog-messages/2021-03-26","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2021-03-27-elasticsearch7-aggregations/index","path":"/docs/DevOps/Elasticsearch/2021-03-27-elasticsearch7-aggregations/2021-03-27","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2021-03-28-elasticsearch7-timeseries/index","path":"/docs/DevOps/Elasticsearch/2021-03-28-elasticsearch7-timeseries/2021-03-28","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2021-03-29-elasticsearch7-data-transformations/index","path":"/docs/DevOps/Elasticsearch/2021-03-29-elasticsearch7-data-transformations/2021-03-29","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2021-03-30-elasticsearch7-and-filebeats/index","path":"/docs/DevOps/Elasticsearch/2021-03-30-elasticsearch7-and-filebeats/2021-03-30","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2021-03-31-elastic-filebeats-for-apache-logs/index","path":"/docs/DevOps/Elasticsearch/2021-03-31-elastic-filebeats-for-apache-logs/2021-03-31","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2021-04-01-elastic-filebeats-for-nginx-logs/index","path":"/docs/DevOps/Elasticsearch/2021-04-01-elastic-filebeats-for-nginx-logs/2021-04-01","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2022-02-02--elasticsearch-v8-upgrade/index","path":"/docs/DevOps/Elasticsearch/2022-02-02--elasticsearch-v8-upgrade/2022-02-02","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2022-02-03--elasticsearch-v8-data-ingestion/index","path":"/docs/DevOps/Elasticsearch/2022-02-03--elasticsearch-v8-data-ingestion/2022-02-03","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2022-02-04--kibana-v8-search-queries/index","path":"/docs/DevOps/Elasticsearch/2022-02-04--kibana-v8-search-queries/2022-02-04","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2022-02-05--kibana-v8-index-management/index","path":"/docs/DevOps/Elasticsearch/2022-02-05--kibana-v8-index-management/2022-02-05","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2022-02-06--elasticsearch-v8-data-ingestion-apache/index","path":"/docs/DevOps/Elasticsearch/2022-02-06--elasticsearch-v8-data-ingestion-apache/2022-02-06","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2022-10-11--opensearch-docker-compose/index","path":"/docs/DevOps/Elasticsearch/2022-10-11--opensearch-docker-compose/2022-10-11","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2022-10-12--opensearch-rest-api/index","path":"/docs/DevOps/Elasticsearch/2022-10-12--opensearch-rest-api/2022-10-12","sidebar":"tutorialSidebar"},{"id":"DevOps/Elasticsearch/2023-02-10--meili-rusty-elastic-docker/index","path":"/docs/DevOps/Elasticsearch/2023-02-10--meili-rusty-elastic-docker/2023-02-10","sidebar":"tutorialSidebar"},{"id":"DevOps/GitOps/2020-02-01--gitlab-in-podman-on-centos8/index","path":"/docs/DevOps/GitOps/2020-02-01--gitlab-in-podman-on-centos8/2020-02-01","sidebar":"tutorialSidebar"},{"id":"DevOps/GitOps/2020-02-02--docker-images-in-gitlab/index","path":"/docs/DevOps/GitOps/2020-02-02--docker-images-in-gitlab/2020-02-02","sidebar":"tutorialSidebar"},{"id":"DevOps/GitOps/2020-08-01--gitlab-install-on-ubuntu-server/index","path":"/docs/DevOps/GitOps/2020-08-01--gitlab-install-on-ubuntu-server/2020-08-01","sidebar":"tutorialSidebar"},{"id":"DevOps/GitOps/2020-08-02--gitlab-setup/index","path":"/docs/DevOps/GitOps/2020-08-02--gitlab-setup/2020-08-02","sidebar":"tutorialSidebar"},{"id":"DevOps/GitOps/2020-08-03--gitlab-as-docker-registry/index","path":"/docs/DevOps/GitOps/2020-08-03--gitlab-as-docker-registry/2020-08-03","sidebar":"tutorialSidebar"},{"id":"DevOps/GitOps/2020-08-04--working-with-gitlab/index","path":"/docs/DevOps/GitOps/2020-08-04--working-with-gitlab/2020-08-04","sidebar":"tutorialSidebar"},{"id":"DevOps/GitOps/2021-02-25-gatsby-build-gitlab-pipeline/index","path":"/docs/DevOps/GitOps/2021-02-25-gatsby-build-gitlab-pipeline/2021-02-25","sidebar":"tutorialSidebar"},{"id":"DevOps/GitOps/2022-03-16--gitlab-docker-compose-on-localhost/index","path":"/docs/DevOps/GitOps/2022-03-16--gitlab-docker-compose-on-localhost/2022-03-16","sidebar":"tutorialSidebar"},{"id":"DevOps/GitOps/2022-11-10-go-gitlab-ci-pipeline/index","path":"/docs/DevOps/GitOps/2022-11-10-go-gitlab-ci-pipeline/2022-11-10","sidebar":"tutorialSidebar"},{"id":"DevOps/GitOps/2023-10-28-github-passkey/index","path":"/docs/DevOps/GitOps/2023-10-28-github-passkey/2023-10-28","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2020-08-15--installing-nomad-ubuntu/index","path":"/docs/DevOps/Hashicorp/2020-08-15--installing-nomad-ubuntu/2020-08-15","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2020-08-16--nomad-cluster/index","path":"/docs/DevOps/Hashicorp/2020-08-16--nomad-cluster/2020-08-16","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2020-08-17--installing-consul-ubuntu/index","path":"/docs/DevOps/Hashicorp/2020-08-17--installing-consul-ubuntu/2020-08-17","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2020-08-18--consul-mock-datacenter/index","path":"/docs/DevOps/Hashicorp/2020-08-18--consul-mock-datacenter/2020-08-19","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2020-08-18--consul-service-mesh/index","path":"/docs/DevOps/Hashicorp/2020-08-18--consul-service-mesh/2020-08-18","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2020-08-19--consul-deployment-guide/index","path":"/docs/DevOps/Hashicorp/2020-08-19--consul-deployment-guide/2020-08-19","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2020-10-23--hashicorp-packer-machine-image/index","path":"/docs/DevOps/Hashicorp/2020-10-23--hashicorp-packer-machine-image/2020-10-23","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2020-10-24--hashicorp-packer-and-virtualbox-preseed/index","path":"/docs/DevOps/Hashicorp/2020-10-24--hashicorp-packer-and-virtualbox-preseed/2020-10-24","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2020-10-25--hashicorp-packer-and-virtualbox-autoinstall/index","path":"/docs/DevOps/Hashicorp/2020-10-25--hashicorp-packer-and-virtualbox-autoinstall/2020-10-25","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2020-10-26--hashicorp-packer-provisioner/index","path":"/docs/DevOps/Hashicorp/2020-10-26--hashicorp-packer-provisioner/2020-10-26","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2021-08-01--hashicorp-nomad-refresher/index","path":"/docs/DevOps/Hashicorp/2021-08-01--hashicorp-nomad-refresher/2021-08-01","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2021-08-02--hashicorp-nomad-security/index","path":"/docs/DevOps/Hashicorp/2021-08-02--hashicorp-nomad-security/2021-08-02","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2021-08-03--hashicorp-nomad-jobs/index","path":"/docs/DevOps/Hashicorp/2021-08-03--hashicorp-nomad-jobs/2021-08-03","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2021-08-04--hashicorp-nomad-job-specifications/index","path":"/docs/DevOps/Hashicorp/2021-08-04--hashicorp-nomad-job-specifications/2021-08-04","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2021-08-05--hashicorp-consul-service-discovery/index","path":"/docs/DevOps/Hashicorp/2021-08-05--hashicorp-consul-service-discovery/2021-08-05","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2021-08-06--hashicorp-consul-fabio-loadbalancing/index","path":"/docs/DevOps/Hashicorp/2021-08-06--hashicorp-consul-fabio-loadbalancing/2021-08-06","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2021-08-06--hashicorp-consul-traefik-loadbalancing/index","path":"/docs/DevOps/Hashicorp/2021-08-06--hashicorp-consul-traefik-loadbalancing/2021-08-06","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2021-08-07--hashicorp-nomad-job-configuration/index","path":"/docs/DevOps/Hashicorp/2021-08-07--hashicorp-nomad-job-configuration/2021-08-07","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2021-08-08--hashicorp-nomad-access-control-lists/index","path":"/docs/DevOps/Hashicorp/2021-08-08--hashicorp-nomad-access-control-lists/2021-08-08","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2021-08-09--hashicorp-consul-services/index","path":"/docs/DevOps/Hashicorp/2021-08-09--hashicorp-consul-services/2021-08-09","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2021-08-10--hashicorp-consul-key-value-store/index","path":"/docs/DevOps/Hashicorp/2021-08-10--hashicorp-consul-key-value-store/2021-08-10","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2021-08-11--hashicorp-consul-backups/index","path":"/docs/DevOps/Hashicorp/2021-08-11--hashicorp-consul-backups/2021-08-11","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2021-08-12--hashicorp-consul-service-mesh/index","path":"/docs/DevOps/Hashicorp/2021-08-12--hashicorp-consul-service-mesh/2021-08-12","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2021-08-13--hashicorp-consul-access-control-lists/index","path":"/docs/DevOps/Hashicorp/2021-08-13--hashicorp-consul-access-control-lists/2021-08-13","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2021-08-14--hashicorp-consul-tls-encryption/index","path":"/docs/DevOps/Hashicorp/2021-08-14--hashicorp-consul-tls-encryption/2021-08-14","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2021-08-20--hashicorp-vault-setup/index","path":"/docs/DevOps/Hashicorp/2021-08-20--hashicorp-vault-setup/2021-08-20","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2021-08-21--hashicorp-vault-secrets-tokens/index","path":"/docs/DevOps/Hashicorp/2021-08-21--hashicorp-vault-secrets-tokens/2021-08-21","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2021-08-22--hashicorp-vault-policies/index","path":"/docs/DevOps/Hashicorp/2021-08-22--hashicorp-vault-policies/2021-08-22","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2021-08-23--hashicorp-vault-rest-api/index","path":"/docs/DevOps/Hashicorp/2021-08-23--hashicorp-vault-rest-api/2021-08-23","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2021-08-25--hashicorp-vault-logging/index","path":"/docs/DevOps/Hashicorp/2021-08-25--hashicorp-vault-logging/2021-08-25","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2021-09-05--hashicorp-terraform-setup/index","path":"/docs/DevOps/Hashicorp/2021-09-05--hashicorp-terraform-setup/2021-09-05","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2021-09-06--hashicorp-terraform-providers-variables-attributes/index","path":"/docs/DevOps/Hashicorp/2021-09-06--hashicorp-terraform-providers-variables-attributes/2021-09-07","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2021-10-10--hashicorp-nomad-in-production/index","path":"/docs/DevOps/Hashicorp/2021-10-10--hashicorp-nomad-in-production/2021-10-10","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2021-10-11--hashicorp-consul-in-production/index","path":"/docs/DevOps/Hashicorp/2021-10-11--hashicorp-consul-in-production/2021-10-11","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-05-15-hashicorp-nomad-refresher/index","path":"/docs/DevOps/Hashicorp/2022-05-15-hashicorp-nomad-refresher/2022-05-15","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-05-16-hashicorp-dojo-nomad-starter/index","path":"/docs/DevOps/Hashicorp/2022-05-16-hashicorp-dojo-nomad-starter/2022-05-16","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-05-17-hashicorp-dojo-nomad-deployment/index","path":"/docs/DevOps/Hashicorp/2022-05-17-hashicorp-dojo-nomad-deployment/2022-05-17","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-05-18-hashicorp-dojo-nomad-adding-encryption/index","path":"/docs/DevOps/Hashicorp/2022-05-18-hashicorp-dojo-nomad-adding-encryption/2022-05-18","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-05-19-hashicorp-dojo-nomad-access-control/index","path":"/docs/DevOps/Hashicorp/2022-05-19-hashicorp-dojo-nomad-access-control/2022-05-19","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-05-20-hashicorp-dojo-nomad-consul/index","path":"/docs/DevOps/Hashicorp/2022-05-20-hashicorp-dojo-nomad-consul/2022-05-20","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-05-21-hashicorp-dojo-consul-refresher/index","path":"/docs/DevOps/Hashicorp/2022-05-21-hashicorp-dojo-consul-refresher/2022-05-21","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-05-22-hashicorp-dojo-nomad-consul-part-2/index","path":"/docs/DevOps/Hashicorp/2022-05-22-hashicorp-dojo-nomad-consul-part-2/2022-05-22","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-05-24-hashicorp-nomad-with-nginx/index","path":"/docs/DevOps/Hashicorp/2022-05-24-hashicorp-nomad-with-nginx/2022-05-24","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-05-25-hashicorp-nomad-with-gitlab/index","path":"/docs/DevOps/Hashicorp/2022-05-25-hashicorp-nomad-with-gitlab/2022-05-25","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-05-26-hashicorp-nomad-with-gitlab-part-2/index","path":"/docs/DevOps/Hashicorp/2022-05-26-hashicorp-nomad-with-gitlab-part-2/2022-05-26","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-05-27-hashicorp-nomad-for-elastic/index","path":"/docs/DevOps/Hashicorp/2022-05-27-hashicorp-nomad-for-elastic/2022-05-27","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-05-28-hashicorp-nomad-for-elastic-part-2/index","path":"/docs/DevOps/Hashicorp/2022-05-28-hashicorp-nomad-for-elastic-part-2/2022-05-28","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-05-29-hashicorp-nomad-with-nginx-loadbalancer/index","path":"/docs/DevOps/Hashicorp/2022-05-29-hashicorp-nomad-with-nginx-loadbalancer/2022-05-29","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-06-07-hashicorp-waypoint-docker/index","path":"/docs/DevOps/Hashicorp/2022-06-07-hashicorp-waypoint-docker/2022-06-07","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-06-08-hashicorp-waypoint-nomad/index","path":"/docs/DevOps/Hashicorp/2022-06-08-hashicorp-waypoint-nomad/2022-06-09","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-09-22--nomad-nts-timeserver/index","path":"/docs/DevOps/Hashicorp/2022-09-22--nomad-nts-timeserver/2022-09-22","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-09-24--nomad-nginx-ingress/index","path":"/docs/DevOps/Hashicorp/2022-09-24--nomad-nginx-ingress/2022-09-24","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-10-21-hashicorp-nomad-for-osticket-part-i/index","path":"/docs/DevOps/Hashicorp/2022-10-21-hashicorp-nomad-for-osticket-part-i/2022-10-21","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-10-22-hashicorp-nomad-sidecar-pattern/index","path":"/docs/DevOps/Hashicorp/2022-10-22-hashicorp-nomad-sidecar-pattern/2022-10-22","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-10-23-hashicorp-consul-connect/index","path":"/docs/DevOps/Hashicorp/2022-10-23-hashicorp-consul-connect/2022-10-23","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-10-23-hashicorp-nomad-ports/index","path":"/docs/DevOps/Hashicorp/2022-10-23-hashicorp-nomad-ports/2022-10-23","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-10-25-hashicorp-nomad-for-osticket-part-ii/index","path":"/docs/DevOps/Hashicorp/2022-10-25-hashicorp-nomad-for-osticket-part-ii/2022-10-25","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-11-11-hashicorp-nomad-for-borg-backups/index","path":"/docs/DevOps/Hashicorp/2022-11-11-hashicorp-nomad-for-borg-backups/2022-11-11","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-11-12-hashicorp-nomad-certbot-renewal/index","path":"/docs/DevOps/Hashicorp/2022-11-12-hashicorp-nomad-certbot-renewal/2022-11-12","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-11-15-hashicorp-nomad-balanced-nts/index","path":"/docs/DevOps/Hashicorp/2022-11-15-hashicorp-nomad-balanced-nts/2022-11-15","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-11-15-hashicorp-nomad-nginx-load-balancing/index","path":"/docs/DevOps/Hashicorp/2022-11-15-hashicorp-nomad-nginx-load-balancing/2022-11-15","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-11-16-hashicorp-nomad-mautic/index","path":"/docs/DevOps/Hashicorp/2022-11-16-hashicorp-nomad-mautic/2022-11-16","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-11-18-hashicorp-nomad-grav/index","path":"/docs/DevOps/Hashicorp/2022-11-18-hashicorp-nomad-grav/2022-11-18","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-11-24-hashicorp-consul-connect/index","path":"/docs/DevOps/Hashicorp/2022-11-24-hashicorp-consul-connect/2022-11-24","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-12-03-hashicorp-vault-installation/index","path":"/docs/DevOps/Hashicorp/2022-12-03-hashicorp-vault-installation/2022-12-03","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-12-04-hashicorp-consul-vault-certificates-part1/index","path":"/docs/DevOps/Hashicorp/2022-12-04-hashicorp-consul-vault-certificates-part1/2022-12-04","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part2/index","path":"/docs/DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part2/2022-12-05","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part3/index","path":"/docs/DevOps/Hashicorp/2022-12-05-hashicorp-consul-vault-certificates-part3/2022-12-05","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2022-12-07-hashicorp-vault-ca-certificates/index","path":"/docs/DevOps/Hashicorp/2022-12-07-hashicorp-vault-ca-certificates/2022-12-07","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2023-10-22-hashicorp-terraform-docker-2023/index","path":"/docs/DevOps/Hashicorp/2023-10-22-hashicorp-terraform-docker-2023/2023-10-22","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2023-12-22-hashicorp-terraform-docker-2024/index","path":"/docs/DevOps/Hashicorp/2023-12-22-hashicorp-terraform-docker-2024/2023-12-22","sidebar":"tutorialSidebar"},{"id":"DevOps/Hashicorp/2023-12-23-opentofu-vs-terraform/index","path":"/docs/DevOps/Hashicorp/2023-12-23-opentofu-vs-terraform/2023-12-22","sidebar":"tutorialSidebar"},{"id":"DevOps/Kubernetes/2019-01-02--managing-containers-in-kubernetes/index","path":"/docs/DevOps/Kubernetes/2019-01-02--managing-containers-in-kubernetes/2019-01-02","sidebar":"tutorialSidebar"},{"id":"DevOps/Kubernetes/2019-01-15--creating-a-kubernetes-cluster/index","path":"/docs/DevOps/Kubernetes/2019-01-15--creating-a-kubernetes-cluster/2019-01-15","sidebar":"tutorialSidebar"},{"id":"DevOps/Kubernetes/2019-01-17--kubernetes-and-microservices/index","path":"/docs/DevOps/Kubernetes/2019-01-17--kubernetes-and-microservices/2019-01-17","sidebar":"tutorialSidebar"},{"id":"DevOps/Kubernetes/2019-01-19--kubernetes-cluster-logging/index","path":"/docs/DevOps/Kubernetes/2019-01-19--kubernetes-cluster-logging/2019-01-19","sidebar":"tutorialSidebar"},{"id":"DevOps/Kubernetes/2019-01-21--kubernetes-bare-metal-ingress/index","path":"/docs/DevOps/Kubernetes/2019-01-21--kubernetes-bare-metal-ingress/2019-01-21","sidebar":"tutorialSidebar"},{"id":"DevOps/Kubernetes/2019-01-21--kubernetes-nginx-https-service/index","path":"/docs/DevOps/Kubernetes/2019-01-21--kubernetes-nginx-https-service/2019-01-21","sidebar":"tutorialSidebar"},{"id":"DevOps/Kubernetes/2019-01-22--kubernetes-nginx-ingress/index","path":"/docs/DevOps/Kubernetes/2019-01-22--kubernetes-nginx-ingress/2019-01-22","sidebar":"tutorialSidebar"},{"id":"DevOps/Kubernetes/2019-01-27--kubernetes-the-chinese-way/index","path":"/docs/DevOps/Kubernetes/2019-01-27--kubernetes-the-chinese-way/2019-01-27","sidebar":"tutorialSidebar"},{"id":"DevOps/Kubernetes/2019-02-01--kubernetes-traefik-ingress/index","path":"/docs/DevOps/Kubernetes/2019-02-01--kubernetes-traefik-ingress/2019-02-01","sidebar":"tutorialSidebar"},{"id":"DevOps/Kubernetes/2019-03-02--installing-openshift-3-on-centos-7/index","path":"/docs/DevOps/Kubernetes/2019-03-02--installing-openshift-3-on-centos-7/2019-03-02","sidebar":"tutorialSidebar"},{"id":"DevOps/Kubernetes/2019-03-05--first-openshift3-cluster/index","path":"/docs/DevOps/Kubernetes/2019-03-05--first-openshift3-cluster/2019-03-05","sidebar":"tutorialSidebar"},{"id":"DevOps/Kubernetes/2022-11-19--k3s-air-gapped-kubernetes/index","path":"/docs/DevOps/Kubernetes/2022-11-19--k3s-air-gapped-kubernetes/2022-11-19","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2018-10-27--red-hat-certified-engineer-rhce/index","path":"/docs/DevOps/Linux/2018-10-27--red-hat-certified-engineer-rhce/2018-10-27","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2019-01-11--debian-change-ssh-port-hostname/index","path":"/docs/DevOps/Linux/2019-01-11--debian-change-ssh-port-hostname/2019-01-11","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2019-01-11--root-access-ubuntu-server/index","path":"/docs/DevOps/Linux/2019-01-11--root-access-ubuntu-server/2019-01-11","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2019-01-11--ubuntu-network-configuration/index","path":"/docs/DevOps/Linux/2019-01-11--ubuntu-network-configuration/2019-01-11","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2019-01-11--ubuntu-server-app-armour/index","path":"/docs/DevOps/Linux/2019-01-11--ubuntu-server-app-armour/2019-01-11","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2019-01-12--centos-network-configuration/index","path":"/docs/DevOps/Linux/2019-01-12--centos-network-configuration/2019-01-12","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2019-01-13--centos-administration/index","path":"/docs/DevOps/Linux/2019-01-13--centos-administration/2019-01-13","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2019-06-07--installing-docker-on-centos8/index","path":"/docs/DevOps/Linux/2019-06-07--installing-docker-on-centos8/2019-06-07","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2019-06-14--download-and-save-docker-image/index","path":"/docs/DevOps/Linux/2019-06-14--download-and-save-docker-image/2019-06-14","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2019-06-17--working-with-tmux/index","path":"/docs/DevOps/Linux/2019-06-17--working-with-tmux/2019-06-17","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2019-09-22--centos8-network-config/index","path":"/docs/DevOps/Linux/2019-09-22--centos8-network-config/2019-09-22","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2019-09-22--zsh-on-centos8/index","path":"/docs/DevOps/Linux/2019-09-22--zsh-on-centos8/2019-09-22","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2019-09-22--zsh-on-ubuntu20/index","path":"/docs/DevOps/Linux/2019-09-22--zsh-on-ubuntu20/2019-09-22","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2019-09-25--podman-cheat-sheet/index","path":"/docs/DevOps/Linux/2019-09-25--podman-cheat-sheet/2019-09-25","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2019-09-26--kali-docker-windows/index","path":"/docs/DevOps/Linux/2019-09-26--kali-docker-windows/2019-09-26","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2019-12-03--podman-ftp-server-container/index","path":"/docs/DevOps/Linux/2019-12-03--podman-ftp-server-container/2019-12-03","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2020-01-05--centos8-cockpit/index","path":"/docs/DevOps/Linux/2020-01-05--centos8-cockpit/2020-01-05","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2020-01-07--centos8-firewalld/index","path":"/docs/DevOps/Linux/2020-01-07--centos8-firewalld/2020-01-05","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2020-10-13--smarttools-centos/index","path":"/docs/DevOps/Linux/2020-10-13--smarttools-centos/2020-10-13","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2020-10-20--activating-root-login-ubuntu-20-10/index","path":"/docs/DevOps/Linux/2020-10-20--activating-root-login-ubuntu-20-10/2020-10-20","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2021-03-15-debian-upgrade-bullseye/index","path":"/docs/DevOps/Linux/2021-03-15-debian-upgrade-bullseye/2021-03-15","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2021-04-11-installing-free-red-hat-enterprise-linux/index","path":"/docs/DevOps/Linux/2021-04-11-installing-free-red-hat-enterprise-linux/2021-04-11","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2021-04-12-gnome3-cheat-sheet/index","path":"/docs/DevOps/Linux/2021-04-12-gnome3-cheat-sheet/2021-04-12","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2021-04-13-installing-kvm-on-red-hat-enterprise-linux/index","path":"/docs/DevOps/Linux/2021-04-13-installing-kvm-on-red-hat-enterprise-linux/2021-04-13","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2021-04-14-using-deb-files-on-rhel8/index","path":"/docs/DevOps/Linux/2021-04-14-using-deb-files-on-rhel8/2021-04-14","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2021-09-01--kali-linux-raspberry-pi/index","path":"/docs/DevOps/Linux/2021-09-01--kali-linux-raspberry-pi/2021-09-01","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2021-09-02--openwrt-raspberry-pi/index","path":"/docs/DevOps/Linux/2021-09-02--openwrt-raspberry-pi/2021-09-02","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2021-10-09--editor-from-hell/index","path":"/docs/DevOps/Linux/2021-10-09--editor-from-hell/2021-10-09","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2021-10-09--the-friendly-editor/index","path":"/docs/DevOps/Linux/2021-10-09--the-friendly-editor/2021-10-09","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2021-10-23--arch-linux-install-packages/index","path":"/docs/DevOps/Linux/2021-10-23--arch-linux-install-packages/2021-10-23","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2021-10-24--arch-linux-install-docker/index","path":"/docs/DevOps/Linux/2021-10-24--arch-linux-install-docker/2021-10-24","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2021-10-24--arch-linux-install-mesen/index","path":"/docs/DevOps/Linux/2021-10-24--arch-linux-install-mesen/2021-10-24","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2021-10-26--install-davinci-resolve-on-arch/index","path":"/docs/DevOps/Linux/2021-10-26--install-davinci-resolve-on-arch/2021-10-26","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2022-03-07--ffmpeg-cheat-sheet/index","path":"/docs/DevOps/Linux/2022-03-07--ffmpeg-cheat-sheet/2022-03-07","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2022-03-08--arch-kde-fritz-vpn/index","path":"/docs/DevOps/Linux/2022-03-08--arch-kde-fritz-vpn/2022-03-08","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2022-03-09--fing-cli-network-scanner/index","path":"/docs/DevOps/Linux/2022-03-09--fing-cli-network-scanner/2022-03-09","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2022-03-10--nmap-network-scanner/index","path":"/docs/DevOps/Linux/2022-03-10--nmap-network-scanner/2022-03-10","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2022-09-15--ntp-over-nts-timeserver/index","path":"/docs/DevOps/Linux/2022-09-15--ntp-over-nts-timeserver/2022-09-21","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2022-09-28--nts-client-setup/index","path":"/docs/DevOps/Linux/2022-09-28--nts-client-setup/2022-09-28","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2022-09-29--build-an-chrony-nts-client-from-source/index","path":"/docs/DevOps/Linux/2022-09-29--build-an-chrony-nts-client-from-source/2022-09-29","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2022-11-04--check-filesystem/index","path":"/docs/DevOps/Linux/2022-11-04--check-filesystem/2022-11-04","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2022-11-09--docker-borg-backupserver/index","path":"/docs/DevOps/Linux/2022-11-09--docker-borg-backupserver/2022-11-09","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2023-02-03--installing-docker-raspberry-pi/index","path":"/docs/DevOps/Linux/2023-02-03--installing-docker-raspberry-pi/2023-02-03","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2023-03-29--installing-the-elgato-streamdeck/index","path":"/docs/DevOps/Linux/2023-03-29--installing-the-elgato-streamdeck/2023-03-29","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2023-10-28--lunarvim/index","path":"/docs/DevOps/Linux/2023-10-28--lunarvim/2023-10-28","sidebar":"tutorialSidebar"},{"id":"DevOps/Linux/2024-01-08--vsftp-ubuntu/index","path":"/docs/DevOps/Linux/2024-01-08--vsftp-ubuntu/2024-01-08","sidebar":"tutorialSidebar"},{"id":"DevOps/NGINX/2017-10-01--using-nginx-as-proxy-for-your-nodejs-apps/index","path":"/docs/DevOps/NGINX/2017-10-01--using-nginx-as-proxy-for-your-nodejs-apps/2017-10-01","sidebar":"tutorialSidebar"},{"id":"DevOps/NGINX/2017-12-24--nginx-node-security/index","path":"/docs/DevOps/NGINX/2017-12-24--nginx-node-security/2017-12-24","sidebar":"tutorialSidebar"},{"id":"DevOps/NGINX/2019-02-05--nginx-ingress-cert-manager/index","path":"/docs/DevOps/NGINX/2019-02-05--nginx-ingress-cert-manager/2019-02-05","sidebar":"tutorialSidebar"},{"id":"DevOps/NGINX/2019-11-07--nginx-rtmp-streaming-container/index","path":"/docs/DevOps/NGINX/2019-11-07--nginx-rtmp-streaming-container/2019-11-07","sidebar":"tutorialSidebar"},{"id":"DevOps/NGINX/2019-11-08--nginx-rtmp-website/index","path":"/docs/DevOps/NGINX/2019-11-08--nginx-rtmp-website/2019-11-08","sidebar":"tutorialSidebar"},{"id":"DevOps/NGINX/2020-07-29--securing-apache-and-nginx/index","path":"/docs/DevOps/NGINX/2020-07-29--securing-apache-and-nginx/2020-07-29","sidebar":"tutorialSidebar"},{"id":"DevOps/NGINX/2020-08-26--nginx-docker-setup/index","path":"/docs/DevOps/NGINX/2020-08-26--nginx-docker-setup/2020-08-26","sidebar":"tutorialSidebar"},{"id":"DevOps/NGINX/2020-08-27--nginx-docker-ssl-certs-self-signed/index","path":"/docs/DevOps/NGINX/2020-08-27--nginx-docker-ssl-certs-self-signed/2020-08-27","sidebar":"tutorialSidebar"},{"id":"DevOps/NGINX/2020-08-28--nginx-docker-certbot/index","path":"/docs/DevOps/NGINX/2020-08-28--nginx-docker-certbot/2020-08-27","sidebar":"tutorialSidebar"},{"id":"DevOps/NGINX/2020-08-30--nginx-docker-multihost/index","path":"/docs/DevOps/NGINX/2020-08-30--nginx-docker-multihost/2020-08-30","sidebar":"tutorialSidebar"},{"id":"DevOps/NGINX/2021-02-22-nginx-docker-ingress/index","path":"/docs/DevOps/NGINX/2021-02-22-nginx-docker-ingress/2021-02-22","sidebar":"tutorialSidebar"},{"id":"DevOps/NGINX/2021-02-23-nginx-agent-redirect/index","path":"/docs/DevOps/NGINX/2021-02-23-nginx-agent-redirect/2021-02-23","sidebar":"tutorialSidebar"},{"id":"DevOps/NGINX/2021-07-29--certbot-nginx-autorenewal/index","path":"/docs/DevOps/NGINX/2021-07-29--certbot-nginx-autorenewal/2021-07-29","sidebar":"tutorialSidebar"},{"id":"DevOps/NGINX/2022-11-17-nginx-udp-tcp-load-balancing/index","path":"/docs/DevOps/NGINX/2022-11-17-nginx-udp-tcp-load-balancing/2022-11-17","sidebar":"tutorialSidebar"},{"id":"DevOps/NGINX/2022-12-08-nginx-websocket-proxy/index","path":"/docs/DevOps/NGINX/2022-12-08-nginx-websocket-proxy/2022-12-08","sidebar":"tutorialSidebar"},{"id":"DevOps/NGINX/2023-06-13-nginx-docker-ingress/index","path":"/docs/DevOps/NGINX/2023-06-13-nginx-docker-ingress/2023-06-13","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2010-02-02--svn-subversion-windows/index","path":"/docs/DevOps/Provisioning/2010-02-02--svn-subversion-windows/2010-02-02","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2017-09-05--developing-software-in-china/index","path":"/docs/DevOps/Provisioning/2017-09-05--developing-software-in-china/2017-09-05","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2017-09-06--developing-software-in-china-2/index","path":"/docs/DevOps/Provisioning/2017-09-06--developing-software-in-china-2/2017-09-06","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2018-01-26--node-express-docker-container/index","path":"/docs/DevOps/Provisioning/2018-01-26--node-express-docker-container/2018-01-26","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2018-01-27--express-generator-app-docker/index","path":"/docs/DevOps/Provisioning/2018-01-27--express-generator-app-docker/2018-01-27","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2018-01-28--express-generator-dockerrized/index","path":"/docs/DevOps/Provisioning/2018-01-28--express-generator-dockerrized/2018-01-28","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2018-11-10--postgresql-getting-started/index","path":"/docs/DevOps/Provisioning/2018-11-10--postgresql-getting-started/2018-11-10","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2018-12-27--red-hat-containerized-application-development-rhcs/index","path":"/docs/DevOps/Provisioning/2018-12-27--red-hat-containerized-application-development-rhcs/2018-12-27","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2019-01-08--creating-a-grafana-dashboard/index","path":"/docs/DevOps/Provisioning/2019-01-08--creating-a-grafana-dashboard/2019-01-08","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2019-06-15--installing-discourse-on-centos8/index","path":"/docs/DevOps/Provisioning/2019-06-15--installing-discourse-on-centos8/2019-06-15","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2019-06-16--migrating-from-vbulletin-to-discourse-on-centos8/index","path":"/docs/DevOps/Provisioning/2019-06-16--migrating-from-vbulletin-to-discourse-on-centos8/2019-06-16","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2019-06-18--using-oauth2-in-discourse/index","path":"/docs/DevOps/Provisioning/2019-06-18--using-oauth2-in-discourse/2019-06-18","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2019-06-19--using-twitter-auth-in-discourse/index","path":"/docs/DevOps/Provisioning/2019-06-19--using-twitter-auth-in-discourse/2019-06-20","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2019-06-20--using-github-auth-in-discourse/index","path":"/docs/DevOps/Provisioning/2019-06-20--using-github-auth-in-discourse/2019-06-19","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2019-06-21--using-facebook-auth-in-discourse/index","path":"/docs/DevOps/Provisioning/2019-06-21--using-facebook-auth-in-discourse/2019-06-21","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2019-09-16--installing-vanilla-forum/index","path":"/docs/DevOps/Provisioning/2019-09-16--installing-vanilla-forum/2019-09-16","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2020-06-07--setting-up-wikijs-in-docker/index","path":"/docs/DevOps/Provisioning/2020-06-07--setting-up-wikijs-in-docker/2020-06-07","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2020-07-13--infrastructure-as-code/index","path":"/docs/DevOps/Provisioning/2020-07-13--infrastructure-as-code/2020-07-13","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2020-08-29--static-server-with-hapi-and-docker/index","path":"/docs/DevOps/Provisioning/2020-08-29--static-server-with-hapi-and-docker/2020-08-29","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2020-09-02--docker-compose-networking/index","path":"/docs/DevOps/Provisioning/2020-09-02--docker-compose-networking/2020-09-02","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2020-10-01--installing-openproject-in-docker/index","path":"/docs/DevOps/Provisioning/2020-10-01--installing-openproject-in-docker/2020-10-01","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2020-10-02--installing-wazuh-in-docker/index","path":"/docs/DevOps/Provisioning/2020-10-02--installing-wazuh-in-docker/2020-10-02","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2021-01-22-file-transfer-tools-in-nodejs/index","path":"/docs/DevOps/Provisioning/2021-01-22-file-transfer-tools-in-nodejs/2021-01-22","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2021-01-23-nodejs-file-server/index","path":"/docs/DevOps/Provisioning/2021-01-23-nodejs-file-server/2021-01-23","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2021-01-27-owncloud-ocis/index","path":"/docs/DevOps/Provisioning/2021-01-27-owncloud-ocis/2021-01-27","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2021-04-07--loki-prometheus-grafana/index","path":"/docs/DevOps/Provisioning/2021-04-07--loki-prometheus-grafana/2021-04-07","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2021-09-13--postgres-refresher-part-i/index","path":"/docs/DevOps/Provisioning/2021-09-13--postgres-refresher-part-i/2021-09-13","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2021-09-13--postgres-refresher-part-ii/index","path":"/docs/DevOps/Provisioning/2021-09-13--postgres-refresher-part-ii/2021-09-13","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2021-09-14--postgres-refresher-hasura/index","path":"/docs/DevOps/Provisioning/2021-09-14--postgres-refresher-hasura/2021-09-14","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2021-09-14--postgres-refresher-node-json/index","path":"/docs/DevOps/Provisioning/2021-09-14--postgres-refresher-node-json/2021-09-14","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2021-10-12--traefik-configuration/index","path":"/docs/DevOps/Provisioning/2021-10-12--traefik-configuration/2021-10-12","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2021-10-12--traefik-second-attempt/index","path":"/docs/DevOps/Provisioning/2021-10-12--traefik-second-attempt/2021-10-12","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2021-10-12--traefik-third-attempt/index","path":"/docs/DevOps/Provisioning/2021-10-12--traefik-third-attempt/2021-10-12","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2021-10-25--matrix-secure-messaging/index","path":"/docs/DevOps/Provisioning/2021-10-25--matrix-secure-messaging/2021-10-25","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2022-01-23--installing-discourse-docker/index","path":"/docs/DevOps/Provisioning/2022-01-23--installing-discourse-docker/2022-01-23","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2022-01-24--getting-to-know-bind9-docker/index","path":"/docs/DevOps/Provisioning/2022-01-24--getting-to-know-bind9-docker/2022-01-24","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2022-01-25--installing-bind9-docker/index","path":"/docs/DevOps/Provisioning/2022-01-25--installing-bind9-docker/2022-01-25","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2022-01-26--dns-over-TLS-docker/index","path":"/docs/DevOps/Provisioning/2022-01-26--dns-over-TLS-docker/2022-01-26","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2022-01-27--bind9-configuration/index","path":"/docs/DevOps/Provisioning/2022-01-27--bind9-configuration/2022-01-27","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2022-10-16--os-ticket-docker/index","path":"/docs/DevOps/Provisioning/2022-10-16--os-ticket-docker/2022-10-16","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2022-10-27--os-ticket-rest-api/index","path":"/docs/DevOps/Provisioning/2022-10-27--os-ticket-rest-api/2022-10-27","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2022-11-07--cphalcon-docker/index","path":"/docs/DevOps/Provisioning/2022-11-07--cphalcon-docker/2022-11-07","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2022-11-16--mautic-docker/index","path":"/docs/DevOps/Provisioning/2022-11-16--mautic-docker/2022-11-16","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2023-02-13--meili-search-gatsby/index","path":"/docs/DevOps/Provisioning/2023-02-13--meili-search-gatsby/2023-02-13","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2023-03-09--os-ticket-docker-2023/index","path":"/docs/DevOps/Provisioning/2023-03-09--os-ticket-docker-2023/2023-03-09","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2024-01-17--ntfy-notification-service/index","path":"/docs/DevOps/Provisioning/2024-01-17--ntfy-notification-service/2024-01-17","sidebar":"tutorialSidebar"},{"id":"DevOps/Provisioning/2024-01-18--uptime-kuma-monitoring/index","path":"/docs/DevOps/Provisioning/2024-01-18--uptime-kuma-monitoring/2024-01-18","sidebar":"tutorialSidebar"},{"id":"DevOps/Salt/2020-06-14--install-salt-on-ubuntu-20-04/index","path":"/docs/DevOps/Salt/2020-06-14--install-salt-on-ubuntu-20-04/2020-06-14","sidebar":"tutorialSidebar"},{"id":"DevOps/Salt/2020-06-15--salty-devops/index","path":"/docs/DevOps/Salt/2020-06-15--salty-devops/2020-06-15","sidebar":"tutorialSidebar"},{"id":"DevOps/Salt/2020-06-16--salt-state/index","path":"/docs/DevOps/Salt/2020-06-16--salt-state/2020-06-16","sidebar":"tutorialSidebar"},{"id":"DevOps/Salt/2020-06-17--salt-pillars-formulas/index","path":"/docs/DevOps/Salt/2020-06-17--salt-pillars-formulas/2020-06-17","sidebar":"tutorialSidebar"},{"id":"DevOps/Salt/2020-06-18--salt-execution-order/index","path":"/docs/DevOps/Salt/2020-06-18--salt-execution-order/2020-06-18","sidebar":"tutorialSidebar"},{"id":"DevOps/Salt/2020-06-19--salt-mine-orchestrate/index","path":"/docs/DevOps/Salt/2020-06-19--salt-mine-orchestrate/2020-06-19","sidebar":"tutorialSidebar"},{"id":"DevOps/Salt/2020-06-20--salt-reactor-events/index","path":"/docs/DevOps/Salt/2020-06-20--salt-reactor-events/2020-06-20","sidebar":"tutorialSidebar"},{"id":"DevOps/Salt/2020-06-21--salt-events-and-thirdparty-apps/index","path":"/docs/DevOps/Salt/2020-06-21--salt-events-and-thirdparty-apps/2020-06-21","sidebar":"tutorialSidebar"},{"id":"DevOps/Salt/2020-06-22--salt-nginx-state/index","path":"/docs/DevOps/Salt/2020-06-22--salt-nginx-state/2020-06-22","sidebar":"tutorialSidebar"},{"id":"DevOps/Salt/2020-06-23--saltestack-refresh-course-1-setup/index","path":"/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-1-setup/2020-06-23","sidebar":"tutorialSidebar"},{"id":"DevOps/Salt/2020-06-23--saltestack-refresh-course-2-salt-state/index","path":"/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-2-salt-state/2020-06-23","sidebar":"tutorialSidebar"},{"id":"DevOps/Salt/2020-06-23--saltestack-refresh-course-3-highstate/index","path":"/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-3-highstate/2020-06-23","sidebar":"tutorialSidebar"},{"id":"DevOps/Salt/2020-06-23--saltestack-refresh-course-4-salt-mine/index","path":"/docs/DevOps/Salt/2020-06-23--saltestack-refresh-course-4-salt-mine/2020-06-23","sidebar":"tutorialSidebar"},{"id":"DevOps/Salt/2020-06-25--salt-orchestration-for-docker-containers/index","path":"/docs/DevOps/Salt/2020-06-25--salt-orchestration-for-docker-containers/2020-06-25","sidebar":"tutorialSidebar"},{"id":"DevOps/Security/2020-07-26--firewalld-configuration/index","path":"/docs/DevOps/Security/2020-07-26--firewalld-configuration/2020-07-26","sidebar":"tutorialSidebar"},{"id":"DevOps/Security/2020-07-27--firewalld-deployment-centos7/index","path":"/docs/DevOps/Security/2020-07-27--firewalld-deployment-centos7/2020-07-27","sidebar":"tutorialSidebar"},{"id":"DevOps/Security/2020-07-27--firewalld-deployment-debian/index","path":"/docs/DevOps/Security/2020-07-27--firewalld-deployment-debian/2020-07-27","sidebar":"tutorialSidebar"},{"id":"DevOps/Security/2020-07-27--firewalld-deployment-ubuntu/index","path":"/docs/DevOps/Security/2020-07-27--firewalld-deployment-ubuntu/2020-07-27","sidebar":"tutorialSidebar"},{"id":"DevOps/Security/2020-07-28--fail2ban-ubuntu-server/index","path":"/docs/DevOps/Security/2020-07-28--fail2ban-ubuntu-server/2020-07-28","sidebar":"tutorialSidebar"},{"id":"DevOps/Security/2020-07-28--uncomplicated-firewall-ufw/index","path":"/docs/DevOps/Security/2020-07-28--uncomplicated-firewall-ufw/2020-07-28","sidebar":"tutorialSidebar"},{"id":"DevOps/Security/2022-09-27--wireshark-with-tls-encryption/index","path":"/docs/DevOps/Security/2022-09-27--wireshark-with-tls-encryption/2022-09-27","sidebar":"tutorialSidebar"},{"id":"DevOps/Tomcat/2020-12-22-tomcat9-ubuntu-20-10-installation/index","path":"/docs/DevOps/Tomcat/2020-12-22-tomcat9-ubuntu-20-10-installation/2020-12-22","sidebar":"tutorialSidebar"},{"id":"DevOps/Tomcat/2020-12-23-tomcat9-configuration/index","path":"/docs/DevOps/Tomcat/2020-12-23-tomcat9-configuration/2020-12-23","sidebar":"tutorialSidebar"},{"id":"DevOps/Tomcat/2020-12-24-tomcat9-cluster-and-load-balancing/index","path":"/docs/DevOps/Tomcat/2020-12-24-tomcat9-cluster-and-load-balancing/2020-12-24","sidebar":"tutorialSidebar"},{"id":"DevOps/Tomcat/2020-12-25-tomcat10-docker-cluster/index","path":"/docs/DevOps/Tomcat/2020-12-25-tomcat10-docker-cluster/2020-12-25","sidebar":"tutorialSidebar"},{"id":"DevOps/Tomcat/2020-12-26-tomcat10-cluster-with-individual-nodes/index","path":"/docs/DevOps/Tomcat/2020-12-26-tomcat10-cluster-with-individual-nodes/2020-12-26","sidebar":"tutorialSidebar"},{"id":"DevOps/Windows/2017-07-06--windows-cmd/index","path":"/docs/DevOps/Windows/2017-07-06--windows-cmd/2017-07-06","sidebar":"tutorialSidebar"},{"id":"DevOps/Windows/2017-07-07--windows10-control/index","path":"/docs/DevOps/Windows/2017-07-07--windows10-control/2017-07-07","sidebar":"tutorialSidebar"},{"id":"DevOps/Windows/2017-12-19--umlaute-on-us-keyboard/index","path":"/docs/DevOps/Windows/2017-12-19--umlaute-on-us-keyboard/2017-12-19","sidebar":"tutorialSidebar"},{"id":"DevOps/Windows/2019-06-09--setting-up-windows-server-2019/index","path":"/docs/DevOps/Windows/2019-06-09--setting-up-windows-server-2019/2019-06-09","sidebar":"tutorialSidebar"},{"id":"DevOps/Windows/2019-06-10--windows-server-2019-scripting-and-sharing/index","path":"/docs/DevOps/Windows/2019-06-10--windows-server-2019-scripting-and-sharing/2019-06-10","sidebar":"tutorialSidebar"},{"id":"DevOps/Windows/2019-06-11--windows-server-2019-active-directory/index","path":"/docs/DevOps/Windows/2019-06-11--windows-server-2019-active-directory/2019-06-11","sidebar":"tutorialSidebar"},{"id":"DevOps/Windows/2019-06-12--windows-server-2019-active-directory/index","path":"/docs/DevOps/Windows/2019-06-12--windows-server-2019-active-directory/2019-06-12","sidebar":"tutorialSidebar"},{"id":"DevOps/Windows/2019-06-13--windows-server-2019-docker-daemon/index","path":"/docs/DevOps/Windows/2019-06-13--windows-server-2019-docker-daemon/2019-06-13","sidebar":"tutorialSidebar"},{"id":"DevOps/Zabbix/2020-07-12--nagios-docker-install/index","path":"/docs/DevOps/Zabbix/2020-07-12--nagios-docker-install/2020-07-12","sidebar":"tutorialSidebar"},{"id":"DevOps/Zabbix/2020-07-14--nagios-ubuntu-install/index","path":"/docs/DevOps/Zabbix/2020-07-14--nagios-ubuntu-install/2020-07-14","sidebar":"tutorialSidebar"},{"id":"DevOps/Zabbix/2020-07-15--zabbix-docker-installation/index","path":"/docs/DevOps/Zabbix/2020-07-15--zabbix-docker-installation/2020-07-15","sidebar":"tutorialSidebar"},{"id":"DevOps/Zabbix/2020-07-16--zabbix-agent/index","path":"/docs/DevOps/Zabbix/2020-07-16--zabbix-agent/2020-07-16","sidebar":"tutorialSidebar"},{"id":"DevOps/Zabbix/2020-07-17--zabbix-website-monitor/index","path":"/docs/DevOps/Zabbix/2020-07-17--zabbix-website-monitor/2020-07-17","sidebar":"tutorialSidebar"},{"id":"DevOps/Zabbix/2020-07-18--zabbix-email-notification/index","path":"/docs/DevOps/Zabbix/2020-07-18--zabbix-email-notification/2020-07-18","sidebar":"tutorialSidebar"},{"id":"DevOps/Zabbix/2020-07-19--zabbix-company-logo/index","path":"/docs/DevOps/Zabbix/2020-07-19--zabbix-company-logo/2020-07-19","sidebar":"tutorialSidebar"},{"id":"DevOps/Zabbix/2020-07-20--zabbix-behind-nginx/index","path":"/docs/DevOps/Zabbix/2020-07-20--zabbix-behind-nginx/2020-07-20","sidebar":"tutorialSidebar"},{"id":"DevOps/Zabbix/2020-09-05--slack-notifications-in-devops/index","path":"/docs/DevOps/Zabbix/2020-09-05--slack-notifications-in-devops/2020-09-05","sidebar":"tutorialSidebar"},{"id":"DevOps/Zabbix/2021-01-14--zabbix-apache2-monitor/index","path":"/docs/DevOps/Zabbix/2021-01-14--zabbix-apache2-monitor/2021-10-14","sidebar":"tutorialSidebar"},{"id":"DevOps/Zabbix/2021-10-13--zabbix-compose-setup/index","path":"/docs/DevOps/Zabbix/2021-10-13--zabbix-compose-setup/2021-10-13","sidebar":"tutorialSidebar"},{"id":"DevOps/Zabbix/2022-01-13--zabbix-api-testing/index","path":"/docs/DevOps/Zabbix/2022-01-13--zabbix-api-testing/2022-01-13","sidebar":"tutorialSidebar"},{"id":"DevOps/Zabbix/2022-01-13--zabbix-server-v6/index","path":"/docs/DevOps/Zabbix/2022-01-13--zabbix-server-v6/2022-01-13","sidebar":"tutorialSidebar"},{"id":"DevOps/Zabbix/2022-01-14--zabbix-apache2-monitor/index","path":"/docs/DevOps/Zabbix/2022-01-14--zabbix-apache2-monitor/2022-01-14","sidebar":"tutorialSidebar"},{"id":"DevOps/Zabbix/2022-01-14--zabbix-docker-monitor/index","path":"/docs/DevOps/Zabbix/2022-01-14--zabbix-docker-monitor/2022-01-14","sidebar":"tutorialSidebar"},{"id":"DevOps/Zabbix/2022-01-14--zabbix-http-cert-monitor/index","path":"/docs/DevOps/Zabbix/2022-01-14--zabbix-http-cert-monitor/2022-01-14","sidebar":"tutorialSidebar"},{"id":"DevOps/Zabbix/2022-01-14--zabbix-nginx-monitor/index","path":"/docs/DevOps/Zabbix/2022-01-14--zabbix-nginx-monitor/2022-01-14","sidebar":"tutorialSidebar"},{"id":"DevOps/Zabbix/2022-01-15--zabbix-grafana-dashboard/index","path":"/docs/DevOps/Zabbix/2022-01-15--zabbix-grafana-dashboard/2022-01-15","sidebar":"tutorialSidebar"},{"id":"DevOps/Zabbix/2022-01-15--zabbix-v6-email-notifications/index","path":"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-email-notifications/2022-01-15","sidebar":"tutorialSidebar"},{"id":"DevOps/Zabbix/2022-01-15--zabbix-v6-slack-notifications/index","path":"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-slack-notifications/2022-01-15","sidebar":"tutorialSidebar"},{"id":"DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/index","path":"/docs/DevOps/Zabbix/2022-01-15--zabbix-v6-smart-hdd-check/2022-01-15","sidebar":"tutorialSidebar"},{"id":"DevOps/Zabbix/2022-01-16--zabbix-v6-baseline-monitoring/index","path":"/docs/DevOps/Zabbix/2022-01-16--zabbix-v6-baseline-monitoring/2022-01-16","sidebar":"tutorialSidebar"},{"id":"DevOps/Zabbix/2022-07-15-zabbix-for-zimbra/index","path":"/docs/DevOps/Zabbix/2022-07-15-zabbix-for-zimbra/2022-07-15","sidebar":"tutorialSidebar"},{"id":"intro","path":"/docs/intro","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2023-01-01-tf-model-server/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-01-tf-model-server/2023-01-01","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2023-01-02-tf-serve-own-models/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-02-tf-serve-own-models/2023-01-02","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2023-01-03-tf-tensorboard/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-03-tf-tensorboard/2023-01-03","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2023-01-04-tf-distributed-strategy/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-04-tf-distributed-strategy/2023-01-04","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2023-01-05-dvc-model-version-control/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-05-dvc-model-version-control/2023-01-05","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2023-01-06-dvc-model-access/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-06-dvc-model-access/2023-01-05","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2023-01-22-python-ray-introduction/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-22-python-ray-introduction/2023-01-22","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2023-01-23-python-ray-remote-functions/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-23-python-ray-remote-functions/2023-01-23","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2023-01-26-python-ray-remote-actors/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-26-python-ray-remote-actors/2023-01-26","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2023-01-29-python-ray-deployments/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-29-python-ray-deployments/2023-01-29","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2023-01-31-python-ray-model-serving/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2023-01-31-python-ray-model-serving/2023-01-31","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2023-02-01-apache-airflow-introduction/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2023-02-01-apache-airflow-introduction/2023-02-01","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2023-02-04-apache-airflow-data-pipelines/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2023-02-04-apache-airflow-data-pipelines/2023-02-04","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2023-02-05-apache-airflow-scheduler/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2023-02-05-apache-airflow-scheduler/2023-02-05","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2023-02-06-apache-airflow-dynamic-dags/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2023-02-06-apache-airflow-dynamic-dags/2023-02-06","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2023-02-09-mlflow-introduction/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2023-02-09-mlflow-introduction/2023-02-09","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2023-03-27-deploying-prediction-apis-with-flask/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2023-03-27-deploying-prediction-apis-with-flask/2023-03-27","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2023-06-17-scikit-learn-model-deployment/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2023-06-17-scikit-learn-model-deployment/2023-06-17","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2023-06-18-automl-with-autogluon-tabular-data/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2023-06-18-automl-with-autogluon-tabular-data/2023-06-18","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2023-06-21-automl-with-autogluon-multiclass-nlp/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2023-06-21-automl-with-autogluon-multiclass-nlp/2023-06-21","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2023-06-23-automl-with-autogluon-timeseries-forecast/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2023-06-23-automl-with-autogluon-timeseries-forecast/2023-06-23","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2023-07-10-scikit-image-model-deployment-part1/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2023-07-10-scikit-image-model-deployment-part1/2023-07-10","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2023-07-12-scikit-image-model-deployment-part2/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2023-07-12-scikit-image-model-deployment-part2/2023-07-12","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2023-08-19-tensorflow-serving-api/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2023-08-19-tensorflow-serving-api/2023-08-19","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2023-09-27-zenml-intro-sklearn-pipeline/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2023-09-27-zenml-intro-sklearn-pipeline/2023-09-27","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2024-02-21-mlflow-pytorch-lightning-docker/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2024-02-21-mlflow-pytorch-lightning-docker/2024-02-21","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2024-02-24-mlflow-hyperparameter-tuning/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2024-02-24-mlflow-hyperparameter-tuning/2024-02-24","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/AIOps/2024-02-26-mlflow-with-yolov81/index","path":"/docs/IoT-and-Machine-Learning/AIOps/2024-02-26-mlflow-with-yolov81/2024-02-26","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2018-01-02--machine-learning-with-python/index","path":"/docs/IoT-and-Machine-Learning/ML/2018-01-02--machine-learning-with-python/2018-01-02","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2019-03-31--introduction-to-tensorflow-2-beta/index","path":"/docs/IoT-and-Machine-Learning/ML/2019-03-31--introduction-to-tensorflow-2-beta/2019-03-31","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2019-04-01--introduction-to-keras/index","path":"/docs/IoT-and-Machine-Learning/ML/2019-04-01--introduction-to-keras/2019-04-01","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2021-10-31--tesseract_ocr_arch_linux/index","path":"/docs/IoT-and-Machine-Learning/ML/2021-10-31--tesseract_ocr_arch_linux/2021-10-31","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2021-11-01--spacy_natural_language_processing/index","path":"/docs/IoT-and-Machine-Learning/ML/2021-11-01--spacy_natural_language_processing/2021-11-01","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2021-11-02--spacy_ner_predictions/index","path":"/docs/IoT-and-Machine-Learning/ML/2021-11-02--spacy_ner_predictions/2021-11-02","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2021-11-03--streamlit-opencv-mediapipe/index","path":"/docs/IoT-and-Machine-Learning/ML/2021-11-03--streamlit-opencv-mediapipe/2021-11-03","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2021-11-04--installing-yolov4/index","path":"/docs/IoT-and-Machine-Learning/ML/2021-11-04--installing-yolov4/2021-11-04","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2021-11-05--license-plates-yolov4-opencv-tesseract/index","path":"/docs/IoT-and-Machine-Learning/ML/2021-11-05--license-plates-yolov4-opencv-tesseract/2021-11-05","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2021-11-06--opencv-crash-course-part-i/index","path":"/docs/IoT-and-Machine-Learning/ML/2021-11-06--opencv-crash-course-part-i/2021-11-06","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2021-11-07--opencv-crash-course-part-ii/index","path":"/docs/IoT-and-Machine-Learning/ML/2021-11-07--opencv-crash-course-part-ii/2021-11-07","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2021-11-08--tensorflow-crash-course-part-i/activate_webcam","path":"/docs/IoT-and-Machine-Learning/ML/2021-11-08--tensorflow-crash-course-part-i/activate_webcam","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2021-11-08--tensorflow-crash-course-part-i/index","path":"/docs/IoT-and-Machine-Learning/ML/2021-11-08--tensorflow-crash-course-part-i/2021-11-08","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2021-11-09--tensorflow-crash-course-part-ii/index","path":"/docs/IoT-and-Machine-Learning/ML/2021-11-09--tensorflow-crash-course-part-ii/2021-11-09","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2021-11-10--tensorflow-crash-course-part-iii/index","path":"/docs/IoT-and-Machine-Learning/ML/2021-11-10--tensorflow-crash-course-part-iii/2021-11-10","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2021-11-11--tensorflow-crash-course-part-iv/index","path":"/docs/IoT-and-Machine-Learning/ML/2021-11-11--tensorflow-crash-course-part-iv/2021-11-11","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2021-11-12--tensorflow-crash-course-part-v/index","path":"/docs/IoT-and-Machine-Learning/ML/2021-11-12--tensorflow-crash-course-part-v/2021-11-12","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2021-11-13--tensorflow-model-zoo/index","path":"/docs/IoT-and-Machine-Learning/ML/2021-11-13--tensorflow-model-zoo/2021-11-13","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2021-11-14--tensorflow-model-for-tfjs/index","path":"/docs/IoT-and-Machine-Learning/ML/2021-11-14--tensorflow-model-for-tfjs/2021-11-14","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2021-11-15--facebook-prophet-introduction/index","path":"/docs/IoT-and-Machine-Learning/ML/2021-11-15--facebook-prophet-introduction/2021-11-15","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2021-12-01--opencv-with-images/index","path":"/docs/IoT-and-Machine-Learning/ML/2021-12-01--opencv-with-images/2021-12-01","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2021-12-02--opencv-with-videos/index","path":"/docs/IoT-and-Machine-Learning/ML/2021-12-02--opencv-with-videos/2021-12-02","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2021-12-03--opencv-image-operations/index","path":"/docs/IoT-and-Machine-Learning/ML/2021-12-03--opencv-image-operations/2021-12-03","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2021-12-04--opencv-image-objects/index","path":"/docs/IoT-and-Machine-Learning/ML/2021-12-04--opencv-image-objects/2021-12-04","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2021-12-05--opencv-face-detection/index","path":"/docs/IoT-and-Machine-Learning/ML/2021-12-05--opencv-face-detection/2021-12-05","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2021-12-06--opencv-object-tracking/index","path":"/docs/IoT-and-Machine-Learning/ML/2021-12-06--opencv-object-tracking/2021-12-06","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2021-12-07--opencv-detection-and-tracking/index","path":"/docs/IoT-and-Machine-Learning/ML/2021-12-07--opencv-detection-and-tracking/2021-12-07","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2021-12-08--opencv-meanshift-tracking/index","path":"/docs/IoT-and-Machine-Learning/ML/2021-12-08--opencv-meanshift-tracking/2021-12-08","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2021-12-09--opencv-camshift-tracking/index","path":"/docs/IoT-and-Machine-Learning/ML/2021-12-09--opencv-camshift-tracking/2021-12-09","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2021-12-10--opencv-optical-flow-tracking/index","path":"/docs/IoT-and-Machine-Learning/ML/2021-12-10--opencv-optical-flow-tracking/2021-12-10","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2022-02-15--yolo-app-get-data/index","path":"/docs/IoT-and-Machine-Learning/ML/2022-02-15--yolo-app-get-data/2022-02-15","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2022-02-16--yolo-app-tensorflow-model/index","path":"/docs/IoT-and-Machine-Learning/ML/2022-02-16--yolo-app-tensorflow-model/2022-02-16","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2022-02-17--yolo-app-prediction-pipeline/index","path":"/docs/IoT-and-Machine-Learning/ML/2022-02-17--yolo-app-prediction-pipeline/2022-02-17","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2022-02-18--yolo-app-ocr/index","path":"/docs/IoT-and-Machine-Learning/ML/2022-02-18--yolo-app-ocr/2022-02-18","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2022-02-19--yolo-app-flask/index","path":"/docs/IoT-and-Machine-Learning/ML/2022-02-19--yolo-app-flask/2022-02-19","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2022-02-20--yolo-app-yolov5-data-prep/index","path":"/docs/IoT-and-Machine-Learning/ML/2022-02-20--yolo-app-yolov5-data-prep/2022-02-20","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2022-04-01-tensorflow-audio-classifier/index","path":"/docs/IoT-and-Machine-Learning/ML/2022-04-01-tensorflow-audio-classifier/2022-04-01","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2022-04-02-pytorch-super-resolution/index","path":"/docs/IoT-and-Machine-Learning/ML/2022-04-02-pytorch-super-resolution/2022-04-02","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2022-04-03-pytorch-real-super-resolution/index","path":"/docs/IoT-and-Machine-Learning/ML/2022-04-03-pytorch-real-super-resolution/2022-04-03","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2022-04-04-pytorch-face-restoration/index","path":"/docs/IoT-and-Machine-Learning/ML/2022-04-04-pytorch-face-restoration/2022-04-04","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2022-11-27-containerized-deep-learning/index","path":"/docs/IoT-and-Machine-Learning/ML/2022-11-27-containerized-deep-learning/2022-11-27","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2022-12-10-tf-breast-cancer-classification-part1/index","path":"/docs/IoT-and-Machine-Learning/ML/2022-12-10-tf-breast-cancer-classification-part1/2022-12-10","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part2/index","path":"/docs/IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part2/2022-12-11","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part3/index","path":"/docs/IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part3/2022-12-11","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part4/index","path":"/docs/IoT-and-Machine-Learning/ML/2022-12-11-tf-breast-cancer-classification-part4/2022-12-11","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2022-12-12-tf-breast-cancer-classification-part5/index","path":"/docs/IoT-and-Machine-Learning/ML/2022-12-12-tf-breast-cancer-classification-part5/2022-12-12","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2022-12-12-tf-breast-cancer-classification-part6/index","path":"/docs/IoT-and-Machine-Learning/ML/2022-12-12-tf-breast-cancer-classification-part6/2022-12-12","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2022-12-16-tf-cifar/index","path":"/docs/IoT-and-Machine-Learning/ML/2022-12-16-tf-cifar/2022-12-16","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2022-12-18-tf-transfer-learning/index","path":"/docs/IoT-and-Machine-Learning/ML/2022-12-18-tf-transfer-learning/2022-12-18","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2022-12-19-tf-hub/index","path":"/docs/IoT-and-Machine-Learning/ML/2022-12-19-tf-hub/2022-12-19","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2022-12-20-tf-representation/index","path":"/docs/IoT-and-Machine-Learning/ML/2022-12-20-tf-representation/2022-12-19","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2022-12-21-tf-deepdream/index","path":"/docs/IoT-and-Machine-Learning/ML/2022-12-21-tf-deepdream/2022-12-21","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2022-12-21-tf-downsampling/index","path":"/docs/IoT-and-Machine-Learning/ML/2022-12-21-tf-downsampling/2022-12-21","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2022-12-28-tf-gan-image-generator/index","path":"/docs/IoT-and-Machine-Learning/ML/2022-12-28-tf-gan-image-generator/2022-12-28","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2022-12-31-tf-rnn-text-generation/index","path":"/docs/IoT-and-Machine-Learning/ML/2022-12-31-tf-rnn-text-generation/2022-12-31","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-01-05-yolov7/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-01-05-yolov7/2023-01-05","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-01-08-depth-vision-midas/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-01-08-depth-vision-midas/2023-01-08","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-01-10-yolov7_custom_data/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-01-10-yolov7_custom_data/2023-01-10","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-01-13-yolov7_data_conversion/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-01-13-yolov7_data_conversion/2023-01-13","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-01-14-yolov7_to_tensorflow/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-01-14-yolov7_to_tensorflow/2023-01-14","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-01-28-opencv-coin-counter/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-01-28-opencv-coin-counter/2023-01-28","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-01-30-predicting-wine-quality/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-01-30-predicting-wine-quality/2023-01-30","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-02-14-keras-introduction/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-02-14-keras-introduction/2023-02-14","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-02-15-as-one-yolo-object-tracking/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-02-15-as-one-yolo-object-tracking/2023-02-15","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-02-16-keras-introduction-ann/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-02-16-keras-introduction-ann/2023-02-16","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-02-17-keras-introduction-cnn/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-02-17-keras-introduction-cnn/2023-02-17","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-02-18-keras-introduction-rnn/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-02-18-keras-introduction-rnn/2023-02-18","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-02-18-keras-introduction-vgg16/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-02-18-keras-introduction-vgg16/2023-02-18","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-02-19-tensorflow-introduction/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-02-19-tensorflow-introduction/2023-02-19","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-02-21-tensorflow-tensors-2/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-02-21-tensorflow-tensors-2/2023-02-21","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-02-22-tensorflow-tensors-3/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-02-22-tensorflow-tensors-3/2023-02-22","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-02-23-tensorflow-neural-network-regression/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-02-23-tensorflow-neural-network-regression/2023-02-23","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-02-24-tensorflow-neural-network-regression-evaluation/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-02-24-tensorflow-neural-network-regression-evaluation/2023-02-24","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-02-25-tensorflow-neural-network-regression-experiments/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-02-25-tensorflow-neural-network-regression-experiments/2023-02-25","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-02-26-tensorflow-neural-network-regression-data-preprocessing/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-02-26-tensorflow-neural-network-regression-data-preprocessing/2023-02-26","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-02-26-tensorflow-neural-network-regression-real-dataset/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-02-26-tensorflow-neural-network-regression-real-dataset/2023-02-26","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-02-27-tensorflow-neural-network-classification/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-02-27-tensorflow-neural-network-classification/2023-02-27","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-02-28-tensorflow-neural-network-classification-model-evaluation/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-02-28-tensorflow-neural-network-classification-model-evaluation/2023-02-28","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-03-02-tensorflow-neural-network-multi-classification/2023-02-28-tensorflow-neural-network-classification-model-evaluation/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-03-02-tensorflow-neural-network-multi-classification/2023-02-28-tensorflow-neural-network-classification-model-evaluation/2023-02-28","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-03-02-tensorflow-neural-network-multi-classification/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-03-02-tensorflow-neural-network-multi-classification/2023-03-02","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-03-03-tensorflow-convolutional-neural-network-binary-classifications/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-03-03-tensorflow-convolutional-neural-network-binary-classifications/2023-03-03","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-03-05-tensorflow-convolutional-neural-network-multiclass-classifications/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-03-05-tensorflow-convolutional-neural-network-multiclass-classifications/2023-03-05","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-03-06-tensorflow-transfer-learning-feature-extraction/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-03-06-tensorflow-transfer-learning-feature-extraction/2023-03-06","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-03-11-tensorflow-transfer-learning-fine-tuning/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-03-11-tensorflow-transfer-learning-fine-tuning/2023-03-11","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-03-16-tensorflow-transfer-learning-scaling/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-03-16-tensorflow-transfer-learning-scaling/2023-03-16","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-03-24-tensorflow-unsupervised-learning-autoencoders/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-03-24-tensorflow-unsupervised-learning-autoencoders/2023-03-24","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-03-26-tensorflow-unsupervised-learning-autoencoders-super-resolution/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-03-26-tensorflow-unsupervised-learning-autoencoders-super-resolution/2023-03-26","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-03-26-tensorflow-unsupervised-learning-generative-adversial-networks/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-03-26-tensorflow-unsupervised-learning-generative-adversial-networks/2023-03-26","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-04-09-principal-component-analysis/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-04-09-principal-component-analysis/2023-04-09","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-04-11-locally-linear-embedding/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-04-11-locally-linear-embedding/2023-04-11","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-04-12-tstochastic-neighbor-embedding/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-04-12-tstochastic-neighbor-embedding/2023-04-12","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-04-13-fisher-discriminant-analysis/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-04-13-fisher-discriminant-analysis/2023-04-13","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-04-13-isometric-mapping/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-04-13-isometric-mapping/2023-04-13","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-04-13-multi-dimensional-scaling/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-04-13-multi-dimensional-scaling/2023-04-13","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-04-14-manifold-learning-for-image-segmentation/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-04-14-manifold-learning-for-image-segmentation/2023-04-14","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-04-16-deep-3d-image-segmentation/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-04-16-deep-3d-image-segmentation/2023-04-16","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-04-19-tensorflow-natural-language-processing/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-04-19-tensorflow-natural-language-processing/2023-04-19","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-06-26-autogluon-transit-photometry-dataset/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-06-26-autogluon-transit-photometry-dataset/2023-06-26","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-06-27-sql-in-data-science-basics/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-06-27-sql-in-data-science-basics/2023-06-27","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-06-30-sql-in-data-science-advanced/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-06-30-sql-in-data-science-advanced/2023-06-30","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-07-02-sql-in-data-science-ml/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-07-02-sql-in-data-science-ml/2023-07-02","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-07-21-introduction-to-pytorch-caffe2/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-07-21-introduction-to-pytorch-caffe2/2023-07-21","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-07-25-onnx-models/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-07-25-onnx-models/2023-07-25","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-07-26-tensorflow-human-emotion-detector/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-07-26-tensorflow-human-emotion-detector/2023-07-26","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-07-27-tensorflow-vision-transformer/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-07-27-tensorflow-vision-transformer/2023-07-27","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-08-01-tensorflow-i-know-flowers-intro/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-08-01-tensorflow-i-know-flowers-intro/2023-08-01","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-08-02-tensorflow-i-know-flowers-preprocessing/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-08-02-tensorflow-i-know-flowers-preprocessing/2023-08-02","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-08-03-tensorflow-i-know-flowers-deit/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-08-03-tensorflow-i-know-flowers-deit/2023-08-03","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-08-04-tensorflow-i-know-flowers-efficientnetv2b0/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-08-04-tensorflow-i-know-flowers-efficientnetv2b0/2023-08-04","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-08-05-tensorflow-i-know-flowers-efficientnetv2s/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-08-05-tensorflow-i-know-flowers-efficientnetv2s/2023-08-05","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-08-06-tensorflow-i-know-flowers-inceptionv3/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-08-06-tensorflow-i-know-flowers-inceptionv3/2023-08-06","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-08-07-tensorflow-i-know-flowers-mobilenetv2/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-08-07-tensorflow-i-know-flowers-mobilenetv2/2023-08-07","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-08-08-tensorflow-i-know-flowers-mobilenetv3large/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-08-08-tensorflow-i-know-flowers-mobilenetv3large/2023-08-08","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-08-09-tensorflow-i-know-flowers-mobilenetv3small/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-08-09-tensorflow-i-know-flowers-mobilenetv3small/2023-08-09","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-08-10-tensorflow-i-know-flowers-nasnetmobile/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-08-10-tensorflow-i-know-flowers-nasnetmobile/2023-08-10","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-08-11-tensorflow-i-know-flowers-vit/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-08-11-tensorflow-i-know-flowers-vit/2023-08-11","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-08-12-tensorflow-i-know-flowers-xception/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-08-12-tensorflow-i-know-flowers-xception/2023-08-12","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-08-13-tensorflow-i-know-flowers-model-eval/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-08-13-tensorflow-i-know-flowers-model-eval/2023-08-13","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-08-21--pytorch-development-in-docker/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-08-21--pytorch-development-in-docker/2023-08-21","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-08-27--image-segmentation-with-pytorch/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-08-27--image-segmentation-with-pytorch/2023-08-27","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-08-28--semantic-segmentation-detectron2-model-zoo/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-08-28--semantic-segmentation-detectron2-model-zoo/2023-08-28","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-08-29--semantic-segmentation-detectron2-model-zoo-faster-rcnn/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-08-29--semantic-segmentation-detectron2-model-zoo-faster-rcnn/2023-08-29","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-08-30--instance_segmentation_detectron2_model_zoo_mask_rcnn/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-08-30--instance_segmentation_detectron2_model_zoo_mask_rcnn/2023-08-30","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-08-31--semantic_segmentation_detectron2_openimages_dataset/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-08-31--semantic_segmentation_detectron2_openimages_dataset/2023-08-31","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-09-01--yolo-i-know-flowers/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-09-01--yolo-i-know-flowers/2023-09-01","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-09-05--semantic-segmentation-in-opencv/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-09-05--semantic-segmentation-in-opencv/2023-09-05","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-09-10--model-explainability-shap/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-09-10--model-explainability-shap/2023-09-11","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-09-15--yolo8-tracking-and-ocr/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-09-15--yolo8-tracking-and-ocr/2023-09-15","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-09-17--yolo8-nightshift/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-09-17--yolo8-nightshift/2023-09-17","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-09-19--cvat-computer-vision-annotation-tool/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-09-19--cvat-computer-vision-annotation-tool/2023-09-19","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-09-21--cvat-automatic-annotation/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-09-21--cvat-automatic-annotation/2023-09-21","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-09-23--yolo8-listen/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-09-23--yolo8-listen/2023-09-23","sidebar":"tutorialSidebar"},{"id":"IoT-and-Machine-Learning/ML/2023-10-01--delib-face-detection/index","path":"/docs/IoT-and-Machine-Learning/ML/2023-10-01--delib-face-detection/2023-10-01","sidebar":"tutorialSidebar"},{"id":"/category/development","path":"/docs/category/development","sidebar":"tutorialSidebar"},{"id":"/category/javascript","path":"/docs/category/javascript","sidebar":"tutorialSidebar"},{"id":"/category/python","path":"/docs/category/python","sidebar":"tutorialSidebar"},{"id":"/category/go","path":"/docs/category/go","sidebar":"tutorialSidebar"},{"id":"/category/graphs","path":"/docs/category/graphs","sidebar":"tutorialSidebar"},{"id":"/category/react-native","path":"/docs/category/react-native","sidebar":"tutorialSidebar"},{"id":"/category/magento","path":"/docs/category/magento","sidebar":"tutorialSidebar"},{"id":"/category/misc","path":"/docs/category/misc","sidebar":"tutorialSidebar"},{"id":"/category/devops","path":"/docs/category/devops","sidebar":"tutorialSidebar"},{"id":"/category/hashicorp","path":"/docs/category/hashicorp","sidebar":"tutorialSidebar"},{"id":"/category/zabbix","path":"/docs/category/zabbix","sidebar":"tutorialSidebar"},{"id":"/category/server-provisioning","path":"/docs/category/server-provisioning","sidebar":"tutorialSidebar"},{"id":"/category/gitops","path":"/docs/category/gitops","sidebar":"tutorialSidebar"},{"id":"/category/kubernetes","path":"/docs/category/kubernetes","sidebar":"tutorialSidebar"},{"id":"/category/nginx","path":"/docs/category/nginx","sidebar":"tutorialSidebar"},{"id":"/category/elasticsearch","path":"/docs/category/elasticsearch","sidebar":"tutorialSidebar"},{"id":"/category/ansible","path":"/docs/category/ansible","sidebar":"tutorialSidebar"},{"id":"/category/server-security","path":"/docs/category/server-security","sidebar":"tutorialSidebar"},{"id":"/category/linux","path":"/docs/category/linux","sidebar":"tutorialSidebar"},{"id":"/category/windows","path":"/docs/category/windows","sidebar":"tutorialSidebar"},{"id":"/category/tomcat","path":"/docs/category/tomcat","sidebar":"tutorialSidebar"},{"id":"/category/salt","path":"/docs/category/salt","sidebar":"tutorialSidebar"},{"id":"/category/machine-learning-ai-and-computer-vision","path":"/docs/category/machine-learning-ai-and-computer-vision","sidebar":"tutorialSidebar"},{"id":"/category/machine-learning","path":"/docs/category/machine-learning","sidebar":"tutorialSidebar"},{"id":"/category/aiops","path":"/docs/category/aiops","sidebar":"tutorialSidebar"},{"id":"/category/automation-deep-vision-and-robotics","path":"/docs/category/automation-deep-vision-and-robotics","sidebar":"tutorialSidebar"},{"id":"/category/home-automation","path":"/docs/category/home-automation","sidebar":"tutorialSidebar"},{"id":"/category/mqtt","path":"/docs/category/mqtt","sidebar":"tutorialSidebar"},{"id":"/category/robotics--simulation","path":"/docs/category/robotics--simulation","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/docs/intro","label":"intro"}}}}],"breadcrumbs":true}}}'),r=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=o(557529);const c=JSON.parse('{"docusaurusVersion":"3.1.1","siteVersion":"1.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.1.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.1.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.1.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.1.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.1.1"},"docusaurus-plugin-ideal-image":{"type":"package","name":"@docusaurus/plugin-ideal-image","version":"3.1.1"},"docusaurus-plugin-pwa":{"type":"package","name":"@docusaurus/plugin-pwa","version":"3.1.1"},"docusaurus-plugin-client-redirects":{"type":"package","name":"@docusaurus/plugin-client-redirects","version":"3.1.1"},"docusaurus-plugin-google-gtag":{"type":"package","name":"@docusaurus/plugin-google-gtag","version":"3.1.1"}}}');var d=o(785893);const l={siteConfig:a.default,siteMetadata:c,globalData:i,i18n:r,codeTranslations:s},p=n.createContext(l);function u(e){let{children:t}=e;return(0,d.jsx)(p.Provider,{value:l,children:t})}},873256:(e,t,o)=>{"use strict";o.d(t,{Z:()=>m});var n=o(667294),a=o(836136),i=o(631514),r=o(963905),s=o(674618),c=o(785893);function d(e){let{error:t,tryAgain:o}=e;return(0,c.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,c.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,c.jsx)("button",{type:"button",onClick:o,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,c.jsx)(l,{error:t})]})}function l(e){let{error:t}=e;const o=(0,r.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:o})}function p(e){let{error:t,tryAgain:o}=e;return(0,c.jsxs)(m,{fallback:()=>(0,c.jsx)(d,{error:t,tryAgain:o}),children:[(0,c.jsx)(i.Z,{children:(0,c.jsx)("title",{children:"Page Error"})}),(0,c.jsx)(s.Z,{children:(0,c.jsx)(d,{error:t,tryAgain:o})})]})}const u=e=>(0,c.jsx)(p,{...e});class m extends n.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??u)(e)}return e??null}}},836136:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const n="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:n,canUseEventListeners:n&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:n&&"IntersectionObserver"in window,canUseViewport:n&&"screen"in window}},631514:(e,t,o)=>{"use strict";o.d(t,{Z:()=>i});o(667294);var n=o(370405),a=o(785893);function i(e){return(0,a.jsx)(n.ql,{...e})}},334791:(e,t,o)=>{"use strict";o.d(t,{Z:()=>m});var n=o(667294),a=o(473727),i=o(963905),r=o(639962),s=o(702735),c=o(836136),d=o(210168),l=o(779524),p=o(785893);function u(e,t){let{isNavLink:o,to:u,href:m,activeClassName:h,isActive:b,"data-noBrokenLinkCheck":f,autoAddBaseUrl:g=!0,...v}=e;const{siteConfig:{trailingSlash:x,baseUrl:y}}=(0,r.Z)(),{withBaseUrl:_}=(0,l.C)(),w=(0,d.Z)(),D=(0,n.useRef)(null);(0,n.useImperativeHandle)(t,(()=>D.current));const k=u||m;const L=(0,s.Z)(k),O=k?.replace("pathname://","");let S=void 0!==O?(M=O,g&&(e=>e.startsWith("/"))(M)?_(M):M):void 0;var M;S&&L&&(S=(0,i.applyTrailingSlash)(S,{trailingSlash:x,baseUrl:y}));const T=(0,n.useRef)(!1),A=o?a.OL:a.rU,I=c.Z.canUseIntersectionObserver,R=(0,n.useRef)(),E=()=>{T.current||null==S||(window.docusaurus.preload(S),T.current=!0)};(0,n.useEffect)((()=>(!I&&L&&null!=S&&window.docusaurus.prefetch(S),()=>{I&&R.current&&R.current.disconnect()})),[R,S,I,L]);const P=S?.startsWith("#")??!1,j=!v.target||"_self"===v.target,H=!S||!L||!j||P;return f||!P&&H||w.collectLink(S),v.id&&w.collectAnchor(v.id),H?(0,p.jsx)("a",{ref:D,href:S,...k&&!L&&{target:"_blank",rel:"noopener noreferrer"},...v}):(0,p.jsx)(A,{...v,onMouseEnter:E,onTouchStart:E,innerRef:e=>{D.current=e,I&&e&&L&&(R.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(R.current.unobserve(e),R.current.disconnect(),null!=S&&window.docusaurus.prefetch(S))}))})),R.current.observe(e))},to:S,...o&&{isActive:b,activeClassName:h}})}const m=n.forwardRef(u)},823855:(e,t,o)=>{"use strict";o.d(t,{Z:()=>n});const n=()=>null},797325:(e,t,o)=>{"use strict";o.d(t,{Z:()=>d,I:()=>c});var n=o(667294),a=o(785893);function i(e,t){const o=e.split(/(\{\w+\})/).map(((e,o)=>{if(o%2==1){const o=t?.[e.slice(1,-1)];if(void 0!==o)return o}return e}));return o.some((e=>(0,n.isValidElement)(e)))?o.map(((e,t)=>(0,n.isValidElement)(e)?n.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):o.join("")}var r=o(557529);function s(e){let{id:t,message:o}=e;if(void 0===t&&void 0===o)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return r[t??o]??o??t}function c(e,t){let{message:o,id:n}=e;return i(s({message:o,id:n}),t)}function d(e){let{children:t,id:o,values:n}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const r=s({message:t,id:o});return(0,a.jsx)(a.Fragment,{children:i(r,n)})}},506875:(e,t,o)=>{"use strict";o.d(t,{m:()=>n});const n="default"},702735:(e,t,o)=>{"use strict";function n(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!n(e)}o.d(t,{Z:()=>a,b:()=>n})},779524:(e,t,o)=>{"use strict";o.d(t,{C:()=>r,Z:()=>s});var n=o(667294),a=o(639962),i=o(702735);function r(){const{siteConfig:{baseUrl:e,url:t}}=(0,a.Z)(),o=(0,n.useCallback)(((o,n)=>function(e,t,o,n){let{forcePrependBaseUrl:a=!1,absolute:r=!1}=void 0===n?{}:n;if(!o||o.startsWith("#")||(0,i.b)(o))return o;if(a)return t+o.replace(/^\//,"");if(o===t.replace(/\/$/,""))return t;const s=o.startsWith(t)?o:t+o.replace(/^\//,"");return r?e+s:s}(t,e,o,n)),[t,e]);return{withBaseUrl:o}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:o}=r();return o(e,t)}},210168:(e,t,o)=>{"use strict";o.d(t,{Z:()=>r});var n=o(667294);o(785893);const a=n.createContext({collectAnchor:()=>{},collectLink:()=>{}}),i=()=>(0,n.useContext)(a);function r(){return i()}},639962:(e,t,o)=>{"use strict";o.d(t,{Z:()=>i});var n=o(667294),a=o(980694);function i(){return(0,n.useContext)(a._)}},51048:(e,t,o)=>{"use strict";o.d(t,{Z:()=>i});var n=o(667294),a=o(488121);function i(){return(0,n.useContext)(a._)}},81270:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});var n=o(667294);const a=o(836136).Z.canUseDOM?n.useLayoutEffect:n.useEffect},205304:(e,t,o)=>{"use strict";o.d(t,{Z:()=>a});const n=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(o,a){Object.entries(o).forEach((o=>{let[i,r]=o;const s=a?`${a}.${i}`:i;n(r)?e(r,s):t[s]=r}))}(e),t}},469656:(e,t,o)=>{"use strict";o.d(t,{_:()=>i,z:()=>r});var n=o(667294),a=o(785893);const i=n.createContext(null);function r(e){let{children:t,value:o}=e;const r=n.useContext(i),s=(0,n.useMemo)((()=>function(e){let{parent:t,value:o}=e;if(!t){if(!o)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in o))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return o}const n={...t.data,...o?.data};return{plugin:t.plugin,data:n}}({parent:r,value:o})),[r,o]);return(0,a.jsx)(i.Provider,{value:s,children:t})}},189871:(e,t,o)=>{"use strict";o.d(t,{Iw:()=>b,gA:()=>u,_r:()=>l,Jo:()=>f,zh:()=>p,yW:()=>h,gB:()=>m});var n=o(616550),a=o(639962),i=o(506875);function r(e,t){void 0===t&&(t={});const o=function(){const{globalData:e}=(0,a.Z)();return e}()[e];if(!o&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return o}const s=e=>e.versions.find((e=>e.isLast));function c(e,t){const o=function(e,t){const o=s(e);return[...e.versions.filter((e=>e!==o)),o].find((e=>!!(0,n.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),a=o?.docs.find((e=>!!(0,n.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:o,activeDoc:a,alternateDocVersions:a?function(t){const o={};return e.versions.forEach((e=>{e.docs.forEach((n=>{n.id===t&&(o[e.name]=n)}))})),o}(a.id):{}}}const d={},l=()=>r("docusaurus-plugin-content-docs")??d,p=e=>function(e,t,o){void 0===t&&(t=i.m),void 0===o&&(o={});const n=r(e),a=n?.[t];if(!a&&o.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0});function u(e){void 0===e&&(e={});const t=l(),{pathname:o}=(0,n.TH)();return function(e,t,o){void 0===o&&(o={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,o]=e;return!!(0,n.LX)(t,{path:o.path,exact:!1,strict:!1})})),i=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!i&&o.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return i}(t,o,e)}function m(e){return p(e).versions}function h(e){const t=p(e);return s(t)}function b(e){const t=p(e),{pathname:o}=(0,n.TH)();return c(t,o)}function f(e){const t=p(e),{pathname:o}=(0,n.TH)();return function(e,t){const o=s(e);return{latestDocSuggestion:c(e,t).alternateDocVersions[o.name],latestVersionSuggestion:o}}(t,o)}},374313:(e,t,o)=>{"use strict";o.r(t),o.d(t,{default:()=>n});const n={onRouteDidUpdate(e){let{location:t,previousLocation:o}=e;!o||t.pathname===o.pathname&&t.search===o.search&&t.hash===o.hash||setTimeout((()=>{window.gtag("set","page_path",t.pathname+t.search+t.hash),window.gtag("event","page_view")}))}}},245117:(e,t,o)=>{"use strict";o.r(t);var n=o(836136),a=o(192560);const i="/sw.js",r=["appInstalled","queryString","standalone"],s=!1,c=(0,a.WA)("docusaurus.pwa.event.appInstalled.fired");function d(e,t){s&&(void 0===t?console.log(`[Docusaurus-PWA][registerSw]: ${e}`):console.log(`[Docusaurus-PWA][registerSw]: ${e}`,t))}async function l(){const e=await navigator.serviceWorker.getRegistrations();d("will unregister all service workers",{registrations:e}),await Promise.all(e.map((e=>e.unregister().then((t=>d("unregister service worker",{registration:e,result:t})))))),d("unregistered all service workers",{registrations:e}),window.location.reload()}const p={always:()=>!0,mobile:()=>window.innerWidth<=996,saveData:()=>!!navigator.connection?.saveData,appInstalled:()=>"true"===c.get()||async function(){if(!("getInstalledRelatedApps"in window.navigator))return!1;try{return(await navigator.getInstalledRelatedApps()).some((e=>"webapp"===e.platform))}catch(e){return!1}}(),standalone:()=>window.matchMedia("(display-mode: standalone)").matches,queryString:()=>"true"===new URLSearchParams(window.location.search).get("offlineMode")};async function u(){const e=await async function(){return(await Promise.all(r.map((e=>Promise.resolve(p[e]()).then((t=>t?e:void 0)))))).filter(Boolean)}(),t=e.length>0;return d(t?"offline mode enabled, because of activation strategies":"offline mode disabled, because none of the offlineModeActivationStrategies could be used",{activeStrategies:e,availableStrategies:r}),t}n.Z.canUseDOM&&(d("debug mode enabled"),"serviceWorker"in navigator&&(d("addLegacyAppInstalledEventsListeners"),window.addEventListener("appinstalled",(e=>{d("event appinstalled",{event:e}),c.set("true"),d("AppInstalledEventFiredStorage.set('true')"),l()})),window.addEventListener("beforeinstallprompt",(e=>{d("event beforeinstallprompt",{event:e});const t=c.get();d("AppInstalledEventFiredStorage.get()",{appInstalledEventFired:t}),t&&(c.del(),d("AppInstalledEventFiredStorage.del()"),l())})),d("legacy appinstalled and beforeinstallprompt event listeners installed"),async function(){const[{Workbox:e},t]=await Promise.all([o.e(75131).then(o.bind(o,675131)),u()]),n=new e(function(e){const t=JSON.stringify(e),o=`${i}?params=${encodeURIComponent(t)}`;return d("service worker url",{url:o,params:e}),o}({offlineMode:t,debug:s})),a=()=>n.messageSW({type:"SKIP_WAITING"}),r=()=>(d("handleServiceWorkerWaiting"),t?o.e(90363).then(o.bind(o,190363)).then((e=>{let{renderReloadPopup:t}=e;return t({onReload(){n.addEventListener("controlling",(()=>{window.location.reload()})),a()}})})):a());n.addEventListener("waiting",(e=>{d("event waiting",{event:e}),r()})),n.addEventListener("externalwaiting",(e=>{d("event externalwaiting",{event:e}),r()}));const c=await n.register();c&&(c.active&&d("registration.active",{registration:c}),c.installing&&d("registration.installing",{registration:c}),c.waiting&&(d("registration.waiting",{registration:c}),await r()))}().catch((e=>console.error("registerSW failed",e)))))},379957:(e,t,o)=>{"use strict";o.r(t),o.d(t,{default:()=>i});var n=o(574865),a=o.n(n);a().configure({showSpinner:!1});const i={onRouteUpdate(e){let{location:t,previousLocation:o}=e;if(o&&t.pathname!==o.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},982251:(e,t,o)=>{"use strict";o.r(t);var n=o(214965),a=o(636809);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:n}=t;globalThis.Prism=e,n.forEach((e=>{"php"===e&&o(196854),o(806726)(`./prism-${e}`)})),delete globalThis.Prism}(n.p1)},513899:(e,t,o)=>{"use strict";o.d(t,{Z:()=>l});o(667294);var n=o(236905),a=o(797325),i=o(820107),r=o(334791),s=o(210168);const c={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var d=o(785893);function l(e){let{as:t,id:o,...l}=e;const p=(0,s.Z)(),{navbar:{hideOnScroll:u}}=(0,i.L)();if("h1"===t||!o)return(0,d.jsx)(t,{...l,id:void 0});p.collectAnchor(o);const m=(0,a.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof l.children?l.children:o});return(0,d.jsxs)(t,{...l,className:(0,n.Z)("anchor",u?c.anchorWithHideOnScrollNavbar:c.anchorWithStickyNavbar,l.className),id:o,children:[l.children,(0,d.jsx)(r.Z,{className:"hash-link",to:`#${o}`,"aria-label":m,title:m,children:"\u200b"})]})}},414082:(e,t,o)=>{"use strict";o.d(t,{Z:()=>i});o(667294);const n={iconExternalLink:"iconExternalLink_nPIU"};var a=o(785893);function i(e){let{width:t=13.5,height:o=13.5}=e;return(0,a.jsx)("svg",{width:t,height:o,"aria-hidden":"true",viewBox:"0 0 24 24",className:n.iconExternalLink,children:(0,a.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},674618:(e,t,o)=>{"use strict";o.d(t,{Z:()=>mt});var n=o(667294),a=o(236905),i=o(873256),r=o(335463),s=o(616550),c=o(797325),d=o(743266),l=o(785893);const p="__docusaurus_skipToContent_fallback";function u(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function m(){const e=(0,n.useRef)(null),{action:t}=(0,s.k6)(),o=(0,n.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(p);t&&u(t)}),[]);return(0,d.S)((o=>{let{location:n}=o;e.current&&!n.hash&&"PUSH"===t&&u(e.current)})),{containerRef:e,onClick:o}}const h=(0,c.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function b(e){const t=e.children??h,{containerRef:o,onClick:n}=m();return(0,l.jsx)("div",{ref:o,role:"region","aria-label":h,children:(0,l.jsx)("a",{...e,href:`#${p}`,onClick:n,children:t})})}var f=o(323702),g=o(978181);const v={skipToContent:"skipToContent_fXgn"};function x(){return(0,l.jsx)(b,{className:v.skipToContent})}var y=o(820107),_=o(65830);function w(e){let{width:t=21,height:o=21,color:n="currentColor",strokeWidth:a=1.2,className:i,...r}=e;return(0,l.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:o,...r,children:(0,l.jsx)("g",{stroke:n,strokeWidth:a,children:(0,l.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const D={closeButton:"closeButton_CVFx"};function k(e){return(0,l.jsx)("button",{type:"button","aria-label":(0,c.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,a.Z)("clean-btn close",D.closeButton,e.className),children:(0,l.jsx)(w,{width:14,height:14,strokeWidth:3.1})})}const L={content:"content_knG7"};function O(e){const{announcementBar:t}=(0,y.L)(),{content:o}=t;return(0,l.jsx)("div",{...e,className:(0,a.Z)(L.content,e.className),dangerouslySetInnerHTML:{__html:o}})}const S={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function M(){const{announcementBar:e}=(0,y.L)(),{isActive:t,close:o}=(0,_.nT)();if(!t)return null;const{backgroundColor:n,textColor:a,isCloseable:i}=e;return(0,l.jsxs)("div",{className:S.announcementBar,style:{backgroundColor:n,color:a},role:"banner",children:[i&&(0,l.jsx)("div",{className:S.announcementBarPlaceholder}),(0,l.jsx)(O,{className:S.announcementBarContent}),i&&(0,l.jsx)(k,{onClick:o,className:S.announcementBarClose})]})}var T=o(552600),A=o(872957);var I=o(943768),R=o(753086);const E=n.createContext(null);function P(e){let{children:t}=e;const o=function(){const e=(0,T.e)(),t=(0,R.HY)(),[o,a]=(0,n.useState)(!1),i=null!==t.component,r=(0,I.D9)(i);return(0,n.useEffect)((()=>{i&&!r&&a(!0)}),[i,r]),(0,n.useEffect)((()=>{i?e.shown||a(!0):a(!1)}),[e.shown,i]),(0,n.useMemo)((()=>[o,a]),[o])}();return(0,l.jsx)(E.Provider,{value:o,children:t})}function j(e){if(e.component){const t=e.component;return(0,l.jsx)(t,{...e.props})}}function H(){const e=(0,n.useContext)(E);if(!e)throw new I.i6("NavbarSecondaryMenuDisplayProvider");const[t,o]=e,a=(0,n.useCallback)((()=>o(!1)),[o]),i=(0,R.HY)();return(0,n.useMemo)((()=>({shown:t,hide:a,content:j(i)})),[a,i,t])}function C(e){let{header:t,primaryMenu:o,secondaryMenu:n}=e;const{shown:i}=H();return(0,l.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,l.jsxs)("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i}),children:[(0,l.jsx)("div",{className:"navbar-sidebar__item menu",children:o}),(0,l.jsx)("div",{className:"navbar-sidebar__item menu",children:n})]})]})}var N=o(309200),q=o(51048);function z(e){return(0,l.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,l.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function G(e){return(0,l.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,l.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const F={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function J(e){let{className:t,buttonClassName:o,value:n,onChange:i}=e;const r=(0,q.Z)(),s=(0,c.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===n?(0,c.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,c.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,l.jsx)("div",{className:(0,a.Z)(F.toggle,t),children:(0,l.jsxs)("button",{className:(0,a.Z)("clean-btn",F.toggleButton,!r&&F.toggleButtonDisabled,o),type:"button",onClick:()=>i("dark"===n?"light":"dark"),disabled:!r,title:s,"aria-label":s,"aria-live":"polite",children:[(0,l.jsx)(z,{className:(0,a.Z)(F.toggleIcon,F.lightToggleIcon)}),(0,l.jsx)(G,{className:(0,a.Z)(F.toggleIcon,F.darkToggleIcon)})]})})}const B=n.memo(J),Z={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function $(e){let{className:t}=e;const o=(0,y.L)().navbar.style,n=(0,y.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:i}=(0,N.I)();return n?null:(0,l.jsx)(B,{className:t,buttonClassName:"dark"===o?Z.darkNavbarColorModeToggle:void 0,value:a,onChange:i})}var U=o(696811);function Q(){return(0,l.jsx)(U.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function W(){const e=(0,T.e)();return(0,l.jsx)("button",{type:"button","aria-label":(0,c.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,l.jsx)(w,{color:"var(--ifm-color-emphasis-600)"})})}function V(){return(0,l.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,l.jsx)(Q,{}),(0,l.jsx)($,{className:"margin-right--md"}),(0,l.jsx)(W,{})]})}var X=o(334791),K=o(779524),Y=o(702735);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=o(414082);function oe(e){let{activeBasePath:t,activeBaseRegex:o,to:n,href:a,label:i,html:r,isDropdownLink:s,prependBaseUrlToHref:c,...d}=e;const p=(0,K.Z)(n),u=(0,K.Z)(t),m=(0,K.Z)(a,{forcePrependBaseUrl:!0}),h=i&&a&&!(0,Y.Z)(a),b=r?{dangerouslySetInnerHTML:{__html:r}}:{children:(0,l.jsxs)(l.Fragment,{children:[i,h&&(0,l.jsx)(te.Z,{...s&&{width:12,height:12}})]})};return a?(0,l.jsx)(X.Z,{href:c?m:a,...d,...b}):(0,l.jsx)(X.Z,{to:p,isNavLink:!0,...(t||o)&&{isActive:(e,t)=>o?ee(o,t.pathname):t.pathname.startsWith(u)},...d,...b})}function ne(e){let{className:t,isDropdownItem:o=!1,...n}=e;const i=(0,l.jsx)(oe,{className:(0,a.Z)(o?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:o,...n});return o?(0,l.jsx)("li",{children:i}):i}function ae(e){let{className:t,isDropdownItem:o,...n}=e;return(0,l.jsx)("li",{className:"menu__list-item",children:(0,l.jsx)(oe,{className:(0,a.Z)("menu__link",t),...n})})}function ie(e){let{mobile:t=!1,position:o,...n}=e;const a=t?ae:ne;return(0,l.jsx)(a,{...n,activeClassName:n.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var re=o(54639),se=o(369003),ce=o(639962);const de={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};function le(e,t){return e.some((e=>function(e,t){return!!(0,se.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function pe(e){let{items:t,position:o,className:i,onClick:r,...s}=e;const c=(0,n.useRef)(null),[d,p]=(0,n.useState)(!1);return(0,n.useEffect)((()=>{const e=e=>{c.current&&!c.current.contains(e.target)&&p(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[c]),(0,l.jsxs)("div",{ref:c,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===o,"dropdown--show":d}),children:[(0,l.jsx)(oe,{"aria-haspopup":"true","aria-expanded":d,role:"button",href:s.to?void 0:"#",className:(0,a.Z)("navbar__link",i),...s,onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),p(!d))},children:s.children??s.label}),(0,l.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,n.createElement)(Le,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function ue(e){let{items:t,className:o,position:i,onClick:r,...c}=e;const d=function(){const{siteConfig:{baseUrl:e}}=(0,ce.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),p=le(t,d),{collapsed:u,toggleCollapsed:m,setCollapsed:h}=(0,re.u)({initialState:()=>!p});return(0,n.useEffect)((()=>{p&&h(!p)}),[d,p,h]),(0,l.jsxs)("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":u}),children:[(0,l.jsx)(oe,{role:"button",className:(0,a.Z)(de.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",o),...c,onClick:e=>{e.preventDefault(),m()},children:c.children??c.label}),(0,l.jsx)(re.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:u,children:t.map(((e,t)=>(0,n.createElement)(Le,{mobile:!0,isDropdownItem:!0,onClick:r,activeClassName:"menu__link--active",...e,key:t})))})]})}function me(e){let{mobile:t=!1,...o}=e;const n=t?ue:pe;return(0,l.jsx)(n,{...o})}var he=o(340626);function be(e){let{width:t=20,height:o=20,...n}=e;return(0,l.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:o,"aria-hidden":!0,...n,children:(0,l.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const fe="iconLanguage_nlXk";var ge=o(823855);const ve={navbarSearchContainer:"navbarSearchContainer_Bca1"};function xe(e){let{children:t,className:o}=e;return(0,l.jsx)("div",{className:(0,a.Z)(o,ve.navbarSearchContainer),children:t})}var ye=o(189871),_e=o(903734);var we=o(186409);const De=e=>e.docs.find((t=>t.id===e.mainDocId));const ke={default:ie,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:o,dropdownItemsAfter:n,queryString:a="",...i}=e;const{i18n:{currentLocale:r,locales:d,localeConfigs:p}}=(0,ce.Z)(),u=(0,he.l)(),{search:m,hash:h}=(0,s.TH)(),b=[...o,...d.map((e=>{const o=`${`pathname://${u.createUrl({locale:e,fullyQualified:!1})}`}${m}${h}${a}`;return{label:p[e].label,lang:p[e].htmlLang,to:o,target:"_self",autoAddBaseUrl:!1,className:e===r?t?"menu__link--active":"dropdown__link--active":""}})),...n],f=t?(0,c.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):p[r].label;return(0,l.jsx)(me,{...i,mobile:t,label:(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(be,{className:fe}),f]}),items:b})},search:function(e){let{mobile:t,className:o}=e;return t?null:(0,l.jsx)(xe,{className:o,children:(0,l.jsx)(ge.Z,{})})},dropdown:me,html:function(e){let{value:t,className:o,mobile:n=!1,isDropdownItem:i=!1}=e;const r=i?"li":"div";return(0,l.jsx)(r,{className:(0,a.Z)({navbar__item:!n&&!i,"menu__list-item":n},o),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:o,docsPluginId:n,...a}=e;const{activeDoc:i}=(0,ye.Iw)(n),r=(0,_e.vY)(t,n),s=i?.path===r?.path;return null===r||r.unlisted&&!s?null:(0,l.jsx)(ie,{exact:!0,...a,isActive:()=>s||!!i?.sidebar&&i.sidebar===r.sidebar,label:o??r.id,to:r.path})},docSidebar:function(e){let{sidebarId:t,label:o,docsPluginId:n,...a}=e;const{activeDoc:i}=(0,ye.Iw)(n),r=(0,_e.oz)(t,n).link;if(!r)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,l.jsx)(ie,{exact:!0,...a,isActive:()=>i?.sidebar===t,label:o??r.label,to:r.path})},docsVersion:function(e){let{label:t,to:o,docsPluginId:n,...a}=e;const i=(0,_e.lO)(n)[0],r=t??i.label,s=o??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return(0,l.jsx)(ie,{...a,label:r,to:s})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:o,dropdownActiveClassDisabled:n,dropdownItemsBefore:a,dropdownItemsAfter:i,...r}=e;const{search:d,hash:p}=(0,s.TH)(),u=(0,ye.Iw)(o),m=(0,ye.gB)(o),{savePreferredVersionName:h}=(0,we.J)(o),b=[...a,...m.map((e=>{const t=u.alternateDocVersions[e.name]??De(e);return{label:e.label,to:`${t.path}${d}${p}`,isActive:()=>e===u.activeVersion,onClick:()=>h(e.name)}})),...i],f=(0,_e.lO)(o)[0],g=t&&b.length>1?(0,c.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):f.label,v=t&&b.length>1?void 0:De(f).path;return b.length<=1?(0,l.jsx)(ie,{...r,mobile:t,label:g,to:v,isActive:n?()=>!1:void 0}):(0,l.jsx)(me,{...r,mobile:t,label:g,to:v,items:b,isActive:n?()=>!1:void 0})}};function Le(e){let{type:t,...o}=e;const n=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,o),a=ke[n];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,l.jsx)(a,{...o})}function Oe(){const e=(0,T.e)(),t=(0,y.L)().navbar.items;return(0,l.jsx)("ul",{className:"menu__list",children:t.map(((t,o)=>(0,n.createElement)(Le,{mobile:!0,...t,onClick:()=>e.toggle(),key:o})))})}function Se(e){return(0,l.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,l.jsx)(c.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function Me(){const e=0===(0,y.L)().navbar.items.length,t=H();return(0,l.jsxs)(l.Fragment,{children:[!e&&(0,l.jsx)(Se,{onClick:()=>t.hide()}),t.content]})}function Te(){const e=(0,T.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,n.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,l.jsx)(C,{header:(0,l.jsx)(V,{}),primaryMenu:(0,l.jsx)(Oe,{}),secondaryMenu:(0,l.jsx)(Me,{})}):null}const Ae={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Ie(e){return(0,l.jsx)("div",{role:"presentation",...e,className:(0,a.Z)("navbar-sidebar__backdrop",e.className)})}function Re(e){let{children:t}=e;const{navbar:{hideOnScroll:o,style:i}}=(0,y.L)(),r=(0,T.e)(),{navbarRef:s,isNavbarVisible:p}=function(e){const[t,o]=(0,n.useState)(e),a=(0,n.useRef)(!1),i=(0,n.useRef)(0),r=(0,n.useCallback)((e=>{null!==e&&(i.current=e.getBoundingClientRect().height)}),[]);return(0,A.RF)(((t,n)=>{let{scrollY:r}=t;if(!e)return;if(r=s?o(!1):r+d{if(!e)return;const n=t.location.hash;if(n?document.getElementById(n.substring(1)):void 0)return a.current=!0,void o(!1);o(!0)})),{navbarRef:r,isNavbarVisible:t}}(o);return(0,l.jsxs)("nav",{ref:s,"aria-label":(0,c.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.Z)("navbar","navbar--fixed-top",o&&[Ae.navbarHideable,!p&&Ae.navbarHidden],{"navbar--dark":"dark"===i,"navbar--primary":"primary"===i,"navbar-sidebar--show":r.shown}),children:[t,(0,l.jsx)(Ie,{onClick:r.toggle}),(0,l.jsx)(Te,{})]})}var Ee=o(963905);const Pe={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function je(e){return(0,l.jsx)("button",{type:"button",...e,children:(0,l.jsx)(c.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function He(e){let{error:t}=e;const o=(0,Ee.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,l.jsx)("p",{className:Pe.errorBoundaryError,children:o})}class Ce extends n.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Ne="right";function qe(e){let{width:t=30,height:o=30,className:n,...a}=e;return(0,l.jsx)("svg",{className:n,width:t,height:o,viewBox:"0 0 30 30","aria-hidden":"true",...a,children:(0,l.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function ze(){const{toggle:e,shown:t}=(0,T.e)();return(0,l.jsx)("button",{onClick:e,"aria-label":(0,c.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,l.jsx)(qe,{})})}const Ge={colorModeToggle:"colorModeToggle_DEke"};function Fe(e){let{items:t}=e;return(0,l.jsx)(l.Fragment,{children:t.map(((e,t)=>(0,l.jsx)(Ce,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,l.jsx)(Le,{...e})},t)))})}function Je(e){let{left:t,right:o}=e;return(0,l.jsxs)("div",{className:"navbar__inner",children:[(0,l.jsx)("div",{className:"navbar__items",children:t}),(0,l.jsx)("div",{className:"navbar__items navbar__items--right",children:o})]})}function Be(){const e=(0,T.e)(),t=(0,y.L)().navbar.items,[o,n]=function(e){function t(e){return"left"===(e.position??Ne)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return(0,l.jsx)(Je,{left:(0,l.jsxs)(l.Fragment,{children:[!e.disabled&&(0,l.jsx)(ze,{}),(0,l.jsx)(Q,{}),(0,l.jsx)(Fe,{items:o})]}),right:(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(Fe,{items:n}),(0,l.jsx)($,{className:Ge.colorModeToggle}),!a&&(0,l.jsx)(xe,{children:(0,l.jsx)(ge.Z,{})})]})})}function Ze(){return(0,l.jsx)(Re,{children:(0,l.jsx)(Be,{})})}function $e(e){let{item:t}=e;const{to:o,href:n,label:a,prependBaseUrlToHref:i,...r}=t,s=(0,K.Z)(o),c=(0,K.Z)(n,{forcePrependBaseUrl:!0});return(0,l.jsxs)(X.Z,{className:"footer__link-item",...n?{href:i?c:n}:{to:s},...r,children:[a,n&&!(0,Y.Z)(n)&&(0,l.jsx)(te.Z,{})]})}function Ue(e){let{item:t}=e;return t.html?(0,l.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,l.jsx)("li",{className:"footer__item",children:(0,l.jsx)($e,{item:t})},t.href??t.to)}function Qe(e){let{column:t}=e;return(0,l.jsxs)("div",{className:"col footer__col",children:[(0,l.jsx)("div",{className:"footer__title",children:t.title}),(0,l.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,l.jsx)(Ue,{item:e},t)))})]})}function We(e){let{columns:t}=e;return(0,l.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,l.jsx)(Qe,{column:e},t)))})}function Ve(){return(0,l.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function Xe(e){let{item:t}=e;return t.html?(0,l.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,l.jsx)($e,{item:t})}function Ke(e){let{links:t}=e;return(0,l.jsx)("div",{className:"footer__links text--center",children:(0,l.jsx)("div",{className:"footer__links",children:t.map(((e,o)=>(0,l.jsxs)(n.Fragment,{children:[(0,l.jsx)(Xe,{item:e}),t.length!==o+1&&(0,l.jsx)(Ve,{})]},o)))})})}function Ye(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,l.jsx)(We,{columns:t}):(0,l.jsx)(Ke,{links:t})}var et=o(754277);const tt={footerLogoLink:"footerLogoLink_BH7S"};function ot(e){let{logo:t}=e;const{withBaseUrl:o}=(0,K.C)(),n={light:o(t.src),dark:o(t.srcDark??t.src)};return(0,l.jsx)(et.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:n,width:t.width,height:t.height,style:t.style})}function nt(e){let{logo:t}=e;return t.href?(0,l.jsx)(X.Z,{href:t.href,className:tt.footerLogoLink,target:t.target,children:(0,l.jsx)(ot,{logo:t})}):(0,l.jsx)(ot,{logo:t})}function at(e){let{copyright:t}=e;return(0,l.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function it(e){let{style:t,links:o,logo:n,copyright:i}=e;return(0,l.jsx)("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t}),children:(0,l.jsxs)("div",{className:"container container-fluid",children:[o,(n||i)&&(0,l.jsxs)("div",{className:"footer__bottom text--center",children:[n&&(0,l.jsx)("div",{className:"margin-bottom--sm",children:n}),i]})]})})}function rt(){const{footer:e}=(0,y.L)();if(!e)return null;const{copyright:t,links:o,logo:n,style:a}=e;return(0,l.jsx)(it,{style:a,links:o&&o.length>0&&(0,l.jsx)(Ye,{links:o}),logo:n&&(0,l.jsx)(nt,{logo:n}),copyright:t&&(0,l.jsx)(at,{copyright:t})})}const st=n.memo(rt),ct=(0,I.Qc)([N.S,_.pl,A.OC,we.L5,r.VC,function(e){let{children:t}=e;return(0,l.jsx)(R.n2,{children:(0,l.jsx)(T.M,{children:(0,l.jsx)(P,{children:t})})})}]);function dt(e){let{children:t}=e;return(0,l.jsx)(ct,{children:t})}var lt=o(513899);function pt(e){let{error:t,tryAgain:o}=e;return(0,l.jsx)("main",{className:"container margin-vert--xl",children:(0,l.jsx)("div",{className:"row",children:(0,l.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,l.jsx)(lt.Z,{as:"h1",className:"hero__title",children:(0,l.jsx)(c.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,l.jsx)("div",{className:"margin-vert--lg",children:(0,l.jsx)(je,{onClick:o,className:"button button--primary shadow--lw"})}),(0,l.jsx)("hr",{}),(0,l.jsx)("div",{className:"margin-vert--md",children:(0,l.jsx)(He,{error:t})})]})})})}const ut={mainWrapper:"mainWrapper_z2l0"};function mt(e){const{children:t,noFooter:o,wrapperClassName:n,title:s,description:c}=e;return(0,g.t)(),(0,l.jsxs)(dt,{children:[(0,l.jsx)(r.d,{title:s,description:c}),(0,l.jsx)(x,{}),(0,l.jsx)(M,{}),(0,l.jsx)(Ze,{}),(0,l.jsx)("div",{id:p,className:(0,a.Z)(f.k.wrapper.main,ut.mainWrapper,n),children:(0,l.jsx)(i.Z,{fallback:e=>(0,l.jsx)(pt,{...e}),children:t})}),!o&&(0,l.jsx)(st,{})]})}},696811:(e,t,o)=>{"use strict";o.d(t,{Z:()=>l});o(667294);var n=o(334791),a=o(779524),i=o(639962),r=o(820107),s=o(754277),c=o(785893);function d(e){let{logo:t,alt:o,imageClassName:n}=e;const i={light:(0,a.Z)(t.src),dark:(0,a.Z)(t.srcDark||t.src)},r=(0,c.jsx)(s.Z,{className:t.className,sources:i,height:t.height,width:t.width,alt:o,style:t.style});return n?(0,c.jsx)("div",{className:n,children:r}):r}function l(e){const{siteConfig:{title:t}}=(0,i.Z)(),{navbar:{title:o,logo:s}}=(0,r.L)(),{imageClassName:l,titleClassName:p,...u}=e,m=(0,a.Z)(s?.href||"/"),h=o?"":t,b=s?.alt??h;return(0,c.jsxs)(n.Z,{to:m,...u,...s?.target&&{target:s.target},children:[s&&(0,c.jsx)(d,{logo:s,alt:b,imageClassName:l}),null!=o&&(0,c.jsx)("b",{className:p,children:o})]})}},433647:(e,t,o)=>{"use strict";o.d(t,{Z:()=>i});o(667294);var n=o(631514),a=o(785893);function i(e){let{locale:t,version:o,tag:i}=e;const r=t;return(0,a.jsxs)(n.Z,{children:[t&&(0,a.jsx)("meta",{name:"docusaurus_locale",content:t}),o&&(0,a.jsx)("meta",{name:"docusaurus_version",content:o}),i&&(0,a.jsx)("meta",{name:"docusaurus_tag",content:i}),r&&(0,a.jsx)("meta",{name:"docsearch:language",content:r}),o&&(0,a.jsx)("meta",{name:"docsearch:version",content:o}),i&&(0,a.jsx)("meta",{name:"docsearch:docusaurus_tag",content:i})]})}},754277:(e,t,o)=>{"use strict";o.d(t,{Z:()=>l});var n=o(667294),a=o(700788),i=o(51048),r=o(309200);const s={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var c=o(785893);function d(e){let{className:t,children:o}=e;const d=(0,i.Z)(),{colorMode:l}=(0,r.I)();return(0,c.jsx)(c.Fragment,{children:(d?"dark"===l?["dark"]:["light"]:["light","dark"]).map((e=>{const i=o({theme:e,className:(0,a.Z)(t,s.themedComponent,s[`themedComponent--${e}`])});return(0,c.jsx)(n.Fragment,{children:i},e)}))})}function l(e){const{sources:t,className:o,alt:n,...a}=e;return(0,c.jsx)(d,{className:o,children:e=>{let{theme:o,className:i}=e;return(0,c.jsx)("img",{src:t[o],alt:n,className:i,...a})}})}},54639:(e,t,o)=>{"use strict";o.d(t,{u:()=>d,z:()=>g});var n=o(667294),a=o(836136),i=o(81270),r=o(558986),s=o(785893);const c="ease-in-out";function d(e){let{initialState:t}=e;const[o,a]=(0,n.useState)(t??!1),i=(0,n.useCallback)((()=>{a((e=>!e))}),[]);return{collapsed:o,setCollapsed:a,toggleCollapsed:i}}const l={display:"none",overflow:"hidden",height:"0px"},p={display:"block",overflow:"visible",height:"auto"};function u(e,t){const o=t?l:p;e.style.display=o.display,e.style.overflow=o.overflow,e.style.height=o.height}function m(e){let{collapsibleRef:t,collapsed:o,animation:a}=e;const i=(0,n.useRef)(!1);(0,n.useEffect)((()=>{const e=t.current;function n(){const t=e.scrollHeight,o=a?.duration??function(e){if((0,r.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${o}ms ${a?.easing??c}`,height:`${t}px`}}function s(){const t=n();e.style.transition=t.transition,e.style.height=t.height}if(!i.current)return u(e,o),void(i.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{o?(s(),requestAnimationFrame((()=>{e.style.height=l.height,e.style.overflow=l.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,o,a])}function h(e){if(!a.Z.canUseDOM)return e?l:p}function b(e){let{as:t="div",collapsed:o,children:a,animation:i,onCollapseTransitionEnd:r,className:c,disableSSRStyle:d}=e;const l=(0,n.useRef)(null);return m({collapsibleRef:l,collapsed:o,animation:i}),(0,s.jsx)(t,{ref:l,style:d?void 0:h(o),onTransitionEnd:e=>{"height"===e.propertyName&&(u(l.current,o),r?.(o))},className:c,children:a})}function f(e){let{collapsed:t,...o}=e;const[a,r]=(0,n.useState)(!t),[c,d]=(0,n.useState)(t);return(0,i.Z)((()=>{t||r(!0)}),[t]),(0,i.Z)((()=>{a&&d(t)}),[a,t]),a?(0,s.jsx)(b,{...o,collapsed:c}):null}function g(e){let{lazy:t,...o}=e;const n=t?f:b;return(0,s.jsx)(n,{...o})}},65830:(e,t,o)=>{"use strict";o.d(t,{nT:()=>b,pl:()=>h});var n=o(667294),a=o(51048),i=o(192560),r=o(943768),s=o(820107),c=o(785893);const d=(0,i.WA)("docusaurus.announcement.dismiss"),l=(0,i.WA)("docusaurus.announcement.id"),p=()=>"true"===d.get(),u=e=>d.set(String(e)),m=n.createContext(null);function h(e){let{children:t}=e;const o=function(){const{announcementBar:e}=(0,s.L)(),t=(0,a.Z)(),[o,i]=(0,n.useState)((()=>!!t&&p()));(0,n.useEffect)((()=>{i(p())}),[]);const r=(0,n.useCallback)((()=>{u(!0),i(!0)}),[]);return(0,n.useEffect)((()=>{if(!e)return;const{id:t}=e;let o=l.get();"annoucement-bar"===o&&(o="announcement-bar");const n=t!==o;l.set(t),n&&u(!1),!n&&p()||i(!1)}),[e]),(0,n.useMemo)((()=>({isActive:!!e&&!o,close:r})),[e,o,r])}();return(0,c.jsx)(m.Provider,{value:o,children:t})}function b(){const e=(0,n.useContext)(m);if(!e)throw new r.i6("AnnouncementBarProvider");return e}},309200:(e,t,o)=>{"use strict";o.d(t,{I:()=>g,S:()=>f});var n=o(667294),a=o(836136),i=o(943768),r=o(192560),s=o(820107),c=o(785893);const d=n.createContext(void 0),l="theme",p=(0,r.WA)(l),u={light:"light",dark:"dark"},m=e=>e===u.dark?u.dark:u.light,h=e=>a.Z.canUseDOM?m(document.documentElement.getAttribute("data-theme")):m(e),b=e=>{p.set(m(e))};function f(e){let{children:t}=e;const o=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:o}}=(0,s.L)(),[a,i]=(0,n.useState)(h(e));(0,n.useEffect)((()=>{t&&p.del()}),[t]);const r=(0,n.useCallback)((function(t,n){void 0===n&&(n={});const{persist:a=!0}=n;t?(i(t),a&&b(t)):(i(o?window.matchMedia("(prefers-color-scheme: dark)").matches?u.dark:u.light:e),p.del())}),[o,e]);(0,n.useEffect)((()=>{document.documentElement.setAttribute("data-theme",m(a))}),[a]),(0,n.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==l)return;const t=p.get();null!==t&&r(m(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,r]);const c=(0,n.useRef)(!1);return(0,n.useEffect)((()=>{if(t&&!o)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),n=()=>{window.matchMedia("print").matches||c.current?c.current=window.matchMedia("print").matches:r(null)};return e.addListener(n),()=>e.removeListener(n)}),[r,t,o]),(0,n.useMemo)((()=>({colorMode:a,setColorMode:r,get isDarkTheme(){return a===u.dark},setLightTheme(){r(u.light)},setDarkTheme(){r(u.dark)}})),[a,r])}();return(0,c.jsx)(d.Provider,{value:o,children:t})}function g(){const e=(0,n.useContext)(d);if(null==e)throw new i.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},186409:(e,t,o)=>{"use strict";o.d(t,{J:()=>x,L5:()=>g});var n=o(667294),a=o(189871),i=o(506875),r=o(820107),s=o(903734),c=o(943768),d=o(192560),l=o(785893);const p=e=>`docs-preferred-version-${e}`,u={save:(e,t,o)=>{(0,d.WA)(p(e),{persistence:t}).set(o)},read:(e,t)=>(0,d.WA)(p(e),{persistence:t}).get(),clear:(e,t)=>{(0,d.WA)(p(e),{persistence:t}).del()}},m=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const h=n.createContext(null);function b(){const e=(0,a._r)(),t=(0,r.L)().docs.versionPersistence,o=(0,n.useMemo)((()=>Object.keys(e)),[e]),[i,s]=(0,n.useState)((()=>m(o)));(0,n.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:o,allDocsData:n}=e;function a(e){const t=u.read(e,o);return n[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(u.clear(e,o),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:o}))}),[e,t,o]);return[i,(0,n.useMemo)((()=>({savePreferredVersion:function(e,o){u.save(e,t,o),s((t=>({...t,[e]:{preferredVersionName:o}})))}})),[t])]}function f(e){let{children:t}=e;const o=b();return(0,l.jsx)(h.Provider,{value:o,children:t})}function g(e){let{children:t}=e;return s.cE?(0,l.jsx)(f,{children:t}):(0,l.jsx)(l.Fragment,{children:t})}function v(){const e=(0,n.useContext)(h);if(!e)throw new c.i6("DocsPreferredVersionContextProvider");return e}function x(e){void 0===e&&(e=i.m);const t=(0,a.zh)(e),[o,r]=v(),{preferredVersionName:s}=o[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,n.useCallback)((t=>{r.savePreferredVersion(e,t)}),[r,e])}}},784432:(e,t,o)=>{"use strict";o.d(t,{V:()=>d,b:()=>c});var n=o(667294),a=o(943768),i=o(785893);const r=Symbol("EmptyContext"),s=n.createContext(r);function c(e){let{children:t,name:o,items:a}=e;const r=(0,n.useMemo)((()=>o&&a?{name:o,items:a}:null),[o,a]);return(0,i.jsx)(s.Provider,{value:r,children:t})}function d(){const e=(0,n.useContext)(s);if(e===r)throw new a.i6("DocsSidebarProvider");return e}},58801:(e,t,o)=>{"use strict";o.d(t,{E:()=>c,q:()=>s});var n=o(667294),a=o(943768),i=o(785893);const r=n.createContext(null);function s(e){let{children:t,version:o}=e;return(0,i.jsx)(r.Provider,{value:o,children:t})}function c(){const e=(0,n.useContext)(r);if(null===e)throw new a.i6("DocsVersionProvider");return e}},552600:(e,t,o)=>{"use strict";o.d(t,{M:()=>m,e:()=>h});var n=o(667294),a=o(753086),i=o(113488),r=o(616550),s=o(943768);function c(e){!function(e){const t=(0,r.k6)(),o=(0,s.zX)(e);(0,n.useEffect)((()=>t.block(((e,t)=>o(e,t)))),[t,o])}(((t,o)=>{if("POP"===o)return e(t,o)}))}var d=o(820107),l=o(785893);const p=n.createContext(void 0);function u(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,d.L)().navbar;return 0===t.length&&!e.component}(),t=(0,i.i)(),o=!e&&"mobile"===t,[r,s]=(0,n.useState)(!1);c((()=>{if(r)return s(!1),!1}));const l=(0,n.useCallback)((()=>{s((e=>!e))}),[]);return(0,n.useEffect)((()=>{"desktop"===t&&s(!1)}),[t]),(0,n.useMemo)((()=>({disabled:e,shouldRender:o,toggle:l,shown:r})),[e,o,l,r])}function m(e){let{children:t}=e;const o=u();return(0,l.jsx)(p.Provider,{value:o,children:t})}function h(){const e=n.useContext(p);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},753086:(e,t,o)=>{"use strict";o.d(t,{HY:()=>c,Zo:()=>d,n2:()=>s});var n=o(667294),a=o(943768),i=o(785893);const r=n.createContext(null);function s(e){let{children:t}=e;const o=(0,n.useState)({component:null,props:null});return(0,i.jsx)(r.Provider,{value:o,children:t})}function c(){const e=(0,n.useContext)(r);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function d(e){let{component:t,props:o}=e;const i=(0,n.useContext)(r);if(!i)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,s]=i,c=(0,a.Ql)(o);return(0,n.useEffect)((()=>{s({component:t,props:c})}),[s,t,c]),(0,n.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},978181:(e,t,o)=>{"use strict";o.d(t,{h:()=>a,t:()=>i});var n=o(667294);const a="navigation-with-keyboard";function i(){(0,n.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},113488:(e,t,o)=>{"use strict";o.d(t,{i:()=>s});var n=o(667294),a=o(836136);const i={desktop:"desktop",mobile:"mobile",ssr:"ssr"},r=996;function s(e){let{desktopBreakpoint:t=r}=void 0===e?{}:e;const[o,s]=(0,n.useState)((()=>"ssr"));return(0,n.useEffect)((()=>{function e(){s(function(e){if(!a.Z.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?i.desktop:i.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),o}},323702:(e,t,o)=>{"use strict";o.d(t,{k:()=>n});const n={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},558986:(e,t,o)=>{"use strict";function n(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}o.d(t,{n:()=>n})},903734:(e,t,o)=>{"use strict";o.d(t,{MN:()=>S,LM:()=>h,_F:()=>v,cE:()=>u,jA:()=>b,xz:()=>m,SN:()=>O,lO:()=>D,vY:()=>L,oz:()=>k,s1:()=>w,f:()=>y});var n=o(667294),a=o(616550),i=o(318790),r=o(189871),s=o(186409),c=o(58801),d=o(784432);function l(e){return Array.from(new Set(e))}var p=o(369003);const u=!!r._r;function m(e){const t=(0,c.E)();if(!e)return;const o=t.docs[e];if(!o)throw new Error(`no version doc found by id=${e}`);return o}function h(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=h(t);if(e)return e}}(e):void 0:e.href}function b(){const{pathname:e}=(0,a.TH)(),t=(0,d.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const o=_({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!o)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return o}const f=(e,t)=>void 0!==e&&(0,p.Mg)(e,t),g=(e,t)=>e.some((e=>v(e,t)));function v(e,t){return"link"===e.type?f(e.href,t):"category"===e.type&&(f(e.href,t)||g(e.items,t))}function x(e,t){switch(e.type){case"category":return v(e,t)||e.items.some((e=>x(e,t)));case"link":return!e.unlisted||v(e,t);default:return!0}}function y(e,t){return(0,n.useMemo)((()=>e.filter((e=>x(e,t)))),[e,t])}function _(e){let{sidebarItems:t,pathname:o,onlyCategories:n=!1}=e;const a=[];return function e(t){for(const i of t)if("category"===i.type&&((0,p.Mg)(i.href,o)||e(i.items))||"link"===i.type&&(0,p.Mg)(i.href,o)){return n&&"category"!==i.type||a.unshift(i),!0}return!1}(t),a}function w(){const e=(0,d.V)(),{pathname:t}=(0,a.TH)(),o=(0,r.gA)()?.pluginData.breadcrumbs;return!1!==o&&e?_({sidebarItems:e.items,pathname:t}):null}function D(e){const{activeVersion:t}=(0,r.Iw)(e),{preferredVersion:o}=(0,s.J)(e),a=(0,r.yW)(e);return(0,n.useMemo)((()=>l([t,o,a].filter(Boolean))),[t,o,a])}function k(e,t){const o=D(t);return(0,n.useMemo)((()=>{const t=o.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),n=t.find((t=>t[0]===e));if(!n)throw new Error(`Can't find any sidebar with id "${e}" in version${o.length>1?"s":""} ${o.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return n[1]}),[e,o])}function L(e,t){const o=D(t);return(0,n.useMemo)((()=>{const t=o.flatMap((e=>e.docs)),n=t.find((t=>t.id===e));if(!n){if(o.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${o.length>1?"s":""} "${o.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${l(t.map((e=>e.id))).join("\n- ")}`)}return n}),[e,o])}function O(e){let{route:t}=e;const o=(0,a.TH)(),n=(0,c.E)(),r=t.routes,s=r.find((e=>(0,a.LX)(o.pathname,e)));if(!s)return null;const d=s.sidebar,l=d?n.docsSidebars[d]:void 0;return{docElement:(0,i.H)(r),sidebarName:d,sidebarItems:l}}function S(e){return e.filter((e=>!("category"===e.type||"link"===e.type)||!!h(e)))}},335463:(e,t,o)=>{"use strict";o.d(t,{FG:()=>m,d:()=>p,VC:()=>h});var n=o(667294),a=o(700788),i=o(631514),r=o(469656);function s(){const e=n.useContext(r._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var c=o(779524),d=o(639962);var l=o(785893);function p(e){let{title:t,description:o,keywords:n,image:a,children:r}=e;const s=function(e){const{siteConfig:t}=(0,d.Z)(),{title:o,titleDelimiter:n}=t;return e?.trim().length?`${e.trim()} ${n} ${o}`:o}(t),{withBaseUrl:p}=(0,c.C)(),u=a?p(a,{absolute:!0}):void 0;return(0,l.jsxs)(i.Z,{children:[t&&(0,l.jsx)("title",{children:s}),t&&(0,l.jsx)("meta",{property:"og:title",content:s}),o&&(0,l.jsx)("meta",{name:"description",content:o}),o&&(0,l.jsx)("meta",{property:"og:description",content:o}),n&&(0,l.jsx)("meta",{name:"keywords",content:Array.isArray(n)?n.join(","):n}),u&&(0,l.jsx)("meta",{property:"og:image",content:u}),u&&(0,l.jsx)("meta",{name:"twitter:image",content:u}),r]})}const u=n.createContext(void 0);function m(e){let{className:t,children:o}=e;const r=n.useContext(u),s=(0,a.Z)(r,t);return(0,l.jsxs)(u.Provider,{value:s,children:[(0,l.jsx)(i.Z,{children:(0,l.jsx)("html",{className:s})}),o]})}function h(e){let{children:t}=e;const o=s(),n=`plugin-${o.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${o.plugin.id}`;return(0,l.jsx)(m,{className:(0,a.Z)(n,i),children:t})}},943768:(e,t,o)=>{"use strict";o.d(t,{D9:()=>s,Qc:()=>l,Ql:()=>d,i6:()=>c,zX:()=>r});var n=o(667294),a=o(81270),i=o(785893);function r(e){const t=(0,n.useRef)(e);return(0,a.Z)((()=>{t.current=e}),[e]),(0,n.useCallback)((function(){return t.current(...arguments)}),[])}function s(e){const t=(0,n.useRef)();return(0,a.Z)((()=>{t.current=e})),t.current}class c extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function d(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,n.useMemo)((()=>e),t.flat())}function l(e){return t=>{let{children:o}=t;return(0,i.jsx)(i.Fragment,{children:e.reduceRight(((e,t)=>(0,i.jsx)(t,{children:e})),o)})}}},369003:(e,t,o)=>{"use strict";o.d(t,{Mg:()=>r,Ns:()=>s});var n=o(667294),a=o(150997),i=o(639962);function r(e,t){const o=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return o(e)===o(t)}function s(){const{baseUrl:e}=(0,i.Z)().siteConfig;return(0,n.useMemo)((()=>function(e){let{baseUrl:t,routes:o}=e;function n(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(n)||e(t.filter(a).flatMap((e=>e.routes??[])))}(o)}({routes:a.Z,baseUrl:e})),[e])}},872957:(e,t,o)=>{"use strict";o.d(t,{Ct:()=>m,OC:()=>d,RF:()=>u});var n=o(667294),a=o(836136),i=o(51048),r=(o(81270),o(943768)),s=o(785893);const c=n.createContext(void 0);function d(e){let{children:t}=e;const o=function(){const e=(0,n.useRef)(!0);return(0,n.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,s.jsx)(c.Provider,{value:o,children:t})}function l(){const e=(0,n.useContext)(c);if(null==e)throw new r.i6("ScrollControllerProvider");return e}const p=()=>a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function u(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:o}=l(),a=(0,n.useRef)(p()),i=(0,r.zX)(e);(0,n.useEffect)((()=>{const e=()=>{if(!o.current)return;const e=p();i(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[i,o,...t])}function m(){const e=(0,n.useRef)(null),t=(0,i.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:o=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(o):function(e){let t=null;const o=document.documentElement.scrollTop>e;return function n(){const a=document.documentElement.scrollTop;(o&&a>e||!o&&at&&cancelAnimationFrame(t)}(o)},cancelScroll:()=>e.current?.()}}},660246:(e,t,o)=>{"use strict";o.d(t,{HX:()=>n,os:()=>a});o(639962);const n="default";function a(e,t){return`docs-${e}-${t}`}},192560:(e,t,o)=>{"use strict";o.d(t,{WA:()=>c});o(667294);const n="localStorage";function a(e){let{key:t,oldValue:o,newValue:n,storage:a}=e;if(o===n)return;const i=document.createEvent("StorageEvent");i.initStorageEvent("storage",!1,!1,t,o,n,window.location.href,a),window.dispatchEvent(i)}function i(e){if(void 0===e&&(e=n),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(o){return t=o,r||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),r=!0),null}var t}let r=!1;const s={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const o=i(t?.persistence);return null===o?s:{get:()=>{try{return o.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const n=o.getItem(e);o.setItem(e,t),a({key:e,oldValue:n,newValue:t,storage:o})}catch(n){console.error(`Docusaurus storage error, can't set ${e}=${t}`,n)}},del:()=>{try{const t=o.getItem(e);o.removeItem(e),a({key:e,oldValue:t,newValue:null,storage:o})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const n=n=>{n.storageArea===o&&n.key===e&&t(n)};return window.addEventListener("storage",n),()=>window.removeEventListener("storage",n)}catch(n){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,n),()=>{}}}}}},340626:(e,t,o)=>{"use strict";o.d(t,{l:()=>r});var n=o(639962),a=o(616550),i=o(963905);function r(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:o},i18n:{defaultLocale:r,currentLocale:s}}=(0,n.Z)(),{pathname:c}=(0,a.TH)(),d=(0,i.applyTrailingSlash)(c,{trailingSlash:o,baseUrl:e}),l=s===r?e:e.replace(`/${s}/`,"/"),p=d.replace(e,"");return{createUrl:function(e){let{locale:o,fullyQualified:n}=e;return`${n?t:""}${function(e){return e===r?`${l}`:`${l}${e}/`}(o)}${p}`}}}},743266:(e,t,o)=>{"use strict";o.d(t,{S:()=>r});var n=o(667294),a=o(616550),i=o(943768);function r(e){const t=(0,a.TH)(),o=(0,i.D9)(t),r=(0,i.zX)(e);(0,n.useEffect)((()=>{o&&t!==o&&r({location:t,previousLocation:o})}),[r,t,o])}},820107:(e,t,o)=>{"use strict";o.d(t,{L:()=>a});var n=o(639962);function a(){return(0,n.Z)().siteConfig.themeConfig}},984136:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:o,baseUrl:n}=t;if(e.startsWith("#"))return e;if(void 0===o)return e;const[a]=e.split(/[#?]/),i="/"===a||a===n?a:(r=a,o?function(e){return e.endsWith("/")?e:`${e}/`}(r):function(e){return e.endsWith("/")?e.slice(0,-1):e}(r));var r;return e.replace(a,i)}},115806:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},963905:function(e,t,o){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=o(984136);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return n(a).default}});var i=o(115806);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},199318:(e,t,o)=>{"use strict";o.d(t,{lX:()=>y,q_:()=>O,ob:()=>m,PP:()=>M,Ep:()=>u});var n=o(487462);function a(e){return"/"===e.charAt(0)}function i(e,t){for(var o=t,n=o+1,a=e.length;n=0;u--){var m=r[u];"."===m?i(r,u):".."===m?(i(r,u),p++):p&&(i(r,u),p--)}if(!d)for(;p--;p)r.unshift("..");!d||""===r[0]||r[0]&&a(r[0])||r.unshift("");var h=r.join("/");return o&&"/"!==h.substr(-1)&&(h+="/"),h};var s=o(438776);function c(e){return"/"===e.charAt(0)?e:"/"+e}function d(e){return"/"===e.charAt(0)?e.substr(1):e}function l(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function p(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function u(e){var t=e.pathname,o=e.search,n=e.hash,a=t||"/";return o&&"?"!==o&&(a+="?"===o.charAt(0)?o:"?"+o),n&&"#"!==n&&(a+="#"===n.charAt(0)?n:"#"+n),a}function m(e,t,o,a){var i;"string"==typeof e?(i=function(e){var t=e||"/",o="",n="",a=t.indexOf("#");-1!==a&&(n=t.substr(a),t=t.substr(0,a));var i=t.indexOf("?");return-1!==i&&(o=t.substr(i),t=t.substr(0,i)),{pathname:t,search:"?"===o?"":o,hash:"#"===n?"":n}}(e),i.state=t):(void 0===(i=(0,n.Z)({},e)).pathname&&(i.pathname=""),i.search?"?"!==i.search.charAt(0)&&(i.search="?"+i.search):i.search="",i.hash?"#"!==i.hash.charAt(0)&&(i.hash="#"+i.hash):i.hash="",void 0!==t&&void 0===i.state&&(i.state=t));try{i.pathname=decodeURI(i.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+i.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return o&&(i.key=o),a?i.pathname?"/"!==i.pathname.charAt(0)&&(i.pathname=r(i.pathname,a.pathname)):i.pathname=a.pathname:i.pathname||(i.pathname="/"),i}function h(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,o,n,a){if(null!=e){var i="function"==typeof e?e(t,o):e;"string"==typeof i?"function"==typeof n?n(i,a):a(!0):a(!1!==i)}else a(!0)},appendListener:function(e){var o=!0;function n(){o&&e.apply(void 0,arguments)}return t.push(n),function(){o=!1,t=t.filter((function(e){return e!==n}))}},notifyListeners:function(){for(var e=arguments.length,o=new Array(e),n=0;nt?o.splice(t,o.length-t,a):o.push(a),p({action:n,location:a,index:t,entries:o})}}))},replace:function(e,t){var n="REPLACE",a=m(e,t,b(),y.location);l.confirmTransitionTo(a,n,o,(function(e){e&&(y.entries[y.index]=a,p({action:n,location:a}))}))},go:x,goBack:function(){x(-1)},goForward:function(){x(1)},canGo:function(e){var t=y.index+e;return t>=0&&t{"use strict";var n=o(121296),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},i={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},r={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function c(e){return n.isMemo(e)?r:s[e.$$typeof]||a}s[n.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[n.Memo]=r;var d=Object.defineProperty,l=Object.getOwnPropertyNames,p=Object.getOwnPropertySymbols,u=Object.getOwnPropertyDescriptor,m=Object.getPrototypeOf,h=Object.prototype;e.exports=function e(t,o,n){if("string"!=typeof o){if(h){var a=m(o);a&&a!==h&&e(t,a,n)}var r=l(o);p&&(r=r.concat(p(o)));for(var s=c(t),b=c(o),f=0;f{"use strict";var o="function"==typeof Symbol&&Symbol.for,n=o?Symbol.for("react.element"):60103,a=o?Symbol.for("react.portal"):60106,i=o?Symbol.for("react.fragment"):60107,r=o?Symbol.for("react.strict_mode"):60108,s=o?Symbol.for("react.profiler"):60114,c=o?Symbol.for("react.provider"):60109,d=o?Symbol.for("react.context"):60110,l=o?Symbol.for("react.async_mode"):60111,p=o?Symbol.for("react.concurrent_mode"):60111,u=o?Symbol.for("react.forward_ref"):60112,m=o?Symbol.for("react.suspense"):60113,h=o?Symbol.for("react.suspense_list"):60120,b=o?Symbol.for("react.memo"):60115,f=o?Symbol.for("react.lazy"):60116,g=o?Symbol.for("react.block"):60121,v=o?Symbol.for("react.fundamental"):60117,x=o?Symbol.for("react.responder"):60118,y=o?Symbol.for("react.scope"):60119;function _(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case n:switch(e=e.type){case l:case p:case i:case s:case r:case m:return e;default:switch(e=e&&e.$$typeof){case d:case u:case f:case b:case c:return e;default:return t}}case a:return t}}}function w(e){return _(e)===p}t.AsyncMode=l,t.ConcurrentMode=p,t.ContextConsumer=d,t.ContextProvider=c,t.Element=n,t.ForwardRef=u,t.Fragment=i,t.Lazy=f,t.Memo=b,t.Portal=a,t.Profiler=s,t.StrictMode=r,t.Suspense=m,t.isAsyncMode=function(e){return w(e)||_(e)===l},t.isConcurrentMode=w,t.isContextConsumer=function(e){return _(e)===d},t.isContextProvider=function(e){return _(e)===c},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===n},t.isForwardRef=function(e){return _(e)===u},t.isFragment=function(e){return _(e)===i},t.isLazy=function(e){return _(e)===f},t.isMemo=function(e){return _(e)===b},t.isPortal=function(e){return _(e)===a},t.isProfiler=function(e){return _(e)===s},t.isStrictMode=function(e){return _(e)===r},t.isSuspense=function(e){return _(e)===m},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===i||e===p||e===s||e===r||e===m||e===h||"object"==typeof e&&null!==e&&(e.$$typeof===f||e.$$typeof===b||e.$$typeof===c||e.$$typeof===d||e.$$typeof===u||e.$$typeof===v||e.$$typeof===x||e.$$typeof===y||e.$$typeof===g)},t.typeOf=_},121296:(e,t,o)=>{"use strict";e.exports=o(396103)},441143:e=>{"use strict";e.exports=function(e,t,o,n,a,i,r,s){if(!e){var c;if(void 0===t)c=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var d=[o,n,a,i,r,s],l=0;(c=new Error(t.replace(/%s/g,(function(){return d[l++]})))).name="Invariant Violation"}throw c.framesToPop=1,c}}},405826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},30984:(e,t,o)=>{"use strict";o.r(t)},146930:(e,t,o)=>{"use strict";o.r(t)},574865:function(e,t,o){var n,a;n=function(){var e,t,o={version:"0.2.0"},n=o.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,o){return eo?o:e}function i(e){return 100*(-1+e)}function r(e,t,o){var a;return(a="translate3d"===n.positionUsing?{transform:"translate3d("+i(e)+"%,0,0)"}:"translate"===n.positionUsing?{transform:"translate("+i(e)+"%,0)"}:{"margin-left":i(e)+"%"}).transition="all "+t+"ms "+o,a}o.configure=function(e){var t,o;for(t in e)void 0!==(o=e[t])&&e.hasOwnProperty(t)&&(n[t]=o);return this},o.status=null,o.set=function(e){var t=o.isStarted();e=a(e,n.minimum,1),o.status=1===e?null:e;var i=o.render(!t),d=i.querySelector(n.barSelector),l=n.speed,p=n.easing;return i.offsetWidth,s((function(t){""===n.positionUsing&&(n.positionUsing=o.getPositioningCSS()),c(d,r(e,l,p)),1===e?(c(i,{transition:"none",opacity:1}),i.offsetWidth,setTimeout((function(){c(i,{transition:"all "+l+"ms linear",opacity:0}),setTimeout((function(){o.remove(),t()}),l)}),l)):setTimeout(t,l)})),this},o.isStarted=function(){return"number"==typeof o.status},o.start=function(){o.status||o.set(0);var e=function(){setTimeout((function(){o.status&&(o.trickle(),e())}),n.trickleSpeed)};return n.trickle&&e(),this},o.done=function(e){return e||o.status?o.inc(.3+.5*Math.random()).set(1):this},o.inc=function(e){var t=o.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),o.set(t)):o.start()},o.trickle=function(){return o.inc(Math.random()*n.trickleRate)},e=0,t=0,o.promise=function(n){return n&&"resolved"!==n.state()?(0===t&&o.start(),e++,t++,n.always((function(){0==--t?(e=0,o.done()):o.set((e-t)/e)})),this):this},o.render=function(e){if(o.isRendered())return document.getElementById("nprogress");l(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=n.template;var a,r=t.querySelector(n.barSelector),s=e?"-100":i(o.status||0),d=document.querySelector(n.parent);return c(r,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),n.showSpinner||(a=t.querySelector(n.spinnerSelector))&&m(a),d!=document.body&&l(d,"nprogress-custom-parent"),d.appendChild(t),t},o.remove=function(){p(document.documentElement,"nprogress-busy"),p(document.querySelector(n.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&m(e)},o.isRendered=function(){return!!document.getElementById("nprogress")},o.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var o=e.shift();o&&o(t)}return function(o){e.push(o),1==e.length&&t()}}(),c=function(){var e=["Webkit","O","Moz","ms"],t={};function o(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function n(t){var o=document.body.style;if(t in o)return t;for(var n,a=e.length,i=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((n=e[a]+i)in o)return n;return t}function a(e){return e=o(e),t[e]||(t[e]=n(e))}function i(e,t,o){t=a(t),e.style[t]=o}return function(e,t){var o,n,a=arguments;if(2==a.length)for(o in t)void 0!==(n=t[o])&&t.hasOwnProperty(o)&&i(e,o,n);else i(e,a[1],a[2])}}();function d(e,t){return("string"==typeof e?e:u(e)).indexOf(" "+t+" ")>=0}function l(e,t){var o=u(e),n=o+t;d(o,t)||(e.className=n.substring(1))}function p(e,t){var o,n=u(e);d(e,t)&&(o=n.replace(" "+t+" "," "),e.className=o.substring(1,o.length-1))}function u(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function m(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return o},void 0===(a="function"==typeof n?n.call(t,o,t,e):n)||(e.exports=a)},514779:(e,t,o)=>{var n=o(405826);e.exports=m,e.exports.parse=i,e.exports.compile=function(e,t){return s(i(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=u;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function i(e,t){for(var o,n=[],i=0,r=0,s="",l=t&&t.delimiter||"/";null!=(o=a.exec(e));){var p=o[0],u=o[1],m=o.index;if(s+=e.slice(r,m),r=m+p.length,u)s+=u[1];else{var h=e[r],b=o[2],f=o[3],g=o[4],v=o[5],x=o[6],y=o[7];s&&(n.push(s),s="");var _=null!=b&&null!=h&&h!==b,w="+"===x||"*"===x,D="?"===x||"*"===x,k=o[2]||l,L=g||v;n.push({name:f||i++,prefix:b||"",delimiter:k,optional:D,repeat:w,partial:_,asterisk:!!y,pattern:L?d(L):y?".*":"[^"+c(k)+"]+?"})}}return r{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to WebPlatform.org documentation. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},202885:(e,t,o)=>{const n=o(329901),a=o(139642),i=new Set;function r(e){void 0===e?e=Object.keys(n.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...i,...Object.keys(Prism.languages)];a(n,e,t).load((e=>{if(!(e in n.languages))return void(r.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete o.c[o(616500).resolve(t)],delete Prism.languages[e],o(616500)(t),i.add(e)}))}r.silent=!1,e.exports=r},196854:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(o,n,a,i){if(o.language===n){var r=o.tokenStack=[];o.code=o.code.replace(a,(function(e){if("function"==typeof i&&!i(e))return e;for(var a,s=r.length;-1!==o.code.indexOf(a=t(n,s));)++s;return r[s]=e,a})),o.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(o,n){if(o.language===n&&o.tokenStack){o.grammar=e.languages[n];var a=0,i=Object.keys(o.tokenStack);!function r(s){for(var c=0;c=i.length);c++){var d=s[c];if("string"==typeof d||d.content&&"string"==typeof d.content){var l=i[a],p=o.tokenStack[l],u="string"==typeof d?d:d.content,m=t(n,l),h=u.indexOf(m);if(h>-1){++a;var b=u.substring(0,h),f=new e.Token(n,e.tokenize(p,o.grammar),"language-"+n,p),g=u.substring(h+m.length),v=[];b&&v.push.apply(v,r([b])),v.push(f),g&&v.push.apply(v,r([g])),"string"==typeof d?s.splice.apply(s,[c,1].concat(v)):d.content=v}}else d.content&&r(d.content)}return s}(o.tokens)}}}})}(Prism)},806726:(e,t,o)=>{var n={"./":202885};function a(e){var t=i(e);return o(t)}function i(e){if(!o.o(n,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return n[e]}a.keys=function(){return Object.keys(n)},a.resolve=i,e.exports=a,a.id=806726},616500:(e,t,o)=>{var n={"./":202885};function a(e){var t=i(e);return o(t)}function i(e){if(!o.o(n,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return n[e]}a.keys=function(){return Object.keys(n)},a.resolve=i,e.exports=a,a.id=616500},139642:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function o(e){for(var t={},o=0,n=e.length;o "));var s={},c=e[n];if(c){function d(t){if(!(t in e))throw new Error(n+" depends on an unknown component "+t);if(!(t in s))for(var r in a(t,i),s[t]=!0,o[t])s[r]=!0}t(c.require,d),t(c.optional,d),t(c.modify,d)}o[n]=s,i.pop()}}return function(e){var t=o[e];return t||(a(e,n),t=o[e]),t}}function a(e){for(var t in e)return!0;return!1}return function(i,r,s){var c=function(e){var t={};for(var o in e){var n=e[o];for(var a in n)if("meta"!=a){var i=n[a];t[a]="string"==typeof i?{title:i}:i}}return t}(i),d=function(e){var o;return function(n){if(n in e)return n;if(!o)for(var a in o={},e){var i=e[a];t(i&&i.alias,(function(t){if(t in o)throw new Error(t+" cannot be alias for both "+a+" and "+o[t]);if(t in e)throw new Error(t+" cannot be alias of "+a+" because it is a component.");o[t]=a}))}return o[n]||n}}(c);r=r.map(d),s=(s||[]).map(d);var l=o(r),p=o(s);r.forEach((function e(o){var n=c[o];t(n&&n.require,(function(t){t in p||(l[t]=!0,e(t))}))}));for(var u,m=n(c),h=l;a(h);){for(var b in u={},h){var f=c[b];t(f&&f.modify,(function(e){e in p&&(u[e]=!0)}))}for(var g in p)if(!(g in l))for(var v in m(g))if(v in l){u[g]=!0;break}for(var x in h=u)l[x]=!0}var y={getIds:function(){var e=[];return y.load((function(t){e.push(t)})),e},load:function(t,o){return function(t,o,n,a){var i=a?a.series:void 0,r=a?a.parallel:e,s={},c={};function d(e){if(e in s)return s[e];c[e]=!0;var a,l=[];for(var p in t(e))p in o&&l.push(p);if(0===l.length)a=n(e);else{var u=r(l.map((function(e){var t=d(e);return delete c[e],t})));i?a=i(u,(function(){return n(e)})):n(e)}return s[e]=a}for(var l in o)d(l);var p=[];for(var u in c)p.push(s[u]);return r(p)}(m,l,t,o)}};return y}}();e.exports=t},892703:(e,t,o)=>{"use strict";var n=o(150414);function a(){}function i(){}i.resetWarningCache=a,e.exports=function(){function e(e,t,o,a,i,r){if(r!==n){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var o={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:a};return o.PropTypes=o,o}},45697:(e,t,o)=>{e.exports=o(892703)()},150414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},364448:(e,t,o)=>{"use strict";var n=o(667294),a=o(363840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,o=1;o