From 720d752748b793a2f5cf3cc14cb75ad86e8919c0 Mon Sep 17 00:00:00 2001 From: sillylaird Date: Tue, 3 Feb 2026 21:27:57 -0500 Subject: First commit --- .htaccess | 7 + 2cows.gif | Bin 0 -> 675 bytes 404.html | 57 ++ 405px-Emacs-logo.svg.png | Bin 0 -> 46663 bytes 50x.html | 52 ++ 66.png | Bin 0 -> 87087 bytes 711chan_button.png | Bin 0 -> 9042 bytes Aeplaine.gif | Bin 0 -> 2396 bytes Anubianhost.png | Bin 0 -> 101285 bytes Belleville_Senators_logo.svg.png | Bin 0 -> 64090 bytes CNAME | 1 + L3.png | Bin 0 -> 1092399 bytes Laird.mp3 | Bin 0 -> 28839 bytes Laird_Ja.mp3 | Bin 0 -> 20419 bytes Laird_Lonergan_profile.html | 52 ++ Laird_Lonergan_profile_jp.html | 52 ++ Laird_Lonergan_profile_zh.html | 52 ++ MMORPG_Multiboxing_Guide.html | 51 ++ MMORPG_Multiboxing_Guide_jp.html | 51 ++ MMORPG_Multiboxing_Guide_zh.html | 51 ++ OttawaBlackBears.png | Bin 0 -> 121486 bytes Ottawa_67's_logo.svg.png | Bin 0 -> 64791 bytes Ottawa_Redblacks_logo.svg.png | Bin 0 -> 118027 bytes Ottawa_Titans_logo.svg.png | Bin 0 -> 308271 bytes README.md | 30 + The_Site_Banner.webp | Bin 0 -> 258 bytes Vidlii6.png | Bin 0 -> 10105 bytes accounts/index.html | 149 ++++ accounts/index_jp.html | 149 ++++ accounts/index_zh.html | 149 ++++ accounts/styles.css | 66 ++ ae.gif | Bin 0 -> 2396 bytes airvpn.png | Bin 0 -> 120361 bytes anime.txt | 1 + articles/2023/04-10.html | 128 +++ articles/2023/04-10_jp.html | 128 +++ articles/2023/04-10_zh.html | 128 +++ articles/2023/2023 | 7 + articles/2024/05-15.html | 123 +++ articles/2024/05-15_jp.html | 123 +++ articles/2024/05-15_zh.html | 123 +++ articles/hello.html | 124 +++ articles/hello_jp.html | 124 +++ articles/hello_zh.html | 124 +++ articles/runescape.html | 129 +++ articles/runescape_jp.html | 129 +++ articles/runescape_zh.html | 129 +++ articles/sample.html | 123 +++ articles/sample_jp.html | 123 +++ articles/sample_zh.html | 123 +++ assets/css/inline-attrs.css | 31 + assets/css/pages/404.css | 12 + assets/css/pages/50x.css | 9 + assets/css/pages/articles-2023-04-10.css | 1 + assets/css/pages/articles-2023-04-10_jp.css | 1 + assets/css/pages/articles-2023-04-10_zh.css | 1 + assets/css/pages/articles-runescape.css | 1 + assets/css/pages/articles-runescape_jp.css | 1 + assets/css/pages/articles-runescape_zh.css | 1 + assets/css/pages/bookmarks.css | 61 ++ assets/css/pages/changelog.css | 19 + assets/css/pages/computers.css | 29 + assets/css/pages/guestbook-form.css | 51 ++ assets/css/pages/guestbook_jp.css | 29 + assets/css/pages/guestbook_zh.css | 29 + assets/css/pages/hitcounter.css | 7 + assets/css/pages/hitcounter_jp.css | 7 + assets/css/pages/hitcounter_zh.css | 7 + assets/css/pages/journal-index.css | 3 + assets/css/pages/journal-index_jp.css | 3 + assets/css/pages/journal-index_zh.css | 3 + assets/css/pages/links.css | 3 + assets/css/pages/links_jp.css | 3 + assets/css/pages/links_zh.css | 3 + assets/css/pages/mstartpage-index.css | 361 +++++++++ assets/css/pages/startpage-test.css | 86 ++ assets/css/pages/test.css | 52 ++ assets/css/pages/test_jp.css | 52 ++ assets/css/pages/test_zh.css | 52 ++ assets/css/pages/vinyls.css | 14 + assets/css/site.css | 891 +++++++++++++++++++++ .../UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2 | Bin 0 -> 18748 bytes .../UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2 | Bin 0 -> 48256 bytes .../UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2 | Bin 0 -> 18996 bytes .../UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2 | Bin 0 -> 85068 bytes .../UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2 | Bin 0 -> 25960 bytes .../UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2 | Bin 0 -> 11232 bytes .../UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2 | Bin 0 -> 10252 bytes assets/js/includes.js | 32 + assets/js/pages/404.js | 5 + assets/js/pages/50x.js | 5 + assets/js/pages/guestbook_jp.js | 91 +++ assets/js/pages/guestbook_zh.js | 91 +++ assets/js/pages/hitcounter.js | 16 + assets/js/pages/hitcounter_jp.js | 16 + assets/js/pages/hitcounter_zh.js | 16 + assets/js/pages/mstartpage-index.js | 118 +++ assets/js/pages/test.js | 10 + assets/js/pages/test_jp.js | 10 + assets/js/pages/test_zh.js | 10 + assets/js/site.js | 415 ++++++++++ avatar.png | Bin 0 -> 1241601 bytes babi.png | Bin 0 -> 147838 bytes bbs.cgi | 4 + bbs.html | 11 + blog/index.html | 124 +++ blog/index_jp.html | 124 +++ blog/index_zh.html | 124 +++ bookmarks/anime-watched.txt | 2 + bookmarks/bookmarks.txt | 195 +++++ bookmarks/bookmarks.txt~ | 186 +++++ bookmarks/index.html | 162 ++++ bookmarks/index_jp.html | 162 ++++ bookmarks/index_zh.html | 162 ++++ bookmarks/radio.txt | 11 + bookmarks/styles.css | 162 ++++ bookmarks/threads/opdownloadandconquer.txt | 63 ++ bookmarks/threads/opdownloadandconquer.txt~ | 63 ++ bookmarks/torbookmarks.txt | 46 ++ bookmarks/youtube-channels.txt | 44 + bookmarks/youtube-channels.txt~ | 44 + bookmarks/youtube-videos.txt | 24 + bookmarks/youtube-videos.txt~ | 15 + buyvm.png | Bin 0 -> 5501 bytes canada.png | Bin 0 -> 15906 bytes ccp.svg | 1 + changelog/2023-changelog.txt | 12 + changelog/2024-changelog.txt | 11 + changelog/2025-changelog.txt | 0 changelog/admin.html | 16 + changelog/api/latest.html | 37 + changelog/auth.html | 4 + changelog/db.html | 4 + changelog/index.html | 73 ++ changelog/index_jp.html | 151 ++++ changelog/index_zh.html | 151 ++++ changelog/latest.html | 11 + changelog/login.html | 16 + changelog/logout.html | 11 + changelog/rss.xml | 30 + china.png | Bin 0 -> 68692 bytes cirno.jpg | Bin 0 -> 331062 bytes cockbox.gif | Bin 0 -> 1697 bytes code.png | Bin 0 -> 232856 bytes computers/index.html | 166 ++++ computers/index_jp.html | 166 ++++ computers/index_zh.html | 166 ++++ cornhub.png | Bin 0 -> 38665 bytes cryptostorm.png | Bin 0 -> 1852 bytes cs-logo.png | Bin 0 -> 5591 bytes docs/FUTURE_PROOF.md | 54 ++ docs/MANAGE.md | 42 + elixior.png | Bin 0 -> 58144 bytes elixior.webp | Bin 0 -> 6118 bytes elixr.webp | Bin 0 -> 6118 bytes emacs.png | Bin 0 -> 13462 bytes error/.idea/.gitignore | 8 + error/.idea/error.iml | 9 + error/.idea/misc.xml | 6 + error/.idea/modules.xml | 8 + error/index.html | 138 ++++ error/index_jp.html | 138 ++++ error/index_zh.html | 138 ++++ eso-tilin-tilin.gif | Bin 0 -> 308729 bytes expressvpn.png | Bin 0 -> 7332 bytes fastmail.png | Bin 0 -> 4493 bytes favicon.ico | 1 + gaming/index.html | 130 +++ gaming/index_jp.html | 65 ++ gaming/index_zh.html | 54 ++ gaming/multibox/global_styles.css | 53 ++ gaming/multibox/index.html | 103 +++ gaming/multibox/index_jp.html | 102 +++ gaming/multibox/index_zh.html | 102 +++ gaming/multibox/styles.css | 54 ++ gaming/multibox/what-is-multiboxing/index.html | 79 ++ gaming/multibox/what-is-multiboxing/index_jp.html | 79 ++ gaming/multibox/what-is-multiboxing/index_zh.html | 79 ++ gaming/multibox/what-is-multiboxing/styles.css | 54 ++ gaming/runescape/index.html | 66 ++ gaming/runescape/index_jp.html | 68 ++ gaming/runescape/index_zh.html | 68 ++ gaming/runescape/runescape.png | Bin 0 -> 589847 bytes gaming/specialforce/SpecialForce_Launcher.exe | Bin 0 -> 2378840 bytes gaming/specialforce/index.html | 63 ++ gaming/specialforce/index_jp.html | 63 ++ gaming/specialforce/index_zh.html | 63 ++ gaming/specialforce/style.css | 113 +++ gaming/stepmania/index.html | 102 +++ gaming/stepmania/index_jp.html | 102 +++ gaming/stepmania/index_zh.html | 104 +++ gaming/stepmania/script.js | 46 ++ gaming/stepmania/style.css | 139 ++++ git tutorial.txt | 108 +++ git-guide.txt | 111 +++ guestbook-comments.html | 16 + guestbook-form.html | 46 ++ guestbook.html | 78 ++ guestbook.html~ | 65 ++ guestbook.js | 127 +++ guestbook_jp.html | 80 ++ guestbook_zh.html | 80 ++ hatCollectionWebsite.html | 56 ++ hatCollectionWebsite_jp.html | 56 ++ hatCollectionWebsite_zh.html | 56 ++ hitcounter.html | 57 ++ hitcounter_jp.html | 57 ++ hitcounter_zh.html | 57 ++ icon03.jpg | Bin 0 -> 3495 bytes images/711chan.gif | Bin 0 -> 3208 bytes images/anybrowser3.gif | Bin 0 -> 2060 bytes images/buyvm.png | Bin 0 -> 11947 bytes images/desuroom-revival.png | Bin 0 -> 6922 bytes images/free-speech-forever.gif | Bin 0 -> 10832 bytes images/get-flash-player.gif | Bin 0 -> 1066 bytes images/heyuri.gif | Bin 0 -> 2030 bytes images/imageboard/1674509441745.jpg | Bin 0 -> 1320125 bytes images/imageboard/squarebutts.gif | Bin 0 -> 1021013 bytes images/made-with-windows.gif | Bin 0 -> 1803 bytes images/msie.gif | Bin 0 -> 12920 bytes images/openbsd.png | Bin 0 -> 58652 bytes images/plan9/9logo.jpg | Bin 0 -> 2662 bytes images/powered-by-kolyma.png | Bin 0 -> 2512 bytes images/valid-html401.png | Bin 0 -> 1542 bytes images/wtfpl.png | Bin 0 -> 2975 bytes index.html | 208 +++++ index_jp.html | 174 ++++ index_zh.html | 173 ++++ javascript.gif | Bin 0 -> 1694 bytes jetbrain.png | Bin 0 -> 53791 bytes journal/index.html | 89 ++ journal/index.html.lock~ | 1 + journal/index_jp.html | 89 ++ journal/index_zh.html | 89 ++ journal/style.css | 1 + kansen.gif | Bin 0 -> 16710 bytes keybase.txt | 56 ++ l3-logo.png | Bin 0 -> 7488 bytes l3-transparent.png | Bin 0 -> 712697 bytes lain.gif | Bin 0 -> 87657 bytes lain.jpg | Bin 0 -> 1344 bytes lain.png | Bin 0 -> 117611 bytes lainw.jpg | Bin 0 -> 124217 bytes links.html | 71 ++ links_jp.html | 71 ++ links_zh.html | 71 ++ load-vertical-links.js | 11 + logo-white-orange-bg.svg | 4 + logo.svg | 11 + logo2.svg | 46 ++ lolwut-button.gif | Bin 0 -> 3515 bytes lolwut.png | Bin 0 -> 9101 bytes made-with-windows.png | Bin 0 -> 74987 bytes main.js | 30 + map/index.html | 83 ++ map/index_jp.html | 83 ++ map/index_zh.html | 83 ++ mothracompat.gif | Bin 0 -> 1783 bytes mstartpage/Vidlii6 copy.png | Bin 0 -> 10105 bytes mstartpage/Vidlii6.png | Bin 0 -> 10105 bytes mstartpage/amazon.png | Bin 0 -> 49674 bytes mstartpage/belleville copy.png | Bin 0 -> 89418 bytes mstartpage/belleville.png | Bin 0 -> 89418 bytes mstartpage/ctvnews.png | Bin 0 -> 11510 bytes mstartpage/cytube.png | Bin 0 -> 9027 bytes mstartpage/ebay.png | Bin 0 -> 82072 bytes mstartpage/general.png | Bin 0 -> 55535 bytes mstartpage/gitlogo copy.png | Bin 0 -> 93394 bytes mstartpage/gitlogo.png | Bin 0 -> 10898 bytes mstartpage/heyuri copy.png | Bin 0 -> 29166 bytes mstartpage/heyuri.png | Bin 0 -> 29166 bytes mstartpage/index.html | 192 +++++ mstartpage/lain.png | Bin 0 -> 117611 bytes mstartpage/news.png | Bin 0 -> 11837 bytes mstartpage/newspaper.png | Bin 0 -> 660 bytes mstartpage/noteback.gif | Bin 0 -> 69 bytes mstartpage/old-youtube-icon-75.png | Bin 0 -> 66698 bytes mstartpage/pornhub.jpeg | Bin 0 -> 58944 bytes mstartpage/roundcube.png | Bin 0 -> 16149 bytes mstartpage/shoppingcart.png | Bin 0 -> 58033 bytes mstartpage/sm_logo copy.png | Bin 0 -> 7396 bytes mstartpage/sm_logo.png | Bin 0 -> 7396 bytes mstartpage/somethingawful.png | Bin 0 -> 34929 bytes mstartpage/sonemic.png | Bin 0 -> 29816 bytes mstartpage/sonymp3.png | Bin 0 -> 30174 bytes mstartpage/tf2.png | Bin 0 -> 48323 bytes mstartpage/tilde.png | Bin 0 -> 1909 bytes mstartpage/wallpaper.jpg | Bin 0 -> 215198 bytes mullvad.svg | 1 + multibox.png | Bin 0 -> 1385329 bytes musictaste/index.html | 75 ++ musictaste/index_jp.html | 75 ++ musictaste/index_zh.html | 75 ++ musictaste/style.css | 11 + mwallpaper.jpeg | Bin 0 -> 416106 bytes mwallpaper.jpg | Bin 0 -> 151821 bytes niceland.png | Bin 0 -> 20937 bytes nordvpn.png | Bin 0 -> 90334 bytes northkorea.png | Bin 0 -> 26214 bytes npp.svg | 339 ++++++++ openbgpd.gif | Bin 0 -> 75238 bytes openbsd.png | Bin 0 -> 152276 bytes ottawa-sens.jpg | Bin 0 -> 156620 bytes partials/footer.html | 11 + partials/header.html | 57 ++ pgpkey.txt | 103 +++ plan9.png | Bin 0 -> 15578 bytes plan9bunnysmwhite.jpg | Bin 0 -> 6176 bytes playbilibili.png | Bin 0 -> 1309430 bytes power36.gif | Bin 0 -> 1715 bytes ps2.jpg | Bin 0 -> 489680 bytes pub/chrome_JF8NkbrJhc.png | Bin 0 -> 53684 bytes pub/install.sh | 549 +++++++++++++ pub/openbsd how to setup zsh shell.txt | 11 + pub/tor.txt | 19 + public.asc | 13 + public.txt | 13 + rib_bar_wh.png | Bin 0 -> 39877 bytes robots.txt | 4 + roundcube.png | Bin 0 -> 16149 bytes roundcube.svg | 11 + runescape.png | Bin 0 -> 434718 bytes runescape2.png | Bin 0 -> 14894 bytes russia.png | Bin 0 -> 2469 bytes russia.svg | 1 + sapphireblue.png | Bin 0 -> 9996 bytes sealand.png | Bin 0 -> 2553 bytes sflogo2.jpg | Bin 0 -> 11629 bytes sillylaird-88x31.png | Bin 0 -> 7303 bytes sillylaird.png | Bin 0 -> 7303 bytes sitemap.xml | 419 ++++++++++ soldierfront.png | Bin 0 -> 295378 bytes startpage/.htaccess | 8 + startpage/amazon.png | Bin 0 -> 40952 bytes startpage/basedlii.png | Bin 0 -> 42930 bytes startpage/belleville.png | Bin 0 -> 99209 bytes startpage/buyvm.png | Bin 0 -> 4693 bytes startpage/ctvnews.png | Bin 0 -> 9930 bytes startpage/cytube.png | Bin 0 -> 9027 bytes startpage/ebay.png | Bin 0 -> 68914 bytes startpage/gitlogo.png | Bin 0 -> 91512 bytes startpage/heyuri.png | Bin 0 -> 28769 bytes startpage/index.html | 463 +++++++++++ startpage/lain.png | Bin 0 -> 118394 bytes startpage/liivid.png | Bin 0 -> 19502 bytes startpage/news.png | Bin 0 -> 13477 bytes startpage/newspaper.png | Bin 0 -> 793 bytes startpage/noteback.gif | Bin 0 -> 89 bytes startpage/old-youtube-icon-75.png | Bin 0 -> 78193 bytes startpage/roundcube.png | Bin 0 -> 21377 bytes startpage/shoppingcart.png | Bin 0 -> 49558 bytes startpage/sm_logo.png | Bin 0 -> 6879 bytes startpage/somethingawful.png | Bin 0 -> 36511 bytes startpage/sonemic.png | Bin 0 -> 26546 bytes startpage/sonymp3.png | Bin 0 -> 24258 bytes startpage/startpage.css | 272 +++++++ startpage/startpage.js | 87 ++ startpage/test.html | 54 ++ startpage/test.old | 129 +++ startpage/tf2.png | Bin 0 -> 35302 bytes startpage/tilde.png | Bin 0 -> 1909 bytes startpage/videogame.png | Bin 0 -> 1209330 bytes startpage/wallpaper.jpg | Bin 0 -> 215198 bytes stepmania.png | Bin 0 -> 68964 bytes style.css | 282 +++++++ sublime_text.png | Bin 0 -> 38950 bytes submit.html | 12 + test.html | 150 ++++ test.txt | 24 + test_jp.html | 150 ++++ test_zh.html | 150 ++++ toesu.jpg | Bin 0 -> 384256 bytes tools/README.md | 10 + tools/__pycache__/translate_pages.cpython-312.pyc | Bin 0 -> 9270 bytes tools/backup.sh | 13 + tools/generate_sitemap.py | 70 ++ tools/html_audit.py | 94 +++ tools/link_check.py | 94 +++ tools/translate_pages.py | 258 ++++++ tools/uptime_check.sh | 6 + ubuntu.jpg | Bin 0 -> 57550 bytes ubuntu.png | Bin 0 -> 85964 bytes vblog/index.html | 58 ++ vblog/index_jp.html | 58 ++ vblog/index_zh.html | 58 ++ vblog/lain.png | Bin 0 -> 117611 bytes vidlii.png | Bin 0 -> 10105 bytes vidlii/index.html | 57 ++ vidlii/index_jp.html | 57 ++ vidlii/index_zh.html | 57 ++ vscode.png | Bin 0 -> 130561 bytes windowserver.jpg | Bin 0 -> 55312 bytes windowserver.png | Bin 0 -> 88709 bytes wtfpl.png | Bin 0 -> 28722 bytes wtfpl.txt | 13 + zh-laird.mp3 | Bin 0 -> 16461 bytes 396 files changed, 17920 insertions(+) create mode 100644 .htaccess create mode 100644 2cows.gif create mode 100644 404.html create mode 100644 405px-Emacs-logo.svg.png create mode 100644 50x.html create mode 100644 66.png create mode 100644 711chan_button.png create mode 100644 Aeplaine.gif create mode 100644 Anubianhost.png create mode 100644 Belleville_Senators_logo.svg.png create mode 100644 CNAME create mode 100644 L3.png create mode 100644 Laird.mp3 create mode 100644 Laird_Ja.mp3 create mode 100644 Laird_Lonergan_profile.html create mode 100644 Laird_Lonergan_profile_jp.html create mode 100644 Laird_Lonergan_profile_zh.html create mode 100644 MMORPG_Multiboxing_Guide.html create mode 100644 MMORPG_Multiboxing_Guide_jp.html create mode 100644 MMORPG_Multiboxing_Guide_zh.html create mode 100644 OttawaBlackBears.png create mode 100644 Ottawa_67's_logo.svg.png create mode 100644 Ottawa_Redblacks_logo.svg.png create mode 100644 Ottawa_Titans_logo.svg.png create mode 100644 README.md create mode 100644 The_Site_Banner.webp create mode 100644 Vidlii6.png create mode 100644 accounts/index.html create mode 100644 accounts/index_jp.html create mode 100644 accounts/index_zh.html create mode 100644 accounts/styles.css create mode 100644 ae.gif create mode 100644 airvpn.png create mode 100644 anime.txt create mode 100644 articles/2023/04-10.html create mode 100644 articles/2023/04-10_jp.html create mode 100644 articles/2023/04-10_zh.html create mode 100644 articles/2023/2023 create mode 100644 articles/2024/05-15.html create mode 100644 articles/2024/05-15_jp.html create mode 100644 articles/2024/05-15_zh.html create mode 100644 articles/hello.html create mode 100644 articles/hello_jp.html create mode 100644 articles/hello_zh.html create mode 100644 articles/runescape.html create mode 100644 articles/runescape_jp.html create mode 100644 articles/runescape_zh.html create mode 100644 articles/sample.html create mode 100644 articles/sample_jp.html create mode 100644 articles/sample_zh.html create mode 100644 assets/css/inline-attrs.css create mode 100644 assets/css/pages/404.css create mode 100644 assets/css/pages/50x.css create mode 100644 assets/css/pages/articles-2023-04-10.css create mode 100644 assets/css/pages/articles-2023-04-10_jp.css create mode 100644 assets/css/pages/articles-2023-04-10_zh.css create mode 100644 assets/css/pages/articles-runescape.css create mode 100644 assets/css/pages/articles-runescape_jp.css create mode 100644 assets/css/pages/articles-runescape_zh.css create mode 100644 assets/css/pages/bookmarks.css create mode 100644 assets/css/pages/changelog.css create mode 100644 assets/css/pages/computers.css create mode 100644 assets/css/pages/guestbook-form.css create mode 100644 assets/css/pages/guestbook_jp.css create mode 100644 assets/css/pages/guestbook_zh.css create mode 100644 assets/css/pages/hitcounter.css create mode 100644 assets/css/pages/hitcounter_jp.css create mode 100644 assets/css/pages/hitcounter_zh.css create mode 100644 assets/css/pages/journal-index.css create mode 100644 assets/css/pages/journal-index_jp.css create mode 100644 assets/css/pages/journal-index_zh.css create mode 100644 assets/css/pages/links.css create mode 100644 assets/css/pages/links_jp.css create mode 100644 assets/css/pages/links_zh.css create mode 100644 assets/css/pages/mstartpage-index.css create mode 100644 assets/css/pages/startpage-test.css create mode 100644 assets/css/pages/test.css create mode 100644 assets/css/pages/test_jp.css create mode 100644 assets/css/pages/test_zh.css create mode 100644 assets/css/pages/vinyls.css create mode 100644 assets/css/site.css create mode 100644 assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2 create mode 100644 assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2 create mode 100644 assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2 create mode 100644 assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2 create mode 100644 assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2 create mode 100644 assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2 create mode 100644 assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2 create mode 100644 assets/js/includes.js create mode 100644 assets/js/pages/404.js create mode 100644 assets/js/pages/50x.js create mode 100644 assets/js/pages/guestbook_jp.js create mode 100644 assets/js/pages/guestbook_zh.js create mode 100644 assets/js/pages/hitcounter.js create mode 100644 assets/js/pages/hitcounter_jp.js create mode 100644 assets/js/pages/hitcounter_zh.js create mode 100644 assets/js/pages/mstartpage-index.js create mode 100644 assets/js/pages/test.js create mode 100644 assets/js/pages/test_jp.js create mode 100644 assets/js/pages/test_zh.js create mode 100644 assets/js/site.js create mode 100644 avatar.png create mode 100644 babi.png create mode 100644 bbs.cgi create mode 100644 bbs.html create mode 100644 blog/index.html create mode 100644 blog/index_jp.html create mode 100644 blog/index_zh.html create mode 100644 bookmarks/anime-watched.txt create mode 100644 bookmarks/bookmarks.txt create mode 100644 bookmarks/bookmarks.txt~ create mode 100644 bookmarks/index.html create mode 100644 bookmarks/index_jp.html create mode 100644 bookmarks/index_zh.html create mode 100644 bookmarks/radio.txt create mode 100644 bookmarks/styles.css create mode 100644 bookmarks/threads/opdownloadandconquer.txt create mode 100644 bookmarks/threads/opdownloadandconquer.txt~ create mode 100644 bookmarks/torbookmarks.txt create mode 100644 bookmarks/youtube-channels.txt create mode 100644 bookmarks/youtube-channels.txt~ create mode 100644 bookmarks/youtube-videos.txt create mode 100644 bookmarks/youtube-videos.txt~ create mode 100644 buyvm.png create mode 100644 canada.png create mode 100644 ccp.svg create mode 100644 changelog/2023-changelog.txt create mode 100644 changelog/2024-changelog.txt create mode 100644 changelog/2025-changelog.txt create mode 100644 changelog/admin.html create mode 100644 changelog/api/latest.html create mode 100644 changelog/auth.html create mode 100644 changelog/db.html create mode 100644 changelog/index.html create mode 100644 changelog/index_jp.html create mode 100644 changelog/index_zh.html create mode 100644 changelog/latest.html create mode 100644 changelog/login.html create mode 100644 changelog/logout.html create mode 100644 changelog/rss.xml create mode 100644 china.png create mode 100644 cirno.jpg create mode 100644 cockbox.gif create mode 100644 code.png create mode 100644 computers/index.html create mode 100644 computers/index_jp.html create mode 100644 computers/index_zh.html create mode 100644 cornhub.png create mode 100644 cryptostorm.png create mode 100644 cs-logo.png create mode 100644 docs/FUTURE_PROOF.md create mode 100644 docs/MANAGE.md create mode 100644 elixior.png create mode 100644 elixior.webp create mode 100644 elixr.webp create mode 100644 emacs.png create mode 100644 error/.idea/.gitignore create mode 100644 error/.idea/error.iml create mode 100644 error/.idea/misc.xml create mode 100644 error/.idea/modules.xml create mode 100644 error/index.html create mode 100644 error/index_jp.html create mode 100644 error/index_zh.html create mode 100644 eso-tilin-tilin.gif create mode 100644 expressvpn.png create mode 100644 fastmail.png create mode 100644 favicon.ico create mode 100644 gaming/index.html create mode 100644 gaming/index_jp.html create mode 100644 gaming/index_zh.html create mode 100644 gaming/multibox/global_styles.css create mode 100644 gaming/multibox/index.html create mode 100644 gaming/multibox/index_jp.html create mode 100644 gaming/multibox/index_zh.html create mode 100644 gaming/multibox/styles.css create mode 100644 gaming/multibox/what-is-multiboxing/index.html create mode 100644 gaming/multibox/what-is-multiboxing/index_jp.html create mode 100644 gaming/multibox/what-is-multiboxing/index_zh.html create mode 100644 gaming/multibox/what-is-multiboxing/styles.css create mode 100644 gaming/runescape/index.html create mode 100644 gaming/runescape/index_jp.html create mode 100644 gaming/runescape/index_zh.html create mode 100644 gaming/runescape/runescape.png create mode 100644 gaming/specialforce/SpecialForce_Launcher.exe create mode 100644 gaming/specialforce/index.html create mode 100644 gaming/specialforce/index_jp.html create mode 100644 gaming/specialforce/index_zh.html create mode 100644 gaming/specialforce/style.css create mode 100644 gaming/stepmania/index.html create mode 100644 gaming/stepmania/index_jp.html create mode 100644 gaming/stepmania/index_zh.html create mode 100644 gaming/stepmania/script.js create mode 100644 gaming/stepmania/style.css create mode 100644 git tutorial.txt create mode 100644 git-guide.txt create mode 100644 guestbook-comments.html create mode 100644 guestbook-form.html create mode 100644 guestbook.html create mode 100644 guestbook.html~ create mode 100644 guestbook.js create mode 100644 guestbook_jp.html create mode 100644 guestbook_zh.html create mode 100644 hatCollectionWebsite.html create mode 100644 hatCollectionWebsite_jp.html create mode 100644 hatCollectionWebsite_zh.html create mode 100644 hitcounter.html create mode 100644 hitcounter_jp.html create mode 100644 hitcounter_zh.html create mode 100644 icon03.jpg create mode 100644 images/711chan.gif create mode 100644 images/anybrowser3.gif create mode 100644 images/buyvm.png create mode 100644 images/desuroom-revival.png create mode 100644 images/free-speech-forever.gif create mode 100644 images/get-flash-player.gif create mode 100644 images/heyuri.gif create mode 100644 images/imageboard/1674509441745.jpg create mode 100644 images/imageboard/squarebutts.gif create mode 100644 images/made-with-windows.gif create mode 100644 images/msie.gif create mode 100644 images/openbsd.png create mode 100644 images/plan9/9logo.jpg create mode 100644 images/powered-by-kolyma.png create mode 100644 images/valid-html401.png create mode 100644 images/wtfpl.png create mode 100644 index.html create mode 100644 index_jp.html create mode 100644 index_zh.html create mode 100644 javascript.gif create mode 100644 jetbrain.png create mode 100644 journal/index.html create mode 100644 journal/index.html.lock~ create mode 100644 journal/index_jp.html create mode 100644 journal/index_zh.html create mode 100644 journal/style.css create mode 100644 kansen.gif create mode 100644 keybase.txt create mode 100644 l3-logo.png create mode 100644 l3-transparent.png create mode 100644 lain.gif create mode 100644 lain.jpg create mode 100644 lain.png create mode 100644 lainw.jpg create mode 100644 links.html create mode 100644 links_jp.html create mode 100644 links_zh.html create mode 100644 load-vertical-links.js create mode 100644 logo-white-orange-bg.svg create mode 100644 logo.svg create mode 100644 logo2.svg create mode 100644 lolwut-button.gif create mode 100644 lolwut.png create mode 100644 made-with-windows.png create mode 100644 main.js create mode 100644 map/index.html create mode 100644 map/index_jp.html create mode 100644 map/index_zh.html create mode 100644 mothracompat.gif create mode 100644 mstartpage/Vidlii6 copy.png create mode 100644 mstartpage/Vidlii6.png create mode 100644 mstartpage/amazon.png create mode 100644 mstartpage/belleville copy.png create mode 100644 mstartpage/belleville.png create mode 100644 mstartpage/ctvnews.png create mode 100644 mstartpage/cytube.png create mode 100644 mstartpage/ebay.png create mode 100644 mstartpage/general.png create mode 100644 mstartpage/gitlogo copy.png create mode 100644 mstartpage/gitlogo.png create mode 100644 mstartpage/heyuri copy.png create mode 100644 mstartpage/heyuri.png create mode 100644 mstartpage/index.html create mode 100644 mstartpage/lain.png create mode 100644 mstartpage/news.png create mode 100644 mstartpage/newspaper.png create mode 100644 mstartpage/noteback.gif create mode 100644 mstartpage/old-youtube-icon-75.png create mode 100644 mstartpage/pornhub.jpeg create mode 100644 mstartpage/roundcube.png create mode 100644 mstartpage/shoppingcart.png create mode 100644 mstartpage/sm_logo copy.png create mode 100644 mstartpage/sm_logo.png create mode 100644 mstartpage/somethingawful.png create mode 100644 mstartpage/sonemic.png create mode 100644 mstartpage/sonymp3.png create mode 100644 mstartpage/tf2.png create mode 100644 mstartpage/tilde.png create mode 100644 mstartpage/wallpaper.jpg create mode 100644 mullvad.svg create mode 100644 multibox.png create mode 100644 musictaste/index.html create mode 100644 musictaste/index_jp.html create mode 100644 musictaste/index_zh.html create mode 100644 musictaste/style.css create mode 100644 mwallpaper.jpeg create mode 100644 mwallpaper.jpg create mode 100644 niceland.png create mode 100644 nordvpn.png create mode 100644 northkorea.png create mode 100644 npp.svg create mode 100644 openbgpd.gif create mode 100644 openbsd.png create mode 100644 ottawa-sens.jpg create mode 100644 partials/footer.html create mode 100644 partials/header.html create mode 100644 pgpkey.txt create mode 100644 plan9.png create mode 100644 plan9bunnysmwhite.jpg create mode 100644 playbilibili.png create mode 100644 power36.gif create mode 100644 ps2.jpg create mode 100644 pub/chrome_JF8NkbrJhc.png create mode 100644 pub/install.sh create mode 100644 pub/openbsd how to setup zsh shell.txt create mode 100644 pub/tor.txt create mode 100644 public.asc create mode 100644 public.txt create mode 100644 rib_bar_wh.png create mode 100644 robots.txt create mode 100644 roundcube.png create mode 100644 roundcube.svg create mode 100644 runescape.png create mode 100644 runescape2.png create mode 100644 russia.png create mode 100644 russia.svg create mode 100644 sapphireblue.png create mode 100644 sealand.png create mode 100644 sflogo2.jpg create mode 100644 sillylaird-88x31.png create mode 100644 sillylaird.png create mode 100644 sitemap.xml create mode 100644 soldierfront.png create mode 100644 startpage/.htaccess create mode 100644 startpage/amazon.png create mode 100644 startpage/basedlii.png create mode 100644 startpage/belleville.png create mode 100644 startpage/buyvm.png create mode 100644 startpage/ctvnews.png create mode 100644 startpage/cytube.png create mode 100644 startpage/ebay.png create mode 100644 startpage/gitlogo.png create mode 100644 startpage/heyuri.png create mode 100644 startpage/index.html create mode 100644 startpage/lain.png create mode 100644 startpage/liivid.png create mode 100644 startpage/news.png create mode 100644 startpage/newspaper.png create mode 100644 startpage/noteback.gif create mode 100644 startpage/old-youtube-icon-75.png create mode 100644 startpage/roundcube.png create mode 100644 startpage/shoppingcart.png create mode 100644 startpage/sm_logo.png create mode 100644 startpage/somethingawful.png create mode 100644 startpage/sonemic.png create mode 100644 startpage/sonymp3.png create mode 100644 startpage/startpage.css create mode 100644 startpage/startpage.js create mode 100644 startpage/test.html create mode 100644 startpage/test.old create mode 100644 startpage/tf2.png create mode 100644 startpage/tilde.png create mode 100644 startpage/videogame.png create mode 100644 startpage/wallpaper.jpg create mode 100644 stepmania.png create mode 100644 style.css create mode 100644 sublime_text.png create mode 100644 submit.html create mode 100644 test.html create mode 100644 test.txt create mode 100644 test_jp.html create mode 100644 test_zh.html create mode 100644 toesu.jpg create mode 100644 tools/README.md create mode 100644 tools/__pycache__/translate_pages.cpython-312.pyc create mode 100644 tools/backup.sh create mode 100644 tools/generate_sitemap.py create mode 100644 tools/html_audit.py create mode 100644 tools/link_check.py create mode 100644 tools/translate_pages.py create mode 100644 tools/uptime_check.sh create mode 100644 ubuntu.jpg create mode 100644 ubuntu.png create mode 100644 vblog/index.html create mode 100644 vblog/index_jp.html create mode 100644 vblog/index_zh.html create mode 100644 vblog/lain.png create mode 100644 vidlii.png create mode 100644 vidlii/index.html create mode 100644 vidlii/index_jp.html create mode 100644 vidlii/index_zh.html create mode 100644 vscode.png create mode 100644 windowserver.jpg create mode 100644 windowserver.png create mode 100644 wtfpl.png create mode 100644 wtfpl.txt create mode 100644 zh-laird.mp3 diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..aee3b0e --- /dev/null +++ b/.htaccess @@ -0,0 +1,7 @@ + + Header set X-Content-Type-Options "nosniff" + Header set Referrer-Policy "strict-origin-when-cross-origin" + Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" + Header set Permissions-Policy "geolocation=(), microphone=(), camera=(), payment=(), usb=()" + Header set Content-Security-Policy "default-src 'self'; base-uri 'self'; connect-src 'self' https://blog.sillylaird.ca; frame-src 'self' https://guestbook.sillylaird.ca https://changelog.sillylaird.ca https://www.youtube.com https://www.msn.com; img-src 'self' https: data:; media-src 'self' https://uploads.sillylaird.ca; script-src 'self'; style-src 'self' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; form-action 'self' https://www.google.com https://www.google.ca; object-src 'none'" + diff --git a/2cows.gif b/2cows.gif new file mode 100644 index 0000000..0fcc49b Binary files /dev/null and b/2cows.gif differ diff --git a/404.html b/404.html new file mode 100644 index 0000000..159a095 --- /dev/null +++ b/404.html @@ -0,0 +1,57 @@ + + + + + + + 404 — Not Found + + + + + + + + + + + + + + + + + + + + +
+
+
+ + SillyLaird + +
+

404 — Not Found

+
That page does not exist (or the URL is wrong).
+
+
+ +

Try one of these:

+ + +
+
© 2026 SillyLaird
+
+
+ + + + + diff --git a/405px-Emacs-logo.svg.png b/405px-Emacs-logo.svg.png new file mode 100644 index 0000000..7c69218 Binary files /dev/null and b/405px-Emacs-logo.svg.png differ diff --git a/50x.html b/50x.html new file mode 100644 index 0000000..c9c5f41 --- /dev/null +++ b/50x.html @@ -0,0 +1,52 @@ + + + + + + + Server Error + + + + + + + + + + + + + + + + + + + + +
+
+
+ + SillyLaird + +
+

Server Error

+
Something went wrong on the server. Try again in a bit.
+
+
+ +

+ Go back home +

+ +
+
© 2026 SillyLaird
+
+
+ + + + + diff --git a/66.png b/66.png new file mode 100644 index 0000000..5bcd1c5 Binary files /dev/null and b/66.png differ diff --git a/711chan_button.png b/711chan_button.png new file mode 100644 index 0000000..913283f Binary files /dev/null and b/711chan_button.png differ diff --git a/Aeplaine.gif b/Aeplaine.gif new file mode 100644 index 0000000..b7a958a Binary files /dev/null and b/Aeplaine.gif differ diff --git a/Anubianhost.png b/Anubianhost.png new file mode 100644 index 0000000..ecb3f3a Binary files /dev/null and b/Anubianhost.png differ diff --git a/Belleville_Senators_logo.svg.png b/Belleville_Senators_logo.svg.png new file mode 100644 index 0000000..edfd652 Binary files /dev/null and b/Belleville_Senators_logo.svg.png differ diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..dcab1ad --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +www.sillylaird.ca diff --git a/L3.png b/L3.png new file mode 100644 index 0000000..24d30ae Binary files /dev/null and b/L3.png differ diff --git a/Laird.mp3 b/Laird.mp3 new file mode 100644 index 0000000..d06267d Binary files /dev/null and b/Laird.mp3 differ diff --git a/Laird_Ja.mp3 b/Laird_Ja.mp3 new file mode 100644 index 0000000..fa79da0 Binary files /dev/null and b/Laird_Ja.mp3 differ diff --git a/Laird_Lonergan_profile.html b/Laird_Lonergan_profile.html new file mode 100644 index 0000000..70f0b45 --- /dev/null +++ b/Laird_Lonergan_profile.html @@ -0,0 +1,52 @@ + + + + + + Laird Lonergan — Profile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

Laird Lonergan

+

Simple contact card.

+ + +
+
+ +
+ + diff --git a/Laird_Lonergan_profile_jp.html b/Laird_Lonergan_profile_jp.html new file mode 100644 index 0000000..8d7b8c5 --- /dev/null +++ b/Laird_Lonergan_profile_jp.html @@ -0,0 +1,52 @@ + + + + + + Laird Lonergan — Profile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

Laird Lonergan

+

Simple contact card.

+ + +
+
+ +
+ + diff --git a/Laird_Lonergan_profile_zh.html b/Laird_Lonergan_profile_zh.html new file mode 100644 index 0000000..daab586 --- /dev/null +++ b/Laird_Lonergan_profile_zh.html @@ -0,0 +1,52 @@ + + + + + + Laird Lonergan — Profile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

Laird Lonergan

+

Simple contact card.

+ + +
+
+ +
+ + diff --git a/MMORPG_Multiboxing_Guide.html b/MMORPG_Multiboxing_Guide.html new file mode 100644 index 0000000..2cc1ffb --- /dev/null +++ b/MMORPG_Multiboxing_Guide.html @@ -0,0 +1,51 @@ + + + + + + MMORPG Multiboxing Guide — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

MMORPG Multiboxing Guide

+

This guide moved into the unified gaming section.

+ +
+
+ +
+ + diff --git a/MMORPG_Multiboxing_Guide_jp.html b/MMORPG_Multiboxing_Guide_jp.html new file mode 100644 index 0000000..615c9c7 --- /dev/null +++ b/MMORPG_Multiboxing_Guide_jp.html @@ -0,0 +1,51 @@ + + + + + + MMORPG Multiboxing Guide — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

MMORPG Multiboxing Guide

+

This guide moved into the unified gaming section.

+ +
+
+ +
+ + diff --git a/MMORPG_Multiboxing_Guide_zh.html b/MMORPG_Multiboxing_Guide_zh.html new file mode 100644 index 0000000..0ea81c9 --- /dev/null +++ b/MMORPG_Multiboxing_Guide_zh.html @@ -0,0 +1,51 @@ + + + + + + MMORPG Multiboxing Guide — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

MMORPG Multiboxing Guide

+

This guide moved into the unified gaming section.

+ +
+
+ +
+ + diff --git a/OttawaBlackBears.png b/OttawaBlackBears.png new file mode 100644 index 0000000..701e38e Binary files /dev/null and b/OttawaBlackBears.png differ diff --git a/Ottawa_67's_logo.svg.png b/Ottawa_67's_logo.svg.png new file mode 100644 index 0000000..cacc91c Binary files /dev/null and b/Ottawa_67's_logo.svg.png differ diff --git a/Ottawa_Redblacks_logo.svg.png b/Ottawa_Redblacks_logo.svg.png new file mode 100644 index 0000000..33e0ef4 Binary files /dev/null and b/Ottawa_Redblacks_logo.svg.png differ diff --git a/Ottawa_Titans_logo.svg.png b/Ottawa_Titans_logo.svg.png new file mode 100644 index 0000000..d2df162 Binary files /dev/null and b/Ottawa_Titans_logo.svg.png differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..6e9e1b2 --- /dev/null +++ b/README.md @@ -0,0 +1,30 @@ +# www.sillylaird.ca + +Static personal site: HTML + CSS + a little JS. No build step. + +## Common maintenance + +- `python3 tools/link_check.py` — internal link sanity check +- `python3 tools/html_audit.py` — quick a11y/markup audit +- `python3 tools/generate_sitemap.py` — rebuild `sitemap.xml` +- `python3 tools/translate_pages.py` — generate missing `*_zh.html`/`*_jp.html` + +## Ops helpers + +- `./tools/backup.sh` — tarball backup (defaults to `/tmp/www.sillylaird.ca-backups`, override with `BACKUP_DIR`) +- `./tools/uptime_check.sh` — curl-based uptime check (override target with `URL`) + +Example cron entries: + +```cron +# nightly backup at 03:15 UTC +15 3 * * * BACKUP_DIR=/var/backups/www.sillylaird.ca /path/to/tools/backup.sh + +# hourly uptime check +0 * * * * URL=https://www.sillylaird.ca/ /path/to/tools/uptime_check.sh +``` + +## Notes + +- `sitemap.xml` is generated by `tools/generate_sitemap.py`. +- Shared header/footer live in `partials/` and are injected by `assets/js/includes.js`. diff --git a/The_Site_Banner.webp b/The_Site_Banner.webp new file mode 100644 index 0000000..1d1ddc4 Binary files /dev/null and b/The_Site_Banner.webp differ diff --git a/Vidlii6.png b/Vidlii6.png new file mode 100644 index 0000000..540c3a5 Binary files /dev/null and b/Vidlii6.png differ diff --git a/accounts/index.html b/accounts/index.html new file mode 100644 index 0000000..924cc66 --- /dev/null +++ b/accounts/index.html @@ -0,0 +1,149 @@ + + + + + + Accounts — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

Accounts

+

A quick list of places I exist online.

+ + +
+
+ +
+
+ +
+
+ + diff --git a/accounts/index_jp.html b/accounts/index_jp.html new file mode 100644 index 0000000..4f2a049 --- /dev/null +++ b/accounts/index_jp.html @@ -0,0 +1,149 @@ + + + + + + アカウント — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

アカウント

+

A quick list of places I exist online.

+ + +
+
+ +
+
+ +
+
+ + diff --git a/accounts/index_zh.html b/accounts/index_zh.html new file mode 100644 index 0000000..56b5ab9 --- /dev/null +++ b/accounts/index_zh.html @@ -0,0 +1,149 @@ + + + + + + 账户 — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

账户

+

A quick list of places I exist online.

+ + +
+
+ +
+
+ +
+
+ + diff --git a/accounts/styles.css b/accounts/styles.css new file mode 100644 index 0000000..4691898 --- /dev/null +++ b/accounts/styles.css @@ -0,0 +1,66 @@ +body { + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + margin: 0; + font-family: Arial, sans-serif; + background-color: #ffd; /* Dark background */ +} + +.container { + text-align: center; + background-color: #ffd; /* Maintain background color as before */ + padding: 40px; /* Increased padding makes the box bigger */ + border-radius: 8px; + width: 700px; /* Set an explicit width to enlarge container */ + max-width: 90%; /* Make it responsive on smaller screens */ + box-shadow: 0 4px 15px rgba(0, 0, 0, 1); /* Pure black shadow, more defined */ +} + +.circle-image-link { + margin-bottom: 20px; +} + +.circle-link img { + display: inline-block; + width: 100px; + height: 100px; + border-radius: 50%; + transition: transform 0.3s; +} + +.circle-link:hover img { + transform: scale(1.1); +} + +header h1 { + margin: 0; + font-size: 24px; + color: black; /* White heading color */ +} + +header p { + margin: 5px 0 20px; + color: black; /* White text color */ +} + +.links { + display: flex; + flex-direction: column; + gap: 10px; +} + +.links .link { + display: inline-block; + padding: 5px 10px; + border: 2px solid transparent; /* Ensure border space is reserved */ + transition: border-color 0.3s ease; + color: black; /* Set text color to black explicitly here */ +} + + +.links .link:hover { + border-color: red; /* Red border highlight on hover */ +} + diff --git a/ae.gif b/ae.gif new file mode 100644 index 0000000..b7a958a Binary files /dev/null and b/ae.gif differ diff --git a/airvpn.png b/airvpn.png new file mode 100644 index 0000000..271b1ef Binary files /dev/null and b/airvpn.png differ diff --git a/anime.txt b/anime.txt new file mode 100644 index 0000000..f2dc36c --- /dev/null +++ b/anime.txt @@ -0,0 +1 @@ +Dragonball 1986 6-153 \ No newline at end of file diff --git a/articles/2023/04-10.html b/articles/2023/04-10.html new file mode 100644 index 0000000..880c823 --- /dev/null +++ b/articles/2023/04-10.html @@ -0,0 +1,128 @@ + + + + + + Cooking and Cook-X — 2023-04-10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

Cooking and Cook-X

+

Original author: lolwut

+ +

The Cooking skill was quite different before Jagex released Cook-X on 12 September 2005. Before Cook-X, we had to use each individual raw food item with the fire or range in order to cook it, rather than doing this only once, having the Cook-X menu appear, and then, with a few clicks, having your character automatically cook the rest of that type of raw food in your inventory. If, for example, you had 28 raw lobsters in your inventory, before the release of Cook-X you would have to click twice to cook each one (one click on the lobster to select it, and another click on the fire or range to cook it), for a total of 56 clicks to cook all 28; after Cook-X, this was reduced to only four clicks of the mouse (two to use the lobster with the fire or range, then a right-click to open the Cook-X menu, then a left-click to select Cook-X) and two keystrokes (entering 28 into the prompt), after which you could sit back for a little while and let your character take care of the rest.

+

It should be obvious that this update made the Cooking skill significantly easier, because it was now much less demanding of the player's attention while still giving the same experience rates. What it really did, though, was turn Cooking into a joke: whereas before the skill already gave experience quickly and was relatively cheap to train, now the demand on the player's attention was also seriously reduced.

+
+
+ +
+
+ +
+
+ + diff --git a/articles/2023/04-10_jp.html b/articles/2023/04-10_jp.html new file mode 100644 index 0000000..ab447fe --- /dev/null +++ b/articles/2023/04-10_jp.html @@ -0,0 +1,128 @@ + + + + + + Cooking and Cook-X — 2023-04-10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

Cooking and Cook-X

+

Original author: lolwut

+ +

The Cooking skill was quite different before Jagex released Cook-X on 12 September 2005. Before Cook-X, we had to use each individual raw food item with the fire or range in order to cook it, rather than doing this only once, having the Cook-X menu appear, and then, with a few clicks, having your character automatically cook the rest of that type of raw food in your inventory. If, for example, you had 28 raw lobsters in your inventory, before the release of Cook-X you would have to click twice to cook each one (one click on the lobster to select it, and another click on the fire or range to cook it), for a total of 56 clicks to cook all 28; after Cook-X, this was reduced to only four clicks of the mouse (two to use the lobster with the fire or range, then a right-click to open the Cook-X menu, then a left-click to select Cook-X) and two keystrokes (entering 28 into the prompt), after which you could sit back for a little while and let your character take care of the rest.

+

It should be obvious that this update made the Cooking skill significantly easier, because it was now much less demanding of the player's attention while still giving the same experience rates. What it really did, though, was turn Cooking into a joke: whereas before the skill already gave experience quickly and was relatively cheap to train, now the demand on the player's attention was also seriously reduced.

+
+
+ +
+
+ +
+
+ + diff --git a/articles/2023/04-10_zh.html b/articles/2023/04-10_zh.html new file mode 100644 index 0000000..7f82f0f --- /dev/null +++ b/articles/2023/04-10_zh.html @@ -0,0 +1,128 @@ + + + + + + Cooking and Cook-X — 2023-04-10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

Cooking and Cook-X

+

Original author: lolwut

+ +

The Cooking skill was quite different before Jagex released Cook-X on 12 September 2005. Before Cook-X, we had to use each individual raw food item with the fire or range in order to cook it, rather than doing this only once, having the Cook-X menu appear, and then, with a few clicks, having your character automatically cook the rest of that type of raw food in your inventory. If, for example, you had 28 raw lobsters in your inventory, before the release of Cook-X you would have to click twice to cook each one (one click on the lobster to select it, and another click on the fire or range to cook it), for a total of 56 clicks to cook all 28; after Cook-X, this was reduced to only four clicks of the mouse (two to use the lobster with the fire or range, then a right-click to open the Cook-X menu, then a left-click to select Cook-X) and two keystrokes (entering 28 into the prompt), after which you could sit back for a little while and let your character take care of the rest.

+

It should be obvious that this update made the Cooking skill significantly easier, because it was now much less demanding of the player's attention while still giving the same experience rates. What it really did, though, was turn Cooking into a joke: whereas before the skill already gave experience quickly and was relatively cheap to train, now the demand on the player's attention was also seriously reduced.

+
+
+ +
+
+ +
+
+ + diff --git a/articles/2023/2023 b/articles/2023/2023 new file mode 100644 index 0000000..5ee1b5d --- /dev/null +++ b/articles/2023/2023 @@ -0,0 +1,7 @@ + /plinkx:ma.sdf.org:/meta/www/s/sillylaird/articles/2023: + total used in directory 18 available 2.9 TiB + drwxr-xr-x 3 sillylaird arpa 4096 01-15 13:54 .. + drwxrwxrwx 2 sillylaird arpa 4096 01-17 10:37 . + -rw-r--r-- 1 sillylaird arpa 2094 01-09 10:18 01-09.html + -rw-r--r-- 1 sillylaird arpa 1910 01-17 10:37 01-17.html + -rw-r--r-- 1 sillylaird arpa 6146 12-15 15:32 12-15.html diff --git a/articles/2024/05-15.html b/articles/2024/05-15.html new file mode 100644 index 0000000..ac85962 --- /dev/null +++ b/articles/2024/05-15.html @@ -0,0 +1,123 @@ + + + + + + Rambling Of The New Year — 2024-05-15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

Rambling Of The New Year

+

It was (I think) the first in the series of Do-X updates (like Fletch-X, Smelt-X, Spin-X, etc.) that took out some of the repetitive clicking from the game. While I certainly wouldn't say these sort of updates "ruined" the game, or even any individual skill, perhaps they were still the beginnings of a lazy, impatient attitude towards the game that would really become apparent starting in the late 2000s, as well as in Old School RuneScape as a whole — the "quality of life" updates that the EasyScapers push at every turn.

+
+
+ +
+
+ +
+
+ + diff --git a/articles/2024/05-15_jp.html b/articles/2024/05-15_jp.html new file mode 100644 index 0000000..31518a4 --- /dev/null +++ b/articles/2024/05-15_jp.html @@ -0,0 +1,123 @@ + + + + + + Rambling Of The New Year — 2024-05-15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

Rambling Of The New Year

+

It was (I think) the first in the series of Do-X updates (like Fletch-X, Smelt-X, Spin-X, etc.) that took out some of the repetitive clicking from the game. While I certainly wouldn't say these sort of updates "ruined" the game, or even any individual skill, perhaps they were still the beginnings of a lazy, impatient attitude towards the game that would really become apparent starting in the late 2000s, as well as in Old School RuneScape as a whole — the "quality of life" updates that the EasyScapers push at every turn.

+
+
+ +
+
+ +
+
+ + diff --git a/articles/2024/05-15_zh.html b/articles/2024/05-15_zh.html new file mode 100644 index 0000000..a308d31 --- /dev/null +++ b/articles/2024/05-15_zh.html @@ -0,0 +1,123 @@ + + + + + + Rambling Of The New Year — 2024-05-15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

Rambling Of The New Year

+

It was (I think) the first in the series of Do-X updates (like Fletch-X, Smelt-X, Spin-X, etc.) that took out some of the repetitive clicking from the game. While I certainly wouldn't say these sort of updates "ruined" the game, or even any individual skill, perhaps they were still the beginnings of a lazy, impatient attitude towards the game that would really become apparent starting in the late 2000s, as well as in Old School RuneScape as a whole — the "quality of life" updates that the EasyScapers push at every turn.

+
+
+ +
+
+ +
+
+ + diff --git a/articles/hello.html b/articles/hello.html new file mode 100644 index 0000000..0dd9b7e --- /dev/null +++ b/articles/hello.html @@ -0,0 +1,124 @@ + + + + + + Hello World — Article — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

Hello World - First Blog

+

Last modified: 2023-01-09

+

Hello! welcome to my first blog on this site. sorry for the poor english you might see on here. I was not given the best education when it came to this. But I enjoy making website playing mmo's but multi logging ot multiboxxing and trading card games and so on. I just enjoy all of them. and I will document all my hobbies on here. :). Thank you for reading

+
+
+ +
+
+ +
+
+ + diff --git a/articles/hello_jp.html b/articles/hello_jp.html new file mode 100644 index 0000000..4e351b7 --- /dev/null +++ b/articles/hello_jp.html @@ -0,0 +1,124 @@ + + + + + + Hello World — Article — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

Hello World - First ブログ

+

Last modified: 2023-01-09

+

Hello! welcome to my first blog on this site. sorry for the poor english you might see on here. I was not given the best education when it came to this. But I enjoy making website playing mmo's but multi logging ot multiboxxing and trading card games and so on. I just enjoy all of them. and I will document all my hobbies on here. :). Thank you for reading

+
+
+ +
+
+ +
+
+ + diff --git a/articles/hello_zh.html b/articles/hello_zh.html new file mode 100644 index 0000000..53d10dc --- /dev/null +++ b/articles/hello_zh.html @@ -0,0 +1,124 @@ + + + + + + Hello World — Article — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

Hello World - First 博客

+

Last modified: 2023-01-09

+

Hello! welcome to my first blog on this 网站. sorry for the poor english you might see on here. I was not given the best education when it came to this. But I enjoy making web网站 playing mmo's but multi logging ot multiboxxing and trading card games and so on. I just enjoy all of them. and I will document all my hobbies on here. :). Thank you for reading

+
+
+ +
+
+ +
+
+ + diff --git a/articles/runescape.html b/articles/runescape.html new file mode 100644 index 0000000..6adcb56 --- /dev/null +++ b/articles/runescape.html @@ -0,0 +1,129 @@ + + + + + + How I Started RuneScape — Article + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

How I Started RuneScape

+

Last modified: 2022-12-23

+ +

The Cooking skill was quite different before Jagex released Cook-X on 12 September 2005. Before Cook-X, we had to use each individual raw food item with the fire or range in order to cook it, rather than doing this only once, having the Cook-X menu appear, and then, with a few clicks, having your character automatically cook the rest of that type of raw food in your inventory. If, for example, you had 28 raw lobsters in your inventory, before the release of Cook-X you would have to click twice to cook each one (one click on the lobster to select it, and another click on the fire or range to cook it), for a total of 56 clicks to cook all 28; after Cook-X, this was reduced to only four clicks of the mouse (two to use the lobster with the fire or range, then a right-click to open the Cook-X menu, then a left-click to select Cook-X) and two keystrokes (entering 28 into the prompt), after which you could sit back for a little while and let your character take care of the rest.

+

It should be obvious that this update made the Cooking skill significantly easier, because it was now much less demanding of the player's attention while still giving the same experience rates. What it really did, though, was turn Cooking into a joke: whereas before the skill already gave experience quickly and was relatively cheap to train, now the demand on the player's attention was also seriously reduced. When skillcapes were released later on, the Cooking skillcape was hardly considered an accomplishment, and those who had an untrimmed Cooking skillcape were even mocked for choosing the easiest skill to level to 99 and then thinking that they had achieved something noteworthy. I can recall that, throughout 2007, when I looked at the Hiscores, several people had gotten 200M experience in Cooking, whereas very few to none had done so in each of the other skills. (If you aren't satisfied with my memories, there is also a YouTube video showing the Hiscores on 1 August 2006, in which you can see that Cooking has the most players with 200M experience, as well as the highest average number of experience points among the players listed on the first page for any of the individual skills.)

+

It was (I think) the first in the series of Do-X updates (like Fletch-X, Smelt-X, Spin-X, etc.) that took out some of the repetitive clicking from the game. While I certainly wouldn't say these sort of updates "ruined" the game, or even any individual skill, perhaps they were still the beginnings of a lazy, impatient attitude towards the game that would really become apparent starting in the late 2000s, as well as in Old School RuneScape as a whole — the "quality of life" updates that the EasyScapers push at every turn.

+
+
+ +
+
+ +
+
+ + diff --git a/articles/runescape_jp.html b/articles/runescape_jp.html new file mode 100644 index 0000000..c203f19 --- /dev/null +++ b/articles/runescape_jp.html @@ -0,0 +1,129 @@ + + + + + + How I Started RuneScape — Article + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

How I Started RuneScape

+

Last modified: 2022-12-23

+ +

The Cooking skill was quite different before Jagex released Cook-X on 12 September 2005. Before Cook-X, we had to use each individual raw food item with the fire or range in order to cook it, rather than doing this only once, having the Cook-X menu appear, and then, with a few clicks, having your character automatically cook the rest of that type of raw food in your inventory. If, for example, you had 28 raw lobsters in your inventory, before the release of Cook-X you would have to click twice to cook each one (one click on the lobster to select it, and another click on the fire or range to cook it), for a total of 56 clicks to cook all 28; after Cook-X, this was reduced to only four clicks of the mouse (two to use the lobster with the fire or range, then a right-click to open the Cook-X menu, then a left-click to select Cook-X) and two keystrokes (entering 28 into the prompt), after which you could sit back for a little while and let your character take care of the rest.

+

It should be obvious that this update made the Cooking skill significantly easier, because it was now much less demanding of the player's attention while still giving the same experience rates. What it really did, though, was turn Cooking into a joke: whereas before the skill already gave experience quickly and was relatively cheap to train, now the demand on the player's attention was also seriously reduced. When skillcapes were released later on, the Cooking skillcape was hardly considered an accomplishment, and those who had an untrimmed Cooking skillcape were even mocked for choosing the easiest skill to level to 99 and then thinking that they had achieved something noteworthy. I can recall that, throughout 2007, when I looked at the Hiscores, several people had gotten 200M experience in Cooking, whereas very few to none had done so in each of the other skills. (If you aren't satisfied with my memories, there is also a YouTube video showing the Hiscores on 1 August 2006, in which you can see that Cooking has the most players with 200M experience, as well as the highest average number of experience points among the players listed on the first page for any of the individual skills.)

+

It was (I think) the first in the series of Do-X updates (like Fletch-X, Smelt-X, Spin-X, etc.) that took out some of the repetitive clicking from the game. While I certainly wouldn't say these sort of updates "ruined" the game, or even any individual skill, perhaps they were still the beginnings of a lazy, impatient attitude towards the game that would really become apparent starting in the late 2000s, as well as in Old School RuneScape as a whole — the "quality of life" updates that the EasyScapers push at every turn.

+
+
+ +
+
+ +
+
+ + diff --git a/articles/runescape_zh.html b/articles/runescape_zh.html new file mode 100644 index 0000000..d60d2d7 --- /dev/null +++ b/articles/runescape_zh.html @@ -0,0 +1,129 @@ + + + + + + How I Started RuneScape — Article + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

How I Started RuneScape

+

Last modified: 2022-12-23

+ +

The Cooking skill was quite different before Jagex released Cook-X on 12 September 2005. Before Cook-X, we had to use each individual raw food item with the fire or range in order to cook it, rather than doing this only once, having the Cook-X menu appear, and then, with a few clicks, having your character automatically cook the rest of that type of raw food in your inventory. If, for example, you had 28 raw lobsters in your inventory, before the release of Cook-X you would have to click twice to cook each one (one click on the lobster to select it, and another click on the fire or range to cook it), for a total of 56 clicks to cook all 28; after Cook-X, this was reduced to only four clicks of the mouse (two to use the lobster with the fire or range, then a right-click to open the Cook-X menu, then a left-click to select Cook-X) and two keystrokes (entering 28 into the prompt), after which you could sit back for a little while and let your character take care of the rest.

+

It should be obvious that this update made the Cooking skill significantly easier, because it was now much less demanding of the player's attention while still giving the same experience rates. What it really did, though, was turn Cooking into a joke: whereas before the skill already gave experience quickly and was relatively cheap to train, now the demand on the player's attention was also seriously reduced. When skillcapes were released later on, the Cooking skillcape was hardly considered an accomplishment, and those who had an untrimmed Cooking skillcape were even mocked for choosing the easiest skill to level to 99 and then thinking that they had achieved something noteworthy. I can recall that, throughout 2007, when I looked at the Hiscores, several people had gotten 200M experience in Cooking, whereas very few to none had done so in each of the other skills. (If you aren't satisfied with my memories, there is also a YouTube video showing the Hiscores on 1 August 2006, in which you can see that Cooking has the most players with 200M experience, as well as the highest average number of experience points among the players listed on the first page for any of the individual skills.)

+

It was (I think) the first in the series of Do-X updates (like Fletch-X, Smelt-X, Spin-X, etc.) that took out some of the repetitive clicking from the game. While I certainly wouldn't say these sort of updates "ruined" the game, or even any individual skill, perhaps they were still the beginnings of a lazy, impatient attitude towards the game that would really become apparent starting in the late 2000s, as well as in Old School RuneScape as a whole — the "quality of life" updates that the EasyScapers push at every turn.

+
+
+ +
+
+ +
+
+ + diff --git a/articles/sample.html b/articles/sample.html new file mode 100644 index 0000000..4de7bb4 --- /dev/null +++ b/articles/sample.html @@ -0,0 +1,123 @@ + + + + + + Sample Article + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

Sample Article

+

This page was an old HTML 4.01 sample. It now uses the unified site layout.

+
+
+ +
+
+ +
+
+ + diff --git a/articles/sample_jp.html b/articles/sample_jp.html new file mode 100644 index 0000000..aca87bd --- /dev/null +++ b/articles/sample_jp.html @@ -0,0 +1,123 @@ + + + + + + Sample Article + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

Sample Article

+

This page was an old HTML 4.01 sample. It now uses the unified site layout.

+
+
+ +
+
+ +
+
+ + diff --git a/articles/sample_zh.html b/articles/sample_zh.html new file mode 100644 index 0000000..9c5face --- /dev/null +++ b/articles/sample_zh.html @@ -0,0 +1,123 @@ + + + + + + Sample Article + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

Sample Article

+

This page was an old HTML 4.01 sample. It now uses the unified 网站 layout.

+
+
+ +
+
+ +
+
+ + diff --git a/assets/css/inline-attrs.css b/assets/css/inline-attrs.css new file mode 100644 index 0000000..2dce580 --- /dev/null +++ b/assets/css/inline-attrs.css @@ -0,0 +1,31 @@ +.s1da9facb4d{margin:0;} +.s6e250fe32e{border:none;border-top:1px solid #caa;margin:1rem 0;} +.s2a2536eebb{margin: 15px 0;} +.sd078564312{border:1px solid #ffd; display:block; margin-bottom:6px;} +.sd82634530e{background: transparent; + border:1px solid transparent; + color:#3a2a00; + padding:10px; + width:100%; + border-radius:4px;} +.sefd85b92cb{display: flex; flex-direction: column; gap: 20px;} +.s0b3fba4969{border: 1px solid var(--border); border-radius: var(--r);} +.see3e7269f8{height:700px; border: 1px solid var(--border); border-radius: var(--r);} +.s9572e08b37{width:150px;opacity:0.7;} +.se7f7a3d62d{border:1px solid var(--border);border-radius:var(--r);padding:var(--space-md);background:var(--bg);overflow:auto;} +.s06eeebc88f{max-width: 100%; height: auto;} +.s386d82bd1c{height:1100px;} +.s7e8ca45906{font-size: 50px;} +.s0667eb5585{max-width:160px;border:1px solid var(--border);border-radius:var(--r);background:var(--bg);} +.sed328f664c{min-height:360px;} +.s63501a3337{border:1px solid var(--border);border-radius:var(--r);background:var(--bg);} +.saf481e1471{width:100%;max-width:560px;height:315px;border:1px solid var(--border);border-radius:var(--r);} +.sb83d4c5326{max-width:720px;margin:0 auto;border:1px solid var(--border);border-radius:var(--r);background:var(--bg);} +.sd1a2ffa0b4{text-align:center;margin-top:var(--space-md);} +.sdac4fe6c9b{text-align:center;} +.sfed215d685{max-width:420px;margin:0 auto;border:1px solid var(--border);border-radius:var(--r);background:var(--bg);} +.s16a8a8b00c{overflow:auto;} +.s473e6bbfeb{width:100%;border-collapse:collapse;} +.sf2e940dbbf{text-align:left;border-bottom:1px solid var(--border);padding:8px;} +.s6f279abaab{padding:8px;border-bottom:1px dotted var(--border);} +.s44cd1236df{padding:8px;} diff --git a/assets/css/pages/404.css b/assets/css/pages/404.css new file mode 100644 index 0000000..7939cc1 --- /dev/null +++ b/assets/css/pages/404.css @@ -0,0 +1,12 @@ +/* Minimal fallback if CSS fails to load */ + body{margin:0;background:#ffd;color:#000;font-family:system-ui,Segoe UI,Arial,sans-serif;line-height:1.6;} + .wrap{max-width:960px;margin:0 auto;padding:1.35rem 1rem 2.5rem;} + .card{border:1px solid #caa;border-radius:6px;padding:1rem;background:#ffd;} + .top{display:flex;gap:12px;align-items:center;margin-bottom:1rem;} + .top img{width:48px;height:48px;border:2px solid #000;border-radius:6px;} + .top a:hover img{border-color:#d22;} + a{color:#d22;text-decoration:none;transition:0.1s;} + a:hover{background:#d22;color:#000 !important;} + .muted{color:#333;font-size:.9rem;} + .links{margin:1rem 0 0 0;} + .links a{display:inline-block;margin:0 .25rem .5rem 0;padding:2px 4px;border-radius:4px;} diff --git a/assets/css/pages/50x.css b/assets/css/pages/50x.css new file mode 100644 index 0000000..cc573de --- /dev/null +++ b/assets/css/pages/50x.css @@ -0,0 +1,9 @@ +body{margin:0;background:#ffd;color:#000;font-family:system-ui,Segoe UI,Arial,sans-serif;line-height:1.6;} + .wrap{max-width:960px;margin:0 auto;padding:1.35rem 1rem 2.5rem;} + .card{border:1px solid #caa;border-radius:6px;padding:1rem;background:#ffd;} + .top{display:flex;gap:12px;align-items:center;margin-bottom:1rem;} + .top img{width:48px;height:48px;border:2px solid #000;border-radius:6px;} + .top a:hover img{border-color:#d22;} + a{color:#d22;text-decoration:none;transition:0.1s;} + a:hover{background:#d22;color:#000 !important;} + .muted{color:#333;font-size:.9rem;} diff --git a/assets/css/pages/articles-2023-04-10.css b/assets/css/pages/articles-2023-04-10.css new file mode 100644 index 0000000..1818de4 --- /dev/null +++ b/assets/css/pages/articles-2023-04-10.css @@ -0,0 +1 @@ +kbd{ border:1px solid var(--border); border-radius:4px; padding:0 6px; background: #fff; } diff --git a/assets/css/pages/articles-2023-04-10_jp.css b/assets/css/pages/articles-2023-04-10_jp.css new file mode 100644 index 0000000..1818de4 --- /dev/null +++ b/assets/css/pages/articles-2023-04-10_jp.css @@ -0,0 +1 @@ +kbd{ border:1px solid var(--border); border-radius:4px; padding:0 6px; background: #fff; } diff --git a/assets/css/pages/articles-2023-04-10_zh.css b/assets/css/pages/articles-2023-04-10_zh.css new file mode 100644 index 0000000..1818de4 --- /dev/null +++ b/assets/css/pages/articles-2023-04-10_zh.css @@ -0,0 +1 @@ +kbd{ border:1px solid var(--border); border-radius:4px; padding:0 6px; background: #fff; } diff --git a/assets/css/pages/articles-runescape.css b/assets/css/pages/articles-runescape.css new file mode 100644 index 0000000..1818de4 --- /dev/null +++ b/assets/css/pages/articles-runescape.css @@ -0,0 +1 @@ +kbd{ border:1px solid var(--border); border-radius:4px; padding:0 6px; background: #fff; } diff --git a/assets/css/pages/articles-runescape_jp.css b/assets/css/pages/articles-runescape_jp.css new file mode 100644 index 0000000..1818de4 --- /dev/null +++ b/assets/css/pages/articles-runescape_jp.css @@ -0,0 +1 @@ +kbd{ border:1px solid var(--border); border-radius:4px; padding:0 6px; background: #fff; } diff --git a/assets/css/pages/articles-runescape_zh.css b/assets/css/pages/articles-runescape_zh.css new file mode 100644 index 0000000..1818de4 --- /dev/null +++ b/assets/css/pages/articles-runescape_zh.css @@ -0,0 +1 @@ +kbd{ border:1px solid var(--border); border-radius:4px; padding:0 6px; background: #fff; } diff --git a/assets/css/pages/bookmarks.css b/assets/css/pages/bookmarks.css new file mode 100644 index 0000000..945b771 --- /dev/null +++ b/assets/css/pages/bookmarks.css @@ -0,0 +1,61 @@ +.bookmarks-title{ + margin-bottom: var(--space-md); +} + +.tree{ list-style-type: none; padding-left: 0; margin: 0; } + +.tree ul{ list-style-type: none; padding-left: 28px; margin: 5px 0; } + +.tree li{ margin: 4px 0; position: relative; } + +.tree summary{ + display: flex; + align-items: center; + cursor: pointer; + padding: 8px 12px; + transition: background-color 0.2s ease; + font-weight: 600; + outline: none; + user-select: none; + background: var(--bg); + border: 1px solid var(--border); + border-radius: var(--r); +} + +.tree summary:hover{ background-color: #fdd; border-color: var(--accent); } + +.tree summary::-webkit-details-marker{ display: none; } + +.tree summary::before{ + content: ">"; + color: var(--ink); + margin-right: 10px; + font-size: 1rem; + transition: all 0.2s ease; + width: 20px; + text-align: left; + font-weight: 700; +} + +.tree details[open] > summary::before{ content: ">"; transform: rotate(90deg); } + +.tree a{ + color: var(--ink); + text-decoration: none; + display: inline-flex; + align-items: center; + padding: 6px 6px; + border-radius: 4px; +} + +.tree a:hover{ background: var(--accent); color: #000 !important; } + + +.tree .navbar-file a{ color: var(--muted); } + +.tree .navbar-file a::before{ + content: "->"; + color: var(--muted); + margin-right: 10px; + font-size: 0.9rem; +} diff --git a/assets/css/pages/changelog.css b/assets/css/pages/changelog.css new file mode 100644 index 0000000..78b2ff4 --- /dev/null +++ b/assets/css/pages/changelog.css @@ -0,0 +1,19 @@ +.changelog-list{ list-style: none; padding: 0; margin: 0; } + +.changelog-entry{ + display: grid; + grid-template-columns: 12ch 1fr; + gap: var(--space-lg); + padding: var(--space-md) 0; + border-bottom: 1px dotted rgba(0,0,0,.25); +} + +.changelog-entry:last-child{ border-bottom: none; } + +.changelog-entry time{ font-weight: 700; color: var(--ink); white-space: nowrap; } + +.changelog-entry .text{ color: var(--muted); } + +@media (max-width: 560px){ + .changelog-entry{ grid-template-columns: 1fr; } +} diff --git a/assets/css/pages/computers.css b/assets/css/pages/computers.css new file mode 100644 index 0000000..ec7d01f --- /dev/null +++ b/assets/css/pages/computers.css @@ -0,0 +1,29 @@ +.machine{ + border: 1px solid var(--ink); + padding: var(--space-md); + margin-top: var(--space-md); + background: var(--bg); + display: grid; + grid-template-columns: 150px auto 150px; + gap: var(--space-md); + align-items: start; +} + +.machine img{ + width: 100%; + height: auto; + border: 1px solid var(--ink); +} + +.machine-info{ font-size: var(--fs-base); } + +.machine-title{ + color: var(--gold); + font-weight: 700; + font-size: var(--fs-lg); + margin-bottom: var(--space-xs); +} + +@media (max-width: 720px){ + .machine{ grid-template-columns: 1fr; } +} diff --git a/assets/css/pages/guestbook-form.css b/assets/css/pages/guestbook-form.css new file mode 100644 index 0000000..b45feaa --- /dev/null +++ b/assets/css/pages/guestbook-form.css @@ -0,0 +1,51 @@ +/* Pure light theme — NO container, NO black */ +body { + background: transparent; + margin: 0; + padding: 10px; + font-family: "Source Code Pro", monospace; + color: #3a2a00; + overflow-y: auto; + overflow-x: hidden; + /* Hide scrollbar for Chrome, Safari and Opera */ + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ +} +body::-webkit-scrollbar { + width: 0; + height: 0; +} + +/* Remove all container styling */ +form { + max-width: 900px; + margin: 0 auto; +} + +/* Slight spacing between form and messages */ +form { + margin-bottom: 20px; +} + +input[type="text"], textarea { + border: 1px solid transparent; + background: transparent; + color: #3a2a00; + font: inherit; + box-sizing: border-box; /* Include padding in width */ + margin-bottom: 10px; +} + +textarea { + resize: vertical; +} + +button { + background: transparent; + border: 1px solid transparent; + padding: 10px 20px; + border-radius: 4px; + cursor: pointer; + font: inherit; + color: #3a2a00; +} diff --git a/assets/css/pages/guestbook_jp.css b/assets/css/pages/guestbook_jp.css new file mode 100644 index 0000000..bd71cb5 --- /dev/null +++ b/assets/css/pages/guestbook_jp.css @@ -0,0 +1,29 @@ +.anonymous { color: #0a0; } + .error { color: var(--accent); } + .captcha { font-weight: 700; font-size: 20px; } + form { display: grid; gap: var(--space-sm); max-width: 640px; } + label { font-weight: 600; } + input[type="text"], textarea { + width: 100%; + padding: 10px; + border: 1px solid var(--border); + border-radius: var(--r); + background: var(--bg); + color: var(--ink); + font: inherit; + } + textarea { min-height: 120px; resize: vertical; } + .btn-row { display: flex; gap: var(--space-sm); flex-wrap: wrap; } + button { + border: 1px solid var(--border); + border-radius: var(--r); + background: var(--bg); + padding: 8px 12px; + cursor: pointer; + font: inherit; + } + button:hover { background: #fdd; border-color: var(--accent); } + .entry { border-top: 1px dotted rgba(0,0,0,.25); padding-top: var(--space-md); margin-top: var(--space-md); } + .entry h4 { margin: 0 0 var(--space-xs) 0; } + .entry p { margin: 0; color: var(--muted); } + #captcha-canvas { border: 1px solid var(--border); border-radius: var(--r); background: #fff; } diff --git a/assets/css/pages/guestbook_zh.css b/assets/css/pages/guestbook_zh.css new file mode 100644 index 0000000..bd71cb5 --- /dev/null +++ b/assets/css/pages/guestbook_zh.css @@ -0,0 +1,29 @@ +.anonymous { color: #0a0; } + .error { color: var(--accent); } + .captcha { font-weight: 700; font-size: 20px; } + form { display: grid; gap: var(--space-sm); max-width: 640px; } + label { font-weight: 600; } + input[type="text"], textarea { + width: 100%; + padding: 10px; + border: 1px solid var(--border); + border-radius: var(--r); + background: var(--bg); + color: var(--ink); + font: inherit; + } + textarea { min-height: 120px; resize: vertical; } + .btn-row { display: flex; gap: var(--space-sm); flex-wrap: wrap; } + button { + border: 1px solid var(--border); + border-radius: var(--r); + background: var(--bg); + padding: 8px 12px; + cursor: pointer; + font: inherit; + } + button:hover { background: #fdd; border-color: var(--accent); } + .entry { border-top: 1px dotted rgba(0,0,0,.25); padding-top: var(--space-md); margin-top: var(--space-md); } + .entry h4 { margin: 0 0 var(--space-xs) 0; } + .entry p { margin: 0; color: var(--muted); } + #captcha-canvas { border: 1px solid var(--border); border-radius: var(--r); background: #fff; } diff --git a/assets/css/pages/hitcounter.css b/assets/css/pages/hitcounter.css new file mode 100644 index 0000000..1c52da1 --- /dev/null +++ b/assets/css/pages/hitcounter.css @@ -0,0 +1,7 @@ +.counter { + display: grid; + gap: var(--space-sm); + justify-items: center; + text-align: center; + } + .big { font-size: 3rem; font-weight: 800; color: var(--gold); } diff --git a/assets/css/pages/hitcounter_jp.css b/assets/css/pages/hitcounter_jp.css new file mode 100644 index 0000000..1c52da1 --- /dev/null +++ b/assets/css/pages/hitcounter_jp.css @@ -0,0 +1,7 @@ +.counter { + display: grid; + gap: var(--space-sm); + justify-items: center; + text-align: center; + } + .big { font-size: 3rem; font-weight: 800; color: var(--gold); } diff --git a/assets/css/pages/hitcounter_zh.css b/assets/css/pages/hitcounter_zh.css new file mode 100644 index 0000000..1c52da1 --- /dev/null +++ b/assets/css/pages/hitcounter_zh.css @@ -0,0 +1,7 @@ +.counter { + display: grid; + gap: var(--space-sm); + justify-items: center; + text-align: center; + } + .big { font-size: 3rem; font-weight: 800; color: var(--gold); } diff --git a/assets/css/pages/journal-index.css b/assets/css/pages/journal-index.css new file mode 100644 index 0000000..02e8c42 --- /dev/null +++ b/assets/css/pages/journal-index.css @@ -0,0 +1,3 @@ +.entry { margin: var(--space-md) 0; } + .entry time { font-weight: 700; color: var(--ink); } + .entry p { margin: var(--space-xs) 0 0 0; color: var(--muted); } diff --git a/assets/css/pages/journal-index_jp.css b/assets/css/pages/journal-index_jp.css new file mode 100644 index 0000000..02e8c42 --- /dev/null +++ b/assets/css/pages/journal-index_jp.css @@ -0,0 +1,3 @@ +.entry { margin: var(--space-md) 0; } + .entry time { font-weight: 700; color: var(--ink); } + .entry p { margin: var(--space-xs) 0 0 0; color: var(--muted); } diff --git a/assets/css/pages/journal-index_zh.css b/assets/css/pages/journal-index_zh.css new file mode 100644 index 0000000..02e8c42 --- /dev/null +++ b/assets/css/pages/journal-index_zh.css @@ -0,0 +1,3 @@ +.entry { margin: var(--space-md) 0; } + .entry time { font-weight: 700; color: var(--ink); } + .entry p { margin: var(--space-xs) 0 0 0; color: var(--muted); } diff --git a/assets/css/pages/links.css b/assets/css/pages/links.css new file mode 100644 index 0000000..fbb3700 --- /dev/null +++ b/assets/css/pages/links.css @@ -0,0 +1,3 @@ +.buttons img { image-rendering: auto; } + .buttons a { padding: 0; background: transparent; } + .buttons a:hover { background: transparent; } diff --git a/assets/css/pages/links_jp.css b/assets/css/pages/links_jp.css new file mode 100644 index 0000000..fbb3700 --- /dev/null +++ b/assets/css/pages/links_jp.css @@ -0,0 +1,3 @@ +.buttons img { image-rendering: auto; } + .buttons a { padding: 0; background: transparent; } + .buttons a:hover { background: transparent; } diff --git a/assets/css/pages/links_zh.css b/assets/css/pages/links_zh.css new file mode 100644 index 0000000..fbb3700 --- /dev/null +++ b/assets/css/pages/links_zh.css @@ -0,0 +1,3 @@ +.buttons img { image-rendering: auto; } + .buttons a { padding: 0; background: transparent; } + .buttons a:hover { background: transparent; } diff --git a/assets/css/pages/mstartpage-index.css b/assets/css/pages/mstartpage-index.css new file mode 100644 index 0000000..67eac23 --- /dev/null +++ b/assets/css/pages/mstartpage-index.css @@ -0,0 +1,361 @@ +:root { + --main-text-color: #ddd; + --border-color: #C8A977; + --search-input-color: black; + --link-color: #FF0000; + --background-color: #111; + --menu-background: #222; + } + + * { + box-sizing: border-box; + } + + html, body { + margin: 0; + padding: 0; + height: 100%; + background-color: var(--background-color); + font-family: 'Source Code Pro', "MS Gothic", IPAMonaGothic, IPAGothic, "BIZ UDGothic", HGGothicM, "Noto Sans Mono CJK JP", "Noto Sans Mono", monospace; + font-size: 14px; + color: var(--main-text-color); + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.7); + overflow-x: hidden; + } + + a { + color: var(--link-color); + background-color: transparent; + text-decoration: none; + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.8); + } + + a:hover { + text-decoration: underline; + } + + /* Header and menu */ + .header { + position: sticky; + top: 0; + z-index: 100; + background-color: var(--background-color); + padding: 10px; + border-bottom: 1px solid var(--border-color); + } + + .menu-toggle { + display: block; + width: 100%; + padding: 12px; + background-color: black; + color: var(--link-color); + border: 1px solid var(--link-color); + border-radius: 4px; + text-align: center; + font-weight: bold; + margin-bottom: 10px; + cursor: pointer; + } + + .main-menu { + display: none; + flex-direction: column; + background-color: var(--menu-background); + border: 1px solid var(--link-color); + border-radius: 4px; + padding: 10px; + margin-bottom: 15px; + } + + .main-menu.show { + display: flex; + } + + .main-menu a { + padding: 10px; + border-bottom: 1px solid #333; + } + + .main-menu a:last-child { + border-bottom: none; + } + + /* Search box */ + .search-container { + width: 100%; + padding: 10px; + background-color: var(--background-color); + margin-bottom: 15px; + } + + .search-form { + display: flex; + flex-direction: column; + } + + .search-input { + color: var(--link-color); + background-color: #3A3A3A; + border: 1px solid var(--link-color); + padding: 12px; + margin-bottom: 10px; + text-align: center; + border-radius: 4px; + font-size: 16px; /* Larger for touch */ + } + + input[type="submit"] { + color: var(--link-color); + background-color: black; + padding: 12px; + border: 1px solid var(--link-color); + cursor: pointer; + border-radius: 4px; + font-weight: bold; + font-size: 16px; + } + + /* Content sections */ + .content-section { + margin-bottom: 20px; + padding: 0 10px; + } + + .section-title { + color: var(--link-color); + font-size: 1.2em; + border-bottom: 1px solid var(--border-color); + padding-bottom: 5px; + margin-bottom: 10px; + } + + .link-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); + gap: 10px; + } + + .link-item { + padding: 10px; + background-color: #1a1a1a; + border: 1px solid #333; + border-radius: 4px; + text-align: center; + } + + /* Gallery items for mobile */ + .gallery-container { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); + gap: 15px; + padding: 10px; + } + + .gallery-item { + border: 2px ridge var(--border-color); + border-radius: 4px; + overflow: hidden; + } + + .gallery-item:hover { + border: 2px ridge var(--link-color); + } + + .gallery-item img { + width: 100%; + height: auto; + display: block; + } + + .gallery-desc { + padding: 8px; + text-align: center; + font-size: 0.9em; + color: var(--link-color); + background-color: #1a1a1a; + } + + /* Date and time */ + .datetime { + padding: 10px; + text-align: center; + margin: 15px 0; + } + + #realtime-date, #realtime-clock { + color: var(--link-color); + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.8); + margin: 5px 0; + } + + /* Footer */ + .footer { + padding: 15px; + text-align: center; + border-top: 1px solid #333; + margin-top: 20px; + } + + .footer-links { + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: 10px; + } + + .footer-links a { + padding: 5px; + } + + /* Collapsible sections */ + .collapsible { + background-color: #1a1a1a; + color: var(--link-color); + cursor: pointer; + padding: 12px; + width: 100%; + border: 1px solid var(--border-color); + text-align: left; + outline: none; + font-size: 1em; + font-weight: bold; + margin-bottom: 5px; + border-radius: 4px; + } + + .active, .collapsible:hover { + background-color: #222; + } + + .collapsible-content { + padding: 0 10px; + display: none; + overflow: hidden; + background-color: #1a1a1a; + margin-bottom: 10px; + border-radius: 0 0 4px 4px; + } + + /* XXX Verification Modal */ + .xxx-modal { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.9); + z-index: 1000; + justify-content: center; + align-items: center; + } + + .xxx-modal-content { + background-color: var(--menu-background); + padding: 20px; + border-radius: 8px; + border: 2px solid var(--link-color); + text-align: center; + max-width: 90%; + width: 350px; + } + + .xxx-logo { + width: 80px; + height: 80px; + margin: 0 auto 15px; + background-color: #333; + border-radius: 50%; + display: flex; + justify-content: center; + align-items: center; + font-size: 24px; + color: var(--link-color); + border: 2px solid var(--link-color); + } + + .xxx-buttons { + display: flex; + justify-content: space-between; + margin-top: 20px; + } + + .xxx-button { + padding: 10px 20px; + border: none; + border-radius: 4px; + cursor: pointer; + font-weight: bold; + } + + .xxx-confirm { + background-color: #4CAF50; + color: white; + } + + .xxx-deny { + background-color: #f44336; + color: white; + } + + /* XXX Section */ + .xxx-section { + margin: 20px 0; + text-align: center; + } + + .xxx-toggle { + padding: 12px 20px; + background-color: #333; + color: var(--link-color); + border: 1px solid var(--link-color); + border-radius: 4px; + cursor: pointer; + font-weight: bold; + margin-bottom: 15px; + } + + .xxx-list { + position: fixed; + bottom: 20px; + right: 20px; + background-color: var(--menu-background); + border: 1px solid var(--link-color); + border-radius: 8px; + padding: 10px; + max-width: 200px; + display: none; + z-index: 999; + } + + .xxx-list-title { + color: var(--link-color); + font-weight: bold; + margin-bottom: 8px; + text-align: center; + border-bottom: 1px solid #444; + padding-bottom: 5px; + } + + .xxx-list-item { + margin: 5px 0; + text-align: center; + } + + /* Responsive adjustments */ + @media (min-width: 768px) { + body { + font-size: 16px; + max-width: 800px; + margin: 0 auto; + } + + .link-grid { + grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); + } + + .gallery-container { + grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); + } + } diff --git a/assets/css/pages/startpage-test.css b/assets/css/pages/startpage-test.css new file mode 100644 index 0000000..14996cb --- /dev/null +++ b/assets/css/pages/startpage-test.css @@ -0,0 +1,86 @@ +body { + font-family: 'Inter', sans-serif; /* Using Inter font */ + margin: 0; /* Remove default body margin */ + padding: 20px; + background-color: #f0f0f0; + display: flex; + flex-direction: column; /* Arrange content vertically */ + justify-content: center; + align-items: center; + min-height: 100vh; + } + + h1 { + text-align: center; + color: #333; + margin-bottom: 20px; + font-size: 2em; /* Larger heading */ + } + + .responsive-container { + width: 95%; /* Make it wider to accommodate the full page embed */ + max-width: 1200px; /* Max width for larger screens to prevent it from getting too wide */ + padding: 10px; + box-sizing: border-box; + border: 1px solid #ccc; + border-radius: 12px; /* Slightly larger rounded corners */ + box-shadow: 0 6px 15px rgba(0, 0, 0, 0.15); /* More prominent shadow */ + background-color: white; + margin-bottom: 20px; + overflow: hidden; /* Ensure content stays within rounded corners */ + } + + .iframe-wrapper { + position: relative; + /* Maintain an aspect ratio that suits a full webpage, e.g., 16:9 or taller */ + /* A good starting point for a full webpage, adjust as needed for optimal viewing */ + padding-bottom: 120%; /* Height will be 120% of the width, making it taller */ + height: 0; + overflow: hidden; + border-radius: 8px; /* Slightly smaller rounded corners for inner frame */ + } + + .iframe-wrapper iframe { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border: none; + border-radius: 8px; + } + + .desc { + padding: 15px; + text-align: center; + font-size: 1.1em; + color: #555; + line-height: 1.6; + } + + .desc a { + color: #007bff; + text-decoration: none; + font-weight: bold; + transition: color 0.3s ease; /* Smooth transition for hover effect */ + } + + .desc a:hover { + text-decoration: underline; + color: #0056b3; /* Darker blue on hover */ + } + + /* Responsive adjustments for the container */ + @media only screen and (max-width: 768px) { + .responsive-container { + width: 100%; /* Full width on smaller screens */ + padding: 5px; + border-radius: 0; /* No rounded corners on very small screens for edge-to-edge */ + } + .iframe-wrapper { + padding-bottom: 150%; /* Make it even taller on mobile if needed */ + } + body { + padding: 10px; + } + } diff --git a/assets/css/pages/test.css b/assets/css/pages/test.css new file mode 100644 index 0000000..4eacfa4 --- /dev/null +++ b/assets/css/pages/test.css @@ -0,0 +1,52 @@ +html, body { margin: 0; padding: 0; } + table.layout { border-collapse: collapse; width: 100%; } + td.content { padding: 0; } + .logo { float: left; margin-right: 1rem; } + + a { + text-decoration: none; + background-color: transparent; + transition: background-color 0.2s, color 0.2s; + padding: 4px; + border-radius: 4px; + } + a:hover { background-color: red; color: white; } + a.no-hover-box:hover { background-color: transparent; color: red; } + + .sidebar { + position: fixed; + top: 0; + right: 0; + width: 250px; + max-height: 100vh; + overflow-y: auto; + background-color: #ffd; + transform: translateX(100%); + transition: transform 0.3s ease-in-out; + } + .sidebar.visible { transform: translateX(0); } + + .links-container { + display: flex; + flex-wrap: wrap; + gap: 1.5rem; + margin-bottom: 1rem; + } + .links-container ul { + flex: 1 1 200px; + list-style: none; + margin: 0; padding: 0; + } + .links-container ul li { margin-bottom: 0.75rem; word-wrap: break-word; } + .links-container ul li a { + display: inline-block; + max-width: 100%; + word-wrap: break-word; + color: #0366d6; + transition: color 0.3s ease; + } + .links-container ul li a:hover { color: #023e8a; text-decoration: underline; } + + @media (max-width: 600px) { + .links-container { flex-direction: column; } + } diff --git a/assets/css/pages/test_jp.css b/assets/css/pages/test_jp.css new file mode 100644 index 0000000..4eacfa4 --- /dev/null +++ b/assets/css/pages/test_jp.css @@ -0,0 +1,52 @@ +html, body { margin: 0; padding: 0; } + table.layout { border-collapse: collapse; width: 100%; } + td.content { padding: 0; } + .logo { float: left; margin-right: 1rem; } + + a { + text-decoration: none; + background-color: transparent; + transition: background-color 0.2s, color 0.2s; + padding: 4px; + border-radius: 4px; + } + a:hover { background-color: red; color: white; } + a.no-hover-box:hover { background-color: transparent; color: red; } + + .sidebar { + position: fixed; + top: 0; + right: 0; + width: 250px; + max-height: 100vh; + overflow-y: auto; + background-color: #ffd; + transform: translateX(100%); + transition: transform 0.3s ease-in-out; + } + .sidebar.visible { transform: translateX(0); } + + .links-container { + display: flex; + flex-wrap: wrap; + gap: 1.5rem; + margin-bottom: 1rem; + } + .links-container ul { + flex: 1 1 200px; + list-style: none; + margin: 0; padding: 0; + } + .links-container ul li { margin-bottom: 0.75rem; word-wrap: break-word; } + .links-container ul li a { + display: inline-block; + max-width: 100%; + word-wrap: break-word; + color: #0366d6; + transition: color 0.3s ease; + } + .links-container ul li a:hover { color: #023e8a; text-decoration: underline; } + + @media (max-width: 600px) { + .links-container { flex-direction: column; } + } diff --git a/assets/css/pages/test_zh.css b/assets/css/pages/test_zh.css new file mode 100644 index 0000000..4eacfa4 --- /dev/null +++ b/assets/css/pages/test_zh.css @@ -0,0 +1,52 @@ +html, body { margin: 0; padding: 0; } + table.layout { border-collapse: collapse; width: 100%; } + td.content { padding: 0; } + .logo { float: left; margin-right: 1rem; } + + a { + text-decoration: none; + background-color: transparent; + transition: background-color 0.2s, color 0.2s; + padding: 4px; + border-radius: 4px; + } + a:hover { background-color: red; color: white; } + a.no-hover-box:hover { background-color: transparent; color: red; } + + .sidebar { + position: fixed; + top: 0; + right: 0; + width: 250px; + max-height: 100vh; + overflow-y: auto; + background-color: #ffd; + transform: translateX(100%); + transition: transform 0.3s ease-in-out; + } + .sidebar.visible { transform: translateX(0); } + + .links-container { + display: flex; + flex-wrap: wrap; + gap: 1.5rem; + margin-bottom: 1rem; + } + .links-container ul { + flex: 1 1 200px; + list-style: none; + margin: 0; padding: 0; + } + .links-container ul li { margin-bottom: 0.75rem; word-wrap: break-word; } + .links-container ul li a { + display: inline-block; + max-width: 100%; + word-wrap: break-word; + color: #0366d6; + transition: color 0.3s ease; + } + .links-container ul li a:hover { color: #023e8a; text-decoration: underline; } + + @media (max-width: 600px) { + .links-container { flex-direction: column; } + } diff --git a/assets/css/pages/vinyls.css b/assets/css/pages/vinyls.css new file mode 100644 index 0000000..ecf8b4b --- /dev/null +++ b/assets/css/pages/vinyls.css @@ -0,0 +1,14 @@ +.vinyl-grid{ + display: grid; + grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); + gap: var(--space-md); + margin-top: var(--space-md); +} + +.vinyl-grid img{ + width: 100%; + height: auto; + border: 1px solid var(--border); + border-radius: var(--r); + background: var(--bg); +} diff --git a/assets/css/site.css b/assets/css/site.css new file mode 100644 index 0000000..4434b60 --- /dev/null +++ b/assets/css/site.css @@ -0,0 +1,891 @@ +/* cyrillic-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2'); + unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2'); + unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2'); + unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +:root{ + --bg: #ffd; + --ink: #000; + --muted: #333; + --accent: #d22; + --gold: #c69214; + --border: #caa; + --shadow: rgba(0,0,0,.10); + + --wrap: 960px; + --r: 6px; + + /* Unified spacing scale */ + --space-xs: 0.25rem; + --space-sm: 0.5rem; + --space-md: 0.75rem; + --space-lg: 1rem; + --space-xl: 1.35rem; + --space-2xl: 1.75rem; + --space-3xl: 2.5rem; + + /* Typography scale */ + --fs-xs: 0.85rem; + --fs-sm: 0.9rem; + --fs-base: 1rem; + --fs-lg: 1.05rem; + --fs-xl: 1.15rem; + --fs-2xl: 1.5rem; + --fs-3xl: 1.8rem; +} + +/* --- UNIFIED HEADER BUTTONS STYLE --- */ +.header-button { + font-size: var(--fs-sm); + border: 1px solid var(--border); + padding: 4px 8px; + border-radius: var(--r); + color: var(--ink); + text-decoration: none; + background: var(--bg); + cursor: pointer; + font-family: inherit; + display: inline-flex; + align-items: center; + justify-content: center; + transition: background .15s, color .15s, border-color .15s; +} + +.header-button:hover { + background: var(--accent); + color: #000; + border-color: var(--accent); +} + +/* Reset */ +*, *::before, *::after { box-sizing: border-box; } +html, body { height: 100%; } +body { margin: 0; } + +body{ + font-family: "Inter", system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif; + line-height: 1.6; + background: var(--bg); + color: var(--ink); + font-size: var(--fs-base); + /* Prevent horizontal scrollbar when menu icon rotates */ + overflow-x: hidden; +} + +/* Typography */ +p{ + margin: var(--space-sm) 0; + line-height: 1.6; +} +p:first-child{ margin-top: 0; } +p:last-child{ margin-bottom: 0; } + +img{ max-width: 100%; height: auto; display: block; } +video{ display: block; } + +/* Accessibility helpers */ +.skip-link{ + position: absolute; + left: -999px; + top: 0; + background: var(--bg); + border: 1px solid var(--border); + padding: .5rem .75rem; + border-radius: var(--r); + z-index: 2000; +} +.skip-link:focus{ left: 1rem; top: 1rem; } + +:focus-visible{ + outline: 2px solid var(--accent); + outline-offset: 2px; +} + +/* Layout */ +.wrap{ + max-width: var(--wrap); + margin: 0 auto; + padding: var(--space-xl) var(--space-lg) var(--space-3xl); +} + +/* Utilities */ +.stack{ + display: flex; + flex-direction: column; + gap: var(--space-xl); +} + +header.site-header, footer.site-footer{ + background: var(--bg); + border-bottom: 1px solid var(--border); +} + +header.site-header{ + position: sticky; + top: 0; + z-index: 1000; +} + +.header-inner{ + max-width: var(--wrap); + margin: 0 auto; + padding: var(--space-md) var(--space-lg); + display: flex; + align-items: center; + justify-content: space-between; + gap: var(--space-lg); + flex-wrap: wrap; +} + +.brand{ + display: flex; + align-items: center; + gap: var(--space-md); + min-width: 240px; +} + +.logo{ + display: inline-flex; + align-items: center; + justify-content: center; + border-radius: var(--r); +} +.logo img{ + height: 48px; + width: 48px; + object-fit: contain; + border: 2px solid #000; + border-radius: var(--r); +} + +header.site-header .logo:hover img, +header.site-header .logo:focus-visible img{ + border-color: var(--accent); +} + +.brand-text{ + display: flex; + flex-direction: column; + line-height: 1.2; +} +.brand-text strong{ + font-size: var(--fs-lg); + color: var(--gold); + letter-spacing: .2px; +} +.brand-text span{ + font-size: var(--fs-sm); + color: var(--muted); +} + +.header-controls{ + display: flex; + align-items: center; + gap: var(--space-md); +} + +/* Links (match startpage hover) */ +a{ + color: var(--accent); + text-decoration: none; + transition: 0.1s; +} +a:hover{ + background: var(--accent); + color: #000 !important; +} + +/* Menu */ +.menu-wrapper{ position: relative; } + +#menu-toggle{ + width: 44px; + height: 44px; + display: inline-flex; + align-items: center; + justify-content: center; + font-size: 22px; + line-height: 1; + transition: transform .25s ease; + border: 1px solid #000; + border-radius: var(--r); + background: var(--bg); + color: var(--ink); + padding: 0; +} + +#menu-toggle:hover { + background: var(--accent); + color: #000; + border-color: #000; +} + +#menu-toggle.active{ + transform: rotate(90deg); + background: var(--bg); + color: var(--ink); + border-color: #000; +} + +#menu-toggle.active:hover{ + background: var(--accent); + color: #000; + border-color: #000; +} + +nav.site-nav{ + position: absolute; + right: 0; + top: calc(100% + var(--space-xs)); + background: var(--bg); + border: 1px solid var(--ink); + border-radius: var(--r); + padding: var(--space-md) var(--space-md); + min-width: 200px; + box-shadow: 0 10px 22px var(--shadow); + z-index: 1200; +} +nav.site-nav ul{ list-style: none; margin: 0; padding: 0; } +nav.site-nav li{ margin: var(--space-sm) 0; } +nav.site-nav a{ + display: block; + padding: var(--space-xs) var(--space-xs); + transition: background .15s, color .15s; + color: var(--ink); +} +nav.site-nav a:hover{ background: var(--accent); color: #000; } + +/* Nav sections */ +nav.site-nav .nav-section{ margin-bottom: var(--space-md); } +nav.site-nav .nav-section:last-child{ margin-bottom: 0; } +nav.site-nav .nav-section + .nav-section{ + border-top: 1px solid var(--border); + padding-top: var(--space-md); +} +nav.site-nav .nav-label{ + font-size: var(--fs-xs); + font-weight: 600; + color: var(--muted); + text-transform: uppercase; + letter-spacing: 0.5px; + margin-bottom: var(--space-xs); + padding: var(--space-xs); +} + +/* Language dropdown */ +.lang{ position: relative; } + +.lang-toggle-wrapper{ display: inline-block; } + +.lang-menu{ + position: absolute; + right: 0; + top: calc(100% + var(--space-xs)); + background: var(--bg); + border: 1px solid var(--border); + border-radius: var(--r); + box-shadow: 0 10px 22px var(--shadow); + min-width: 160px; + padding: var(--space-sm); + z-index: 1200; +} +.lang-menu a{ + display: block; + padding: var(--space-sm) var(--space-sm); + color: var(--ink); + transition: background .15s; +} +.lang-menu a:hover{ background: var(--accent); color: #000; } + +/* Sections / cards */ +section{ + margin: var(--space-xl) 0; + border: 1px solid var(--border); + border-radius: var(--r); + padding: var(--space-lg); + background: var(--bg); +} + +h1{ + margin: 0 0 var(--space-md) 0; + color: var(--gold); + font-weight: 700; + font-size: var(--fs-2xl); + letter-spacing: .2px; + line-height: 1.2; +} + +h2{ + margin: 0 0 var(--space-md) 0; + color: var(--gold); + font-size: var(--fs-xl); + font-weight: 700; + letter-spacing: .1px; + line-height: 1.3; +} + +/* CHANGELOG SPECIFIC STYLES */ +.changelog-title{ + color: var(--gold) !important; + margin-bottom: var(--space-sm) !important; +} + +.changelog-date{ + font-size: var(--fs-3xl) !important; + font-weight: 700; + color: var(--muted); + margin: var(--space-sm) 0 var(--space-lg) 0; + line-height: 1.1; +} + +.muted{ color: var(--muted); font-size: var(--fs-sm); } + +/* Video */ +.video-wrap{ margin: var(--space-md) 0 0 0; } +.video-wrap video{ + width: 100%; + height: auto; + max-height: 80vh; + background: #000; + border: 1px solid var(--border); + border-radius: var(--r); +} + +/* Lists */ +.contact-list{ + list-style: none; + padding: 0; + margin: var(--space-md) 0 0 0; +} +.contact-list li{ margin: var(--space-sm) 0; line-height: 1.6; } +.contact-address{ font-style: normal; } + +blockquote{ + margin: var(--space-md) 0 0 0; + padding-left: var(--space-md); + border-left: 3px solid var(--border); + color: var(--muted); + font-style: italic; + font-size: var(--fs-sm); + line-height: 1.6; +} + +/* Iframe loading overlay */ +.iframe-clip{ position: relative; } +.iframe-clip iframe{ position: relative; z-index: 1; } +.iframe-clip.is-loading::before{ + content: "Loading..."; + position: absolute; + inset: 0; + display: flex; + align-items: center; + justify-content: center; + background: rgba(255, 255, 221, 0.92); + color: var(--ink); + font-size: var(--fs-sm); + z-index: 2; +} +.iframe-clip.is-loading::after{ + content: ""; + position: absolute; + width: 22px; + height: 22px; + border: 2px solid var(--border); + border-top-color: var(--accent); + border-radius: 50%; + top: calc(50% + 16px); + left: 50%; + transform: translateX(-50%); + animation: iframe-spin 0.8s linear infinite; + z-index: 3; +} +@keyframes iframe-spin{ + to { transform: translateX(-50%) rotate(360deg); } +} + +/* Friends grid */ +.friends-list{ + display: grid; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: var(--space-md); + margin: var(--space-md) 0 0 0; + padding: 0; + list-style: none; +} +.friends-list a{ + display: flex; + align-items: center; + justify-content: center; + height: 42px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + + background: var(--bg); + border: 1px solid var(--border); + border-radius: var(--r); + padding: var(--space-sm) var(--space-sm); + color: var(--accent); + transition: background .15s, color .15s, border-color .15s, box-shadow .15s; +} +.friends-list a:hover{ + background: var(--accent); + color: #000; + border-color: var(--accent); + box-shadow: 0 1px 0 var(--accent) inset; +} + +/* Tiles */ +.tile-grid{ + display: grid; + grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); + gap: var(--space-md); + list-style: none; + padding: 0; + margin: var(--space-md) 0 0 0; +} +.tile-grid a{ + display: flex; + align-items: center; + justify-content: center; + height: 64px; + background: var(--bg); + border: 1px solid var(--border); + border-radius: var(--r); + padding: var(--space-sm); + transition: background .15s, border-color .15s, box-shadow .15s; +} +.tile-grid a:hover{ + background: var(--accent); + border-color: var(--accent); + box-shadow: 0 1px 0 var(--accent) inset; +} +.tile-grid img{ width: 100%; height: 100%; object-fit: contain; } + +/* Embeds */ +.embed-frame{ + display: block; + width: 100%; + border: 1px solid var(--border); + border-radius: var(--r); + background: var(--bg); + margin: var(--space-md) 0 0 0; +} +.guestbook-form-frame{ + height: 350px; + min-height: 350px; +} +.iframe-clip{ + --sb: 18px; + overflow: hidden; + border-radius: var(--r); + border: 1px solid var(--border); +} +.iframe-clip > iframe{ + width: calc(100% + var(--sb)); + height: calc(100% + var(--sb)); + border: 0; +} +.guestbook-frame{ min-height: 90vh; } + +#guestbook-comments-iframe { + min-height: 600px; /* Adjusted to show more comments */ +} + +.changelog-frame{ min-height: 360px; } + +/* Audio */ +.audio-wrap{ margin: var(--space-md) 0 0 0; } +audio{ width: 100%; max-width: 400px; } + +/* Blog + changelog lists */ +#blog-list, +#changelog-list{ margin: var(--space-md) 0 0 0; } +#blog-list > div:first-child, +#changelog-list > div:first-child{ margin-bottom: var(--space-md); } +#blog-list ol, +#changelog-list ol{ margin: var(--space-md) 0 0 0; padding-left: var(--space-xl); } +#blog-list li, +#changelog-list li{ margin: 0 0 var(--space-md) 0; line-height: 1.6; } +#blog-list .muted, +#changelog-list .muted{ font-size: var(--fs-sm); margin-top: var(--space-xs); } +#blog-list .blog-more{ margin-top: var(--space-xs); } +#changelog-list .changelog-body{ margin-top: var(--space-xs); white-space: pre-line; } +#changelog-list time{ color: var(--accent); } + +/* Footer */ +footer.site-footer{ border-top: 1px solid var(--border); border-bottom: none; } +.footer-inner{ + max-width: var(--wrap); + margin: 0 auto; + padding: var(--space-lg) var(--space-lg) var(--space-2xl); + color: var(--muted); + font-size: var(--fs-sm); + line-height: 1.6; +} +.badge{ + display: inline-flex; + margin-top: var(--space-sm); + border-radius: var(--r); + padding: var(--space-xs); + border: 1px solid var(--border); + background: var(--bg); + transition: border-color .15s; +} +.badge:hover{ border-color: var(--accent); } + +/* Reset Button */ +.reset-button{ + font-size: var(--fs-sm); + border: 1px solid #000; /* Black border */ + padding: 4px 8px; + border-radius: var(--r); + color: #000; /* Black text */ + background: #ffd; /* Light yellow background */ + cursor: pointer; + font-family: inherit; + display: inline-flex; + align-items: center; + justify-content: center; + transition: background .15s, color .15s, border-color .15s; +} + +.reset-button:hover { + background: var(--accent); /* Dark red on hover */ + color: #000; /* Black text on hover */ + border-color: #000; /* Black border on hover */ +} + +@media (max-width: 600px){ + .tile-grid{ + display: flex; + flex-direction: column; + align-items: center; + } + .tile-grid li{ + margin-bottom: 1rem; + text-align: center; + } + .contact-list{ + padding-left: 20px; + } + .friends-list{ + display: flex; + flex-direction: column; + gap: 10px; + } +} + +@media (max-width: 520px){ + header.site-header{ position: sticky; } + .header-inner{ position: relative; } + nav.site-nav{ + min-width: 200px; + max-width: calc(100vw - 2 * var(--space-lg)); + } + .lang-menu{ + right: auto; + left: 0; + max-width: calc(100vw - 32px); + } + #menu-toggle{ display: inline-flex; transition: transform .25s ease; } + #menu-toggle.active{ transform: rotate(90deg); } +} + +@media (prefers-reduced-motion: reduce){ + *{ transition: none !important; scroll-behavior: auto !important; } + #menu-toggle.active{ transform: none; } +} + +/* From style.css */ +h1 { + font-family: 'Comic Sans MS', 'Chalkboard SE', 'Comic Neue', sans-serif; + font-size: 1.875rem; /* 30px / 16px (base font size) */ + padding-left: 40px; +} + +pre { + font-family: 'Comic Sans MS', 'Chalkboard SE', 'Comic Neue', sans-serif; + font-size: 12px; + padding-left: 40px; +} + +.button1 { + background-color: black; + font-family: Comic Sans MS; + font-weight: 300; +} + +.member { + float: left; + width: calc(20% - 2%); /* Adjust width to account for margins */ + margin: 1% 1% 45px 1%; +} + +.name { + bottom: 0px; +} + +.member img { + width: 50%; + display: block; +} + +ul.flowxl { + display: flex; + flex-wrap: wrap; + padding: 0; +} + +ul.flowxl > li { + list-style-type: none; + text-align: center; + width: var(--xiconsize); + min-width: var(--xiconsize); + max-width: var(--xiconsize); + max-height: calc(var(--xiconsize) + 60px); + padding: 2px; + margin: 0.125rem; /* Use rem for margin */ + overflow: hidden; + font-size: 1rem; + line-height: 1; +} + +ul.flowxl > li > a { + display: block; + line-height: 1; + font-size: 1.2rem; +} + +ul.flowxl li > a > img, +ul.flowxl li > img { + display: block; + border-radius: 9px; + width: auto; + max-width: var(--xiconsize); + max-height: var(--xiconsize); + overflow: hidden; + margin-left: auto; + margin-right: auto; +} + +ul.flowxl li > a > img[src$=".svg"] { + max-width: 170px; + max-height: 170px; +} + +.country-img { + height: 12.5rem; /* Use rem units for height */ + width: 250px; /* Desired width */ + object-fit: contain; /* Scales image to fit within the box while maintaining aspect ratio */ + max-width: 100%; /* Ensures responsiveness */ +} + +.countries { + flex-wrap: wrap; /* Ensures images wrap if they exceed container width */ + gap: 10px; /* Adds spacing between images */ + justify-content: center; /* Centers the images horizontally */ +} + +.vpn-logo { + width: 200px; /* Set max-width for scaling */ + max-width: 100%; /* Responsive width */ + height: auto; /* Maintain aspect ratio */ + object-fit: contain; /* Handle scaling gracefully */ +} + +.toesu-logo { + width: 200px; /* Set the default width */ + max-width: 100%; /* Ensure image scales on smaller screens */ + height: auto; /* Maintain original aspect ratio */ + object-fit: contain; /* Gracefully handle image scaling */ +} + +@import url('https://fonts.googleapis.com/css2?family=Anonymous+Pro:ital,wght@0,400;0,700;1,400;1,700&display=swap'); + + diff --git a/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2 b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2 new file mode 100644 index 0000000..d750914 Binary files /dev/null and b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2 differ diff --git a/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2 b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2 new file mode 100644 index 0000000..d15208d Binary files /dev/null and b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2 differ diff --git a/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2 b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2 new file mode 100644 index 0000000..024f077 Binary files /dev/null and b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2 differ diff --git a/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2 b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2 new file mode 100644 index 0000000..479d010 Binary files /dev/null and b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2 differ diff --git a/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2 b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2 new file mode 100644 index 0000000..de83a9c Binary files /dev/null and b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2 differ diff --git a/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2 b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2 new file mode 100644 index 0000000..6e7141f Binary files /dev/null and b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2 differ diff --git a/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2 b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2 new file mode 100644 index 0000000..a40c469 Binary files /dev/null and b/assets/fonts/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2 differ diff --git a/assets/js/includes.js b/assets/js/includes.js new file mode 100644 index 0000000..4af99f4 --- /dev/null +++ b/assets/js/includes.js @@ -0,0 +1,32 @@ +(async function () { + async function loadInto(selector, url) { + const mount = document.querySelector(selector); + if (!mount) return; + + try { + const res = await fetch(url); + if (!res.ok) throw new Error("HTTP " + res.status); + const html = await res.text(); + mount.innerHTML = html; + } catch (e) { + // Fail open: if includes fail, keep page usable. + // Intentionally no console noise. + } + } + + // Pages opt-in by including:
+ // and/or
+ await Promise.all([ + loadInto('[data-include="header"]', "/partials/header.html"), + loadInto('[data-include="footer"]', "/partials/footer.html"), + ]); + + // If a page uses includes, it likely removed the built-in header/footer. + // Re-run site.js behaviors after injection. + if (document.querySelector('[data-include="header"], [data-include="footer"]')) { + const s = document.createElement("script"); + s.src = "/assets/js/site.js"; + s.defer = true; + document.head.appendChild(s); + } +})(); diff --git a/assets/js/pages/404.js b/assets/js/pages/404.js new file mode 100644 index 0000000..a97a5b1 --- /dev/null +++ b/assets/js/pages/404.js @@ -0,0 +1,5 @@ +(function(){ + var el = document.getElementById('y'); + if (!el) return; + el.textContent = String(new Date().getFullYear()); + })(); diff --git a/assets/js/pages/50x.js b/assets/js/pages/50x.js new file mode 100644 index 0000000..a97a5b1 --- /dev/null +++ b/assets/js/pages/50x.js @@ -0,0 +1,5 @@ +(function(){ + var el = document.getElementById('y'); + if (!el) return; + el.textContent = String(new Date().getFullYear()); + })(); diff --git a/assets/js/pages/guestbook_jp.js b/assets/js/pages/guestbook_jp.js new file mode 100644 index 0000000..5f3a055 --- /dev/null +++ b/assets/js/pages/guestbook_jp.js @@ -0,0 +1,91 @@ +document.addEventListener("DOMContentLoaded", function () { + const form = document.getElementById("guestbook-form"); + const entriesContainer = document.getElementById("guestbook-entries"); + const captchaCanvas = document.getElementById("captcha-canvas"); + const refreshCaptchaButton = document.getElementById("refresh-captcha"); + const captchaInput = document.getElementById("captcha-input"); + const GUESTBOOK_KEY = "guestbookEntries"; + + let currentCaptcha = ""; + + function generateCaptcha() { + const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + let captcha = ""; + for (let i = 0; i < 6; i++) captcha += chars.charAt(Math.floor(Math.random() * chars.length)); + return captcha; + } + + function drawCaptcha(captcha) { + const ctx = captchaCanvas.getContext("2d"); + ctx.clearRect(0, 0, captchaCanvas.width, captchaCanvas.height); + ctx.font = "22px Arial"; + ctx.fillStyle = "#000"; + ctx.fillText(captcha, 10, 32); + } + + function refreshCaptcha() { + currentCaptcha = generateCaptcha(); + drawCaptcha(currentCaptcha); + } + + function formatMessage(message) { + return message + .split("\n") + .map((line) => { + if (line.startsWith(">")) return `${line}`; + return line; + }) + .join("
"); + } + + function loadEntries() { + const entries = JSON.parse(localStorage.getItem(GUESTBOOK_KEY)) || []; + entriesContainer.innerHTML = ""; + + entries + .slice() + .reverse() + .forEach((entry) => { + const entryElement = document.createElement("div"); + entryElement.className = "entry"; + + const nameElement = document.createElement("h4"); + if (entry.name === "Anonymous") nameElement.className = "anonymous"; + nameElement.textContent = entry.name; + entryElement.appendChild(nameElement); + + const messageElement = document.createElement("p"); + messageElement.innerHTML = formatMessage(entry.message); + entryElement.appendChild(messageElement); + + entriesContainer.appendChild(entryElement); + }); + } + + form.addEventListener("submit", function (event) { + event.preventDefault(); + + let name = document.getElementById("name").value.trim(); + if (!name) name = "Anonymous"; + + const message = document.getElementById("message").value.trim(); + const captchaValue = captchaInput.value.trim(); + + if (name && message && captchaValue === currentCaptcha) { + const entries = JSON.parse(localStorage.getItem(GUESTBOOK_KEY)) || []; + entries.push({ name, message }); + localStorage.setItem(GUESTBOOK_KEY, JSON.stringify(entries)); + + form.reset(); + document.getElementById("name").value = "Anonymous"; + loadEntries(); + refreshCaptcha(); + } else { + alert("CAPTCHA is incorrect. Please try again."); + } + }); + + refreshCaptcha(); + refreshCaptchaButton.addEventListener("click", refreshCaptcha); + loadEntries(); + }); diff --git a/assets/js/pages/guestbook_zh.js b/assets/js/pages/guestbook_zh.js new file mode 100644 index 0000000..5f3a055 --- /dev/null +++ b/assets/js/pages/guestbook_zh.js @@ -0,0 +1,91 @@ +document.addEventListener("DOMContentLoaded", function () { + const form = document.getElementById("guestbook-form"); + const entriesContainer = document.getElementById("guestbook-entries"); + const captchaCanvas = document.getElementById("captcha-canvas"); + const refreshCaptchaButton = document.getElementById("refresh-captcha"); + const captchaInput = document.getElementById("captcha-input"); + const GUESTBOOK_KEY = "guestbookEntries"; + + let currentCaptcha = ""; + + function generateCaptcha() { + const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + let captcha = ""; + for (let i = 0; i < 6; i++) captcha += chars.charAt(Math.floor(Math.random() * chars.length)); + return captcha; + } + + function drawCaptcha(captcha) { + const ctx = captchaCanvas.getContext("2d"); + ctx.clearRect(0, 0, captchaCanvas.width, captchaCanvas.height); + ctx.font = "22px Arial"; + ctx.fillStyle = "#000"; + ctx.fillText(captcha, 10, 32); + } + + function refreshCaptcha() { + currentCaptcha = generateCaptcha(); + drawCaptcha(currentCaptcha); + } + + function formatMessage(message) { + return message + .split("\n") + .map((line) => { + if (line.startsWith(">")) return `${line}`; + return line; + }) + .join("
"); + } + + function loadEntries() { + const entries = JSON.parse(localStorage.getItem(GUESTBOOK_KEY)) || []; + entriesContainer.innerHTML = ""; + + entries + .slice() + .reverse() + .forEach((entry) => { + const entryElement = document.createElement("div"); + entryElement.className = "entry"; + + const nameElement = document.createElement("h4"); + if (entry.name === "Anonymous") nameElement.className = "anonymous"; + nameElement.textContent = entry.name; + entryElement.appendChild(nameElement); + + const messageElement = document.createElement("p"); + messageElement.innerHTML = formatMessage(entry.message); + entryElement.appendChild(messageElement); + + entriesContainer.appendChild(entryElement); + }); + } + + form.addEventListener("submit", function (event) { + event.preventDefault(); + + let name = document.getElementById("name").value.trim(); + if (!name) name = "Anonymous"; + + const message = document.getElementById("message").value.trim(); + const captchaValue = captchaInput.value.trim(); + + if (name && message && captchaValue === currentCaptcha) { + const entries = JSON.parse(localStorage.getItem(GUESTBOOK_KEY)) || []; + entries.push({ name, message }); + localStorage.setItem(GUESTBOOK_KEY, JSON.stringify(entries)); + + form.reset(); + document.getElementById("name").value = "Anonymous"; + loadEntries(); + refreshCaptcha(); + } else { + alert("CAPTCHA is incorrect. Please try again."); + } + }); + + refreshCaptcha(); + refreshCaptchaButton.addEventListener("click", refreshCaptcha); + loadEntries(); + }); diff --git a/assets/js/pages/hitcounter.js b/assets/js/pages/hitcounter.js new file mode 100644 index 0000000..9c3f888 --- /dev/null +++ b/assets/js/pages/hitcounter.js @@ -0,0 +1,16 @@ +function countUniqueVisitors() { + const VISITOR_KEY = "uniqueVisitorCount"; + let visitorCount = localStorage.getItem(VISITOR_KEY); + if (!visitorCount) visitorCount = 0; + + const hasVisited = sessionStorage.getItem("hasVisited"); + if (!hasVisited) { + visitorCount++; + localStorage.setItem(VISITOR_KEY, visitorCount); + sessionStorage.setItem("hasVisited", "true"); + } + + document.getElementById("visitor-counter").innerText = visitorCount; + } + + countUniqueVisitors(); diff --git a/assets/js/pages/hitcounter_jp.js b/assets/js/pages/hitcounter_jp.js new file mode 100644 index 0000000..9c3f888 --- /dev/null +++ b/assets/js/pages/hitcounter_jp.js @@ -0,0 +1,16 @@ +function countUniqueVisitors() { + const VISITOR_KEY = "uniqueVisitorCount"; + let visitorCount = localStorage.getItem(VISITOR_KEY); + if (!visitorCount) visitorCount = 0; + + const hasVisited = sessionStorage.getItem("hasVisited"); + if (!hasVisited) { + visitorCount++; + localStorage.setItem(VISITOR_KEY, visitorCount); + sessionStorage.setItem("hasVisited", "true"); + } + + document.getElementById("visitor-counter").innerText = visitorCount; + } + + countUniqueVisitors(); diff --git a/assets/js/pages/hitcounter_zh.js b/assets/js/pages/hitcounter_zh.js new file mode 100644 index 0000000..9c3f888 --- /dev/null +++ b/assets/js/pages/hitcounter_zh.js @@ -0,0 +1,16 @@ +function countUniqueVisitors() { + const VISITOR_KEY = "uniqueVisitorCount"; + let visitorCount = localStorage.getItem(VISITOR_KEY); + if (!visitorCount) visitorCount = 0; + + const hasVisited = sessionStorage.getItem("hasVisited"); + if (!hasVisited) { + visitorCount++; + localStorage.setItem(VISITOR_KEY, visitorCount); + sessionStorage.setItem("hasVisited", "true"); + } + + document.getElementById("visitor-counter").innerText = visitorCount; + } + + countUniqueVisitors(); diff --git a/assets/js/pages/mstartpage-index.js b/assets/js/pages/mstartpage-index.js new file mode 100644 index 0000000..db518ab --- /dev/null +++ b/assets/js/pages/mstartpage-index.js @@ -0,0 +1,118 @@ +// Date and time functionality + function updateDateRealtime() { + const dateElement = document.getElementById("realtime-date"); + const clockElement = document.getElementById("realtime-clock"); + + const days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; + const months = ["January", "February", "March", "April", "May", "June", + "July", "August", "September", "October", "November", "December"]; + + const now = new Date(); + + // Date parts + const dayName = days[now.getDay()]; + const month = months[now.getMonth()]; + const dayNumber = now.getDate(); + const year = now.getFullYear(); + + const ordinal = (dayNumber > 3 && dayNumber < 21) ? 'th' : + (dayNumber % 10 === 1) ? 'st' : + (dayNumber % 10 === 2) ? 'nd' : + (dayNumber % 10 === 3) ? 'rd' : 'th'; + + dateElement.textContent = `${dayName}, ${month} ${dayNumber}${ordinal}, ${year}.`; + + // Clock parts (12-hour format) + let hours = now.getHours(); + const minutes = now.getMinutes(); + const seconds = now.getSeconds(); + + const period = hours >= 12 ? 'PM' : 'AM'; + hours = hours % 12 || 12; + + const formattedHours = hours.toString().padStart(2, "0"); + const formattedMinutes = minutes.toString().padStart(2, "0"); + const formattedSeconds = seconds.toString().padStart(2, "0"); + + clockElement.textContent = `${formattedHours}:${formattedMinutes}:${formattedSeconds} ${period}`; + } + + updateDateRealtime(); + setInterval(updateDateRealtime, 1000); + + // Menu toggle functionality + document.getElementById('menu-toggle').addEventListener('click', function() { + const menu = document.getElementById('main-menu'); + menu.classList.toggle('show'); + }); + + // Collapsible sections + const collapsibles = document.getElementsByClassName("collapsible"); + + for (let i = 0; i < collapsibles.length; i++) { + collapsibles[i].addEventListener("click", function() { + this.classList.toggle("active"); + const content = this.nextElementSibling; + if (content.style.display === "block") { + content.style.display = "none"; + } else { + content.style.display = "block"; + } + }); + } + + // XXX Verification functionality + const xxxToggle = document.getElementById('xxx-toggle'); + const xxxModal = document.getElementById('xxx-modal'); + const xxxConfirm = document.getElementById('xxx-confirm'); + const xxxDeny = document.getElementById('xxx-deny'); + const xxxList = document.getElementById('xxx-list'); + + // Check if already verified + let isVerified = localStorage.getItem('xxx-verified') === 'true'; + let isContentVisible = localStorage.getItem('xxx-visible') === 'true'; + + // Initialize based on stored state + if (isVerified && isContentVisible) { + xxxToggle.textContent = 'Hide XXX Content'; + xxxList.style.display = 'block'; + } else if (isVerified && !isContentVisible) { + xxxToggle.textContent = 'Show XXX Content'; + xxxList.style.display = 'none'; + } + + xxxToggle.addEventListener('click', function() { + if (isVerified) { + // Toggle visibility if already verified + if (xxxList.style.display === 'block') { + // Hide the content + xxxList.style.display = 'none'; + xxxToggle.textContent = 'Show XXX Content'; + localStorage.setItem('xxx-visible', 'false'); + } else { + // Show the content + xxxList.style.display = 'block'; + xxxToggle.textContent = 'Hide XXX Content'; + localStorage.setItem('xxx-visible', 'true'); + } + } else { + // Show verification modal if not verified + xxxModal.style.display = 'flex'; + } + }); + + xxxConfirm.addEventListener('click', function() { + // Set verification status + isVerified = true; + localStorage.setItem('xxx-verified', 'true'); + localStorage.setItem('xxx-visible', 'true'); + + // Hide modal and show content + xxxModal.style.display = 'none'; + xxxList.style.display = 'block'; + xxxToggle.textContent = 'Hide XXX Content'; + }); + + xxxDeny.addEventListener('click', function() { + xxxModal.style.display = 'none'; + }); diff --git a/assets/js/pages/test.js b/assets/js/pages/test.js new file mode 100644 index 0000000..ee1c831 --- /dev/null +++ b/assets/js/pages/test.js @@ -0,0 +1,10 @@ +document.getElementById("lastmod").textContent = document.lastModified; + +document.getElementById("menu-toggle").addEventListener("click", function() { + const sidebar = document.getElementById("mobile-sidebar"); + sidebar.classList.toggle("visible"); + if (sidebar.classList.contains("visible")) { + sidebar.scrollTop = 0; + window.scrollTo(0, 0); + } + }); diff --git a/assets/js/pages/test_jp.js b/assets/js/pages/test_jp.js new file mode 100644 index 0000000..ee1c831 --- /dev/null +++ b/assets/js/pages/test_jp.js @@ -0,0 +1,10 @@ +document.getElementById("lastmod").textContent = document.lastModified; + +document.getElementById("menu-toggle").addEventListener("click", function() { + const sidebar = document.getElementById("mobile-sidebar"); + sidebar.classList.toggle("visible"); + if (sidebar.classList.contains("visible")) { + sidebar.scrollTop = 0; + window.scrollTo(0, 0); + } + }); diff --git a/assets/js/pages/test_zh.js b/assets/js/pages/test_zh.js new file mode 100644 index 0000000..ee1c831 --- /dev/null +++ b/assets/js/pages/test_zh.js @@ -0,0 +1,10 @@ +document.getElementById("lastmod").textContent = document.lastModified; + +document.getElementById("menu-toggle").addEventListener("click", function() { + const sidebar = document.getElementById("mobile-sidebar"); + sidebar.classList.toggle("visible"); + if (sidebar.classList.contains("visible")) { + sidebar.scrollTop = 0; + window.scrollTo(0, 0); + } + }); diff --git a/assets/js/site.js b/assets/js/site.js new file mode 100644 index 0000000..39891b7 --- /dev/null +++ b/assets/js/site.js @@ -0,0 +1,415 @@ +(function () { + function byId(id) { + return document.getElementById(id); + } + + const menuBtn = byId("menu-toggle"); + const nav = byId("site-nav"); + + const langToggle = byId("lang-toggle"); + const langMenu = byId("lang-options"); + const currentLang = byId("current-lang"); + + let openDropdown = null; + + function closeMenu() { + if (!menuBtn || !nav) return; + menuBtn.classList.remove("active"); + menuBtn.setAttribute("aria-expanded", "false"); + nav.hidden = true; + if (openDropdown === "menu") openDropdown = null; + } + + function closeLang() { + if (!langToggle || !langMenu) return; + langToggle.setAttribute("aria-expanded", "false"); + langMenu.hidden = true; + if (openDropdown === "lang") openDropdown = null; + } + + function toggleMenu(e) { + if (!menuBtn || !nav) return; + e.stopPropagation(); + + if (openDropdown === "lang") closeLang(); + + const open = menuBtn.getAttribute("aria-expanded") === "true"; + if (open) { + closeMenu(); + return; + } + + menuBtn.classList.add("active"); + menuBtn.setAttribute("aria-expanded", "true"); + nav.hidden = false; + openDropdown = "menu"; + } + + function toggleLang(e) { + if (!langToggle || !langMenu) return; + e.stopPropagation(); + + if (openDropdown === "menu") closeMenu(); + + const open = langToggle.getAttribute("aria-expanded") === "true"; + if (open) { + closeLang(); + return; + } + + langToggle.setAttribute("aria-expanded", "true"); + langMenu.hidden = false; + openDropdown = "lang"; + } + + if (nav) nav.hidden = true; + if (langMenu) langMenu.hidden = true; + + if (menuBtn && nav) { + menuBtn.addEventListener("click", toggleMenu); + nav.addEventListener("click", (e) => e.stopPropagation()); + } + + if (langToggle && langMenu) { + langToggle.addEventListener("click", toggleLang); + langMenu.addEventListener("click", (e) => e.stopPropagation()); + } + + if ((menuBtn && nav) || (langToggle && langMenu)) { + document.addEventListener("click", function (e) { + if ( + menuBtn && nav && + (menuBtn.contains(e.target) || nav.contains(e.target)) + ) { + return; + } + if ( + langToggle && langMenu && + (langToggle.contains(e.target) || langMenu.contains(e.target)) + ) { + return; + } + closeMenu(); + closeLang(); + }); + + document.addEventListener("keydown", function (e) { + if (e.key === "Escape") { + closeMenu(); + closeLang(); + } + }); + } + + if (currentLang) { + const docLang = (document.documentElement.lang || "en").toLowerCase(); + currentLang.textContent = docLang === "zh" ? "ZH" : docLang === "ja" ? "JA" : "EN"; + } + + if (langMenu) { + langMenu.querySelectorAll("a[data-lang]").forEach((a) => { + a.addEventListener("click", function () { + localStorage.setItem("preferredLang", this.getAttribute("data-lang") || "en"); + }); + }); + } + + // Language menu hrefs: convert current page to *_zh.html / *_jp.html. + // Needs to work for both: + // - directory URLs: /foo/ (serve /foo/index.html) + // - file URLs: /foo/page.html + function updateLangMenuHrefs() { + const links = document.querySelectorAll("a[data-lang-href][data-lang]"); + if (!links.length) return; + + let path = window.location.pathname || "/"; + if (!path.startsWith("/")) path = "/" + path; + + const isDir = path.endsWith("/"); + const file = isDir ? "index.html" : (path.split("/").pop() || "index.html"); + const base = isDir ? path : path.slice(0, -file.length); + + const baseName = file.replace(/_(zh|jp)\.html$/i, ".html"); + const map = { + en: baseName, + zh: baseName.replace(/(_(zh|jp))?\.html$/i, "_zh.html"), + ja: baseName.replace(/(_(zh|jp))?\.html$/i, "_jp.html"), + }; + + links.forEach((a) => { + const lang = (a.getAttribute("data-lang") || "en").toLowerCase(); + const targetFile = map[lang] || map.en; + a.href = base + targetFile; + }); + } + + function updateAriaCurrent() { + const path = window.location.pathname || "/"; + const normalized = path.startsWith("/") ? path : "/" + path; + const isDir = normalized.endsWith("/"); + const file = isDir ? "index.html" : (normalized.split("/").pop() || "index.html"); + const base = isDir ? normalized : normalized.slice(0, -file.length); + const indexPath = base + "index.html"; + const dirPath = base || "/"; + const candidates = new Set([normalized, indexPath, dirPath, dirPath.replace(/\/$/, "")]); + + document.querySelectorAll("#site-nav a[href]").forEach((a) => { + const href = a.getAttribute("href") || ""; + const hrefUrl = new URL(href, window.location.origin); + if (hrefUrl.origin !== window.location.origin) { + a.removeAttribute("aria-current"); + return; + } + const hrefPath = hrefUrl.pathname; + if (candidates.has(hrefPath)) { + a.setAttribute("aria-current", "page"); + } else { + a.removeAttribute("aria-current"); + } + }); + + const docLang = (document.documentElement.lang || "en").toLowerCase(); + document.querySelectorAll("#lang-options a[data-lang]").forEach((a) => { + const lang = (a.getAttribute("data-lang") || "en").toLowerCase(); + if (lang === docLang) { + a.setAttribute("aria-current", "page"); + } else { + a.removeAttribute("aria-current"); + } + }); + } + + // Run once now... + updateLangMenuHrefs(); + updateAriaCurrent(); + // ...and again after layout/injection settles. + setTimeout(updateLangMenuHrefs, 0); + setTimeout(updateAriaCurrent, 0); + + // Home page blog list (optional) + const blogList = byId("blog-list"); + if (blogList) { + const blogHost = "https://blog.sillylaird.ca"; + const ctrl = new AbortController(); + const timeout = setTimeout(() => ctrl.abort(), 3500); + + fetch(blogHost + "/api/posts.php", { signal: ctrl.signal }) + .then((r) => r.json()) + .then((posts) => { + blogList.textContent = ""; + + const top = document.createElement("div"); + + const strong = document.createElement("strong"); + strong.textContent = "Posts"; + top.appendChild(strong); + + top.appendChild(document.createTextNode(" (")); + const allLink = document.createElement("a"); + allLink.href = blogHost; + allLink.textContent = "all"; + top.appendChild(allLink); + top.appendChild(document.createTextNode(")")); + + blogList.appendChild(top); + + const list = document.createElement("ol"); + (posts || []).forEach((post) => { + const li = document.createElement("li"); + + const a = document.createElement("a"); + a.href = blogHost + "/" + String(post.path || "").replace(/^\/+/, ""); + a.textContent = String(post.title || "Untitled"); + + const date = document.createElement("div"); + date.className = "muted"; + + const y = String(post.year || ""); + const m = String(post.month || "").padStart(2, "0"); + const d = String(post.day || "").padStart(2, "0"); + const iso = y && m && d ? `${y}-${m}-${d}` : ""; + + const time = document.createElement("time"); + if (iso) time.setAttribute("datetime", iso); + time.textContent = iso || ""; + + li.appendChild(a); + li.appendChild(document.createElement("br")); + date.appendChild(time); + li.appendChild(date); + + list.appendChild(li); + }); + + blogList.appendChild(list); + + if (!list.children.length) { + const empty = document.createElement("div"); + empty.className = "muted"; + empty.textContent = "No posts yet."; + blogList.appendChild(empty); + } + }) + .catch((err) => { + blogList.textContent = err && err.name === "AbortError" + ? "Blog list timed out." + : "Cannot load posts right now."; + }) + .finally(() => clearTimeout(timeout)); + } + + const changelogList = byId("changelog-list"); + if (changelogList) { + const changelogPage = "/changelog/"; + const ctrl = new AbortController(); + const timeout = setTimeout(() => ctrl.abort(), 3500); + + fetch(changelogPage, { signal: ctrl.signal }) + .then((r) => r.text()) + .then((html) => { + changelogList.textContent = ""; + const doc = new DOMParser().parseFromString(html, "text/html"); + const entries = Array.from(doc.querySelectorAll(".changelog-entry")); + + const top = document.createElement("div"); + + const strong = document.createElement("strong"); + strong.textContent = "Entries"; + top.appendChild(strong); + + top.appendChild(document.createTextNode(" (")); + const allLink = document.createElement("a"); + allLink.href = "/changelog/"; + allLink.textContent = "all"; + top.appendChild(allLink); + top.appendChild(document.createTextNode(")")); + + changelogList.appendChild(top); + + const list = document.createElement("ol"); + entries.forEach((entry) => { + const li = document.createElement("li"); + + const titleText = (entry.querySelector("strong, b")?.textContent || "").trim(); + const timeEl = entry.querySelector("time"); + const dateText = (timeEl?.textContent || "").trim(); + const dateIso = (timeEl?.getAttribute("datetime") || "").trim(); + const bodyEl = entry.querySelector(".text"); + const bodyText = (bodyEl?.textContent || "").trim(); + + const title = document.createElement("strong"); + if (titleText) { + title.textContent = titleText; + li.appendChild(title); + + if (dateText) { + const date = document.createElement("div"); + date.className = "muted"; + const time = document.createElement("time"); + if (dateIso) time.setAttribute("datetime", dateIso); + time.textContent = dateText; + date.appendChild(time); + li.appendChild(date); + } + } else if (dateText) { + title.textContent = dateText; + li.appendChild(title); + } + + if (bodyText) { + const body = document.createElement("div"); + body.className = "changelog-body"; + body.textContent = bodyText; + li.appendChild(body); + } + + list.appendChild(li); + }); + + changelogList.appendChild(list); + + if (!list.children.length) { + const empty = document.createElement("div"); + empty.className = "muted"; + empty.textContent = "No updates yet."; + changelogList.appendChild(empty); + } + }) + .catch((err) => { + changelogList.textContent = err && err.name === "AbortError" + ? "Changelog list timed out." + : "Cannot load changelog right now."; + }) + .finally(() => clearTimeout(timeout)); + } + + const resetBtn = byId("guestbook-reset"); + if (resetBtn) { + resetBtn.addEventListener("click", () => { + const frame = byId("guestbook-form-iframe"); + if (!frame) return; + setIframeLoading(frame); + const src = frame.getAttribute("src") || frame.src; + if (src) { + // Reset by reloading the iframe URL (works cross-origin too). + frame.setAttribute("src", src); + return; + } + if (frame.contentWindow) frame.contentWindow.location.reload(); + }); + } + + function setIframeLoading(frame) { + if (!frame) return; + const clip = frame.closest(".iframe-clip"); + if (!clip) return; + clip.classList.add("is-loading"); + const onLoad = () => { + clip.classList.remove("is-loading"); + }; + frame.addEventListener("load", onLoad, { once: true }); + } + + function resetIframe(frame) { + if (!frame) return; + const src = frame.getAttribute("src") || frame.src; + if (src) { + frame.setAttribute("src", src); + return; + } + if (frame.contentWindow) frame.contentWindow.location.reload(); + } + + document.querySelectorAll("button[data-reset-iframe]").forEach((btn) => { + btn.addEventListener("click", () => { + const key = btn.getAttribute("data-reset-iframe"); + if (!key) return; + const scope = btn.closest(".iframe-clip") || btn.parentElement || document; + const frame = scope.querySelector(`iframe[data-iframe=\"${key}\"]`) || document.querySelector(`iframe[data-iframe=\"${key}\"]`); + setIframeLoading(frame); + resetIframe(frame); + }); + }); + + // Footer year: local time only. + (function () { + const el = byId("copyright-year"); + if (!el) return; + + el.textContent = String(new Date().getFullYear()); + })(); + + // Footer last-updated: based on document.lastModified. + (function () { + const el = byId("last-updated"); + if (!el) return; + + const raw = document.lastModified; + const date = raw ? new Date(raw) : null; + if (!date || Number.isNaN(date.getTime())) return; + + const iso = date.toISOString().slice(0, 10); + el.setAttribute("datetime", iso); + el.textContent = iso; + })(); +})(); diff --git a/avatar.png b/avatar.png new file mode 100644 index 0000000..858fde0 Binary files /dev/null and b/avatar.png differ diff --git a/babi.png b/babi.png new file mode 100644 index 0000000..e1ccd64 Binary files /dev/null and b/babi.png differ diff --git a/bbs.cgi b/bbs.cgi new file mode 100644 index 0000000..03d3240 --- /dev/null +++ b/bbs.cgi @@ -0,0 +1,4 @@ +#! /usr/bin/perl +print "Location: bbs.html\n"; +print "Content-type: text/html\n"; +print "\nbbs.html\n"; diff --git a/bbs.html b/bbs.html new file mode 100644 index 0000000..b79110f --- /dev/null +++ b/bbs.html @@ -0,0 +1,11 @@ + + + + + + BBS + + +

BBS is available on the diary subdomain: diary.sillylaird.ca/bbs.php.

+ + diff --git a/blog/index.html b/blog/index.html new file mode 100644 index 0000000..b979aec --- /dev/null +++ b/blog/index.html @@ -0,0 +1,124 @@ + + + + + + Blog — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

Blog

+

The current blog lives on its own subdomain.

+

Open blog.sillylaird.ca

+
+
+ +
+
+ +
+
+ + diff --git a/blog/index_jp.html b/blog/index_jp.html new file mode 100644 index 0000000..ef14bbf --- /dev/null +++ b/blog/index_jp.html @@ -0,0 +1,124 @@ + + + + + + ブログ — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

ブログ

+

The current blog lives on its own subdomain.

+

Open blog.sillylaird.ca

+
+
+ +
+
+ +
+
+ + diff --git a/blog/index_zh.html b/blog/index_zh.html new file mode 100644 index 0000000..6dbde26 --- /dev/null +++ b/blog/index_zh.html @@ -0,0 +1,124 @@ + + + + + + 博客 — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

博客

+

The current blog lives on its own subdomain.

+

Open blog.sillylaird.ca

+
+
+ +
+
+ +
+
+ + diff --git a/bookmarks/anime-watched.txt b/bookmarks/anime-watched.txt new file mode 100644 index 0000000..af933c2 --- /dev/null +++ b/bookmarks/anime-watched.txt @@ -0,0 +1,2 @@ +BPS watched. times unknown ? +Lain watched. times unknown ? diff --git a/bookmarks/bookmarks.txt b/bookmarks/bookmarks.txt new file mode 100644 index 0000000..2708986 --- /dev/null +++ b/bookmarks/bookmarks.txt @@ -0,0 +1,195 @@ +bookmarks +https://www.youtube.com/ +https://www.vidlii.com/ +https://www.reddit.com/ +https://discordapp.com/channels/@me +https://photos.google.com/ +https://mail.google.com/mail/u/1/h/1wqdb5xc3zhwv/?zy=g&f=1 +https://drive.google.com/drive/u/1/my-drive +https://neocities.org/ +https://play.aidungeon.io/ +https://www.models-resource.com/ + +subreddits +https://www.reddit.com/r/opendirectories/ +https://www.reddit.com/r/InternetMysteries/ +https://www.reddit.com/r/HighQualityGifs/ +https://www.reddit.com/r/DeepIntoYouTube/ +https://www.reddit.com/r/DataHoarder/ +https://www.reddit.com/r/AIDungeon/ + +raddle +https://raddle.me/f/Piracy +https://raddle.me/f/FileSharing +https://raddle.me/f/music + +Free Resources +https://the-eye.eu/public/ +https://thepiratebay.org/ +https://b-ok.cc/ +https://libgen.li/ +https://www.1337x.am/ +https://cinewhale.com/ +https://oldgamesdownload.com/ +https://vimm.net/ +https://en.booksee.org/ +https://gamejolt.com/ +http://www.gameranger.com/ +https://igg-games.com/ +https://yp1.yayponies.no/ +https://www.limetorrents.info/ +https://www.magnetdl.com/ +https://psarips.eu/ +https://root.yt/ +https://solidtorrents.net/ +https://epikmovies.com/ + +The public site I use: + +https://www.limetorrents.info/ + +The private site i use: + +https://www.scenetime.com/ + +Has free registrations currently. + +For old movies i use: + +https://www.magnetdl.com/ + +The release group i like the most for current video is: + +https://psarips.eu + +But it has forced ads. + +graphics +https://www.glitter-graphics.com/ +https://textcraft.net/ +https://pookatoo.com/ +https://gifcities.org/ +https://textanim.com/ +https://www.glitterphoto.net/ +https://blingee.com/ +https://wallpaperplay.com/ +https://cooltext.com/ +https://lingojam.com/DiscordFonts + +time wasters +https://www.cracked.com/ +https://www.somethingawful.com/ +https://postsecret.com/ +https://classicreload.com/ +https://www.wimp.com/ +https://www.avclub.com/ + +Special Search Engines +https://www.geocities.ws/archive/ +https://www.filechef.com/ +http://www.oocities.org/#gsc.tab=0 + +nsfw/image boards and galleries +http://fchan.us/ +https://www.allgayart.com/index.html +https://boards.plus4chan.org/ +https://archive.4plebs.org/ + +vsrg/music rhythm games +https://www.flashflashrevolution.com/ +https://projectmoon.dance/ +https://etternaonline.com/ +https://www.stepmania.com/ +https://quavergame.com/ + +The Pirate Bay Proxies List (July, 2022) + +https://tpb24.ukpass.co/ + +https://tpbay.link + +https://thepiratebay.gg + +https://bayspirateproxy.com + +https://piratebayproxy.click + +https://tpbpiratebayproxy.com + +IM: + +XMPP: +https://darknet.im/ + +torrents 2023: + +https://torrentgalaxy-official.com/ + +After that I'd go with + +https://magnetdl.hair/ + +https://extratorrent-official.com/ + +https://eztvx.to/home + +https://x1337x.cc/ + +https://thepiratebay.org/index.html + +https://www.torrentleech.org/ + +Torlock.com + +Torrentz2.nz + +LimeTorrents.cc + +web.stremio.com (for viewing and downloading) + +YTS.mx (.mp4 only) + +vpns i use: +https://cryptostorm.is/ +https://www.nordvpn.com +https://www.mullvad.net + + +You can hear the news in latin: + +https://areena.yle.fi/1-1931339 + +http://www.radiobremen.de/nachrichten/latein/latein-startseite100.html + +Read the news: + +http://ephemeris.alcuinus.net + +https://de.radiovaticana.va/news/dossiers/nuntii-latini + +There is a latin forum: + + +https://latindiscussion.com/forum/forums/speak-latin.19/ + +YouTube has some videos, there are some awesome Latin channels: + +https://www.youtube.com/results?search_query=classical+latin + +Potcasts: + +https://quomododicitur.com + +#other social media +https://x.com +https://news.ycombinator.com/news + +#mastodon/lemmy +https://programming.dev/ +https://lemmy.ca/ + +#sport streams +https://www.vipbox.lc/ +https://streameast.to/ + + diff --git a/bookmarks/bookmarks.txt~ b/bookmarks/bookmarks.txt~ new file mode 100644 index 0000000..fb35646 --- /dev/null +++ b/bookmarks/bookmarks.txt~ @@ -0,0 +1,186 @@ +bookmarks +https://www.youtube.com/ +https://www.vidlii.com/ +https://www.reddit.com/ +https://discordapp.com/channels/@me +https://photos.google.com/ +https://mail.google.com/mail/u/1/h/1wqdb5xc3zhwv/?zy=g&f=1 +https://drive.google.com/drive/u/1/my-drive +https://neocities.org/ +https://play.aidungeon.io/ +https://www.models-resource.com/ + +subreddits +https://www.reddit.com/r/opendirectories/ +https://www.reddit.com/r/InternetMysteries/ +https://www.reddit.com/r/HighQualityGifs/ +https://www.reddit.com/r/DeepIntoYouTube/ +https://www.reddit.com/r/DataHoarder/ +https://www.reddit.com/r/AIDungeon/ + +raddle +https://raddle.me/f/Piracy +https://raddle.me/f/FileSharing +https://raddle.me/f/music + +Free Resources +https://the-eye.eu/public/ +https://thepiratebay.org/ +https://b-ok.cc/ +http://libgen.li/ +https://www.1337x.am/ +https://cinewhale.com/ +https://oldgamesdownload.com/ +https://vimm.net/ +https://en.booksee.org/ +https://gamejolt.com/ +http://www.gameranger.com/ +https://igg-games.com/ +https://yp1.yayponies.no/ +https://www.limetorrents.info/ +https://www.magnetdl.com/ +http://psarips.eu/ +https://root.yt/ +https://solidtorrents.net/ +https://epikmovies.com/ + +The public site I use: + +https://www.limetorrents.info/ + +The private site i use: + +https://www.scenetime.com/ + +Has free registrations currently. + +For old movies i use: + +https://www.magnetdl.com/ + +The release group i like the most for current video is: + +http://psarips.eu + +But it has forced ads. + +graphics +https://www.glitter-graphics.com/ +https://textcraft.net/ +https://pookatoo.com/ +https://gifcities.org/ +https://textanim.com/ +https://www.glitterphoto.net/ +http://blingee.com/ +https://wallpaperplay.com/ +https://cooltext.com/ +https://lingojam.com/DiscordFonts + +time wasters +https://www.cracked.com/ +https://www.somethingawful.com/ +https://postsecret.com/ +https://classicreload.com/ +https://www.wimp.com/ +https://www.avclub.com/ + +Special Search Engines +http://www.geocities.ws/archive/ +https://www.filechef.com/ +http://www.oocities.org/#gsc.tab=0 + +nsfw/image boards and galleries +http://fchan.us/ +https://www.allgayart.com/index.html +https://boards.plus4chan.org/ +https://archive.4plebs.org/ + +vsrg/music rhythm games +http://www.flashflashrevolution.com/ +https://projectmoon.dance/ +https://etternaonline.com/ +https://www.stepmania.com/ +https://quavergame.com/ + +The Pirate Bay Proxies List (July, 2022) + +https://tpb24.ukpass.co/ + +https://tpbay.link + +https://thepiratebay.gg + +https://bayspirateproxy.com + +https://piratebayproxy.click + +https://tpbpiratebayproxy.com + +IM: + +XMPP: +https://darknet.im/ + +torrents 2023: + +TorrentGalaxy.to + +After that I'd go with + +MagnetDL.com + +ExtraTorrents.it + +EZTV.re + +1337x.to + +ThePirateBay.org + +TorrentLeech.org + +Torlock.com + +Torrentz2.nz + +LimeTorrents.cc + +web.stremio.com (for viewing and downloading) + +YTS.mx (.mp4 only) + +vpns i use: +https://cryptostorm.is/ + +You can hear the news in latin: + +http://areena.yle.fi/1-1931339 + +http://www.radiobremen.de/nachrichten/latein/latein-startseite100.html + +Read the news: + +http://ephemeris.alcuinus.net + +http://de.radiovaticana.va/news/dossiers/nuntii-latini + +There is a latin forum: + + +http://latindiscussion.com/forum/forums/speak-latin.19/ + +YouTube has some videos, there are some awesome Latin channels: + +https://www.youtube.com/results?search_query=classical+latin + +Potcasts: + +http://quomododicitur.com + +#other social media +https://bsky.app/ +https://news.ycombinator.com/news + +#mastodon/lemmy +https://programming.dev/ +https://lemmy.ca/ \ No newline at end of file diff --git a/bookmarks/index.html b/bookmarks/index.html new file mode 100644 index 0000000..357f4bc --- /dev/null +++ b/bookmarks/index.html @@ -0,0 +1,162 @@ + + + + + + Bookmarks — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

Bookmarks

+

Folders and link dumps.

+ + +
+
+ +
+
+ +
+
+ + diff --git a/bookmarks/index_jp.html b/bookmarks/index_jp.html new file mode 100644 index 0000000..b0ce93c --- /dev/null +++ b/bookmarks/index_jp.html @@ -0,0 +1,162 @@ + + + + + + ブックマーク — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

ブックマーク

+

Folders and link dumps.

+ + +
+
+ +
+
+ +
+
+ + diff --git a/bookmarks/index_zh.html b/bookmarks/index_zh.html new file mode 100644 index 0000000..558d990 --- /dev/null +++ b/bookmarks/index_zh.html @@ -0,0 +1,162 @@ + + + + + + 书签 — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

书签

+

Folders and link dumps.

+ + +
+
+ +
+
+ +
+
+ + diff --git a/bookmarks/radio.txt b/bookmarks/radio.txt new file mode 100644 index 0000000..679b835 --- /dev/null +++ b/bookmarks/radio.txt @@ -0,0 +1,11 @@ +twitch dj's + +https://www.twitch.tv/djbrady (DJ) But can be nsfw sometimes or most ^^ + +https://www.twitch.tv/juliusverve (Dj) Also does Rhythm Games + +https://www.twitch.tv/violit_tv (DJ) Very nice music + +https://touhou.kuukunen.net/ (touhou radio) + +https://listen.moe/ (anime radio) \ No newline at end of file diff --git a/bookmarks/styles.css b/bookmarks/styles.css new file mode 100644 index 0000000..6c56161 --- /dev/null +++ b/bookmarks/styles.css @@ -0,0 +1,162 @@ + \ No newline at end of file diff --git a/bookmarks/threads/opdownloadandconquer.txt b/bookmarks/threads/opdownloadandconquer.txt new file mode 100644 index 0000000..1e0ab46 --- /dev/null +++ b/bookmarks/threads/opdownloadandconquer.txt @@ -0,0 +1,63 @@ +thread archive: https://archive.ph/J4C8X + +Given how majority of the internet's audio and video services are provided by Google, thanks to Youtube, the purpose of this operation is to loosen the death-grip that has taken hold. This process will only require that you have a steady internet connection and (Advisably) 100 GB of free space. Here is the process: + +Step 1 +Download the latest versions of FFMpeg and Youtube-DL, and put all the programs into the same folder: +https://ffmpeg.org/ +https://ytdl-org.github.io/youtube-dl/index.html + +Step 2 +Create an account to any video sites that you wish to distribute videos on. Here are some of the more well-known alternatives, as well as some recommended sites: +AfreecaTV: https://www.afreecatv.com/ +Bitchute: https://www.bitchute.com/ +BitTube: https://bittube.tv/ +D.tube: https://d.tube/ +Dailymotion: https://www.dailymotion.com/ +LBRY: https://lbry.com/ +NicoNico: https://www.nicovideo.jp/ +Rumble: https://rumble.com/ +Veoh: https://www.veoh.com/ +VidLii: https://www.vidlii.com/ +Vimeo: https://vimeo.com/ +When signing up, if you do not want to use your personal email, you can create a temporary one using any one of the numerous “10 minute email” websites, Cock.li (If you have a referral link), or you can create your own email address: https://archive.fo/okVq4 +Also, make sure that you fulfill whatever silly verification demands the site has so that you can upload videos without any issues + +Step 3 +Hold “Shift” and right-click in an empty part of the folder and select “Open command window here”. Afterwards, you can download Youtube videos through one of the two following methods. First method is if you just want to repost videos and nothing more. All you have to put in the command youtube-dl URL and replace the “URL” with the actual link of the Youtube video, playlist, or channel that you want to download. Doing this will result in all the videos being downloaded, in the best quality possible, to the folder and nothing more. + +The second method is for those looking to repost videos in a more complete format. In the command line, instead of just the previously listed command, you copy and paste the following command: +LOGFILE="$PWD/logs/$(date +"%Y-%m-%d-%H-%M-%S.%N").log" +exec 3>&1 4>&2 >>$LOGFILE 2>&1 +youtube-dl --verbose --ignore-errors --no-continue --no-overwrites --keep-video --no-post-overwrites --download-archive archive.txt --write-description --write-info-json --write-annotations --write-thumbnail --all-subs --output "%(uploader)s-(%(uploader_id)s)/%(upload_date)s-%(title)s/%(upload_date)s-%(title)s-%(id)s.%(ext)s" -f bestvideo[ext=mp4]+bestaudio[ext=m4a] -- $1 +After doing so, replace the “$1” section of the final command line with the URL of the Youtube video, playlist, or channel that you want to download. The big difference here is that it will result in Youtube-dl creating an archive of videos already downloaded (To prevent downloading the same video repeatedly), all the videos and their files will be downloaded to their own individual folders, and videos will only be downloaded in the best quality that is available (Instead of the best quality possible). + +Make sure that the video downloaded by inputting the download command 3-5 times. Sometimes videos disconnect midway through, so you may need to perform this process several times, especially for longer videos. + +For videos hidden behind an age-gate restriction, there are two ways to bypass this. The first option is to use yt-dlp: https://github.com/yt-dlp/yt-dlp +It's the same program as Youtube-dl, except it has some QoL changes made to it. HOWEVER, do not use it as a replacement as it doesn't download most regular videos in their entirety for some reason. + +For the second option, what you do is that you log into your Youtube account and go to a video. Then you can either dump your browser's cookies to the same same folder as the previously downloaded programs, add --cookies FILE after “youtube-dl” and before the rest of the command, and change the word “FILE” to the actual cookies file that you put into the folder; ORyou can open the developer tab in your browser, copy the cookies requested by Youtube, and proceed to make your own cookies file: https://archive.vn/FK3mH + +If you download too many video in a short time, you may encounter a “HTTP Error 429: Too Many Requests” message that blocks your access. This can be bypassed by either filling out the Captcha on the Youtube website and dumping the cookies file afterwards or changing your IP address. + +Step 4 +Despite either method mentioned previously, sometimes there are leftover files that are trash. To delete this trash, search for and delete all “.part” files, audio files, and “.fXXX” video files found in the download folder. The “.part” files are videos that were unable to be fully downloaded for whatever reason and should be reattempted at a later date or downloaded through another method. The audio files and the “.fXXX” video files are just the individual audio and video for each Youtube video. They should automatically be deleted despite either method used, but verify just in case. + +Step 5 +Just re-upload the videos on all of the sites you made an account for. Also, it is advised that all uploaded videos should have this disclaimer in the description: “I did/do not create, publish, nor own the original video.” + +If you're doing a more thorough upload, here's a breakdown of the files in the video folder. The “.description” files contain all the text from the video's description, and can be opened in Notepad. The image located in the folder is the Youtube thumbnail. The “.json” file is the video's configuration file for annotations. The “.m4a” file is just the video's audio file and should be deleted. The “.mp4” file is the actual video itself; if there are two “.mp4” files, delete the one ending in “.fXXX” as that's just the original video file without any audio. The “.vtt” file(s) is the official subtitles attached to the video. + +Questions +>Why are some video sites with known issues recommended? +Because a bigger issue than all of those sites is the fact that Youtube has an artificial monopoly on the video-hosting market. And, a lot of these websites are just following their model and practices because they see it as successful and are not trying to compete. However, as is the goal of this operation, we will begin to see some sites altering their business practices to better complete as their presence increases. + +>What videos should I be uploading? +Advisably, just the videos you like to watch and rewatch. If you cannot think of what videos you should download, just sit back and think about the content you normally search for or listen to on Youtube, and repost that. The point is to just download and repost whatever is relevant to what you watch. Also, make sure that you're not flooding sites with 20 copies of the same video, so do a search on the sites before you upload to them. + +>What can a small amount of nobodies on the internet accomplish? +If 10 anons were to download and upload 10 videos for 10 days straight, that would result in 1000 videos being distributed across other sites in under two weeks. You don't need a large group of people to cause a sudden and dramatic shift. All that's needed is just small steps taken one at a time, that compound into an avalanche. + +>This isn't going to change anything as people are just going to fall back into their old habits. +I appreciate your criticism and advise that you go and rent a movie or game from Blockbuster or Hollywood Video. diff --git a/bookmarks/threads/opdownloadandconquer.txt~ b/bookmarks/threads/opdownloadandconquer.txt~ new file mode 100644 index 0000000..78c9ce3 --- /dev/null +++ b/bookmarks/threads/opdownloadandconquer.txt~ @@ -0,0 +1,63 @@ + + +Given how majority of the internet's audio and video services are provided by Google, thanks to Youtube, the purpose of this operation is to loosen the death-grip that has taken hold. This process will only require that you have a steady internet connection and (Advisably) 100 GB of free space. Here is the process: + +Step 1 +Download the latest versions of FFMpeg and Youtube-DL, and put all the programs into the same folder: +http://ffmpeg.org/ +https://ytdl-org.github.io/youtube-dl/index.html + +Step 2 +Create an account to any video sites that you wish to distribute videos on. Here are some of the more well-known alternatives, as well as some recommended sites: +AfreecaTV: https://www.afreecatv.com/ +Bitchute: https://www.bitchute.com/ +BitTube: https://bittube.tv/ +D.tube: https://d.tube/ +Dailymotion: https://www.dailymotion.com/ +LBRY: https://lbry.com/ +NicoNico: https://www.nicovideo.jp/ +Rumble: https://rumble.com/ +Veoh: https://www.veoh.com/ +VidLii: https://www.vidlii.com/ +Vimeo: https://vimeo.com/ +When signing up, if you do not want to use your personal email, you can create a temporary one using any one of the numerous “10 minute email” websites, Cock.li (If you have a referral link), or you can create your own email address: https://archive.fo/okVq4 +Also, make sure that you fulfill whatever silly verification demands the site has so that you can upload videos without any issues + +Step 3 +Hold “Shift” and right-click in an empty part of the folder and select “Open command window here”. Afterwards, you can download Youtube videos through one of the two following methods. First method is if you just want to repost videos and nothing more. All you have to put in the command youtube-dl URL and replace the “URL” with the actual link of the Youtube video, playlist, or channel that you want to download. Doing this will result in all the videos being downloaded, in the best quality possible, to the folder and nothing more. + +The second method is for those looking to repost videos in a more complete format. In the command line, instead of just the previously listed command, you copy and paste the following command: +LOGFILE="$PWD/logs/$(date +"%Y-%m-%d-%H-%M-%S.%N").log" +exec 3>&1 4>&2 >>$LOGFILE 2>&1 +youtube-dl --verbose --ignore-errors --no-continue --no-overwrites --keep-video --no-post-overwrites --download-archive archive.txt --write-description --write-info-json --write-annotations --write-thumbnail --all-subs --output "%(uploader)s-(%(uploader_id)s)/%(upload_date)s-%(title)s/%(upload_date)s-%(title)s-%(id)s.%(ext)s" -f bestvideo[ext=mp4]+bestaudio[ext=m4a] -- $1 +After doing so, replace the “$1” section of the final command line with the URL of the Youtube video, playlist, or channel that you want to download. The big difference here is that it will result in Youtube-dl creating an archive of videos already downloaded (To prevent downloading the same video repeatedly), all the videos and their files will be downloaded to their own individual folders, and videos will only be downloaded in the best quality that is available (Instead of the best quality possible). + +Make sure that the video downloaded by inputting the download command 3-5 times. Sometimes videos disconnect midway through, so you may need to perform this process several times, especially for longer videos. + +For videos hidden behind an age-gate restriction, there are two ways to bypass this. The first option is to use yt-dlp: https://github.com/yt-dlp/yt-dlp +It's the same program as Youtube-dl, except it has some QoL changes made to it. HOWEVER, do not use it as a replacement as it doesn't download most regular videos in their entirety for some reason. + +For the second option, what you do is that you log into your Youtube account and go to a video. Then you can either dump your browser's cookies to the same same folder as the previously downloaded programs, add --cookies FILE after “youtube-dl” and before the rest of the command, and change the word “FILE” to the actual cookies file that you put into the folder; ORyou can open the developer tab in your browser, copy the cookies requested by Youtube, and proceed to make your own cookies file: https://archive.vn/FK3mH + +If you download too many video in a short time, you may encounter a “HTTP Error 429: Too Many Requests” message that blocks your access. This can be bypassed by either filling out the Captcha on the Youtube website and dumping the cookies file afterwards or changing your IP address. + +Step 4 +Despite either method mentioned previously, sometimes there are leftover files that are trash. To delete this trash, search for and delete all “.part” files, audio files, and “.fXXX” video files found in the download folder. The “.part” files are videos that were unable to be fully downloaded for whatever reason and should be reattempted at a later date or downloaded through another method. The audio files and the “.fXXX” video files are just the individual audio and video for each Youtube video. They should automatically be deleted despite either method used, but verify just in case. + +Step 5 +Just re-upload the videos on all of the sites you made an account for. Also, it is advised that all uploaded videos should have this disclaimer in the description: “I did/do not create, publish, nor own the original video.” + +If you're doing a more thorough upload, here's a breakdown of the files in the video folder. The “.description” files contain all the text from the video's description, and can be opened in Notepad. The image located in the folder is the Youtube thumbnail. The “.json” file is the video's configuration file for annotations. The “.m4a” file is just the video's audio file and should be deleted. The “.mp4” file is the actual video itself; if there are two “.mp4” files, delete the one ending in “.fXXX” as that's just the original video file without any audio. The “.vtt” file(s) is the official subtitles attached to the video. + +Questions +>Why are some video sites with known issues recommended? +Because a bigger issue than all of those sites is the fact that Youtube has an artificial monopoly on the video-hosting market. And, a lot of these websites are just following their model and practices because they see it as successful and are not trying to compete. However, as is the goal of this operation, we will begin to see some sites altering their business practices to better complete as their presence increases. + +>What videos should I be uploading? +Advisably, just the videos you like to watch and rewatch. If you cannot think of what videos you should download, just sit back and think about the content you normally search for or listen to on Youtube, and repost that. The point is to just download and repost whatever is relevant to what you watch. Also, make sure that you're not flooding sites with 20 copies of the same video, so do a search on the sites before you upload to them. + +>What can a small amount of nobodies on the internet accomplish? +If 10 anons were to download and upload 10 videos for 10 days straight, that would result in 1000 videos being distributed across other sites in under two weeks. You don't need a large group of people to cause a sudden and dramatic shift. All that's needed is just small steps taken one at a time, that compound into an avalanche. + +>This isn't going to change anything as people are just going to fall back into their old habits. +I appreciate your criticism and advise that you go and rent a movie or game from Blockbuster or Hollywood Video. diff --git a/bookmarks/torbookmarks.txt b/bookmarks/torbookmarks.txt new file mode 100644 index 0000000..0219431 --- /dev/null +++ b/bookmarks/torbookmarks.txt @@ -0,0 +1,46 @@ +DNM Bible +http://biblemeowimkh3utujmhm6oh2oeb3ubjw2lpgeq3lahrfr2l6ev6zgyd.onion/ + +Ahmia (v3 .onion)- Search Engine +http://juhanurmihxlp77nkq76byazcldy2hlmovfu2epvl5ankdibsot4csyd.onion/ +https://ahmia.fi/ + +Searx +https://lgmekfnpealdqhnctyg3p5fuelpdwnbqbwnl2ickpdoodzatzgz27ryd.onion/ + +Phobos: +http://phobosxilamwcg75xt22id7aywkzol6q6rfl2flipcqoc4e4ahima5id.onion/ + +gimmeasearx +'Find a random searx instance' +http://7tcuoi57curagdk7nsvmzedcxgwlrq2d6jach4ksa3vj72uxrzadmqqd.onion/ +customizable, no js of course. + + +Email: +DNMX Dark Net Echange Email: +http://hxuzjtocnzvv5g2rtg2bhwkcbupmk7rclb6lly3fo4tvqkk5oyrv3nid.onion/ + +links to save and dig through: +http://trusrw4zkac4y4xkxvt4rsymmakodpqsanom37wa2d3onjkgahq72byd.onion/index.php#adult +http://fvrifdnu75abxcoegldwea6ke7tnb3fxwupedavf5m3yg3y2xqyvi5qd.onion/ + +https://dark.fail/ +https://tor.taxi/ + +Forum: +http://thehubmcwyzwijjoqvdtpmu36npcueypjbgnvbqz4jliwjmmnpfkzkqd.onion/ + +my site: +http://xd35x5na7ocldgitjmo4fkhnehje7b4ext5jmcmpsj63oeupqf43aiad.onion/ + +ImageBoard: +http://picochanwvqfa2xsrfzlul4x4aqtog2eljll5qnj5iagpbhx2vmfqnid.onion/tech/501 + +Wikis: +http://abrx6wcpzkfpwxb5eb2wsra2wnkrv2macdtkpnrepswodz5jxd4schyd.onion/index.xhtml + +Tor Email: +https://danwin1210.de/mail/ +sillylaird@danwin1210.de +sillylalird@danielas3rtn54uwmofdo3x2bsdifr47huasnmbgqzfrec5ubupvtpid.onion \ No newline at end of file diff --git a/bookmarks/youtube-channels.txt b/bookmarks/youtube-channels.txt new file mode 100644 index 0000000..7411ba3 --- /dev/null +++ b/bookmarks/youtube-channels.txt @@ -0,0 +1,44 @@ +Tech Channels: +https://youtube.com/channel/UCzCSzq34-_wVndtnjm4qIcw David Kolibáč +https://youtube.com/channel/UCl2mFZoRqjw_ELax4Yisf6w Louis Rossman +https://youtube.com/channel/UCXEJNKH9I4xsoyUNN3IL96A Xah Lee +https://youtube.com/channel/UCngn7SVujlvskHRvRKc1cTw Bugs Writer +https://youtube.com/channel/UC7YOGHUfC1Tb6E4pudI9STA Mental OutLaw +https://youtube.com/channel/UC2eYFnH61tmytImy1mTYvhA Luke Smith +https://youtube.com/channel/UCFjCMgoS6rcGxNVd2Rhg7BQ Sangryool +https://youtube.com/channel/UCZPiKkoVos_ggN-CSL50aGQ tokisuno +https://youtube.com/channel/UC0A3ldncnGQ1M_RU2Wb4L2A quidsup +https://youtube.com/channel/UCqGmpMaWCpLe7hpnNnU09TA The OpenBSD Guy +https://youtube.com/channel/UCgz0mcaKcSjIKbwo67I_Gjw マリウス / MARIUS + +Misc: +https://youtube.com/channel/UCtMVHI3AJD4Qk4hcbZnI9ZQ Some Oridonary Gamer + +Gaming: + +MMORPG: +https://youtube.com/channel/UCA3aDTFK19KEEIb0jHpM-9Q Vagrant + +RuneScape: +https://youtube.com/channel/UCl7FxeciaU48G-K6oIRH0xg KempQ + +Roblox: +https://youtube.com/channel/UCpzpXXRkho1BfO7KUENJdNA KonekoKitten + +Politics: +https://youtube.com/channel/UCiEKV_MOhwZ7OEcgFyLKilw Theo Von Clips + +Misc: +https://youtube.com/channel/UCdJdEguB1F1CiYe7OEi3SBg JonTronShow +https://youtube.com/channel/UCBa659QWEk1AI4Tg--mrJ2A Tom Scott + +Science: +https://youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXA Veritasium + +Legos: +https://youtube.com/channel/UCUU3GdGuQshZFRGnxAPBf_w TD BRICKS + +Food: + +Food Reviews: +https://youtube.com/channel/UC5jsbHkktuF0apQQQCGkoJQ RDR FOOD REVIEWS diff --git a/bookmarks/youtube-channels.txt~ b/bookmarks/youtube-channels.txt~ new file mode 100644 index 0000000..0fca96e --- /dev/null +++ b/bookmarks/youtube-channels.txt~ @@ -0,0 +1,44 @@ +Tech Channels: +https://invidious.pufe.org/channel/UCzCSzq34-_wVndtnjm4qIcw David Kolibáč +https://invidious.pufe.org/channel/UCl2mFZoRqjw_ELax4Yisf6w Louis Rossman +https://invidious.pufe.org/channel/UCXEJNKH9I4xsoyUNN3IL96A Xah Lee +https://invidious.pufe.org/channel/UCngn7SVujlvskHRvRKc1cTw Bugs Writer +https://invidious.pufe.org/channel/UC7YOGHUfC1Tb6E4pudI9STA Mental OutLaw +https://invidious.pufe.org/channel/UC2eYFnH61tmytImy1mTYvhA Luke Smith +https://invidious.pufe.org/channel/UCFjCMgoS6rcGxNVd2Rhg7BQ Sangryool +https://invidious.pufe.org/channel/UCZPiKkoVos_ggN-CSL50aGQ tokisuno +https://invidious.pufe.org/channel/UC0A3ldncnGQ1M_RU2Wb4L2A quidsup +https://invidious.pufe.org/channel/UCqGmpMaWCpLe7hpnNnU09TA The OpenBSD Guy +https://invidious.pufe.org/channel/UCgz0mcaKcSjIKbwo67I_Gjw マリウス / MARIUS + +Misc: +https://invidious.pufe.org/channel/UCtMVHI3AJD4Qk4hcbZnI9ZQ Some Oridonary Gamer + +Gaming: + +MMORPG: +https://invidious.pufe.org/channel/UCA3aDTFK19KEEIb0jHpM-9Q Vagrant + +RuneScape: +https://invidious.pufe.org/channel/UCl7FxeciaU48G-K6oIRH0xg KempQ + +Roblox: +https://invidious.pufe.org/channel/UCpzpXXRkho1BfO7KUENJdNA KonekoKitten + +Politics: +https://invidious.pufe.org/channel/UCiEKV_MOhwZ7OEcgFyLKilw Theo Von Clips + +Misc: +https://invidious.pufe.org/channel/UCdJdEguB1F1CiYe7OEi3SBg JonTronShow +https://invidious.pufe.org/channel/UCBa659QWEk1AI4Tg--mrJ2A Tom Scott + +Science: +https://invidious.pufe.org/channel/UCHnyfMqiRRG1u-2MsSQLbXA Veritasium + +Legos: +https://invidious.pufe.org/channel/UCUU3GdGuQshZFRGnxAPBf_w TD BRICKS + +Food: + +Food Reviews: +https://invidious.pufe.org/channel/UC5jsbHkktuF0apQQQCGkoJQ RDR FOOD REVIEWS diff --git a/bookmarks/youtube-videos.txt b/bookmarks/youtube-videos.txt new file mode 100644 index 0000000..fac75d4 --- /dev/null +++ b/bookmarks/youtube-videos.txt @@ -0,0 +1,24 @@ +Tech Channels: +https://invidious.namazso.eu/channel/UCzCSzq34-_wVndtnjm4qIcw David Kolibáč +https://invidious.namazso.eu/channel/UCl2mFZoRqjw_ELax4Yisf6w Louis Rossman +https://invidious.namazso.eu/channel/UCXEJNKH9I4xsoyUNN3IL96A Xah Lee +https://invidious.namazso.eu/channel/UCngn7SVujlvskHRvRKc1cTw Bugs Writer +https://invidious.namazso.eu/channel/UC7YOGHUfC1Tb6E4pudI9STA Mental OutLaw +https://invidious.namazso.eu/channel/UC2eYFnH61tmytImy1mTYvhA Luke Smith +https://invidious.namazso.eu/channel/UCFjCMgoS6rcGxNVd2Rhg7BQ Sangryool +https://invidious.namazso.eu/channel/UCZPiKkoVos_ggN-CSL50aGQ tokisuno + +Misc: +https://invidious.namazso.eu/channel/UCtMVHI3AJD4Qk4hcbZnI9ZQ Some Oridonary Gamer + +Gaming: + +Roblox: +https://invidious.namazso.eu/channel/UCpzpXXRkho1BfO7KUENJdNA KonekoKitten + +Politics: +https://invidious.namazso.eu/channel/UCBa659QWEk1AI4Tg--mrJ2A Tom Scott + +Misc: +https://invidious.namazso.eu/channel/UCdJdEguB1F1CiYe7OEi3SBg JonTronShow + diff --git a/bookmarks/youtube-videos.txt~ b/bookmarks/youtube-videos.txt~ new file mode 100644 index 0000000..556dee9 --- /dev/null +++ b/bookmarks/youtube-videos.txt~ @@ -0,0 +1,15 @@ +Tech Channels: +https://invidious.namazso.eu/channel/UCzCSzq34-_wVndtnjm4qIcw David Kolibáč +https://invidious.namazso.eu/channel/UCl2mFZoRqjw_ELax4Yisf6w Louis Rossman +https://invidious.namazso.eu/channel/UCXEJNKH9I4xsoyUNN3IL96A Xah Lee +https://invidious.namazso.eu/channel/UCngn7SVujlvskHRvRKc1cTw Bugs Writer +https://invidious.namazso.eu/channel/UC7YOGHUfC1Tb6E4pudI9STA Mental OutLaw +https://invidious.namazso.eu/channel/UC2eYFnH61tmytImy1mTYvhA Luke Smith +https://invidious.namazso.eu/channel/UCFjCMgoS6rcGxNVd2Rhg7BQ Sangryool +https://invidious.namazso.eu/channel/UCZPiKkoVos_ggN-CSL50aGQ tokisuno + +Misc: +https://invidious.namazso.eu/channel/UCtMVHI3AJD4Qk4hcbZnI9ZQ Some Oridonary Gamer + +Roblox: +https://invidious.namazso.eu/channel/UCpzpXXRkho1BfO7KUENJdNA KonekoKitten diff --git a/buyvm.png b/buyvm.png new file mode 100644 index 0000000..c717cd6 Binary files /dev/null and b/buyvm.png differ diff --git a/canada.png b/canada.png new file mode 100644 index 0000000..a320f14 Binary files /dev/null and b/canada.png differ diff --git a/ccp.svg b/ccp.svg new file mode 100644 index 0000000..67c23b9 --- /dev/null +++ b/ccp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/changelog/2023-changelog.txt b/changelog/2023-changelog.txt new file mode 100644 index 0000000..5964e8b --- /dev/null +++ b/changelog/2023-changelog.txt @@ -0,0 +1,12 @@ +**2023 ChangeLog** + +* 23 Dec 2023: Migrated to a Linux server again. chane some links to other section of the site. tor domain not working but i will set it up with a tor and i2pd. also removed links to other section of the site that were not in folders. of the root directory +* 22 Oct 2023: Server may go offline for abit im trying to keep them on though my main source of income may go on strike. so I may not be able to keep this server/site online my sdf site will stay as long as I can. +* 9 Sept 2023: trying to figure out what to update the site with next. I may learn Chinese better and make the cn.sillylaird.info better then before. I think that will be my next major update for the site. I also dont really keep track of version numbers as I find them irrelevent especially for a site like this. or any major site update. +* 25 Aug 2023: Changing the GuestBook as it has a expliot a spammer can easily go through. I switched it with htmlcomment box for now. I will for now update the pre exisiting one with a simple captcha. I also restarted my server a few days ago. Sorry for the down time on the tor domain. I forget that my server os doesnt start tor automatically for the domain. +* 10 July 2023: Brought the original tor domain back up. +* 21 June 2023: Tor domain is down will get working on bringing it up. I just need to follow the instructions again. and re install. +* 12 May 2023: Added a tor hidden service domain to the site. Now you can browse this site using tor!. +* 11 April 2023: I archived Ulillillia Archive Youtube videos on cdn.sillylaird/videos/ so that they can be saved. Those are my most favorite videos I liked at the time of browsing youtube when youtube wasn't bad. +* 22 March 2023: Added more menus and archived some stepmania files from izzy sm ftp/pub site. will end up archiving dtxmania then some swf files on swfarchive dot com. +* 6 March 2023: Template for changelog 2023 Changelog. diff --git a/changelog/2024-changelog.txt b/changelog/2024-changelog.txt new file mode 100644 index 0000000..0934530 --- /dev/null +++ b/changelog/2024-changelog.txt @@ -0,0 +1,11 @@ +**2024 ChangeLog** + +* 9 Sept 2024: Added more programs to the site and added my own guestbook with captcha :) hope you enjoy this site update. +* 1 August 2024: Fixing some links updating the site to work better added a new feature to the site. But it broke the mobile part of it so far. that will be fixed in the future. +* 24 July 2024: Going to add some pages like runescape and special force a fps game from south korea. plan on updating more links. +* 14 June 2024: successfully changed my host to sdf got secure web permission and ssl. feels good. +* 11 June 2024: Changed my host to sdf will update links and so on. +* 29 May 2024: Fixed some links added more content and so on. +* 18 May 2024: Added more journals. fixed up the site and so on. +* 4 May 2024: Change some links and audio files to be more in sync what happening in my life +* 2 January 2024: Updated the site for 2024! Happy NewYear! I'll probably be updating the site later on. also I just notice i was on a webring for Chinese users on my friend site djlain happy to be one of the user of that community. :) thank you for this djlain and hope you all have a good day and happy late new year! \ No newline at end of file diff --git a/changelog/2025-changelog.txt b/changelog/2025-changelog.txt new file mode 100644 index 0000000..e69de29 diff --git a/changelog/admin.html b/changelog/admin.html new file mode 100644 index 0000000..cc44fc5 --- /dev/null +++ b/changelog/admin.html @@ -0,0 +1,16 @@ + + + + + + Changelog Admin (Disabled) + + + +
+

Changelog Admin Disabled

+

This page used to require PHP. The site now serves static HTML only.

+

Go to changelog

+
+ + diff --git a/changelog/api/latest.html b/changelog/api/latest.html new file mode 100644 index 0000000..fe0553b --- /dev/null +++ b/changelog/api/latest.html @@ -0,0 +1,37 @@ +[ + { + "title": "Site update", + "body": "Added more programs to the site and added my own guestbook with captcha :) hope you enjoy this site update.", + "year": 2024, + "month": 9, + "day": 9 + }, + { + "title": "Site update", + "body": "Fixing some links updating the site to work better added a new feature to the site. But it broke the mobile part of it so far. that will be fixed in the future.", + "year": 2024, + "month": 8, + "day": 1 + }, + { + "title": "Site update", + "body": "Going to add some pages like runescape and special force a fps game from south korea. plan on updating more links.", + "year": 2024, + "month": 7, + "day": 24 + }, + { + "title": "Site update", + "body": "successfully changed my host to sdf got secure web permission and ssl. feels good.", + "year": 2024, + "month": 6, + "day": 14 + }, + { + "title": "Site update", + "body": "Changed my host to sdf will update links and so on.", + "year": 2024, + "month": 6, + "day": 11 + } +] diff --git a/changelog/auth.html b/changelog/auth.html new file mode 100644 index 0000000..fce7f3b --- /dev/null +++ b/changelog/auth.html @@ -0,0 +1,4 @@ + + +Deprecated +

This legacy PHP helper is no longer used.

diff --git a/changelog/db.html b/changelog/db.html new file mode 100644 index 0000000..fce7f3b --- /dev/null +++ b/changelog/db.html @@ -0,0 +1,4 @@ + + +Deprecated +

This legacy PHP helper is no longer used.

diff --git a/changelog/index.html b/changelog/index.html new file mode 100644 index 0000000..e625781 --- /dev/null +++ b/changelog/index.html @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + ChangeLog -- SillyLaird + + + + + + + + + +
+ +
+
+

ChangeLog

+

All notes are copied verbatim.

+ +

2024

+
    +
  • Added more programs to the site and added my own guestbook with captcha :) hope you enjoy this site update.
  • +
  • Fixing some links updating the site to work better added a new feature to the site. But it broke the mobile part of it so far. that will be fixed in the future.
  • +
  • Going to add some pages like runescape and special force a fps game from south korea. plan on updating more links.
  • +
  • successfully changed my host to sdf got secure web permission and ssl. feels good.
  • +
  • Changed my host to sdf will update links and so on.
  • +
  • Fixed some links added more content and so on.
  • +
  • Added more journals. fixed up the site and so on.
  • +
  • Change some links and audio files to be more in sync what happening in my life
  • +
  • Updated the site for 2024! Happy NewYear! I'll probably be updating the site later on. also I just notice i was on a webring for Chinese users on my friend site djlain happy to be one of the user of that community. :) thank you for this djlain and hope you all have a good day and happy late new year!
  • +
+ +

2023

+
    +
  • Migrated to a Linux server again. chane some links to other section of the site. tor domain not working but i will set it up with a tor and i2pd. also removed links to other section of the site that were not in folders. of the root directory
  • +
  • Server may go offline for abit im trying to keep them on though my main source of income may go on strike. so I may not be able to keep this server/site online my sdf site will stay as long as I can.
  • +
  • trying to figure out what to update the site with next. I may learn Chinese better and make the cn.sillylaird.info better then before. I think that will be my next major update for the site. I also dont really keep track of version numbers as I find them irrelevent especially for a site like this. or any major site update.
  • +
  • Changing the GuestBook as it has a expliot a spammer can easily go through. I switched it with htmlcomment box for now. I will for now update the pre exisiting one with a simple captcha. I also restarted my server a few days ago. Sorry for the down time on the tor domain. I forget that my server os doesnt start tor automatically for the domain.
  • +
  • Brought the original tor domain back up.
  • +
  • Tor domain is down will get working on bringing it up. I just need to follow the instructions again. and re install.
  • +
  • Added a tor hidden service domain to the site. Now you can browse this site using tor!.
  • +
  • I archived Ulillillia Archive Youtube videos on cdn.sillylaird/videos/ so that they can be saved. Those are my most favorite videos I liked at the time of browsing youtube when youtube wasn't bad.
  • +
  • Added more menus and archived some stepmania files from izzy sm ftp/pub site. will end up archiving dtxmania then some swf files on swfarchive dot com.
  • +
  • Template for changelog 2023 Changelog.
  • +
+ +
+
+ +
+ + diff --git a/changelog/index_jp.html b/changelog/index_jp.html new file mode 100644 index 0000000..ff17f18 --- /dev/null +++ b/changelog/index_jp.html @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + ChangeLog — SillyLaird + + + + + + + + + + + +
+ +
+ +
+
+

ChangeLog

+

All notes are copied verbatim.

+ +

2024

+
    +
  • Added more programs to the site and added my own guestbook with captcha :) hope you enjoy this site update.
  • +
  • Fixing some links updating the site to work better added a new feature to the site. But it broke the mobile part of it so far. that will be fixed in the future.
  • +
  • Going to add some pages like runescape and special force a fps game from south korea. plan on updating more links.
  • +
  • successfully changed my host to sdf got secure web permission and ssl. feels good.
  • +
  • Changed my host to sdf will update links and so on.
  • +
  • Fixed some links added more content and so on.
  • +
  • Added more journals. fixed up the site and so on.
  • +
  • Change some links and audio files to be more in sync what happening in my life
  • +
  • Updated the site for 2024! Happy NewYear! I'll probably be updating the site later on. also I just notice i was on a webring for Chinese users on my friend site djlain happy to be one of the user of that community. :) thank you for this djlain and hope you all have a good day and happy late new year!
  • +
+ +

2023

+
    +
  • Migrated to a Linux server again. chane some links to other section of the site. tor domain not working but i will set it up with a tor and i2pd. also removed links to other section of the site that were not in folders. of the root directory
  • +
  • Server may go offline for abit im trying to keep them on though my main source of income may go on strike. so I may not be able to keep this server/site online my sdf site will stay as long as I can.
  • +
  • trying to figure out what to update the site with next. I may learn Chinese better and make the cn.sillylaird.info better then before. I think that will be my next major update for the site. I also dont really keep track of version numbers as I find them irrelevent especially for a site like this. or any major site update.
  • +
  • Changing the GuestBook as it has a expliot a spammer can easily go through. I switched it with htmlcomment box for now. I will for now update the pre exisiting one with a simple captcha. I also restarted my server a few days ago. Sorry for the down time on the tor domain. I forget that my server os doesnt start tor automatically for the domain.
  • +
  • Brought the original tor domain back up.
  • +
  • Tor domain is down will get working on bringing it up. I just need to follow the instructions again. and re install.
  • +
  • Added a tor hidden service domain to the site. Now you can browse this site using tor!.
  • +
  • I archived Ulillillia Archive Youtube videos on cdn.sillylaird/videos/ so that they can be saved. Those are my most favorite videos I liked at the time of browsing youtube when youtube wasn't bad.
  • +
  • Added more menus and archived some stepmania files from izzy sm ftp/pub site. will end up archiving dtxmania then some swf files on swfarchive dot com.
  • +
  • Template for changelog 2023 更新履歴.
  • +
+
+
+ +
+
+ +
+
+ + diff --git a/changelog/index_zh.html b/changelog/index_zh.html new file mode 100644 index 0000000..3eafa73 --- /dev/null +++ b/changelog/index_zh.html @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + ChangeLog — SillyLaird + + + + + + + + + + + +
+ +
+ +
+
+

ChangeLog

+

All notes are copied verbatim.

+ +

2024

+
    +
  • Added more programs to the 网站 and added my own guestbook with captcha :) hope you enjoy this 网站 update.
  • +
  • Fixing some links updating the 网站 to work better added a new feature to the 网站. But it broke the mobile part of it so far. that will be fixed in the future.
  • +
  • Going to add some pages like runescape and special force a fps game from south korea. plan on updating more links.
  • +
  • successfully changed my host to sdf got secure web permission and ssl. feels good.
  • +
  • Changed my host to sdf will update links and so on.
  • +
  • Fixed some links added more content and so on.
  • +
  • Added more journals. fixed up the 网站 and so on.
  • +
  • Change some links and audio files to be more in sync what happening in my life
  • +
  • Updated the 网站 for 2024! Happy NewYear! I'll probably be updating the 网站 later on. also I just notice i was on a webring for Chinese users on my friend 网站 djlain happy to be one of the user of that community. :) thank you for this djlain and hope you all have a good day and happy late new year!
  • +
+ +

2023

+
    +
  • Migrated to a Linux server again. chane some links to other section of the 网站. tor domain not working but i will set it up with a tor and i2pd. also removed links to other section of the 网站 that were not in folders. of the root directory
  • +
  • Server may go offline for abit im trying to keep them on though my main source of income may go on strike. so I may not be able to keep this server/网站 online my sdf 网站 will stay as long as I can.
  • +
  • trying to figure out what to update the 网站 with next. I may learn Chinese better and make the cn.sillylaird.info better then before. I think that will be my next major update for the 网站. I also dont really keep track of version numbers as I find them irrelevent especially for a 网站 like this. or any major 网站 update.
  • +
  • Changing the GuestBook as it has a expliot a spammer can easily go through. I switched it with htmlcomment box for now. I will for now update the pre exisiting one with a simple captcha. I also restarted my server a few days ago. Sorry for the down time on the tor domain. I forget that my server os doesnt start tor automatically for the domain.
  • +
  • Brought the original tor domain back up.
  • +
  • Tor domain is down will get working on bringing it up. I just need to follow the instructions again. and re install.
  • +
  • Added a tor hidden service domain to the 网站. Now you can browse this 网站 using tor!.
  • +
  • I archived Ulillillia Archive Youtube videos on cdn.sillylaird/videos/ so that they can be saved. Those are my most favorite videos I liked at the time of browsing youtube when youtube wasn't bad.
  • +
  • Added more menus and archived some stepmania files from izzy sm ftp/pub 网站. will end up archiving dtxmania then some swf files on swfarchive dot com.
  • +
  • Template for changelog 2023 更新日志.
  • +
+
+
+ +
+
+ +
+
+ + diff --git a/changelog/latest.html b/changelog/latest.html new file mode 100644 index 0000000..a7051b0 --- /dev/null +++ b/changelog/latest.html @@ -0,0 +1,11 @@ +
Site update

Added more programs to the site and added my own guestbook with captcha :) hope you enjoy this site update.
+ +
Site update

Fixing some links updating the site to work better added a new feature to the site. But it broke the mobile part of it so far. that will be fixed in the future.
+ +
Site update

Going to add some pages like runescape and special force a fps game from south korea. plan on updating more links.
+ +
Site update

successfully changed my host to sdf got secure web permission and ssl. feels good.
+ +
Site update

Changed my host to sdf will update links and so on.
+ +Full changelog → diff --git a/changelog/login.html b/changelog/login.html new file mode 100644 index 0000000..8e5b379 --- /dev/null +++ b/changelog/login.html @@ -0,0 +1,16 @@ + + + + + + Changelog Login (Disabled) + + + +
+

Login Disabled

+

The old PHP login flow has been removed from this static build.

+

Go to changelog

+
+ + diff --git a/changelog/logout.html b/changelog/logout.html new file mode 100644 index 0000000..d2769ba --- /dev/null +++ b/changelog/logout.html @@ -0,0 +1,11 @@ + + + + + + Redirecting + + +

Redirecting to /changelog/...

+ + diff --git a/changelog/rss.xml b/changelog/rss.xml new file mode 100644 index 0000000..7a72398 --- /dev/null +++ b/changelog/rss.xml @@ -0,0 +1,30 @@ +'; +?> + + +SillyLaird Changelog +https://www.sillylaird.ca/changelog/ + +query(" + SELECT title, body, created_at + FROM changelog + ORDER BY created_at DESC + LIMIT 20 +"); +while ($e = $stmt->fetch(PDO::FETCH_ASSOC)): +?> + +<?= htmlspecialchars($e['title']) ?> + + +]]> + + + + + diff --git a/china.png b/china.png new file mode 100644 index 0000000..1b51ab5 Binary files /dev/null and b/china.png differ diff --git a/cirno.jpg b/cirno.jpg new file mode 100644 index 0000000..2d99a0f Binary files /dev/null and b/cirno.jpg differ diff --git a/cockbox.gif b/cockbox.gif new file mode 100644 index 0000000..f133bb3 Binary files /dev/null and b/cockbox.gif differ diff --git a/code.png b/code.png new file mode 100644 index 0000000..11b50a7 Binary files /dev/null and b/code.png differ diff --git a/computers/index.html b/computers/index.html new file mode 100644 index 0000000..409995a --- /dev/null +++ b/computers/index.html @@ -0,0 +1,166 @@ + + + + + + Computers — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

Computers

+

Image left → description → screenshot right. Retro and simple.

+ +

Main Machines

+ +
+ ThinkPad X260 +
+
ThinkPad X260
+ Daily Linux + Plan9front laptop.
+ 16GB RAM, NVMe mod. +
+ ThinkPad X260 Screenshot +
+ +
+ Desktop PC +
+
Custom Desktop
+ StepMania, Pop'n, PMS, coding, VMs.
+ Ryzen CPU, RTX GPU. +
+ Desktop Screenshot +
+ +

Retro Machines

+ +
+ Windows 98 Tower +
+
Windows 98 Tower
+ MIDI hardware, DOS/Win98 games, serial cable experiments. +
+ Windows 98 Screenshot +
+ +
+ Pentium III +
+
Pentium III
+ StepMania 3.9 machine and early 2000s computing setup. +
+ Pentium III Screenshot +
+
+
+ +
+
+ +
+
+ + diff --git a/computers/index_jp.html b/computers/index_jp.html new file mode 100644 index 0000000..545cc84 --- /dev/null +++ b/computers/index_jp.html @@ -0,0 +1,166 @@ + + + + + + コンピューター — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

コンピューター

+

Image left → description → screenshot right. Retro and simple.

+ +

Main Machines

+ +
+ ThinkPad X260 +
+
ThinkPad X260
+ Daily Linux + Plan9front laptop.
+ 16GB RAM, NVMe mod. +
+ ThinkPad X260 Screenshot +
+ +
+ Desktop PC +
+
Custom Desktop
+ StepMania, Pop'n, PMS, coding, VMs.
+ Ryzen CPU, RTX GPU. +
+ Desktop Screenshot +
+ +

Retro Machines

+ +
+ Windows 98 Tower +
+
Windows 98 Tower
+ MIDI hardware, DOS/Win98 games, serial cable experiments. +
+ Windows 98 Screenshot +
+ +
+ Pentium III +
+
Pentium III
+ StepMania 3.9 machine and early 2000s computing setup. +
+ Pentium III Screenshot +
+
+
+ +
+
+ +
+
+ + diff --git a/computers/index_zh.html b/computers/index_zh.html new file mode 100644 index 0000000..2464920 --- /dev/null +++ b/computers/index_zh.html @@ -0,0 +1,166 @@ + + + + + + 电脑设备 — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

电脑设备

+

Image left → description → screenshot right. Retro and simple.

+ +

Main Machines

+ +
+ ThinkPad X260 +
+
ThinkPad X260
+ Daily Linux + Plan9front laptop.
+ 16GB RAM, NVMe mod. +
+ ThinkPad X260 Screenshot +
+ +
+ Desktop PC +
+
Custom Desktop
+ StepMania, Pop'n, PMS, coding, VMs.
+ Ryzen CPU, RTX GPU. +
+ Desktop Screenshot +
+ +

Retro Machines

+ +
+ Windows 98 Tower +
+
Windows 98 Tower
+ MIDI hardware, DOS/Win98 games, serial cable experiments. +
+ Windows 98 Screenshot +
+ +
+ Pentium III +
+
Pentium III
+ StepMania 3.9 machine and early 2000s computing setup. +
+ Pentium III Screenshot +
+
+
+ +
+
+ +
+
+ + diff --git a/cornhub.png b/cornhub.png new file mode 100644 index 0000000..90912ab Binary files /dev/null and b/cornhub.png differ diff --git a/cryptostorm.png b/cryptostorm.png new file mode 100644 index 0000000..b0effca Binary files /dev/null and b/cryptostorm.png differ diff --git a/cs-logo.png b/cs-logo.png new file mode 100644 index 0000000..b8ff2af Binary files /dev/null and b/cs-logo.png differ diff --git a/docs/FUTURE_PROOF.md b/docs/FUTURE_PROOF.md new file mode 100644 index 0000000..7325798 --- /dev/null +++ b/docs/FUTURE_PROOF.md @@ -0,0 +1,54 @@ +# Future Proofing (No Generator) + +This site is intentionally hand-edited HTML. The goal here is to keep the *style* the same while making the site easier to maintain and more resilient. + +## Principles + +- Navigation and core content should work without JavaScript. +- External embeds should always have a plain-link fallback. +- URLs should be stable; if something must move, leave a redirect page. +- Translations should follow a consistent naming rule. + +## What We Added + +### 1) A real sitemap and robots.txt + +- `robots.txt` points to `sitemap.xml` +- `sitemap.xml` is the public crawl map (update when adding new sections) + +### 2) A human-friendly site map page + +- `/map/` provides a clickable index for humans +- It also links to translated versions + +### 3) Translation naming convention + +- Default English: `index.html` (or any `page.html`) +- Simplified Chinese: `index_zh.html` (or `page_zh.html`) +- Japanese: `index_jp.html` (or `page_jp.html`) + +### 4) Redirect page pattern + +If you ever rename or move a page, keep an old file that points to the new place. + +Example: create `old-path/index.html`: + +```html + + + + +Moved +

This page moved to /new-path/.

+``` + +### 5) Backups + +Recommended: + +- Put the folder in git (local is enough) +- Mirror the repo remotely (GitHub/GitLab/SourceHut) even if you don’t deploy from it + +## Optional Next Step + +Add a simple link-check script (offline) to catch broken internal links. diff --git a/docs/MANAGE.md b/docs/MANAGE.md new file mode 100644 index 0000000..e061837 --- /dev/null +++ b/docs/MANAGE.md @@ -0,0 +1,42 @@ +# Site Management (No Generator) + +This site is intentionally hand-edited HTML/CSS. + +## Shared assets + +- Global CSS: `/assets/css/site.css` +- Shared JS (menu + language + blog list): `/assets/js/site.js` + +## Optional includes (header/footer) + +If you want to stop copy/pasting the header/footer without using a static site generator: + +1) Add include placeholders: + +```html +
+... +
+``` + +2) Add this script: + +```html + +``` + +3) Header/footer live here: + +- `/partials/header.html` +- `/partials/footer.html` + +Notes: + +- This is a "no build" approach. +- It requires JavaScript to render header/footer. +- If includes fail (offline, blocked fetch), the page still loads (just without injected header/footer). + +## SEO / crawl basics + +- `robots.txt` points to `sitemap.xml`. +- Update `sitemap.xml` when you add/remove top-level pages. diff --git a/elixior.png b/elixior.png new file mode 100644 index 0000000..0b97383 Binary files /dev/null and b/elixior.png differ diff --git a/elixior.webp b/elixior.webp new file mode 100644 index 0000000..7e6c477 Binary files /dev/null and b/elixior.webp differ diff --git a/elixr.webp b/elixr.webp new file mode 100644 index 0000000..7e6c477 Binary files /dev/null and b/elixr.webp differ diff --git a/emacs.png b/emacs.png new file mode 100644 index 0000000..9ab43d7 Binary files /dev/null and b/emacs.png differ diff --git a/error/.idea/.gitignore b/error/.idea/.gitignore new file mode 100644 index 0000000..1c2fda5 --- /dev/null +++ b/error/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/error/.idea/error.iml b/error/.idea/error.iml new file mode 100644 index 0000000..18ec59d --- /dev/null +++ b/error/.idea/error.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/error/.idea/misc.xml b/error/.idea/misc.xml new file mode 100644 index 0000000..9715c22 --- /dev/null +++ b/error/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/error/.idea/modules.xml b/error/.idea/modules.xml new file mode 100644 index 0000000..4fb897f --- /dev/null +++ b/error/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/error/index.html b/error/index.html new file mode 100644 index 0000000..83fe80a --- /dev/null +++ b/error/index.html @@ -0,0 +1,138 @@ + + + + + + Error — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

Error

+

Something went wrong, but here's a way out.

+

+ + Back to home + +

+
+ +
+ + +
+
+ +
+
+ +
+
+ + diff --git a/error/index_jp.html b/error/index_jp.html new file mode 100644 index 0000000..34a0e85 --- /dev/null +++ b/error/index_jp.html @@ -0,0 +1,138 @@ + + + + + + エラー — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

エラー

+

Something went wrong, but here's a way out.

+

+ + Back to home + +

+
+ +
+ + +
+
+ +
+
+ +
+
+ + diff --git a/error/index_zh.html b/error/index_zh.html new file mode 100644 index 0000000..7625f10 --- /dev/null +++ b/error/index_zh.html @@ -0,0 +1,138 @@ + + + + + + 错误 — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

错误

+

Something went wrong, but here's a way out.

+

+ + Back to home + +

+
+ +
+ + +
+
+ +
+
+ +
+
+ + diff --git a/eso-tilin-tilin.gif b/eso-tilin-tilin.gif new file mode 100644 index 0000000..bccf139 Binary files /dev/null and b/eso-tilin-tilin.gif differ diff --git a/expressvpn.png b/expressvpn.png new file mode 100644 index 0000000..765c580 Binary files /dev/null and b/expressvpn.png differ diff --git a/fastmail.png b/fastmail.png new file mode 100644 index 0000000..a86b0f9 Binary files /dev/null and b/fastmail.png differ diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..cb6fad8 --- /dev/null +++ b/favicon.ico @@ -0,0 +1 @@ +AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA diff --git a/gaming/index.html b/gaming/index.html new file mode 100644 index 0000000..780375b --- /dev/null +++ b/gaming/index.html @@ -0,0 +1,130 @@ + + + + + + Gaming — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

Gaming

+

Pages for games and projects.

+ +
    +
  • RuneScape
  • +
  • SpecialForce / SoldierFront
  • +
  • StepMania
  • +
  • MMO Multibox
  • +
+
+
+ +
+
+ +
+
+ + diff --git a/gaming/index_jp.html b/gaming/index_jp.html new file mode 100644 index 0000000..ad06cdd --- /dev/null +++ b/gaming/index_jp.html @@ -0,0 +1,65 @@ + + + + + + ゲーム — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

ゲーム

+

Pages for games and projects.

+ +
    +
  • RuneScape
  • +
  • SpecialForce / SoldierFront
  • +
  • StepMania
  • +
  • MMO Multibox
  • +
+
+
+ +
+
+ +
+
+ + diff --git a/gaming/index_zh.html b/gaming/index_zh.html new file mode 100644 index 0000000..4c47c49 --- /dev/null +++ b/gaming/index_zh.html @@ -0,0 +1,54 @@ + + + + + + 游戏 — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

游戏

+

Pages for games and projects.

+ +
    +
  • RuneScape
  • +
  • SpecialForce / SoldierFront
  • +
  • StepMania
  • +
  • MMO Multibox
  • +
+
+
+ +
+ + diff --git a/gaming/multibox/global_styles.css b/gaming/multibox/global_styles.css new file mode 100644 index 0000000..fe453ea --- /dev/null +++ b/gaming/multibox/global_styles.css @@ -0,0 +1,53 @@ +/* styles.css */ + +body { + font-family: Arial, sans-serif; + line-height: 1.6; + margin: 0; + padding: 0; + background-color: #f4f4f4; + display: flex; + flex-direction: column; + min-height: 100vh; +} + +header { + background: #333; + color: #fff; + padding: 10px 0; + text-align: center; +} + +nav ul { + list-style: none; + padding: 0; +} + +nav ul li { + display: inline; + margin: 0 15px; +} + +nav ul li a { + color: #fff; + text-decoration: none; +} + +main { + padding: 20px; + flex: 1; +} + +h2 { + color: #333; +} + +footer { + background: #333; + color: #fff; + text-align: center; + padding: 10px 0; + position: fixed; + width: 100%; + bottom: 0; +} \ No newline at end of file diff --git a/gaming/multibox/index.html b/gaming/multibox/index.html new file mode 100644 index 0000000..96a59b2 --- /dev/null +++ b/gaming/multibox/index.html @@ -0,0 +1,103 @@ + + + + + + Multiboxing — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

Multiboxing in MMORPGs

+

Playing multiple characters at the same time.

+
+ +
+

What is Multiboxing?

+

Multiboxing is the practice of playing multiple characters at the same time in a Massively Multiplayer Online Role-Playing Game (MMORPG). This technique generally requires the use of multiple game accounts and can be achieved using different methods such as employing multiple computers, using specialized software, or even running multiple instances of the same game on a single computer.

+

Players who multibox often do so to gain advantages such as increased efficiency in resource gathering, leveling up multiple characters simultaneously, or taking on game content that would typically require a group of players.

+
+ +
+

Pros and Cons

+ +

Pros

+
    +
  • More control over your gameplay experience.
  • +
  • Ability to accomplish multi-character tasks solo.
  • +
  • Increased resource gathering and in-game efficiency.
  • +
+ +

Cons

+
    +
  • Requires significant hardware capabilities.
  • +
  • Can be costly due to multiple subscriptions.
  • +
  • Potential for breaches of game terms of service.
  • +
+
+ +
+

Getting Started

+

To begin multiboxing, you will need:

+
    +
  • Multiple game accounts.
  • +
  • A computer that can handle running multiple instances of the game.
  • +
  • Knowledge of key broadcasting software.
  • +
+
+ +
+

Tools and Software

+
    +
  • ISBoxer
  • +
  • HotkeyNet
  • +
  • AutoHotkey
  • +
+
+ +
+

Examples on YouTube

+ +

+

OSRS/RuneScape MultiBoxing

+ +

+

WOW MultiBoxing

+ +

+

TF2 Cheating "MultiBoxing"

+
+
+ +
+ + diff --git a/gaming/multibox/index_jp.html b/gaming/multibox/index_jp.html new file mode 100644 index 0000000..ceb5515 --- /dev/null +++ b/gaming/multibox/index_jp.html @@ -0,0 +1,102 @@ + + + + + + Multiboxing — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

Multiboxing in MMORPGs

+

Playing multiple characters at the same time.

+
+ +
+

What is Multiboxing?

+

Multiboxing is a term used in MMORPGs that refers to playing multiple characters simultaneously. This is usually done using multiple accounts, computers, or software.

+
+ +
+

Pros and Cons

+ +

Pros

+
    +
  • More control over your gameplay experience.
  • +
  • Ability to accomplish multi-character tasks solo.
  • +
  • Increased resource gathering and in-game efficiency.
  • +
+ +

Cons

+
    +
  • Requires significant hardware capabilities.
  • +
  • Can be costly due to multiple subscriptions.
  • +
  • Potential for breaches of game terms of service.
  • +
+
+ +
+

Getting Started

+

To begin multiboxing, you will need:

+
    +
  • Multiple game accounts.
  • +
  • A computer that can handle running multiple instances of the game.
  • +
  • Knowledge of key broadcasting software.
  • +
+
+ +
+

Tools and Software

+
    +
  • ISBoxer
  • +
  • HotkeyNet
  • +
  • AutoHotkey
  • +
+
+ +
+

Examples on YouTube

+ +

+

OSRS/RuneScape MultiBoxing

+ +

+

WOW MultiBoxing

+ +

+

TF2 Cheating "MultiBoxing"

+
+
+ +
+ + diff --git a/gaming/multibox/index_zh.html b/gaming/multibox/index_zh.html new file mode 100644 index 0000000..a61ae34 --- /dev/null +++ b/gaming/multibox/index_zh.html @@ -0,0 +1,102 @@ + + + + + + Multiboxing — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

Multiboxing in MMORPGs

+

Playing multiple characters at the same time.

+
+ +
+

What is Multiboxing?

+

Multiboxing is a term used in MMORPGs that refers to playing multiple characters simultaneously. This is usually done using multiple accounts, computers, or software.

+
+ +
+

Pros and Cons

+ +

Pros

+
    +
  • More control over your gameplay experience.
  • +
  • Ability to accomplish multi-character tasks solo.
  • +
  • Increased resource gathering and in-game efficiency.
  • +
+ +

Cons

+
    +
  • Requires significant hardware capabilities.
  • +
  • Can be costly due to multiple subscriptions.
  • +
  • Potential for breaches of game terms of service.
  • +
+
+ +
+

Getting Started

+

To begin multiboxing, you will need:

+
    +
  • Multiple game accounts.
  • +
  • A computer that can handle running multiple instances of the game.
  • +
  • Knowledge of key broadcasting software.
  • +
+
+ +
+

Tools and Software

+
    +
  • ISBoxer
  • +
  • HotkeyNet
  • +
  • AutoHotkey
  • +
+
+ +
+

Examples on YouTube

+ +

+

OSRS/RuneScape MultiBoxing

+ +

+

WOW MultiBoxing

+ +

+

TF2 Cheating "MultiBoxing"

+
+
+ +
+ + diff --git a/gaming/multibox/styles.css b/gaming/multibox/styles.css new file mode 100644 index 0000000..95dea86 --- /dev/null +++ b/gaming/multibox/styles.css @@ -0,0 +1,54 @@ +/* styles.css */ + +body { + font-family: Arial, sans-serif; + line-height: 1.6; + margin: 0; + padding: 0; + background-color: #f4f4f4; + display: flex; + flex-direction: column; + min-height: 100vh; +} + +header { + background: #333; + color: #fff; + padding: 10px 0; + text-align: center; +} + +nav ul { + list-style: none; + padding: 0; +} + +nav ul li { + display: inline; + margin: 0 15px; +} + +nav ul li a { + color: #fff; + text-decoration: none; +} + +main { + padding: 20px; + flex: 1; + padding-bottom: 60px; /* Add bottom padding to ensure space for footer */ +} + +h2 { + color: #333; +} + +footer { + background: #333; + color: #fff; + text-align: center; + padding: 10px 0; + position: fixed; + width: 100%; + bottom: 0; +} \ No newline at end of file diff --git a/gaming/multibox/what-is-multiboxing/index.html b/gaming/multibox/what-is-multiboxing/index.html new file mode 100644 index 0000000..c7ce04e --- /dev/null +++ b/gaming/multibox/what-is-multiboxing/index.html @@ -0,0 +1,79 @@ + + + + + + What Is Multiboxing? — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

What is Multiboxing?

+

A longer explanation (methods, uses, examples).

+
+ +
+

Overview

+

Multiboxing is the practice of playing multiple characters at the same time in a Massively Multiplayer Online Role-Playing Game (MMORPG). This technique generally requires the use of multiple game accounts and can be achieved using different methods such as employing multiple computers, using specialized software, or even running multiple instances of the same game on a single computer.

+

Players who multibox often do so to gain advantages such as increased efficiency in resource gathering, leveling up multiple characters simultaneously, or taking on game content that would typically require a group of players.

+
+ +
+

Methods

+
    +
  • Multiple Computers: Several physical PCs, each running one account.
  • +
  • Virtual Machines: Multiple OS instances on one machine.
  • +
  • Software Solutions: Keystroke broadcasting / window management tools (game ToS varies).
  • +
+
+ +
+

Common Uses

+
    +
  • Solo Group Content: Do group content without other players.
  • +
  • Economy Control: Resource gathering / crafting on multiple chars.
  • +
  • Power Leveling: Level alts quickly with a main.
  • +
+
+ +
+

Examples

+

Old School RuneScape (OSRS)

+ +

World of Warcraft (WoW)

+ +
+
+ +
+ + diff --git a/gaming/multibox/what-is-multiboxing/index_jp.html b/gaming/multibox/what-is-multiboxing/index_jp.html new file mode 100644 index 0000000..355c6a7 --- /dev/null +++ b/gaming/multibox/what-is-multiboxing/index_jp.html @@ -0,0 +1,79 @@ + + + + + + What Is Multiboxing? — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

What is Multiboxing?

+

A longer explanation (methods, uses, examples).

+
+ +
+

Overview

+

Multiboxing is the practice of playing multiple characters at the same time in a Massively Multiplayer Online Role-Playing Game (MMORPG). This technique generally requires the use of multiple game accounts and can be achieved using different methods such as employing multiple computers, using specialized software, or even running multiple instances of the same game on a single computer.

+

Players who multibox often do so to gain advantages such as increased efficiency in resource gathering, leveling up multiple characters simultaneously, or taking on game content that would typically require a group of players.

+
+ +
+

Methods

+
    +
  • Multiple コンピューター: Several physical PCs, each running one account.
  • +
  • Virtual Machines: Multiple OS instances on one machine.
  • +
  • Software Solutions: Keystroke broadcasting / window management tools (game ToS varies).
  • +
+
+ +
+

Common Uses

+
    +
  • Solo Group Content: Do group content without other players.
  • +
  • Economy Control: Resource gathering / crafting on multiple chars.
  • +
  • Power Leveling: Level alts quickly with a main.
  • +
+
+ +
+

Examples

+

Old School RuneScape (OSRS)

+ +

World of Warcraft (WoW)

+ +
+
+ +
+ + diff --git a/gaming/multibox/what-is-multiboxing/index_zh.html b/gaming/multibox/what-is-multiboxing/index_zh.html new file mode 100644 index 0000000..b9785e7 --- /dev/null +++ b/gaming/multibox/what-is-multiboxing/index_zh.html @@ -0,0 +1,79 @@ + + + + + + What Is Multiboxing? — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

What is Multiboxing?

+

A longer explanation (methods, uses, examples).

+
+ +
+

Overview

+

Multiboxing is the practice of playing multiple characters at the same time in a Massively Multiplayer Online Role-Playing Game (MMORPG). This technique generally requires the use of multiple game accounts and can be achieved using different methods such as employing multiple computers, using specialized software, or even running multiple instances of the same game on a single computer.

+

Players who multibox often do so to gain advantages such as increased efficiency in resource gathering, leveling up multiple characters simultaneously, or taking on game content that would typically require a group of players.

+
+ +
+

Methods

+
    +
  • Multiple 电脑设备: Several physical PCs, each running one account.
  • +
  • Virtual Machines: Multiple OS instances on one machine.
  • +
  • Software Solutions: Keystroke broadcasting / window management tools (game ToS varies).
  • +
+
+ +
+

Common Uses

+
    +
  • Solo Group Content: Do group content without other players.
  • +
  • Economy Control: Resource gathering / crafting on multiple chars.
  • +
  • Power Leveling: Level alts quickly with a main.
  • +
+
+ +
+

Examples

+

Old School RuneScape (OSRS)

+ +

World of Warcraft (WoW)

+ +
+
+ +
+ + diff --git a/gaming/multibox/what-is-multiboxing/styles.css b/gaming/multibox/what-is-multiboxing/styles.css new file mode 100644 index 0000000..95dea86 --- /dev/null +++ b/gaming/multibox/what-is-multiboxing/styles.css @@ -0,0 +1,54 @@ +/* styles.css */ + +body { + font-family: Arial, sans-serif; + line-height: 1.6; + margin: 0; + padding: 0; + background-color: #f4f4f4; + display: flex; + flex-direction: column; + min-height: 100vh; +} + +header { + background: #333; + color: #fff; + padding: 10px 0; + text-align: center; +} + +nav ul { + list-style: none; + padding: 0; +} + +nav ul li { + display: inline; + margin: 0 15px; +} + +nav ul li a { + color: #fff; + text-decoration: none; +} + +main { + padding: 20px; + flex: 1; + padding-bottom: 60px; /* Add bottom padding to ensure space for footer */ +} + +h2 { + color: #333; +} + +footer { + background: #333; + color: #fff; + text-align: center; + padding: 10px 0; + position: fixed; + width: 100%; + bottom: 0; +} \ No newline at end of file diff --git a/gaming/runescape/index.html b/gaming/runescape/index.html new file mode 100644 index 0000000..69f10df --- /dev/null +++ b/gaming/runescape/index.html @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

RuneScape (OSRS)

+

A small fan page / launch pad.

+ + Old School RuneScape Logo + +

+ Visit OSRS Wiki +

+
+ +
+

Essential Guides

+ +
+
+ +
+ + diff --git a/gaming/runescape/index_jp.html b/gaming/runescape/index_jp.html new file mode 100644 index 0000000..20971c0 --- /dev/null +++ b/gaming/runescape/index_jp.html @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + RuneScape — SillyLaird + + + + + + + + + + + +
+ +
+
+

RuneScape (OSRS)

+

A small fan page / launch pad.

+ + Old School RuneScape Logo + +

+ Visit OSRS Wiki +

+
+ +
+

Essential Guides

+ +
+
+ +
+ + diff --git a/gaming/runescape/index_zh.html b/gaming/runescape/index_zh.html new file mode 100644 index 0000000..7d2829e --- /dev/null +++ b/gaming/runescape/index_zh.html @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + RuneScape — SillyLaird + + + + + + + + + + + +
+ +
+
+

RuneScape (OSRS)

+

A small fan page / launch pad.

+ + Old School RuneScape Logo + +

+ Visit OSRS Wiki +

+
+ +
+

Essential Guides

+ +
+
+ +
+ + diff --git a/gaming/runescape/runescape.png b/gaming/runescape/runescape.png new file mode 100644 index 0000000..a083358 Binary files /dev/null and b/gaming/runescape/runescape.png differ diff --git a/gaming/specialforce/SpecialForce_Launcher.exe b/gaming/specialforce/SpecialForce_Launcher.exe new file mode 100644 index 0000000..befd61f Binary files /dev/null and b/gaming/specialforce/SpecialForce_Launcher.exe differ diff --git a/gaming/specialforce/index.html b/gaming/specialforce/index.html new file mode 100644 index 0000000..39474e8 --- /dev/null +++ b/gaming/specialforce/index.html @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + SpecialForce — SillyLaird + + + + + + + + + + + +
+ +
+
+

SoldierFront / SpecialForce

+

Small page/wiki and file drop.

+ +

+ SoldierFront / SpecialForce +

+ +

+ Wikipedia +

+
+ +
+

SpecialForce Launcher Files

+ +
+
+ +
+ + diff --git a/gaming/specialforce/index_jp.html b/gaming/specialforce/index_jp.html new file mode 100644 index 0000000..988f7a1 --- /dev/null +++ b/gaming/specialforce/index_jp.html @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + SpecialForce — SillyLaird + + + + + + + + + + + +
+ +
+
+

SoldierFront / SpecialForce

+

Small page/wiki and file drop.

+ +

+ SoldierFront / SpecialForce +

+ +

+ Wikipedia +

+
+ +
+

SpecialForce Launcher Files

+ +
+
+ +
+ + diff --git a/gaming/specialforce/index_zh.html b/gaming/specialforce/index_zh.html new file mode 100644 index 0000000..9154050 --- /dev/null +++ b/gaming/specialforce/index_zh.html @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + SpecialForce — SillyLaird + + + + + + + + + + + +
+ +
+
+

SoldierFront / SpecialForce

+

Small page/wiki and file drop.

+ +

+ SoldierFront / SpecialForce +

+ +

+ Wikipedia +

+
+ +
+

SpecialForce Launcher Files

+ +
+
+ +
+ + diff --git a/gaming/specialforce/style.css b/gaming/specialforce/style.css new file mode 100644 index 0000000..aa84069 --- /dev/null +++ b/gaming/specialforce/style.css @@ -0,0 +1,113 @@ +/* --- RESET & BASICS --------------------------------------------------- */ +*,*::before,*::after{box-sizing:border-box;} +html,body{margin:0;padding:0;font-family:system-ui,Helvetica,Arial,sans-serif;line-height:1.4;background:#ffd;} +body{text-align:left;} + +/* --- LAYOUT ----------------------------------------------------------- */ +header{padding:1rem 1.5rem;background:#ffd;display:flex;flex-direction:column;align-items:flex-start;} +main{padding:1.5rem;margin:0 1.5rem;max-width:none;} + +/* --- LINKS ------------------------------------------------------------ */ +a{text-decoration:none;border-radius:4px;padding:2px 4px;transition:background .2s,color .2s;} +a:hover{background:red;color:#000;} +a.no-hover-box:hover{background:transparent;color:red;} + +/* --- SIDEBAR ---------------------------------------------------------- */ +#mobile-sidebar { + position: fixed; + top: 0; + right: 0; + width: 250px; + max-height: 100vh; + overflow-y: auto; + background: #ffd; + transform: translateX(100%); + transition: transform .3s ease-in-out; + padding: 1rem; + box-shadow: -4px 0 8px rgba(0,0,0,.15); + z-index: 9000; + scrollbar-width: none; + -ms-overflow-style: none; +} +#mobile-sidebar.visible { transform: translateX(0); } +#mobile-sidebar::-webkit-scrollbar { display: none; } + +#menu-toggle { + position: fixed; + top: 1rem; + right: 1rem; + z-index: 9100; + padding: .5rem 1rem; + border: none; + background: #ffd; + color: black; + border-radius: 4px; + cursor: pointer; +} +#menu-toggle:hover { background: #ffd; color: red; } + +/* --- LOGO ------------------------------------------------------------- */ +.logo { + width: 100px; + display: block; + margin-bottom: 1rem; +} + +/* --- BUTTON ----------------------------------------------------------- */ +.button { + background-color: black; + color: white; + padding: 10px 20px; + text-align: center; + text-decoration: none; + display: inline-block; + font-size: 1em; + margin: 20px 0; + cursor: pointer; + border-radius: 8px; + transition: background 0.3s, transform 0.3s; +} +.button:hover { + background-color: red; + transform: translateY(-2px); +} + +/* --- FOOTER ----------------------------------------------------------- */ +.footer { + background-color: #282828; + color: #aaa; + padding: 30px 20px; + text-align: center; + font-size: 0.9em; + border-top: 2px solid #555; + margin-top: 20px; +} +.footer a { + color: #00aced; + text-decoration: none; +} +.footer a:hover { + text-decoration: underline; +} + +/* --- MEDIA QUERIES --------------------------------------------------- */ +@media (max-width: 768px) { + body { + flex-direction: column; + font-size: 14px; + } + .sidebar { + width: 100%; + min-height: auto; + box-shadow: none; + } + main { + width: 100%; + } + h1 { + font-size: 2em; + } + .button { + font-size: 0.9em; + } +} diff --git a/gaming/stepmania/index.html b/gaming/stepmania/index.html new file mode 100644 index 0000000..919f298 --- /dev/null +++ b/gaming/stepmania/index.html @@ -0,0 +1,102 @@ + + + + + + StepMania — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

StepMania

+

Clean, fast, and to the point.

+
+ +
+

Song Packs

+
    +
  • Dance Revolution Mix 2024
  • +
  • Retro Arcade Hits
  • +
  • Anime Beats Edition
  • +
+
+ +
+

High Scores

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RankPlayerSongScore
1NeoStepPARANOiA Rebirth997,450
2LainDanceMAX 300995,210
3PadWizardvanity angel992,880
+
+
+ +
+

Downloads

+

StepMania 3.9 / 3.95 / misc files

+
+ +
+

Contact

+

m@sillylaird.ca

+
+
+ +
+ + diff --git a/gaming/stepmania/index_jp.html b/gaming/stepmania/index_jp.html new file mode 100644 index 0000000..42c8d85 --- /dev/null +++ b/gaming/stepmania/index_jp.html @@ -0,0 +1,102 @@ + + + + + + StepMania — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

StepMania

+

Clean, fast, and to the point.

+
+ +
+

Song Packs

+
    +
  • Dance Revolution Mix 2024
  • +
  • Retro Arcade Hits
  • +
  • Anime Beats Edition
  • +
+
+ +
+

High Scores

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RankPlayerSongScore
1NeoStepPARANOiA Rebirth997,450
2LainDanceMAX 300995,210
3PadWizardvanity angel992,880
+
+
+ +
+

Downloads

+

StepMania 3.9 / 3.95 / misc files

+
+ +
+

連絡先

+

m@sillylaird.ca

+
+
+ +
+ + diff --git a/gaming/stepmania/index_zh.html b/gaming/stepmania/index_zh.html new file mode 100644 index 0000000..868f912 --- /dev/null +++ b/gaming/stepmania/index_zh.html @@ -0,0 +1,104 @@ + + + + + + StepMania — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

StepMania

+

Clean, fast, and to the point.

+
+ +
+

Song Packs

+
    +
  • Dance Revolution Mix 2024
  • +
  • Retro Arcade Hits
  • +
  • Anime Beats Edition
  • +
+
+ +
+

High Scores

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RankPlayerSongScore
1NeoStepPARANOiA Rebirth997,450
2LainDanceMAX 300995,210
3PadWizardvanity angel992,880
+
+
+ +
+

Downloads

+

StepMania 3.9 / 3.95 / misc files

+
+ +
+

联系

+

m@sillylaird.ca

+
+
+ +
+ + diff --git a/gaming/stepmania/script.js b/gaming/stepmania/script.js new file mode 100644 index 0000000..1deb43c --- /dev/null +++ b/gaming/stepmania/script.js @@ -0,0 +1,46 @@ +document.addEventListener('DOMContentLoaded', () => { + // Simple active link when clicking nav + const links = Array.from(document.querySelectorAll('nav a[href^="#"]')); + links.forEach(a => { + a.addEventListener('click', e => { + const id = a.getAttribute('href'); + const target = document.querySelector(id); + if (!target) return; + e.preventDefault(); + links.forEach(x => x.classList.remove('is-active')); + a.classList.add('is-active'); + target.scrollIntoView({ behavior: 'smooth', block: 'start' }); + history.replaceState(null, '', id); + }); + }); + + // Minimal demo scoreboard + const data = [ + { rank: 1, player: 'NeoStep', song: 'PARANOiA Rebirth', score: '997,450' }, + { rank: 2, player: 'LainDance', song: 'MAX 300', score: '995,210' }, + { rank: 3, player: 'PadWizard', song: 'vanity angel', score: '992,880' }, + ]; + const board = document.getElementById('score-board'); + if (board) { + const table = document.createElement('table'); + table.innerHTML = ` + + RankPlayerSongScore + + + ${data.map(r => ` + ${r.rank}${r.player}${r.song}${r.score} + `).join('')} + `; + board.replaceChildren(table); + } + + // Join button feedback + const btn = document.getElementById('join-event'); + if (btn) { + btn.addEventListener('click', () => { + btn.disabled = true; + btn.textContent = 'You’re in! Check your inbox.'; + }); + } +}); diff --git a/gaming/stepmania/style.css b/gaming/stepmania/style.css new file mode 100644 index 0000000..20bca04 --- /dev/null +++ b/gaming/stepmania/style.css @@ -0,0 +1,139 @@ +/* Base */ +*, *::before, *::after { box-sizing: border-box; } + +html, body { + margin: 0; + padding: 0; + background: #ffd; /* light yellow */ + color: #111; + font-family: system-ui, Helvetica, Arial, sans-serif; + line-height: 1.5; +} + +/* Header */ +header { + padding: 16px; + background: #fff6c7; + border-bottom: 2px solid #e6d27a; + text-align: center; +} +h1 { + margin: 0 0 8px; + font-family: "Comic Sans MS","Chalkboard SE","Comic Neue",sans-serif; + font-size: 1.6rem; +} + +/* Nav */ +nav ul { + list-style: none; + padding: 0; + margin: 0; + display: grid; + grid-auto-flow: column; + gap: 8px; + justify-content: center; +} +nav a { + display: inline-block; + padding: 6px 8px; + text-decoration: none; + color: #002; + border-radius: 4px; + transition: background .15s, color .15s; +} +nav a:hover, nav a.is-active { + background: red; + color: #000; +} + +/* Layout */ +main { + max-width: 900px; + margin: 20px auto; + padding: 0 16px; +} +section { margin: 24px 0; } +h2 { margin: 0 0 8px; } + +/* Hero image */ +.hero-image { + display: block; + max-width: 100%; + height: auto; + border-radius: 8px; + border: 2px solid #e6d27a; + background: #fffbe3; +} + +/* Lists */ +#song-list { padding-left: 18px; } + +/* Scoreboard (minimal) */ +#score-board { + margin-top: 8px; + border: 2px solid #e6d27a; + border-radius: 8px; + background: #fffbe3; + overflow: hidden; +} +#score-board table { width: 100%; border-collapse: collapse; } +#score-board th, #score-board td { padding: 8px; text-align: left; } +#score-board thead th { background: #ffe06d; } +#score-board tbody tr:nth-child(odd) { background: #fff6c7; } + +/* Button */ +button { + padding: 10px 14px; + border: 2px solid #e6d27a; + border-radius: 8px; + background: #ffd; + color: #111; + cursor: pointer; + transition: background .15s, color .15s; +} +button:hover { background: red; color: #fff; } + +/* Gallery (simple responsive) */ +.gallery { + display: flex; + flex-wrap: wrap; + gap: 10px; +} +.gallery img { + width: calc(33.333% - 7px); + min-width: 160px; + flex: 1 1 auto; + border: 2px solid #e6d27a; + border-radius: 8px; + background: #fffbe3; +} + +/* Form */ +form { + display: grid; + gap: 8px; + max-width: 600px; +} +input[type="text"], input[type="email"], textarea { + width: 100%; + padding: 10px; + border: 2px solid #e6d27a; + border-radius: 8px; + background: #fffef0; + font: inherit; + color: #111; +} +textarea { min-height: 120px; resize: vertical; } + +/* Footer */ +footer { + text-align: center; + color: #444; + margin: 32px 0 24px; +} + +/* Small screens */ +@media (max-width: 640px) { + nav ul { grid-auto-flow: row; grid-template-columns: repeat(2, minmax(0, 1fr)); } + .gallery img { width: calc(50% - 5px); } +} diff --git a/git tutorial.txt b/git tutorial.txt new file mode 100644 index 0000000..7145314 --- /dev/null +++ b/git tutorial.txt @@ -0,0 +1,108 @@ +ctx->guides->git +Simple git guide for CVS users +0x0. Set up your user name + email. +$ git config --global user.name "you" +$ git config --global user.email "you@yourserver.org" +$ git config --global push.default simple +This will create ~/.gitconfig. + +0x1. Centralized workflow - basic notions +Git avoids touching the network as much as possible. The few basic commands that require network access are as shown below. + +* git-clone(1) # clone a repo for the first time +* git-push(1) # push your branch +* git-pull(1) # fetch compressed deltas and merge into current branch +In git you can have tracked and untracked files. In git you have 3 types of changes. If you modify a tracked file you have modified the file. When you do git-add(1) you stage the file. Finally with git-commit(1) you commit your change into your local branch. + +Staging is important if you have modified one or many files and you want to select a subset of those changes to commit. This makes it easy to break down your patches and organize them as needed. Ideally each patch is useful on its own and unrelated changes are grouped in separate patches. For more information look at the -p flag for git-add(1). + +For more advanced operations you should always know what state git is in. You can query that with git-status(1). If you are in the middle of a merge and you forgot about it, git-status(1) will remind you. Use git-status(1) frequently. + +0x2. Centralized git workflow +To clone a repo: + +$ git clone you@yourserver.org:myrepo.git +To update your repo: + +$ git pull + +If you have local changes the fetch/merge will proceed as expected. +You can retain your local changes even if they are not committed. +If you have a merge conflict, resolve it by hand and use git-add(1) +and git-commit(1). The history will continue to be linear in case +of a fast-forward merge. +To look at the commit history and the contents of each patch: + +$ git log -p +To commit your changes: + +$ git commit -am 'Initial import' + +This will add all modified/deleted files and commit them locally. +New files are not added. +To add new files/directories: + +$ git add +$ git commit -m 'awesome' +To push your changes to the remote branch: + +$ git push +To push a specific branch: + +$ git push origin mybranch +To show a diff between your modified files and the HEAD commit in your branch: + +$ git diff +To show the staged changes (the changes to be committed upon git-commit(1)): + +$ git diff --cached +To unstage changes: + +$ git reset +To remove a tracked file/dir: + +$ git rm -r + +This will also stage the change. You can just git-commit(1) at this point. +To rename a tracked file/dir: + +$ git mv + +This will also stage the change. You can just git-commit(1) at this point. +To revert a modified file/dir to whatever is in HEAD: + +$ git checkout +To change the contents of your last commit: + +$ # change files +$ git add +$ git commit --amend +To generate git patch files: + +$ git format-patch -1 + +This will generate the patch file for the last commit. You +can use git format-patch - for the last *n* commits. +To apply a git patch file: + +$ git am mypatch.patch +For a simple workflow you can avoid using the staging area completely. Just use the -am option for git-commit(1) so you can stage and commit everything in one step. + +0x3. Set up a server-side bare repo for your project +To create a new repo in your home directory: + +$ cd +$ cp -r /tmp/myproject myrepo +$ cd myrepo +$ git init +Initialized empty Git repository in /home/you/myrepo/.git/ +$ git add * +$ git commit -m 'Initial import' +$ cd +$ # We do not need an unpacked repo, just a bare one +$ # no need to waste disk space +$ git clone --bare myrepo myrepo.git +$ rm -rf myrepo +Assuming your ssh-keys are in place, you can now clone myrepo.git just by doing: + +$ git clone you@yourserver.org:myrepo.git \ No newline at end of file diff --git a/git-guide.txt b/git-guide.txt new file mode 100644 index 0000000..84171ff --- /dev/null +++ b/git-guide.txt @@ -0,0 +1,111 @@ +ctx->guides->git +Simple git guide for CVS users +0x0. Set up your user name + email. +$ git config --global user.name "you" +$ git config --global user.email "you@yourserver.org" +$ git config --global push.default simple +This will create ~/.gitconfig. + +0x1. Centralized workflow - basic notions +Git avoids touching the network as much as possible. The few basic commands that require network access are as shown below. + +* git-clone(1) # clone a repo for the first time +* git-push(1) # push your branch +* git-pull(1) # fetch compressed deltas and merge into current branch +In git you can have tracked and untracked files. In git you have 3 types of changes. If you modify a tracked file you have modified the file. When you do git-add(1) you stage the file. Finally with git-commit(1) you commit your change into your local branch. + +Staging is important if you have modified one or many files and you want to select a subset of those changes to commit. This makes it easy to break down your patches and organize them as needed. Ideally each patch is useful on its own and unrelated changes are grouped in separate patches. For more information look at the -p flag for git-add(1). + +For more advanced operations you should always know what state git is in. You can query that with git-status(1). If you are in the middle of a merge and you forgot about it, git-status(1) will remind you. Use git-status(1) frequently. + +0x2. Centralized git workflow +To clone a repo: + +$ git clone you@yourserver.org:myrepo.git +To update your repo: + +$ git pull + +If you have local changes the fetch/merge will proceed as expected. +You can retain your local changes even if they are not committed. +If you have a merge conflict, resolve it by hand and use git-add(1) +and git-commit(1). The history will continue to be linear in case +of a fast-forward merge. +To look at the commit history and the contents of each patch: + +$ git log -p +To commit your changes: + +$ git commit -am 'Initial import' + +This will add all modified/deleted files and commit them locally. +New files are not added. +To add new files/directories: + +$ git add +$ git commit -m 'awesome' +To push your changes to the remote branch: + +$ git push +To push a specific branch: + +$ git push origin mybranch +To show a diff between your modified files and the HEAD commit in your branch: + +$ git diff +To show the staged changes (the changes to be committed upon git-commit(1)): + +$ git diff --cached +To unstage changes: + +$ git reset +To remove a tracked file/dir: + +$ git rm -r + +This will also stage the change. You can just git-commit(1) at this point. +To rename a tracked file/dir: + +$ git mv + +This will also stage the change. You can just git-commit(1) at this point. +To revert a modified file/dir to whatever is in HEAD: + +$ git checkout +To change the contents of your last commit: + +$ # change files +$ git add +$ git commit --amend +To generate git patch files: + +$ git format-patch -1 + +This will generate the patch file for the last commit. You +can use git format-patch - for the last *n* commits. +To apply a git patch file: + +$ git am mypatch.patch +For a simple workflow you can avoid using the staging area completely. Just use the -am option for git-commit(1) so you can stage and commit everything in one step. + +0x3. Set up a server-side bare repo for your project +To create a new repo in your home directory: + +$ cd +$ cp -r /tmp/myproject myrepo +$ cd myrepo +$ git init +Initialized empty Git repository in /home/you/myrepo/.git/ +$ git add * +$ git commit -m 'Initial import' +$ cd +$ # We do not need an unpacked repo, just a bare one +$ # no need to waste disk space +$ git clone --bare myrepo myrepo.git +$ rm -rf myrepo +Assuming your ssh-keys are in place, you can now clone myrepo.git just by doing: + +$ git clone you@yourserver.org:myrepo.git +bye! + +sin@ diff --git a/guestbook-comments.html b/guestbook-comments.html new file mode 100644 index 0000000..ab547a6 --- /dev/null +++ b/guestbook-comments.html @@ -0,0 +1,16 @@ + + + + + + Guestbook Comments + + + +
+

Guestbook Comments

+

Comments are hosted on the guestbook subdomain.

+

Open live guestbook comments

+
+ + diff --git a/guestbook-form.html b/guestbook-form.html new file mode 100644 index 0000000..d9695be --- /dev/null +++ b/guestbook-form.html @@ -0,0 +1,46 @@ + + + + +Guestbook Form + + + + + + + + + + + + + + + + + + +
+ + + + +
+ CAPTCHA + + +
+ + +
+ + + diff --git a/guestbook.html b/guestbook.html new file mode 100644 index 0000000..5c29ec2 --- /dev/null +++ b/guestbook.html @@ -0,0 +1,78 @@ + + + + + + Guestbook — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

Guestbook

+

Sign the guestbook below! Comments are shared across all visitors.

+ +
+
+

+ +

+ +
+ +
+

+ +

+ +
+
+
+
+ +
+ + + diff --git a/guestbook.html~ b/guestbook.html~ new file mode 100644 index 0000000..99fd6f4 --- /dev/null +++ b/guestbook.html~ @@ -0,0 +1,65 @@ + + + + + + Guestbook with CAPTCHA + + + +

Guestbook

+
+ + + +
+ CAPTCHA + +
+ + + +
+
+ + + + diff --git a/guestbook.js b/guestbook.js new file mode 100644 index 0000000..e13a614 --- /dev/null +++ b/guestbook.js @@ -0,0 +1,127 @@ +document.addEventListener("DOMContentLoaded", function() { + const form = document.getElementById('guestbook-form'); + const entriesContainer = document.getElementById('guestbook-entries'); + const captchaCanvas = document.getElementById('captcha-canvas'); + const refreshCaptchaButton = document.getElementById('refresh-captcha'); + const captchaInput = document.getElementById('captcha-input'); + const imageInput = document.getElementById('image'); + const GUESTBOOK_KEY = 'guestbookEntries'; + + let currentCaptcha = ''; + + // Function to generate a random CAPTCHA string + function generateCaptcha() { + const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + let captcha = ''; + for (let i = 0; i < 6; i++) { + captcha += chars.charAt(Math.floor(Math.random() * chars.length)); + } + return captcha; + } + + // Function to draw CAPTCHA on canvas + function drawCaptcha(captcha) { + const ctx = captchaCanvas.getContext('2d'); + ctx.clearRect(0, 0, captchaCanvas.width, captchaCanvas.height); + ctx.font = '20px Arial'; + ctx.fillStyle = '#000'; + ctx.fillText(captcha, 10, 30); + } + + // Function to refresh the CAPTCHA image + function refreshCaptcha() { + currentCaptcha = generateCaptcha(); + drawCaptcha(currentCaptcha); + } + + // Load and display existing entries + function loadEntries() { + const entries = JSON.parse(localStorage.getItem(GUESTBOOK_KEY)) || []; + entriesContainer.innerHTML = ''; + + entries.reverse().forEach((entry) => { + const entryElement = document.createElement('div'); + entryElement.className = 'entry'; + + const nameElement = document.createElement('h4'); + if (entry.name === 'Anonymous') { + nameElement.className = 'anonymous'; + } + nameElement.textContent = entry.name; + entryElement.appendChild(nameElement); + + const messageElement = document.createElement('p'); + messageElement.innerHTML = formatMessage(entry.message); + entryElement.appendChild(messageElement); + + if (entry.image) { + const imageElement = document.createElement('img'); + imageElement.src = entry.image; + entryElement.appendChild(imageElement); + } + + entriesContainer.appendChild(entryElement); + }); + } + + // Format message: add green text for lines starting with '>' + function formatMessage(message) { + return message.split('\n').map(line => { + if (line.startsWith('>')) { + return `${line}`; + } + return line; + }).join('
'); + } + + // Handle form submission + form.addEventListener('submit', function(event) { + event.preventDefault(); + + // Set default name to "Anonymous" if the name field is empty + let name = document.getElementById('name').value.trim(); + if (!name) { + name = 'Anonymous'; + } + + const message = document.getElementById('message').value.trim(); + const captchaValue = captchaInput.value.trim(); + const imageFile = imageInput.files[0]; + + if (name && message && captchaValue === currentCaptcha) { + const entries = JSON.parse(localStorage.getItem(GUESTBOOK_KEY)) || []; + + if (imageFile) { + const reader = new FileReader(); + reader.onload = function() { + const image = reader.result; + entries.unshift({ name, message, image }); + localStorage.setItem(GUESTBOOK_KEY, JSON.stringify(entries)); + + form.reset(); // Clear the form fields + document.getElementById('name').value = 'Anonymous'; // Reset the name field to "Anonymous" + loadEntries(); // Refresh the entries display + refreshCaptcha(); // Generate a new CAPTCHA after successful submission + }; + reader.readAsDataURL(imageFile); + } else { + entries.unshift({ name, message, image: null }); + localStorage.setItem(GUESTBOOK_KEY, JSON.stringify(entries)); + + form.reset(); // Clear the form fields + document.getElementById('name').value = 'Anonymous'; // Reset the name field to "Anonymous" + loadEntries(); // Refresh the entries display + refreshCaptcha(); // Generate a new CAPTCHA after successful submission + } + } else { + alert('CAPTCHA is incorrect. Please try again.'); + } + }); + + // Refresh CAPTCHA on page load and on refresh button click + refreshCaptcha(); + refreshCaptchaButton.addEventListener('click', refreshCaptcha); + + // Initial load + loadEntries(); +}); \ No newline at end of file diff --git a/guestbook_jp.html b/guestbook_jp.html new file mode 100644 index 0000000..27a67df --- /dev/null +++ b/guestbook_jp.html @@ -0,0 +1,80 @@ + + + + + + ゲストブック (Local) — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

ゲストブック (Local)

+

This page stores entries in your browser (localStorage). It is not shared between visitors.

+ +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +
+ +
+ + +
+
+ +
+
+
+ +
+ + + + + diff --git a/guestbook_zh.html b/guestbook_zh.html new file mode 100644 index 0000000..356fc9b --- /dev/null +++ b/guestbook_zh.html @@ -0,0 +1,80 @@ + + + + + + 留言板 (Local) — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

留言板 (Local)

+

This page stores entries in your browser (localStorage). It is not shared between visitors.

+ +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +
+ +
+ + +
+
+ +
+
+
+ +
+ + + + + diff --git a/hatCollectionWebsite.html b/hatCollectionWebsite.html new file mode 100644 index 0000000..b046a0c --- /dev/null +++ b/hatCollectionWebsite.html @@ -0,0 +1,56 @@ + + + + + + Hat Collection Website — Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

Hat Collection Website

+

Notes / layout sketch.

+ +
+hat-collection-website/
+├── index.html
+├── styles/
+│   └── styles.css
+└── scripts/
+    └── main.js
+      
+
+
+ +
+ + diff --git a/hatCollectionWebsite_jp.html b/hatCollectionWebsite_jp.html new file mode 100644 index 0000000..9d24520 --- /dev/null +++ b/hatCollectionWebsite_jp.html @@ -0,0 +1,56 @@ + + + + + + Hat Collection Website — Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

Hat Collection Website

+

Notes / layout sketch.

+ +
+hat-collection-website/
+├── index.html
+├── styles/
+│   └── styles.css
+└── scripts/
+    └── main.js
+      
+
+
+ +
+ + diff --git a/hatCollectionWebsite_zh.html b/hatCollectionWebsite_zh.html new file mode 100644 index 0000000..00dac07 --- /dev/null +++ b/hatCollectionWebsite_zh.html @@ -0,0 +1,56 @@ + + + + + + Hat Collection Web网站 — Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

Hat Collection Web网站

+

Notes / layout sketch.

+ +
+hat-collection-website/
+├── index.html
+├── styles/
+│   └── styles.css
+└── scripts/
+    └── main.js
+      
+
+
+ +
+ + diff --git a/hitcounter.html b/hitcounter.html new file mode 100644 index 0000000..441c3eb --- /dev/null +++ b/hitcounter.html @@ -0,0 +1,57 @@ + + + + + + Visitor Counter (Local) — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

Visitor Counter (Local)

+

Counts unique visits per browser using localStorage + sessionStorage.

+ +
+
You are visitor number:
+
0
+
+
+
+ +
+ + + + + diff --git a/hitcounter_jp.html b/hitcounter_jp.html new file mode 100644 index 0000000..cfab66c --- /dev/null +++ b/hitcounter_jp.html @@ -0,0 +1,57 @@ + + + + + + Visitor Counter (Local) — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

Visitor Counter (Local)

+

Counts unique visits per browser using localStorage/sessionStorage.

+ +
+
You are visitor number:
+
0
+
+
+
+ +
+ + + + + diff --git a/hitcounter_zh.html b/hitcounter_zh.html new file mode 100644 index 0000000..c68213e --- /dev/null +++ b/hitcounter_zh.html @@ -0,0 +1,57 @@ + + + + + + Visitor Counter (Local) — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

Visitor Counter (Local)

+

Counts unique visits per browser using localStorage + sessionStorage.

+ +
+
You are visitor number:
+
0
+
+
+
+ +
+ + + + + diff --git a/icon03.jpg b/icon03.jpg new file mode 100644 index 0000000..7e1e6d5 Binary files /dev/null and b/icon03.jpg differ diff --git a/images/711chan.gif b/images/711chan.gif new file mode 100644 index 0000000..ec48985 Binary files /dev/null and b/images/711chan.gif differ diff --git a/images/anybrowser3.gif b/images/anybrowser3.gif new file mode 100644 index 0000000..d58558d Binary files /dev/null and b/images/anybrowser3.gif differ diff --git a/images/buyvm.png b/images/buyvm.png new file mode 100644 index 0000000..e20f177 Binary files /dev/null and b/images/buyvm.png differ diff --git a/images/desuroom-revival.png b/images/desuroom-revival.png new file mode 100644 index 0000000..c1dc115 Binary files /dev/null and b/images/desuroom-revival.png differ diff --git a/images/free-speech-forever.gif b/images/free-speech-forever.gif new file mode 100644 index 0000000..f1fa905 Binary files /dev/null and b/images/free-speech-forever.gif differ diff --git a/images/get-flash-player.gif b/images/get-flash-player.gif new file mode 100644 index 0000000..81cd566 Binary files /dev/null and b/images/get-flash-player.gif differ diff --git a/images/heyuri.gif b/images/heyuri.gif new file mode 100644 index 0000000..80c3c3a Binary files /dev/null and b/images/heyuri.gif differ diff --git a/images/imageboard/1674509441745.jpg b/images/imageboard/1674509441745.jpg new file mode 100644 index 0000000..7f027e5 Binary files /dev/null and b/images/imageboard/1674509441745.jpg differ diff --git a/images/imageboard/squarebutts.gif b/images/imageboard/squarebutts.gif new file mode 100644 index 0000000..b9b5704 Binary files /dev/null and b/images/imageboard/squarebutts.gif differ diff --git a/images/made-with-windows.gif b/images/made-with-windows.gif new file mode 100644 index 0000000..aef46dd Binary files /dev/null and b/images/made-with-windows.gif differ diff --git a/images/msie.gif b/images/msie.gif new file mode 100644 index 0000000..81df944 Binary files /dev/null and b/images/msie.gif differ diff --git a/images/openbsd.png b/images/openbsd.png new file mode 100644 index 0000000..9fab4eb Binary files /dev/null and b/images/openbsd.png differ diff --git a/images/plan9/9logo.jpg b/images/plan9/9logo.jpg new file mode 100644 index 0000000..6e1bf4b Binary files /dev/null and b/images/plan9/9logo.jpg differ diff --git a/images/powered-by-kolyma.png b/images/powered-by-kolyma.png new file mode 100644 index 0000000..eea3c79 Binary files /dev/null and b/images/powered-by-kolyma.png differ diff --git a/images/valid-html401.png b/images/valid-html401.png new file mode 100644 index 0000000..c010842 Binary files /dev/null and b/images/valid-html401.png differ diff --git a/images/wtfpl.png b/images/wtfpl.png new file mode 100644 index 0000000..d039d0b Binary files /dev/null and b/images/wtfpl.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..39768e3 --- /dev/null +++ b/index.html @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + SillyLaird's Personal Homepage — Laird Lonergan + + + + + + + + + + + + + + + + + + + +
+ +
+
+

Welcome

+

+ This is my personal homepage. It's meant to feel like a simple link hub with personality — not a corporate site. +

+
+ +
+

Contact

+
+ +
+ +
+ "The Internet Is Serious Business" — + lolwut.info +
+ +
+ +
+
+ +
+

My Current Vibe

+

A throwback to the golden age of internet content.

+

+ + https://summer2.ytmnd.com/ + +

+
+ +
+

Music

+

Last.fm: SillyLaird

+ + Recent tracks from Last.fm +
+ +
+

Current Blog

+ +

Visit the full archive →

+
Loading…
+ +
+ +
+

Changelog

+

Visit the full changelog →

+
Loading…
+ +
+ +
+

Friends

+ +
+ +
+

Guestbook

+

+ Open full guestbook
+ +

+ +
+ + +
+

+ +

+ +
+
+
+ +
+

Games

+
    +
  • RuneScape
  • +
  • SpecialForce / SoldierFront
  • +
  • StepMania
  • +
  • MMO Multibox
  • +
+
+ +
+

Countries

+
    +
  • Canada
  • +
  • SeaLand
  • +
  • Russia
  • +
  • China
  • +
  • North Korea
  • +
+
+ +
+

Sponsors / VPNs / Buttons

+
    +
  • BuyVM
  • +
  • EDramatica
  • +
  • ToeSU pedals
  • +
  • Mullvad VPN
  • +
  • CryptoStorm VPN
  • +
  • NordVPN
  • +
  • Tunnels VPN
  • +
+
+
+ +
+ + diff --git a/index_jp.html b/index_jp.html new file mode 100644 index 0000000..fe57de8 --- /dev/null +++ b/index_jp.html @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + SillyLaird — Laird Lonergan + + + + + + + + + + + + + + + + + + + +
+ +
+
+

ようこそ

+

+ This is my personal homepage. It's meant to feel like a simple link hub with personality — not a corporate site. +

+
+ +
+

連絡先

+
+ +
+ +
+ "The Internet Is Serious Business" — + lolwut.info +
+ +
+ +
+
+ +
+

今の雰囲気

+
+ +
+
+ +
+

音楽

+

Last.fm: SillyLaird

+ Recent tracks from Last.fm +
+ +
+

現在のブログ

+
読み込み中…
+ +
+ +
+

更新履歴

+

Visit the full changelog →

+
読み込み中…
+ +
+ +
+

友達

+ +
+ +
+

ゲストブック

+

ゲストブックを開く

+ +
+ +
+

ゲーム

+
    +
  • RuneScape
  • +
  • SpecialForce / SoldierFront
  • +
  • StepMania
  • +
  • MMO Multibox
  • +
+
+ +
+

+
    +
  • Canada
  • +
  • Russia
  • +
  • China
  • +
  • North Korea
  • +
+
+ +
+

スポンサー / VPN / ボタン

+
    +
  • BuyVM
  • +
  • EDramatica
  • +
  • ToeSU pedals
  • +
  • Mullvad VPN
  • +
  • CryptoStorm VPN
  • +
  • NordVPN
  • +
  • Tunnels VPN
  • +
+
+
+ +
+ + diff --git a/index_zh.html b/index_zh.html new file mode 100644 index 0000000..d706973 --- /dev/null +++ b/index_zh.html @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + SillyLaird — Laird Lonergan + + + + + + + + + + + + + + + + + + +
+ +
+
+

欢迎

+

+ This is my personal homepage. It's meant to feel like a simple link hub with personality — not a corporate 网站. +

+
+ +
+

联系

+
+ +
+ +
+ "The Internet Is Serious Business" — + lolwut.info +
+ +
+ +
+
+ +
+

当前氛围

+
+ +
+
+ +
+

音乐

+

Last.fm: SillyLaird

+ Recent tracks from Last.fm +
+ +
+

当前博客

+
加载中…
+ +
+ +
+

更新日志

+

Visit the full changelog →

+
加载中…
+ +
+ +
+

朋友们

+ +
+ +
+

留言板

+

打开留言板

+ +
+ +
+

游戏

+
    +
  • RuneScape
  • +
  • SpecialForce / SoldierFront
  • +
  • StepMania
  • +
  • MMO Multibox
  • +
+
+ +
+

国家

+
    +
  • Canada
  • +
  • Russia
  • +
  • China
  • +
  • North Korea
  • +
+
+ +
+

赞助商 / VPN / 按钮

+
    +
  • BuyVM
  • +
  • EDramatica
  • +
  • ToeSU pedals
  • +
  • Mullvad VPN
  • +
  • CryptoStorm VPN
  • +
  • NordVPN
  • +
  • Tunnels VPN
  • +
+
+
+ +
+ + diff --git a/javascript.gif b/javascript.gif new file mode 100644 index 0000000..7937f54 Binary files /dev/null and b/javascript.gif differ diff --git a/jetbrain.png b/jetbrain.png new file mode 100644 index 0000000..c308d44 Binary files /dev/null and b/jetbrain.png differ diff --git a/journal/index.html b/journal/index.html new file mode 100644 index 0000000..dfac116 --- /dev/null +++ b/journal/index.html @@ -0,0 +1,89 @@ + + + + + + Journal — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

Journal

+

Short entries, copied verbatim.

+ +

hello and welcome to the new year of this journal this is my first journal entry of this year. not sure what i'm going to talk about this year yet but we will see.

+ +

was my birthday on the 29th and we are moving again which is always annoying cause we end up selling stuff then have to re configure everything in the house. im staying at grandparents because i deslocated my right knee but poped it back in because i got on the bed for the amublance and it got poped in again it hurts when i have to do anything with it and i cant bend down to pick up stuff etc. i hope i get better i did find out from emergency doctor xray that my legs were never in the right spot and then my syndrome clinic confirmed this after 29 years? anyway i hope it gets better hopefully i can continune on my jerney for drumming and playing rhythm games etc.i want to get better trimmed down so i can play fastball/baseball and be a pitcher in a adult league maybe ill try out for a winter league if i can.

+ +

going to write more stuff on sdf then my personal site but that might change who knows.

+

new journal for this month? let see what i end up writing.

+

woke up today decided to do some journaling not sure what i will write about today.

+

got some upgrades and new computers. can't wait to see what i'll update with next batch of money. also got a gitadora song pack

+

some rambling for today. not sure what im trying to talk about but im sure it'll be interesting!

+

need to edit babi terminal editor theme. dont like the default one

+

local hockey team lost the the playoff. felt incredibly biased in the calling.

+

ice hockey play off for my team so been watching that a lot. switched to editor babi and so on had to make a changelog for my site which made me feel iffy on the update of it. but overall i feel happy about everything.

+

sorry haven't rambled for a bit. been watching older anime again and not going outside much. my hikkimori/neet ways i guess. going to update the site and gameserver site/maps and so on. I mainly host c:ss bhop and surfing server privately...

+

welcome to some ramblings today. not sure what im going to write about other then drum games im interested in.

+

welcome to today ramblings. dont know what i am going to put on here yet.... but time will tell.

+

found out that old osu is fun again then current. and found out that ar infinite is also fun.

+

more journal writing. added a "template" for this.

+

still alive! just some more thoughts throughout the days. i wonder when im going to be statisifed with my rhythm game and tech? it doesnt seem any time soon sadly :( hopefully at some point i will be. deciding to do level design in a top down 2d zelda inspired mmo.

+

feel like writing more stuff. will finally be able to talk to more people again. which will be fun i dont normally get to talk to a lot of people even online without them seeing me as weird. i guess because im on a chinese web ring and so therefor im seen as different. i dont know why that would be a big deal but that what i keep going back to.

+

welcome to my first journal of the year. i hope all is well with the people i know.

+ +

welcome to more rambling in a blog style. i get accused of random things because im not one with the hurd.

+

Decided to update the git repo on git.termer.net it very nice so far and the workflow has been good to me.

+

someone pissed me off from twitch. this is just more reasons why i tend to not like the streaming culture. just not a lot of people who make sense and want to get into your face about their opinions on tech and so on. this tends to bother me after awhile but im sure i will forget it. i just dont tend to have it stored in my brain memory. oh well another day browsing social media i guess. *shrug*

+

thinking of making more journals going to upload them more of a bulk then just one at a time. so you'll see these all at the same time if you have javascript disabled in your browser. I have the adblocker warning because i feel in this day and age it needed. but it not needed to turn off in order to view this page only the javascript part. playing runescape and hearthstone is always fun. not when hearthstone glitches out though when it trying to load battlegrounds

+

The hockey game i went to yesterday was frustrating to watch because the kids were not in their seat being respectful.

+

cat had to be put under today. mom can show emotions but I can't. I feel like today is a lot calm now where I dont have to worry about my cat going after wires and stuff. But now it feels empty without her here.

+

had a fun baseball game at the birthday. cant wait to go there again though it a roughly 3 hour drive.

+

someone called me a "bitter asshole" on irc. i dont really care anymore what your opinion is of me. as long as we can talk like humans and not get offended over silly shit. this new wave of generation seems to get upset over stupid shit. been enjoying the chinese culture and baseball recently not just mlb but also Japan and elsewhere.

+

just thinking of stuff to add to the site. while it be changelog or more content to add or maybe a article to write finally. I feel happy that i have my own guestbook now and i have a sw@ (suspicious world) we will see how it goes.

+

some more journal rambulings. i plan to play more pop' n music lively and iidx dp. im going to forget about the whole play for like a few days. I mod for a platform now called vidlii and the content you see on there you can't really talk to anybody about because of how bad it is. But I enjoy modding for a "free speech" alternative to youtube or better youtube platform then what it is today.

+

Got my new headphones dt 770 the limited black edition. they are very good so far but obviously pricy unless your into audio.

+

This is another journal that i feel like updating. Im not sure what I want or want to keep. in terms of computer hardware etc.

+

Hello. I feel a lot better now due to getting over a cold. and not really caring much about people emotions too much. I also moderate for vidlii now which is interesting.

+

so i feel better today after getting my sick over with. makes me feel a lot better and better rested.

+

So i was rejected by a service merely for having a email with "memeware" and a link to "711chan" apparently that is wrong even thouhg they where offering alternative privacy front ends. kind of ironic eh?

+

Some more ramblings. im deciding to switch from twitch to kick. seems like a better platform. might change this journal code from disallowing javascript to allowing it. not sure

+

welcome to more private ramblings. i save it in case the power goes out and so you might get a incomplete version before you see it.s

+

Decided to watch some Pop'n Music Lively streams. Im really big into older streams and rhythm games. Playing some "tiktok" chinese mahjong. Also doing my regular hearthstone and runescape game so i feel im doing a lot. just going to update this journal as the day progress

+
+
+ +
+ + diff --git a/journal/index.html.lock~ b/journal/index.html.lock~ new file mode 100644 index 0000000..35da86a --- /dev/null +++ b/journal/index.html.lock~ @@ -0,0 +1 @@ +sillylai@DESKTOP-A0H957F \ No newline at end of file diff --git a/journal/index_jp.html b/journal/index_jp.html new file mode 100644 index 0000000..7903311 --- /dev/null +++ b/journal/index_jp.html @@ -0,0 +1,89 @@ + + + + + + ジャーナル — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

ジャーナル

+

Short entries, copied verbatim.

+ +

hello and welcome to the new year of this journal this is my first journal entry of this year. not sure what i'm going to talk about this year yet but we will see.

+ +

was my birthday on the 29th and we are moving again which is always annoying cause we end up selling stuff then have to re configure everything in the house. im staying at grandparents because i deslocated my right knee but poped it back in because i got on the bed for the amublance and it got poped in again it hurts when i have to do anything with it and i cant bend down to pick up stuff etc. i hope i get better i did find out from emergency doctor xray that my legs were never in the right spot and then my syndrome clinic confirmed this after 29 years? anyway i hope it gets better hopefully i can continune on my jerney for drumming and playing rhythm games etc.i want to get better trimmed down so i can play fastball/baseball and be a pitcher in a adult league maybe ill try out for a winter league if i can.

+ +

going to write more stuff on sdf then my personal site but that might change who knows.

+

new journal for this month? let see what i end up writing.

+

woke up today decided to do some journaling not sure what i will write about today.

+

got some upgrades and new computers. can't wait to see what i'll update with next batch of money. also got a gitadora song pack

+

some rambling for today. not sure what im trying to talk about but im sure it'll be interesting!

+

need to edit babi terminal editor theme. dont like the default one

+

local hockey team lost the the playoff. felt incredibly biased in the calling.

+

ice hockey play off for my team so been watching that a lot. switched to editor babi and so on had to make a changelog for my site which made me feel iffy on the update of it. but overall i feel happy about everything.

+

sorry haven't rambled for a bit. been watching older anime again and not going outside much. my hikkimori/neet ways i guess. going to update the site and gameserver site/maps and so on. I mainly host c:ss bhop and surfing server privately...

+

welcome to some ramblings today. not sure what im going to write about other then drum games im interested in.

+

welcome to today ramblings. dont know what i am going to put on here yet.... but time will tell.

+

found out that old osu is fun again then current. and found out that ar infinite is also fun.

+

more journal writing. added a "template" for this.

+

still alive! just some more thoughts throughout the days. i wonder when im going to be statisifed with my rhythm game and tech? it doesnt seem any time soon sadly :( hopefully at some point i will be. deciding to do level design in a top down 2d zelda inspired mmo.

+

feel like writing more stuff. will finally be able to talk to more people again. which will be fun i dont normally get to talk to a lot of people even online without them seeing me as weird. i guess because im on a chinese web ring and so therefor im seen as different. i dont know why that would be a big deal but that what i keep going back to.

+

welcome to my first journal of the year. i hope all is well with the people i know.

+ +

welcome to more rambling in a blog style. i get accused of random things because im not one with the hurd.

+

Decided to update the git repo on git.termer.net it very nice so far and the workflow has been good to me.

+

someone pissed me off from twitch. this is just more reasons why i tend to not like the streaming culture. just not a lot of people who make sense and want to get into your face about their opinions on tech and so on. this tends to bother me after awhile but im sure i will forget it. i just dont tend to have it stored in my brain memory. oh well another day browsing social media i guess. *shrug*

+

thinking of making more journals going to upload them more of a bulk then just one at a time. so you'll see these all at the same time if you have javascript disabled in your browser. I have the adblocker warning because i feel in this day and age it needed. but it not needed to turn off in order to view this page only the javascript part. playing runescape and hearthstone is always fun. not when hearthstone glitches out though when it trying to load battlegrounds

+

The hockey game i went to yesterday was frustrating to watch because the kids were not in their seat being respectful.

+

cat had to be put under today. mom can show emotions but I can't. I feel like today is a lot calm now where I dont have to worry about my cat going after wires and stuff. But now it feels empty without her here.

+

had a fun baseball game at the birthday. cant wait to go there again though it a roughly 3 hour drive.

+

someone called me a "bitter asshole" on irc. i dont really care anymore what your opinion is of me. as long as we can talk like humans and not get offended over silly shit. this new wave of generation seems to get upset over stupid shit. been enjoying the chinese culture and baseball recently not just mlb but also Japan and elsewhere.

+

just thinking of stuff to add to the site. while it be changelog or more content to add or maybe a article to write finally. I feel happy that i have my own guestbook now and i have a sw@ (suspicious world) we will see how it goes.

+

some more journal rambulings. i plan to play more pop' n music lively and iidx dp. im going to forget about the whole play for like a few days. I mod for a platform now called vidlii and the content you see on there you can't really talk to anybody about because of how bad it is. But I enjoy modding for a "free speech" alternative to youtube or better youtube platform then what it is today.

+

Got my new headphones dt 770 the limited black edition. they are very good so far but obviously pricy unless your into audio.

+

This is another journal that i feel like updating. Im not sure what I want or want to keep. in terms of computer hardware etc.

+

Hello. I feel a lot better now due to getting over a cold. and not really caring much about people emotions too much. I also moderate for vidlii now which is interesting.

+

so i feel better today after getting my sick over with. makes me feel a lot better and better rested.

+

So i was rejected by a service merely for having a email with "memeware" and a link to "711chan" apparently that is wrong even thouhg they where offering alternative privacy front ends. kind of ironic eh?

+

Some more ramblings. im deciding to switch from twitch to kick. seems like a better platform. might change this journal code from disallowing javascript to allowing it. not sure

+

welcome to more private ramblings. i save it in case the power goes out and so you might get a incomplete version before you see it.s

+

Decided to watch some Pop'n 音楽 Lively streams. Im really big into older streams and rhythm games. Playing some "tiktok" chinese mahjong. Also doing my regular hearthstone and runescape game so i feel im doing a lot. just going to update this journal as the day progress

+
+
+ +
+ + diff --git a/journal/index_zh.html b/journal/index_zh.html new file mode 100644 index 0000000..d937e7e --- /dev/null +++ b/journal/index_zh.html @@ -0,0 +1,89 @@ + + + + + + 日志 — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

日志

+

Short entries, copied verbatim.

+ +

hello and welcome to the new year of this journal this is my first journal entry of this year. not sure what i'm going to talk about this year yet but we will see.

+ +

was my birthday on the 29th and we are moving again which is always annoying cause we end up selling stuff then have to re configure everything in the house. im staying at grandparents because i deslocated my right knee but poped it back in because i got on the bed for the amublance and it got poped in again it hurts when i have to do anything with it and i cant bend down to pick up stuff etc. i hope i get better i did find out from emergency doctor xray that my legs were never in the right spot and then my syndrome clinic confirmed this after 29 years? anyway i hope it gets better hopefully i can continune on my jerney for drumming and playing rhythm games etc.i want to get better trimmed down so i can play fastball/baseball and be a pitcher in a adult league maybe ill try out for a winter league if i can.

+ +

going to write more stuff on sdf then my personal 网站 but that might change who knows.

+

new journal for this month? let see what i end up writing.

+

woke up today decided to do some journaling not sure what i will write about today.

+

got some upgrades and new computers. can't wait to see what i'll update with next batch of money. also got a gitadora song pack

+

some rambling for today. not sure what im trying to talk about but im sure it'll be interesting!

+

need to edit babi terminal editor theme. dont like the default one

+

local hockey team lost the the playoff. felt incredibly biased in the calling.

+

ice hockey play off for my team so been watching that a lot. switched to editor babi and so on had to make a changelog for my 网站 which made me feel iffy on the update of it. but overall i feel happy about everything.

+

sorry haven't rambled for a bit. been watching older anime again and not going outside much. my hikkimori/neet ways i guess. going to update the 网站 and gameserver 网站/maps and so on. I mainly host c:ss bhop and surfing server privately...

+

welcome to some ramblings today. not sure what im going to write about other then drum games im interested in.

+

welcome to today ramblings. dont know what i am going to put on here yet.... but time will tell.

+

found out that old osu is fun again then current. and found out that ar infinite is also fun.

+

more journal writing. added a "template" for this.

+

still alive! just some more thoughts throughout the days. i wonder when im going to be statisifed with my rhythm game and tech? it doesnt seem any time soon sadly :( hopefully at some point i will be. deciding to do level design in a top down 2d zelda inspired mmo.

+

feel like writing more stuff. will finally be able to talk to more people again. which will be fun i dont normally get to talk to a lot of people even online without them seeing me as weird. i guess because im on a chinese web ring and so therefor im seen as different. i dont know why that would be a big deal but that what i keep going back to.

+

welcome to my first journal of the year. i hope all is well with the people i know.

+ +

welcome to more rambling in a blog style. i get accused of random things because im not one with the hurd.

+

Decided to update the git repo on git.termer.net it very nice so far and the workflow has been good to me.

+

someone pissed me off from twitch. this is just more reasons why i tend to not like the streaming culture. just not a lot of people who make sense and want to get into your face about their opinions on tech and so on. this tends to bother me after awhile but im sure i will forget it. i just dont tend to have it stored in my brain memory. oh well another day browsing social media i guess. *shrug*

+

thinking of making more journals going to upload them more of a bulk then just one at a time. so you'll see these all at the same time if you have javascript disabled in your browser. I have the adblocker warning because i feel in this day and age it needed. but it not needed to turn off in order to view this page only the javascript part. playing runescape and hearthstone is always fun. not when hearthstone glitches out though when it trying to load battlegrounds

+

The hockey game i went to yesterday was frustrating to watch because the kids were not in their seat being respectful.

+

cat had to be put under today. mom can show emotions but I can't. I feel like today is a lot calm now where I dont have to worry about my cat going after wires and stuff. But now it feels empty without her here.

+

had a fun baseball game at the birthday. cant wait to go there again though it a roughly 3 hour drive.

+

someone called me a "bitter asshole" on irc. i dont really care anymore what your opinion is of me. as long as we can talk like humans and not get offended over silly shit. this new wave of generation seems to get upset over stupid shit. been enjoying the chinese culture and baseball recently not just mlb but also Japan and elsewhere.

+

just thinking of stuff to add to the 网站. while it be changelog or more content to add or maybe a article to write finally. I feel happy that i have my own guestbook now and i have a sw@ (suspicious world) we will see how it goes.

+

some more journal rambulings. i plan to play more pop' n music lively and iidx dp. im going to forget about the whole play for like a few days. I mod for a platform now called vidlii and the content you see on there you can't really talk to anybody about because of how bad it is. But I enjoy modding for a "free speech" alternative to youtube or better youtube platform then what it is today.

+

Got my new headphones dt 770 the limited black edition. they are very good so far but obviously pricy unless your into audio.

+

This is another journal that i feel like updating. Im not sure what I want or want to keep. in terms of computer hardware etc.

+

Hello. I feel a lot better now due to getting over a cold. and not really caring much about people emotions too much. I also moderate for vidlii now which is interesting.

+

so i feel better today after getting my sick over with. makes me feel a lot better and better rested.

+

So i was rejected by a service merely for having a email with "memeware" and a link to "711chan" apparently that is wrong even thouhg they where offering alternative privacy front ends. kind of ironic eh?

+

Some more ramblings. im deciding to switch from twitch to kick. seems like a better platform. might change this journal code from disallowing javascript to allowing it. not sure

+

welcome to more private ramblings. i save it in case the power goes out and so you might get a incomplete version before you see it.s

+

Decided to watch some Pop'n 音乐 Lively streams. Im really big into older streams and rhythm games. Playing some "tiktok" chinese mahjong. Also doing my regular hearthstone and runescape game so i feel im doing a lot. just going to update this journal as the day progress

+
+
+ +
+ + diff --git a/journal/style.css b/journal/style.css new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/journal/style.css @@ -0,0 +1 @@ + diff --git a/kansen.gif b/kansen.gif new file mode 100644 index 0000000..22f9901 Binary files /dev/null and b/kansen.gif differ diff --git a/keybase.txt b/keybase.txt new file mode 100644 index 0000000..dab2a13 --- /dev/null +++ b/keybase.txt @@ -0,0 +1,56 @@ +================================================================== +https://keybase.io/sillylaird +-------------------------------------------------------------------- + +I hereby claim: + + * I am an admin of https://www.sillylaird.info + * I am sillylaird (https://keybase.io/sillylaird) on keybase. + * I have a public key ASDCol91W27AG8cLiHsflyN-kd2v2I5fKW7-hGTUnlBvMwo + +To do so, I am signing this object: + +{ + "body": { + "key": { + "eldest_kid": "0120c2a25f755b6ec01bc70b887b1f97237e91ddafd88e5f296efe8464d49e506f330a", + "host": "keybase.io", + "kid": "0120c2a25f755b6ec01bc70b887b1f97237e91ddafd88e5f296efe8464d49e506f330a", + "uid": "744e22f39bd294b836b617408c762919", + "username": "sillylaird" + }, + "merkle_root": { + "ctime": 1678236489, + "hash": "a0bd8a19dd5cb8cb1e81bb685a01f22e8217e7d0a9700df0c5caea1cb9c81c5d4858185553868685993a9daf37f1d6ef5abea6770a329125aaae00e60aec5ffe", + "hash_meta": "804fd18c00ba78bb1bced1388100d5fb0046aa79582ebb0cc2aab451a827eabb", + "seqno": 24162097 + }, + "service": { + "entropy": "oWJZg8bE+Oa5wQyIzL+59GSb", + "hostname": "www.sillylaird.info", + "protocol": "https:" + }, + "type": "web_service_binding", + "version": 2 + }, + "client": { + "name": "keybase.io go client", + "version": "6.0.1" + }, + "ctime": 1678236513, + "expire_in": 504576000, + "prev": "3a7615908f07c76fd7815a9497dff170ffa3afbda802b1274c64237a7e23dad4", + "seqno": 4, + "tag": "signature" +} + +which yields the signature: + +hKRib2R5hqhkZXRhY2hlZMOpaGFzaF90eXBlCqNrZXnEIwEgwqJfdVtuwBvHC4h7H5cjfpHdr9iOXylu/oRk1J5QbzMKp3BheWxvYWTESpcCBMQgOnYVkI8Hx2/XgVqUl9/xcP+jr72oArEnTGQjen4j2tTEILBYQ+Y6YB43w1O37O0BScWkuuo1/jM9btzv9mZkTqjUAgHCo3NpZ8RAjzDWFKsQirMQnuM2bb6vjkiMs5O9CKcHkEyJ6EoVqfPCnSXMx8DmAigW4UEuu1vF0yd9dkldxp+Yvhci+Bc1CqhzaWdfdHlwZSCkaGFzaIKkdHlwZQildmFsdWXEIMm7kUHEQeOtoKjeJ9mxdblAP+Zkhzg7ggW1n9vwX4bio3RhZ80CAqd2ZXJzaW9uAQ== + +And finally, I am proving ownership of this host by posting or +appending to this document. + +View my publicly-auditable identity here: https://keybase.io/sillylaird + +================================================================== \ No newline at end of file diff --git a/l3-logo.png b/l3-logo.png new file mode 100644 index 0000000..c3e0cb6 Binary files /dev/null and b/l3-logo.png differ diff --git a/l3-transparent.png b/l3-transparent.png new file mode 100644 index 0000000..b8c037d Binary files /dev/null and b/l3-transparent.png differ diff --git a/lain.gif b/lain.gif new file mode 100644 index 0000000..baba842 Binary files /dev/null and b/lain.gif differ diff --git a/lain.jpg b/lain.jpg new file mode 100644 index 0000000..71b855d Binary files /dev/null and b/lain.jpg differ diff --git a/lain.png b/lain.png new file mode 100644 index 0000000..1614204 Binary files /dev/null and b/lain.png differ diff --git a/lainw.jpg b/lainw.jpg new file mode 100644 index 0000000..cc6ca99 Binary files /dev/null and b/lainw.jpg differ diff --git a/links.html b/links.html new file mode 100644 index 0000000..b3a75fe --- /dev/null +++ b/links.html @@ -0,0 +1,71 @@ + + + + + + Links — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

Links

+

Websites I like. Content varies.

+ +

Friends' Sites

+ + +

Buttons / Badges

+
+ Valid HTML 4.01 Strict + Best viewed with Any Browser + Proudly made on Microsoft Windows + Support freedom of speech + Hosted on BuyVM + Strange things go down at the 711... + Desuroom Revival + Heyuri: It's the place to be + Adobe Flash will never die +
+
+
+ +
+ + diff --git a/links_jp.html b/links_jp.html new file mode 100644 index 0000000..33b22b6 --- /dev/null +++ b/links_jp.html @@ -0,0 +1,71 @@ + + + + + + Links — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

Links

+

Websites I like. Content varies.

+ +

友達' Sites

+ + +

Buttons / Badges

+
+ Valid HTML 4.01 Strict + Best viewed with Any Browser + Proudly made on Microsoft Windows + Support freedom of speech + Hosted on BuyVM + Strange things go down at the 711... + Desuroom Revival + Heyuri: It's the place to be + Adobe Flash will never die +
+
+
+ +
+ + diff --git a/links_zh.html b/links_zh.html new file mode 100644 index 0000000..d35aab2 --- /dev/null +++ b/links_zh.html @@ -0,0 +1,71 @@ + + + + + + Links — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

Links

+

Web网站s I like. Content varies.

+ +

朋友们' Sites

+ + +

Buttons / Badges

+
+ Valid HTML 4.01 Strict + Best viewed with Any Browser + Proudly made on Microsoft Windows + Support freedom of speech + Hosted on BuyVM + Strange things go down at the 711... + Desuroom Revival + Heyuri: It's the place to be + Adobe Flash will never die +
+
+
+ +
+ + diff --git a/load-vertical-links.js b/load-vertical-links.js new file mode 100644 index 0000000..ed2aa0c --- /dev/null +++ b/load-vertical-links.js @@ -0,0 +1,11 @@ +// load-vertical-links.js +document.addEventListener("DOMContentLoaded", () => { + fetch("https://cdn.sillylaird.ca/vertical-links.html") + .then(r => r.text()) + .then(html => { + document.getElementById("vertical-links-container").innerHTML = html; + }) + .catch(() => { + document.getElementById("vertical-links-container").textContent = "Failed to load menu."; + }); +}); diff --git a/logo-white-orange-bg.svg b/logo-white-orange-bg.svg new file mode 100644 index 0000000..dc8d7ea --- /dev/null +++ b/logo-white-orange-bg.svg @@ -0,0 +1,4 @@ + + + + diff --git a/logo.svg b/logo.svg new file mode 100644 index 0000000..e3ee3fe --- /dev/null +++ b/logo.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/logo2.svg b/logo2.svg new file mode 100644 index 0000000..f57c1e0 --- /dev/null +++ b/logo2.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + diff --git a/lolwut-button.gif b/lolwut-button.gif new file mode 100644 index 0000000..4fe9974 Binary files /dev/null and b/lolwut-button.gif differ diff --git a/lolwut.png b/lolwut.png new file mode 100644 index 0000000..a24669e Binary files /dev/null and b/lolwut.png differ diff --git a/made-with-windows.png b/made-with-windows.png new file mode 100644 index 0000000..b3353f9 Binary files /dev/null and b/made-with-windows.png differ diff --git a/main.js b/main.js new file mode 100644 index 0000000..7a12254 --- /dev/null +++ b/main.js @@ -0,0 +1,30 @@ +document.addEventListener('DOMContentLoaded', () => { + /** + * Updates the 'last modified' timestamp on the page. + * Looks for an element with the ID 'lastmod'. + */ + const lastModElement = document.getElementById('lastmod'); + if (lastModElement) { + // Use a standard YYYY-MM-DD format for the date. + const lastModifiedDate = new Date(document.lastModified); + lastModElement.textContent = lastModifiedDate.toISOString().split('T')[0]; + } + + /** + * Handles the mobile sidebar toggle functionality. + * Looks for a button with ID 'menu-toggle' and a sidebar with ID 'mobile-sidebar'. + */ + const menuToggleButton = document.getElementById('menu-toggle'); + const mobileSidebar = document.getElementById('mobile-sidebar'); + + if (menuToggleButton && mobileSidebar) { + const closedText = menuToggleButton.textContent; + const openText = menuToggleButton.dataset.openText || 'Hide menu'; // Fallback text + + menuToggleButton.addEventListener('click', () => { + const isExpanded = mobileSidebar.classList.toggle('visible'); + menuToggleButton.setAttribute('aria-expanded', String(isExpanded)); + menuToggleButton.textContent = isExpanded ? openText : closedText; + }); + } +}); \ No newline at end of file diff --git a/map/index.html b/map/index.html new file mode 100644 index 0000000..514d8fa --- /dev/null +++ b/map/index.html @@ -0,0 +1,83 @@ + + + + + + Site Map — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

Site Map

+

A simple index so the site is usable even if navigation changes.

+
+ +
+

Core

+ +
+ +
+

Gaming

+ +
+ +
+

Subdomains

+ +
+
+ +
+ + diff --git a/map/index_jp.html b/map/index_jp.html new file mode 100644 index 0000000..2f62c2f --- /dev/null +++ b/map/index_jp.html @@ -0,0 +1,83 @@ + + + + + + Site Map — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

Site Map

+

A simple index so the site is usable even if navigation changes.

+
+ +
+

Core

+ +
+ +
+

ゲーム

+ +
+ +
+

Subdomains

+ +
+
+ +
+ + diff --git a/map/index_zh.html b/map/index_zh.html new file mode 100644 index 0000000..195f478 --- /dev/null +++ b/map/index_zh.html @@ -0,0 +1,83 @@ + + + + + + Site Map — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

Site Map

+

A simple index so the 网站 is usable even if navigation changes.

+
+ +
+

Core

+ +
+ +
+

游戏

+ +
+ +
+

Subdomains

+ +
+
+ +
+ + diff --git a/mothracompat.gif b/mothracompat.gif new file mode 100644 index 0000000..fcc0fb1 Binary files /dev/null and b/mothracompat.gif differ diff --git a/mstartpage/Vidlii6 copy.png b/mstartpage/Vidlii6 copy.png new file mode 100644 index 0000000..540c3a5 Binary files /dev/null and b/mstartpage/Vidlii6 copy.png differ diff --git a/mstartpage/Vidlii6.png b/mstartpage/Vidlii6.png new file mode 100644 index 0000000..540c3a5 Binary files /dev/null and b/mstartpage/Vidlii6.png differ diff --git a/mstartpage/amazon.png b/mstartpage/amazon.png new file mode 100644 index 0000000..615e0d5 Binary files /dev/null and b/mstartpage/amazon.png differ diff --git a/mstartpage/belleville copy.png b/mstartpage/belleville copy.png new file mode 100644 index 0000000..695d032 Binary files /dev/null and b/mstartpage/belleville copy.png differ diff --git a/mstartpage/belleville.png b/mstartpage/belleville.png new file mode 100644 index 0000000..695d032 Binary files /dev/null and b/mstartpage/belleville.png differ diff --git a/mstartpage/ctvnews.png b/mstartpage/ctvnews.png new file mode 100644 index 0000000..570f0ae Binary files /dev/null and b/mstartpage/ctvnews.png differ diff --git a/mstartpage/cytube.png b/mstartpage/cytube.png new file mode 100644 index 0000000..6f47350 Binary files /dev/null and b/mstartpage/cytube.png differ diff --git a/mstartpage/ebay.png b/mstartpage/ebay.png new file mode 100644 index 0000000..d4d588a Binary files /dev/null and b/mstartpage/ebay.png differ diff --git a/mstartpage/general.png b/mstartpage/general.png new file mode 100644 index 0000000..c06d8ee Binary files /dev/null and b/mstartpage/general.png differ diff --git a/mstartpage/gitlogo copy.png b/mstartpage/gitlogo copy.png new file mode 100644 index 0000000..576cac6 Binary files /dev/null and b/mstartpage/gitlogo copy.png differ diff --git a/mstartpage/gitlogo.png b/mstartpage/gitlogo.png new file mode 100644 index 0000000..bf0d3ec Binary files /dev/null and b/mstartpage/gitlogo.png differ diff --git a/mstartpage/heyuri copy.png b/mstartpage/heyuri copy.png new file mode 100644 index 0000000..1800cbc Binary files /dev/null and b/mstartpage/heyuri copy.png differ diff --git a/mstartpage/heyuri.png b/mstartpage/heyuri.png new file mode 100644 index 0000000..1800cbc Binary files /dev/null and b/mstartpage/heyuri.png differ diff --git a/mstartpage/index.html b/mstartpage/index.html new file mode 100644 index 0000000..da7d100 --- /dev/null +++ b/mstartpage/index.html @@ -0,0 +1,192 @@ + + + + + + SillyLaird Mobile StartPage + + + + + + + + + + + + + + + + + + +
+
+ +

Age Verification Required

+

You must be at least 18 years old to access adult content.

+

By clicking "Verify", you confirm you are of legal age.

+
+ + +
+
+
+ + +
+
Verified XXX Sites
+ + + +
+ + + +
+

+

+
+ + +
+ +
+ + + +
+

Media & Entertainment

+ +
+ +
+

Other Resources

+ +
+ + + + + + + diff --git a/mstartpage/lain.png b/mstartpage/lain.png new file mode 100644 index 0000000..1614204 Binary files /dev/null and b/mstartpage/lain.png differ diff --git a/mstartpage/news.png b/mstartpage/news.png new file mode 100644 index 0000000..2f5dfe1 Binary files /dev/null and b/mstartpage/news.png differ diff --git a/mstartpage/newspaper.png b/mstartpage/newspaper.png new file mode 100644 index 0000000..1b89ec9 Binary files /dev/null and b/mstartpage/newspaper.png differ diff --git a/mstartpage/noteback.gif b/mstartpage/noteback.gif new file mode 100644 index 0000000..50d12df Binary files /dev/null and b/mstartpage/noteback.gif differ diff --git a/mstartpage/old-youtube-icon-75.png b/mstartpage/old-youtube-icon-75.png new file mode 100644 index 0000000..6c178a4 Binary files /dev/null and b/mstartpage/old-youtube-icon-75.png differ diff --git a/mstartpage/pornhub.jpeg b/mstartpage/pornhub.jpeg new file mode 100644 index 0000000..044e835 Binary files /dev/null and b/mstartpage/pornhub.jpeg differ diff --git a/mstartpage/roundcube.png b/mstartpage/roundcube.png new file mode 100644 index 0000000..4e44e3e Binary files /dev/null and b/mstartpage/roundcube.png differ diff --git a/mstartpage/shoppingcart.png b/mstartpage/shoppingcart.png new file mode 100644 index 0000000..09a2b15 Binary files /dev/null and b/mstartpage/shoppingcart.png differ diff --git a/mstartpage/sm_logo copy.png b/mstartpage/sm_logo copy.png new file mode 100644 index 0000000..da454b1 Binary files /dev/null and b/mstartpage/sm_logo copy.png differ diff --git a/mstartpage/sm_logo.png b/mstartpage/sm_logo.png new file mode 100644 index 0000000..da454b1 Binary files /dev/null and b/mstartpage/sm_logo.png differ diff --git a/mstartpage/somethingawful.png b/mstartpage/somethingawful.png new file mode 100644 index 0000000..0c18014 Binary files /dev/null and b/mstartpage/somethingawful.png differ diff --git a/mstartpage/sonemic.png b/mstartpage/sonemic.png new file mode 100644 index 0000000..66afbb8 Binary files /dev/null and b/mstartpage/sonemic.png differ diff --git a/mstartpage/sonymp3.png b/mstartpage/sonymp3.png new file mode 100644 index 0000000..f42da1f Binary files /dev/null and b/mstartpage/sonymp3.png differ diff --git a/mstartpage/tf2.png b/mstartpage/tf2.png new file mode 100644 index 0000000..a47f3a2 Binary files /dev/null and b/mstartpage/tf2.png differ diff --git a/mstartpage/tilde.png b/mstartpage/tilde.png new file mode 100644 index 0000000..20e1184 Binary files /dev/null and b/mstartpage/tilde.png differ diff --git a/mstartpage/wallpaper.jpg b/mstartpage/wallpaper.jpg new file mode 100644 index 0000000..d67ac74 Binary files /dev/null and b/mstartpage/wallpaper.jpg differ diff --git a/mullvad.svg b/mullvad.svg new file mode 100644 index 0000000..18bb154 --- /dev/null +++ b/mullvad.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/multibox.png b/multibox.png new file mode 100644 index 0000000..846746c Binary files /dev/null and b/multibox.png differ diff --git a/musictaste/index.html b/musictaste/index.html new file mode 100644 index 0000000..b41c212 --- /dev/null +++ b/musictaste/index.html @@ -0,0 +1,75 @@ + + + + + + Vinyls — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

Vinyls

+

A wall of covers.

+ +
+ Vinyl cover + Vinyl cover + Vinyl cover + Promare + + Vinyl cover + Vinyl cover + Vinyl cover + Vinyl cover + + Vinyl cover + Vinyl cover + Vinyl cover + Vinyl cover + + Vinyl cover + Vinyl cover + Vinyl cover + Vinyl cover + + Vinyl cover + Vinyl cover + Vinyl cover + Vinyl cover +
+
+
+ +
+ + diff --git a/musictaste/index_jp.html b/musictaste/index_jp.html new file mode 100644 index 0000000..9e5df0b --- /dev/null +++ b/musictaste/index_jp.html @@ -0,0 +1,75 @@ + + + + + + Vinyls — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

Vinyls

+

A wall of covers.

+ +
+ Vinyl cover + Vinyl cover + Vinyl cover + Promare + + Vinyl cover + Vinyl cover + Vinyl cover + Vinyl cover + + Vinyl cover + Vinyl cover + Vinyl cover + Vinyl cover + + Vinyl cover + Vinyl cover + Vinyl cover + Vinyl cover + + Vinyl cover + Vinyl cover + Vinyl cover + Vinyl cover +
+
+
+ +
+ + diff --git a/musictaste/index_zh.html b/musictaste/index_zh.html new file mode 100644 index 0000000..4f81c7c --- /dev/null +++ b/musictaste/index_zh.html @@ -0,0 +1,75 @@ + + + + + + Vinyls — SillyLaird + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+

Vinyls

+

A wall of covers.

+ +
+ Vinyl cover + Vinyl cover + Vinyl cover + Promare + + Vinyl cover + Vinyl cover + Vinyl cover + Vinyl cover + + Vinyl cover + Vinyl cover + Vinyl cover + Vinyl cover + + Vinyl cover + Vinyl cover + Vinyl cover + Vinyl cover + + Vinyl cover + Vinyl cover + Vinyl cover + Vinyl cover +
+
+
+ +
+ + diff --git a/musictaste/style.css b/musictaste/style.css new file mode 100644 index 0000000..5304ab3 --- /dev/null +++ b/musictaste/style.css @@ -0,0 +1,11 @@ +/* CSS is how you can add style to your website, such as colors, fonts, and positioning of your + HTML content. To learn how to do something, just try searching Google for questions like + "how to change link color." */ + +body { + background-color: #89b8e2; + text-align: center; + color: black; + font-family: Arial; +} +margin: auto; diff --git a/mwallpaper.jpeg b/mwallpaper.jpeg new file mode 100644 index 0000000..fdaee69 Binary files /dev/null and b/mwallpaper.jpeg differ diff --git a/mwallpaper.jpg b/mwallpaper.jpg new file mode 100644 index 0000000..7b55bd3 Binary files /dev/null and b/mwallpaper.jpg differ diff --git a/niceland.png b/niceland.png new file mode 100644 index 0000000..c7ba93d Binary files /dev/null and b/niceland.png differ diff --git a/nordvpn.png b/nordvpn.png new file mode 100644 index 0000000..9c21311 Binary files /dev/null and b/nordvpn.png differ diff --git a/northkorea.png b/northkorea.png new file mode 100644 index 0000000..af367a4 Binary files /dev/null and b/northkorea.png differ diff --git a/npp.svg b/npp.svg new file mode 100644 index 0000000..410e19a --- /dev/null +++ b/npp.svg @@ -0,0 +1,339 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/openbgpd.gif b/openbgpd.gif new file mode 100644 index 0000000..5a7c67d Binary files /dev/null and b/openbgpd.gif differ diff --git a/openbsd.png b/openbsd.png new file mode 100644 index 0000000..ea4cc2b Binary files /dev/null and b/openbsd.png differ diff --git a/ottawa-sens.jpg b/ottawa-sens.jpg new file mode 100644 index 0000000..105b319 Binary files /dev/null and b/ottawa-sens.jpg differ diff --git a/partials/footer.html b/partials/footer.html new file mode 100644 index 0000000..7e80061 --- /dev/null +++ b/partials/footer.html @@ -0,0 +1,11 @@ +
+ +
diff --git a/partials/header.html b/partials/header.html new file mode 100644 index 0000000..9bb3d47 --- /dev/null +++ b/partials/header.html @@ -0,0 +1,57 @@ + diff --git a/pgpkey.txt b/pgpkey.txt new file mode 100644 index 0000000..73791cb --- /dev/null +++ b/pgpkey.txt @@ -0,0 +1,103 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: https://keybase.io/sillylaird +Version: Keybase Go 6.0.1 (windows) + +xsFNBGQH4IQBEAD928ibEOpSgmTM6Yq6/abrOLXH7SynZoedFrcfW9MvMixAjx9G +5ZtzcxZ2QJ0XqDPoLu/vgtq5lWpPPhFthMLbPPOqTZ00Lqcuhtw4VNswvnDqPTmZ +KN36m3rdA6FiQBRfoIMgtOp8mmmDdaCz4Pxnbx48upg+2hJZRVoML9dGWCRR7kL+ +LZRPvPj7U/OXDGrVDV/d0LbQgnRJ5zMUV64IDiaVouMS9xTUSJQ7I10xMpRWSLks +DGm8pr2OPkNncUpaQNPALiXUoJ7wfSvakP9SX23V/W9YdiqsljF7lcWQZDvQUHqI +bxN8/qwiABCt59qS7E3YUqANBnx6627/PDV5y0HBIHhB0mUsycU7Y1RV3JO1AIQ5 +oDmNOCMkH8eVLkivvrPgVSW4HB7bDwhnYr9nMxHDe6SLd7Wq+T7BRBCK1PFjwEue +T8pgXJS8ozT30/1DK2FF+54Cv4uIhGKTMizKkttutIqgV+fHxJ95ppVyAmwHiD18 +fI0iOtAvi78wYvJCBlGmbDKvJkcsrxv26CRAJZo7T3zT4KF1w9wABEUC+Nn01kxu +BeT1SZPlWdiIvTEUUVDmjpe9Iru9lOJmpZ2kVTvuezNP+GLCNdNrHv9yT4JsMTJ8 +1enEfISavF5bEsTfeBXSBpBzamlTHzFLn3tN1dmpJnmlZ2Pbpbr4+HItTwARAQAB +zSNMYWlyZCBMb25lcmdhbiA8c2lsbHlsYWlyZEB2ZXJuLmNjPsLBdQQTAQgAKQUC +ZAfghAkQb4ruJDOKkGACGwMFCR4TOAAECwcJAwUVCAoCAwQWAAECAAAiFhAA6BZM +f/6Vm6oEhLq1aB2EjKTafkolEDA0I/duA9gX7rD8LijyFh9T051cuvxCQMES7hLw +Ikg3P1bUUSkorUbExDYQKVr7Xu+aAnmd3h0hswL6ht+fBd1+WhhMfQfC0vFjK2ji +6xPyW303KCO/soAwkOP4f2eaHxchWsDlVNOFxJ4xI4FS1TaDv3CnTr2xiM4sdoXV +2cX0J8Rz412VWE1X+Ytk7yp/DtmnHgG1B6bwacD7R7czrP49KhoYU012FGaMMGUU +2KK3PxalJYYMFHicOjyDerO5t5rGkW/Xv/5TqMyxK8M3XDF48b58DQaek0BTE+E4 +j4aI+q6aIj0Cgr+d6vpxy2ahAVA935lirlYQoiLka82ByNZLRybGL04Odp3+t5AQ +7Y/T6dAhLps125aob6MsbZK+fpY/XdSQcmpu35AJYR0H41s/R4g3Jilzg/nNDl3A +Je4QH1aZRHiagvrrRCL+vQ0iiq8xRJRSzlwTZTIQmzxGGOcdBRJVj9txp3ryX8xX +Daf54FDj/sXNjApSFNIHKfKKJEkYZjdPStLe0iG6W0zNvr6ZFKelo2LY3senRG0x +thJtXoE9L/j/XvQ/GSBKIKMIN/Rm+0dVi/k9O3Bycx/RUWOcvJoNklyYxxua1tM6 +mVAbjehOnTJWeWRif2D3Vvufa0TWioL8znOPCXHNJ0xhaXJkIExvbmVyZ2FuIDxz +aWxseWxhaXJkQGpvc2h3aG8ubmV0PsLBdQQTAQgAKQUCZAfghAkQb4ruJDOKkGAC +GwMFCR4TOAAECwcJAwUVCAoCAwQWAAECAAB5fhAAF9Zjkxu1h6VRdFLasvbM3z1Z +Xr3ACz9Q6VvtMmDlzJT9G3V2kqKgWRZzewKQcmuSfyuYW4Kxdafdr/VtGOYg+aU3 +aRACewox6H8j0x56W12lUsZwud15Two0psFl3tRi7FnkaPq5PfpgEFng16UzmUeV +buSGTmvwvn/lC1RrNxyZiWRFkuH6Jlw/zD5M4CK5nzQQg+WY7mZbi6IzAL5kGa6G +M2vbypcn+EhH8Q2LAi4SMZ6RYUMzlp0yE7o8jVhFj8Rkk2lFma4+7VSjCaEu9wWB +gW0OrO6QN/MdfmbCRYPwHwt+QqQkx0RsQyMbo3/rObj4DKsKEP+XdjcXyug74vZJ +W5TqyS6EZbuL1uW1kSCiVQ+zkauLgU9M8V9mWEbJEe6V6CDv11RsNTgRgFx3TpSp +7lmC396yr4G1mbyM/BGEuUGkycVWpJQSAgbJDtaaApD4G+gcVMxZ9bARVOUm3sJH +d32nAWp8N98m5ldEZSgmSODae9GlVKjEv2oH+MdtZVvr7l09pwawrZJZebeY+S6H +TWU40U98/Z0jgG5Mzd7VtqU/170t8baD8Z1jicLzjcaoHZQEE6A+oiFBZCVKix6G +mLpLg0/X3xmLRgeWWPYRtCwJJUgsL3dhjWzRLK1Dv9kg3/32LzF1INWX3UxCQgUB +KhumHj4kBFSHHOd0PIbNJExhaXJkIExvbmVyZ2FuIDxzaWxseWxhaXJkQGRubXgu +b3JnPsLBdQQTAQgAKQUCZAfghAkQb4ruJDOKkGACGwMFCR4TOAAECwcJAwUVCAoC +AwQWAAECAAAJJBAA9tZsnS6TwZpwX2jMN4XZpOFUwRwLIvSaeu9UY8iCCl4bZSEI +2I69ZZbMouW8jAwIQk2M0a1qF7zHnrg2HVqYrhTjHzTKp21UTmYvthztMFgGp1r1 +HRU+u4wlVT83Nt3loRVUvIIBU1G9YkjqAjWfyL8/C2QifKOzEGyOfGQRm2iKvHEN +GISGKO/DjM1tSHRQ3xdXjKySl9f5o9lUnk9X/m802wxYQPOHMH4vQsrVBS7ppZEq +YTkGLVcNSaK13hQ15/H5ibNkd5r8Pba/eE+eulwqh9onqT7SBvt8D+6q4v5XW3oh +EiImEN5kG10ynlr7afjKDjnkOVYxyCol7SDFdZOU8pTdHNdfrWvuDpXi0wItP6zL +xD7o0nKOrVNmL9ZvhDr+UBByr5EBZjjTjoBFWBLlH4LBICxDiYmHpAIrgHNyqkEI +bHmiDfRkaos4jw83/50NWNTACp1F7IRpoYgdfgVX63tJCISsMrfUGItwU1nIGb1k +BvovUu2GdinSjJFzIVfJoBnVh/i0s4Ep0/LQh08lH3G3cCY1EMpBtMZ3VSjvkBZx +TOfvTZfqqdqzCGPcpffpXFoTWKvQ83jyIswQTZoWPWnpCrugZj//pUwzT2emggDq +t9COp3TQaNp2stRrOmsvEUbA42BBGs0B3ty47eusBcHZ+YLFoBKDNgTEXsvNIUxh +aXJkIExvbmVyZ2FuIDxtQHNpbGx5bGFpcmQudG9wPsLBeAQTAQgALAUCZAfghAkQ +b4ruJDOKkGACGwMFCR4TOAACGQEECwcJAwUVCAoCAwQWAAECAABTRBAAk1Z6Lmjl +4pTh80iQAqe7uj/T7il1eSiyuTFWOWEQ1u/lzl5DzOLYPljqWW7qlQsgnrW0C7fK +yMTjpp3m4YhvIlzi9UY+hsJSQtY/bOoAhm3TEts+ZirNoxxOqynAM3Y8WeuFi/Q+ +Rw7c6UHHZIEEY1lAf+KXOdwTWoRQE9nf1zHJwhV9EZcVVfA5j0w7QlUwmxfJ3BZI +3giWbAUXicrLTWh2G0K9jhsJSQ//3x2tVitPuYHaWjSDHyDu+lHLdFPH92KBRHs6 +xROMqx14Kgk/4Cd/L0lcAv5ddX8gBAZD7IT2FK6uKkyOPDn/pE0JxEvKHf3Ex6F5 +kYtnNNjKAomLK+u8Vg2Hhp/SC3urdrBfaYa78/ddA2Hcknsfa4rJtDZD8M1PJ55D +ao8B80ZWd6xKgYfsIOc2UXm1MwWDB1GXQd9qdUov+NkrYvAsyRCPcGBD2SltK+kA +zsIL1tPMhpqODg+oidsnDRuKP/m8cAnr8ASEhjZ9NHyblWAwBFmq4CGx8DQjBbU5 +YfvA/hO4VD6AcSKlztMgzehgVfCMCY2RUz7Gv3odRN/Hggvxxu68pD8WzuHU0Hh8 +CTJqFihn3UH48SOi68Keb/BxHbjZlyWjMLJ09FdIpjxc8YL20qImWuM8SjX752xF +I43r6+IepgANYCHU+eNI3cgD6JNpnI62A8PNI0xhaXJkIExvbmVyZ2FuIDxzaWxs +eWxhaXJkQHNkZi5vcmc+wsF1BBMBCAApBQJkB+CECRBviu4kM4qQYAIbAwUJHhM4 +AAQLBwkDBRUICgIDBBYAAQIAALuiEABSyPDoV14uen/H2TBMDaAk7QDu8Q5OEzcl +ecyCJ7fRsHlADA2D9ba6jJRiSB9yyPpeknkyblXNO4Dll+dUj2Ks0OYF1jitVY2g +/Ad+QkTmxZu4VFTIIMdtlF+IS1xGyH7DTJZBI9S+PLJnuyCf3C2FskDb65JyLQ4M +CqZc5iq4NxnHKIHmgULIcySFL+X8vBaHnRSuGBbS3EPMC7qEmH+1GopBiZFeAWf5 +irRQzYApbg+mLc564loz2c/fk2ZcfcTGzuKNB5kai83OXwpF/QwxFG1fetxtOabp +ldKUQWAEMEWgiYtTnnUBRyoTcydwbkQ5DHBHjJAFau7/S8eNBUXVAtzMDr5FPnBS +6WcJ7kOsY7Xo4xI79jKRWDTiSL/6sCJy9aZshhCrLJJ7aRHQWgjymeh2rsCJfWp9 +jIamYXJESSESKX/Kz95XBVEvrRcdIaxlwJLimTS5lX7bsukBMKagOapcUVvNQ8f0 +eLZYp+wf4+81pzw3mfBwkJu1Dt4+T4sPgYnS6Ac4cafRJkFj3EQA/3UJeug1rbiY +vTiZBxrqia2uSQp327hzWxrN3MjlZ3uxCvn6tWJATo9P9/7O1/4FihyyMtzfNC4x +rzX2KuXcGRV0xIwRI2F+bNY3lhzSw5ZOPkjLIHDkqsFMxp/C7gZr7nEL5jcDyGxh +TuuQnqzgtM7BTQRkB+CEARAAqXrq4qgwelGUrOUXmDYUcdgLIXiu0oP21D6XyQgv +Q6l2Vv55EHf6UoXG5eD24/ewjjqUqeN6xA/caIpj2NR1R60vNs/C0Zb5WYqv0s7x +Lk3t/MJsnCtX26gB4+Qk2Rvclj4Cz0KztnOPI0TbWoI84O3aEENrHmKVWPkPROvT +XgOewvB55eymW9BmgH8gaEcxPnCxVhXhptxAaJn1Gxfgf+Dr4ttBZFobxyIh4wN1 +uHjaWbINR+3wC8p+2JQxbcUER7+5R5yoR7lmEHN/xgU1/4A4eZWa4BTWKCHCvuwU +PCZxMsdCjR4sjwDpHTa6gNVfCVX7xauO7ebw9oTbHetnJ9eFWiTFk0WM1mdigexf +6eYvVpcNCtlSMb4btr3IvioikfnrRzIna9kzfPF7Lku4VAyH2OdxhxYHSdx3GUl6 +pxEd0xlrMojKZYeGsm8VkNM80NZFw0A+tqwGimKIk/3TeXUInCSOW3QqlEyQd5gX +x/K2o6xiYHxQSuhHNrz9Hw1B4sF04z8y31Rf1j8a4b72F1aWUFR1FDa6od11wsjT +hwvldhKvsmSqhKVPwF3FGrue1wLClD+sevVrM6FmnaCBy2DmPDgaYR1Y08dcn9cW +qU5olRmE/5oNIjBU+fjCys3Ikean1/8vfZG0w4b2qvoPLYHpRKgjoYbS64ykHED/ +i8MAEQEAAcLBdQQYAQgAKQUCZAfghAkQb4ruJDOKkGACGwwFCR4TOAAECwcJAwUV +CAoCAwQWAAECAACUkhAAaAEvJJFMBDrFdbuDNKSiV8pgknV6gonTcRK7YBiLDMAE +r3w7BuSHMuHn2I3TyzPtZwwjme+05peh56gNHcC5Q5RWud6OkSh3C3zbpA+KWhEt +WzYz+x1+8lanHcNNuu6krMcCNLGDobmMh6Rahfi3w34VJwVcVNEcn1ACKUcHuKpZ +vpAsMweqY76PyKNRfRESkEj/5O9GdtODiM/0vSEwfpxSt0/Hm0LOP6d1tYMUacHe +VXtQixIl0iFNf9su0TbsEHdn0cvWBdlV3YzQ6mpeb7WoIFKjwyUcGXw+2/LOVXaq +MftpRuriuL2nXtQmDzFcg0oO+EXYH/9GXqOR02DQe3q+CgGA98Jylg3af01t6eBf +MQl7mVqVq2zL67WCfxmFPDsukVxvUf2m7shqRwxua5eC+Cq3nDTwkC7cOQ6XUaE9 +mij9Cf0CQ7QexXiejhx3wCjKfs2D6rAp3i3m685TOKjtd2ZoNktKLe4wz6JZoATL +x9h8in9iF8zIzeY8j5xdjwR52Doh+1rRsWoTSDbbsNGMk3yX/A0r2w3TuJ47dw7h +/AR8jCkbj85Plvvr/HLf26b8BgI10QReDjmDM0pN6nEcAAxMzp0CfMj0DRwHyIMH +skuKtGc8gVYmwQb2EAbf2T9obrx7W74s470AJCCBzzE+a4OXc7ql0ze+DDo52N8= +=mvoX +-----END PGP PUBLIC KEY BLOCK----- diff --git a/plan9.png b/plan9.png new file mode 100644 index 0000000..6441f1d Binary files /dev/null and b/plan9.png differ diff --git a/plan9bunnysmwhite.jpg b/plan9bunnysmwhite.jpg new file mode 100644 index 0000000..8829e16 Binary files /dev/null and b/plan9bunnysmwhite.jpg differ diff --git a/playbilibili.png b/playbilibili.png new file mode 100644 index 0000000..be995e8 Binary files /dev/null and b/playbilibili.png differ diff --git a/power36.gif b/power36.gif new file mode 100644 index 0000000..96f9c61 Binary files /dev/null and b/power36.gif differ diff --git a/ps2.jpg b/ps2.jpg new file mode 100644 index 0000000..065482b Binary files /dev/null and b/ps2.jpg differ diff --git a/pub/chrome_JF8NkbrJhc.png b/pub/chrome_JF8NkbrJhc.png new file mode 100644 index 0000000..68909f9 Binary files /dev/null and b/pub/chrome_JF8NkbrJhc.png differ diff --git a/pub/install.sh b/pub/install.sh new file mode 100644 index 0000000..fcfbcf7 --- /dev/null +++ b/pub/install.sh @@ -0,0 +1,549 @@ +#!/bin/sh +# +# This script should be run via curl: +# sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" +# or via wget: +# sh -c "$(wget -qO- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" +# or via fetch: +# sh -c "$(fetch -o - https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" +# +# As an alternative, you can first download the install script and run it afterwards: +# wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh +# sh install.sh +# +# You can tweak the install behavior by setting variables when running the script. For +# example, to change the path to the Oh My Zsh repository: +# ZSH=~/.zsh sh install.sh +# +# Respects the following environment variables: +# ZDOTDIR - path to Zsh dotfiles directory (default: unset). See [1][2] +# [1] https://zsh.sourceforge.io/Doc/Release/Parameters.html#index-ZDOTDIR +# [2] https://zsh.sourceforge.io/Doc/Release/Files.html#index-ZDOTDIR_002c-use-of +# ZSH - path to the Oh My Zsh repository folder (default: $HOME/.oh-my-zsh) +# REPO - name of the GitHub repo to install from (default: ohmyzsh/ohmyzsh) +# REMOTE - full remote URL of the git repo to install (default: GitHub via HTTPS) +# BRANCH - branch to check out immediately after install (default: master) +# +# Other options: +# CHSH - 'no' means the installer will not change the default shell (default: yes) +# RUNZSH - 'no' means the installer will not run zsh after the install (default: yes) +# KEEP_ZSHRC - 'yes' means the installer will not replace an existing .zshrc (default: no) +# +# You can also pass some arguments to the install script to set some these options: +# --skip-chsh: has the same behavior as setting CHSH to 'no' +# --unattended: sets both CHSH and RUNZSH to 'no' +# --keep-zshrc: sets KEEP_ZSHRC to 'yes' +# For example: +# sh install.sh --unattended +# or: +# sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended +# +set -e + +# Make sure important variables exist if not already defined +# +# $USER is defined by login(1) which is not always executed (e.g. containers) +# POSIX: https://pubs.opengroup.org/onlinepubs/009695299/utilities/id.html +USER=${USER:-$(id -u -n)} +# $HOME is defined at the time of login, but it could be unset. If it is unset, +# a tilde by itself (~) will not be expanded to the current user's home directory. +# POSIX: https://pubs.opengroup.org/onlinepubs/009696899/basedefs/xbd_chap08.html#tag_08_03 +HOME="${HOME:-$(getent passwd $USER 2>/dev/null | cut -d: -f6)}" +# macOS does not have getent, but this works even if $HOME is unset +HOME="${HOME:-$(eval echo ~$USER)}" + + +# Track if $ZSH was provided +custom_zsh=${ZSH:+yes} + +# Use $zdot to keep track of where the directory is for zsh dotfiles +# To check if $ZDOTDIR was provided, explicitly check for $ZDOTDIR +zdot="${ZDOTDIR:-$HOME}" + +# Default value for $ZSH +# a) if $ZDOTDIR is supplied and not $HOME: $ZDOTDIR/ohmyzsh +# b) otherwise, $HOME/.oh-my-zsh +[ "$ZDOTDIR" = "$HOME" ] || ZSH="${ZSH:-${ZDOTDIR:+$ZDOTDIR/ohmyzsh}}" +ZSH="${ZSH:-$HOME/.oh-my-zsh}" + +# Default settings +REPO=${REPO:-ohmyzsh/ohmyzsh} +REMOTE=${REMOTE:-https://github.com/${REPO}.git} +BRANCH=${BRANCH:-master} + +# Other options +CHSH=${CHSH:-yes} +RUNZSH=${RUNZSH:-yes} +KEEP_ZSHRC=${KEEP_ZSHRC:-no} + + +command_exists() { + command -v "$@" >/dev/null 2>&1 +} + +user_can_sudo() { + # Check if sudo is installed + command_exists sudo || return 1 + # Termux can't run sudo, so we can detect it and exit the function early. + case "$PREFIX" in + *com.termux*) return 1 ;; + esac + # The following command has 3 parts: + # + # 1. Run `sudo` with `-v`. Does the following: + # • with privilege: asks for a password immediately. + # • without privilege: exits with error code 1 and prints the message: + # Sorry, user may not run sudo on + # + # 2. Pass `-n` to `sudo` to tell it to not ask for a password. If the + # password is not required, the command will finish with exit code 0. + # If one is required, sudo will exit with error code 1 and print the + # message: + # sudo: a password is required + # + # 3. Check for the words "may not run sudo" in the output to really tell + # whether the user has privileges or not. For that we have to make sure + # to run `sudo` in the default locale (with `LANG=`) so that the message + # stays consistent regardless of the user's locale. + # + ! LANG= sudo -n -v 2>&1 | grep -q "may not run sudo" +} + +# The [ -t 1 ] check only works when the function is not called from +# a subshell (like in `$(...)` or `(...)`, so this hack redefines the +# function at the top level to always return false when stdout is not +# a tty. +if [ -t 1 ]; then + is_tty() { + true + } +else + is_tty() { + false + } +fi + +# This function uses the logic from supports-hyperlinks[1][2], which is +# made by Kat Marchán (@zkat) and licensed under the Apache License 2.0. +# [1] https://github.com/zkat/supports-hyperlinks +# [2] https://crates.io/crates/supports-hyperlinks +# +# Copyright (c) 2021 Kat Marchán +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +supports_hyperlinks() { + # $FORCE_HYPERLINK must be set and be non-zero (this acts as a logic bypass) + if [ -n "$FORCE_HYPERLINK" ]; then + [ "$FORCE_HYPERLINK" != 0 ] + return $? + fi + + # If stdout is not a tty, it doesn't support hyperlinks + is_tty || return 1 + + # DomTerm terminal emulator (domterm.org) + if [ -n "$DOMTERM" ]; then + return 0 + fi + + # VTE-based terminals above v0.50 (Gnome Terminal, Guake, ROXTerm, etc) + if [ -n "$VTE_VERSION" ]; then + [ $VTE_VERSION -ge 5000 ] + return $? + fi + + # If $TERM_PROGRAM is set, these terminals support hyperlinks + case "$TERM_PROGRAM" in + Hyper|iTerm.app|terminology|WezTerm) return 0 ;; + esac + + # kitty supports hyperlinks + if [ "$TERM" = xterm-kitty ]; then + return 0 + fi + + # Windows Terminal also supports hyperlinks + if [ -n "$WT_SESSION" ]; then + return 0 + fi + + # Konsole supports hyperlinks, but it's an opt-in setting that can't be detected + # https://github.com/ohmyzsh/ohmyzsh/issues/10964 + # if [ -n "$KONSOLE_VERSION" ]; then + # return 0 + # fi + + return 1 +} + +# Adapted from code and information by Anton Kochkov (@XVilka) +# Source: https://gist.github.com/XVilka/8346728 +supports_truecolor() { + case "$COLORTERM" in + truecolor|24bit) return 0 ;; + esac + + case "$TERM" in + iterm |\ + tmux-truecolor |\ + linux-truecolor |\ + xterm-truecolor |\ + screen-truecolor) return 0 ;; + esac + + return 1 +} + +fmt_link() { + # $1: text, $2: url, $3: fallback mode + if supports_hyperlinks; then + printf '\033]8;;%s\033\\%s\033]8;;\033\\\n' "$2" "$1" + return + fi + + case "$3" in + --text) printf '%s\n' "$1" ;; + --url|*) fmt_underline "$2" ;; + esac +} + +fmt_underline() { + is_tty && printf '\033[4m%s\033[24m\n' "$*" || printf '%s\n' "$*" +} + +# shellcheck disable=SC2016 # backtick in single-quote +fmt_code() { + is_tty && printf '`\033[2m%s\033[22m`\n' "$*" || printf '`%s`\n' "$*" +} + +fmt_error() { + printf '%sError: %s%s\n' "${FMT_BOLD}${FMT_RED}" "$*" "$FMT_RESET" >&2 +} + +setup_color() { + # Only use colors if connected to a terminal + if ! is_tty; then + FMT_RAINBOW="" + FMT_RED="" + FMT_GREEN="" + FMT_YELLOW="" + FMT_BLUE="" + FMT_BOLD="" + FMT_RESET="" + return + fi + + if supports_truecolor; then + FMT_RAINBOW=" + $(printf '\033[38;2;255;0;0m') + $(printf '\033[38;2;255;97;0m') + $(printf '\033[38;2;247;255;0m') + $(printf '\033[38;2;0;255;30m') + $(printf '\033[38;2;77;0;255m') + $(printf '\033[38;2;168;0;255m') + $(printf '\033[38;2;245;0;172m') + " + else + FMT_RAINBOW=" + $(printf '\033[38;5;196m') + $(printf '\033[38;5;202m') + $(printf '\033[38;5;226m') + $(printf '\033[38;5;082m') + $(printf '\033[38;5;021m') + $(printf '\033[38;5;093m') + $(printf '\033[38;5;163m') + " + fi + + FMT_RED=$(printf '\033[31m') + FMT_GREEN=$(printf '\033[32m') + FMT_YELLOW=$(printf '\033[33m') + FMT_BLUE=$(printf '\033[34m') + FMT_BOLD=$(printf '\033[1m') + FMT_RESET=$(printf '\033[0m') +} + +setup_ohmyzsh() { + # Prevent the cloned repository from having insecure permissions. Failing to do + # so causes compinit() calls to fail with "command not found: compdef" errors + # for users with insecure umasks (e.g., "002", allowing group writability). Note + # that this will be ignored under Cygwin by default, as Windows ACLs take + # precedence over umasks except for filesystems mounted with option "noacl". + umask g-w,o-w + + echo "${FMT_BLUE}Cloning Oh My Zsh...${FMT_RESET}" + + command_exists git || { + fmt_error "git is not installed" + exit 1 + } + + ostype=$(uname) + if [ -z "${ostype%CYGWIN*}" ] && git --version | grep -Eq 'msysgit|windows'; then + fmt_error "Windows/MSYS Git is not supported on Cygwin" + fmt_error "Make sure the Cygwin git package is installed and is first on the \$PATH" + exit 1 + fi + + # Manual clone with git config options to support git < v1.7.2 + git init --quiet "$ZSH" && cd "$ZSH" \ + && git config core.eol lf \ + && git config core.autocrlf false \ + && git config fsck.zeroPaddedFilemode ignore \ + && git config fetch.fsck.zeroPaddedFilemode ignore \ + && git config receive.fsck.zeroPaddedFilemode ignore \ + && git config oh-my-zsh.remote origin \ + && git config oh-my-zsh.branch "$BRANCH" \ + && git remote add origin "$REMOTE" \ + && git fetch --depth=1 origin \ + && git checkout -b "$BRANCH" "origin/$BRANCH" || { + [ ! -d "$ZSH" ] || { + cd - + rm -rf "$ZSH" 2>/dev/null + } + fmt_error "git clone of oh-my-zsh repo failed" + exit 1 + } + # Exit installation directory + cd - + + echo +} + +setup_zshrc() { + # Keep most recent old .zshrc at .zshrc.pre-oh-my-zsh, and older ones + # with datestamp of installation that moved them aside, so we never actually + # destroy a user's original zshrc + echo "${FMT_BLUE}Looking for an existing zsh config...${FMT_RESET}" + + # Must use this exact name so uninstall.sh can find it + OLD_ZSHRC="$zdot/.zshrc.pre-oh-my-zsh" + if [ -f "$zdot/.zshrc" ] || [ -h "$zdot/.zshrc" ]; then + # Skip this if the user doesn't want to replace an existing .zshrc + if [ "$KEEP_ZSHRC" = yes ]; then + echo "${FMT_YELLOW}Found ${zdot}/.zshrc.${FMT_RESET} ${FMT_GREEN}Keeping...${FMT_RESET}" + return + fi + if [ -e "$OLD_ZSHRC" ]; then + OLD_OLD_ZSHRC="${OLD_ZSHRC}-$(date +%Y-%m-%d_%H-%M-%S)" + if [ -e "$OLD_OLD_ZSHRC" ]; then + fmt_error "$OLD_OLD_ZSHRC exists. Can't back up ${OLD_ZSHRC}" + fmt_error "re-run the installer again in a couple of seconds" + exit 1 + fi + mv "$OLD_ZSHRC" "${OLD_OLD_ZSHRC}" + + echo "${FMT_YELLOW}Found old .zshrc.pre-oh-my-zsh." \ + "${FMT_GREEN}Backing up to ${OLD_OLD_ZSHRC}${FMT_RESET}" + fi + echo "${FMT_YELLOW}Found ${zdot}/.zshrc.${FMT_RESET} ${FMT_GREEN}Backing up to ${OLD_ZSHRC}${FMT_RESET}" + mv "$zdot/.zshrc" "$OLD_ZSHRC" + fi + + echo "${FMT_GREEN}Using the Oh My Zsh template file and adding it to $zdot/.zshrc.${FMT_RESET}" + + # Modify $ZSH variable in .zshrc directory to use the literal $ZDOTDIR or $HOME + omz="$ZSH" + if [ -n "$ZDOTDIR" ] && [ "$ZDOTDIR" != "$HOME" ]; then + omz=$(echo "$omz" | sed "s|^$ZDOTDIR/|\$ZDOTDIR/|") + fi + omz=$(echo "$omz" | sed "s|^$HOME/|\$HOME/|") + + sed "s|^export ZSH=.*$|export ZSH=\"${omz}\"|" "$ZSH/templates/zshrc.zsh-template" > "$zdot/.zshrc-omztemp" + mv -f "$zdot/.zshrc-omztemp" "$zdot/.zshrc" + + echo +} + +setup_shell() { + # Skip setup if the user wants or stdin is closed (not running interactively). + if [ "$CHSH" = no ]; then + return + fi + + # If this user's login shell is already "zsh", do not attempt to switch. + if [ "$(basename -- "$SHELL")" = "zsh" ]; then + return + fi + + # If this platform doesn't provide a "chsh" command, bail out. + if ! command_exists chsh; then + cat < "$zdot/.shell.pre-oh-my-zsh" + else + grep "^$USER:" /etc/passwd | awk -F: '{print $7}' > "$zdot/.shell.pre-oh-my-zsh" + fi + + echo "Changing your shell to $zsh..." + + # Check if user has sudo privileges to run `chsh` with or without `sudo` + # + # This allows the call to succeed without password on systems where the + # user does not have a password but does have sudo privileges, like in + # Google Cloud Shell. + # + # On systems that don't have a user with passwordless sudo, the user will + # be prompted for the password either way, so this shouldn't cause any issues. + # + if user_can_sudo; then + sudo -k chsh -s "$zsh" "$USER" # -k forces the password prompt + else + chsh -s "$zsh" "$USER" # run chsh normally + fi + + # Check if the shell change was successful + if [ $? -ne 0 ]; then + fmt_error "chsh command unsuccessful. Change your default shell manually." + else + export SHELL="$zsh" + echo "${FMT_GREEN}Shell successfully changed to '$zsh'.${FMT_RESET}" + fi + + echo +} + +# shellcheck disable=SC2183 # printf string has more %s than arguments ($FMT_RAINBOW expands to multiple arguments) +print_success() { + printf '%s %s__ %s %s %s %s %s__ %s\n' $FMT_RAINBOW $FMT_RESET + printf '%s ____ %s/ /_ %s ____ ___ %s__ __ %s ____ %s_____%s/ /_ %s\n' $FMT_RAINBOW $FMT_RESET + printf '%s / __ \\%s/ __ \\ %s / __ `__ \\%s/ / / / %s /_ / %s/ ___/%s __ \\ %s\n' $FMT_RAINBOW $FMT_RESET + printf '%s/ /_/ /%s / / / %s / / / / / /%s /_/ / %s / /_%s(__ )%s / / / %s\n' $FMT_RAINBOW $FMT_RESET + printf '%s\\____/%s_/ /_/ %s /_/ /_/ /_/%s\\__, / %s /___/%s____/%s_/ /_/ %s\n' $FMT_RAINBOW $FMT_RESET + printf '%s %s %s %s /____/ %s %s %s %s....is now installed!%s\n' $FMT_RAINBOW $FMT_GREEN $FMT_RESET + printf '\n' + printf '\n' + printf "%s %s %s\n" "Before you scream ${FMT_BOLD}${FMT_YELLOW}Oh My Zsh!${FMT_RESET} look over the" \ + "$(fmt_code "$(fmt_link ".zshrc" "file://$zdot/.zshrc" --text)")" \ + "file to select plugins, themes, and options." + printf '\n' + printf '%s\n' "• Follow us on Twitter: $(fmt_link @ohmyzsh https://twitter.com/ohmyzsh)" + printf '%s\n' "• Join our Discord community: $(fmt_link "Discord server" https://discord.gg/ohmyzsh)" + printf '%s\n' "• Get stickers, t-shirts, coffee mugs and more: $(fmt_link "Planet Argon Shop" https://shop.planetargon.com/collections/oh-my-zsh)" + printf '%s\n' $FMT_RESET +} + +main() { + # Run as unattended if stdin is not a tty + if [ ! -t 0 ]; then + RUNZSH=no + CHSH=no + fi + + # Parse arguments + while [ $# -gt 0 ]; do + case $1 in + --unattended) RUNZSH=no; CHSH=no ;; + --skip-chsh) CHSH=no ;; + --keep-zshrc) KEEP_ZSHRC=yes ;; + esac + shift + done + + setup_color + + if ! command_exists zsh; then + echo "${FMT_YELLOW}Zsh is not installed.${FMT_RESET} Please install zsh first." + exit 1 + fi + + if [ -d "$ZSH" ]; then + echo "${FMT_YELLOW}The \$ZSH folder already exists ($ZSH).${FMT_RESET}" + if [ "$custom_zsh" = yes ]; then + cat < Bindings... with + the following configuration: + Type: http + IP address: All Unassigned + Port: 80 + Host name: paste the .onion address which you copied in step 5 + 8. Click "Ok", then "Close" + 9. Try accessing your site's onion address via Tor Browser on your local machine \ No newline at end of file diff --git a/public.asc b/public.asc new file mode 100644 index 0000000..0df862d --- /dev/null +++ b/public.asc @@ -0,0 +1,13 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mDMEZDX0txYJKwYBBAHaRw8BAQdA7olI25+woWmQKeJ6HhSUYDzDm5G39/gt+fev +IitEile0IUxhaXJkIExvbmVyZ2FuIDxtQHNpbGx5bGFpcmQudG9wPoiTBBMWCgA7 +FiEEpunUoYWlfZjc3KjDDtb+6Y7No4UFAmQ19LcCGwMFCwkIBwICIgIGFQoJCAsC +BBYCAwECHgcCF4AACgkQDtb+6Y7No4VyCwD6AmOU1j0AAf0f9n8YRuEO+pdg/RL3 +2E5huAAbJWR79oUBAIJbFyPaUCQZD2gVhn0RcBhhCX4qT2H8QxMF88XLV3MJuDgE +ZDX0txIKKwYBBAGXVQEFAQEHQDBO58ovIL0AyxY5SS+cVC/tlZnKpxt79MvgwJkv +vs5BAwEIB4h4BBgWCgAgFiEEpunUoYWlfZjc3KjDDtb+6Y7No4UFAmQ19LcCGwwA +CgkQDtb+6Y7No4WkgwEAp1ehHAxU8y+UWKwyXgqvMWaasxevvIawLDrWVSJ0l2YB +AK0xdujZWh51jP98/opH81NZ55DzyDb/qceoQifVKu4A +=/Io1 +-----END PGP PUBLIC KEY BLOCK----- diff --git a/public.txt b/public.txt new file mode 100644 index 0000000..0df862d --- /dev/null +++ b/public.txt @@ -0,0 +1,13 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mDMEZDX0txYJKwYBBAHaRw8BAQdA7olI25+woWmQKeJ6HhSUYDzDm5G39/gt+fev +IitEile0IUxhaXJkIExvbmVyZ2FuIDxtQHNpbGx5bGFpcmQudG9wPoiTBBMWCgA7 +FiEEpunUoYWlfZjc3KjDDtb+6Y7No4UFAmQ19LcCGwMFCwkIBwICIgIGFQoJCAsC +BBYCAwECHgcCF4AACgkQDtb+6Y7No4VyCwD6AmOU1j0AAf0f9n8YRuEO+pdg/RL3 +2E5huAAbJWR79oUBAIJbFyPaUCQZD2gVhn0RcBhhCX4qT2H8QxMF88XLV3MJuDgE +ZDX0txIKKwYBBAGXVQEFAQEHQDBO58ovIL0AyxY5SS+cVC/tlZnKpxt79MvgwJkv +vs5BAwEIB4h4BBgWCgAgFiEEpunUoYWlfZjc3KjDDtb+6Y7No4UFAmQ19LcCGwwA +CgkQDtb+6Y7No4WkgwEAp1ehHAxU8y+UWKwyXgqvMWaasxevvIawLDrWVSJ0l2YB +AK0xdujZWh51jP98/opH81NZ55DzyDb/qceoQifVKu4A +=/Io1 +-----END PGP PUBLIC KEY BLOCK----- diff --git a/rib_bar_wh.png b/rib_bar_wh.png new file mode 100644 index 0000000..acc5ea8 Binary files /dev/null and b/rib_bar_wh.png differ diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..ca56147 --- /dev/null +++ b/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Allow: / + +Sitemap: https://www.sillylaird.ca/sitemap.xml diff --git a/roundcube.png b/roundcube.png new file mode 100644 index 0000000..4e44e3e Binary files /dev/null and b/roundcube.png differ diff --git a/roundcube.svg b/roundcube.svg new file mode 100644 index 0000000..e3ee3fe --- /dev/null +++ b/roundcube.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/runescape.png b/runescape.png new file mode 100644 index 0000000..79a7531 Binary files /dev/null and b/runescape.png differ diff --git a/runescape2.png b/runescape2.png new file mode 100644 index 0000000..78904e1 Binary files /dev/null and b/runescape2.png differ diff --git a/russia.png b/russia.png new file mode 100644 index 0000000..1a5ff93 Binary files /dev/null and b/russia.png differ diff --git a/russia.svg b/russia.svg new file mode 100644 index 0000000..855b805 --- /dev/null +++ b/russia.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sapphireblue.png b/sapphireblue.png new file mode 100644 index 0000000..8c34abc Binary files /dev/null and b/sapphireblue.png differ diff --git a/sealand.png b/sealand.png new file mode 100644 index 0000000..1e70490 Binary files /dev/null and b/sealand.png differ diff --git a/sflogo2.jpg b/sflogo2.jpg new file mode 100644 index 0000000..1e88c97 Binary files /dev/null and b/sflogo2.jpg differ diff --git a/sillylaird-88x31.png b/sillylaird-88x31.png new file mode 100644 index 0000000..67037e6 Binary files /dev/null and b/sillylaird-88x31.png differ diff --git a/sillylaird.png b/sillylaird.png new file mode 100644 index 0000000..67037e6 Binary files /dev/null and b/sillylaird.png differ diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..affa7c6 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,419 @@ + + + + https://www.sillylaird.ca/ + 2026-02-01 + + + https://www.sillylaird.ca/Laird_Lonergan_profile.html + 2026-02-01 + + + https://www.sillylaird.ca/Laird_Lonergan_profile_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/Laird_Lonergan_profile_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/MMORPG_Multiboxing_Guide.html + 2026-02-01 + + + https://www.sillylaird.ca/MMORPG_Multiboxing_Guide_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/MMORPG_Multiboxing_Guide_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/accounts/ + 2026-02-01 + + + https://www.sillylaird.ca/accounts/index_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/accounts/index_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/articles/2023/04-10.html + 2026-02-01 + + + https://www.sillylaird.ca/articles/2023/04-10_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/articles/2023/04-10_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/articles/2024/05-15.html + 2026-02-01 + + + https://www.sillylaird.ca/articles/2024/05-15_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/articles/2024/05-15_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/articles/hello.html + 2026-02-01 + + + https://www.sillylaird.ca/articles/hello_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/articles/hello_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/articles/runescape.html + 2026-02-01 + + + https://www.sillylaird.ca/articles/runescape_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/articles/runescape_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/articles/sample.html + 2026-02-01 + + + https://www.sillylaird.ca/articles/sample_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/articles/sample_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/bbs.html + 2026-02-01 + + + https://www.sillylaird.ca/blog/ + 2026-02-01 + + + https://www.sillylaird.ca/blog/index_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/blog/index_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/bookmarks/ + 2026-02-01 + + + https://www.sillylaird.ca/bookmarks/index_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/bookmarks/index_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/changelog/ + 2026-02-01 + + + https://www.sillylaird.ca/changelog/admin.html + 2026-02-01 + + + https://www.sillylaird.ca/changelog/api/latest.html + 2026-02-01 + + + https://www.sillylaird.ca/changelog/auth.html + 2026-02-01 + + + https://www.sillylaird.ca/changelog/db.html + 2026-02-01 + + + https://www.sillylaird.ca/changelog/index_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/changelog/index_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/changelog/latest.html + 2026-02-01 + + + https://www.sillylaird.ca/changelog/login.html + 2026-02-01 + + + https://www.sillylaird.ca/changelog/logout.html + 2026-02-01 + + + https://www.sillylaird.ca/computers/ + 2026-02-01 + + + https://www.sillylaird.ca/computers/index_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/computers/index_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/error/ + 2026-02-01 + + + https://www.sillylaird.ca/error/index_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/error/index_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/gaming/ + 2026-02-01 + + + https://www.sillylaird.ca/gaming/index_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/gaming/index_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/gaming/multibox/ + 2026-02-01 + + + https://www.sillylaird.ca/gaming/multibox/index_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/gaming/multibox/index_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/gaming/multibox/what-is-multiboxing/ + 2026-02-01 + + + https://www.sillylaird.ca/gaming/multibox/what-is-multiboxing/index_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/gaming/multibox/what-is-multiboxing/index_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/gaming/runescape/ + 2026-02-01 + + + https://www.sillylaird.ca/gaming/runescape/index_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/gaming/runescape/index_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/gaming/specialforce/ + 2026-02-01 + + + https://www.sillylaird.ca/gaming/specialforce/index_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/gaming/specialforce/index_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/gaming/stepmania/ + 2026-02-01 + + + https://www.sillylaird.ca/gaming/stepmania/index_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/gaming/stepmania/index_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/guestbook-comments.html + 2026-02-01 + + + https://www.sillylaird.ca/guestbook-form.html + 2026-02-01 + + + https://www.sillylaird.ca/guestbook.html + 2026-02-01 + + + https://www.sillylaird.ca/guestbook_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/guestbook_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/hatCollectionWebsite.html + 2026-02-01 + + + https://www.sillylaird.ca/hatCollectionWebsite_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/hatCollectionWebsite_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/hitcounter.html + 2026-02-01 + + + https://www.sillylaird.ca/hitcounter_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/hitcounter_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/index_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/index_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/journal/ + 2026-02-01 + + + https://www.sillylaird.ca/journal/index_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/journal/index_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/links.html + 2026-02-01 + + + https://www.sillylaird.ca/links_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/links_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/map/ + 2026-02-01 + + + https://www.sillylaird.ca/map/index_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/map/index_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/mstartpage/ + 2026-02-01 + + + https://www.sillylaird.ca/musictaste/ + 2026-02-01 + + + https://www.sillylaird.ca/musictaste/index_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/musictaste/index_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/startpage/ + 2026-02-01 + + + https://www.sillylaird.ca/startpage/test.html + 2026-02-01 + + + https://www.sillylaird.ca/submit.html + 2026-02-01 + + + https://www.sillylaird.ca/test.html + 2026-02-01 + + + https://www.sillylaird.ca/test_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/test_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/vblog/ + 2026-02-01 + + + https://www.sillylaird.ca/vblog/index_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/vblog/index_zh.html + 2026-02-01 + + + https://www.sillylaird.ca/vidlii/ + 2026-02-01 + + + https://www.sillylaird.ca/vidlii/index_jp.html + 2026-02-01 + + + https://www.sillylaird.ca/vidlii/index_zh.html + 2026-02-01 + + diff --git a/soldierfront.png b/soldierfront.png new file mode 100644 index 0000000..eb3aa97 Binary files /dev/null and b/soldierfront.png differ diff --git a/startpage/.htaccess b/startpage/.htaccess new file mode 100644 index 0000000..3f07952 --- /dev/null +++ b/startpage/.htaccess @@ -0,0 +1,8 @@ + + + Header set X-Content-Type-Options "nosniff" + Header set Referrer-Policy "strict-origin-when-cross-origin" + Header set Permissions-Policy "geolocation=(), microphone=(), camera=(), payment=(), usb=()" + Header set Content-Security-Policy "default-src 'self'; base-uri 'self'; script-src 'self'; style-src 'self' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' https://sirocco.accuweather.com; form-action 'self' https://www.google.com https://www.google.ca; object-src 'none'" + + diff --git a/startpage/amazon.png b/startpage/amazon.png new file mode 100644 index 0000000..9be01b5 Binary files /dev/null and b/startpage/amazon.png differ diff --git a/startpage/basedlii.png b/startpage/basedlii.png new file mode 100644 index 0000000..db0451b Binary files /dev/null and b/startpage/basedlii.png differ diff --git a/startpage/belleville.png b/startpage/belleville.png new file mode 100644 index 0000000..3d2eab0 Binary files /dev/null and b/startpage/belleville.png differ diff --git a/startpage/buyvm.png b/startpage/buyvm.png new file mode 100644 index 0000000..3e18331 Binary files /dev/null and b/startpage/buyvm.png differ diff --git a/startpage/ctvnews.png b/startpage/ctvnews.png new file mode 100644 index 0000000..87d7065 Binary files /dev/null and b/startpage/ctvnews.png differ diff --git a/startpage/cytube.png b/startpage/cytube.png new file mode 100644 index 0000000..6f47350 Binary files /dev/null and b/startpage/cytube.png differ diff --git a/startpage/ebay.png b/startpage/ebay.png new file mode 100644 index 0000000..9a75110 Binary files /dev/null and b/startpage/ebay.png differ diff --git a/startpage/gitlogo.png b/startpage/gitlogo.png new file mode 100644 index 0000000..34cd85c Binary files /dev/null and b/startpage/gitlogo.png differ diff --git a/startpage/heyuri.png b/startpage/heyuri.png new file mode 100644 index 0000000..46510d5 Binary files /dev/null and b/startpage/heyuri.png differ diff --git a/startpage/index.html b/startpage/index.html new file mode 100644 index 0000000..976de31 --- /dev/null +++ b/startpage/index.html @@ -0,0 +1,463 @@ + + + + + + SillyLaird // Terminal + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ +
+
+

Google Search..

+
+ +
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + + diff --git a/startpage/lain.png b/startpage/lain.png new file mode 100644 index 0000000..792f486 Binary files /dev/null and b/startpage/lain.png differ diff --git a/startpage/liivid.png b/startpage/liivid.png new file mode 100644 index 0000000..6fdb36b Binary files /dev/null and b/startpage/liivid.png differ diff --git a/startpage/news.png b/startpage/news.png new file mode 100644 index 0000000..32d2b8c Binary files /dev/null and b/startpage/news.png differ diff --git a/startpage/newspaper.png b/startpage/newspaper.png new file mode 100644 index 0000000..8ace873 Binary files /dev/null and b/startpage/newspaper.png differ diff --git a/startpage/noteback.gif b/startpage/noteback.gif new file mode 100644 index 0000000..2630a60 Binary files /dev/null and b/startpage/noteback.gif differ diff --git a/startpage/old-youtube-icon-75.png b/startpage/old-youtube-icon-75.png new file mode 100644 index 0000000..b16d3ae Binary files /dev/null and b/startpage/old-youtube-icon-75.png differ diff --git a/startpage/roundcube.png b/startpage/roundcube.png new file mode 100644 index 0000000..d972dbe Binary files /dev/null and b/startpage/roundcube.png differ diff --git a/startpage/shoppingcart.png b/startpage/shoppingcart.png new file mode 100644 index 0000000..fe3f85e Binary files /dev/null and b/startpage/shoppingcart.png differ diff --git a/startpage/sm_logo.png b/startpage/sm_logo.png new file mode 100644 index 0000000..f17bc70 Binary files /dev/null and b/startpage/sm_logo.png differ diff --git a/startpage/somethingawful.png b/startpage/somethingawful.png new file mode 100644 index 0000000..e462ec7 Binary files /dev/null and b/startpage/somethingawful.png differ diff --git a/startpage/sonemic.png b/startpage/sonemic.png new file mode 100644 index 0000000..f266a34 Binary files /dev/null and b/startpage/sonemic.png differ diff --git a/startpage/sonymp3.png b/startpage/sonymp3.png new file mode 100644 index 0000000..b627d5a Binary files /dev/null and b/startpage/sonymp3.png differ diff --git a/startpage/startpage.css b/startpage/startpage.css new file mode 100644 index 0000000..51a1334 --- /dev/null +++ b/startpage/startpage.css @@ -0,0 +1,272 @@ +:root { + --bg: #000; + --text: #ddd; + --accent: #ff0000; + --gold: #C69214; + --border: #222; + --radius: 4px; /* Sharper edges for a retro feel */ + --logo-size: clamp(80px, 10vw, 100px); + --fs-base: clamp(13px, 1vw, 15px); +} + +* { box-sizing: border-box; } +body { + margin: 0; background: var(--bg); color: var(--text); + font: 400 var(--fs-base) 'Source Code Pro', monospace; + line-height: 1.4; display: flex; flex-direction: column; min-height: 100vh; +} + +a { color: var(--accent); text-decoration: none; transition: 0.1s; } +a:hover { background: var(--accent); color: #000 !important; } + +/* Left-Aligned Container */ +header, main, footer { + width: 100%; + max-width: 1200px; /* Constrains width so it doesn't float too far right on wide screens */ + margin: 0; /* Align to left */ + padding: 20px 40px; +} + +/* Header Layout */ +header { + display: flex; + flex-direction: row; + gap: 40px; + align-items: flex-start; + border-bottom: 2px solid var(--border); +} + +.logo a img { + width: var(--logo-size); + height: auto; + border: 2px solid #000; + display: block; +} + +/* Lain border: black normally, red on hover/focus */ +.logo a:hover img, +.logo a:focus-visible img { + border-color: var(--accent); +} + +.nav-columns { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(130px, 1fr)); + gap: 20px; + flex-grow: 1; + text-align: left; +} + +.nav-group h3 { + color: var(--gold); + font-size: 0.8rem; + text-transform: uppercase; + margin: 0 0 10px 0; + letter-spacing: 1px; +} + +.nav-list { display: flex; flex-direction: column; gap: 4px; } +.nav-list a { font-size: 0.85rem; width: fit-content; } + +/* Search Section: Left Aligned */ +.search-section { + padding: 40px 0; + text-align: left; +} + +.search-section h2 { + color: var(--gold); + margin-bottom: 15px; + font-size: 1.2rem; + font-weight: bold; +} + +.search-box { + width: 100%; + max-width: 450px; /* Kept focused for readability */ + background: #000; + border: 1px solid var(--border); + padding: 10px; + color: var(--accent); + font-family: inherit; + outline: none; +} +.search-box:focus { border-color: var(--accent); } + +.clock-container { margin-top: 15px; color: var(--text); font-size: 0.9rem; opacity: 0.8; } +.clock-time { color: var(--accent); letter-spacing: 1px; } + +/* Grid Layout: Left Aligned */ +.grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); + gap: 20px; + padding: 0; +} + +.card { + border: 1px solid var(--border); + background: #050505; + padding: 15px; + display: flex; + flex-direction: column; + align-items: flex-start; /* Items start on the left */ + transition: 0.2s; +} +.card:hover { border-color: var(--accent); } + +.card .thumb { + width: 100%; + height: 70px; + display: flex; + align-items: center; + justify-content: flex-start; /* Align icon to left */ + margin-bottom: 15px; + opacity: 0.7; +} +.card img { max-width: 80px; max-height: 100%; object-fit: contain; } + +.card-links { + font-size: 0.8rem; + border-top: 1px solid var(--border); + width: 100%; + padding-top: 12px; + text-align: left; +} +.card-links a { display: block; padding: 1px 0; } + +footer { border-top: 1px solid var(--border); margin-top: auto; color: #555; } + +/* Age-Restricted Nav Group */ +#age-restricted-content { + position: relative; + cursor: pointer; +} +#age-restricted-content.locked .nav-list { + filter: blur(8px); + opacity: 0.3; + pointer-events: none; + user-select: none; +} +#age-restricted-content.locked::after { + content: '18+ RESTRICTED - CLICK TO VERIFY'; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + color: var(--accent); + font-size: 0.7rem; + white-space: nowrap; + pointer-events: none; + text-align: center; + font-weight: bold; +} +#age-restricted-content.unlocked { cursor: default; } + +/* Age Verification Modal */ +.age-modal { + position: fixed; + top: 0; left: 0; + width: 100%; height: 100%; + background: rgba(0, 0, 0, 0.95); + display: flex; + align-items: center; + justify-content: center; + z-index: 9999; +} +.age-modal.hidden { display: none; } +.age-modal-content { + background: #000; + border: 2px solid var(--accent); + padding: 30px; + max-width: 500px; + text-align: center; +} +.age-modal-content h2 { + color: var(--accent); + margin: 0 0 20px 0; + font-size: 1.3rem; +} +.age-modal-content p { + margin: 0 0 25px 0; + line-height: 1.6; +} +.age-modal-buttons { + display: flex; + gap: 15px; + justify-content: center; +} +.age-modal-btn { + padding: 10px 25px; + border: 1px solid var(--border); + background: #000; + color: var(--text); + font-family: inherit; + font-size: 0.9rem; + cursor: pointer; + transition: 0.2s; +} +.age-modal-btn:hover { + background: var(--accent); + color: #000; + border-color: var(--accent); +} +.age-modal-btn.deny:hover { + background: #555; + border-color: #555; +} + +@media (max-width: 850px) { + header, main, footer { padding: 20px; } + header { flex-direction: column; } + .nav-columns { width: 100%; } + .age-modal-content { margin: 20px; padding: 20px; } +} + +/* Additional styles for modal search box */ +.search-container { + animation: fadeIn 0.5s ease-in; +} + +@keyframes fadeIn { + from { opacity: 0; } + to { opacity: 1; } +} + +.age-modal-content form button:hover { + background: var(--accent); + color: #000; + border-color: var(--accent); +} + +.modal-search { + margin: 20px 0; + border-top: 1px solid var(--border); + padding-top: 20px; +} + +.modal-search-hint { + margin-bottom: 10px; + font-size: 0.9rem; +} + +.modal-search-form { + display: flex; + gap: 10px; +} + +.modal-search-input { + flex-grow: 1; + border: 1px solid var(--border); + padding: 8px; + background: #000; + color: var(--text); +} + +.modal-search-button { + padding: 8px 15px; + border: 1px solid var(--border); + background: #000; + color: var(--text); + cursor: pointer; +} diff --git a/startpage/startpage.js b/startpage/startpage.js new file mode 100644 index 0000000..3fc9701 --- /dev/null +++ b/startpage/startpage.js @@ -0,0 +1,87 @@ +(function () { + function byId(id) { + return document.getElementById(id); + } + + function updateClock() { + const dateEl = byId('realtime-date'); + const timeEl = byId('realtime-clock'); + if (!dateEl || !timeEl) return; + + const now = new Date(); + const options = { weekday: 'short', year: 'numeric', month: 'short', day: 'numeric' }; + dateEl.textContent = now.toLocaleDateString(undefined, options).toUpperCase(); + timeEl.textContent = now.toLocaleTimeString(); + } + + setInterval(updateClock, 1000); + updateClock(); + + // Age Verification System + let isVerified = false; + + const content = byId('age-restricted-content'); + const modal = byId('age-verification-modal'); + const yesBtn = byId('age-verify-yes'); + const noBtn = byId('age-verify-no'); + + function unlockContent() { + if (!content) return; + content.classList.remove('locked'); + content.classList.add('unlocked'); + content.removeEventListener('click', handleContentClick); + isVerified = true; + localStorage.setItem('ageVerified', 'true'); + } + + function showAgeModal() { + if (!modal) return; + modal.classList.remove('hidden'); + } + + function hideAgeModal() { + if (!modal) return; + modal.classList.add('hidden'); + } + + function handleContentClick(e) { + if (isVerified) return; + + e.preventDefault(); + e.stopPropagation(); + showAgeModal(); + } + + function confirmAge(isOfAge) { + if (!modal) return; + + if (isOfAge) { + unlockContent(); + hideAgeModal(); + alert('Age verified. You can now access restricted content.'); + } else { + hideAgeModal(); + window.location.href = 'https://www.google.com'; + } + } + + if (content && modal) { + const storedVerification = localStorage.getItem('ageVerified'); + if (storedVerification === 'true') { + unlockContent(); + } else { + showAgeModal(); + } + + content.addEventListener('click', handleContentClick); + + if (yesBtn) yesBtn.addEventListener('click', function () { confirmAge(true); }); + if (noBtn) noBtn.addEventListener('click', function () { confirmAge(false); }); + + document.addEventListener('keydown', function (e) { + if (e.altKey && e.key === 'a') { + showAgeModal(); + } + }); + } +})(); diff --git a/startpage/test.html b/startpage/test.html new file mode 100644 index 0000000..468bf82 --- /dev/null +++ b/startpage/test.html @@ -0,0 +1,54 @@ + + + + + + Accurate Belleville, Ontario Weather + + + + + + + + + + + + + + + + + + +

Live Weather for Belleville, Ontario

+ +
+
+ + +
+
+ The live weather data above is provided directly from MSN Weather for Belleville, Ontario.
+ For a general weather overview: + CTV News Weather
+ For local flying conditions: + UAV Forecast +
+
+ + + diff --git a/startpage/test.old b/startpage/test.old new file mode 100644 index 0000000..a71ae9c --- /dev/null +++ b/startpage/test.old @@ -0,0 +1,129 @@ + + + + + + Accurate Belleville, Ontario Weather + + + + + + +

Live Weather for Belleville, Ontario

+ +
+
+ + +
+
+ The live weather data above is provided directly from MSN Weather for Belleville, Ontario.
+ For a general weather overview: + CTV News Weather
+ For local flying conditions: + UAV Forecast +
+
+ + + diff --git a/startpage/tf2.png b/startpage/tf2.png new file mode 100644 index 0000000..bd3794a Binary files /dev/null and b/startpage/tf2.png differ diff --git a/startpage/tilde.png b/startpage/tilde.png new file mode 100644 index 0000000..20e1184 Binary files /dev/null and b/startpage/tilde.png differ diff --git a/startpage/videogame.png b/startpage/videogame.png new file mode 100644 index 0000000..3e2adb4 Binary files /dev/null and b/startpage/videogame.png differ diff --git a/startpage/wallpaper.jpg b/startpage/wallpaper.jpg new file mode 100644 index 0000000..d67ac74 Binary files /dev/null and b/startpage/wallpaper.jpg differ diff --git a/stepmania.png b/stepmania.png new file mode 100644 index 0000000..232f349 Binary files /dev/null and b/stepmania.png differ diff --git a/style.css b/style.css new file mode 100644 index 0000000..6fb6edc --- /dev/null +++ b/style.css @@ -0,0 +1,282 @@ +/* Base Styles for Desktop View */ + + + +.button1 { + background-color: black; + font-family: Comic Sans MS; + font-weight: 300; +} + +h1 { + font-family: 'Comic Sans MS', 'Chalkboard SE', 'Comic Neue', sans-serif; + font-size: 1.875rem; /* 30px / 16px (base font size) */ + padding-left: 40px; +} + +pre { + font-family: 'Comic Sans MS', 'Chalkboard SE', 'Comic Neue', sans-serif; + font-size: 12px; + padding-left: 40px; +} + +nav { + text-align: left; + float: left; + width: 30%; + padding: 20px; +} +/* Consider using flexbox for navigation for better alignment */ +nav a { + display: inline-block; /* Keep the anchor as a block or inline-block for better alignment */ +} + +article { + float: left; + padding: 20px; + width: 70%; +} + +body { + background-color: #ffd; + margin: 0; /* Remove default margin */ +} +/* Consider using viewport units for more responsive sizing */ +iframe { + display: block; /* iframes are inline by default */ + height: 100vh; /* Set height to 100% of the viewport height */ + width: 100vw; /* Set width to 100% of the viewport width */ + border: none; /* Remove default border */ + background: #ffd; /* Just for styling */ +} +/* Use a more descriptive ID or consider a class */ +#design-cast { + position: relative; + overflow: hidden; +} + +.member { + float: left; + width: calc(20% - 2%); /* Adjust width to account for margins */ + margin: 1% 1% 45px 1%; +} + +.name { + bottom: 0px; +} + +.member img { + width: 50%; + display: block; +} + +ul.flowxl { + display: flex; + flex-wrap: wrap; + padding: 0; +} + +ul.flowxl > li { + list-style-type: none; + text-align: center; + width: var(--xiconsize); + min-width: var(--xiconsize); + max-width: var(--xiconsize); + max-height: calc(var(--xiconsize) + 60px); + padding: 2px; + margin: 0.125rem; /* Use rem for margin */ + overflow: hidden; + font-size: 1rem; + line-height: 1; +} + +ul.flowxl > li > a { + display: block; + /* vertical-align: middle; This property is not applicable to block-level elements. It only affects inline or inline-block elements. */ + line-height: 1; + font-size: 1.2rem; +} + +ul.flowxl li > a > img, +ul.flowxl li > img { + display: block; + border-radius: 9px; + width: auto; + max-width: var(--xiconsize); + max-height: var(--xiconsize); + overflow: hidden; + margin-left: auto; + margin-right: auto; +} + +ul.flowxl li > a > img[src$=".svg"] { + max-width: 170px; + max-height: 170px; +} + +table { + overflow: auto; +} + +p, a, li, figcaption, div, span { + overflow-wrap: anywhere; +} + +.content { + margin-left: 0; /* Ensure no extra margin is added */ +} +/* Consider using a more semantic element like