# feed

url: https://www.gatineau.ca/etc/rssfeed.asp?c=fr-CA&amp;f=infoeclairs
name: Info-Éclairs
website: https://www.gatineau.ca/portail/default.aspx?p=nouvelles_annonces/infoeclairs
description: Ville de Gatineau
attributes:
{"SimplePieHash":"a003be08f000398053e8dd070236b881fbe3a3e1","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://ftrss.boxicube.com/makefulltextfeed.php?url=https%3A%2F%2Feir.news%2Fnews%2Frss%2F
name: EIR News
website: https://eir.news/news/rss/
description: Executive Intelligence Review
attributes:
{"SimplePieHash":"4cf7339f093a07375006faf38ad93c394b8e7fab","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.mondialisation.ca/feed?doing_wp_cron=1740572079.5974481105804443359375
name: Mondialisation.ca
website: https://www.mondialisation.ca/
attributes:
{"SimplePieHash":"e9d1bf4f7bde77befc507e7c0bd4afd368080897","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://strategic-culture.su/feed/
name: Strategic Culture Foundation
website: https://strategic-culture.su/
description:
Strategic Culture Foundation provides a platform for exclusive analysis, research and policy comment on Eurasian and global affairs. We are covering political, economic, social and security issues worldwide.

attributes:
{"SimplePieHash":"fd9669e150ba29b7ef7a63a522e34f2603d8bc3e","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://ftrss.boxicube.com/makefulltextfeed.php?url=https%3A%2F%2Fbrixsweden.org%2Ffeed%2F
name: Belt &amp;amp; Road Institute in Sweden
website: https://brixsweden.org/feed/
description: BRIX
attributes:
{"SimplePieHash":"8eb6e18f727cad05c40ad909da356aca6a6139af","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


name: Rising Tide Foundation
website: https://risingtidefoundation.net/feed/
description: a rising tide lifts all boats
url:
https://ftrss.boxicube.com/makefulltextfeed.php?url=https%3A%2F%2Frisingtidefoundation.net%2Ffeed%2F

attributes:
{"SimplePieHash":"0a5a9071ec0d76d2d7d809c8a6425ff0cc7f1b98","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: http://fetchrss.com/rss/67a8c5dbdb2da6e9650ff68367af770b1916a673960ab842.xml
name: The LaRouche Organization Podcast - Spotify
website: https://open.spotify.com/show/5yBVJvxuhATLPtcccjmxFm
description:
Mobilize and Discuss with The LaRouche Organization – Lyndon LaRouche's US based outreach organization.

attributes:
{"SimplePieHash":"75f32deab665f7f9bec817b9a0544431d56ae52c","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://ftrss.boxicube.com/makefulltextfeed.php?url=https%3A%2F%2Fwallstreetonparade.com%2Ffeed%2F
name: Wall Street on Parade
website: https://wallstreetonparade.com/feed/
attributes:
{"SimplePieHash":"187833947d4d2ec56c33a5d7db42e7d01603b9ba","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://isystem-tf.com/feed/
name: I-System Trend Following
website: https://isystem-tf.com/feed/
description: The Art and Science of Trend Following
attributes:
{"SimplePieHash":"027d1f779e8b1c4943aa2eb2c19773f445f8c702","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.govinfo.gov/rss/ccal.xml
name: Congressional Calendars - New items on GovInfo
website: https://www.govinfo.gov/app/collection/ccal
description:
Provides access to newly published GovInfo content from the  Congressional Calendars. The Congressional Calendars collection includes the Calendars of the U.S. House of Representatives and History of Legislation and the Senate Calendar of Business.

attributes:
{"SimplePieHash":"282b04bca1af8ac3730e449454f9f656c218595f","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.gatineau.ca/etc/rssfeed.asp?c=fr-CA&amp;f=publicnotices_hull
name: Avis publics - Secteur de Hull
website: https://www.gatineau.ca/portail/default.aspx?p=nouvelles_annonces/avis_publics
description: Ville de Gatineau
attributes:
{"SimplePieHash":"a0855b2a831427b78f14fcdc8fe5c672f0cd01ba","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://ftrss.boxicube.com/makefulltextfeed.php?url=https%3A%2F%2Fjackkruse.com%2Ffeed%2F
name: Dr. Jack Kruse
website: https://jackkruse.com/feed/
description: Neurosurgeon &amp; optimal health educator
attributes:
{"SimplePieHash":"36824ec2da90f729ad0a8da72b7b88e08a088ba4","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://ici.radio-canada.ca/rss/4159
name: Radio-Canada | Nouvelles
website: https://ici.radio-canada.ca/rss/4159
description: Mise à jour à toutes les 15 minutes tous les jours. - Pour usage personnel seulement.
attributes:
{"SimplePieHash":"96f0f988d79a0cef281921a792381548fbfcb0e3","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://swprs.org/feed/
name: Swiss Policy Research
website: https://swprs.org/
description: Geopolitics and Media
attributes:
{"SimplePieHash":"95fde2316684c0db5dd0cf17d683000425882b7f","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://thehill.com/feed/?feed=partnerfeed-news-feed&amp;format=rss
name: The Hill News
website: https://thehill.com/
description: Unbiased Politics News
attributes:
{"SimplePieHash":"b6572e1f8d8f1442acc13f841d350a2ee09da765","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


name: www.thespec.com - RSS Results of type article with keyword(s) of #topstory
description: www.thespec.com - RSS Results only for asset type(s) of article with keyword(s) of #topstory
url:
https://www.thespec.com/search/?f=rss&amp;t=article&amp;l=50&amp;s=start_time&amp;sd=desc&amp;k%5B%5D=%23topstory

website:
https://www.thespec.com/search/?f=rss&amp;t=article&amp;l=50&amp;s=start_time&amp;sd=desc&amp;k%5B%5D=%23topstory

attributes:
{"SimplePieHash":"4bcf64c77f08df4cebb4412e932830dcd2b60b04","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://brixsweden.org/comments/feed/
name: Comments for Belt &amp; Road Institute in Sweden
website: https://www.brixsweden.org/
description: BRIX
attributes:
{"SimplePieHash":"23ffa37f0776e3fe5b2e7dee1a5dc5e98b69a06a","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.paulcraigroberts.org/feed/
name: PaulCraigRoberts.org
website: https://www.paulcraigroberts.org/
description: Institute for Political Economy
attributes:
{"SimplePieHash":"cc0f5794a5fc17eeefe95aa24878fa83108fc829","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.youtube.com/feeds/videos.xml?channel_id=UCb--64Gl51jIEVE-GLDAVTg
name: C-SPAN
website: https://www.youtube.com/channel/UCb--64Gl51jIEVE-GLDAVTg
attributes:
{"SimplePieHash":"b4d24f4db52e920d6a83ba3b62d71c1777a47499","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.youtube.com/feeds/videos.xml?channel_id=UCFZSV_So_OaXgXVzgu58tJQ
name: cpac
website: https://www.youtube.com/channel/UCFZSV_So_OaXgXVzgu58tJQ
description:
CPAC: Watch for Democracy. 
The Cable Public Affairs Channel is an independent, not-for-profit, commercial-free, bilingual media organization connecting Canadians to their democracy. 
 
****************************** 
 
CPAC: Pour la démocratie. 
La chaîne d’affaires publiques par câble est un organisme médiatique indépendant, sans but lucratif, sans publicité et bilingue qui branche les Canadiens à leur démocratie.
Links

Website
cpac.ca

X (Twitter)
twitter.com/CPAC_TV

LinkedIn
linkedin.com/company/cable-public-affairs-channel-cpac-?trk=company_name

TikTok
tiktok.com/@cpac_tv
Channel details
www.youtube.com/@cpac
188K subscribers
21,344 videos
88,078,347 views
Joined Feb 16, 2006
Canada

attributes:
{"SimplePieHash":"42a9c335931095031d7c6ce5b972a59bfeedd7e8","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.govinfo.gov/rss/hman.xml
name: House Rules and Manual - New items on GovInfo
website: https://www.govinfo.gov/app/collection/hman
description:
Provides access to newly published GovInfo content from the  House Rules and Manual. The House Rules and Manual is published by the House Parliamentarian's Office. This document is formally entitled Constitution, Jefferson's Manual, and Rules of the House of Representatives and contains the

attributes:
{"SimplePieHash":"78cd8b0f2926ff4c9bc309911f783ea2c835e3c7","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.parl.ca/LegisInfo/en/bills/rss?keywords=c11
name: LEGISinfo - Bills - c11
website: https://www.parl.ca/legisinfo/en/bills/rss
description: Parliament of Canada - Bills - RSS
attributes:
{"SimplePieHash":"1b8604658e46c483bc79c2dd73688bf68aeabe7b","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.parl.ca/LegisInfo/en/bills/rss?keywords=c12
name: LEGISinfo - Bills - c12
website: https://www.parl.ca/legisinfo/en/bills/rss
description: Parliament of Canada - Bills - RSS
attributes:
{"SimplePieHash":"d7cb58fee5914e0714999c08abd1b2a528054725","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.youtube.com/feeds/videos.xml?channel_id=UCiFJuxEjESPp0-OF1Yu450g
name: Parliament of Canada
website: https://www.youtube.com/channel/UCiFJuxEjESPp0-OF1Yu450g
attributes:
{"SimplePieHash":"887a8acd5ccc2143e4edd10e2b2a35ca0104783c","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.noscommunes.ca/petitions/fr/Home/Feed/e-5300
name: Petition Feed
website: https://petwb-app-petitions-hpp-cace.azurewebsites.net/petitions/fr/Home/Feed/e-5300
description: Petition Feed
attributes:
{"SimplePieHash":"ba3ddd6c9135cfbb340b974cab95323ecbaf30b8","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.youtube.com/feeds/videos.xml?channel_id=UC1Xn76eNXEO9gV_FFFsH0uQ
name: Senate of Canada | Sénat du Canada
website: https://www.youtube.com/channel/UC1Xn76eNXEO9gV_FFFsH0uQ
attributes:
{"SimplePieHash":"85d66b4ed33914e492e23816cc7941eeae6e54f9","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.rightsprobe.org/read?format=rss
name: Read - Rights Probe
website: https://www.rightsprobe.org/read/
attributes:
{"SimplePieHash":"d7dc97e3ce46c8bad83ebe15eb936a214a70e2c1","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://odysee.com/$/rss/@canadianpatriotpress3573:4
name: Canadian Patriot Press on Odysee
website: https://odysee.com/$/rss/@canadianpatriotpress3573:4
description: Canadian Patriot Press on Odysee
attributes:
{"SimplePieHash":"7d68bf85148bf6faac2b5523487274b8cb82d52f","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://odysee.com/$/rss/@EvaKareneBartlett:9
name: Eva K Bartlett on Odysee
website: https://odysee.com/$/rss/@EvaKareneBartlett:9
description:
https://ingaza.wordpress.com/about-me/<br><br>Support my work by following on: <br><br>Telegram: https://t.me/Reality_Theories <br>My blog: https://ingaza.wordpress.com/<br>Twitter: https://twitter.com/EvaKBartlett<br>Patreon: https://www.patreon.com/EvaKBartlett<br>VK: https://vk.com/id506866282 <br>Facebook: https://www.facebook.com/EvaBoBeeva<br>

attributes:
{"SimplePieHash":"95167dddbcab7abdfab58ce593f845cc32474a2c","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://ftrss.boxicube.com/makefulltextfeed.php?url=https%3A%2F%2Fgript.ie%2Ffeed%2F
name: Gript
website: https://gript.ie/feed/
description: News. Opinion. Analysis. Unfiltered.
attributes:
{"SimplePieHash":"05528c358ce60d018b247b2a74c60a25d90b8bfb","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://raymcgovern.com/feed/
name: Ray McGovern
website: https://raymcgovern.com/
attributes:
{"SimplePieHash":"6d67b8f78eebc5e875f2cbc70029826a1a3850fc","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://odysee.com/$/rss/@RisingTideFoundation:b
name: Rising Tide Foundation on Odysee
website: https://odysee.com/$/rss/@RisingTideFoundation:b
description:
The Rising Tide Foundation is a non-profit organisation based out of Montreal Canada dedicated to the enhancement of cross-cultural understanding and dialogue between east and west. We support initiatives such as lectures, seminars, and multi media productions that facilitate greater bridges between east and west while also providing a service that includes geopolitical analysis, research in the arts, philosophy, sciences and history. <br><br>Visit our website at risingtidefoundation.net<br>

attributes:
{"SimplePieHash":"bcf9357636d42b03b30ce4473a763157995e8f47","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://medium.com/@caityjohnstone/feed
name: Stories by Caitlin Johnstone on Medium
website: https://medium.com/feed/@caityjohnstone
description: Stories by Caitlin Johnstone on Medium
attributes:
{"SimplePieHash":"74c2c0c4767b76e6ab8ff55f7ad9ab3344c2fb48","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


name: Threads for true_delta1 from Thread Reader App
website: https://threadreaderapp.com/myrss/29eedb43-f99b-422f-a504-c1a5880c7f31.rss
description: Most recent threads bookmarked at Thread Reader App by true_delta1
url:
https://ftrss.boxicube.com/makefulltextfeed.php?url=https%3A%2F%2Fthreadreaderapp.com%2Fmyrss%2F29eedb43-f99b-422f-a504-c1a5880c7f31.rss

attributes:
{"SimplePieHash":"d33eb2122e74796831d61c71be06afef77c8854b","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://alexkrainer.substack.com/feed
name: Alex Krainer's Substack
website: https://alexkrainer.substack.com/feed
description: Inflation, commodities, geopolitics and more.
attributes:
{"SimplePieHash":"1a86167ee93ae9c2b688bea23e498a2faea3bb54","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://ftrss.boxicube.com/makefulltextfeed.php?url=https%3A%2F%2Fantonchaitkin.substack.com%2Ffeed
name: Anton’s Substack
website: https://antonchaitkin.substack.com/feed
description: New historical discoveries for rising minds
attributes:
{"SimplePieHash":"3f5b8102979003141bd4d07869df4167092a04e4","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://ftrss.boxicube.com/makefulltextfeed.php?url=https%3A%2F%2Fmearsheimer.substack.com%2Ffeed
name: John’s Substack
website: https://mearsheimer.substack.com/feed
description: My personal Substack
attributes:
{"SimplePieHash":"1d28b5108f20696ff9c6fe86768e5a16e34f6b9c","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://christitus.com/categories/networking/index.xml
name: Networking on Chris Titus Tech | Tech Content Creator
website: https://christitus.com/categories/networking/
description: Recent content in Networking on Chris Titus Tech | Tech Content Creator
attributes:
{"SimplePieHash":"7deee215e39138da0c0cade15e48150f172dbbdf","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://christitus.com/categories/titus/index.xml
name: Titus on Chris Titus Tech | Tech Content Creator
website: https://christitus.com/categories/titus/
description: Recent content in Titus on Chris Titus Tech | Tech Content Creator
attributes:
{"SimplePieHash":"6c448793c1e34b2e43b5507624d811968a60bf77","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.youtube.com/feeds/videos.xml?channel_id=UCtYg149E_wUGVmjGz-TgyNA
name: Titus Tech Talk
website: https://www.youtube.com/channel/UCtYg149E_wUGVmjGz-TgyNA
attributes:
{"SimplePieHash":"bbee690da51127b968d1523ae077b8e9f706516e","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://christitus.com/categories/windows/index.xml
name: Windows on Chris Titus Tech | Tech Content Creator
website: https://christitus.com/categories/windows/
description: Recent content in Windows on Chris Titus Tech | Tech Content Creator
attributes:
{"SimplePieHash":"de26989d043c316b286b3e6dcfbfca1e1f465915","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://christitus.com/categories/windows-server/index.xml
name: Windows Server on Chris Titus Tech | Tech Content Creator
website: https://christitus.com/categories/windows-server/
description: Recent content in Windows Server on Chris Titus Tech | Tech Content Creator
attributes:
{"SimplePieHash":"df278e272cfd9ea4c33fa274f9aac1462ba0c38b","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://christitus.com/categories/youtube/index.xml
name: YouTube on Chris Titus Tech | Tech Content Creator
website: https://christitus.com/categories/youtube/
description: Recent content in YouTube on Chris Titus Tech | Tech Content Creator
attributes:
{"SimplePieHash":"36ed2b0ff6d2bda46569315192940cc128a98042","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


name: Articles – The White House
website: https://www.whitehouse.gov/articles/feed/
description: Content extracted from https://www.whitehouse.gov/articles/feed/
url:
https://ftrss.boxicube.com/makefulltextfeed.php?url=https%3A%2F%2Fwww.whitehouse.gov%2Farticles%2Ffeed%2F

attributes:
{"SimplePieHash":"489fec29aeabeb2350cd6eda2339a60d955724e7","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.htmhell.dev/feed.xml?y=122024
name: HTMHell
website: https://htmhell.dev
description: A collection of bad practices in HTML, copied from real websites.
attributes:
{"SimplePieHash":"c112c13e707a6ad697ad683c346fc922cb672d26","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.htmhell.dev/feed_advent.xml?y=122024
name: HTMHell Advent Calendar 2024
website: https://htmhell.dev/adventcalendar
description: The HTMHell 2024 advent calendar.
attributes:
{"SimplePieHash":"2638adee66655af91104fbb240d007be56e5765d","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.htmhell.dev/feed_tips.xml?y=122024
name: HTMHell Tips &amp; Tricks
website: https://htmhell.dev/tips
description: A collection of HTML tips and tricks.
attributes:
{"SimplePieHash":"1ff193132b305921cb57cca8ce0dd68029e15092","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://scottjehl.com/feed.xml
name: Scott Jehl's Blog
website: https://scottjehl.com/
description: Writing, links, presentations, etc.
attributes:
{"SimplePieHash":"7578945c191f41d58332bb61a747a1992ca032f0","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.youtube.com/feeds/videos.xml?channel_id=UC5hQ3Lyb8oU-EPZQK9E114w
name: Anton Chaitkin
website: https://www.youtube.com/channel/UC5hQ3Lyb8oU-EPZQK9E114w
attributes:
{"SimplePieHash":"3e5fb1d7450bb5bf4ae39f08be1fbe6a86fb8dc4","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.youtube.com/feeds/videos.xml?channel_id=UCtjeo4Z_bMkwem2zKXTIZsA
name: Awakening Richard
website: https://www.youtube.com/channel/UCtjeo4Z_bMkwem2zKXTIZsA
attributes:
{"SimplePieHash":"8c0db5d0f47d789cf542166835a925d60e39848b","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.youtube.com/feeds/videos.xml?channel_id=UCU8Yu4WZJ11Il3TZmNiMUFQ
name: Caitlin Johnstone
website: https://www.youtube.com/channel/UCU8Yu4WZJ11Il3TZmNiMUFQ
attributes:
{"SimplePieHash":"4874294dfb0cfd355aeea539aa20ba2dae0d8b01","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.youtube.com/feeds/videos.xml?channel_id=UCS2oIpISybXqY0Og9D4-XYw
name: Canadian Patriot Press
website: https://www.youtube.com/channel/UCS2oIpISybXqY0Og9D4-XYw
attributes:
{"SimplePieHash":"8df74175cd1b30270f06890aae44f649cf3475fc","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.youtube.com/feeds/videos.xml?channel_id=UCNzszbnvQeFzObW0ghk0Ckw
name: Dave's Garage
website: https://www.youtube.com/channel/UCNzszbnvQeFzObW0ghk0Ckw
attributes:
{"SimplePieHash":"b69d9088d56583a26c3ad10ff27b2f8e66ed381b","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.youtube.com/feeds/videos.xml?channel_id=UCkF-6h_Zgf9zXNUmUB-MzTw
name: Dialogue Works
website: https://www.youtube.com/channel/UCkF-6h_Zgf9zXNUmUB-MzTw
attributes:
{"SimplePieHash":"5fdac92c677fdd8539db3a71a28a562873c47759","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.youtube.com/feeds/videos.xml?channel_id=UC0LXMOosTrbcg1w1EkB-nKQ
name: Diane Sare
website: https://www.youtube.com/channel/UC0LXMOosTrbcg1w1EkB-nKQ
attributes:
{"SimplePieHash":"ea822c007c6fd6b434bc519a76ea4941df43b1f5","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.youtube.com/feeds/videos.xml?channel_id=UCDkEYb-TXJVWLvOokshtlsw
name: Judge Napolitano - Judging Freedom
website: https://www.youtube.com/channel/UCDkEYb-TXJVWLvOokshtlsw
attributes:
{"SimplePieHash":"d4a230fa72aaf3c6ef84318322809565f95dd3a7","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.youtube.com/feeds/videos.xml?channel_id=UCiQfc9th0vcmbs0B-YX8_Tg
name: Middle Nation
website: https://www.youtube.com/channel/UCiQfc9th0vcmbs0B-YX8_Tg
attributes:
{"SimplePieHash":"5edd55b6d8cd7bc52ce3107e11eadbe83d0ea760","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.youtube.com/feeds/videos.xml?channel_id=UCzQUP1qoWDoEbmsQxvdjxgQ
name: PowerfulJRE
website: https://www.youtube.com/channel/UCzQUP1qoWDoEbmsQxvdjxgQ
attributes:
{"SimplePieHash":"44e52803245b9e4cd68ed160cdd473758c7cbfad","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.youtube.com/feeds/videos.xml?channel_id=UCASycZsCsne1D7ItBA4WMSg
name: Promethean In-Depth
website: https://www.youtube.com/channel/UCASycZsCsne1D7ItBA4WMSg
attributes:
{"SimplePieHash":"fa86df1d9ef65884b2525c1ad3885e6df2be3360","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.youtube.com/feeds/videos.xml?channel_id=UCVNxjVDDq9ALxFuCKMx8HQg
name: Schiller Institute
website: https://www.youtube.com/channel/UCVNxjVDDq9ALxFuCKMx8HQg
attributes:
{"SimplePieHash":"9d9ae64112381e9b04e1f7b4b689b538c55a0ad3","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.youtube.com/feeds/videos.xml?channel_id=UCNbZpchYwSXlyUsN6zFzdHw
name: The LaRouche Organization
website: https://www.youtube.com/channel/UCNbZpchYwSXlyUsN6zFzdHw
attributes:
{"SimplePieHash":"1fb38c8246125f0ae0c762b3b68daf645c9e84f3","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://www.youtube.com/feeds/videos.xml?channel_id=UCy6HtPOm8Hc5zLqE1UAYa8A
name: ukramedia
website: https://www.youtube.com/channel/UCy6HtPOm8Hc5zLqE1UAYa8A
attributes:
{"SimplePieHash":"2bb0a834bdaef97e00d193d36311dcc5525bf2d4","curl_params":{"10023":[]},"content_action":"replace","path_entries_filter":""}


url: https://fetchrss.com/rss/67a8c5dbdb2da6e9650ff68367e85ccd68d9b987fd0b48f3.xml
name: True Delta – Telegram
website: https://t.me/s/truedelta
description: True Delta – Telegram
attributes:
{"curl_params":{"10023":[]},"SimplePieHash":"f00cd5fef34406d83d7bdee0b7e17994b49a531f","content_action":"replace","path_entries_filter":""}


url: https://www.aljazeera.com/xml/rss/all.xml
name: Al Jazeera – Breaking News, World News and Video from Al Jazeera
website: https://www.aljazeera.com/
description: Breaking News, World News and Video from Al Jazeera
attributes:
{"curl_params":{"10023":[]},"SimplePieHash":"9efe11aaff9408179d1cef20a5cc1c821b27ddf9","content_action":"replace","path_entries_filter":""}


url: https://cms.zerohedge.com/fullrss2.xml
name: ZeroHedge News
website: https://www.zerohedge.com/
attributes:
{"curl_params":{"10023":[]},"SimplePieHash":"33fcd71503a31e758b87b68bb08a0fff1b53a7fd","content_action":"replace","path_entries_filter":""}


url: https://karlof1.substack.com/feed
name: karlof1’s Geopolitical Gymnasium
website: https://karlof1.substack.com/
description:
Learn what you're not told by Western media about the policies of the Global Majority led by Russia and China, plus occasional Reader Services items containing valuable reference materials usually consisting of primary documents and/or links to them.

attributes:
{"curl_params":{"10023":[]},"SimplePieHash":"45582f9f92d0127889342a348a0ab0cca19ef128","content_action":"replace","path_entries_filter":""}


url: https://normanfinkelstein.substack.com/feed
name: Norman Finkelstein
website: https://normanfinkelstein.substack.com/
description: My personal Substack
attributes:
{"curl_params":{"10023":[]},"SimplePieHash":"cd5da1890026849b4db6ac12d62b7e32385b7f65","content_action":"replace","path_entries_filter":""}


url: https://thecanadafilesnewsletter.substack.com/feed
name: The Canada Files' Newsletter
website: https://thecanadafilesnewsletter.substack.com/
description: The new spot for The Canada Files' newsletter.
attributes:
{"curl_params":{"10023":[]},"SimplePieHash":"08946afa04b84255cd694f493270a72e7ab62711","content_action":"replace","path_entries_filter":""}


url: https://rss.vatican.va/xml/rss_en.xml
name: vatican.va
website: https://www.vatican.va/
description: vatican.va
attributes:
{"curl_params":{"10023":[]},"SimplePieHash":"d40b5503a9938bf9aa972bfc441b4ad333e2335a","content_action":"replace","path_entries_filter":""}


# entry

guid: https://raymcgovern.com/?p=8658
title: It’s Already “Thumbs Down” for the Gazans
author: ;Ray McGovern
link: https://raymcgovern.com/2025/02/09/its-already-thumbs-down-for-the-gazans/
hash: (�fcD㖠�+���
tags: #-
attributes: []
content:
<p data-sanitized-class="excerpt">The Emperor will preside in person at classic (classical) panem et circenses this afternoon. It’s already “thumbs down” for the Gazans; still more US-made bombs for those refusing to leave home. Move along, folks, nothing to see here. Pass the potato chips. https://nj.com/news/2025/02/trump-breaks-news-before-attending-super-bowl.html</p><p data-sanitized-class="more-link-p"><a href="https://raymcgovern.com/2025/02/09/its-already-thumbs-down-for-the-gazans/" data-sanitized-class="btn btn-default">Read more</a></p>


guid: https://alexkrainer.substack.com/p/why-us-russia-relations-matter-more
title: Why US-Russia relations matter more than anyone knew?
author: ;Alex Krainer
link: https://alexkrainer.substack.com/p/why-us-russia-relations-matter-more
hash: 4�t��R��;<����
content:
<p>Shortly after I published my last article, “<a href="https://trendcompass.substack.com/p/is-a-russia-usa-grand-bargain-in">Is a US-Russia Grand Bargain in the works?</a>”, President <strong>Trump </strong>posted <a href="https://x.com/mikeroche/status/1889724203714101277">a statement on his TruthSocial platform</a> that he had a "lengthy and productive phone call with President <strong>Vladimir Putin</strong> of Russia." Among other things, Trump stated that he and Putin, "each talked about the strengths of our respective Nations, and the great benefit that we will someday have in working together." This came as a surprise, but certainly a welcome development. My last article provoked a lively discussion in the comments sections and these comments reflect, perhaps, the way this news impacted the public.</p><div data-sanitized-class="captioned-image-container"><figure><a target="_blank" href="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f7ed7a5-f3be-4fc6-8a16-6b7ad5ec57c6_1800x1021.png" data-component-name="Image2ToDOM" data-sanitized-class="image-link image2 is-viewable-img"><div data-sanitized-class="image2-inset"><picture><source type="image/webp"><img src="https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f7ed7a5-f3be-4fc6-8a16-6b7ad5ec57c6_1800x1021.png" width="1456" height="826" data-attrs='{"src":"https://substack-post-media.s3.amazonaws.com/public/images/4f7ed7a5-f3be-4fc6-8a16-6b7ad5ec57c6_1800x1021.png","srcNoWatermark":null,"fullscreen":null,"imageSize":null,"height":826,"width":1456,"resizeWidth":null,"bytes":3065837,"alt":null,"title":null,"type":"image/png","href":null,"belowTheFold":false,"topImage":true,"internalRedirect":null,"isProcessing":false,"align":null}' alt="" fetchpriority="high" data-sanitized-class="sizing-normal"></picture><div data-sanitized-class="image-link-expand"><div data-sanitized-class="pencraft pc-display-flex pc-gap-8 pc-reset"><div data-sanitized-class="pencraft pc-reset icon-container restack-image"><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"></path><path d="M21 3v5h-5"></path><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"></path><path d="M8 16H3v5"></path></div><div data-sanitized-class="pencraft pc-reset icon-container view-image"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></div></div></div></div></a></figure></div><p>Many pointed out that the US is not agreement-capable and that Russia would be wrong to ever trust commitments by any US president. This may be true, but having relations is certainly better than having no relations, which is what we had during the last three years of the Biden criminal cabal. Having good relations makes a lot of things possible and I believe that even if the road ahead is difficult, the relationship between Russia and the US is so important, it is worth giving it a level best from both sides.</p><p>Former German Foreign Minister <strong>Sigmar Gabriel</strong> stated in an interview with Bild am Sontag in 2018 that, "The completely shattered relationship between Russia and the US was the greatest threat to peace across the globe," and that unless the two powers find common ground, "our children would inherit a dangerous and very uncertain world increasingly armed with nuclear weapons." Today we know what Gabriel meant by his statement.</p><h2>It’s the banking cabal…</h2><p>Other commenters said that the US is dominated by the banking cartel of the Wall Street - City of London axis of evil, that these bankers hate Russia and will not allow friendly relations between the two powers to hold. Now we’re getting closer to “Mordor.” The role of the banking cartel has been critical in defining the US-Russia relations, reminding us once more of <strong>Lord Acton</strong>'s statement that, "The issue that has swept down the centuries and <strong>which will have to be fought sooner or later</strong> is the people versus the banks."</p><p>This very fight could be the key reason why a new alliance between the United States and Russia is so important. I've discussed this in my 2017 book, "Grand Deception." The relevant excerpt is below:</p><blockquote><p>Given the pervasive and deep-rooted hostility of the American establishment toward Russia and the role American advisors played during Russia’s transition in the 1990s, it may seem odd that Vladimir Putin remained consistently open for friendly dialogue with his American counterparts, always referring to them as <em>our partners</em> and even <em>our American friends</em>. On important occasions, Putin backed his friendly disposition toward the U.S. with real action. As Soviet defector <strong>Lev Alburt</strong> wrote, “<em>Putin was the first to call Bush on September 11, and he offered what America needed: the Northern Alliance to help the US to defeat the Taliban and capture Bin Laden; transit for US and US-allied forces over Russian territory; Russian bases in Central Asia; intelligence; supplies; indeed everything America might need to fight terrorism. All of this and more Putin delivered, ignoring grumbling among his military and intelligence chiefs.</em>” Trusting in the commonality of Russian and American interests, Putin has indeed maintained this attitude even in the face of disapproval on the part of many Russians. One Russian diplomat told Lev Alburt that, “<em>In our government, there is only one man who still believes that Russo-American partnership is possible, and worth aiming for. Because that man is Vladimir Putin the rest of us follow.</em>”<br>One possible reason why Vladimir Putin might believe in the commonality of U.S. and Russian interest is because he understood that the enemy that has had Russia in its crosshairs for over two centuries now, is the same system, or structure of power that has taken the American people and their government captive, squandering America’s wealth and destroying her prosperity in their drive to build a global empire. This enemy is the global financial oligarchy that has been able to impose control over most nations of the world through their system of money and credit and their central banking franchise. In biblical times they might have been called <em>money-changers</em>. We can also call them <em>empire builders</em>. Because their franchise is global and distributed across many nations and capitals, even when any given country managed to curtail their power, the money-changers always managed to burrow their way back, subverting their governments and reversing their independence. ... This very same financial oligarchy that took control of the Bank of England and set up the Federal Reserve System in the U.S., has today spawned a global central banking franchise that controls most of the world’s central banks. The ultimate owners of this system belong to the same dynastic oligarchy that has over the centuries supported multiple attacks on Russia, from Napoleonic Wars (1803-1815), Crimean War (1853-1856), the Bolshevik Coup (1917), Hitler’s 1941 invasion, as well as the 1990s raid conducted under the guise of Shock Therapy transition.<br>I believe that Vladimir Putin has understood – he certainly is sophisticated enough a thinker – that he could not vanquish this global oligarchy by confronting them head-on and throwing them out of Russia. That would only set them back temporarily as they would use their system of money and credit to claw their way back into Russia’s institutions and subvert her independence once more. Perhaps he has resolved instead to build bridges of understanding and cooperation with Russia’s American friends and work together to rid both nations, and perhaps all of humanity, of the money changers for good. If this truly is Mr. Putin’s game plan, and if he finds in the United States true partners and allies in this struggle, we may be so fortunate to witness a new U.S.-Russian alliance that could turn the tide of history away from the dystopian state of disenfranchisement, debt servitude and permanent war, toward a new era of peace, cooperation and prosperity.</p></blockquote><p>The above excerpt encapsulates why the relationship between the two powers could matter far more than is commonly understood. It also explains why the banking cabal is fighting so hard to destroy it. It may be hard to envision just how this parasite could be dislodged from humanity, but just as it got there somehow, it should be possible to rout it out somehow. Nothing lasts forever, so neither should their degenerate, pathogenic rule. </p><h2><strong>In Russia there comes the hope of the world</strong></h2><p>The conversation between Donald Trump and Vladimir Putin on Wednesday, 12 February 2025 could be the best news we had in years. In the last chapter of “Grand Deception,” I wrote as follows:</p><blockquote><p>Perhaps more than at any point in history, the future of humanity lies in the hearts and minds of the people of the United States and the people of Russia. Do we dare imagine the world we could all build together if we rejected the needless fear and hostility? What might we achieve if we turned our talents and energies toward improving our world rather than producing arms of destruction? What if we chose beauty and harmony over power and dominance? Do we dare believe that it is our privilege to move humanity forward to a new, better, more gratifying ways of living?</p><p>Life is a magical gift and our present experience in the world of artificial scarcity and manufactured hostilities may not allow us even to fully envision what life could be like in its full splendor. Like people in a never-ending sandstorm, we cannot see the beauty that surrounds us, let alone enjoy it. Each and every one of us is vaguely aware that some important part of the human potential, perhaps something divine in us, remains unfulfilled yet eager for its own realization. The future is in our hands and we ought to strive to find and fulfill that potential. <em>That</em> is the struggle worth all of our earnest efforts, which must begin in mutual respect and friendship among nations and peoples so that we may begin to rediscover humanity for what it potentially is.</p><p>As utopian as these musings may sound, there can be little doubt that warfare wastes more than just economic resources. It also wastes human lives, it stunts and misdirects our creative energies and destroys the foundations on which we could build a far better future.</p><p>Vladimir Putin, I believe, understood these things perfectly well and I think this largely explains his unwavering disposition to engage with his American counterparts in a friendly and constructive dialogue. In order for us to avoid making a massive mess of things, it would be important for the American side to reject hysterical demonization shoved daily down their throats and to reciprocate Putin’s disposition with friendship. As a human being and as a father, this is my fondest hope for the future. To begin with, this would be the first step toward thawing the new cold war and preventing the hot one from erupting. Furthermore, in absence of hostility, the two powers could take steps to rid the world of nuclear weapons and end the senseless and costly global arms race. That would free up vast resources that could be allocated to building a future with far more prosperity and freedom than ever before.</p><p>I don’t know whether we can attain utopia, but I do know that we don’t have to destroy the world. Perhaps, just like in the 19<sup>th</sup> century, the future lies in the hands of the Russian and American people. In 1944, American mystic and reverend <strong>Edgar Cayce</strong> said that, “<em><strong>In Russia there comes the hope of the world</strong>, not as that sometimes termed of the communistic, or Bolshevik, no; but freedom, freedom! <strong>That each man will live for his fellow man! The principle has been born</strong>. It will take years for it to be crystallised, but out of Russia comes again the hope of the world.</em>” I believe that this hope depends on what the world does with it.</p><p>Still, the most important struggle perhaps, is the struggle to engage the American people who I believe hold the keys to the future of humanity. As <strong>Georg Friedrich Hegel</strong> prophesized, “<em>America is therefore the land of the future, where, in the ages that lie before us, the burden of the World’s history shall reveal itself.</em>”</p></blockquote><p>It may be - it certainly seems so - that we have reached that junction and the sleeping giant has now awakened. In addressing the American people, <strong>Ernesto "Che" Guevara</strong> said, "I envy you. You North Americans are very lucky. You are fighting the most important fight of all – you live in the belly of the beast." In that, he was right. </p><p>By referring to “the strengths of our respective Nations, and the great benefit that we will someday have in working together,” Donald Trump may have foreshadowed what Cayce had announced. I would underscore however, that the keys lie, not in our fallible, mortal leaders, but in the hearts and minds of the Russian and American people, and with them the rest of humanity.</p><h2>Our allies are us</h2><p>In the same way that the American people firmly rejected the sinister scheemings of the criminal Biden/DNC cabal, so they can persist resolutely to move along the path to a better future. Back in 1971, Walt Kelly popularized the quip that, “<a href="https://tomme-stevenson.com/website/we-have-met-the-enemy-and-he-is-us/">We have met the enemy and he is us</a>.” Today we can and we should reverse this. We shall meet our friends, our brothers and sisters, our allies in this magnificent adventure: they are us. Today we are living in times when the burdens of World history are revealing themselves and <em>the principle</em>, that each man shall live for his fellow man, has indeed been born.</p><h2>About “Grand Deception”</h2><p>My book, Grand Deception was banned in 2017, only five weeks after it was published. Subsequently, I was cancelled altogether on Amazon, which also appropriated about three years of royalties, which they “forgot” to pay out (you’ll understand, Bezos’ yachts and space program cost a lot of money). </p><p>I am grateful to a reader who just alerted me that the book is available at the following <a href="https://archive.org/details/grand-deception-the-browder-hoax-alex-krainer/mode/1up">link where you can access it free of charge</a>. For anyone who prefer a hard copy version, I’m afraid the book is only available from the pages of its publisher, the Red Pill Press: </p><p><strong>Americas</strong>: <a href="https://www.redpillpress.com/shop/grand-deception-bill-browder-magnitsky-act-russian-sancti">https://www.redpillpress.com/shop/grand-deception-bill-browder-magnitsky-act-russian-sancti</a>ons/</p><p>Because shipping charges can be quite high, Red Pill Press has a different link for </p><p><strong>UK and Europe</strong>: <a href="https://www.pilulerouge.com/product/grand-deception-truth-bill-browder-magnitsky-act-anti-russian-sanctions/">https://www.pilulerouge.com/product/grand-deception-truth-bill-browder-magnitsky-act-anti-russian-sanctions/</a></p><p>The PDF copy can be downloaded here: <a href="https://www.redpillpress.com/shop/grand-deception-pdf/">https://www.redpillpress.com/shop/grand-deception-pdf/</a></p><div data-attrs='{"url":"https://alexkrainer.substack.com/subscribe?","text":"Subscribe","language":"en"}' data-component-name="SubscribeWidgetToDOM" data-sanitized-class="subscription-widget-wrap-editor"><div data-sanitized-class="subscription-widget show-subscribe"><div data-sanitized-class="preamble"><p data-sanitized-class="cta-caption">Alex Krainer's Substack is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><div data-sanitized-class="fake-input-wrapper"><div data-sanitized-class="fake-input"></div><div data-sanitized-class="fake-button"></div></div></div></div><p><strong><a href="http://linkedin.com/in/alex-sasha-krainer-0b74ab1a">Alex Krainer</a> – <a href="https://twitter.com/NakedHedgie">@NakedHedgie</a></strong> is the creator of <strong><a href="https://isystem-tf.com/">I-System Trend Following</a></strong> and publisher of daily <strong><a href="https://isystem-tf.com/trendcompass/">TrendCompass</a></strong> investor reports which cover over 200 financial and commodities markets. One-month test drive is always free of charge, <strong>no jumping through hoops to cancel</strong>. To start your trial subscription, drop us an email at <a href="mailto:TrendCompass@ISystem-TF.com">TrendCompass@ISystem-TF.com</a>, or:</p><blockquote><p>Check out <strong><a href="https://trendcompass.substack.com/">TrendCompass on Substack</a></strong> where our new Key Markets report, covering 18 key global markets is priced at under $1/day!</p></blockquote><p>To learn more about TrendCompass reports please check our main <a href="https://isystem-tf.com/trendcompass/">TrendCompass web page</a>. We encourage you to also have a read through our <a href="https://isystem-tf.com/trendcompass-user-manual/">TrendCompass User Manual</a> page. For<strong> <a href="https://isystem-tf.com/solutions/u-s-investors/">US investors</a></strong>, we propose a trend-driven inflation/recession resilient portfolio covering a basket of 30+ financial and commodities markets. Further information is at <a href="https://isystem-tf.com/solutions/u-s-investors/">link</a>.</p>

attributes:
{"enclosures":[{"url":"https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f7ed7a5-f3be-4fc6-8a16-6b7ad5ec57c6_1800x1021.png","type":"image/jpeg","length":0}]}


guid: https://christitus.com/target-specific-people-or-computers-with-item-level-targeting-in-gpos/
title: Target Specific People or Computers with Item-Level Targeting in GPOs
link: https://christitus.com/target-specific-people-or-computers-with-item-level-targeting-in-gpos/
hash: u� >��k����Uנy
attributes: {"enclosures":[]}
content:
<p>Using Group Policy Objects can be a huge time saver, but if used improperly can be a big headache. Once you’ve messed around with GPO settings enough, you quickly figure out that you need to create new GPOs for specific programs, events, etc… that are not all in one GPO. This gives you a lot more flexibility and makes it very easy to track down troublesome GPO related issues when done properly.</p>
<p>Now lets say you create a Power Savings GPO that you want to apply only to computers that meet certain conditions. WMI, Security, and Site Filtering are all too broad for this task, and you want to use Item-Level Targeting. After you create your Group Policy Object you will need to add this setting to the GPO.</p>
<p><strong>In Group Policy Management Settings</strong></p>
<p>-User Configuration -&gt; Preferences -&gt; Control Panel -&gt; Regional Options</p>
<p>-Right-Click and Select New</p>
<p>-Navigate to Common Tab</p>
<p>-Check Item-Level Targeting and Press Targeting…</p>
<p>From here you will be able to select tons of critaria that you want to meet for your GPO. This can be system requirements to install a program, or only select certain Operating Systems. You can also add is not tags that will rule out any computer that meet that criteria. The options are limitless and its very easy to incorporate in your GPO. Personally, I never use the often complicated and time consuming WMI Filters anymore.</p>


guid: https://christitus.com/disable-outlook-anywhere-in-group-policy-object-gpo/
title: Disable Outlook Anywhere in Group Policy Object (GPO)
link: https://christitus.com/disable-outlook-anywhere-in-group-policy-object-gpo/
hash: ���7�|��ށ�FX�w
attributes: {"enclosures":[]}
content:
<p>By default the standard outlk12.adm templates do not come with a configuration of Outlook Anywhere. You can configure the “<strong>Configure Outlook Anywhere user interface options</strong>” options to disable or grey out the settings. However, this DOES NOT disable Outlook anywhere, just user interaction with it.</p>
<p>You will need to download a new administrative template that Microsoft released in this <a href="http://support.microsoft.com/kb/961112">hotfix</a>. If you don’t like reading Microsoft’s wonderful support site instructions or Microsoft changes their support site after this blog post, here is the file and instructions paraphrased.</p>
<ol>
<li>
<p>Download Add-On Outlook Anywhere Administrative Template here…<a href="http://localhost/images/2011/03/article-961112.zip">article-961112</a> (unzip to reveal article-961112.adm file).</p>
</li>
<li>
<p>In the Group Policy Object Editor add the Article-961112.adm file:</p>
</li>
</ol>
<p>Right-click Administrative Templates and click Add/Remove Templates.</p>
<p>In the Add/Remove Templates dialog box click Add.</p>
<p>In the Policy Templates dialog box locate and select the Article-961112.adm file. Click Open.</p>
<p>Click Close in the Add/Remove Templates dialog box.</p>
<ol start="3">
<li>
<p>Under User Configuration in Administrative Templates expand the policy node labeled Article 961112 Policy Settings. (Note: You may see this under Classic Administrative Templates in a sub-menu)</p>
</li>
<li>
<p>Select the Outlook Anywhere (RPC/HTTP) node to list the following policies under the Setting column in the right-pane:</p>
</li>
</ol>
<blockquote>
<p>RPC/HTTP Connection Flags -&gt; Set to Enabled -&gt; No Flags</p>
</blockquote>
<blockquote>
<p>Proxy Server Name -&gt; Do not change</p>
</blockquote>
<blockquote>
<p>Only Connect if Proxy Server certificate has this principle name -&gt; Do not change</p>
</blockquote>
<blockquote>
<p>Proxy authentication Setting -&gt; Do not change</p>
</blockquote>
<ol start="5">
<li>Double-click each policy to configure the appropriate RPC/HTTP setting for your Outlook clients.</li>
</ol>


guid: https://christitus.com/keep-windows-7-from-installing-device-drivers-from-windows-update/
title: Keep Windows 7 from installing device drivers from Windows Update
link: https://christitus.com/keep-windows-7-from-installing-device-drivers-from-windows-update/
hash: et��r����^$��g�
attributes: {"enclosures":[]}
content:
<p>I find a very annoying feature of Windows 7 is every device you install by default searches windows update. This makes installing devices a lot longer than it needs to be. Follow these steps to make windows search your computer first and then Windows Update if needed.</p>
<ol>
<li>
<p>Right Click My Computer from Start Menu and select “Properties”</p>
</li>
<li>
<p>Click “Advanced System Settings”</p>
</li>
<li>
<p>Select Hardware Tab, and click “Device Installation Settings”</p>
</li>
<li>
<p>Highlight “No, Let me choose what to do”</p>
</li>
</ol>
<p>4a. Also, “Install driver software from Windows Update if it is not found on my computer”</p>
<p>Save Changes and you are done. You now install devices at lightning speed!</p>


guid: https://christitus.com/valid-short-file-name/
title: “Error 1327. Invalid Drive” or “Error 1325 – not a valid short file name” Fix
link: https://christitus.com/valid-short-file-name/
hash: >$����S��b�t�}��
attributes: {"enclosures":[]}
content:
<p>If you are installing a program and receiving a pop-up message during installation of valid short file name this applies to you. I removed a drive from my computer and had this happen to me.</p>
<h2 data-sanitized-id="steps-to-fix-8220not-avalid-short-file-name8221">Steps to Fix “not a valid short file name”</h2>
<ol>
<li>
<p>Click Start, and then click Run.</p>
</li>
<li>
<p>In the Open box, type regedit, and then click OK.</p>
</li>
<li>
<p>Under Registry Editor, locate the following registry key: <code>HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders</code></p>
</li>
<li>
<p>On the right pane, note the values in the Data field of each entry. If any value contains a drive that is not correct for your computer, right-click the entry, type c:\my documents in the Value data box, and then click OK.</p>
</li>
<li>
<p>Repeat step 4 for each entry whose Data value contains an incorrect drive.</p>
</li>
<li>
<p>Repeat steps 3 through 5 for each of the following registry keys:</p>
</li>
</ol>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
</span></span></code></pre></div><p>7.Close Registry Editor.</p>
<p>Re-run your setup program and you shouldn’t see “not a valid short file name” error. Also, I’d recommend running the registry cleaning portion of CCleaner and checking your Environmental Variables (Under System Properties, Advanced, then Environmental Variables.)</p>


guid: https://christitus.com/exchange-primary-domain-controller/
title: Exchange on Primary Domain Controller Slow Reboot and Startup
link: https://christitus.com/exchange-primary-domain-controller/
hash: xi&O��5o�\yMV���
attributes: {"enclosures":[]}
content:
<p>If you had the misfortune of installing Exchange on Primary Domain Controller you will experience some pain when doing a reboot. Typically it will take 10-15 minutes before it restarts and up to 30 minutes to start the Microsoft Exchange Information Store. Consequently, what is really happening in the background is the IS service is being terminated incorrectly on shutdown and the store is left in a “DIRTY” shutdown state. This is very bad on several levels and can cause the Store to corrupt and not start at all, which can be catastrophic.</p>
<p>Luckily, it’s a simple fix and all you have to do is shut down the services before restarting. Below is a script that does it automatically. So, just plug it into a .cmd or .bat file and run.</p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">@ECHO OFF
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">ECHO ARE YOU SURE YOU WANT TO RESTART SERVER??
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">pause
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">net stop msexchangeadtopology /y
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">net stop msftesql-exchange /y
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">net stop msexchangeis /y
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">net stop msexchangesa /y
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">net stop iisadmin /y
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">ECHO DONE STOPING SERVICES REBOOT NOW!
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">pause
</span></span></code></pre></div><p>I hope this helps you and keeps your server running until you are able to install it on another server. That said, try to avoid installing exchange on primary domain controller at all costs. You will avoid so many headaches by doing this.</p>


guid: https://christitus.com/windows-refresh-pc/
title: Windows Refresh PC Setting
link: https://christitus.com/windows-refresh-pc/
hash: ��y���y�5��
attributes: {"enclosures":[]}
content:
<p>Using Windows Refresh PC now solves the common problem, that PCs get infected with viruses and require you to either reload it from the disc or recovery partition. Sometimes people lost the disc, re-partitioned their drives, or simply had their hard drive fail. This leads to installing windows from scratch and hunting down all your drivers.</p>
<p>That is all changing in Windows 8, they are including a “Refresh” option and a “Remove everything and Re-install Windows” option.</p>
<p><img loading="lazy" src="https://christitus.com/images/2012/09/refresh-pc.webp" alt="Refresh PC" data-sanitized-class="img-fluid"> </p>
<p>I’m skeptical on how well this works, but in theory, this could be a great thing for the home user. Windows 8 computers are likely to get infected, just as much as a Windows 7 computer. However, having these options at users fingertips could be a blessing or a curse. Imagine if a virus re-programs these features, wouldn’t that be fun 😉 I guess we will just have to wait and see.</p>
<h2 data-sanitized-id="8220refresh-your-pc8221">“Refresh your PC”</h2>
<p>The Windows refresh PC options remove all user-installed applications from 3rd parties, i.e. Adobe products from a disc, Google Chrome, or anything you installed on the “desktop” portion of windows 8. This pretty much erases all applications on your PC, except those from the windows store. You see where I’m going here, don’t you? Microsoft hopes that end users will purchase EVERYTHING from their store, which it can vet and make sure it doesn’t have viruses. Microsoft will, of course, take a piece of the pie on that purchase and is why Windows 8 will be so cheap. I have mixed emotions on this, but it does make a lot of sense.</p>
<h2 data-sanitized-id="8220remove-everything-and-reinstall-windows8221">“Remove Everything and Reinstall Windows”</h2>
<p>This will be nice to have it part of the operating system. It should have been there on past windows, but better late than never. A simple reformats, and reload without the need to hunt down the correct windows disc.</p>
<p>Overall, I’m happy to see Microsoft taking steps to transition the computer world away from where we have been. There will be bugs, and Windows 8 is a far cry from perfect, but I like its direction. I’m looking forward to the official launch next month.</p>
<p>To Learn more about Windows Refresh PC and Restoring custom images go to <a href="http://blogs.msdn.com/b/b8/archive/2012/01/04/refresh-and-reset-your-pc.aspx">http://blogs.msdn.com/b/b8/archive/2012/01/04/refresh-and-reset-your-pc.aspx</a></p>
<p>This details creating a custom refresh image which would include 3rd party applications. This could be a godsend for IT Professionals in business, since the image would be local and easily a one-click fix all button, so to speak.</p>


guid: https://christitus.com/windows-store-not-loading/
title: Windows Store not loading (On Domain)
link: https://christitus.com/windows-store-not-loading/
hash: �πu����Fϟ�Ί
attributes: {"enclosures":[]}
content:
<p>After joining my computer to the domain windows store would not load. I first had to re-enable UAC because of a GPO and that fixed launching the metro apps. I was still having the issue with Windows Store not loading and this fixed it.</p>
<h2 data-sanitized-id="symptoms">Symptoms</h2>
<p>First, if you’re getting shut out of the store (“Can’t connect to the Store right now” kind of messages) &amp; on a corporate, managed machine (you’ll see ‘Managed by your system administrator’ in Windows Update) – plus getting stuff like this in event viewer:</p>
<blockquote>
<p>Fault bucket -1485561316, type 5<br>
Event Name: WindowsUpdateFailure2</p>
</blockquote>
<h2 data-sanitized-id="resolution">Resolution</h2>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">[HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindowsWindowsUpdate]
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">"DisableWindowsUpdateAccess"=dword:00000000
</span></span></code></pre></div><p>Either copy/paste that text into a text file, save it as storefix.reg &amp; run it, or navigate to that tree &amp; change the DWORD from 1 to 0. Next, go into services.msc &amp; restart the Windows Update service.</p>


guid: https://christitus.com/ideas/
title: Ideas
link: https://christitus.com/ideas/
hash: �xt�Զ��[E��|��
attributes: {"enclosures":[]}
content:
<p>Current Ideas for Videos and Articles</p>
<ul>
<li> ZFS, couple that with Sanoid and Syncoid</li>
<li> Tiling Window Manager for Windows - <a href="https://github.com/LGUG2Z/komorebi">https://github.com/LGUG2Z/komorebi</a></li>
<li> TrueNAS Scale</li>
<li> Hyprland Window Manager for Wayland - <a href="https://github.com/hyprwm/Hyprland">https://github.com/hyprwm/Hyprland</a></li>
<li> Setting Up Linux Gaming</li>
<li> Live Stream Radio Browser Program <a href="https://strimio.com/">https://strimio.com/</a></li>
<li> DSTask - <a href="https://github.com/naggie/dstask">https://github.com/naggie/dstask</a></li>
<li> <a href="http://portainer.io/">Portainer.io</a></li>
<li> PiKVM (<a href="https://pikvm.org/)%5Bhttps://pikvm.org/%5D(https://pikvm.org/">https://pikvm.org/)[https://pikvm.org/](https://pikvm.org/</a>)</li>
<li> KVM / QEMU full tutorial</li>
<li> Zerotier - BestVPN</li>
<li> Darling - MacOS Emulation <a href="https://www.darlinghq.org/">https://www.darlinghq.org/</a></li>
<li> plex server setup linux</li>
<li> Enable GPO in Win 10 Home <a href="https://www.itechtics.com/enable-gpedit-windows-10-home/#Method_1_Enable_Group_Policy_Editor_in_Windows_10_Home_using_GPEdit_Installer">https://www.itechtics.com/enable-gpedit-windows-10-home/#Method_1_Enable_Group_Policy_Editor_in_Windows_10_Home_using_GPEdit_Installer</a></li>
<li> automount drives systemd</li>
<li> rEFInd Bootloader</li>
<li> <a href="http://snapdrop.net/">snapdrop.net</a> - Share files between devices</li>
<li> WinGet and Windows Terminal</li>
<li> <a href="https://mycroft.ai/">https://mycroft.ai</a> - Open Source Home Assistant</li>
<li> Samba Advanced Video</li>
<li> Github config save</li>
<li> systemd-services on startup cleanup</li>
<li> debtap install deb packages on arch - rpm2cpio - alien</li>
<li> <a href="https://github.com/dreamer/luxtorpeda/">https://github.com/dreamer/luxtorpeda/</a> - Gaming native</li>
<li> OpenHABian</li>
<li> Startup Programs and managing them</li>
<li> Live USB Environments</li>
<li> jellyfin</li>
<li> Adding Android Libraries / Davik Virtualization</li>
<li> Quibble Windows Bootloader - <a href="https://github.com/maharmstone/quibble"></a><a href="https://github.com/maharmstone/quibble">https://github.com/maharmstone/quibble</a></li>
<li> Kodachi</li>
<li> Linux Users and Groups</li>
<li> Grafana Zabbix Monitoring</li>
<li> Alienvault OSSIM</li>
<li> resize filesystem</li>
<li> URXVT</li>
<li> Ranger</li>
<li> Vagrant</li>
<li> Arch CHROOT Repair</li>
<li> alpine linux - The 100MB Linux</li>
<li> Kubernetes Initial Setup</li>
<li> DEX Linux</li>
<li> Making a workstation to load images on PCs - FOG Project</li>
<li> Linux Screen Command</li>
<li> Firejail</li>
<li> Chroot from USB drive</li>
<li> Debloat Linux</li>
<li> Linux Firewall - UFW</li>
<li> <a href="http://privacytools.io/">Privacytools.io</a></li>
<li> Add SSD or Hard Drive to VM</li>
<li> pulse effects and pulse equalizer</li>
<li> PxE and TFTP Servers</li>
<li> Update MOTD for on Servers</li>
<li> Using the grep command</li>
<li> LAMP Stack on Ubuntu</li>
<li> SMB4k</li>
<li> Docker</li>
<li> Redhat Line of Products (Insights / Ansible / OpenShift)</li>
<li> Snaps and Flatpacks</li>
</ul>


guid: https://christitus.com/update-is-pending/
title: Could not continue installation because update is pending
link: https://christitus.com/update-is-pending/
hash: ���n��J[���[Id�
attributes: {"enclosures":[]}
content:
<p>When installing a program I kept getting the prompt below that an update is pending. Even after a restart, this would display, therefore I changed these registry keys to clear up the issue.</p>
<blockquote>
<p>Microsoft Server setup cannot continue because a restart from a previous installation or update is pending.</p>
</blockquote>
<h2 data-sanitized-id="the-fix-for-an-update-is-pending">The Fix for an update is pending</h2>
<p>The following Registry keys control this error message. If you have rebooted and are still experiencing this issue, clear out these keys and relaunch your installer.</p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\UpdateExeVolatile
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ControlSession Manager\PendingFileRenameOperations
</span></span></code></pre></div><p>The Setup MSI displays an error message if one of the following conditions is true:</p>
<ul>
<li>The value of the **UpdateExeVolatile **registry key is anything other than 0.</li>
<li>The **PendingFileRenameOperations **registry key has any value.</li>
</ul>
<h3 data-sanitized-id="microsoft-knowledgebase-article">Microsoft Knowledgebase article</h3>
<p>You can read this article about regedit.</p>
<p><a href="http://technet.microsoft.com/en-us/library/cc164360(v=exchg.80).aspx">http://technet.microsoft.com/en-us/library/cc164360(v=exchg.80).aspx</a></p>


guid: https://christitus.com/configuring-sql-authentication/
title: Configuring SQL Authentication
link: https://christitus.com/configuring-sql-authentication/
hash: �A�=�����BZ� m
attributes: {"enclosures":[]}
content:
<p>Configuring SQL Authentication can be tricky at times, and this is a great article that goes over the two types of authentication in SQL. I find some programs interface better with direct SQL authentication when Windows Authentication fails for any reason.</p>
<p><em>Note: This article is taken from <a href="http://kb.gfi.com/articles/SkyNet_Article/How-to-configure-SQL-Server-2005-2008-to-accept-SQL-Authentication">http://kb.gfi.com/articles/SkyNet_Article/How-to-configure-SQL-Server-2005-2008-to-accept-SQL-Authentication</a> and all credit goes to them for the writing. I’m posting it here simply as a reference in case</em> there _site changes the above link. _</p>
<h3 data-sanitized-id="fix-authentication-in-gfi-reportcenter">Fix Authentication in GFI ReportCenter</h3>
<p>In order to use SQL Server authentication, you must first configure your server using the steps below.</p>
<ol>
<li>Right-click on the server node and select ‘Properties’</li>
<li>Select ‘Security’ from the left menu under ‘Select a page’</li>
<li>Under ‘Server Authentication’, select the ‘SQL Server and Windows Authentication mode option’</li>
<li>Click ‘OK’ to close the dialog</li>
<li>Right click on the server node and choose ‘Restart’ for the changes to take effect</li>
</ol>
<h4 data-sanitized-id="sql-server-authentication-login">SQL Server authentication login</h4>
<ol>
<li>In the server node expand ‘Security’ and ‘Logins’</li>
<li>Right click on the login name and select ‘Properties’</li>
<li>Enter a password and confirm the password for the login</li>
<li>Select ‘Status’ from the left menu under ‘Select a page’</li>
<li>Set the ‘Login’ option to ‘Enabled’</li>
<li>Click ‘OK’ to close the dialog</li>
</ol>
<p>Once you have walked through configuring SQL authentication, you can now change your instance to the type you need.</p>


guid: https://christitus.com/moving-gfi-mailarchiver/
title: Moving GFI MailArchiver to another server
link: https://christitus.com/moving-gfi-mailarchiver/
hash: DҎ�C�s��(0��Ӧ}
attributes: {"enclosures":[]}
content:
<p>The following walkthrough shows you the process of moving GFI MailArchiver to another server.</p>
<p>These KB articles will assist you in the moving and migration of this server. The process is very involved and requires copying all the data files over to the new server. Afterward, backing up every single SQL database (archive store) and detaching/copying them. From there you reattach the stores and reinstall GFI MailArchiver on the new server.</p>
<h4 data-sanitized-id="here-is-the-article-describing-the-data-file-moves-andre-installationon-the-new-server">Here is the Article describing the data file moves and re-installation on the new server.</h4>
<p><em>Please Note: DO NOT re-install GFI before moving SQL Databases from</em> the second <em>article unless you plan on leaving SQL on old server!</em></p>
<p><a href="http://kb.gfi.com/articles/SkyNet_Article/Is-it-possible-to-move-MailArchiver-to-a-new-server?retURL=%2Fapex%2FSupportHome&amp;popup=true">http://kb.gfi.com/articles/SkyNet_Article/Is-it-possible-to-move-MailArchiver-to-a-new-server?retURL=%2Fapex%2FSupportHome&amp;popup=true</a></p>
<h4 data-sanitized-id="this-articledescribes-the-actual-sql-server-move">This Article describes the actual SQL Server Move</h4>
<p><a href="http://kb.gfi.com/articles/SkyNet_Article/How-to-move-a-GFI-MailArchiver-database-from-one-Microsoft-SQL-Server-to-another?retURL=%2Fapex%2FSupportHome&amp;popup=true">http://kb.gfi.com/articles/SkyNet_Article/How-to-move-a-GFI-MailArchiver-database-from-one-Microsoft-SQL-Server-to-another?retURL=%2Fapex%2FSupportHome&amp;popup=true</a></p>
<p><img loading="lazy" src="https://christitus.com/moving-gfi-mailarchiver/moving-gfi-mailarchiver-2/" alt="Moving GFI MailArchiver" data-sanitized-class="img-fluid"> </p>
<h3 data-sanitized-id="installation-notes">Installation Notes:</h3>
<ul>
<li>I had to switch to SQL authentication because my old archive store kept popping up errors.</li>
<li>A very long process, because of the massive amount of emails in this archiver. Depending on the business it can take a few days or weeks!</li>
</ul>


guid: https://christitus.com/mais-queue-folder/
title: GFI MailArchiver MAIS Queue Folder has tons of emails stuck
link: https://christitus.com/mais-queue-folder/
hash: ��qh,�05F-�{�4
attributes: {"enclosures":[]}
content:
<p>The Import service can get stuck and this will stop all the mail in the MAIS Queue Folder. These are the emails that have not been processed and added to GFI Archiver yet, so do not delete them. Below is the fix on how I restored the import service and processed all the stuck email.</p>
<h2 data-sanitized-id="the-fix">The Fix</h2>
<p>Deleted all files <strong>EXCEPT</strong> for *.eml from <code>C:\Program Files (x86)\GFIMailArchiver\MAIS\Queue</code></p>
<p>Renamed all *.eml files to *.txt (Command Prompt: ren *.eml *.txt)</p>
<p>Move all files to <code>C:\Program Files (x86)\GFIMailArchiver\MAIS\Pickup</code></p>
<h2 data-sanitized-id="in-closing">In Closing</h2>
<p>This will force GFI Mailarchiver to reprocess all these emails. I’d highly recommend doing all these operations from a command prompt as the sheer number of files in the folders can potentially lock up your server when using a Graphic User Interface. Once you restart your processes wait for the MAIS Queue Folder to reduce in size before checking again.</p>


guid: https://christitus.com/full-screen-rdp/
title: Full Screen RDP and various Remote Desktop Session hotkeys
link: https://christitus.com/full-screen-rdp/
hash: Oi���<�S���8,[�
attributes: {"enclosures":[]}
content:
<p>Here are all the hotkeys I use regularly when doing Full Screen RDP.</p>
<p>Full Screen RDP Hotkey:</p>
<p><code>Ctrl + Alt + Pause/Break Key</code></p>
<p>Activate Connection Bar:</p>
<p><code>Ctrl + Alt + Home</code></p>
<p>Send Ctrl+Alt+Del on Remote Computer</p>
<p><code>Ctrl + Alt + End</code></p>
<p>Simulate Alt+Tab on Remote Computer</p>
<p><code>Alt + Page Up/Page Down</code></p>
<p>Windows Key Press on Remote Computer</p>
<p><code>Alt + Home</code></p>
<p>I often find myself using these hotkeys to move around, but these are needed especially when you have a locked up program in an RDP session.</p>


guid: https://christitus.com/rename-folders-mapped-drive/
title: Cannot Rename Folders on mapped drive
link: https://christitus.com/rename-folders-mapped-drive/
hash: %�l �� 3�� in�I�
attributes: {"enclosures":[]}
content:
<p>This error message is displayed and I cannot rename folders on the mapped drive. By making a group policy change I was able to make this error go away.</p>
<p><code>The drive that this file or folder is stored on does not allow long file names, or names containing blanks or any of the following characters: / : , ; * ? &lt; &gt; |</code></p>
<h2 data-sanitized-id="solution-create-a-gpo-to-fix">Solution: Create a GPO to fix</h2>
<p>To resolve this problem, turn off Fast Logon Optimization. I recommend creating a GPO in your domain controller to achieve this. If its an isolated instance to one PC, you can use gpedit.msc to enforce it on that one PC.</p>
<h3 data-sanitized-id="group-policy-settings-to-change">Group Policy Settings to Change</h3>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">Computer Configuration\Administrative Templates\System\Logon\Always wait for the network at computer startup and logon
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">User Configuration\Administrative Templates\System\Scripts\Run logon scripts synchronously
</span></span></code></pre></div>


guid: https://christitus.com/error-0x800f0906/
title: Installing .NET Framework 3.5 / 3.0 / 2.0 Error 0x800F0906
link: https://christitus.com/error-0x800f0906/
hash: ��~��$��\!�2WP��
attributes: {"enclosures":[]}
content:
<p>Recently I had error 0x800F0906 when doing a dot net framework update. <a href="http://support.microsoft.com/kb/2734782">http://support.microsoft.com/kb/2734782</a> Note: You could take this resolution further and push it out via network script if needed. Make sure to copy the Windows 8 DVD to a local network drive before attempting.</p>
<p>To resolve this problem, use one of the following methods, as appropriate for the error code that you are receiving.</p>
<h3 data-sanitized-id="error-code-0x800f0906">Error code: 0x800F0906</h3>
<p>This error code occurs because the computer cannot download the required files from Windows Update.</p>
<p>This behavior can be caused by a system administrator who configures the computer to use Windows Server Update Services (WSUS) instead of the Microsoft Windows Update server for servicing. In this case, contact your system administrator and request that they enable the <em>Specify settings for optional component installation and component repair</em> Group Policy setting and configure the <em>Alternate source file path</em> value or select the <em>Contact Windows Update directly to download repair content instead of Windows Server Update Services (WSUS)</em> option.</p>
<h3 data-sanitized-id="configure-group-policy-8211-option-1">Configure Group Policy – Option 1</h3>
<ul>
<li>Start the Local Group Policy Editor or Group Policy Management Console.</li>
<li>Expand <em>Computer Configuration</em>, expand <em>Administrative Templates</em>, and then select <em>System</em>.</li>
<li>Open the <em>Specify settings for optional component installation and component repair</em> Group Policy setting, and then select <em>Enabled</em>.</li>
</ul>
<p>If you want to specify an alternative source file, in the <em>Alternate source file path</em> box, specify a fully qualified path of a shared folder that contains the contents of the sources\sxs folder from the installation media. Or, specify a WIM file. To specify a WIM file as an alternative source file location, add the prefix <em>WIM:</em> to the path, and then add the index of the image that you want to use in the WIM file as a suffix. The following are examples of values that you can specify:</p>
<ul>
<li>Path of a shared folder: <em><code>\server_name\share\Win8sxs</code></em></li>
<li>Path of a WIM file, in which 3 represents the index of the image in which the feature files are found: <em><code>WIM: \server_name\share\install.wim:3</code></em></li>
</ul>
<p>If it is applicable to do this, select the* Contact Windows Update directly to download repair content instead of Windows Server Update Services (WSUS)* check box.<br>
Tap or click* O*K.<br>
At an elevated command prompt, type the following command and then press Enter to apply the policy immediately:<br>
<code>gpupdate /force</code></p>
<h3 data-sanitized-id="use-dism-via-powershell-8211-option-2">Use DISM via PowerShell – Option 2</h3>
<p>Insert the Windows 8 or Windows Server 2012 installation media.</p>
<ol>
<li>At an elevated command prompt, run the following command:
<code>Dism /online /enable-feature /featurename:NetFx3 /All /Source:Drive:sourcessxs /LimitAccess</code>
<strong>Note</strong> In this command, Drive is a placeholder for the drive letter for the DVD drive or for the Windows 8 installation media. For example, you run the following command:<br>
<code>Dism /online /enable-feature /featurename:NetFx3 /All /Source:D:sourcessxs /LimitAccess</code></li>
</ol>


guid: https://christitus.com/outlook-security-certificate/
title: Outlook Security Certificate is invalid
link: https://christitus.com/outlook-security-certificate/
hash: �d�� ��j͈(�
attributes: {"enclosures":[]}
content:
<p>The following article fixes the Outlook security certificate error your users get when they connect to your exchange server internally. This is typically from installing a 3rd party SSL Certificate.</p>
<p>(Original Article Link: <a href="http://community.spiceworks.com/how_to/show/48384-outlook-the-name-of-the-security-certificate-is-invalid-or-does-not-match-the-name-of-the-site">http://community.spiceworks.com/how_to/show/48384-outlook-the-name-of-the-security-certificate-is-invalid-or-does-not-match-the-name-of-the-site</a>)</p>
<p>Issue: Outlook anywhere works fine with third party cert, but internal Outlook clients get cert error with NETBIOS name of Exchange server.</p>
<p>Example: <code>https://NetBIOS_name.contoso.com/autodiscover/autodiscover.xml</code></p>
<p>Note: I tested this on Exchange 2010 as well.</p>
<h3 data-sanitized-id="outlook-security-certificate-resolution">Outlook Security Certificate Resolution</h3>
<p>Change the URLs for the appropriate Exchange 2007 components. To do this, follow these steps:</p>
<ol>
<li>Start the Exchange Management Shell.</li>
<li>Change the Autodiscover URL in the Service Connection Point. The Service Connection Point is stored in the Active Directory directory service. To change this URL, type the following command, and then press Enter:</li>
</ol>
<pre><code>`Set-ClientAccessServer -Identity CAS_Server_Name -AutodiscoverServiceInternalUri https://mail.contoso.com/autodiscover/autodiscover.xml`
</code></pre>
<ol start="3">
<li>Change the InternalUrl attribute of the EWS. To do this, type the following command, and then press Enter:</li>
</ol>
<pre><code>`Set-WebServicesVirtualDirectory -Identity "CAS_Server_NameEWS (Default Web Site)" -InternalUrl https://mail.contoso.com/ews/exchange.asmx`
</code></pre>
<ol start="4">
<li>Change the InternalUrl attribute for Web-based Offline Address Book distribution. To do this, type the following command, and then press Enter:</li>
</ol>
<pre><code>`Set-OABVirtualDirectory -Identity "CAS_Server_nameoab (Default Web Site)" -InternalUrl https://mail.contoso.com/oab`
</code></pre>
<ol start="5">
<li>Change the InternalUrl attribute of the UM Web service. To do this, type the following command, and then press Enter:</li>
</ol>
<pre><code>`Set-UMVirtualDirectory -Identity "CAS_Server_Nameunifiedmessaging (Default Web Site)" -InternalUrl https://mail.contoso.com/unifiedmessaging/service.asmx`
_Note: The command in step 5 is required only in an Exchange 2007 environment._ This command no longer exists in an Exchange 2010 environment. Instead, the WebServices URL is used for this purpose.
</code></pre>
<ol start="6">
<li>Open IIS Manager.</li>
<li>Expand the local computer, and then expand Application Pools.</li>
<li>Right-click MSExchangeAutodiscoverAppPool, and then click Recycle.</li>
</ol>
<p>Now that you have finished, you will not see anymore certificate popups. I highly recommend issuing a proper certificate if possible, but this typically happens when your active directory is not resolvable from the outside world. Such as <code>contsco.local</code> instead of <code>microsoft.com</code>.</p>


guid: https://christitus.com/take-ownership-windows/
title: Take ownership of an entire drive in Windows
link: https://christitus.com/take-ownership-windows/
hash: 723� x{�cK��AN
attributes: {"enclosures":[]}
content:
<p>The commands below will show you how to take ownership of an entire drive. Here is a simple script to accomplish just that.</p>
<p>Option 1: Create a cmd file takeowner.cmd in notepad</p>
<p>Option 2: Type the following or past this in a command line prompt one line at a time</p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">takeown /f %1 /r /d y
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">icacls %1 /grant administrators:F /t
</span></span></code></pre></div><p><em>Please Note: This will take a large amount of time on big drives</em></p>
<p>In closing, this will work in almost any situation, however, if you do have issues check out my PowerShell post on taking ownership of entire network drives.</p>
<p><a href="https://christitus.com/changing-file-permissions/">File Permissions in PowerShell</a></p>


guid: https://christitus.com/hide-system-reserved-partition/
title: Remove or Hide System Reserved Partition
link: https://christitus.com/hide-system-reserved-partition/
hash: �Eq��a��;@�xA�
attributes: {"enclosures":[]}
content:
<p>Does your system reserve partition have a drive letter? With these steps, you will Hide System Reserved Partition and no longer see it when browsing your computer.</p>
<p>Here is the fix using Diskpart:</p>
<ol>
<li>Load Command Prompt (cmd)</li>
<li>Load Diskpart (diskpart)</li>
<li>List Disks (list disk)</li>
<li>Select Proper Disk (select disk #)</li>
<li>List Partitions (list partition)</li>
<li>Select Proper Partition (select partition #)</li>
<li>List Volumes (list volume) NOTE: Look at Drive letter of system reserved volume</li>
<li>Select the volume to hide (select volume #)</li>
<li>Remove assigned disk letter (remote letter X)</li>
</ol>
<p>With this, you should no longer see it, and you will Hide System Reserved Partition for good.</p>


guid: https://christitus.com/deploy-excel-macros/
title: Deploy excel macros to all xls files on startup
link: https://christitus.com/deploy-excel-macros/
hash: �B/�S�c]'�� �s
attributes: {"enclosures":[]}
content:
<p>To deploy excel macros on every excel file you open, you will need to create a personal file in your XLStart folder.</p>
<h3 data-sanitized-id="here-is-a-step-by-step">Here is a step-by-step</h3>
<ol>
<li>Create and test your macro</li>
<li>Save as – Personal.xls (Macro-Enabled workbook)</li>
<li>Copy the personal file to your C:Program Files\Microsoft Office\Office1#\XLStart folder</li>
<li>Done!</li>
</ol>
<p>I have no clue why the articles on TechNet and Microsoft’s Knowledge-base are so long when this is all you have to do.  Other than its Microsoft 😉</p>
<p>Note: I’ve also heard of folks dropping there *.bas macro files directly into XLStart and having the same result, but I personally have not used that method.</p>


guid: https://christitus.com/windows-software-raid/
title: Raid Re-syncing Windows software raid
link: https://christitus.com/windows-software-raid/
hash: ��X�avUp �V�+
attributes: {"enclosures":[]}
content:
<p>I want to preface this article in saying that I would never use a software raid in a business environment. However, recently I tried the windows software raid on a home theater PC. We recently had a power issue and caused the RAID 1 to go into resyncing status. Since it was about 2 TB of data, the resync would take several days and be causing performance issues. I found I could not break the raid or remove the mirror.</p>
<p>The following solutions are how you’d fix the issue:</p>
<p><img loading="lazy" src="https://christitus.com/images/2014/12/resyncing.webp" alt="resyncing" data-sanitized-class="img-fluid"> </p>
<h3 data-sanitized-id="solution-one">Solution One:</h3>
<ol>
<li>Open up Disk management (Start -&gt; Run -&gt; Type diskmgmt.msc)</li>
<li>Right click disk to remove from Raid and select Offline (Click on Disk to left not the graphic on right)</li>
<li>Reboot PC</li>
<li>Open Disk management back up, select disk, and put online.</li>
<li>Immediately after, Right click graphic and select remove Mirror.</li>
</ol>
<h3 data-sanitized-id="solution-two">Solution Two:</h3>
<ol>
<li>Physically unplug one of the disks</li>
<li>Open Disk Management</li>
<li>Remove Mirror</li>
</ol>
<p>In closing, this will get rid of your raid and give you the ability to repurpose these disks as you see fit. In the above experience, I still had my data on both disks so I just formatted one and repurposed it for other functions.</p>


guid: https://christitus.com/gfi-archiver-resource-usage/
title: GFI Archiver resource usage
link: https://christitus.com/gfi-archiver-resource-usage/
hash: 2D;�/�e<�Ѡ�zV�
attributes: {"enclosures":[]}
content:
<p>Does your GFI Archiver resource usage SQL process ballon over 8GB? If so, the following procedure will reduce usage by about half and fix many performance issues.</p>
<ol>
<li>
<p>Stop all MailArchiver and SQL services</p>
</li>
<li>
<p>Create a backup of ..MailArchiverStoreDataproduct.config</p>
</li>
<li>
<p>Edit product.config and add the following key within the <code>&lt;AppSettings&gt;</code> section: <code>&lt;add key="MaxPoolSize" value="20" /&gt;</code></p>
</li>
<li>
<p>Re-start the services</p>
</li>
</ol>
<p>*Note GFI has built-in scripts made to stop all NON-SQL services. Run the Stop script then stop SQL Server Instance, When starting start SQL Server Service before running a start script. The scripts default location are: ..MailArchiver\Tools\Scripts</p>
<p>After performing this procedure the SQL Server Process is now under 4GB or cut in half from their previous usage. In closing, this type of tweak is vital especially if you are running out of resources on the source server or you are running into performance problems within GFI Archiver.</p>


guid: https://christitus.com/idrac-dell-server/
title: iDrac Dell Server (Off-Band Remote Access)
link: https://christitus.com/idrac-dell-server/
hash: ���sV�Mݭ �~��
attributes: {"enclosures":[]}
content:
<p>I recently had a server freeze up when I wasn’t on-site and needed to power cycle it. I had configured iDrac before but it was not responsive. Here are some useful commands that can configure, reboot, and reset the iDrac function on Dell Servers. The commands below are run from a command prompt on the server (unless otherwise stated) in the (C:\Program Files\Dell\SysMgt\idrac) path.</p>
<p><img loading="lazy" src="https://christitus.com/images/2015/03/idrac.webp" alt="iDrac" data-sanitized-class="img-fluid"> </p>
<p><strong>Remote Commands (Workstation or another server)</strong></p>
<p><code>racadm -r -u -p</code></p>
<p>Example: <code>racadm -r 10.1.1.1 -u root -p calvin getsysinfo</code></p>
<p>DEFAULT USER: root</p>
<p>DEFAULT PASS: calvin</p>
<p><strong>iDrac Information</strong></p>
<p><code>racadm getsysinfo</code></p>
<p><strong>Reset and Factory Defaults</strong></p>
<p><code>racadm racreset</code> (soft Reset)</p>
<p><code>racadm racresetcfg</code> (Hard Reset – Resets IP/Account settings back to factory default)</p>
<p>NOTE: Resets Default IP &gt; 192.168.0.120</p>
<p><strong>Network Setup</strong></p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">racadm config -g cfgLanNetworking -o cfgNicEnable 1
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">racadm config -g cfgLanNetworking -o cfgNicIpAddress 192.168.0.120
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">racadm config -g cfgLanNetworking -o cfgNicNetmask 255.255.255.0
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">racadm config -g cfgLanNetworking -o cfgNicGateway 192.168.0.120
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">racadm config -g cfgLanNetworking -o cfgNicUseDHCP 0
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">racadm config -g cfgLanNetworking -o cfgDNSServersFromDHCP 0
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">racadm config -g cfgLanNetworking -o cfgDNSServer1 192.168.0.5
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">racadm config -g cfgLanNetworking -o cfgDNSServer2 192.168.0.6
</span></span></code></pre></div><p><strong>User Setup</strong></p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">racadm config -g cfgUserAdmin -o cfgUserAdminUserName -i 2 john
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">racadm config -g cfgUserAdmin -o cfgUserAdminPassword -i 2 123456
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">racadm config -g cfgUserAdmin -o cfgUserAdminEnable -i 2 1
</span></span></code></pre></div><p>To verify the new user, use one of the following commands:</p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">racadm getconfig -u john
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">racadm getconfig –g cfgUserAdmin –i 2
</span></span></code></pre></div><p>From here you will use your web browser to enter the iDrac configuration GUI and finish setting up SMTP servers, alerts and other things. I only recommend the above from command line since it gives direct access when the web browser isn’t functions due to bad IP address or invalid username.</p>


guid: https://christitus.com/sfc-scannow-error/
title: SFC scannow error and Windows 10 corruption
link: https://christitus.com/sfc-scannow-error/
hash: ��&A s.k�2�$��7S
attributes: {"enclosures":[]}
content:
<p>If you run into SFC scannow error which cannot be repaired chances are you have some corrupt system components. The fastest way to fix this is by following these steps to repair your system.</p>
<p>Here is an example of the error you are seeing:</p>
<p><img loading="lazy" src="https://christitus.com/images/2015/07/SFC-scannow-error-1.webp" alt="SFC Scannow Error" data-sanitized-class="img-fluid"> </p>
<ul>
<li>Download Windows 10 ISO from <a href="https://www.microsoft.com/en-us/software-download/windows10">https://www.microsoft.com/en-us/software-download/windows10</a></li>
<li>Mount the ISO file by double-clicking on it.</li>
<li>Open ‘Windows Powershell’ or ‘Command Prompt’ with Admin privileges (right click -&gt; Run as Administrator)</li>
<li>Let’s check the System Health first, by running these commands:
<ul>
<li><code>dism /online /cleanup-image /scanhealth</code></li>
<li><code>dism /online /cleanup-image /checkhealth</code></li>
<li><code>dism /online /cleanup-image /restorehealth</code></li>
</ul>
</li>
<li>I’m sure that will give you an error stating that it could not perform the task. Afterward, Let’s specify the file from the ISO so that we can fix it. Run the following command: (Notice that X must be the drive letter on which your system has mounted the ISO)
<ul>
<li><code>DISM /Online /Cleanup-Image /RestoreHealth /source:WIM:X:SourcesInstall.wim:1 /LimitAccess</code></li>
</ul>
</li>
<li>Now let’s repair any damage in the system files, shall we?
<ul>
<li><code>sfc /scannow</code></li>
</ul>
</li>
</ul>
<p>Once this is complete, you will see you now have a functional windows environment again. One other tip that I would suggest is to re-run windows updates because your windows components were damaged and the updates have not been happening.</p>


guid: https://christitus.com/move-website-linux-iis/
title: Move Website from Linux to IIS
link: https://christitus.com/move-website-linux-iis/
hash: T�X��~Mla����B�1
attributes: {"enclosures":[]}
content:
<p>This guide goes over how to Move Website from Linux to IIS. If you’re in the tech field, you probably see moving from Linux to IIS on a WordPress platform and immediately cringed.</p>
<h3 data-sanitized-id="migration">Migration</h3>
<p>The database migration from MySQL to MS SQL is actually pretty easy since you just push it through a large query, but I didn’t really want to mess with it, so I stuck with MySQL.</p>
<p><a href="https://dev.mysql.com/downloads/mysql/">Download and Install MySQL for Windows</a></p>
<p>With that down setting up IIS is also extremely simple now, which is quite surprising given how unfriendly IIS 6 was. The interface is pretty much the same, so you can do it the way you have always known, but now they have added multiple friendly tools in the form of <strong>Microsoft WebMatrix</strong> and <strong>Web Platform Installer</strong>.</p>
<p><a href="https://go.microsoft.com/fwlink/?LinkID=286266">Download Microsoft WebMatrix (official Microsoft Link)</a></p>
<p>Using the Web Platform Install you can just select whatever install you want (WordPress for me) and click install. It grabs all the dependencies and installs them for you, and from here I had a fresh WordPress install. I did a simple import and changed a couple of settings that were reset and was back up and running. Overall a simple migration, and pretty happy with IIS 10 (What happened to IIS 9 we will never know…)</p>


guid: https://christitus.com/encore-bandit-connection/
title: Encore Bandit II/III Connection Instructions
link: https://christitus.com/encore-bandit-connection/
hash: \�z\M�-�z���a@��
attributes: {"enclosures":[]}
content:
<p>These steps will show you how to connect to the encore bandit devices. I recently configured both a bandit II and a bandit III device for using a VPN over satellite. The devices are configured through a 9-pin serial port they call the “Supervisory Port”. I use a basic serial to USB adapter and putty to connect. All the white papers for this device are good, but the setup and login are not as clear as you would think, that said, below are the following steps I used to connect.</p>
<p>Here is all of encore’s documentation for their devices: <a href="http://www.encorenetworks.com/document_catalog.htm">http://www.encorenetworks.com/document_catalog.htm</a></p>
<p><strong>Steps for connection</strong></p>
<ul>
<li>Hook Serial Adapter to your PC <em>Please Note the COM port</em></li>
<li>Run Putty and select Serial for Connection</li>
<li>Type default username and password (encore!1) for both</li>
<li>Configure Device according to Quick Setup</li>
</ul>


guid: https://christitus.com/grant-full-access-public-folders/
title: Grant Full Access to all Public Folders for a user in Exchange
link: https://christitus.com/grant-full-access-public-folders/
hash: p��6� 7o�r�$�
attributes: {"enclosures":[]}
content:
<p>This post goes over how to grant full access to all public folders for a user in Microsoft Exchange. I recently was migrating all public folders from an Exchange 2010 to Office 365 Environment and didn’t have access to some of the folders. Consequently, this solution saved me a lot of time from doing it through a GUI.</p>
<h3 data-sanitized-id="command">Command</h3>
<p>Enter the following in Exchange Management Shell:</p>
<p><code>Get-PublicFolder –Identity "\Root Folder Name" -Recurse | Add-PublicFolderAdministrativePermission -User "ctitus" -AccessRights AllExtendedRights</code></p>
<p>This will recurse the root folder and grant all rights to the user you specify.</p>


guid: https://christitus.com/prevent-autodiscover-exchange-server/
title: Prevent autodiscover on Exchange server after an Office 365 Migration
link: https://christitus.com/prevent-autodiscover-exchange-server/
hash: �w�R�yK ���6ٴ
attributes: {"enclosures":[]}
content:
<p>This article teaches you how to prevent autodiscover from happening on Exchange Server. This is important on an Office 365 migration when you still need to keep your local exchange server from resolving.</p>
<h3 data-sanitized-id="commands">Commands</h3>
<p>First change your local DNS</p>
<p><code>autodiscover.yourdomain.com cname autodiscover.office365.com</code></p>
<p>(Option 1)Next, you need to disable SCP site-wide. I did this performing a GPO Registry edit.</p>
<p><code>HKEY_CURRENT_USER\Software\Microsoft\Office\x.0\Outlook\AutoDiscover</code><br>
Notex.0 in the above registry path corresponds to the Outlook version (16.0 = Outlook 2016, 15.0 = Outlook 2013, 14.0 = Outlook 2010, 12.0 = Outlook 2007).<br>
<code>ExcludeScpLookup DWORD 1</code></p>
<p>(Option 2)Now you can also do this with a Reg file. Name it SCPDisable.reg</p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">Windows Registry Editor Version 5.00
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">[HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Outlook\AutoDiscover]
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">"ExcludeScpLookup"=dword:00000001`
</span></span></code></pre></div><p>The above is Office 2010, Notice the 14.0, and make sure you change it to the version you have.</p>
<p>Now simply create a new profile and your domain should now point to Office 365 by default.</p>


guid: https://christitus.com/target-account-name-domain-controller-error/
title: “Target account name is incorrect” Domain Controller Error
link: https://christitus.com/target-account-name-domain-controller-error/
hash: Z�X�rgk�xp�ؓ�
attributes: {"enclosures":[]}
content:
<p>This article explains how to fix the “Target account name is incorrect” error you are getting on your domain controllers. This usually stems from a system administrator doing a snapshot revert on the Domain Controller which messes up the KDC service and domain replication. It also can happen if you had a DC offline for a long time 30+ days.</p>
<h3 data-sanitized-id="commands">Commands</h3>
<ul>
<li>Stop and disable the Key Distribution Center (KDC) service on the troubled domain controller</li>
</ul>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">net stop kdc
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">sc config "kdc" start= disabled
</span></span></code></pre></div><p><em>Please Note: space is REQUIRED after start=</em><br>
<em>Alternatively, you can do this from the Services Panel</em></p>
<ul>
<li>
<p>Purge the ticket cache on the local domain controller.
<code>klist purge</code><br>
_Note: you can use <code>klist tickets</code> to view tickets before purging them</p>
<ul>
<li>
<p>Afterward, Reboot Troubled Domain Controller</p>
</li>
<li>
<p>Reset the troubled domain controller’s account password to the primary domain controller (PDC) emulator master using netdom /resetpwd. Find PDC using: netdom query fsmo</p>
<ul>
<li><code>netdom /RESETPWD /s:pdcserver.domain.local /ud:domain\Administrator /pd:*</code></li>
</ul>
</li>
<li>
<p>Synchronize the domain directory partition of the replication partner with the PDC emulator master</p>
<ul>
<li><code>repadmin /kcc</code></li>
</ul>
</li>
<li>
<p>Once more, Reboot the Troubled DC and start and enable the KDC on the local domain controller:</p>
</li>
</ul>
</li>
</ul>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">sc config "kdc" start= auto
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">net start KDC
</span></span></code></pre></div><p>Typically I wait about 5-10 minutes after this and start doing checks to see if it is now replicating properly. You can also force a replicate using repadmin /replicate but usually not necessary. In the end, make sure you check to make you aren’t getting the “Target account name is incorrect” error anymore.</p>


guid: https://christitus.com/winsxs-free-space-server/
title: Cleanup Server WinSxS Free Space on Server 2008 and Server 2012
link: https://christitus.com/winsxs-free-space-server/
hash: L�J�(����Naw�_
attributes: {"enclosures":[]}
content:
<p>Run the following commands if you are running low on C: drive space. Generally, this is caused by windows updates and you need to clear WinSxS free space. Do this in your PowerShell prompt and you will free up a substantial amount of space.</p>
<p><em>Please Note: You have to run updates on Windows Server 2008 if you are far behind and these commands don’t exist!</em></p>
<p>MASTER CLEANUP: (Run this First)</p>
<p><code>Dism.exe /online /Cleanup-Image /SPSuperseded</code></p>
<p>FOLLOWUP:</p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">Windows 2008 Use: Dism.exe /online /Cleanup-Image /StartComponentCleanup
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">Windows 2012 Use: Dism.exe /online /Cleanup-Image /StartComponentCleanup /ResetBase
</span></span></code></pre></div>


guid: https://christitus.com/windows-10-iis-rewrite-error/
title: Windows 10 IIS: C:\WINDOWS\system32\inetsrv\rewrite.dll failed to load
link: https://christitus.com/windows-10-iis-rewrite-error/
hash: �D��[dy���� ��
attributes: {"enclosures":[]}
content:
<p>This article shows you what to do if you get the rewrite.dll failed to load in Windows 10 event viewer for Windows 10 IIS.</p>
<h3 data-sanitized-id="commands">Commands</h3>
<p>Checked Event viewer when my website Showed up with</p>
<p><code>Service Unavailable 503 error</code></p>
<p>The Event Viewer Error was</p>
<p><code>The Module DLL C:\WINDOWS\system32\inetsrv\rewrite.dll failed to load</code></p>
<p>I went into Add/Remove Programs (Start -&gt; Run-&gt; appwiz.cpl) and simply repaired the following program</p>
<p><code>IIS Url Rewrite Module 2.0</code></p>
<h3 data-sanitized-id="troubleshootingdownload">Troubleshooting/Download</h3>
<p>Afterward, restart your WWW Service in services.msc and your website will now be working. If you are unable to repair the IIS rewrite module using Add/Remove Programs, you will need to redownload them from Microsoft.</p>
<p><a href="https://www.microsoft.com/en-us/download/details.aspx?id=47337">IIS Url Rewrite Module 2.0 for Windows 10</a></p>


guid: https://christitus.com/force-active-directory-sync/
title: Force active directory sync to Office 365 with Azure ADSync
link: https://christitus.com/force-active-directory-sync/
hash: R�Q.0 PT �P� �
attributes: {"enclosures":[]}
content:
<p>Use the following from an Elevated Powershell Prompt to force active directory sync to your O365 admin portal. You will be performing this on the server where Azure AD Sync is installed, however, when running this command you will need to wait 5 minutes before checking your portal to verify it is working. In larger environments, this can take a longer time.</p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">Import-Module “C:\Program Files\Microsoft Azure AD Sync\Bin\ADSync\ADSync.psd1”
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">Start-ADSyncSyncCycle -PolicyType Delta
</span></span></code></pre></div><p>This is great for forcing a sync of time-sensitive distribution list updates or user updates. If you find yourself doing this frequently make a PowerShell script for ease of access.</p>


guid: https://christitus.com/exclude-shared-mailboxes-exchange/
title: Exclude shared mailboxes from Dynamic Distribution Group
link: https://christitus.com/exclude-shared-mailboxes-exchange/
hash: ������f�W �K��B
attributes: {"enclosures":[]}
content:
<p>This shows you how to exclude shared mailboxes from a Dynamic Distribution Group in Exchange Online. We will be using Powershell to make sure your shared mailboxes don’t get spam in them.</p>
<p><img loading="lazy" src="https://christitus.com/images/2016/10/exclude-shared-mailboxes.webp" alt="Exclude Shared Mailboxes" data-sanitized-class="img-fluid"> </p>
<h3 data-sanitized-id="commands">Commands</h3>
<h4 data-sanitized-id="connect-to-o365-in-ps">Connect to O365 in PS:</h4>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">$UserCredential = Get-Credential
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">Import-PSSession $Session
</span></span></code></pre></div><h4 data-sanitized-id="exclude-shared-mailboxes-with-this-filter-command">Exclude Shared Mailboxes with this filter command:</h4>
<p><code>set-DynamicDistributionGroup -Name "all@yourcompany.com" -RecipientFilter {((RecipientType -eq 'UserMailbox') -and -not (RecipientTypeDetailsValue -eq 'SharedMailbox'))}</code></p>
<h3 data-sanitized-id="conclusion">Conclusion</h3>
<p>Afterward, Verify in Exchange Admin Console. You always want to prevent your shared mailboxes from getting spammed in a distribution group. Consequently, I’d highly recommend setting a requirement to send to-these dynamic mailboxes. This will prevent every employee from sending emails to everyone, which will be a bad thing.</p>


guid: https://christitus.com/update-netscaler-vpx/
title: Updating LDAP Credentials for Netscaler VPX 1000
link: https://christitus.com/update-netscaler-vpx/
hash: ��(z��ҷ(�'�>�I�
attributes: {"enclosures":[]}
content:
<p>This article shows you how to update LDAP credentials on the Netscaler VPX 1000. It goes over logging in, editing virtual server, and applying settings.</p>
<h3 data-sanitized-id="login-to-the-netscaler-device">Login to the NetScaler Device</h3>
<p>Default User: nsroot Pass: nsroot (or password you changed it to)</p>
<h3 data-sanitized-id="go-to-netscaler-gateway-virtual-server-controlling-your-logins">Go to Netscaler gateway virtual server controlling your logins</h3>
<p><img loading="lazy" src="https://christitus.com/images/2016/11/netscaler1.webp" alt="Netscaler1" data-sanitized-class="img-fluid"> </p>
<h3 data-sanitized-id="click-on-ldap-policy-and-select-edit-server">Click on LDAP Policy and select Edit Server</h3>
<p><img loading="lazy" src="https://christitus.com/images/2016/11/netscaler2.webp" alt="Netscaler2" data-sanitized-class="img-fluid"> </p>
<h3 data-sanitized-id="update-the-credentials-under-connection-settings-and-also-test-the-new-settings">Update the credentials under connection settings, and also test the new settings.</h3>


guid: https://christitus.com/cloud-migration/
title: Cloud migration hosting in Google, Amazon, or Microsoft
link: https://christitus.com/cloud-migration/
hash: V�Jg�bK�u�t���
attributes: {"enclosures":[]}
content:
<h3 data-sanitized-id="moving-to-the-cloud">Moving to the Cloud</h3>
<p>The following article outlines what it takes for a cloud migration to Google Cloud Compute, Amazon Web Services, or Microsoft Azure means. Most businesses want to move to the “cloud” but have no idea what that means.</p>
<p>If you’re a small business you typically have a couple computers scattered around with one storage device. If you’re a medium or large business you probably already have several servers at a location in a contract. Moving to the cloud is often pitched to businesses using Software-as-a-Service replacing the current system with a web application that runs through your browser. While this is ideal, in most instances it isn’t practical. So you keep paying for a bloated IT infrastructure that is dated, isn’t as reliable, and unable to change with your business needs.</p>
<p><img loading="lazy" src="https://christitus.com/images/2017/02/pc-solution.webp" alt="PC Solution" data-sanitized-class="img-fluid"> </p>
<h3 data-sanitized-id="performing-a-cloud-migration">Performing a Cloud Migration</h3>
<p>Leverage Google Cloud Compute, Amazon Web Services, or Microsoft Azure to perform a cloud migration. Moving your servers will often end up costing between $100 – $400 per server a month depending on your environment. When you factor in that there is no capital expenditure, maintenance, or power costs this is a far cheaper solution than your current environment. You also gain a <strong>SUBSTANTIAL</strong> increase in flexibility, performance, and reliability. So why hasn’t everyone transitioned to these services?</p>
<p><img loading="lazy" src="https://christitus.com/images/2017/02/tangled.webp" alt="tangled" data-sanitized-class="img-fluid"> </p>
<h3 data-sanitized-id="migration-pains">Migration Pains</h3>
<p>The main issue is getting a cloud migration completed. It’s hard to find businesses, technicians, or engineers that will do the migration. In the end, you should be paying these companies directly.</p>
<p><em>Pitfalls</em></p>
<ol>
<li>Contracting a company that uses their own hardware and you pay them for substandard service and equipment on a monthly basis.</li>
<li>Under-estimating the extended downtime that is required for moving to these services. If you have 30+ servers it will take months for preparation, transfer time, and deployment.</li>
<li>Degraded service if you have to work in a hybrid environment. Working through a VPN for an extended time that it takes to complete the full migration.</li>
<li>Mass Storage – Most of the cost of using these services come from storage, and typically it’s not till you hit the petabytes that you’d run into ROI issues. As a general rule of thumb, anything less than 1000 Terabytes is more cost-effective using these services.</li>
</ol>
<h3 data-sanitized-id="conclusion">Conclusion</h3>
<p>I think every business should be leveraging this technology. The larger the business the harder the cloud migration will be. Small businesses I’ve done in the course of a day, whereas larger businesses take considerably longer. Stay the course and keep searching for talent capable of helping with this transition. I enjoy using all three of these major players in the market, however, for Website Hosting and Linux boxes I like Google Cloud Compute the most, and for businesses already running Office 365 Microsoft Azure makes for the easiest transition.</p>


guid: https://christitus.com/benchmark-dns-server/
title: How to choose DNS Server by benchmarking them
link: https://christitus.com/benchmark-dns-server/
hash: Y��ImP�c�(�=1�
attributes: {"enclosures":[]}
content:
<p>By default, your DNS Server is set to your ISP’s DNS and this SLOWS down your internet, due to the fact, they are poorly managed and have horrid performance. This shows you how to choose the fastest DNS Server, but results will vary depending on the location. Running this benchmark will tell you which ones are the best to use.</p>
<h2 data-sanitized-id="finding-the-fastest"><strong>Finding the Fastest</strong></h2>
<p>Go to <a href="https://www.grc.com/dns/benchmark.htm">https://www.grc.com/dns/benchmark.htm</a> and download the benchmark tool. From the list make sure you put in all your DNS Servers you want to test. Level3, Google, OpenDNS, and the usual suspects are already in there. I also recommend right-clicking and removing the dead or stale DNS Server. I tossed in free DNS Filtering servers like Norton ConnectSafe and Comodo Secure DNS as well. These performed the worst in speed tests and I recommend not using them in a business environment. If you need DNS filtering and have the budget using OpenDNS (Cisco Umbrella) is going to be your best bet.</p>
<p>Here are my results, Enjoy!</p>
<p><img loading="lazy" src="https://christitus.com/images/2017/03/dnsresults.webp" alt="DNS Results" data-sanitized-class="img-fluid"> </p>
<ul>
<li>Red = Cached Time, Green = Uncached Time, and Blue = dotcom Time</li>
<li>Grey Dots = Filters bad domain names by default, Green Dots = No filtering</li>
</ul>


guid: https://christitus.com/run-as-administrator/
title: Launching a startup program to run as administrator
link: https://christitus.com/run-as-administrator/
hash: �n$ˇp�!�Z~^��
attributes: {"enclosures":[]}
content:
<p>The following script shows you how to launch a startup program to run as administrator in Windows 10. This fixes many programs that require elevation and you don’t want to launch manually every time.</p>
<p>Almost every online tutorial I came across said to run it as a scheduled task. This is very cumbersome and I hate it, however using the following method is easier and saves you time.</p>
<p>Create a Text file in shell:startup and put the following in it.</p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">Set WshShell = CreateObject("WScript.Shell" )
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">WshShell.Run chr(34) &amp; "C:\Program Files (x86)\File\Program.exe" &amp; Chr(34), 0
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">Set WshShell = Nothing
</span></span></code></pre></div><p>Now save the file as ProgramName.vbs</p>
<p>You are done! Reboot and see that program launch.</p>


guid: https://christitus.com/spooler-subsystem-app-cpu-usage/
title: Spooler subsystem app high CPU usage on Windows 10
link: https://christitus.com/spooler-subsystem-app-cpu-usage/
hash: ,� ������B/��G{�
attributes: {"enclosures":[]}
content:
<p>Perform the following steps to solve the Spooler subsystem app high CPU usage. I recently updated a computer to Windows 10 and found that the spooler service was using a lot of resources.</p>
<h2 data-sanitized-id="the-solution">The Solution</h2>
<ul>
<li>Open up command prompt as administrator and type the following</li>
</ul>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">net stop spooler
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">del /Q /F /S "%systemroot%\System32\Spool\Printers\*.*"
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">net start spooler
</span></span></code></pre></div><h2 data-sanitized-id="conclusion">Conclusion</h2>
<p>Now check task manager again and verify the Spooler subsystem app is now at 0% usage. Alternatively, you can disable the spooler service in services (Start -&gt; Run -&gt; Type: services.msc) and this will make sure it doesn’t run, however, it also means you can’t print.</p>


guid: https://christitus.com/taking-databases-offline-sql-query/
title: Taking Databases Offline and/or Dropping through SQL Query
link: https://christitus.com/taking-databases-offline-sql-query/
hash: �Ta�m���6�Kv�Z
attributes: {"enclosures":[]}
content:
<p>The following SQL query is for taking databases offline, drop the offline databases, or bring them all back online. This affects every database in your SQL instance, so be very careful when using these. The following three queries will save you a considerable amount of time if repurposing an instance.</p>
<h2 data-sanitized-id="taking-databases-offline-and-then-dropping-them">Taking databases offline and then dropping them</h2>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="gdscript3" data-sanitized-class="language-gdscript3"><span data-sanitized-class="line"><span data-sanitized-class="cl"><span data-sanitized-class="n">use</span> <span data-sanitized-class="n">master</span><span data-sanitized-class="p">;</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"><span data-sanitized-class="n">declare</span> <span data-sanitized-class="err">@</span><span data-sanitized-class="n">nsql</span> <span data-sanitized-class="n">nvarchar</span><span data-sanitized-class="p">(</span><span data-sanitized-class="nb">max</span><span data-sanitized-class="p">);</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"><span data-sanitized-class="n">select</span> <span data-sanitized-class="err">@</span><span data-sanitized-class="n">nsql</span><span data-sanitized-class="o">=</span><span data-sanitized-class="n">coalesce</span><span data-sanitized-class="p">(</span><span data-sanitized-class="err">@</span><span data-sanitized-class="n">nsql</span><span data-sanitized-class="o">+</span><span data-sanitized-class="n">CHAR</span><span data-sanitized-class="p">(</span><span data-sanitized-class="mi">13</span><span data-sanitized-class="p">)</span><span data-sanitized-class="o">+</span><span data-sanitized-class="n">CHAR</span><span data-sanitized-class="p">(</span><span data-sanitized-class="mi">10</span><span data-sanitized-class="p">),</span><span data-sanitized-class="s1">''</span><span data-sanitized-class="p">)</span><span data-sanitized-class="o">+</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"><span data-sanitized-class="s1">'ALTER DATABASE ['</span><span data-sanitized-class="o">+</span><span data-sanitized-class="n">name</span><span data-sanitized-class="o">+</span><span data-sanitized-class="s1">'] SET OFFLINE WITH NO_WAIT;'</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"><span data-sanitized-class="n">from</span> <span data-sanitized-class="n">master</span><span data-sanitized-class="o">..</span><span data-sanitized-class="n">sysdatabases</span> <span data-sanitized-class="n">where</span> <span data-sanitized-class="n">sid</span> <span data-sanitized-class="o">&lt;&gt;</span> <span data-sanitized-class="mh">0x01</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"><span data-sanitized-class="n">exec</span> <span data-sanitized-class="p">(</span><span data-sanitized-class="err">@</span><span data-sanitized-class="n">nsql</span><span data-sanitized-class="p">)</span><span data-sanitized-class="err">`</span>
</span></span></code></pre></div><p>Once all databases are offline you can drop them to clear out the entire instance with this SQL query.<br>
<em>Note: This is extremely destructive so please use this with care.</em></p>
<h1 data-sanitized-id="warning-running-this-will-destroy-all-databases"><em>WARNING</em> Running this WILL DESTROY ALL DATABASES!!!</h1>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="gdscript3" data-sanitized-class="language-gdscript3"><span data-sanitized-class="line"><span data-sanitized-class="cl"><span data-sanitized-class="n">use</span> <span data-sanitized-class="n">master</span><span data-sanitized-class="p">;</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"><span data-sanitized-class="n">declare</span> <span data-sanitized-class="err">@</span><span data-sanitized-class="n">nsql</span> <span data-sanitized-class="n">nvarchar</span><span data-sanitized-class="p">(</span><span data-sanitized-class="nb">max</span><span data-sanitized-class="p">);</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"><span data-sanitized-class="n">select</span> <span data-sanitized-class="err">@</span><span data-sanitized-class="n">nsql</span><span data-sanitized-class="o">=</span><span data-sanitized-class="n">coalesce</span><span data-sanitized-class="p">(</span><span data-sanitized-class="err">@</span><span data-sanitized-class="n">nsql</span><span data-sanitized-class="o">+</span><span data-sanitized-class="n">CHAR</span><span data-sanitized-class="p">(</span><span data-sanitized-class="mi">13</span><span data-sanitized-class="p">)</span><span data-sanitized-class="o">+</span><span data-sanitized-class="n">CHAR</span><span data-sanitized-class="p">(</span><span data-sanitized-class="mi">10</span><span data-sanitized-class="p">),</span><span data-sanitized-class="s1">''</span><span data-sanitized-class="p">)</span><span data-sanitized-class="o">+</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"><span data-sanitized-class="s1">'DROP DATABASE ['</span><span data-sanitized-class="o">+</span><span data-sanitized-class="n">name</span><span data-sanitized-class="o">+</span><span data-sanitized-class="s1">'];'</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"><span data-sanitized-class="n">from</span> <span data-sanitized-class="n">master</span><span data-sanitized-class="o">..</span><span data-sanitized-class="n">sysdatabases</span> <span data-sanitized-class="n">where</span> <span data-sanitized-class="n">sid</span> <span data-sanitized-class="o">&lt;&gt;</span> <span data-sanitized-class="mh">0x01</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"><span data-sanitized-class="n">exec</span> <span data-sanitized-class="p">(</span><span data-sanitized-class="err">@</span><span data-sanitized-class="n">nsql</span><span data-sanitized-class="p">)</span>
</span></span></code></pre></div><h2 data-sanitized-id="use-the-following-sql-query-to-take-all-databases-online">Use the following SQL query to take all databases online</h2>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="gdscript3" data-sanitized-class="language-gdscript3"><span data-sanitized-class="line"><span data-sanitized-class="cl"><span data-sanitized-class="n">use</span> <span data-sanitized-class="n">master</span><span data-sanitized-class="p">;</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"><span data-sanitized-class="n">declare</span> <span data-sanitized-class="err">@</span><span data-sanitized-class="n">nsql</span> <span data-sanitized-class="n">nvarchar</span><span data-sanitized-class="p">(</span><span data-sanitized-class="nb">max</span><span data-sanitized-class="p">);</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"><span data-sanitized-class="n">select</span> <span data-sanitized-class="err">@</span><span data-sanitized-class="n">nsql</span><span data-sanitized-class="o">=</span><span data-sanitized-class="n">coalesce</span><span data-sanitized-class="p">(</span><span data-sanitized-class="err">@</span><span data-sanitized-class="n">nsql</span><span data-sanitized-class="o">+</span><span data-sanitized-class="n">CHAR</span><span data-sanitized-class="p">(</span><span data-sanitized-class="mi">13</span><span data-sanitized-class="p">)</span><span data-sanitized-class="o">+</span><span data-sanitized-class="n">CHAR</span><span data-sanitized-class="p">(</span><span data-sanitized-class="mi">10</span><span data-sanitized-class="p">),</span><span data-sanitized-class="s1">''</span><span data-sanitized-class="p">)</span><span data-sanitized-class="o">+</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"><span data-sanitized-class="s1">'ALTER DATABASE ['</span><span data-sanitized-class="o">+</span><span data-sanitized-class="n">name</span><span data-sanitized-class="o">+</span><span data-sanitized-class="s1">'] SET ONLINE WITH NO_WAIT;'</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"><span data-sanitized-class="n">from</span> <span data-sanitized-class="n">master</span><span data-sanitized-class="o">..</span><span data-sanitized-class="n">sysdatabases</span> <span data-sanitized-class="n">where</span> <span data-sanitized-class="n">sid</span> <span data-sanitized-class="o">&lt;&gt;</span> <span data-sanitized-class="mh">0x01</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"><span data-sanitized-class="n">exec</span> <span data-sanitized-class="p">(</span><span data-sanitized-class="err">@</span><span data-sanitized-class="n">nsql</span><span data-sanitized-class="p">)</span>
</span></span></code></pre></div>


guid: https://christitus.com/changing-file-permissions/
title: Changing file permissions using PowerShell
link: https://christitus.com/changing-file-permissions/
hash: H�u����=� ��
attributes: {"enclosures":[]}
content:
<p>Use the following script for changing file permissions using PowerShell. I use this script when command line takeown and icacls fail. Obviously, run from an elevated PowerShell prompt or by typing ‘powershell’ from elevated cmd.</p>
<h2 data-sanitized-id="the-script">The Script</h2>
<p>Change $folder to the base directory you want for changing permissions. <br>
<em>Please note, you can use network UNC paths for this or a simple C:.</em></p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">$folder = "\\homeserver\users\"
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">$users = get-childitem $folder
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">Foreach ($user in $users) {
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">$acl = Get-Acl $user.FullName
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">$acl.SetOwner([System.Security.Principal.NTAccount]"$user")
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">set-acl $user.FullName $acl -Verbose
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">$subFolders = Get-ChildItem $user.FullName -Directory -Recurse
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">Foreach ($subFolder in $subFolders) {
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">$acl = Get-Acl $subFolder.FullName
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">$acl.SetOwner([System.Security.Principal.NTAccount]"$user")
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">set-acl $subFolder.FullName $acl -Verbose
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">$subFiles = Get-ChildItem $user.FullName -File -Recurse
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">Foreach ($subFile in $subFiles) {
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">$acl = Get-Acl $subFile.FullName
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">$acl.SetOwner([System.Security.Principal.NTAccount]"$user")
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">set-acl $subFile.FullName $acl -Verbose
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">}
</span></span></code></pre></div><p>I’ve never had takeown fail on local disks, but I have found that I needed to resort to using a PowerShell script when doing this through a network location. It’s a very powerful script, however always be careful when running this. Be sure to always test this in a subdirectory first. This can be catastrophic for a company with millions of files and folder to reset the permission on, therefore be very careful!</p>


guid: https://christitus.com/windows-server-2016-core-remote/
title: How to remotely access Window Server 2016 Core in PowerShell
link: https://christitus.com/windows-server-2016-core-remote/
hash: MK���Pz~zq I���
attributes: {"enclosures":[]}
content:
<p>This walkthrough shows you how to remotely access Window Server 2016 Core in PowerShell. Windows Server 2016 Core is a great minimal install of windows server but doesn’t come with any desktop experience. This means we will be doing everything via command prompt or PowerShell for the initial setup. The great thing is you use Powershell and RSAT from a Windows 10 machine and working on the server is a snap. You get the ease of administration and the reliability and compact design of Core.</p>
<h2 data-sanitized-id="enable-psremote-powershell-remote">Enable PSRemote (Powershell Remote)</h2>
<p>On Host – Windows Server 2016 Core<br>
<code>Enable-PSRemoting -Force</code></p>
<p>Your Workstation <br>
<code>Enter-PSSession -ComputerName 10.0.0.2</code> <br>
<em>Note: you can use netbios name here as well</em></p>
<p>For any troubleshooting we will need to do make sure the initial setup is done by typing, <code>sconfig</code> once this has been completed you will have set the static IP, opened remote access, activated windows, and ran windows update.</p>


guid: https://christitus.com/moving-unifi-access-point/
title: Moving Unifi Access Point to another Unifi Controller
link: https://christitus.com/moving-unifi-access-point/
hash: �PM9{����d�-�}�
attributes: {"enclosures":[]}
content:
<p>This walkthrough goes over moving Unifi access point to another Unifi controller. To remove APs from a Unifi Controller you need to reset the APs and then either discover them or manually SSH set-inform the devices.</p>
<h3 data-sanitized-id="first-reset-the-ap">First Reset the AP</h3>
<ul>
<li>Use Terminal or SSH (Either in existing Controller -&gt; Manage Device -&gt; Open Terminal or Putty)
<ul>
<li>Type: <code>syswrapper.sh restore-default</code><br>
OR</li>
<li>Reset the Unifi AP by the old paperclip method if you can’t putty or use existing controller</li>
</ul>
</li>
</ul>
<p><img loading="lazy" src="https://christitus.com/images/2018/06/reset-unifi.webp" alt="unifi reset" data-sanitized-class="img-fluid"> </p>
<h3 data-sanitized-id="second-discover-device-or-manually-set-inform">Second discover device or manually set-inform</h3>
<p>On the new controller try to discover the now factory reset APs and with any luck they will show up. However in big environments I typically can never get them to be discovered so I will show you the manual method.</p>
<p>Find the IP of the AP (You can easily grab this by looking at old controller OR using advanced IP Scanner. Note: match MAC address if scanning)</p>
<ul>
<li>
<p>Putty into the AP (Launch Putty type IP, and Username/Password is factory ubnt/ubnt)</p>
<ul>
<li><code>set-inform http://ip-of-controller:8080/inform</code></li>
</ul>
</li>
<li>
<p>Adopt AP in new controller webpage</p>
<ul>
<li>Type AGAIN: <code>set-inform http://ip-of-controller:8080/inform</code></li>
</ul>
</li>
</ul>
<p><img loading="lazy" src="https://christitus.com/images/2018/06/unifi-set-inform.webp" alt="unifi set-inform" data-sanitized-class="img-fluid"> </p>
<p>We are now done moving Unifi access point on to the new Controller, and as a result, will be in the device list. From here you will be able to manage it, upgrade firmware, and do all the configuration options needed.</p>


guid: https://christitus.com/repair-windows-boot-partition/
title: Repair Windows Boot Partition | Includes files and partitioning
link: https://christitus.com/repair-windows-boot-partition/
hash: �.��~���L<�0�S
attributes: {"enclosures":[]}
content:
<p>This walkthrough shows you how to repair windows boot partition and boot from an existing windows installation without reinstalling windows.</p>
<p>Recently I had an old server with a FAT32 system reserved partition and a bunch of extra partitions. I have already moved all the data off the server and it was ready for decommissioning. Before, I did this I wanted to go ahead and remove all these old partitions and just leave the C: Drive with the Windows installation then rebuild the System Reserved partition as NTFS as an exercise. Many backup programs have issues doing block level images with FAT32 partitions OR you need to do a physical to virtual setup. For me, I wanted to decommission the hardware but be able to spin up this server in a virtual environment if needed.</p>
<h2 data-sanitized-id="backup-before-attempting-this">Backup Before Attempting This!</h2>
<h3 data-sanitized-id="step-1-delete-old-partitions-and-create-new-ones">Step 1: Delete old partitions and create new ones</h3>
<ul>
<li>Boot into your partition manager of choice (I used Parted Magic <a href="https://partedmagic.com/">https://partedmagic.com/</a> ) GParted</li>
<li>Delete extra partitions including the old FAT32 system partition (These all should be very small between 100 MB and up to 2 GB)</li>
<li>Create new NTFS partition with 512 MB of space and label it System Reserved</li>
<li>Shutdown</li>
</ul>
<h3 data-sanitized-id="step-2-setup-partitions-with-the-correct-drive-letters">Step 2: Setup Partitions with the correct drive letters</h3>
<ul>
<li>Launch Windows 10 Install disc / usb</li>
<li>Shift+F10 once you see language select to bring up command prompt</li>
<li>Launch <code>DISKPART</code></li>
<li>select volume with 512MB (ex: <code>select vol 0</code>)</li>
<li><code>assign letter=G:</code> (or any letter that isn’t taken that is NOT C:)</li>
<li><code>exit</code> OR If Windows operating system is NOT on C:</li>
<li><code>select volume</code> with windows installation on it</li>
<li><code>assign letter=C:</code></li>
<li><code>exit</code></li>
</ul>
<p><em>Example output:</em></p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">diskpart
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">select disk 0
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">list vol
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">select vol 0 &lt;---500 MB Partition
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">assign letter=G:
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">select vol 1 &lt;--- Large Partition with Windows Install on it
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">assign letter=C:
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">exit
</span></span></code></pre></div><p>Partitions are done. Now time to fix problems with the “type” of partition – By forcing all partitions to be NTFS NT60</p>
<p><code>bootsect.exe /nt60 all /force</code></p>
<h5 data-sanitized-id="step-3-copy-boot-records-fix-mbr-and-rebuild-bcd">Step 3: Copy Boot Records, Fix MBR, and Rebuild BCD</h5>
<p>Rebuild new system reserved partition with EFI and regular boot files</p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">bcdboot c:\Windows /s &lt;boot letter of System Reserved Partion&gt;: /f ALL
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">bcdboot c:\Windows /s G: /f ALL
</span></span></code></pre></div><ul>
<li>Now we can finally rebuild the bcd and master boot record like you see in so many online guides</li>
<li>You can verify the system is seeing the windows installation by doing a <code>bootrec /scanos</code> and then be running through the rest of the commands to do the rest of the repairs</li>
</ul>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">bootrec /scanos &lt;---Verify it sees the windows install
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">bootrec /fixmbr
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">bootrec /fixboot &lt;----Pick the installation will mirror /scanos bootrec /rebuildbcd
</span></span></code></pre></div><ul>
<li>Reboot and you are done!</li>
</ul>
<h2 data-sanitized-id="video">Video</h2>
<div>
<iframe allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/F72D7uL6cZg?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" title="YouTube video" sandbox="allow-scripts allow-same-origin"></iframe>
</div>


guid: https://christitus.com/debloat-windows-10/
title: Debloat Windows 10
link: https://christitus.com/debloat-windows-10/
hash: dy�o�� �$�W_h�A
attributes: {"enclosures":[]}
content:
<p>Trying to Debloat Windows 10 is getting ridiculous and as a system admin it is soul crushing to see all that performance go to waste on the botched attempt by Microsoft to do an Appstore and its apps (I’m looking at you Candy Crush). Luckily some admins have worked tirelessly to give us a solution that works considerably well. Lets Start!</p>
<h2 data-sanitized-id="october-2020-update">October 2020 Update</h2>
<p>If you are coming here from the YouTube video I have taken all the scripts below and a system admin script I used a lot in the past to make a streamlined debloat script. This script will optimize Windows and can be run multiple times if you have an update ruin all the optimizations. I have also made it very easy to launch. Here is the source files: <a href="https://github.com/ChrisTitusTech/win10script">https://github.com/ChrisTitusTech/win10script</a></p>
<p>If you want to just run this on any system, you can easily copy and paste this into a Admin Powershell prompt and watch it do everything for you. It does have two prompts based on user feedback. Let me know what you think below!</p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="gdscript3" data-sanitized-class="language-gdscript3"><span data-sanitized-class="line"><span data-sanitized-class="cl"><span data-sanitized-class="n">iex</span> <span data-sanitized-class="p">((</span><span data-sanitized-class="n">New</span><span data-sanitized-class="o">-</span><span data-sanitized-class="ne">Object</span> <span data-sanitized-class="n">System</span><span data-sanitized-class="o">.</span><span data-sanitized-class="n">Net</span><span data-sanitized-class="o">.</span><span data-sanitized-class="n">WebClient</span><span data-sanitized-class="p">)</span><span data-sanitized-class="o">.</span><span data-sanitized-class="n">DownloadString</span><span data-sanitized-class="p">(</span><span data-sanitized-class="s1">'https://git.io/JJ8R4'</span><span data-sanitized-class="p">))</span>
</span></span></code></pre></div><p>What this script does</p>
<ul>
<li>Installs Chocolatey, Notepad++, Irfanview, VLC, Java, and asks if you want Adobe Reader or Brave.</li>
<li>Removes all Windows Store Apps EXCEPT office, xbox, and WSL.</li>
<li>Removed Telemetry</li>
<li>Disables Cortana</li>
<li>Deletes various schedules tasks that rebloat the system</li>
<li>Removes Other Bloatware (Candy Crush, etc.)</li>
<li>Fixes problems that other scripts causes (lock screen and personalization options restricted)</li>
</ul>
<p>Based on User feedback, this no longer uninstalls OneDrive or Office.</p>
<h2 data-sanitized-id="old-2018-instructions">Old 2018 Instructions</h2>
<ul>
<li>Right Click Windows Button -&gt;Select Powershell Prompt (Admin) OR Select Command Prompt (Admin)
<ul>
<li><em>Note: If you don’t have PowerShell and only command prompt open command prompt (admin) and type “<em>powershell</em>“</em></li>
</ul>
</li>
<li>Change Execution policy to allow a debloat script to run in Powershell <code>Set-ExecutionPolicy Unrestricted</code></li>
<li>Run the script from the following Github Repository. The person running this GitHub has been updating this script for a while and is a godsend. (Source: <a href="https://github.com/Sycnex/Windows10Debloater">https://github.com/Sycnex/Windows10Debloater</a>) Use Windows10Debloater.ps1from the location above
<ul>
<li><em>During installation select yes to debloat windows 10, select yes to remove OneDrive, and Yes to reboot after it finishes. Below is the image of performing these tasks.</em></li>
</ul>
</li>
</ul>
<p>[<img loading="lazy" src="https://christitus.com/images/2018/09/debloatwin10cmd.webp" alt="debloatwin10cmd" data-sanitized-class="img-fluid"> </p>
<h2 data-sanitized-id="video-walkthrough">Video Walkthrough</h2>
<div>
<iframe allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/q4ziE5Am0pM?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" title="YouTube video" sandbox="allow-scripts allow-same-origin"></iframe>
</div>


guid: https://christitus.com/installing-linux-subsystem/
title: Installing Linux Subsystem for Windows 10
link: https://christitus.com/installing-linux-subsystem/
hash: -�D�.h&��w
attributes: {"enclosures":[]}
content:
<p>The following video goes over installing Linux Subsystem on Windows 10. Most notably it allows you to run Linux terminal commands in Windows 10 without having a virtual machine or dual boot into a Linux operating system.</p>
<div>
<iframe allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/RriP3LmuKNA?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" title="YouTube video" sandbox="allow-scripts allow-same-origin"></iframe>
</div>
<h2 data-sanitized-id="enable-linux-subsystem-feature">Enable Linux Subsystem Feature</h2>
<p><code>cd ~ Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux</code><br>
<em>Note: Perform in PowerShell</em></p>
<h3 data-sanitized-id="powershell-installation-method">PowerShell Installation Method</h3>
<p><code>Invoke-WebRequest -Uri https://aka.ms/wsl-ubuntu-1604 -OutFile Ubuntu.appx -UseBasicParsing Rename-Item -Path ~/Ubuntu.appx -NewName Ubuntu.zip Expand-Archive ~/Ubuntu.zip ~/Ubuntu cd Ubuntu ./ubuntu.exe</code></p>
<h3 data-sanitized-id="microsoft-store-installation-method">Microsoft Store Installation Method</h3>
<ul>
<li>Open the Microsoft Store</li>
<li>Browse to Ubuntu-1604 and subsequently click the Install button</li>
</ul>
<h2 data-sanitized-id="conclusion">Conclusion</h2>
<p>In Closing The Linux Subsystem is a welcomed addition to Windows 10 because most things that come from the Microsoft store are garbage. Above all using this will give you the ability to check out and compile many GitHub projects. It is now one of the first options I enable when I do fresh installs of Windows 10 due to the fact Linux is not practical all the time. Leave any Questions and Comments below and I’ll get back to you. I regularly publish on</p>


guid: https://christitus.com/google-chrome-update-69-address-bar-and-how-to-fix-it/
title: Google Chrome missing www and how to fix it
link: https://christitus.com/google-chrome-update-69-address-bar-and-how-to-fix-it/
hash: o���XE���"i��V�<
attributes: {"enclosures":[]}
content:
<p>Chrome started rolling out update 69 at the beginning of this month (September 2018) causing a missing www in the address bar. There are two things this update did that you need to be aware of.</p>
<h2 data-sanitized-id="google-chrome-update-69-changes">Google Chrome Update 69 Changes</h2>
<ul>
<li><strong>Show trivial sub-domains (missing www in the address bar)</strong>
<ul>
<li>Fix: Type this in your address bar:</li>
<li><strong>chrome://flags/#omnibox-ui-hide-steady-state-url-scheme-and-subdomains</strong></li>
<li>Set to <strong>DISABLED</strong></li>
</ul>
</li>
<li><strong>Chrome now defaults to SSL / HTTPS for all websites</strong>
<ul>
<li>So I didn’t realize this happened and launched a new ubuntu web server to find it unreachable with apache installed. After wasting a lot of time, more than I’m willing to tell you here, I found out the new version of chrome will default to https:// before everything unless you explicitly put http:// in the address bar. This includes IP addresses and the like. So make sure you have SSL certs updated otherwise you are going to have a bad time.</li>
</ul>
</li>
</ul>
<h2 data-sanitized-id="video-walkthrough">Video Walkthrough</h2>
<div>
<iframe allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/0O9TzNvVwR0?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" title="YouTube video" sandbox="allow-scripts allow-same-origin"></iframe>
</div>
<h2 data-sanitized-id="conclusion">Conclusion</h2>
<p>I typically love a lot of the Google projects and updates they do, but the missing www in the address bar left me a little puzzled and why they thought they needed to do it. On the plus side, I do like the new chrome tabs, so the entire update is not all bad. Also, the changes to default to secure sites has been a long time coming. There are many different reasons for this, but the fact is by forcing webmasters to use SSL and get secure is a good thing. These days non-secure http sites can easily be exploited by a variety of different methods and this is a welcomed change in my opinion.</p>


guid: https://christitus.com/using-iometer/
title: Using IOMeter to determine hard drive performance
link: https://christitus.com/using-iometer/
hash: �Ң^���W��8���
attributes: {"enclosures":[]}
content:
<p>Using IOMeter will give you a great benchmark on any hard drives and network drives you have. I use this quite often as you can see the effects of new hardware, introducing Link-Aggregation, or troubleshooting drives to determine if they are losing performance.</p>
<h2 data-sanitized-id="steps-to-follow">Steps to Follow</h2>
<ol>
<li>Download IOMeter from the <a href="http://www.iometer.org/doc/downloads.html">Official Site</a> and run setup</li>
</ol>
<p><img loading="lazy" src="https://christitus.com/images/2018/09/isometer1.webp" alt="isometer1" data-sanitized-class="img-fluid"> </p>
<ol start="2">
<li>
<p>All Programs -&gt; Iometer -&gt; Iometer</p>
</li>
<li>
<p>Under ‘Topology’ tab, select the local machine<br>
-Delete All workers but 1<br>
-Under ‘Disk Targets’ tab select the drive you want to run the IO test on:<br>
-Set Maximum Disk Size to 204800 Sectors (one sector is 512 B, so 204800 sectors gives 100MB)</p>
</li>
</ol>
<p><img loading="lazy" src="https://christitus.com/images/2018/09/isometer2.webp" alt="isometer2" data-sanitized-class="img-fluid"> </p>
<ol start="4">
<li>Under ‘Access Specifications’ tab, under Global Access Specifications, select Default, and Click Add</li>
</ol>
<p>_Note: Default test is – 67% read, 33% write, 2 KB, 100% Random non/sequential writes, Burst Length 1 I/O. This is fine for this brief guide and the sample results below use this. _</p>
<p><img loading="lazy" src="https://christitus.com/images/2018/09/isometer3.webp" alt="isometer3" data-sanitized-class="img-fluid"> </p>
<ol start="5">
<li>Under ‘Results Display’ tab, under Update Frequency, set to 10 seconds</li>
</ol>
<p><img loading="lazy" src="https://christitus.com/images/2018/09/iometer4.webp" alt="isometer4" data-sanitized-class="img-fluid"> </p>
<ol start="6">
<li>
<p>Under ‘Test Setup’ tab, set Run Time to 1 minute ( If bench-marking a SAN or Network drive I recommend doing it for 5 minutes for consistency. )</p>
</li>
<li>
<p>Clone Workers from the first page to the number of cores you have. (Ex. Quad Core = 4 workers)</p>
</li>
<li>
<p>The click the green flag to start the test, and choose a location to save the results….</p>
</li>
</ol>
<h2 data-sanitized-id="conclusion">Conclusion</h2>
<p>Remember to benchmark often and always do a before and after you make any changes. This is imperative so you can see any performance gains or losses you might incur. There are many times I have been surprised by the results of switching hardware or simply testing older hardware to see how it is holding up. One thing is for certain, I haven’t found a freeware tool that is better than IOMeter in the past 15 years that I’ve been doing IT.</p>


guid: https://christitus.com/snipping-tool-removed/
title: Snipping Tool Removed by Microsoft in October 2018 Update 1809
link: https://christitus.com/snipping-tool-removed/
hash: �`y�̧����H��n_
attributes: {"enclosures":[]}
content:
<p>The Snipping Tool is being removed by Microsoft in October 2018 Update 1809 and I am not happy! This tool is one of the best tools Microsoft has ever created, so why? Well, they want you to use the Snip and Sketch App from the Microsoft Store. Spoiler: It sucks.</p>
<h2 data-sanitized-id="greenshot-the-best-snipping-tool-replacement">Greenshot the best Snipping Tool Replacement</h2>
<p>So what should you use? Greenshot. Its freeware and it just works. Not bulky with a toolbar, but adds a tray icon, which you don’t have to use. You can just press print screen and away you go.</p>
<p>Download it from there website here: <a href="http://getgreenshot.org/downloads/">http://getgreenshot.org/downloads/</a></p>
<h2 data-sanitized-id="microsoft-snip-and-sketch-replacement">Microsoft Snip and Sketch Replacement</h2>
<p>Currently, this is labeled as Screen Sketch, however, this is changing to Snip and Sketch App in the next update. Here is the preview of the upcoming disaster for Microsoft their predictably bad moves on forcing their tragic app store on us. Here is today’s download image of the app prior to the upcoming update that sunsets our beloved Snipping Tool.</p>
<p><img loading="lazy" src="https://christitus.com/images/2018/09/screen-sketch.webp" alt="screen-sketch" data-sanitized-class="img-fluid"> </p>
<h2 data-sanitized-id="conclusion">Conclusion</h2>
<p>With Snipping Tool gone, you might as well get used to something new, and Greenshot is a great freeware that has been around for 4 years. In the short week or so that I have been using this, I have grown to love it more than the old Snipping Tool. The features give me more options, but with its polish, I am much more efficient than I ever was.</p>


guid: https://christitus.com/configuring-windows-server-2016-core/
title: Installing and Configuring Windows Server 2016 Core
link: https://christitus.com/configuring-windows-server-2016-core/
hash: � e4{N�N�2r!�wLK
attributes: {"enclosures":[]}
content:
<p>This guide walks you through how to installing and configuring windows server 2016 core, afterward you will easily be able to add one to your environment with very little resources. Start off by using the video guide over the installation process. Once done, check the bullets below to help walk you through doing it in your infrastructure.</p>
<h4 data-sanitized-id="remote-server-administration-tools-for-windows-10">Remote Server Administration Tools for Windows 10</h4>
<p><a href="https://www.microsoft.com/en-us/download/details.aspx?id=45520">https://www.microsoft.com/en-us/download/details.aspx?id=45520</a></p>
<p><img loading="lazy" src="https://christitus.com/images/2018/09/windows-server-2016.webp" alt="configure-core" data-sanitized-class="img-fluid"> </p>
<h3 data-sanitized-id="steps-toconfiguring-windows-server-2016-core">Steps to configuring windows server 2016 core</h3>
<ul>
<li>Run <code>sconfig</code></li>
<li>Configure Static IP</li>
<li>Set Computer Name</li>
<li>Join to Domain</li>
<li>Set Windows Update Settings to Download ONLY</li>
<li>Download and Install all Updates</li>
<li>Enable Remote Desktop and Remote Management</li>
<li>Change Telemetry to Security</li>
<li>Activate Windows</li>
<li>Reboot</li>
</ul>
<h3 data-sanitized-id="connecting-remotely-to-server-2016-core">Connecting Remotely to Server 2016 Core</h3>
<p>Finally, we can now go back to our workstation and start utilizing and configuring windows server 2016 core. Once you have launched server manager verify you can connect after adding your server. Please note, this may take about 10-30 seconds so be patient after you add the server and look for any error messages. If you are adding this to the same domain and subnet, you should automatically connect with no issue.</p>


guid: https://christitus.com/configuring-exchange-2019/
title: Installing and Configuring Exchange 2019
link: https://christitus.com/configuring-exchange-2019/
hash: ����^ g ܕK�d���
attributes: {"enclosures":[]}
content:
<p>This article goes over what it takes for installing and configuring exchange 2019. This step-by-step guide shows you the requirements, installation steps, and basic configuration.</p>
<h3 data-sanitized-id="requirements">Requirements</h3>
<ul>
<li>Microsoft recommends 128 GB of memory. If in a medium size environment (100-1000 users) 32-64 GB will be sufficient.</li>
<li>Microsoft Windows Server 2012 R2/2016/2019</li>
<li>Co-Existence with Exchange 2013/2016 that are up-to-date</li>
<li>30 GB of free disk space, however, you should have plenty of TBs of storage available for the mailbox stores.</li>
<li>NTFS based file system</li>
</ul>
<h3 data-sanitized-id="notable-improvements">Notable Improvements</h3>
<ul>
<li>Exchange 2019 has the ability to now be installed on server core 2019.</li>
<li>Exchange Admin Console – https://server/ecp – Refined and matches Office 365 layout</li>
<li>Outlook Web Access has more features and a better look</li>
</ul>
<h3 data-sanitized-id="things-i-wished-exchange-2019-had">Things I wished Exchange 2019 had</h3>
<ul>
<li><strong>DKIM</strong>… seriously, WTF Microsoft. Office 365 has this, therefore exchange 2019 should have this!</li>
</ul>
<h2 data-sanitized-id="installing-exchange-2019">Installing Exchange 2019</h2>
<p>This was a breeze, with only 2 pre-requirements missing on a server 2016 stock install. The only configuration during setup was the role (mailbox or edge) and naming the exchange organization. Check out this video below to see the time lapse install:</p>
<p><a href="https://youtu.be/xmDOdkOKQxQ">https://youtu.be/xmDOdkOKQxQ</a></p>
<h2 data-sanitized-id="configuring-exchange-2019">Configuring Exchange 2019</h2>
<p>Again, this was very easy with only a couple options needed before I was operational. Using only a mailbox role with no edge you only need to add your domain, send connector, and set an email address for mailboxes. Here is the basic configuration video:</p>
<p><a href="https://youtu.be/9n6JlEUS5fw">https://youtu.be/9n6JlEUS5fw</a><br>
_Note: Do not forget to add the MX, SPF, DMARC records where your domain registrar DNS resides. _</p>
<h2 data-sanitized-id="conclusion">Conclusion</h2>
<p>I absolutely love Exchange 2019 due to the vast amount of improvements, that said, I am still bummed that they continue to not support DKIM through exchange server. Installing and configuring exchange 2019 was the easiest experience I’ve had to date, which is saying a lot! Overall I am liking the direction Microsoft is taking with the server line of products and I believe it will continue to have a very bright future, as long as they don’t do something stupid like including the Microsoft store.</p>


guid: https://christitus.com/disable-windows-firewall-properly/
title: Disable Windows Firewall Properly
link: https://christitus.com/disable-windows-firewall-properly/
hash: &��S�� B�r��R
attributes: {"enclosures":[]}
content:
<p>This walkthrough goes over how to Disable Windows Firewall while not affecting other programs that rely on this service. It’s important that you **DO NOT **disable the service, due to the fact it can cause issues with Microsoft Office and other products.</p>
<p><img loading="lazy" src="https://christitus.com/images/2018/10/windows-firewall.webp" alt="win-firewall" data-sanitized-class="img-fluid"> </p>
<h2 data-sanitized-id="steps-to-bypass-firewall">Steps to bypass firewall</h2>
<ol>
<li>Launch Windows Defender Firewall with Advanced Security (Start -&gt; Run -&gt; wf.msc)</li>
<li>Click Inbound Rules</li>
<li>Select “New Rule”</li>
<li>Custom rule</li>
<li>All Programs</li>
<li>Leave Any and All Ports</li>
<li>Any IP Address for both</li>
<li>Allow the connection</li>
<li>Check Domain, Private, and Public</li>
<li>Name “Allow All”</li>
</ol>
<h2 data-sanitized-id="video-guide">Video Guide</h2>
<div>
<iframe allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/fvFWFrN-MZQ?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" title="YouTube video" sandbox="allow-scripts allow-same-origin"></iframe>
</div>
<h3 data-sanitized-id="finishing-up">Finishing Up</h3>
<p>By doing this you allow all traffic inbound to this computer, consequently, all outbound traffic is already allowed by default. Therefore, certain programs and services that depend on windows firewall can function properly. In conclusion, this is a far superior way of disabling the built-in firewall in windows without affecting other programs.</p>


guid: https://christitus.com/change-cortana-search/
title: How To Change Cortana Search
link: https://christitus.com/change-cortana-search/
hash: �Bc�p u���놋���
attributes: {"enclosures":[]}
content:
<p>This article goes over how to change Cortana search engine to display results in chrome instead of Microsoft Edge. Afterward, the second part requires you to install a chrome extension to search in Google instead of Bing.</p>
<h2 data-sanitized-id="links-from-video">Links from Video</h2>
<ul>
<li><a href="https://github.com/sylveon/SearchWithMyBrowser">https://github.com/sylveon/SearchWithMyBrowser</a> – GitHub Source and Compile Instructions</li>
<li><a href="https://www.microsoft.com/store/apps/9PPKNR9RK26R?ocid=badge">https://www.microsoft.com/store/apps/9PPKNR9RK26R?ocid=badge</a> – Windows Store Link from Developer</li>
<li><a href="https://chrome.google.com/webstore/detail/chrometana-pro-redirect-c/lllggmgeiphnciplalhefnbpddbadfdi">https://chrome.google.com/webstore/detail/chrometana-pro-redirect-c/lllggmgeiphnciplalhefnbpddbadfdi</a> – Chrometana Pro Google Store Extension</li>
</ul>
<h2 data-sanitized-id="steps-to-change-cortana-search-updated">Steps to Change Cortana Search (Updated)</h2>
<ul>
<li>Open up Chrometana Pro Google Store Extension and Install (Link Above)</li>
<li>Install EdgeDeflector (On Page after Extension Installed)
<ul>
<li><em>Note: SearchWithMyBrowser is no longer needed as EdgeDeflector takes its place</em></li>
</ul>
</li>
<li>Open Webpage and select EdgeDeflector.exe for default open with application</li>
<li>Done!</li>
</ul>
<p>In the end, you need to watch out for Windows updates. Anytime Windows does a major update, be prepared to repeat the process above, as it will reset it to Edge. Therefore, I’d bookmark the Chrometana Pro page or this one as you will be coming back to do this about twice a year. If you don’t want to do this, you can always switch to Linux. Consequently, I have written an article about the pro’s and con’s of such a switch and I highly recommend the switch if you are able.</p>


guid: https://christitus.com/orphaned-shadow-copies/
title: Clearing out Orphaned Shadow Copies
link: https://christitus.com/orphaned-shadow-copies/
hash: ۖ\$��> "��
attributes: {"enclosures":[]}
content:
<p>In this article, I go over how to get rid of Orphaned Shadow Copies that do not get cleared out by issuing: <code>vssadmin shadows delete /all</code></p>
<h2 data-sanitized-id="steps-to-clear-out-all-orphaned-shadow-copies">Steps to clear out all orphaned shadow copies</h2>
<ul>
<li><code>vssadmin shadows delete /all</code></li>
<li><code>vssadmin shadows list</code>
<ul>
<li><em>verify orphaned shadow copies still exist</em></li>
</ul>
</li>
<li>Use the following command to resize shadow storage, consequently, clears out any shadow copies on that drive
<ul>
<li><code>vssadmin Resize ShadowStorage /For=C: /On=C: /MaxSize=300MB</code>
<ul>
<li><em>Note: Repeat this for each drive with orphaned shadow copies</em></li>
</ul>
</li>
</ul>
</li>
<li>Afterward, do a shadows list to verify the shadow copies have been cleared out
<ul>
<li><em>This process can take a very long time for large drives with a lot of shadow copies.</em></li>
</ul>
</li>
<li>With all that finished, reset your shadow copies to either unbounded or 50-100 GB if you have space.</li>
</ul>
<p><img loading="lazy" src="https://christitus.com/images/2018/10/shadow-copies.webp" alt="server-vss" data-sanitized-class="img-fluid"> </p>
<p>In conclusion, this issue has become less of an issue with the newer versions of Windows Server, but can still rear its ugly head from time to time. It’s important that you keep these pruned and functional, due to the fact a large number of shadow copies will bloat your server. This also can cause massive performance issues that will lock up a server. It is very important that you keep these manageable and functional for each server instance. In the day and age where virtualization has become so prevalent, you shouldn’t need many shadow copies.</p>


guid: https://christitus.com/ssh-guide/
title: The Ultimate SSH Guide
link: https://christitus.com/ssh-guide/
hash: $yu�@�V���f����
attributes: {"enclosures":[]}
content:
<p>This is an SSH guide to help you set up, configure, connect, and transfer files using SSH.</p>
<h1 data-sanitized-id="setup-ssh">Setup SSH</h1>
<h2 data-sanitized-id="install-ssh-on-your-system">Install SSH on your system</h2>
<h3 data-sanitized-id="debian-based">Debian-Based</h3>
<p><code>sudo apt install openssh-server -y</code></p>
<h3 data-sanitized-id="centosfedora">CentOS/Fedora</h3>
<p><code>sudo yum -y install openssh-server</code></p>
<h3 data-sanitized-id="arch">Arch</h3>
<p><code>sudo pacman -S openssh</code></p>
<h2 data-sanitized-id="run-ssh-server-on-startup">Run SSH server on startup</h2>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">sudo systemctl start ssh
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">sudo systemctl enable ssh
</span></span></code></pre></div><p>**Note: sshd instead of ssh for arch</p>
<h2 data-sanitized-id="configure-ssh">Configure SSH</h2>
<p><strong>Make sure ufw isn’t blocking ssh and enable it for passthrough.</strong></p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">sudo ufw allow ssh
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">sudo ufw limit ssh
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">sudo ufw enable
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">sudo ufw status
</span></span></code></pre></div><h3 data-sanitized-id="options-for-etcsshsshd_config">Options for /etc/ssh/sshd_config</h3>
<p><code>PasswordAuthentication yes/no</code><br>
<em>* No should be used when facing the internet and key authentication must be used for security</em></p>
<p><code>AllowTcpForwarding yes</code><br>
<code>X11Forwarding yes</code><br>
<em>* This is used to forward GUI programs (Xming required for Windows)</em></p>
<p><code>AllowUsers Fred Wilma</code><br>
<code>DenyUsers Dino Pebbles</code><br>
<em>* Block and Allow certain users</em></p>
<h3 data-sanitized-id="security-of-a-ssh-server">Security of a SSH Server</h3>
<p>It should be noted that if you open up your firewall and port forward port 22 on a standard SSH server install… you will probably be hacked. This is extremely reckless and should never be done. I highly recommend doing <strong>ALL</strong> of the following measures if opening up SSH to the outside world.</p>
<p>First, obscure the SSH port by changing it in the sshd_config file<br>
<code># Change Default port 22 to 2222</code><br>
<code>Port 2222</code></p>
<p>Second, disable Password Authentication and use ssh keys instead. This is a complex procedure and recommend using the following script to optimize the encryption and setup process.<br>
<a href="https://github.com/angristan/openvpn-install">https://github.com/angristan/openvpn-install</a></p>
<p>Third, verify you are using tar-pitting or rate limiting on your SSH port. This will prevent brute force attacks<br>
<code>ufw limit proto tcp from any port 2222</code><br>
<em>*Note this can also be done via iptables and it needs to be modified to your SSH port.</em></p>
<h1 data-sanitized-id="connect-via-ssh">Connect via SSH</h1>
<h2 data-sanitized-id="linux-terminal">Linux terminal</h2>
<p>ssh username@serverip</p>
<h2 data-sanitized-id="windows">Windows</h2>
<p>PuTTY <a href="https://putty.org/">https://putty.org/</a> (ssh program)</p>
<p>Xming required for X11 forwarding <a href="https://sourceforge.net/projects/xming/">https://sourceforge.net/projects/xming/</a></p>
<p>Verify X11 Forwarding in PuTTY options</p>
<h2 data-sanitized-id="video-walkthrough-ssh-access">Video Walkthrough SSH Access</h2>
<div>
<iframe allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/w_OwmqjAcn0?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" title="YouTube video" sandbox="allow-scripts allow-same-origin"></iframe>
</div>
<h1 data-sanitized-id="transfer-files-via-ssh">Transfer Files via SSH</h1>
<p>The difference between SFTP and SCP by default are one is interactive and the other isn’t. SCP is faster, but can’t be resumed where SFTP and slower and can be.</p>
<h2 data-sanitized-id="linux">Linux</h2>
<p>Use the native file browser, in the location bar type the following:<br>
<code>sftp://192.168.1.10</code></p>
<h3 data-sanitized-id="using-the-terminal">Using the terminal</h3>
<p>Syntax: <strong><code>scp</code></strong> <code>source destination</code><br>
Remote PC Syntax: <code>username@serverip:/path/to/file</code></p>
<p>Example: <code>scp localfile username@serverip:/remote/server/path</code></p>
<h2 data-sanitized-id="windows-1">Windows</h2>
<p>WinSCP is my recommended transfer tool.<br>
<a href="https://winscp.net/eng/index.php">https://winscp.net/eng/index.php</a></p>
<p>pscp.exe for command line. <a href="https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html">https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html</a></p>


guid: https://christitus.com/openvpn-server/
title: How to Setup a VPN Server and Clients Using OpenVPN
link: https://christitus.com/openvpn-server/
hash: ,��Sh�f!�q�T"VI
attributes: {"enclosures":[]}
content:
<p>In this article, I go over how to setup a VPN Server and clients using OpenVPN. this will cover the setup process of the remote machine and then connecting to it via both Linux and Windows client machines.</p>
<h2 data-sanitized-id="openvpn-server-setup">OpenVPN Server Setup</h2>
<p>This is the Installation script I use to setup a secure OpenVPN Server<br>
<a href="https://github.com/angristan/openvpn-install">https://github.com/angristan/openvpn-install</a></p>
<p>Run the following script as root or add sudo to the install.sh script<br>
<code>curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh</code><br>
<code>chmod +x openvpn-install.sh</code><br>
<code>AUTO_INSTALL=y ./openvpn-install.sh</code></p>
<p>you will need to enable the OpenVPN service to auto-start so the VPN stays up after reboot.<br>
<code>sudo systemctl enable openvpn</code></p>
<h3 data-sanitized-id="troubleshooting">Troubleshooting:</h3>
<p><img loading="lazy" src="https://christitus.com/images/2019/09/tun-isnot-available.webp" alt="tun-isnot-available" data-sanitized-class="img-fluid"> </p>
<p><strong>TUN is not available</strong><br>
-Certain VPS servers do not have TUN enabled by default. Create the follow script and run it on startup to fix this issue.</p>
<p>-Create /usr/sbin/enabletun.sh<br>
<code>#!/bin/bash</code><br>
<code>mkdir /dev/net</code><br>
<code>mknod /dev/net/tun c 10 200</code><br>
<code>chmod 0666 /dev/net/tun</code></p>
<p>-Mark /usr/sbin/enabletun.sh executable<br>
<code>chmod +x /usr/sbin/enabletun.sh</code></p>
<p>-Run this script on startup by adding the following to /etc/rc.local<br>
<code>/usr/sbin/tunscript.sh || exit 1</code><br>
<code>exit 0</code></p>
<h2 data-sanitized-id="client-setup">Client Setup</h2>
<h3 data-sanitized-id="linux-client-setup">Linux Client Setup</h3>
<p>Install OpenVPN for Network Manager<br>
<strong>Debian-Based</strong> <code>sudo apt install network-manager-openvpn</code><br>
<strong>Arch-Based</strong> <code>sudo pacman -S networkmanager-openvpn</code><br>
<strong>Gnome-Based DEs</strong> <code>sudo apt install network-manager-openvpn-gnome</code></p>
<p>Copy OVPN file to /etc/openvpn/client/client.ovpn<br>
Test client configuration in Terminal:<br>
<code>sudo openvpn /etc/openvpn/client/client.ovpn</code></p>
<p><img loading="lazy" src="https://christitus.com/images/2019/09/import-vpn.webp" alt="import-vpn" data-sanitized-class="img-fluid"> </p>
<p>Network manager Import VPN Connection: client.ovpn<br>
Note: <em>Certificates stored in ~/.local/share/networkmanagement/certificates</em></p>
<p>Connect via your Network Manager</p>
<h3 data-sanitized-id="troubleshooting-1">Troubleshooting:</h3>
<p><img loading="lazy" src="https://christitus.com/images/2019/09/tls-issue.webp" alt="tls-issue" data-sanitized-class="img-fluid"> </p>
<p>Verify TLS key file is enabled and created. This is a known issue on KDE desktops. If it isn’t make sure to create it using the last TLS portion of the ovpn file.</p>
<h3 data-sanitized-id="windows-client-setup">Windows Client Setup</h3>
<p>Download OpenVPN client for your Windows @ <a href="https://openvpn.net/community-downloads/">https://openvpn.net/community-downloads/</a></p>
<p><img loading="lazy" src="https://christitus.com/images/2019/09/clientovpn-winscp.webp?fit=1024%2C451&amp;ssl=1" alt="clientovpn-winscp" data-sanitized-class="img-fluid"> </p>
<p>Copy your client.ovpn from the server (WinSCP to connect and copy) and place the file in C:\Program Files\OpenVPN\config</p>
<p><img loading="lazy" src="https://christitus.com/images/2019/09/openvpnconnect.webp" alt="openvpnconnect" data-sanitized-class="img-fluid"> </p>
<p>Run the program and right click the icon in the tray and connect</p>
<h2 data-sanitized-id="video-walkthrough">Video Walkthrough</h2>
<div>
<iframe allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/CBJMl9MILbg?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" title="YouTube video" sandbox="allow-scripts allow-same-origin"></iframe>
</div>


guid: https://christitus.com/secure-web-server/
title: How to Secure A Web Server
link: https://christitus.com/secure-web-server/
hash: ѵ���9���n�I>
attributes: {"enclosures":[]}
content:
<p>In this article, I show you all the steps needed to secure a web server and improve your security. I recommend doing all of these things on every installation. Also, just because you secure your server doesn’t mean you can neglect it. I highly recommend monitoring it and adjusting security as needed. Monitoring is required for proper security in my opinion.</p>
<h1 data-sanitized-id="secure-a-web-server-steps">Secure A Web Server Steps</h1>
<p><img loading="lazy" src="https://christitus.com/images/2019/10/firewall-png-577x359.webp" alt="firewall-png-577×359" data-sanitized-class="img-fluid"> </p>
<p><strong>Install UFW</strong></p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">sudo apt-get update
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">sudo apt-get install ufw
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">sudo ufw limit 22/tcp
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">sudo ufw allow 80/tcp
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">sudo ufw allow 443/tcp
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">sudo ufw enable
</span></span></code></pre></div><p><strong>Verify</strong><br>
<code>sudo ufw status</code></p>
<p><strong>Do Global blocks</strong></p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">sudo ufw default deny incoming
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">sudo ufw default allow outgoing
</span></span></code></pre></div><p><img loading="lazy" src="https://christitus.com/images/2019/09/ssh.webp" alt="ssh" data-sanitized-class="img-fluid"> </p>
<h2 data-sanitized-id="change-ssh-to-key">Change SSH to Key</h2>
<p><strong>Remote Machine</strong>: <code>ssh-keygen -t rsa</code></p>
<h3 data-sanitized-id="transfer-to-server">Transfer to Server</h3>
<h4 data-sanitized-id="method-1">Method 1:</h4>
<p><strong>Transfer pub ssh key to server</strong></p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">scp ~/.ssh/id_rsa.pub user@server.com:~
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">cat ~/id_rsa.pub &gt;&gt; ~/.ssh/authorized_keys
</span></span></code></pre></div><h4 data-sanitized-id="method-2">Method 2:</h4>
<p>Copy key and place in authorized_key file in one command<br>
<code>ssh-copy-id -i ~/.ssh/id_rsa.pub user@server.com</code></p>
<h3 data-sanitized-id="secure-a-web-server-disabling-password-auth-through-ssh">Secure a Web Server Disabling Password Auth through SSH</h3>
<p><strong>Change the following lines in /etc/sshd_config</strong></p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">ChallengeResponseAuthentication no
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">PasswordAuthentication no
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">UsePAM no
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">PermitRootLogin no
</span></span></code></pre></div><h2 data-sanitized-id="edit-etcsysctlconf">Edit /etc/sysctl.conf</h2>
<p>Enable security features</p>
<p><img loading="lazy" src="https://christitus.com/images/2019/10/settings.webp" alt="settings" data-sanitized-class="img-fluid"> </p>
<h2 data-sanitized-id="prevent-ip-spoof-etchostconf">Prevent IP Spoof /etc/host.conf</h2>
<p>Change File to mirror below:</p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">​order bind,hosts
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">multi on
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">nospoof on
</span></span></code></pre></div><h2 data-sanitized-id="install-fail2ban">Install Fail2Ban</h2>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">sudo apt install fail2ban
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">sudo systemctl enable fail2ban
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">sudo systemctl start fail2ban
</span></span></code></pre></div><h2 data-sanitized-id="check-listening-ports">Check Listening Ports</h2>
<p><code>netstat -tunlp</code></p>
<p>You will now have completed the basics of a secure web server!</p>
<h2 data-sanitized-id="video-walkthrough">Video Walkthrough</h2>
<div>
<iframe allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/7pJKBL9x6bY?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" title="YouTube video" sandbox="allow-scripts allow-same-origin"></iframe>
</div>


guid: https://christitus.com/clean-up-windows-10/
title: Clean Up Windows 10
link: https://christitus.com/clean-up-windows-10/
hash: x��&��Z�}}sc) 1
attributes: {"enclosures":[]}
content:
<p>In this article, we will clean up Windows 10. This will include debloat, startup maintenance, system tweaks, and privacy settings. These 3 stages are broken down below and will help maintain a healthy Windows 10 system. I’d recommend re-running these steps every 6 months.</p>
<h2 data-sanitized-id="july-2021-update---ctt-official-debloat-launched">July 2021 Update - CTT Official Debloat Launched</h2>
<p>Check out the updated debloat and utility toolbox here: <a href="https://christitus.com/debloat-windows-10-2020/">https://christitus.com/debloat-windows-10-2020/</a></p>
<p>Old Content is below with an older method of debloating Windows 10.</p>
<h2 data-sanitized-id="step-1-debloat-windows-10">Step 1: Debloat Windows 10</h2>
<p>We will be utilizing PowerShell to clean up Windows 10 and get rid of a bunch of useless bloat that is included with it.</p>
<h3 data-sanitized-id="download-powershell-script">Download PowerShell Script</h3>
<p><img loading="lazy" src="https://christitus.com/images/2019/10/Screenshot_20191014_144201.webp" alt="Screenshot_20191014_144201" data-sanitized-class="img-fluid"> </p>
<h4 data-sanitized-id="run-powershell-script">Run PowerShell Script</h4>
<p><img loading="lazy" src="https://christitus.com/images/2019/10/runcmd.webp" alt="runcmd" data-sanitized-class="img-fluid"> </p>
<p><code>iex ((New-Object System.Net.WebClient).DownloadString('https://git.io/debloat'))</code></p>
<p><strong>Note: This will remove many apps in the Microsoft Store. Games, Office 365 and things that utilize the Microsoft Store. If unsure, use the customize blacklist and only tick the boxes of things you want to remove!</strong><br>
Source: <a href="https://github.com/Sycnex/Windows10Debloater">https://github.com/Sycnex/Windows10Debloater</a></p>
<h2 data-sanitized-id="step-2-clean-up-windows-10-startup">Step 2: Clean Up Windows 10 Startup</h2>
<p><img loading="lazy" src="https://christitus.com/images/2019/10/taskmanager.webp" alt="taskmanager" data-sanitized-class="img-fluid"> </p>
<p><strong>Launch Task Manager</strong> and then click the startup tab. You need to disable any unneeded programs from here.</p>
<h3 data-sanitized-id="changing-startup-programs-advanced-users">Changing Startup Programs (Advanced Users)</h3>
<p><img loading="lazy" src="https://christitus.com/images/2019/10/startup10.webp" alt="startup10" data-sanitized-class="img-fluid"> </p>
<p>You can change startup programs from Start-Run-Type:<code>shell:startup</code> and Start-Run-Type: <code>shell:common startup</code></p>
<p>You can also modify startup programs using registry editor HKCU or <code>HKLM\Software\Microsoft\Windows\CurrrentVersion\Run</code></p>
<p>Cleanup <strong>Task Scheduler</strong>, as it accumulates many things that cause an install to be slow and is vital when you clean up Windows 10.</p>
<h2 data-sanitized-id="step-3-system-tweaks-and-privacy">Step 3: System Tweaks and Privacy</h2>
<p>There is literally hundreds of settings in Windows 10 that are privacy concerns and why I’d recommend using a 3rd party software for this. However, you can do all the same tweaks by simply going through settings and doing all these manually. That said, I recommend using O&amp;O Shutup10 for optimal tweaks and privacy.</p>
<p><img loading="lazy" src="https://christitus.com/images/2019/10/oo-shutup10.webp" alt="oo-shutup10" data-sanitized-class="img-fluid"> </p>
<p>Download: <a href="https://www.oo-software.com/en/shutup10">https://www.oo-software.com/en/shutup10</a></p>
<p>I also tell everyone to use the <strong>recommended settings</strong> as the other settings can have unintended consequences.</p>
<h3 data-sanitized-id="other-recommended-settings">Other Recommended Settings</h3>
<p><strong>Turn off Hibernation:</strong> powercfg /hibernate off<br>
<strong>Modify Applications Menu:</strong> explorer shell:AppsFolder<br>
<strong>Change Windows 10 Start Menu:</strong> shell:StartMenuAllPrograms or shell:Start Menu</p>
<h2 data-sanitized-id="video-walkthrough">Video Walkthrough</h2>
<div>
<iframe allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/mWHiP9K8fQ0?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" title="YouTube video" sandbox="allow-scripts allow-same-origin"></iframe>
</div>


guid: https://htmhell.dev/1-button-disguised-as-a-link/
title: #1 button disguised as a link
author: ;Manuel Matuzovic
link: https://htmhell.dev/1-button-disguised-as-a-link/
hash: ��|������4�� i
attributes: {"enclosures":[]}
content:
<div data-sanitized-class="section bad">
<h2 data-sanitized-id="bad-code">Bad code</h2>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>button</span> <span data-sanitized-class="token attr-name">role</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>link<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">title</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>Name of website<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">tabindex</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>0<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>img</span> <span data-sanitized-class="token attr-name">alt</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>Name of website<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">src</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>logo.jpg<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">title</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>Name of website<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>button</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
</div>
<div data-sanitized-id="issues" data-sanitized-class="section">
<h2 data-sanitized-id="issues-and-how-to-fix-them">Issues and how to fix them</h2>
<ol>
<li>Wrong usage of the button element. There’s an element for linking to external sites (<code>&lt;a&gt;</code>). Do not change native semantics, unless you really have to.</li>
<li>It’s possible to link to pages without JavaScript.</li>
<li>The <code>title</code> attribute is redundant.</li>
<li>The <code>tabindex</code> attribute is redundant. A button doesn’t need <code>tabindex</code>, it’s focusable by default.</li>
</ol>
</div>
<div data-sanitized-class="section">
<h2 data-sanitized-id="good-code">Good code</h2>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>a</span> <span data-sanitized-class="token attr-name">href</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>https://<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>img</span> <span data-sanitized-class="token attr-name">alt</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>Name of website<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">src</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>logo.jpg<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>a</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
</div>


guid: https://htmhell.dev/2-div-with-button-role/
title: #2 div with button role
author: ;Manuel Matuzovic
link: https://htmhell.dev/2-div-with-button-role/
hash: l�-����W\�
attributes: {"enclosures":[]}
content:
<div data-sanitized-class="section bad">
<h2 data-sanitized-id="bad-code">Bad code</h2>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token attr-name">tabindex</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>-1<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token attr-name">role</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>button<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>svg</span> <span data-sanitized-class="token attr-name">width</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>28<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">height</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>24<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span> … <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>svg</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
</div>
<div data-sanitized-id="issues" data-sanitized-class="section">
<h2 data-sanitized-id="issues-and-how-to-fix-them">Issues and how to fix them</h2>
<ol>
<li>Setting button semantics explicitly using the <code>role</code> attribute isn’t necessary, there’s an element for that (<code>button</code>).</li>
<li>You don’t need the <code>tabindex</code> attribute if you use a <code>button</code>. HTML buttons are focusable by default.</li>
<li>A click event on a <code>div</code> triggers only on click. A click event on a <code>button</code> triggers on click and if the user presses the <kbd>Enter</kbd> or <kbd>Space</kbd> key.</li>
<li>There’s no text alternative for the icon.</li>
</ol>
</div>
<div data-sanitized-class="section">
<h2 data-sanitized-id="good-code">Good code</h2>
<p>Unfortunately, there’s no native way of hiding content only visually.<br>The <code>.sr-only</code> class makes sure that content is visually hidden but still accessible to screen reader users.</p>
<pre data-sanitized-class="language-css"><code data-sanitized-class="language-css"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token selector">.sr-only</span> <span data-sanitized-class="token punctuation">{</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">position</span><span data-sanitized-class="token punctuation">:</span> absolute<span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">white-space</span><span data-sanitized-class="token punctuation">:</span> nowrap<span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">width</span><span data-sanitized-class="token punctuation">:</span> 1px<span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">height</span><span data-sanitized-class="token punctuation">:</span> 1px<span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">overflow</span><span data-sanitized-class="token punctuation">:</span> hidden<span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">border</span><span data-sanitized-class="token punctuation">:</span> 0<span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">padding</span><span data-sanitized-class="token punctuation">:</span> 0<span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">clip</span><span data-sanitized-class="token punctuation">:</span> <span data-sanitized-class="token function">rect</span><span data-sanitized-class="token punctuation">(</span>0 0 0 0<span data-sanitized-class="token punctuation">)</span><span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">clip-path</span><span data-sanitized-class="token punctuation">:</span> <span data-sanitized-class="token function">inset</span><span data-sanitized-class="token punctuation">(</span>50%<span data-sanitized-class="token punctuation">)</span><span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">margin</span><span data-sanitized-class="token punctuation">:</span> -1px<span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token punctuation">}</span></span></code></pre>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>button</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>span</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>sr-only<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>Send<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>span</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>svg</span> <span data-sanitized-class="token attr-name">width</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>28<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">height</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>24<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">aria-hidden</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>true<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span> … <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>svg</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>button</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
</div>


guid: https://htmhell.dev/3-image-buttons/
title: #3 image-buttons
author: ;Manuel Matuzovic
link: https://htmhell.dev/3-image-buttons/
hash: if_ʐ>�7��t$a��
attributes: {"enclosures":[]}
content:
<div data-sanitized-class="section bad">
<h2 data-sanitized-id="bad-code">Bad code</h2>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>img</span> <span data-sanitized-class="token attr-name">src</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>/images/edit.gif<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token special-attr"><span data-sanitized-class="token attr-name">onclick</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token value javascript language-javascript"><span data-sanitized-class="token function">openEditDialog</span><span data-sanitized-class="token punctuation">(</span><span data-sanitized-class="token number">123</span><span data-sanitized-class="token punctuation">)</span></span><span data-sanitized-class="token punctuation">"</span></span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>img</span> <span data-sanitized-class="token attr-name">src</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>/images/delete.gif<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token special-attr"><span data-sanitized-class="token attr-name">onclick</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token value javascript language-javascript"><span data-sanitized-class="token function">openDeleteDialog</span><span data-sanitized-class="token punctuation">(</span><span data-sanitized-class="token number">123</span><span data-sanitized-class="token punctuation">)</span></span><span data-sanitized-class="token punctuation">"</span></span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
</div>
<div data-sanitized-id="issues" data-sanitized-class="section">
<h2 data-sanitized-id="issues-and-how-to-fix-them">Issues and how to fix them</h2>
<ol>
<li>The purpose of the <code>img</code> element is to display images, not to execute JavaScript.</li>
<li>A click event on a <code>img</code> triggers only on click. A click event on a <code>button</code> triggers on click and if the user presses the <kbd>Enter</kbd> or <kbd>Space</kbd> key.</li>
<li>There’s no text alternative for the image. Screen readers may announce the filename instead.</li>
</ol>
</div>
<div data-sanitized-class="section">
<h2 data-sanitized-id="good-code">Good code</h2>
<h3 data-sanitized-id="solution-#1-use-buttons-and-add-alt-attribute-to-images">Solution #1: Use buttons and add <code>alt</code> attribute to images</h3>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>button</span> <span data-sanitized-class="token special-attr"><span data-sanitized-class="token attr-name">onclick</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token value javascript language-javascript"><span data-sanitized-class="token function">openEditDialog</span><span data-sanitized-class="token punctuation">(</span><span data-sanitized-class="token number">123</span><span data-sanitized-class="token punctuation">)</span></span><span data-sanitized-class="token punctuation">"</span></span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>img</span> <span data-sanitized-class="token attr-name">src</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>/images/edit.gif<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">alt</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>Edit product XY<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>button</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>button</span> <span data-sanitized-class="token special-attr"><span data-sanitized-class="token attr-name">onclick</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token value javascript language-javascript"><span data-sanitized-class="token function">openDeleteDialog</span><span data-sanitized-class="token punctuation">(</span><span data-sanitized-class="token number">123</span><span data-sanitized-class="token punctuation">)</span></span><span data-sanitized-class="token punctuation">"</span></span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>img</span> <span data-sanitized-class="token attr-name">src</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>/images/delete.gif<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">alt</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>Delete product XY<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>button</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
<h3 data-sanitized-id="solution-#2-use-buttons-add-text-content-and-hide-images">Solution #2: Use buttons, add text content and hide images</h3>
<p>Unfortunately, there’s no native way of hiding content only visually.<br>The <code>.sr-only</code> class makes sure that content is visually hidden but still accessible to screen reader users.</p>
<pre data-sanitized-class="language-css"><code data-sanitized-class="language-css"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token selector">.sr-only</span> <span data-sanitized-class="token punctuation">{</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">position</span><span data-sanitized-class="token punctuation">:</span> absolute<span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">white-space</span><span data-sanitized-class="token punctuation">:</span> nowrap<span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">width</span><span data-sanitized-class="token punctuation">:</span> 1px<span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">height</span><span data-sanitized-class="token punctuation">:</span> 1px<span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">overflow</span><span data-sanitized-class="token punctuation">:</span> hidden<span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">border</span><span data-sanitized-class="token punctuation">:</span> 0<span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">padding</span><span data-sanitized-class="token punctuation">:</span> 0<span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">clip</span><span data-sanitized-class="token punctuation">:</span> <span data-sanitized-class="token function">rect</span><span data-sanitized-class="token punctuation">(</span>0 0 0 0<span data-sanitized-class="token punctuation">)</span><span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">clip-path</span><span data-sanitized-class="token punctuation">:</span> <span data-sanitized-class="token function">inset</span><span data-sanitized-class="token punctuation">(</span>50%<span data-sanitized-class="token punctuation">)</span><span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">margin</span><span data-sanitized-class="token punctuation">:</span> -1px<span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token punctuation">}</span></span></code></pre>
<p>An image with an empty <code>alt</code> attribute is not accessible to screen reader users, which in this case is desired, because there’s a screen reader accessible text alternative.</p>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>button</span> <span data-sanitized-class="token special-attr"><span data-sanitized-class="token attr-name">onclick</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token value javascript language-javascript"><span data-sanitized-class="token function">openEditDialog</span><span data-sanitized-class="token punctuation">(</span><span data-sanitized-class="token number">123</span><span data-sanitized-class="token punctuation">)</span></span><span data-sanitized-class="token punctuation">"</span></span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>span</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>sr-only<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>Edit product XY<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>span</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>img</span> <span data-sanitized-class="token attr-name">src</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>/images/edit.gif<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">alt</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>button</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>button</span> <span data-sanitized-class="token special-attr"><span data-sanitized-class="token attr-name">onclick</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token value javascript language-javascript"><span data-sanitized-class="token function">openDeleteDialog</span><span data-sanitized-class="token punctuation">(</span><span data-sanitized-class="token number">123</span><span data-sanitized-class="token punctuation">)</span></span><span data-sanitized-class="token punctuation">"</span></span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>span</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>sr-only<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>Delete product XY<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>span</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>img</span> <span data-sanitized-class="token attr-name">src</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>/images/delete.gif<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">alt</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>button</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
</div>


guid: https://htmhell.dev/4-link-also-button/
title: #4 link-also-button
author: ;Manuel Matuzovic
link: https://htmhell.dev/4-link-also-button/
hash: �XTo:-��f8#s�U
attributes: {"enclosures":[]}
content:
<div data-sanitized-class="section bad">
<h2 data-sanitized-id="bad-code">Bad code</h2>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>a</span> <span data-sanitized-class="token attr-name">href</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>https://example.com<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>button</span><span data-sanitized-class="token punctuation">&gt;</span></span>Example<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>button</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>a</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
</div>
<div data-sanitized-id="issues" data-sanitized-class="section">
<h2 data-sanitized-id="issues-and-how-to-fix-them">Issues and how to fix them</h2>
<ol>
<li>By nesting a button inside of a link, you’re sending two messages: this is a button, but also this is a link.</li>
<li>If you’re not sure when to use <code>&lt;a&gt;</code> or <code>&lt;button&gt;</code>, watch <a href="https://www.youtube.com/watch?v=8XjwDq9zG4I">The Links vs. Buttons Showdown</a> by <a href="https://twitter.com/marcysutton">Marcy Sutton</a>.</li>
</ol>
</div>
<div data-sanitized-class="section">
<h2 data-sanitized-id="good-code">Good code</h2>
<pre data-sanitized-class="language-css"><code data-sanitized-class="language-css"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token selector">.button</span> <span data-sanitized-class="token punctuation">{</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token comment">/* use CSS to apply button-like styles to the link */</span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token punctuation">}</span></span></code></pre>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>a</span> <span data-sanitized-class="token attr-name">href</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>https://example.com<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>button<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>Example<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>a</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
</div>


guid: https://htmhell.dev/5-button-like-link/
title: #5 button-like-link
author: ;Manuel Matuzovic
link: https://htmhell.dev/5-button-like-link/
hash: q����ӕ�� �)1
attributes: {"enclosures":[]}
content:
<div data-sanitized-class="section bad">
<h2 data-sanitized-id="bad-code">Bad code</h2>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>a</span> <span data-sanitized-class="token attr-name">href</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>#form<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">role</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>button<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">aria-haspopup</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>true<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span> <span title=" " data-sanitized-class="token entity named-entity">&amp;nbsp;</span><span title=" " data-sanitized-class="token entity named-entity">&amp;nbsp;</span>Register<span title=" " data-sanitized-class="token entity named-entity">&amp;nbsp;</span><span title=" " data-sanitized-class="token entity named-entity">&amp;nbsp;</span> <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>a</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
</div>
<div data-sanitized-id="issues" data-sanitized-class="section">
<h2 data-sanitized-id="issues-and-how-to-fix-them">Issues and how to fix them</h2>
<p>It’s a link to a form at the same page that looks like a button.</p>
<ol>
<li>By adding <code>role="button"</code> to a link, you’re telling that it’s a button, though it acts like a link. Do not change native semantics, unless you really have to.</li>
<li><code>aria-haspopup="true"</code> suggests that there’s a popup, but it doesn’t exist.</li>
<li>Padding should be added via CSS, not <code>&amp;nbsp;</code>.</li>
</ol>
</div>
<div data-sanitized-class="section">
<h2 data-sanitized-id="good-code">Good code</h2>
<pre data-sanitized-class="language-css"><code data-sanitized-class="language-css"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token selector">.button</span> <span data-sanitized-class="token punctuation">{</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token comment">/* use CSS to apply button-like styles to the link */</span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token punctuation">}</span></span></code></pre>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>a</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>button<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">href</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>#form<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span> Register <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>a</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
</div>


guid: https://htmhell.dev/6-link-with-void-operator-as-href-value/
title: #6 link with void operator as href value
author: ;Manuel Matuzovic
link: https://htmhell.dev/6-link-with-void-operator-as-href-value/
hash: #RA��Q��7�����H,
attributes: {"enclosures":[]}
content:
<div data-sanitized-class="section bad">
<h2 data-sanitized-id="bad-code">Bad code</h2>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>a</span> <span data-sanitized-class="token attr-name">href</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>javascript:void(1)<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token special-attr"><span data-sanitized-class="token attr-name">onClick</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">'</span><span data-sanitized-class="token value javascript language-javascript">window<span data-sanitized-class="token punctuation">.</span>location<span data-sanitized-class="token operator">=</span><span data-sanitized-class="token string">"index.html"</span></span><span data-sanitized-class="token punctuation">'</span></span></span><span data-sanitized-class="token punctuation">&gt;</span></span>Link<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>a</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
</div>
<div data-sanitized-id="issues" data-sanitized-class="section">
<h2 data-sanitized-id="issues-and-how-to-fix-them">Issues and how to fix them</h2>
<ol>
<li>Links won't work, if JavaScript fails to load or execute.</li>
<li>You don’t need JavaScript to link to other pages, you can use the <code>href</code> attribute for that. Browser support is pretty good (100% of all browsers).</li>
<li>The context menu on right click is different, "Open in new tab/window" is not available.</li>
<li><kbd>CMD</kbd> + Click to open a link in the background won't work.</li>
</ol>
</div>
<div data-sanitized-class="section">
<h2 data-sanitized-id="good-code">Good code</h2>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>a</span> <span data-sanitized-class="token attr-name">href</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>index.html<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>Link<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>a</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
</div>


guid: https://htmhell.dev/7-multiple-duplicate-ids-and-table-layout/
title: #7 multiple duplicate ids and table layout
author: ;Manuel Matuzovic
link: https://htmhell.dev/7-multiple-duplicate-ids-and-table-layout/
hash: ��>)�2��(�"N(��5
attributes: {"enclosures":[]}
content:
<div data-sanitized-class="section bad">
<h2 data-sanitized-id="bad-code">Bad code</h2>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"> <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>table</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">   <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>tr</span> <span data-sanitized-class="token attr-name">id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>body<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">     <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>td</span> <span data-sanitized-class="token attr-name">id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>body<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">       <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>table</span> <span data-sanitized-class="token attr-name">id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>body<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">         <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>tr</span> <span data-sanitized-class="token attr-name">id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>body_row<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">           <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>td</span> <span data-sanitized-class="token attr-name">id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>body_left<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>…<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>td</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">           <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>td</span> <span data-sanitized-class="token attr-name">id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>body_middle<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>…<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>td</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">           <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>td</span> <span data-sanitized-class="token attr-name">id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>body_right<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>…<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>td</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">         <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>tr</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">       <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>table</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">     <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>td</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">   <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>tr</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"> <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>table</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
</div>
<div data-sanitized-id="issues" data-sanitized-class="section">
<h2 data-sanitized-id="issues-and-how-to-fix-them">Issues and how to fix them</h2>
<p>An <code>id</code> should be unique no matter on which tag it’s added. Also this code uses a table-based layout (and yeah, it’s on a live production site still running, redesigned in 2016). Avoid using tables for layout reasons only, because table elements have a semantic meaning. Using them could make your document more confusing for some people.</p>
<ol>
<li>Replace the current markup with semantic HTML5 tags. This reduces the number of tags and avoids the table-based layout.</li>
<li>Style the new elements by using <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flexible_Box_Layout/Basic_Concepts_of_Flexbox">Flexbox</a> or <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout">CSS Grid</a>.</li>
<li>For the ID values, more semantic terms should be used.</li>
</ol>
</div>
<div data-sanitized-class="section">
<h2 data-sanitized-id="good-code">Good code</h2>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"> <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>main</span> <span data-sanitized-class="token attr-name">id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>body<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">   <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>aside</span> <span data-sanitized-class="token attr-name">id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>secondary_content<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span> <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>aside</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">   <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>article</span> <span data-sanitized-class="token attr-name">id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>primary_content<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span> <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>article</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">   <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>aside</span> <span data-sanitized-class="token attr-name">id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>tertiary_content<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span> <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>aside</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"> <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>main</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
</div>


guid: https://htmhell.dev/8-anchor-tag-used-as-button/
title: #8 anchor tag used as button
author: ;Manuel Matuzovic
link: https://htmhell.dev/8-anchor-tag-used-as-button/
hash: �e�͜�������
attributes: {"enclosures":[]}
content:
<div data-sanitized-class="section bad">
<h2 data-sanitized-id="bad-code">Bad code</h2>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>a</span> <span data-sanitized-class="token attr-name">href</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>#<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token special-attr"><span data-sanitized-class="token attr-name">onclick</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token value javascript language-javascript">modal<span data-sanitized-class="token punctuation">.</span><span data-sanitized-class="token function">open</span><span data-sanitized-class="token punctuation">(</span><span data-sanitized-class="token punctuation">)</span></span><span data-sanitized-class="token punctuation">"</span></span></span><span data-sanitized-class="token punctuation">&gt;</span></span>Login<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>a</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
</div>
<div data-sanitized-id="issues" data-sanitized-class="section">
<h2 data-sanitized-id="issues-and-how-to-fix-them">Issues and how to fix them</h2>
<ol>
<li>If the <code>a</code> element has an <code>href</code> attribute, it represents a link to another resource like a page or a <abbr title="Portable Document Format">PDF</abbr> document.</li>
<li>The purpose of the element in this example is to trigger an action on the same page with JavaScript. The <code>button</code> element with the type button is more suitable because it has no default behaviour and it’s designed to trigger actions on user input.</li>
<li>Browsers and devices that do not support JavaScript will not be able to access the content in the modal.</li>
</ol>
</div>
<div data-sanitized-class="section">
<h2 data-sanitized-id="good-code">Good code</h2>
<h3 data-sanitized-id="solution-#1-use-a-button-element">Solution #1: Use a button element</h3>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>button</span> <span data-sanitized-class="token attr-name">type</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>button<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token special-attr"><span data-sanitized-class="token attr-name">onclick</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token value javascript language-javascript">modal<span data-sanitized-class="token punctuation">.</span><span data-sanitized-class="token function">open</span><span data-sanitized-class="token punctuation">(</span><span data-sanitized-class="token punctuation">)</span></span><span data-sanitized-class="token punctuation">"</span></span></span><span data-sanitized-class="token punctuation">&gt;</span></span>Login<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>button</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
<p>Since the only purpose of this element is to trigger an action on the same page instead of navigation; the <code>&lt;button&gt;&lt;/button&gt;</code> element is the semantically correct element to use.</p>
<h3 data-sanitized-id="solution-#2-add-a-valid-href-value-to-the-login-form">Solution #2: Add a valid href value to the login form</h3>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>a</span> <span data-sanitized-class="token attr-name">href</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>/login<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token special-attr"><span data-sanitized-class="token attr-name">onclick</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token value javascript language-javascript">modal<span data-sanitized-class="token punctuation">.</span><span data-sanitized-class="token function">open</span><span data-sanitized-class="token punctuation">(</span><span data-sanitized-class="token punctuation">)</span></span><span data-sanitized-class="token punctuation">"</span></span></span><span data-sanitized-class="token punctuation">&gt;</span></span>Login<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>a</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
<p>Another solution is to add a <code>href</code> value to a location where the same actions as the modal can be performed.<br>
This provides a fallback for browsers and devices that do not support JavaScript. This is an example of progressive enhancement.</p>
</div>


guid: https://htmhell.dev/9-cookie-consent-from-hell/
title: #9 Cookie Consent from Hell
author: ;Manuel Matuzovic
link: https://htmhell.dev/9-cookie-consent-from-hell/
hash: "�YR�G��%Lx*�y�
attributes: {"enclosures":[]}
content:
<div data-sanitized-class="section bad">
<h2 data-sanitized-id="bad-code">Bad code</h2>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>body</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>header</span><span data-sanitized-class="token punctuation">&gt;</span></span>…<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>header</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>main</span><span data-sanitized-class="token punctuation">&gt;</span></span>…<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>main</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>footer</span><span data-sanitized-class="token punctuation">&gt;</span></span>…<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>footer</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>cookie_consent modal<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>p</span><span data-sanitized-class="token punctuation">&gt;</span></span>We use cookies…<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>p</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>cookie_consent__close<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">      <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>i</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>fa fa-times<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>i</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>cookie_consent__ok<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>OK<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>body</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
</div>
<div data-sanitized-id="issues" data-sanitized-class="section">
<h2 data-sanitized-id="issues-and-how-to-fix-them">Issues and how to fix them</h2>
<ol>
<li>The modal is not the first item on the page and focus is not on the modal when the page loads. Keyboard users have to tab through all items on the page to access the cookie consent window.</li>
<li>A <code>div</code> isn’t keyboard focusable.</li>
<li>Content inside these <code>div</code>s is semantically just text. Assistive technology doesn’t know that these fake buttons are actually buttons.</li>
<li>A click event on a <code>div</code> triggers only on click. A click event on a <code>button</code> triggers on click and if the user presses the <kbd>Enter</kbd> or <kbd>Space</kbd> key.</li>
<li>There’s no text alternative for the icon.</li>
<li><a href="https://fontawesome.com/v4.7.0/accessibility/">Font Awesome advises to hide icons semantically</a> by settings <code>aria-hidden="true"</code> on the <code>&lt;i&gt;</code> element.</li>
<li>Font Awesome adds Unicode content via the <code>::before</code> pseudo element. Assistive technology may announce the Unicode equivalent, which in this specific example would be “times” since <a href="https://fontawesome.com/icons/times">fa-times is not a cross but a multiplication sign</a>. (Please note: Talkback and VoiceOver didn’t announce anything in this example.)</li>
<li>Bonus: it should be possible to close modals by pressing <kbd>Esc</kbd>.</li>
</ol>
</div>
<div data-sanitized-class="section">
<h2 data-sanitized-id="good-code">Good code</h2>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>body</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>cookie_consent modal<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>h2</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>sr-only<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>Cookie notice<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>h2</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>p</span><span data-sanitized-class="token punctuation">&gt;</span></span>We use cookies…<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>p</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>button</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>cookie_consent__ok<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>OK<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>button</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>button</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>cookie_consent__close<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">      <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>span</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>sr-only<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>Close notification<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>span</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">      <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>i</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>fa fa-times<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">aria-hidden</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>true<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>i</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>button</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>header</span><span data-sanitized-class="token punctuation">&gt;</span></span>…<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>header</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>main</span><span data-sanitized-class="token punctuation">&gt;</span></span>…<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>main</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>footer</span><span data-sanitized-class="token punctuation">&gt;</span></span>…<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>footer</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>body</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
<p>Unfortunately, there’s no native way of hiding content only visually.<br>The <code>.sr-only</code> class makes sure that content is visually hidden but still accessible to screen reader users.</p>
<pre data-sanitized-class="language-css"><code data-sanitized-class="language-css"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token selector">.sr-only</span> <span data-sanitized-class="token punctuation">{</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">position</span><span data-sanitized-class="token punctuation">:</span> absolute<span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">white-space</span><span data-sanitized-class="token punctuation">:</span> nowrap<span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">width</span><span data-sanitized-class="token punctuation">:</span> 1px<span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">height</span><span data-sanitized-class="token punctuation">:</span> 1px<span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">overflow</span><span data-sanitized-class="token punctuation">:</span> hidden<span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">border</span><span data-sanitized-class="token punctuation">:</span> 0<span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">padding</span><span data-sanitized-class="token punctuation">:</span> 0<span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">clip</span><span data-sanitized-class="token punctuation">:</span> <span data-sanitized-class="token function">rect</span><span data-sanitized-class="token punctuation">(</span>0 0 0 0<span data-sanitized-class="token punctuation">)</span><span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">clip-path</span><span data-sanitized-class="token punctuation">:</span> <span data-sanitized-class="token function">inset</span><span data-sanitized-class="token punctuation">(</span>50%<span data-sanitized-class="token punctuation">)</span><span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token property">margin</span><span data-sanitized-class="token punctuation">:</span> -1px<span data-sanitized-class="token punctuation">;</span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token punctuation">}</span></span></code></pre>
</div>
<div data-sanitized-class="section">
  <h2 data-sanitized-id="resources">Resources</h2>
<ol>
<li><a href="https://www.youtube.com/watch?v=Uaqo4FOI_DY">Screen readers and cookie consents</a></li>
</ol>
</div>


guid: https://htmhell.dev/10-section-is-no-replacement-for-div/
title: #10 &lt;section&gt; is no replacement for &lt;div&gt;
author: ;Manuel Matuzovic
link: https://htmhell.dev/10-section-is-no-replacement-for-div/
hash: <NJ���ѯ�V���
attributes: {"enclosures":[]}
content:
<div data-sanitized-class="section bad">
<h2 data-sanitized-id="bad-code">Bad code</h2>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>section</span> <span data-sanitized-class="token attr-name">id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>page-top<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>section</span> <span data-sanitized-class="token attr-name">data-section-id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>page-top<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token special-attr"><span data-sanitized-class="token attr-name">style</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token value css language-css"><span data-sanitized-class="token property">display</span><span data-sanitized-class="token punctuation">:</span> none<span data-sanitized-class="token punctuation">;</span></span><span data-sanitized-class="token punctuation">"</span></span></span><span data-sanitized-class="token punctuation">&gt;</span></span><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>section</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>section</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>main</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>section</span> <span data-sanitized-class="token attr-name">id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>main-content<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>header</span> <span data-sanitized-class="token attr-name">id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>main-header<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">      <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>h1</span><span data-sanitized-class="token punctuation">&gt;</span></span>...<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>h1</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">      <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>section</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>container-fluid<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">        <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>section</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>row<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">          <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>article</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>content col-sm-12<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">            <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>section</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>content-inner<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">              <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>content__body<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">                <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>article</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>slider<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">                  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>section</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>slide<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span> … <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>section</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">                <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>article</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">              <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">            <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>section</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">          <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>article</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">        <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>section</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">      <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>section</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>header</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>section</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>main</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
</div>
<div data-sanitized-id="issues" data-sanitized-class="section">
<h2 data-sanitized-id="issues-and-how-to-fix-them">Issues and how to fix them</h2>
<ol>
<li><a href="https://www.w3.org/TR/html52/sections.html#the-section-element">Sectioning content</a> (<code>&lt;article&gt;</code>, <code>&lt;aside&gt;</code>, <code>&lt;nav&gt;</code>, <code>&lt;section&gt;</code>) is content that potentially has a heading and is appropriate only if the element’s contents would be listed explicitly in the document’s outline.</li>
<li><a href="https://www.w3.org/TR/html52/sections.html#headings-and-sections">It’s OK to nest sectioning content</a>, but it only makes sense if the contents of the inner elements are related to the contents of the outer element.</li>
<li>In this specific example, the sectioning elements are used for styling purposes only. They must not convey any semantic meaning, most of these sections and articles should be divs.</li>
<li>Screen readers may announce the role of a labelled <code>&lt;section&gt;</code> (<em>region</em>), when a user navigates to this section. User Agents may also provide methods to navigate to section elements. Using too many (nested) sections may make interfaces for screen reader users unnecessarily complicated.</li>
<li><code>&lt;section&gt;</code>s are no replacement for <code>&lt;div&gt;</code>s.</li>
<li>A<code>&lt;header&gt;</code> typically only contains a group of introductory or navigational aids for its nearest ancestor <code>&lt;main&gt;</code> element or sectioning content or sectioning root element. If it’s not a descendant of the main element or a sectioning content element, then that <a href="https://www.w3.org/TR/html52/sections.html#the-header-element">header is scoped to the body</a>.</li>
<li>The <a href="https://www.w3.org/WAI/tutorials/carousels/structure/">carousel (.slider) should be enclosed in a labeled region</a>, to allow users to find it easily.</li>
</ol>
</div>
<div data-sanitized-class="section">
<h2 data-sanitized-id="good-code">Good code</h2>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token attr-name">id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>page-top<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token attr-name">data-section-id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>page-top<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token special-attr"><span data-sanitized-class="token attr-name">style</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token value css language-css"><span data-sanitized-class="token property">display</span><span data-sanitized-class="token punctuation">:</span> none<span data-sanitized-class="token punctuation">;</span></span><span data-sanitized-class="token punctuation">"</span></span></span><span data-sanitized-class="token punctuation">&gt;</span></span><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>main</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>section</span> <span data-sanitized-class="token attr-name">id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>main-content<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>header</span> <span data-sanitized-class="token attr-name">id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>main-header<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">      <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>h1</span><span data-sanitized-class="token punctuation">&gt;</span></span>...<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>h1</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>header</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>container-fluid<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">      <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>row<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">        <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>content col-sm-12<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">          <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>content-inner<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">            <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>section</span> <span data-sanitized-class="token attr-name">aria-labelledby</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>sliderheading<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>content__body<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">              <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>h2</span> <span data-sanitized-class="token attr-name">id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>sliderheading<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">hidden</span><span data-sanitized-class="token punctuation">&gt;</span></span>New Products<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>h2</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">              <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>ul</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>slider<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">                <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>li</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>slide<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span> … <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>li</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">              <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>ul</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">            <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>section</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">          <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">        <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">      <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>section</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>main</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
</div>
<div data-sanitized-class="section">
<h2 data-sanitized-id="further-reading">Further reading</h2>
<ul>
<li><a href="https://a11ysupport.io/tech/html/section_element">Accessibility Support - section element (html)</a></li>
<li>Thanks to <a href="https://adrianroselli.com/">Adrian Roselli</a> for feedback</li>
</ul>
</div>


guid: https://htmhell.dev/11-the-trigram-for-heaven/
title: #11 The trigram for heaven
author: ;Manuel Matuzovic
link: https://htmhell.dev/11-the-trigram-for-heaven/
hash: 8�:jC�'��[�x\&|
attributes: {"enclosures":[]}
content:
<div data-sanitized-class="section bad">
<h2 data-sanitized-id="bad-code">Bad code</h2>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>span</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>nav-toggle<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span> ☰ Menu <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>span</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
</div>
<div data-sanitized-id="issues" data-sanitized-class="section">
<h2 data-sanitized-id="issues-and-how-to-fix-them">Issues and how to fix them</h2>
<ol>
<li>A screen reader may announce this as <em>trigram for heaven menu</em>, because ☰ is the unicode character for the <a href="https://en.wikipedia.org/wiki/Bagua">trigram for heaven</a>.</li>
<li>The purpose of the icon is decorative, it should be hidden from screen readers. Consider adding decorative images using background properties in CSS.</li>
<li>A click event on a <code>span</code> triggers only on click. A click event on a <code>button</code> triggers on click and if the user presses the <kbd>Enter</kbd> or <kbd>Space</kbd> key.</li>
<li>A <code>span</code> isn’t keyboard focusable, but this element must be focusable, because it’s used for opening and closing the main navigation.</li>
<li><code>aria-expanded</code> must be added to indicate wheather the main navigation is collapsed or not.</li>
</ol>
</div>
<div data-sanitized-class="section">
<h2 data-sanitized-id="good-code">Good code</h2>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>button</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>nav-toggle<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">aria-expanded</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>false<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>span</span> <span data-sanitized-class="token attr-name">aria-hidden</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>true<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>☰<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>span</span><span data-sanitized-class="token punctuation">&gt;</span></span> Menu</span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>button</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
</div>
<div data-sanitized-class="section">
<h2 data-sanitized-id="fun-fact">Fun fact</h2>
<blockquote>
<p>The Bagua or Pa Kua are eight symbols used in Taoist cosmology to represent the fundamental principles of reality, seen as a range of eight interrelated concepts. Each consists of three lines, each line either "broken" or "unbroken", respectively representing yin or yang. Due to their tripartite structure, they are often referred to as Eight Trigrams in English.<br>
<a href="https://en.wikipedia.org/wiki/Bagua">https://en.wikipedia.org/wiki/Bagua</a></p>
</blockquote>
</div>


guid: https://christitus.com/vpn-kill-switch/
title: How To Setup a VPN Kill Switch Server
link: https://christitus.com/vpn-kill-switch/
hash: 1И���:]"��V�
attributes: {"enclosures":[]}
content:
<p>This will show you how to set up a VPN Kill Switch so all traffic will come from that server. For this server, I am using CentOS, but you can easily use Ubuntu server if you are more familiar with that.</p>
<h2 data-sanitized-id="install-packages">Install packages</h2>
<p><img loading="lazy" src="https://christitus.com/images/2019/12/instal.webp" alt="install image" data-sanitized-class="img-fluid"> </p>
<p><code>sudo apt install openvpn ufw -y</code><br>
<em>*Note: use apt instead of dnf on Ubuntu or Debian Servers</em></p>
<h2 data-sanitized-id="set-static-ip">Set Static IP</h2>
<p><code>sudo nmtuisudo nmcli connection down eth0 &amp;&amp; sudo nmcli connection up eth0</code></p>
<h2 data-sanitized-id="download-ovpn-files">Download OVPN Files</h2>
<p>My recommendation for a Public VPN Provider is Express VPN. It is what I use below and in my VPN videos due to its speed and amount of servers. This is my affiliate link where you will receive an extra 3 months free for signing up for a year. <a href="https://christitus.com/expressvpn">https://christitus.com/expressvpn</a><br>
<strong>However, you can use these instructions on ANY VPN that provides ovpn files which any reputable VPN provider has.</strong></p>
<p><code>mv ~/Downloads/client.ovpn /etc/openvpn/test.conf</code></p>

<h2 data-sanitized-id="service-creation">Service creation</h2>
<p><img loading="lazy" src="https://christitus.com/images/2019/12/sysinstall.webp" alt="sysinstall image" data-sanitized-class="img-fluid"> </p>
<p><code>ls /lib/systemd/system/</code><br>
<em>*Check for openvpn-client@ or openvpn@</em><br>
<code>sudo systemctl start openvpn@test</code></p>
<h2 data-sanitized-id="disable-ipv6-and-secure-system">Disable ipv6 and Secure System</h2>
<p><img loading="lazy" src="https://christitus.com/images/2019/12/sysctl.webp" alt="sysctl" data-sanitized-class="img-fluid"> </p>
<p><code>sudo nano /etc/sysctl.conf</code></p>
<blockquote>
<p>net.ipv6.conf.all.disable_ipv6=1<br>
net.ipv6.conf.default.disable_ipv6=1<br>
net.ipv6.conf.lo.disable_ipv6=1</p>
</blockquote>
<p><code>sudo sysctl -p</code></p>
<p><strong>Verify Ipv6 is disabled</strong><br>
<code>cat /proc/sys/net/ipv6/conf/all/disable_ipv6</code><br>
<code>sudo sysctl --all | grep disable_ipv6</code></p>
<h2 data-sanitized-id="firewall-ufw-blocks-8211-vpn-kill-switch">Firewall ufw blocks – VPN Kill Switch</h2>
<p><img loading="lazy" src="https://christitus.com/images/2019/12/vpnsetup.webp" alt="install image" data-sanitized-class="img-fluid"> </p>
<p><code>sudo nano /etc/default/ufw</code></p>
<blockquote>
<p>IPV6=no</p>
</blockquote>
<p><strong>Whitelist Local Area Network</strong><br>
<code>sudo ufw allow in to 192.168.1.0/24</code><br>
<code>sudo ufw allow out to 192.168.1.0/24</code><br>
<strong>Block All Incoming and Outgoing Traffic by Default</strong><br>
<code>sudo ufw default deny outgoing</code><br>
<code>sudo ufw default deny incoming</code><br>
<strong>Whitelist VPN Port for VPN Establishment</strong><br>
<code>sudo ufw allow out to any port 1194 proto udp</code><br>
<em>*check port by doing head /etc/openvpn/expressvpn.conf</em><br>
<strong>Whitelist VPN Tunnel</strong><br>
<code>sudo ufw allow out on tun0 from any to any</code><br>
<code>sudo ufw allow in on tun0 from any to any</code><br>
<strong>Enable Firewall</strong><br>
<code>sudo ufw enable</code></p>
<h2 data-sanitized-id="external-program-setup-on-server">External Program Setup on Server</h2>
<p><img loading="lazy" src="https://christitus.com/images/2019/12/transmission.webp" alt="install image" data-sanitized-class="img-fluid"> </p>
<p><strong>X11 Forwarding</strong><br>
</p><div>
<iframe allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/auePeI8vZA8?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" title="YouTube video" sandbox="allow-scripts allow-same-origin"></iframe>
</div>

<p><strong>Transmission daemon</strong><br>
<code>sudo apt install transmission-daemon</code><br>
<code>sudo systemctl stop transmission-daemon</code><br>
<code>sudo nano /etc/transmission-daemon/settings.json</code><br>
<em>*enable rpc and whitelist, add blocklist</em><br>
<code>sudo systemctl start transmission-daemon</code></p>
<h2 data-sanitized-id="full-video-walkthrough">Full Video Walkthrough</h2>
<div>
<iframe allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/wc-Ti8UoPoA?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" title="YouTube video" sandbox="allow-scripts allow-same-origin"></iframe>
</div>


guid: https://htmhell.dev/12-accessible-poll-yesno/
title: #12 accessible poll yes/no
author: ;Manuel Matuzovic
link: https://htmhell.dev/12-accessible-poll-yesno/
hash: �9�FC�)�ւ�
attributes: {"enclosures":[]}
content:
<div data-sanitized-class="section bad">
<h2 data-sanitized-id="bad-code">Bad code</h2>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>form</span> <span data-sanitized-class="token attr-name">role</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>form<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>h2</span><span data-sanitized-class="token punctuation">&gt;</span></span>Poll title<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>h2</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token attr-name">id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>pollQuestion<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>Is this accessible?<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token attr-name">name</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>pollGroup<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">role</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>radiogroup<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token attr-name">role</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>radiogroup<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">aria-label</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>Poll title<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">      <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>input</span> <span data-sanitized-class="token attr-name">type</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>radio<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">name</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>poll<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">aria-labelledby</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>pollQuestion<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">value</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>[object Object]<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">      <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>span</span><span data-sanitized-class="token punctuation">&gt;</span></span>Yes<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>span</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"></span><br><span data-sanitized-class="highlight-line">      <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>input</span> <span data-sanitized-class="token attr-name">type</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>radio<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">name</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>poll<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">aria-labelledby</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>pollQuestion<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">value</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>[object Object]<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">      <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>span</span><span data-sanitized-class="token punctuation">&gt;</span></span>No<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>span</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"></span><br><span data-sanitized-class="highlight-line">      <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>input</span> <span data-sanitized-class="token attr-name">type</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>radio<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">name</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>poll<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">aria-labelledby</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>pollQuestion<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">value</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>[object Object]<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">      <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>span</span><span data-sanitized-class="token punctuation">&gt;</span></span>Maybe<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>span</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"></span><br><span data-sanitized-class="highlight-line">      <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>input</span> <span data-sanitized-class="token attr-name">type</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>radio<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">name</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>poll<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">aria-labelledby</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>pollQuestion<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">value</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>[object Object]<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">      <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>span</span><span data-sanitized-class="token punctuation">&gt;</span></span>Can you repeat the question?<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>span</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>button</span> <span data-sanitized-class="token attr-name">type</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>submit<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>Vote<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>button</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>form</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
</div>
<div data-sanitized-id="issues" data-sanitized-class="section">
<h2 data-sanitized-id="issues-and-how-to-fix-them">Issues and how to fix them</h2>
<ol>
<li>Setting form semantics explicitly using the <code>role</code> attribute isn’t necessary, the semantics are implied in the element.</li>
<li>A form is a landmark. An <code>aria-labelledby</code> referring to the <code>h2</code> gives the landmark an accessible name. This makes it more useful for navigation.</li>
<li>Setting <code>role="radiogroup"</code> isn’t necessary, and certainly not twice. If you want to group the element, use a <code>fieldset</code> instead.</li>
<li>Don’t use <code>aria-labelledby</code> to create a relationship between a <code>radiobutton</code> and the poll question. <code>aria-labelledby</code> is for setting the accessible name. Use a <code>legend</code> instead.</li>
<li>To give <code>radiobutton</code> an accessible name, put the <code>span</code> content in a <code>label</code>, and use <code>for</code> to create a relationship with the <code>radiobutton</code>.</li>
<li>The button is inside the fieldset to create one logical grouping.</li>
</ol>
</div>
<div data-sanitized-class="section">
<h2 data-sanitized-id="good-code">Good code</h2>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>form</span> <span data-sanitized-class="token attr-name">aria-labelledby</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>poll-title<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>h2</span> <span data-sanitized-class="token attr-name">id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>poll-title<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>Poll title<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>h2</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>fieldset</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>legend</span><span data-sanitized-class="token punctuation">&gt;</span></span>Is this accessible?<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>legend</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>input</span> <span data-sanitized-class="token attr-name">type</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>radio<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>radio1<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">name</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>poll<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">value</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>yes<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>label</span> <span data-sanitized-class="token attr-name">for</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>radio1<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>Yes<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>label</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>input</span> <span data-sanitized-class="token attr-name">type</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>radio<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>radio2<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">name</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>poll<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">value</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>no<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>label</span> <span data-sanitized-class="token attr-name">for</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>radio2<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>No<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>label</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>input</span> <span data-sanitized-class="token attr-name">type</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>radio<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>radio3<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">name</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>poll<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">value</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>maybe<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>label</span> <span data-sanitized-class="token attr-name">for</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>radio3<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>Maybe<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>label</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>input</span> <span data-sanitized-class="token attr-name">type</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>radio<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>radio4<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">name</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>poll<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">value</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>repeat<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>label</span> <span data-sanitized-class="token attr-name">for</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>radio4<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>Can you repeat the question?<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>label</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>button</span> <span data-sanitized-class="token attr-name">type</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>submit<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>Vote<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>button</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>fieldset</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>form</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
</div>


guid: https://swprs.org/?p=61185
title: The Propaganda Multiplier
author: ;Swiss Policy Research
link: https://swprs.org/2020/01/01/the-propaganda-multiplier/
hash: �� �;� <] 2s
tags: #SPR
attributes: {"enclosures":[]}
content:
<p><a href="https://swprs.org/the-propaganda-multiplier/"><img data-recalc-dims="1" loading="lazy" decoding="async" data-attachment-id="14158" data-permalink="https://swprs.org/the-propaganda-multiplier/propaganda-multiplier-s/" data-orig-file="https://i0.wp.com/swprs.org/wp-content/uploads/2019/03/propaganda-multiplier-s.png?fit=1103%2C593&amp;ssl=1" data-orig-size="1103,593" data-comments-opened="0" data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="propaganda-multiplier-s" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/swprs.org/wp-content/uploads/2019/03/propaganda-multiplier-s.png?fit=300%2C161&amp;ssl=1" data-large-file="https://i0.wp.com/swprs.org/wp-content/uploads/2019/03/propaganda-multiplier-s.png?fit=736%2C396&amp;ssl=1" src="https://i0.wp.com/swprs.org/wp-content/uploads/2019/03/propaganda-multiplier-s.png?resize=736%2C396&amp;ssl=1" alt="" width="736" height="396" data-sanitized-class="aligncenter wp-image-14158 size-full"></a></p>
<p>Most of the international news coverage in Western media is provided by only three global news agencies based in New York, London and Paris.</p>
<p><strong>EN</strong>: <a href="https://swprs.org/the-propaganda-multiplier/">Read more →</a><br>
<strong>DE</strong>: <a href="https://swprs.org/der-propaganda-multiplikator/">Weiterlesen →</a></p>
<hr>


guid: https://swprs.org/?p=61181
title: The American Empire and Its Media
author: ;Swiss Policy Research
link: https://swprs.org/2020/01/01/the-american-empire-and-its-media/
hash: �Yy�t#6�-?]C��
tags: #SPR
attributes: {"enclosures":[]}
content:
<p><a href="https://swprs.org/the-american-empire-and-its-media/"><img data-recalc-dims="1" loading="lazy" decoding="async" data-attachment-id="7488" data-permalink="https://swprs.org/cfr-media-network-hdv-spr-s/" data-orig-file="https://i0.wp.com/swprs.org/wp-content/uploads/2017/08/cfr-media-network-hdv-spr-s.png?fit=500%2C357&amp;ssl=1" data-orig-size="500,357" data-comments-opened="0" data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="cfr-media-network-hdv-spr-s" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/swprs.org/wp-content/uploads/2017/08/cfr-media-network-hdv-spr-s.png?fit=300%2C214&amp;ssl=1" data-large-file="https://i0.wp.com/swprs.org/wp-content/uploads/2017/08/cfr-media-network-hdv-spr-s.png?fit=500%2C357&amp;ssl=1" src="https://i0.wp.com/swprs.org/wp-content/uploads/2017/08/cfr-media-network-hdv-spr-s.png?resize=500%2C357&amp;ssl=1" alt="" width="500" height="357" data-sanitized-class="aligncenter wp-image-7488 size-full"></a></p>
<p>On the role of the US Council on Foreign Relations in politics and the media.</p>
<p><strong>EN</strong>: <a href="https://swprs.org/the-american-empire-and-its-media/">Read more →</a><br>
<strong>DE</strong>: <a href="https://swprs.org/das-american-empire-und-seine-medien/">Weiterlesen →</a></p>
<hr>


guid: https://swprs.org/?p=61177
title: Wikipedia and Propaganda
author: ;Swiss Policy Research
link: https://swprs.org/2020/01/01/wikipedia-a-propaganda-operation/
hash: ;ѳ�� k̤�"D�
tags: #SPR
attributes: {"enclosures":[]}
content:
<p><a href="https://swprs.org/wikipedia-and-propaganda"><img data-recalc-dims="1" loading="lazy" decoding="async" data-attachment-id="13998" data-permalink="https://swprs.org/der-wikipedia-prozess/wikipedia-prozess/" data-orig-file="https://i0.wp.com/swprs.org/wp-content/uploads/2019/02/wikipedia-prozess.jpg?fit=595%2C335&amp;ssl=1" data-orig-size="595,335" data-comments-opened="0" data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="Wikipedia-Manipulation" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/swprs.org/wp-content/uploads/2019/02/wikipedia-prozess.jpg?fit=300%2C169&amp;ssl=1" data-large-file="https://i0.wp.com/swprs.org/wp-content/uploads/2019/02/wikipedia-prozess.jpg?fit=595%2C335&amp;ssl=1" src="https://i0.wp.com/swprs.org/wp-content/uploads/2019/02/wikipedia-prozess.jpg?resize=595%2C335&amp;ssl=1" alt="Wikipedia-Manipulation" width="595" height="335" data-sanitized-class="aligncenter wp-image-13998 size-full"></a></p>
<p>Is Wikipedia an open encyclopedia or a covert propaganda platform?</p>
<p><strong>EN</strong>: <a href="https://swprs.org/wikipedia-and-propaganda">Read more →</a><br>
<strong>DE</strong>: <a href="https://swprs.org/wikipedia-und-propaganda/">Weiterlesen →</a></p>
<hr>


guid: https://christitus.com/hugo-guide/
title: Hugo Static Site Guide
link: https://christitus.com/hugo-guide/
hash: �����Yؚ�@.��
attributes: {"enclosures":[]}
content:
<p>This article goes over the basics of hugo and guides you through the process of using a static site generator.</p>
<h2 data-sanitized-id="installing-hugo">Installing Hugo</h2>
<p>Arch-Based Users: <code>yay -S hugo</code><br>
Debian-Based Users: <code>sudo apt install hugo</code><br>
<em>Note: Debian packages are old and I recommend downloading the latest version of hugo from github</em></p>
<p>Github Repo for Hugo (Latest Versions and Notes)<br>
<a href="https://github.com/gohugoio/hugo">Hugo GitHub</a><br>
<a href="https://gohugo.io/">Official Site</a></p>
<p>Create your first site and install a theme using the <a href="https://gohugo.io/getting-started/quick-start/">Quick Start</a> Page.</p>
<h2 data-sanitized-id="common-hugo-commands">Common Hugo Commands</h2>
<ul>
<li><code>hugo</code> - builds static files in the <code>siteroot/public</code> folder</li>
<li><code>hugo server</code> - runs a test site so you can login to http://127.0.0.1:1313 and see your changes before pushing live</li>
<li><code>hugo new posts/dir/newpost.md</code> - you can make new posts on the fly with all your templates (see below)</li>
</ul>
<h2 data-sanitized-id="the-first-changes">The First Changes</h2>
<p>I made several changes when I first switched to HUGO and these were the changes I made.</p>
<h3 data-sanitized-id="theme-modification">Theme Modification</h3>
<p>I downloaded the the <a href="https://themes.gohugo.io/mainroad/">Mainroad</a> Theme and installed it during the Quick Start. <em>Note: My Debian system had an old version of HUGO 0.40 and I had to update before the theme worked.</em></p>
<h4 data-sanitized-id="changing-theme-widgets">Changing Theme Widgets</h4>
<h5 data-sanitized-id="social-widget">Social Widget</h5>
<p>I first started to change the <em>social widget</em> by adding YouTube and Twitch from the following file <code>siteroot/themes/mainroad/layouts/partials/widgets/social.html</code>.<br>
The Most challengeing Part of this was the SVG files used by mainroad. However, once I figured out the SVG format can be edited in a simple text editor and I mirrored the size and types from the existing SVG files they showed up.</p>
<p>Here are the Edits I made to <em>social.html</em>:</p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">{{- with .Site.Params.widgets.social.twitch }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> &lt;div class="widget-social__item widget__item"&gt;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> &lt;a class="widget-social__link widget__link btn" title="Twitch" rel="noopener noreferrer" href="https://twitch.tv/{{ . }}" target="_blank"&gt;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> {{ partial "svg/twitch.svg" (dict "class" "widget-social__link-icon") }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> &lt;span&gt;Twitch Live Streams&lt;/span&gt;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> &lt;/a&gt;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> &lt;/div&gt;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> {{- end }}
</span></span></code></pre></div><p>Basically after getting the SVG setup and putting the twitch.svg and youtube.svg in this path <code>siteroot/mainroad/layouts/partials/svg</code> I was able to get the Social widget exactly how I wanted.</p>
<h5 data-sanitized-id="tags-widget">Tags Widget</h5>
<p>Next up was fixing the tags on the sidebar. They were blocky and quite ugly, where I wanted a traditional tag cloud that you see on many other sites to help users navigate your content. So I began looking at other projects that had the proper code. I found the following code snippit:</p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">{{ if not (eq (len $.Site.Taxonomies.tags) 0) }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> {{ $fontUnit := "rem" }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> {{ $largestFontSize := 2.0 }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> {{ $largestFontSize := 2.5 }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> {{ $smallestFontSize := 1.0 }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> {{ $fontSpread := sub $largestFontSize $smallestFontSize }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> {{ $max := add (len (index $.Site.Taxonomies.tags.ByCount 0).Pages) 1 }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> {{ $min := len (index $.Site.Taxonomies.tags.ByCount.Reverse 0).Pages }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> {{ $spread := sub $max $min }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> {{ $fontStep := div $fontSpread $spread }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">&lt;div class="widget-taglist widget"&gt;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> &lt;h4 class="widget__title"&gt;{{ T "tags_title" }}&lt;/h4&gt;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> &lt;div class="widget__content"&gt;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> &lt;div id="tag-cloud" style="padding: 5px 15px"&gt;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> {{ range $name, $taxonomy := $.Site.Taxonomies.tags }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> {{ $currentTagCount := len $taxonomy.Pages }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> {{ $currentFontSize := (add $smallestFontSize (mul (sub $currentTagCount $min) $fontStep) ) }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> {{ $count := len $taxonomy.Pages }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> {{ $weigth := div (sub (math.Log $count) (math.Log $min)) (sub (math.Log $max) (math.Log $min)) }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> {{ $currentFontSize := (add $smallestFontSize (mul (sub $largestFontSize $smallestFontSize) $weigth) ) }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> &lt;!--Current font size: {{$currentFontSize}}--&gt;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> &lt;a href="{{ "/tags/" | relLangURL }}{{ $name | urlize }}" style="font-size:{{$currentFontSize}}{{$fontUnit}}"&gt;{{ $name }}&lt;/a&gt;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> {{ end }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> &lt;/div&gt;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> &lt;/div&gt;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">&lt;/div&gt;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">{{ end }}
</span></span></code></pre></div><p>After replacing <code>siteroot/themes/mainroad/layouts/partials/widgets/taglist.html</code> with the following code. The tag cloud was complete.</p>
<h4 data-sanitized-id="headerfooter-modification">Header/Footer Modification</h4>
<p>Replacing the Header and footer was extremely easy as it is just plain HTML. The files are located in <code>siteroot/themes/mainroad/layouts/partials/header.html or footer.html</code>. You can leave the stock, but I wanted to add a privacy policy and terms of service to be compliant.</p>
<h4 data-sanitized-id="table-of-contents-changes">Table of Contents Changes</h4>
<p>I replaced the title “PAGE CONTENTS” with share buttons using a share-buttons.html I created. This could all be done in the post-toc.html file, but I wanted to keep it modular and not make too many edits to the theme. Here were my changes:</p>
<p><em>siteroot/themes/mainroad/layouts/partials/post-toc.html</em></p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">{{ if .Param "toc" }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">&lt;div class="post__toc toc"&gt;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> &lt;div class="toc__title"&gt;{{ partial "share-buttons.html" . }}&lt;/div&gt;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> &lt;div class="toc__menu"&gt;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> {{ .TableOfContents }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> &lt;/div&gt;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">&lt;/div&gt;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">{{ end }}
</span></span></code></pre></div><p><em>Note: I added the <code>{{ partial "share-buttons.html" . }}</code> to this and removed PAGE CONTENTS text</em></p>
<p><em>/siteroot/layouts/partials/share-buttons.html</em> - NEW FILE</p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">{{ $pageurl := .Permalink }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">&lt;style&gt;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">#share-buttons {display: inline-block; vertical-align: middle; }
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">#share-buttons:after {content: ""; display: block; clear: both;}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">#share-buttons &gt; div {
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">position: relative;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">text-align: left;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">height: 36px;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">width: 32px;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">float: left;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">text-align: center;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">#share-buttons &gt; div &gt; svg {height: 16px; fill: #d5d5d5; margin-top: 10px;}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">#share-buttons &gt; div:hover {cursor: pointer;}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">#share-buttons &gt; div.facebook:hover &gt; svg {fill: #3B5998;}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">#share-buttons &gt; div.twitter:hover &gt; svg {fill: #55ACEE;}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">#share-buttons &gt; div.linkedin:hover &gt; svg {fill: #0077b5;}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">#share-buttons &gt; div.pinterest:hover &gt; svg {fill: #CB2027;}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">#share-buttons &gt; div.mail:hover &gt; svg {fill: #7D7D7D;}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">#share-buttons &gt; div.instagram:hover &gt; svg {fill: #C73B92;}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">#share-buttons &gt; div.facebook &gt; svg {height: 18px; margin-top: 9px;}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">#share-buttons &gt; div.twitter &gt; svg {height: 20px; margin-top: 8px;}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">#share-buttons &gt; div.linkedin &gt; svg {height: 19px; margin-top: 7px;}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">#share-buttons &gt; div.pinterest &gt; svg {height: 20px; margin-top: 9px;}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">#share-buttons &gt; div.mail &gt; svg {height: 14px; margin-top: 11px;}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">&lt;/style&gt;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">&lt;span style="color: silver;"&gt;Share on: &lt;/span&gt;&lt;div id="share-buttons"&gt;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">&lt;div class="facebook" title="Share this on Facebook" onclick="window.open('http://www.facebook.com/share.php?u={{ $pageurl }}');"&gt;&lt;svg viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"&gt;&lt;path d="M1343 12v264h-157q-86 0-116 36t-30 108v189h293l-39 296h-254v759h-306v-759h-255v-296h255v-218q0-186 104-288.5t277-102.5q147 0 228 12z"/&gt;&lt;/svg&gt;&lt;/div&gt;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">&lt;div class="twitter" title="Share this on Twitter" onclick="window.open('http://twitter.com/home?status={{ $pageurl }}');"&gt;&lt;svg viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"&gt;&lt;path d="M1684 408q-67 98-162 167 1 14 1 42 0 130-38 259.5t-115.5 248.5-184.5 210.5-258 146-323 54.5q-271 0-496-145 35 4 78 4 225 0 401-138-105-2-188-64.5t-114-159.5q33 5 61 5 43 0 85-11-112-23-185.5-111.5t-73.5-205.5v-4q68 38 146 41-66-44-105-115t-39-154q0-88 44-163 121 149 294.5 238.5t371.5 99.5q-8-38-8-74 0-134 94.5-228.5t228.5-94.5q140 0 236 102 109-21 205-78-37 115-142 178 93-10 186-50z"/&gt;&lt;/svg&gt;&lt;/div&gt;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">&lt;div class="linkedin" title="Share this on Linkedin" onclick="window.open('https://www.linkedin.com/shareArticle?mini=true&amp;url={{ $pageurl }}&amp;title=&amp;summary=&amp;source=');"&gt;&lt;svg viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"&gt;&lt;path d="M477 625v991h-330v-991h330zm21-306q1 73-50.5 122t-135.5 49h-2q-82 0-132-49t-50-122q0-74 51.5-122.5t134.5-48.5 133 48.5 51 122.5zm1166 729v568h-329v-530q0-105-40.5-164.5t-126.5-59.5q-63 0-105.5 34.5t-63.5 85.5q-11 30-11 81v553h-329q2-399 2-647t-1-296l-1-48h329v144h-2q20-32 41-56t56.5-52 87-43.5 114.5-15.5q171 0 275 113.5t104 332.5z"/&gt;&lt;/svg&gt;&lt;/div&gt;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">{{ if .Params.image }}&lt;div class="pinterest" title="Share this on Pinterest" onclick="window.open('https://pinterest.com/pin/create/button/?url=&amp;media={{ .Params.image }}&amp;description=');"&gt;&lt;svg viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"&gt;&lt;path d="M256 597q0-108 37.5-203.5t103.5-166.5 152-123 185-78 202-26q158 0 294 66.5t221 193.5 85 287q0 96-19 188t-60 177-100 149.5-145 103-189 38.5q-68 0-135-32t-96-88q-10 39-28 112.5t-23.5 95-20.5 71-26 71-32 62.5-46 77.5-62 86.5l-14 5-9-10q-15-157-15-188 0-92 21.5-206.5t66.5-287.5 52-203q-32-65-32-169 0-83 52-156t132-73q61 0 95 40.5t34 102.5q0 66-44 191t-44 187q0 63 45 104.5t109 41.5q55 0 102-25t78.5-68 56-95 38-110.5 20-111 6.5-99.5q0-173-109.5-269.5t-285.5-96.5q-200 0-334 129.5t-134 328.5q0 44 12.5 85t27 65 27 45.5 12.5 30.5q0 28-15 73t-37 45q-2 0-17-3-51-15-90.5-56t-61-94.5-32.5-108-11-106.5z"/&gt;&lt;/svg&gt;&lt;/div&gt;{{ end }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">&lt;div class="mail" title="Share this through Email" onclick="window.open('mailto:?&amp;body={{ $pageurl }}');"&gt;&lt;svg viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"&gt;&lt;path d="M1792 710v794q0 66-47 113t-113 47h-1472q-66 0-113-47t-47-113v-794q44 49 101 87 362 246 497 345 57 42 92.5 65.5t94.5 48 110 24.5h2q51 0 110-24.5t94.5-48 92.5-65.5q170-123 498-345 57-39 100-87zm0-294q0 79-49 151t-122 123q-376 261-468 325-10 7-42.5 30.5t-54 38-52 32.5-57.5 27-50 9h-2q-23 0-50-9t-57.5-27-52-32.5-54-38-42.5-30.5q-91-64-262-182.5t-205-142.5q-62-42-117-115.5t-55-136.5q0-78 41.5-130t118.5-52h1472q65 0 112.5 47t47.5 113z"/&gt;&lt;/svg&gt;&lt;/div&gt;
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">&lt;/div&gt;
</span></span></code></pre></div><h4 data-sanitized-id="adding-adsense-and-custom-scripts-to-all-pages">Adding AdSense and Custom Scripts to All Pages</h4>
<p>To add specific scripts to all pages, such as AdSense, you will need to modify <code>siteroot/themes/mainroad/_defaults/baseof.html</code>. I added the following before the <code>&lt;/head&gt;</code> of this file to populate AdSense. You could put Analytics in here as well, but it isn’t needed since mainroad theme has the option in <code>config.toml</code>. Here are my modifications:</p>
<p><em>baseof.html</em></p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">{{- if not .Site.IsServer }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> {{ template "_internal/google_analytics_async.html" . }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> {{ partial "adsense-auto.html" . }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> {{- end }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">&lt;/head&gt;
</span></span></code></pre></div><p><em>siteroot/layouts/partials/adsense-auto.html</em> - NEW FILE</p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">&lt;script data-ad-client="ca-pub-000000000000000" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"&gt;&lt;/script&gt;
</span></span></code></pre></div><p>_Note: Make sure to use your <em>ca-pub-IDGOESHERE</em></p>
<h3 data-sanitized-id="configuration-of-configtoml">Configuration of config.toml</h3>
<p>In your siteroot you will see this file that you will need to configure. Most users will simply edit this and away they go. Everything in this file worked pretty darn well. There was a couple spots that tripped me up which I will go over now.</p>
<h4 data-sanitized-id="baseurl">BaseURL</h4>
<p>Make sure you fill this out completely. I messed up the automated sitemap.xml because I simply put / instead of my entire address. This is what I have in the file now: <code>baseURL = "https://christitus.com/"</code></p>
<h4 data-sanitized-id="analytics-social-and-titledescription">Analytics, Social, and Title/Description</h4>
<p>All of these options worked perfectly and I had no issues.</p>
<h4 data-sanitized-id="menu">Menu</h4>
<p>The last problem I had was the menu at the top of my theme. I soon learned there was a syntax to the config.toml file that I missed. I simply added this to the bottom and changed the weight to sort the menu properly. Here is that code snippit:</p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="gdscript3" data-sanitized-class="language-gdscript3"><span data-sanitized-class="line"><span data-sanitized-class="cl"><span data-sanitized-class="p">[</span><span data-sanitized-class="n">menu</span><span data-sanitized-class="p">]</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> <span data-sanitized-class="p">[[</span><span data-sanitized-class="n">menu</span><span data-sanitized-class="o">.</span><span data-sanitized-class="n">main</span><span data-sanitized-class="p">]]</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> <span data-sanitized-class="n">identifier</span> <span data-sanitized-class="o">=</span> <span data-sanitized-class="s2">"home"</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> <span data-sanitized-class="n">name</span> <span data-sanitized-class="o">=</span> <span data-sanitized-class="s2">"Home"</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> <span data-sanitized-class="n">pre</span> <span data-sanitized-class="o">=</span> <span data-sanitized-class="s2">"&lt;i class='fa fa-heart'&gt;&lt;/i&gt;"</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> <span data-sanitized-class="n">url</span> <span data-sanitized-class="o">=</span> <span data-sanitized-class="s2">"/"</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> <span data-sanitized-class="n">weight</span> <span data-sanitized-class="o">=</span> <span data-sanitized-class="o">-</span><span data-sanitized-class="mi">110</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> <span data-sanitized-class="p">[[</span><span data-sanitized-class="n">menu</span><span data-sanitized-class="o">.</span><span data-sanitized-class="n">main</span><span data-sanitized-class="p">]]</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> <span data-sanitized-class="n">name</span> <span data-sanitized-class="o">=</span> <span data-sanitized-class="s2">"Donate"</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> <span data-sanitized-class="n">post</span> <span data-sanitized-class="o">=</span> <span data-sanitized-class="s2">""</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> <span data-sanitized-class="n">pre</span> <span data-sanitized-class="o">=</span> <span data-sanitized-class="s2">"&lt;i class='fa fa-road'&gt;&lt;/i&gt;"</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> <span data-sanitized-class="n">url</span> <span data-sanitized-class="o">=</span> <span data-sanitized-class="s2">"https://www.patreon.com/christitustech"</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> <span data-sanitized-class="n">weight</span> <span data-sanitized-class="o">=</span> <span data-sanitized-class="o">-</span><span data-sanitized-class="mi">105</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> <span data-sanitized-class="p">[[</span><span data-sanitized-class="n">menu</span><span data-sanitized-class="o">.</span><span data-sanitized-class="n">main</span><span data-sanitized-class="p">]]</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> <span data-sanitized-class="n">name</span> <span data-sanitized-class="o">=</span> <span data-sanitized-class="s2">"Remote Support"</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> <span data-sanitized-class="n">post</span> <span data-sanitized-class="o">=</span> <span data-sanitized-class="s2">""</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> <span data-sanitized-class="n">pre</span> <span data-sanitized-class="o">=</span> <span data-sanitized-class="s2">"&lt;i class='fa fa-road'&gt;&lt;/i&gt;"</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> <span data-sanitized-class="n">url</span> <span data-sanitized-class="o">=</span> <span data-sanitized-class="s2">"https://download.teamviewer.com/download/TeamViewerQS.exe"</span>
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> <span data-sanitized-class="n">weight</span> <span data-sanitized-class="o">=</span> <span data-sanitized-class="o">-</span><span data-sanitized-class="mi">100</span>
</span></span></code></pre></div><p><em>Note: I added external site links and a proper home button</em></p>
<h3 data-sanitized-id="templates-to-optimze-my-workflow">Templates to Optimze My Workflow</h3>
<p>This is where HUGO really shines and saves me a TON of time compared to WordPress and the like. Simply modifying the <code>siteroot/archetypes/default.md</code> file to put all the things I normally have in a post. Here is what I use:</p>
<p><em>default.md</em></p>
<div data-sanitized-class="highlight"><pre tabindex="0" data-sanitized-class="chroma"><code data-lang="fallback" data-sanitized-class="language-fallback"><span data-sanitized-class="line"><span data-sanitized-class="cl">---
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">title: "{{ replace .Name "-" " " | title }}"
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">date: {{ .Date }}
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">url: /{{ .Name }}/
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">image: images/2020-thumbs/{{ .Name }}.webp
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">categories:
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> - Linux
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> - Windows
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> - Networking
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">tags:
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl"> - Ubuntu
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">draft: true
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">---
</span></span><span data-sanitized-class="line"><span data-sanitized-class="cl">&lt;!--more--&gt;
</span></span></code></pre></div><p>Now everytime I run <code>hugo new posts/newpost.md</code> it will fill in the Title, date, custom url, thumbnail, add the more directive for list view, and my closing phrase.</p>
<h2 data-sanitized-id="video-walkthrough">Video Walkthrough</h2>
<div>
<iframe allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/6JaBian3vgI?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" title="YouTube video" sandbox="allow-scripts allow-same-origin"></iframe>
</div>
<h2 data-sanitized-id="conclusion">Conclusion</h2>
<p>This has changed my life and has made it so I can make posts like this one for people to follow. This entire post took me about an hour to write and would have take twice as long if I were to do it in WordPress.</p>


guid: https://htmhell.dev/13-link-or-label/
title: #13 link or label
author: ;Manuel Matuzovic
link: https://htmhell.dev/13-link-or-label/
hash: � Ö?�����Y �
attributes: {"enclosures":[]}
content:
<div data-sanitized-class="section bad">
<h2 data-sanitized-id="bad-code">Bad code</h2>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>input</span> <span data-sanitized-class="token attr-name">type</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>checkbox<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>accept<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">required</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>label</span> <span data-sanitized-class="token attr-name">for</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>accept<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>a</span> <span data-sanitized-class="token attr-name">href</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>/legal<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span> I accept the confidentiality policy and data… <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>a</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>label</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
</div>
<div data-sanitized-id="issues" data-sanitized-class="section">
<h2 data-sanitized-id="issues-and-how-to-fix-them">Issues and how to fix them</h2>
<ol>
<li>It’s bad practice to nest elements with <a href="https://www.w3.org/TR/html52/editing.html#activation-behavior">activation behavior</a> (e.g. click).</li>
<li>Users don’t expect a new page to open when they click a label.</li>
<li>The ability to click a label provides usability and accessibility benefits (larger hit area).</li>
<li>Place links outside the <code>label</code> element.</li>
</ol>
</div>
<div data-sanitized-class="section">
<h2 data-sanitized-id="good-code">Good code</h2>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>input</span> <span data-sanitized-class="token attr-name">type</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>checkbox<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">id</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>accept<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">required</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>label</span> <span data-sanitized-class="token attr-name">for</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>accept<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span> I accept the confidentiality policy and data… <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>label</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">(read <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>a</span> <span data-sanitized-class="token attr-name">href</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>/legal<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>Terms and conditions<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>a</span><span data-sanitized-class="token punctuation">&gt;</span></span>)</span></code></pre>
</div>
<div data-sanitized-class="section">
<h2 data-sanitized-id="resources">Resources</h2>
<ul>
<li><a href="https://www.w3.org/TR/html52/sec-forms.html#the-label-element">4.10.4. The label element</a></li>
<li><a href="https://adrianroselli.com/2016/12/be-wary-of-nesting-roles.html">Be Wary of Nesting Roles by Adrian Roselli</a></li>
</ul>
</div>


guid: https://htmhell.dev/14-not-my-type/
title: #14 not my type
author: ;Manuel Matuzovic
link: https://htmhell.dev/14-not-my-type/
hash: /ҕod���;0���
attributes: {"enclosures":[]}
content:
<div data-sanitized-class="section bad">
<h2 data-sanitized-id="bad-code">Bad code</h2>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>a</span> <span data-sanitized-class="token attr-name">type</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>button<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>button<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">href</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>/signup<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">tabindex</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>-1<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>Sign up<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>a</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
</div>
<div data-sanitized-id="issues" data-sanitized-class="section">
<h2 data-sanitized-id="issues-and-how-to-fix-them">Issues and how to fix them</h2>
<ol>
<li>The <code>type</code> attribute has no effect on the semantics of an <code>&lt;a&gt;</code> element.</li>
<li>An anchor may have the <code>type</code> attribute, but the value should be a valid <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types">MIME type</a>. Browsers may consider it, but it’s purely advisory.</li>
<li>If the presence of the <code>href</code> attribute makes sense, you most definitely want to use a proper link (<code>&lt;a&gt;</code>) and not a button, no matter how the element looks like in your design.</li>
<li>A negative <code>tabindex</code> value means that the element is not accessible via keyboard, but it could be focused with Javascript.</li>
<li>Do not change native semantics, unless you really have to.</li>
<li>If you need a button, use the <code>&lt;button&gt;</code> element.</li>
</ol>
</div>
<div data-sanitized-class="section">
<h2 data-sanitized-id="good-code">Good code</h2>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>a</span> <span data-sanitized-class="token attr-name">href</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>/signup<span data-sanitized-class="token punctuation">"</span></span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>button<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>Sign up<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>a</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
</div>
<div data-sanitized-class="section">
<h2 data-sanitized-id="resources">Resources</h2>
<ul>
<li><a href="https://www.w3.org/TR/html52/links.html#links">4.8.2. Links created by a and area elements</a></li>
<li><a href="https://www.w3.org/TR/html52/textlevel-semantics.html#the-a-element">4.5.1. The a element</a></li>
</ul>
</div>


guid: https://htmhell.dev/15-letter-by-letter/
title: #15 letter by letter
author: ;Manuel Matuzovic
link: https://htmhell.dev/15-letter-by-letter/
hash: [?�?S�d_k+8�t� 8
attributes: {"enclosures":[]}
content:
<div data-sanitized-class="section bad">
<h2 data-sanitized-id="bad-code">Bad code</h2>
<p>Letters are wrapped in <code>div</code>s to animate each letter with JavaScript.</p>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>h3</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token special-attr"><span data-sanitized-class="token attr-name">style</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token value css language-css"><span data-sanitized-class="token property">display</span><span data-sanitized-class="token punctuation">:</span> block<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">text-align</span><span data-sanitized-class="token punctuation">:</span> start<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">position</span><span data-sanitized-class="token punctuation">:</span> relative<span data-sanitized-class="token punctuation">;</span></span><span data-sanitized-class="token punctuation">"</span></span></span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>title<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token special-attr"><span data-sanitized-class="token attr-name">style</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token value css language-css"><span data-sanitized-class="token property">position</span><span data-sanitized-class="token punctuation">:</span> relative<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">display</span><span data-sanitized-class="token punctuation">:</span> inline-block<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">transform</span><span data-sanitized-class="token punctuation">:</span> <span data-sanitized-class="token function">rotateX</span><span data-sanitized-class="token punctuation">(</span>90deg<span data-sanitized-class="token punctuation">)</span><span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">transform-origin</span><span data-sanitized-class="token punctuation">:</span> 50% 50% -30.8917px<span data-sanitized-class="token punctuation">;</span></span><span data-sanitized-class="token punctuation">"</span></span></span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>char<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>H<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token special-attr"><span data-sanitized-class="token attr-name">style</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token value css language-css"><span data-sanitized-class="token property">position</span><span data-sanitized-class="token punctuation">:</span> relative<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">display</span><span data-sanitized-class="token punctuation">:</span> inline-block<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">transform</span><span data-sanitized-class="token punctuation">:</span> <span data-sanitized-class="token function">rotateX</span><span data-sanitized-class="token punctuation">(</span>90deg<span data-sanitized-class="token punctuation">)</span><span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">transform-origin</span><span data-sanitized-class="token punctuation">:</span> 50% 50% -30.8917px<span data-sanitized-class="token punctuation">;</span></span><span data-sanitized-class="token punctuation">"</span></span></span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>char<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>e<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token special-attr"><span data-sanitized-class="token attr-name">style</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token value css language-css"><span data-sanitized-class="token property">position</span><span data-sanitized-class="token punctuation">:</span> relative<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">display</span><span data-sanitized-class="token punctuation">:</span> inline-block<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">transform</span><span data-sanitized-class="token punctuation">:</span> <span data-sanitized-class="token function">rotateX</span><span data-sanitized-class="token punctuation">(</span>90deg<span data-sanitized-class="token punctuation">)</span><span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">transform-origin</span><span data-sanitized-class="token punctuation">:</span> 50% 50% -30.8917px<span data-sanitized-class="token punctuation">;</span></span><span data-sanitized-class="token punctuation">"</span></span></span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>char<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>a<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token special-attr"><span data-sanitized-class="token attr-name">style</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token value css language-css"><span data-sanitized-class="token property">position</span><span data-sanitized-class="token punctuation">:</span> relative<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">display</span><span data-sanitized-class="token punctuation">:</span> inline-block<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">transform</span><span data-sanitized-class="token punctuation">:</span> <span data-sanitized-class="token function">rotateX</span><span data-sanitized-class="token punctuation">(</span>90deg<span data-sanitized-class="token punctuation">)</span><span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">transform-origin</span><span data-sanitized-class="token punctuation">:</span> 50% 50% -30.8917px<span data-sanitized-class="token punctuation">;</span></span><span data-sanitized-class="token punctuation">"</span></span></span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>char<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>d<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token special-attr"><span data-sanitized-class="token attr-name">style</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token value css language-css"><span data-sanitized-class="token property">position</span><span data-sanitized-class="token punctuation">:</span> relative<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">display</span><span data-sanitized-class="token punctuation">:</span> inline-block<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">transform</span><span data-sanitized-class="token punctuation">:</span> <span data-sanitized-class="token function">rotateX</span><span data-sanitized-class="token punctuation">(</span>90deg<span data-sanitized-class="token punctuation">)</span><span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">transform-origin</span><span data-sanitized-class="token punctuation">:</span> 50% 50% -30.8917px<span data-sanitized-class="token punctuation">;</span></span><span data-sanitized-class="token punctuation">"</span></span></span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>char<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>i<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token special-attr"><span data-sanitized-class="token attr-name">style</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token value css language-css"><span data-sanitized-class="token property">position</span><span data-sanitized-class="token punctuation">:</span> relative<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">display</span><span data-sanitized-class="token punctuation">:</span> inline-block<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">transform</span><span data-sanitized-class="token punctuation">:</span> <span data-sanitized-class="token function">rotateX</span><span data-sanitized-class="token punctuation">(</span>90deg<span data-sanitized-class="token punctuation">)</span><span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">transform-origin</span><span data-sanitized-class="token punctuation">:</span> 50% 50% -30.8917px<span data-sanitized-class="token punctuation">;</span></span><span data-sanitized-class="token punctuation">"</span></span></span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>char<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>n<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token special-attr"><span data-sanitized-class="token attr-name">style</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token value css language-css"><span data-sanitized-class="token property">position</span><span data-sanitized-class="token punctuation">:</span> relative<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">display</span><span data-sanitized-class="token punctuation">:</span> inline-block<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">transform</span><span data-sanitized-class="token punctuation">:</span> <span data-sanitized-class="token function">rotateX</span><span data-sanitized-class="token punctuation">(</span>90deg<span data-sanitized-class="token punctuation">)</span><span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">transform-origin</span><span data-sanitized-class="token punctuation">:</span> 50% 50% -30.8917px<span data-sanitized-class="token punctuation">;</span></span><span data-sanitized-class="token punctuation">"</span></span></span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>char<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>g<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>h3</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
</div>
<div data-sanitized-id="issues" data-sanitized-class="section">
<h2 data-sanitized-id="issues-and-how-to-fix-them">Issues and how to fix them</h2>
<ol>
<li>
<p>Assistive technology may announce the word letter by letter, if each letter is wrapped in an element.</p>
 <div data-sanitized-class="video"><iframe loading="lazy" width="700" height="394" src="https://www.youtube.com/embed/-Q4xk1QMex0" frameborder="0" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" title="VoiceOver demo: Each letter in a heading wrapped in a div" sandbox="allow-scripts allow-same-origin"></iframe></div>
 <a href="https://codepen.io/matuzo/pen/vYEbmxp">Code for this demo</a>
</li>
<li>
<p>Try to avoid excessive <abbr title="Document Object Model">DOM</abbr> sizes. Too many <abbr title="Document Object Model">DOM</abbr> nodes and nested <abbr title="Document Object Model">DOM</abbr> elements may harm your page performance.</p>
</li>
<li>
<p>A large <abbr title="Document Object Model">DOM</abbr> tree results in a large accessibility tree, which may have a bad impact on the performance of assistive technology.</p>
</li>
<li>
<p>The separation of presentation from content is advised. Move styles that don’t change dynamically into a CSS file.</p>
</li>
</ol>
</div>
<div data-sanitized-class="section">
<h2 data-sanitized-id="good-code-(solution-1)">Good code (Solution 1)</h2>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>h3</span><span data-sanitized-class="token punctuation">&gt;</span></span> Heading <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>h3</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
</div>
<div data-sanitized-class="section">
<h2 data-sanitized-id="good-code-(solution-2)">Good code (Solution 2)</h2>
<p>If you really have to.<br>
Provide an accessible version of the text for screen readers and hide the inaccessible text by using <code>aria-hidden="true"</code>.</p>
<pre data-sanitized-class="language-html"><code data-sanitized-class="language-html"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>h3</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>title<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>span</span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>sr-only<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>Heading<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>span</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token attr-name">aria-hidden</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>true<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token special-attr"><span data-sanitized-class="token attr-name">style</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token value css language-css"><span data-sanitized-class="token property">transform-origin</span><span data-sanitized-class="token punctuation">:</span> 50% 50% -30.8917px<span data-sanitized-class="token punctuation">;</span></span><span data-sanitized-class="token punctuation">"</span></span></span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>char<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>H<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token special-attr"><span data-sanitized-class="token attr-name">style</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token value css language-css"><span data-sanitized-class="token property">transform-origin</span><span data-sanitized-class="token punctuation">:</span> 50% 50% -30.8917px<span data-sanitized-class="token punctuation">;</span></span><span data-sanitized-class="token punctuation">"</span></span></span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>char<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>e<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token special-attr"><span data-sanitized-class="token attr-name">style</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token value css language-css"><span data-sanitized-class="token property">transform-origin</span><span data-sanitized-class="token punctuation">:</span> 50% 50% -30.8917px<span data-sanitized-class="token punctuation">;</span></span><span data-sanitized-class="token punctuation">"</span></span></span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>char<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>a<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token special-attr"><span data-sanitized-class="token attr-name">style</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token value css language-css"><span data-sanitized-class="token property">transform-origin</span><span data-sanitized-class="token punctuation">:</span> 50% 50% -30.8917px<span data-sanitized-class="token punctuation">;</span></span><span data-sanitized-class="token punctuation">"</span></span></span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>char<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>d<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token special-attr"><span data-sanitized-class="token attr-name">style</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token value css language-css"><span data-sanitized-class="token property">transform-origin</span><span data-sanitized-class="token punctuation">:</span> 50% 50% -30.8917px<span data-sanitized-class="token punctuation">;</span></span><span data-sanitized-class="token punctuation">"</span></span></span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>char<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>i<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token special-attr"><span data-sanitized-class="token attr-name">style</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token value css language-css"><span data-sanitized-class="token property">transform-origin</span><span data-sanitized-class="token punctuation">:</span> 50% 50% -30.8917px<span data-sanitized-class="token punctuation">;</span></span><span data-sanitized-class="token punctuation">"</span></span></span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>char<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>n<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">    <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;</span>div</span> <span data-sanitized-class="token special-attr"><span data-sanitized-class="token attr-name">style</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span><span data-sanitized-class="token value css language-css"><span data-sanitized-class="token property">transform-origin</span><span data-sanitized-class="token punctuation">:</span> 50% 50% -30.8917px<span data-sanitized-class="token punctuation">;</span></span><span data-sanitized-class="token punctuation">"</span></span></span> <span data-sanitized-class="token attr-name">class</span><span data-sanitized-class="token attr-value"><span data-sanitized-class="token punctuation attr-equals">=</span><span data-sanitized-class="token punctuation">"</span>char<span data-sanitized-class="token punctuation">"</span></span><span data-sanitized-class="token punctuation">&gt;</span></span>g<span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line">  <span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>div</span><span data-sanitized-class="token punctuation">&gt;</span></span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token tag"><span data-sanitized-class="token tag"><span data-sanitized-class="token punctuation">&lt;/</span>h3</span><span data-sanitized-class="token punctuation">&gt;</span></span></span></code></pre>
<p>Unfortunately, there’s no native way of hiding content only visually.<br>The <code>.sr-only</code> class makes sure that content is visually hidden but still accessible to screen reader users.</p>
<pre data-sanitized-class="language-css"><code data-sanitized-class="language-css"><span data-sanitized-class="highlight-line"><span data-sanitized-class="token selector">.title</span> <span data-sanitized-class="token punctuation">{</span> <span data-sanitized-class="token property">display</span><span data-sanitized-class="token punctuation">:</span> block<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">text-align</span><span data-sanitized-class="token punctuation">:</span> start<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">position</span><span data-sanitized-class="token punctuation">:</span> relative<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token punctuation">}</span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token selector">.char</span> <span data-sanitized-class="token punctuation">{</span> <span data-sanitized-class="token property">position</span><span data-sanitized-class="token punctuation">:</span> relative<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">display</span><span data-sanitized-class="token punctuation">:</span> inline-block<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">transform</span><span data-sanitized-class="token punctuation">:</span> <span data-sanitized-class="token function">rotateX</span><span data-sanitized-class="token punctuation">(</span>90deg<span data-sanitized-class="token punctuation">)</span><span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token punctuation">}</span></span><br><span data-sanitized-class="highlight-line"><span data-sanitized-class="token selector">.sr-only</span> <span data-sanitized-class="token punctuation">{</span> <span data-sanitized-class="token property">position</span><span data-sanitized-class="token punctuation">:</span> absolute<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">white-space</span><span data-sanitized-class="token punctuation">:</span> nowrap<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">width</span><span data-sanitized-class="token punctuation">:</span> 1px<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">height</span><span data-sanitized-class="token punctuation">:</span> 1px<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">overflow</span><span data-sanitized-class="token punctuation">:</span> hidden<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">border</span><span data-sanitized-class="token punctuation">:</span> 0<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">padding</span><span data-sanitized-class="token punctuation">:</span> 0<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">clip</span><span data-sanitized-class="token punctuation">:</span> <span data-sanitized-class="token function">rect</span><span data-sanitized-class="token punctuation">(</span>0 0 0 0<span data-sanitized-class="token punctuation">)</span><span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">clip-path</span><span data-sanitized-class="token punctuation">:</span> <span data-sanitized-class="token function">inset</span><span data-sanitized-class="token punctuation">(</span>50%<span data-sanitized-class="token punctuation">)</span><span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token property">margin</span><span data-sanitized-class="token punctuation">:</span> -1px<span data-sanitized-class="token punctuation">;</span> <span data-sanitized-class="token punctuation">}</span></span></code></pre>
</div>
<div data-sanitized-class="section">
<h2 data-sanitized-id="resources">Resources</h2>
<ul>
<li><a href="https://developers.google.com/web/tools/lighthouse/audits/dom-size">Uses An Excessive DOM Size</a></li>
<li><a href="https://www.technica11y.org/performance-and-the-accessibility-tree">Performance and the Accessibility Tree</a></li>
</ul>
</div>


