aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-x.gitignore6
-rw-r--r--.gitmodules4
-rwxr-xr-xDockerfile6
-rwxr-xr-xDockerfile_cron11
-rw-r--r--cron_entrypoint.sh6
-rwxr-xr-xdocker-compose.yml119
-rw-r--r--[-rwxr-xr-x]edaweb/app.py (renamed from app.py)58
-rw-r--r--edaweb/cache.py (renamed from cache.py)2
-rw-r--r--edaweb/database.py (renamed from database.py)11
-rw-r--r--[-rwxr-xr-x]edaweb/downloader.py (renamed from downloader.py)0
-rw-r--r--[-rwxr-xr-x]edaweb/parser.py (renamed from parser.py)11
-rw-r--r--[-rwxr-xr-x]edaweb/services.py (renamed from services.py)109
-rw-r--r--edaweb/static/cow.txt58
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/0don0t4ofuc41-3776935852.jpg (renamed from static/images/0don0t4ofuc41-3776935852.jpg)bin131290 -> 131290 bytes
-rw-r--r--edaweb/static/images/1544552064683.jpg (renamed from static/images/1544552064683.jpg)bin171824 -> 171824 bytes
-rw-r--r--edaweb/static/images/1549844950404.jpg (renamed from static/images/1549844950404.jpg)bin112071 -> 112071 bytes
-rw-r--r--edaweb/static/images/1555824429083.png (renamed from static/images/1555824429083.png)bin170252 -> 170252 bytes
-rw-r--r--edaweb/static/images/1555824491105.png (renamed from static/images/1555824491105.png)bin177365 -> 177365 bytes
-rwxr-xr-xedaweb/static/images/1583581996540.jpgbin0 -> 89996 bytes
-rw-r--r--edaweb/static/images/1671540582317176.png (renamed from static/images/1671540582317176.png)bin3276156 -> 3276156 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/1urouter.jpg (renamed from static/images/1urouter.jpg)bin183429 -> 183429 bytes
-rw-r--r--edaweb/static/images/20220401_222149.jpg (renamed from static/images/20220401_222149.jpg)bin38897 -> 38897 bytes
-rwxr-xr-xedaweb/static/images/20251111_102045.jpgbin0 -> 130991 bytes
-rwxr-xr-xedaweb/static/images/20251111_102045.pngbin0 -> 43364 bytes
-rwxr-xr-xedaweb/static/images/2209509307.jpgbin0 -> 46907 bytes
-rwxr-xr-xedaweb/static/images/2684330373.jpgbin0 -> 10428 bytes
-rw-r--r--edaweb/static/images/324162a23865a6a7e75761871d29935314cbc2b3.jpg (renamed from static/images/324162a23865a6a7e75761871d29935314cbc2b3.jpg)bin531668 -> 531668 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/3502e26d0181c684bc17b56188bde6e80569d191_full.jpg (renamed from static/images/3502e26d0181c684bc17b56188bde6e80569d191_full.jpg)bin13920 -> 13920 bytes
-rw-r--r--edaweb/static/images/5600x.jpg (renamed from static/images/5600x.jpg)bin151209 -> 151209 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/9400t.jpg (renamed from static/images/9400t.jpg)bin2603012 -> 2603012 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/9400t_cooler.jpg (renamed from static/images/9400t_cooler.jpg)bin4997396 -> 4997396 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/E1NlPc1X0AEkB-s.png (renamed from static/images/E1NlPc1X0AEkB-s.png)bin3029 -> 3029 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/E3xdm-hWYAEADNx.jpg (renamed from static/images/E3xdm-hWYAEADNx.jpg)bin13609 -> 13609 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/E4WhXAvWYAIFwEa.png (renamed from static/images/E4WhXAvWYAIFwEa.png)bin10560 -> 10560 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/E4cjVaPXEAU83U0.png (renamed from static/images/E4cjVaPXEAU83U0.png)bin15418 -> 15418 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/E7ODIBeX0AAivRV.jpg (renamed from static/images/E7ODIBeX0AAivRV.jpg)bin75338 -> 75338 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/E7ODIZEWUAMQjty.jpg (renamed from static/images/E7ODIZEWUAMQjty.jpg)bin94889 -> 94889 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/E7ODIv0WUAUp-ad.jpg (renamed from static/images/E7ODIv0WUAUp-ad.jpg)bin88028 -> 88028 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/E7ODJELX0AAVqna.jpg (renamed from static/images/E7ODJELX0AAVqna.jpg)bin107275 -> 107275 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/EbmVCYKWkAAwXKW.jpg (renamed from static/images/EbmVCYKWkAAwXKW.jpg)bin34657 -> 34657 bytes
-rw-r--r--edaweb/static/images/Ffi1ducXEAArXDg.jpg (renamed from static/images/Ffi1ducXEAArXDg.jpg)bin18055 -> 18055 bytes
-rw-r--r--edaweb/static/images/GGBDzuSXMAA1Ktk.jpg (renamed from static/images/GGBDzuSXMAA1Ktk.jpg)bin65355 -> 65355 bytes
-rw-r--r--edaweb/static/images/GSxGe_rXQAAgEhj.jpg (renamed from static/images/GSxGe_rXQAAgEhj.jpg)bin1443057 -> 1443057 bytes
-rw-r--r--edaweb/static/images/GTq-GOgWQAErvCp.jpg (renamed from static/images/GTq-GOgWQAErvCp.jpg)bin376374 -> 376374 bytes
-rwxr-xr-xedaweb/static/images/GZhgzaK.pngbin0 -> 124272 bytes
-rw-r--r--edaweb/static/images/GcyexeCW0AAYssz.jpg (renamed from static/images/GcyexeCW0AAYssz.jpg)bin992976 -> 992976 bytes
-rwxr-xr-xedaweb/static/images/GegzRla.pngbin0 -> 44635 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/IMG_-g4wqat.jpg (renamed from static/images/IMG_-g4wqat.jpg)bin82371 -> 82371 bytes
-rw-r--r--edaweb/static/images/IMG_1602.jpg (renamed from static/images/IMG_1602.jpg)bin24762 -> 24762 bytes
-rw-r--r--edaweb/static/images/IMG_1603.jpg (renamed from static/images/IMG_1603.jpg)bin26478 -> 26478 bytes
-rw-r--r--edaweb/static/images/IMG_1604.jpg (renamed from static/images/IMG_1604.jpg)bin35792 -> 35792 bytes
-rw-r--r--edaweb/static/images/IMG_1605.jpg (renamed from static/images/IMG_1605.jpg)bin33782 -> 33782 bytes
-rw-r--r--edaweb/static/images/IMG_1606.jpg (renamed from static/images/IMG_1606.jpg)bin34771 -> 34771 bytes
-rw-r--r--edaweb/static/images/IMG_1607.jpg (renamed from static/images/IMG_1607.jpg)bin39764 -> 39764 bytes
-rw-r--r--edaweb/static/images/IMG_1609.jpg (renamed from static/images/IMG_1609.jpg)bin48287 -> 48287 bytes
-rw-r--r--edaweb/static/images/IMG_1610.jpg (renamed from static/images/IMG_1610.jpg)bin41368 -> 41368 bytes
-rw-r--r--edaweb/static/images/IMG_1611.jpg (renamed from static/images/IMG_1611.jpg)bin24732 -> 24732 bytes
-rw-r--r--edaweb/static/images/IMG_1612.jpg (renamed from static/images/IMG_1612.jpg)bin26570 -> 26570 bytes
-rw-r--r--edaweb/static/images/IMG_1613.png (renamed from static/images/IMG_1613.png)bin2339298 -> 2339298 bytes
-rw-r--r--edaweb/static/images/IMG_1614.png (renamed from static/images/IMG_1614.png)bin317510 -> 317510 bytes
-rw-r--r--edaweb/static/images/IMG_1615.jpg (renamed from static/images/IMG_1615.jpg)bin27792 -> 27792 bytes
-rw-r--r--edaweb/static/images/IMG_1616.jpg (renamed from static/images/IMG_1616.jpg)bin43497 -> 43497 bytes
-rw-r--r--edaweb/static/images/IMG_1617.jpg (renamed from static/images/IMG_1617.jpg)bin11756 -> 11756 bytes
-rw-r--r--edaweb/static/images/IMG_1618.jpg (renamed from static/images/IMG_1618.jpg)bin21924 -> 21924 bytes
-rw-r--r--edaweb/static/images/IMG_1619.jpg (renamed from static/images/IMG_1619.jpg)bin10839 -> 10839 bytes
-rw-r--r--edaweb/static/images/IMG_1620.jpg (renamed from static/images/IMG_1620.jpg)bin25630 -> 25630 bytes
-rw-r--r--edaweb/static/images/IMG_1621.jpg (renamed from static/images/IMG_1621.jpg)bin246181 -> 246181 bytes
-rw-r--r--edaweb/static/images/IMG_1622.jpg (renamed from static/images/IMG_1622.jpg)bin163205 -> 163205 bytes
-rw-r--r--edaweb/static/images/IMG_1623.jpg (renamed from static/images/IMG_1623.jpg)bin65738 -> 65738 bytes
-rw-r--r--edaweb/static/images/IMG_1624.png (renamed from static/images/IMG_1624.png)bin337723 -> 337723 bytes
-rw-r--r--edaweb/static/images/IMG_1625.jpg (renamed from static/images/IMG_1625.jpg)bin31273 -> 31273 bytes
-rw-r--r--edaweb/static/images/IMG_1626.jpg (renamed from static/images/IMG_1626.jpg)bin28916 -> 28916 bytes
-rw-r--r--edaweb/static/images/IMG_1627.jpg (renamed from static/images/IMG_1627.jpg)bin33325 -> 33325 bytes
-rw-r--r--edaweb/static/images/IMG_1628.jpg (renamed from static/images/IMG_1628.jpg)bin21475 -> 21475 bytes
-rw-r--r--edaweb/static/images/IMG_1629.jpg (renamed from static/images/IMG_1629.jpg)bin13153 -> 13153 bytes
-rw-r--r--edaweb/static/images/IMG_1630.jpg (renamed from static/images/IMG_1630.jpg)bin33638 -> 33638 bytes
-rw-r--r--edaweb/static/images/IMG_1632.jpg (renamed from static/images/IMG_1632.jpg)bin52252 -> 52252 bytes
-rw-r--r--edaweb/static/images/IMG_1633.jpg (renamed from static/images/IMG_1633.jpg)bin32028 -> 32028 bytes
-rw-r--r--edaweb/static/images/IMG_1636.jpg (renamed from static/images/IMG_1636.jpg)bin45916 -> 45916 bytes
-rw-r--r--edaweb/static/images/IMG_1637.jpg (renamed from static/images/IMG_1637.jpg)bin13999 -> 13999 bytes
-rw-r--r--edaweb/static/images/IMG_1638.jpg (renamed from static/images/IMG_1638.jpg)bin79337 -> 79337 bytes
-rw-r--r--edaweb/static/images/IMG_1639.jpg (renamed from static/images/IMG_1639.jpg)bin130710 -> 130710 bytes
-rw-r--r--edaweb/static/images/IMG_1640.jpg (renamed from static/images/IMG_1640.jpg)bin77986 -> 77986 bytes
-rw-r--r--edaweb/static/images/IMG_1641.jpg (renamed from static/images/IMG_1641.jpg)bin41247 -> 41247 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/IMG_20210422_212009.jpg (renamed from static/images/IMG_20210422_212009.jpg)bin2976182 -> 2976182 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/IMG_20210824_175000.jpg (renamed from static/images/IMG_20210824_175000.jpg)bin3292970 -> 3292970 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/IMG_20220809_172130442_HDR.jpg (renamed from static/images/IMG_20220809_172130442_HDR.jpg)bin2715100 -> 2715100 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/IMG_20220811_133224877_HDR.jpg (renamed from static/images/IMG_20220811_133224877_HDR.jpg)bin3336994 -> 3336994 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/IMG_20220811_133224877_HDR_crop.jpg (renamed from static/images/IMG_20220811_133224877_HDR_crop.jpg)bin2168764 -> 2168764 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/IMG_20220812_112838125_HDR.jpg (renamed from static/images/IMG_20220812_112838125_HDR.jpg)bin3440299 -> 3440299 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/IMG_20220823_154457137_HDR.jpg (renamed from static/images/IMG_20220823_154457137_HDR.jpg)bin3971263 -> 3971263 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/IMG_20221023_163821542.jpg (renamed from static/images/IMG_20221023_163821542.jpg)bin1461946 -> 1461946 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/IMG_20230812_132400733_HDR.jpg (renamed from static/images/IMG_20230812_132400733_HDR.jpg)bin3044563 -> 3044563 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/IMG_20230812_132632784_HDR.jpg (renamed from static/images/IMG_20230812_132632784_HDR.jpg)bin3452950 -> 3452950 bytes
-rwxr-xr-xedaweb/static/images/JwL2S2V.pngbin0 -> 120751 bytes
-rw-r--r--edaweb/static/images/PXL_20250314_150055804.jpg (renamed from static/images/PXL_20250314_150055804.jpg)bin1835356 -> 1835356 bytes
-rwxr-xr-xedaweb/static/images/PXL_20251108_063442686.MP.jpgbin0 -> 6945886 bytes
-rw-r--r--edaweb/static/images/PXL_20251109_072147683.jpgbin0 -> 1969656 bytes
-rw-r--r--edaweb/static/images/PXL_20251111_125628695.jpgbin0 -> 1608118 bytes
-rw-r--r--edaweb/static/images/PXL_20251115_180322252.jpgbin0 -> 1549576 bytes
-rw-r--r--edaweb/static/images/PXL_20251115_180349152.jpgbin0 -> 1244189 bytes
-rw-r--r--edaweb/static/images/PXL_20251130_222326376.jpgbin0 -> 1749091 bytes
-rw-r--r--edaweb/static/images/PXL_20260210_231506089.jpgbin0 -> 1546275 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/Screenshot_20210520-221830.png (renamed from static/images/Screenshot_20210520-221830.png)bin275641 -> 275641 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/Screenshot_20210527_122432.png (renamed from static/images/Screenshot_20210527_122432.png)bin1683456 -> 1683456 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/Screenshot_20210620-144127.png (renamed from static/images/Screenshot_20210620-144127.png)bin142673 -> 142673 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/Screenshot_20210620-231652.png (renamed from static/images/Screenshot_20210620-231652.png)bin133513 -> 133513 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/Screenshot_20210727-072303.png (renamed from static/images/Screenshot_20210727-072303.png)bin138225 -> 138225 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/Screenshot_20210727-072344.png (renamed from static/images/Screenshot_20210727-072344.png)bin129039 -> 129039 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/Screenshot_20210727-223004.png (renamed from static/images/Screenshot_20210727-223004.png)bin136574 -> 136574 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/Screenshot_20210731-181223.png (renamed from static/images/Screenshot_20210731-181223.png)bin359217 -> 359217 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/Screenshot_20210731-181229.png (renamed from static/images/Screenshot_20210731-181229.png)bin152242 -> 152242 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/Screenshot_20210811-125853.png (renamed from static/images/Screenshot_20210811-125853.png)bin129411 -> 129411 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/Screenshot_20210818-203828.png (renamed from static/images/Screenshot_20210818-203828.png)bin112321 -> 112321 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/Screenshot_20210825-131938.png (renamed from static/images/Screenshot_20210825-131938.png)bin120763 -> 120763 bytes
-rw-r--r--edaweb/static/images/Startech.jpg (renamed from static/images/Startech.jpg)bin456042 -> 456042 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/a4-5000.jpg (renamed from static/images/a4-5000.jpg)bin6252 -> 6252 bytes
-rwxr-xr-xedaweb/static/images/aLvcFjj.pngbin0 -> 23224 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/aaaaahh.jpg (renamed from static/images/aaaaahh.jpg)bin52325 -> 52325 bytes
-rw-r--r--edaweb/static/images/anti_nft_b.png (renamed from static/images/anti_nft_b.png)bin2311 -> 2311 bytes
-rw-r--r--edaweb/static/images/arenas.jpg (renamed from static/images/arenas.jpg)bin294229 -> 294229 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/basil.jpg (renamed from static/images/basil.jpg)bin6068 -> 6068 bytes
-rwxr-xr-xedaweb/static/images/bdd_fuel.pngbin0 -> 153407 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/bigshark.png (renamed from static/images/bigshark.png)bin2355827 -> 2355827 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/bob.gif (renamed from static/images/bob.gif)bin142993 -> 142993 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/braindamage.png (renamed from static/images/braindamage.png)bin22441 -> 22441 bytes
-rw-r--r--edaweb/static/images/catonlap.jpg (renamed from static/images/catonlap.jpg)bin68382 -> 68382 bytes
-rw-r--r--edaweb/static/images/chuddy.jpg (renamed from static/images/chuddy.jpg)bin78447 -> 78447 bytes
-rw-r--r--edaweb/static/images/cloudfree.png (renamed from static/images/cloudfree.png)bin3080 -> 3080 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/embedded_img2.png (renamed from static/images/embedded_img2.png)bin8613 -> 8613 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/embedded_img3.png (renamed from static/images/embedded_img3.png)bin18291 -> 18291 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/embedded_img4.png (renamed from static/images/embedded_img4.png)bin16801 -> 16801 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/embedded_img5.PNG (renamed from static/images/embedded_img5.PNG)bin11374 -> 11374 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/face.jpg (renamed from static/images/face.jpg)bin226207 -> 226207 bytes
-rw-r--r--edaweb/static/images/faceoff.jpgbin0 -> 1547618 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/first_server.jpg (renamed from static/images/first_server.jpg)bin2700813 -> 2700813 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/fstab.png (renamed from static/images/fstab.png)bin88618 -> 88618 bytes
-rw-r--r--edaweb/static/images/graduation.jpg (renamed from static/images/graduation.jpg)bin290228 -> 290228 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/greenboi.jpg (renamed from static/images/greenboi.jpg)bin17079 -> 17079 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/hpkvm_puttyconf.png (renamed from static/images/hpkvm_puttyconf.png)bin17830 -> 17830 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/hpkvm_serialconf.png (renamed from static/images/hpkvm_serialconf.png)bin13801 -> 13801 bytes
-rw-r--r--edaweb/static/images/i5-1145G7.png (renamed from static/images/i5-1145G7.png)bin118559 -> 118559 bytes
-rwxr-xr-xedaweb/static/images/iKVCEoy.pngbin0 -> 97879 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/icons.png (renamed from static/images/icons.png)bin46132 -> 46132 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/ioporn.jpg (renamed from static/images/ioporn.jpg)bin51451 -> 51451 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/its_true_1.jpg (renamed from static/images/its_true_1.jpg)bin71857 -> 71857 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/its_true_2.jpg (renamed from static/images/its_true_2.jpg)bin109263 -> 109263 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/j1800.jpg (renamed from static/images/j1800.jpg)bin1589479 -> 1589479 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/j5040.jpg (renamed from static/images/j5040.jpg)bin3220569 -> 3220569 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/j5040_server.jpg (renamed from static/images/j5040_server.jpg)bin2767061 -> 2767061 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/kvm_1.png (renamed from static/images/kvm_1.png)bin60072 -> 60072 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/kvm_2.png (renamed from static/images/kvm_2.png)bin150115 -> 150115 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/lackrack1.jpg (renamed from static/images/lackrack1.jpg)bin335971 -> 335971 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/lackrack2.jpg (renamed from static/images/lackrack2.jpg)bin381379 -> 381379 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/libreboot.jpg (renamed from static/images/libreboot.jpg)bin1910228 -> 1910228 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/liostore.png (renamed from static/images/liostore.png)bin691184 -> 691184 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/media_E9lTIldWUAEeT63.jpg (renamed from static/images/media_E9lTIldWUAEeT63.jpg)bin180897 -> 180897 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/media_FPus_2aXsAUhCu9.jpg (renamed from static/images/media_FPus_2aXsAUhCu9.jpg)bin480286 -> 480286 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/media_FRlRqYKXoAIw82O.jpg (renamed from static/images/media_FRlRqYKXoAIw82O.jpg)bin55076 -> 55076 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/media_FeP_m8FXEAAqcJs.jpg (renamed from static/images/media_FeP_m8FXEAAqcJs.jpg)bin279374 -> 279374 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/media_FfcNNZ2WYAAz97v.jpg (renamed from static/images/media_FfcNNZ2WYAAz97v.jpg)bin377136 -> 377136 bytes
-rw-r--r--edaweb/static/images/media_FlBsMq2XwAATJX5.jpg (renamed from static/images/media_FlBsMq2XwAATJX5.jpg)bin885129 -> 885129 bytes
-rw-r--r--edaweb/static/images/media_FlBsfDcWQAQhJdP.jpg (renamed from static/images/media_FlBsfDcWQAQhJdP.jpg)bin660235 -> 660235 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/minecraft.png (renamed from static/images/minecraft.png)bin27516 -> 27516 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/new_switch_opened.jpg (renamed from static/images/new_switch_opened.jpg)bin4348235 -> 4348235 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/newdiscord.jpg (renamed from static/images/newdiscord.jpg)bin56309 -> 56309 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/nicfan.jpg (renamed from static/images/nicfan.jpg)bin2593649 -> 2593649 bytes
-rw-r--r--edaweb/static/images/notstolenvalour4.png (renamed from static/images/notstolenvalour4.png)bin1752598 -> 1752598 bytes
-rw-r--r--edaweb/static/images/notstolenvalour5.png (renamed from static/images/notstolenvalour5.png)bin1703482 -> 1703482 bytes
-rw-r--r--edaweb/static/images/notstolenvalour8.png (renamed from static/images/notstolenvalour8.png)bin1706779 -> 1706779 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/oldpic.png (renamed from static/images/oldpic.png)bin938082 -> 938082 bytes
-rw-r--r--edaweb/static/images/pfsenseswissvpnportforwards.png (renamed from static/images/pfsenseswissvpnportforwards.png)bin118254 -> 118254 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/photo_2022-12-07_14-06-03.jpg (renamed from static/images/photo_2022-12-07_14-06-03.jpg)bin12097 -> 12097 bytes
-rwxr-xr-xedaweb/static/images/photo_2025-12-04_22-34-24.jpgbin0 -> 102750 bytes
-rw-r--r--edaweb/static/images/photo_5857106224099739202_y.jpg (renamed from static/images/photo_5857106224099739202_y.jpg)bin124721 -> 124721 bytes
-rw-r--r--edaweb/static/images/powerani.gif (renamed from static/images/powerani.gif)bin7203 -> 7203 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/profile_images_1598652418580963328_ENk7xKDw.jpg (renamed from static/images/profile_images_1598652418580963328_ENk7xKDw.jpg)bin42497 -> 42497 bytes
-rwxr-xr-xedaweb/static/images/rOJXmjG.pngbin0 -> 101799 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/rack1.jpg (renamed from static/images/rack1.jpg)bin210052 -> 210052 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/rack2.jpg (renamed from static/images/rack2.jpg)bin190057 -> 190057 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/router.jpg (renamed from static/images/router.jpg)bin694385 -> 694385 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/russian_isp.png (renamed from static/images/russian_isp.png)bin52664 -> 52664 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/russian_isp_abuse.png (renamed from static/images/russian_isp_abuse.png)bin52880 -> 52880 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/russian_nginx_logs.jpg (renamed from static/images/russian_nginx_logs.jpg)bin224155 -> 224155 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/russian_yt.jpg (renamed from static/images/russian_yt.jpg)bin130618 -> 130618 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/s-l1600.jpg (renamed from static/images/s-l1600.jpg)bin152914 -> 152914 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/s-l16001.jpg (renamed from static/images/s-l16001.jpg)bin226604 -> 226604 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/s-l500.jpg (renamed from static/images/s-l500.jpg)bin31862 -> 31862 bytes
-rw-r--r--edaweb/static/images/sample_ede336afca555579dd78f051e4a23feaa838716d.jpg (renamed from static/images/sample_ede336afca555579dd78f051e4a23feaa838716d.jpg)bin185850 -> 185850 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/selfie.jpg (renamed from static/images/selfie.jpg)bin73451 -> 73451 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/server.jpg (renamed from static/images/server.jpg)bin2578909 -> 2578909 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/server2.jpg (renamed from static/images/server2.jpg)bin2877532 -> 2877532 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/shark1.jpg (renamed from static/images/shark1.jpg)bin449065 -> 449065 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/shark2.jpg (renamed from static/images/shark2.jpg)bin433903 -> 433903 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/shark3.jpg (renamed from static/images/shark3.jpg)bin518122 -> 518122 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/shark3.png (renamed from static/images/shark3.png)bin2944760 -> 2944760 bytes
-rw-r--r--edaweb/static/images/shun-hashimoto-mio-chibana.gif (renamed from static/images/shun-hashimoto-mio-chibana.gif)bin1472535 -> 1472535 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/sicp.jpg (renamed from static/images/sicp.jpg)bin3664911 -> 3664911 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/startech_rack_1.jpg (renamed from static/images/startech_rack_1.jpg)bin3083071 -> 3083071 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/startech_rack_2.jpg (renamed from static/images/startech_rack_2.jpg)bin2093105 -> 2093105 bytes
-rw-r--r--edaweb/static/images/stolenvalour.jpg (renamed from static/images/stolenvalour.jpg)bin234621 -> 234621 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/sun.gif (renamed from static/images/sun.gif)bin3097 -> 3097 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/switch.jpg (renamed from static/images/switch.jpg)bin90618 -> 90618 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/switches.jpg (renamed from static/images/switches.jpg)bin3169089 -> 3169089 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/t30.jpg (renamed from static/images/t30.jpg)bin235413 -> 235413 bytes
-rw-r--r--edaweb/static/images/techdome.jpg (renamed from static/images/techdome.jpg)bin125311 -> 125311 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/telegrampic.jpg (renamed from static/images/telegrampic.jpg)bin138371 -> 138371 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/telegrampic2.jpg (renamed from static/images/telegrampic2.jpg)bin25752 -> 25752 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/testimonials.PNG (renamed from static/images/testimonials.PNG)bin190391 -> 190391 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/theNVMEVault.png (renamed from static/images/theNVMEVault.png)bin51977 -> 51977 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/twitterpic.jpg (renamed from static/images/twitterpic.jpg)bin14667 -> 14667 bytes
-rwxr-xr-xedaweb/static/images/v2Yfoou.jpgbin0 -> 165128 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/vcss-blue.gif (renamed from static/images/vcss-blue.gif)bin1759 -> 1759 bytes
-rw-r--r--edaweb/static/images/www.gif (renamed from static/images/www.gif)bin1531 -> 1531 bytes
-rwxr-xr-xedaweb/static/images/wxbKYVv.pngbin0 -> 123728 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/x200.jpg (renamed from static/images/x200.jpg)bin2732895 -> 2732895 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/xeon.jpg (renamed from static/images/xeon.jpg)bin571574 -> 571574 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/images/xeon_motherboard.jpg (renamed from static/images/xeon_motherboard.jpg)bin757343 -> 757343 bytes
-rw-r--r--[-rwxr-xr-x]edaweb/static/index.md (renamed from static/index.md)70
-rw-r--r--edaweb/static/papers/aai.pdfbin0 -> 311217 bytes
-rw-r--r--edaweb/static/papers/ar2.pdfbin0 -> 289686 bytes
-rw-r--r--edaweb/static/robots.txt7
-rw-r--r--[-rwxr-xr-x]edaweb/static/style.css (renamed from static/style.css)0
-rw-r--r--[-rwxr-xr-x]edaweb/templates/diary.html.j2 (renamed from templates/diary.html.j2)0
-rw-r--r--[-rwxr-xr-x]edaweb/templates/discord.html.j2 (renamed from templates/discord.html.j2)0
-rw-r--r--[-rwxr-xr-x]edaweb/templates/index.html.j2 (renamed from templates/index.html.j2)0
-rw-r--r--[-rwxr-xr-x]edaweb/templates/isocd.html.j2 (renamed from templates/isocd.html.j2)0
-rw-r--r--[-rwxr-xr-x]edaweb/templates/isocd_confirmation.html.j2 (renamed from templates/isocd_confirmation.html.j2)0
-rw-r--r--[-rwxr-xr-x]edaweb/templates/nhdl.html.j2 (renamed from templates/nhdl.html.j2)0
-rw-r--r--edaweb/templates/questions.html.j2 (renamed from templates/questions.html.j2)0
-rw-r--r--[-rwxr-xr-x]edaweb/templates/random.html.j2 (renamed from templates/random.html.j2)0
-rw-r--r--[-rwxr-xr-x]edaweb/templates/services.html.j2 (renamed from templates/services.html.j2)2
-rw-r--r--[-rwxr-xr-x]edaweb/templates/template.html.j2 (renamed from templates/template.html.j2)0
-rw-r--r--[-rwxr-xr-x]edaweb/templates/thought.html.j2 (renamed from templates/thought.html.j2)0
-rw-r--r--[-rwxr-xr-x]edaweb/templates/thoughts.html.j2 (renamed from templates/thoughts.html.j2)0
-rw-r--r--entrypoint.sh6
-rw-r--r--homelab-wiki/Dockerfile38
-rw-r--r--homelab-wiki/LocalSettings.php363
m---------nitter/nitter0
-rwxr-xr-xscripts/export.sh2
-rwxr-xr-xscripts/update.sh2
-rwxr-xr-xstatic/robots.txt2
242 files changed, 538 insertions, 355 deletions
diff --git a/.gitignore b/.gitignore
index 087b0b3..5cb2818 100755
--- a/.gitignore
+++ b/.gitignore
@@ -2,10 +2,10 @@
*.pub
homelab-wiki/wiki.env
homelab-wiki/images/*
-edaweb.conf
+*edaweb.conf
markdowns/
-static/images/random.jpg
-static/zips/*.zip
+*random.jpg
+*.zip
.nfs*
static/images/Thumbs.db
nitter/nitter.conf
diff --git a/.gitmodules b/.gitmodules
index 1b086ba..e69de29 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,4 +0,0 @@
-[submodule "nitter/nitter"]
- path = nitter/nitter
- url = git@github.com:zedeus/nitter.git
- branch = guest_accounts
diff --git a/Dockerfile b/Dockerfile
index f81f901..0cda40f 100755
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,14 +1,12 @@
-FROM ubuntu:22.04
+FROM ubuntu:jammy-20250404
MAINTAINER Eden Attenborough "eden.attenborough@outlook.com"
ENV TZ=Europe/London
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt-get update -y
-RUN apt-get install -y python3-pip python3-dev build-essential clang libffi-dev libxml2-dev libxslt-dev libjpeg-dev zlib1g-dev tmux cron
+RUN apt-get install -y python3-pip python3-dev build-essential clang libffi-dev libxml2-dev libxslt-dev libjpeg-dev zlib1g-dev
COPY . /app
WORKDIR /app
RUN pip3 install -r requirements.txt
-RUN echo "*/30 * * * * root python3 /app/cache.py > /proc/1/fd/1 2>/proc/1/fd/2" > /etc/crontab
-
ENTRYPOINT ["bash"]
CMD ["entrypoint.sh"]
diff --git a/Dockerfile_cron b/Dockerfile_cron
new file mode 100755
index 0000000..dea3208
--- /dev/null
+++ b/Dockerfile_cron
@@ -0,0 +1,11 @@
+FROM reg.reaweb.uk/edaweb
+MAINTAINER Eden Attenborough "eden.attenborough@outlook.com"
+ENV TZ=Europe/London
+RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
+RUN apt-get update -y
+RUN apt-get install -y tmux cron
+
+RUN echo "*/30 * * * * root python3 /app/edaweb/cache.py > /proc/1/fd/1 2>/proc/1/fd/2" > /etc/crontab
+
+ENTRYPOINT ["bash"]
+CMD ["cron_entrypoint.sh"]
diff --git a/cron_entrypoint.sh b/cron_entrypoint.sh
new file mode 100644
index 0000000..2d98169
--- /dev/null
+++ b/cron_entrypoint.sh
@@ -0,0 +1,6 @@
+rm -rvf /app/edaweb/edaweb.conf/
+ln -s /app/edaweb.conf /app/edaweb/edaweb.conf
+printenv | grep -v "no_proxy" >> /etc/environment
+# tmux new-session -d -s "cron" 'cron -f || bash && bash';
+cron -f
+
diff --git a/docker-compose.yml b/docker-compose.yml
index 3d5c58e..b1d984f 100755
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,49 +1,70 @@
-version: '3'
-services:
- edaweb:
- build:
- context: .
- dockerfile: Dockerfile
- image: reg.reaweb.uk/edaweb
- volumes:
- - /tmp/:/media/ISOs/
- - ./static/:/app/static/
- - ./edaweb.conf:/app/edaweb.conf
- - ./edaweb-docker.pem:/keys/docker-key.pem
- ports:
- - "6969:6969"
- networks:
- - db-network
- - edaweb-net
- external_links:
- - mariadb:mysql
- restart: unless-stopped
-
- homelab-wiki:
- build:
- context: ./homelab-wiki
- dockerfile: Dockerfile
- image: reg.reaweb.uk/edawiki2
- volumes:
- - ./homelab-wiki/images:/var/www/html/images
- - ./homelab-wiki/LocalSettings.php:/var/www/html/LocalSettings.php
- env_file:
- - ./homelab-wiki/wiki.env
- ports:
- - "6970:80"
- networks:
- - db-network
- - edaweb-net
- external_links:
- - mariadb:mysql
- restart: unless-stopped
-
-networks:
- edaweb-net:
- external:
- name: edaweb-net
-
- db-network:
- external:
- name: mariadb
-
+services:
+ edaweb:
+ build:
+ context: .
+ dockerfile: Dockerfile
+ image: reg.reaweb.uk/edaweb
+ volumes:
+ - /tmp/:/media/ISOs/
+ - ./edaweb/static/:/app/edaweb/static/
+ - ./edaweb.conf:/app/edaweb.conf
+ - edaweb-tmp:/tmp/
+ ports:
+ - "6969:6969"
+ external_links:
+ - mariadb:mysql
+ - transmission_1:transmission
+ mac_address: 44:c8:09:a7:d0:93
+ networks:
+ db-network:
+ rr-net:
+ ipv4_address: "192.168.23.13"
+ restart: unless-stopped
+
+ edaweb_cron:
+ build:
+ context: .
+ dockerfile: Dockerfile_cron
+ image: reg.reaweb.uk/edaweb_cron
+ volumes:
+ - /tmp/:/media/ISOs/
+ - ./edaweb/static/:/app/edaweb/static/
+ - ./edaweb.conf:/app/edaweb.conf
+ - ./edaweb-docker.pem:/keys/docker-key.pem
+ - edaweb-tmp:/tmp/
+ networks:
+ - db-network
+ external_links:
+ - mariadb:mysql
+ restart: unless-stopped
+
+ homelab-wiki:
+ build:
+ context: ./homelab-wiki
+ dockerfile: Dockerfile
+ image: reg.reaweb.uk/edawiki2
+ volumes:
+ - ./homelab-wiki/images:/var/www/html/images
+ - ./homelab-wiki/LocalSettings.php:/var/www/html/LocalSettings.php
+ env_file:
+ - ./homelab-wiki/wiki.env
+ ports:
+ - "6970:80"
+ networks:
+ - db-network
+ external_links:
+ - mariadb:mysql
+ restart: unless-stopped
+
+volumes:
+ edaweb-tmp:
+
+networks:
+ db-network:
+ external: true
+ name: mariadb
+
+ rr-net:
+ external: true
+ name: rr-net
+
diff --git a/app.py b/edaweb/app.py
index 47bb129..a7a0b1a 100755..100644
--- a/app.py
+++ b/edaweb/app.py
@@ -17,7 +17,7 @@ import io
app = flask.Flask(__name__)
CONFIG = configparser.ConfigParser(interpolation = None)
-CONFIG.read("edaweb.conf")
+CONFIG.read(os.path.join(os.path.dirname(__file__), "edaweb.conf"))
shown_images = set()
shown_sidebar_images = set()
@@ -64,14 +64,14 @@ def get_template_items(title, db):
@app.route("/~")
def index():
with database.Database() as db:
- with open(os.path.join("static", "index.md"), "r") as f:
+ with open(os.path.join(os.path.dirname(__file__), "static", "index.md"), "r") as f:
return flask.render_template(
"index.html.j2",
**get_template_items("eden's site :3", db),
days_till_ffs = datetime.datetime(2025, 11, 8) - datetime.datetime.now(),
markdown = parser.parse_text(f.read())[0],
featured_thoughts = db.get_featured_thoughts(),
- commits = db.get_cached_commits()[:15],
+ commits = services.get_recent_commits(db)[:15],
sidebar_img = get_sidebar_img(db)
)
@@ -79,6 +79,10 @@ def index():
def robots():
return flask.send_from_directory("static", "robots.txt")
+@app.route("/cow.txt")
+def moo():
+ return flask.send_from_directory("static", "cow.txt")
+
@app.route("/services")
def serve_services():
with database.Database() as db:
@@ -143,7 +147,7 @@ def get_thoughts():
@app.route("/img/<filename>")
def serve_image(filename):
- imdirpath = os.path.join(".", "static", "images")
+ imdirpath = os.path.join(os.path.dirname(__file__), "static", "images")
if filename in os.listdir(imdirpath):
try:
w = int(flask.request.args['w'])
@@ -185,7 +189,11 @@ def serve_iso_form():
@app.route("/zip/<zipfile>")
def serve_zip(zipfile):
- return flask.send_from_directory(os.path.join(".", "static", "zips"), zipfile)
+ return flask.send_from_directory(os.path.join(os.path.dirname(__file__), "static", "zips"), zipfile)
+
+@app.route("/pdf/<pdfname>")
+def serve_pdf(pdfname):
+ return flask.send_from_directory(os.path.join(os.path.dirname(__file__), "static", "papers"), pdfname)
@app.route("/nhdlredirect", methods = ["POST"])
def redirect_nhdl():
@@ -210,26 +218,26 @@ def get_iso_cd():
id_ = id_
)
-@app.route("/random")
-def serve_random():
- try:
- tags = flask.request.args['tags'].split(" ")
- except KeyError:
- flask.abort(400)
-
- sbi = services.get_random_image(tags)
- req = urllib.request.Request(sbi.imurl)
- mediaContent = urllib.request.urlopen(req).read()
- with open(os.path.join("static", "images", "random.jpg"), "wb") as f:
- f.write(mediaContent)
-
- with database.Database() as db:
- return flask.render_template(
- "random.html.j2",
- **get_template_items("random image", db),
- sbi = sbi,
- localimg = "/img/random.jpg?seed=%i" % random.randint(0, 9999)
- )
+#@app.route("/random")
+#def serve_random():
+# try:
+# tags = flask.request.args['tags'].split(" ")
+# except KeyError:
+# flask.abort(400)
+#
+# sbi = services.get_random_image(tags)
+# req = urllib.request.Request(sbi.imurl)
+# mediaContent = urllib.request.urlopen(req).read()
+# with open(os.path.join(os.path.dirname(__file__), "static", "images", "random.jpg"), "wb") as f:
+# f.write(mediaContent)
+#
+# with database.Database() as db:
+# return flask.render_template(
+# "random.html.j2",
+# **get_template_items("random image", db),
+# sbi = sbi,
+# localimg = "/img/random.jpg?seed=%i" % random.randint(0, 9999)
+# )
@app.route("/questions")
def serve_questions():
diff --git a/cache.py b/edaweb/cache.py
index 5b66e43..8694666 100644
--- a/cache.py
+++ b/edaweb/cache.py
@@ -1,5 +1,6 @@
import database
import services
+import json
def update_cache():
print("Updating cache...")
@@ -7,6 +8,7 @@ def update_cache():
db.update_commit_cache(services.request_recent_commits(since = db.get_last_commit_time()))
print("Finished adding github commits...")
db.append_qnas(services.scrape_whispa(db.config.get("qnas", "url"), since = db.get_oldest_qna()))
+ # print(json.dumps(services.scrape_whispa(db.config.get("qnas", "url"), since = db.get_oldest_qna()), indent = 4))
print("Finished parsing Q&As...")
print("Started getting docker information with SSH...")
diff --git a/database.py b/edaweb/database.py
index 49de9ef..c6553a6 100644
--- a/database.py
+++ b/edaweb/database.py
@@ -20,8 +20,11 @@ class Database:
passwd:str = None
def __enter__(self):
+ config_path = os.path.join(os.path.dirname(__file__), "..", "edaweb.conf")
+ if not os.path.exists(config_path):
+ raise FileNotFoundError("Could not find edaweb.conf config file")
self.config = configparser.ConfigParser(interpolation = None)
- self.config.read(os.path.join(os.path.dirname(__file__), "edaweb.conf"))
+ self.config.read(config_path)
if self.safeLogin:
self.__connection = pymysql.connect(
@@ -44,7 +47,7 @@ class Database:
def get_header_links(self):
with self.__connection.cursor() as cursor:
- cursor.execute("SELECT name, link FROM headerLinks ORDER BY name;")
+ cursor.execute("SELECT name, link FROM headerLinks WHERE display = true ORDER BY name;")
return cursor.fetchall()
def get_image(self, imageName):
@@ -64,7 +67,7 @@ class Database:
def get_header_articles(self):
with self.__connection.cursor() as cursor:
- cursor.execute("SELECT articleName, link FROM headerArticles;")
+ cursor.execute("SELECT articleName, link FROM headerArticles WHERE display = true;")
return cursor.fetchall()
def get_all_categories(self):
@@ -163,7 +166,7 @@ class Database:
urlparse(i[1]).path.split("/")[2],
urlparse(i[1]).path.split("/")[-1]
),
- "datetime": i[2],
+ "datetime": i[2].timestamp(),
"stats": {
"additions": i[3],
"deletions": i[4],
diff --git a/downloader.py b/edaweb/downloader.py
index 4b2af2f..4b2af2f 100755..100644
--- a/downloader.py
+++ b/edaweb/downloader.py
diff --git a/parser.py b/edaweb/parser.py
index a851846..00daf3b 100755..100644
--- a/parser.py
+++ b/edaweb/parser.py
@@ -49,6 +49,14 @@ class EdawebRenderer(mistune.HTMLRenderer):
return "<h%d id='%s'>%s <a class='header_linker' href='#%s'>[#]</a></h%d>" % (
level, hash_, text, hash_, level
)
+
+ # it would appear that the escape=False option does not work with custom renderers,
+ # so we set it to True and just have these silly function stubs to include them manually
+ def inline_html(self, html):
+ return html
+
+ def block_html(self, html):
+ return html
def get_thought_from_id(db, id_):
category_name, title, dt, markdown, redirect = db.get_thought(id_)
@@ -64,7 +72,8 @@ def parse_file(path):
def parse_text(unformatted):
md = mistune.create_markdown(
renderer = EdawebRenderer(),
- plugins = ["strikethrough", "table", "url", "task_lists", "def_list"]
+ plugins = ["strikethrough", "table", "url", "task_lists", "def_list"],
+ # escape = False
)
html = md(unformatted)
if html == "":
diff --git a/services.py b/edaweb/services.py
index 5d25271..b01bee2 100755..100644
--- a/services.py
+++ b/edaweb/services.py
@@ -22,8 +22,11 @@ import time
import os
theLastId = 0
+config_path = os.path.join(os.path.dirname(__file__), "..", "edaweb.conf")
+if not os.path.exists(config_path):
+ raise FileNotFoundError("Could not find edaweb.conf config file")
CONFIG = configparser.ConfigParser(interpolation = None)
-CONFIG.read(os.path.join(os.path.dirname(__file__), "edaweb.conf"))
+CONFIG.read(config_path)
def humanbytes(B):
'Return the given bytes as a human friendly KB, MB, GB, or TB string'
@@ -247,8 +250,29 @@ def parse_tweet(tweet_url):
return dt, replying_to, text, images
-def scrape_whispa(whispa_url, since):
- tree = html.fromstring(requests.get(whispa_url).content.decode())
+def scrape_whispa(whispa_url, since = None):
+ def query_answer(answer_url, max_retries = 10):
+ for i in range(max_retries):
+ try:
+ return requests.get(answer_url)
+ except requests.exceptions.ConnectionError:
+ s = 5.05 * (i + 1)
+ print("Connection timed out, retrying in %.2fs" % s)
+ time.sleep(s)
+ continue
+
+ # add a bit of wiggle room in case i don't answer the questions in order (i often do this)
+ if since is None:
+ stop_at = datetime.datetime(year = 2001, month = 8, day = 12)
+ else:
+ stop_at = since - datetime.timedelta(days = 14)
+ print("The newest Q&A timestamp in the database was %s, we will stop looking at %s." % (since.astimezone().isoformat(), stop_at.astimezone().isoformat()))
+
+ html_ = requests.get(whispa_url).content.decode()
+ # with open("temp.html", "w") as f:
+ # f.write(html_)
+
+ tree = html.fromstring(html_)
qnas = []
# we're not doing proper HTML scraping here really... since the site uses client side rendering
# we rather parse the JS scripts to get the JSON payload of useful information... sadly this looks horrible
@@ -256,18 +280,37 @@ def scrape_whispa(whispa_url, since):
js = str(script.text)
if "receivedFeedback" in js:
# my god this is horrible...
- for j in json.loads(json.loads(js[19:-1])[1][2:])[0][3]["loadedUser"]["receivedFeedback"]:
- dt = datetime.datetime.fromisoformat(j["childFeedback"][0]["createdAt"][:-1])
-
- qnas.append({
- # "id": int(str(maths.modf(maths.log(int(j["id"], 16)))[0])[2:]),
+ parsed_json = json.loads(json.loads(js[19:-1])[1][2:])[0][3]["loadedUser"]["receivedFeedback"]
+ # print(json.dumps(parsed_json, indent = 4))
+ # with open("whispas_%i.json" % i, "w") as f:
+ # json.dump(parsed_json, f, indent = 4)
+ for j in parsed_json:
+ if j["_count"]["childFeedback"] < 0:
+ continue
+
+ answer_url = "https://apiv4.whispa.sh/feedbacks/%s/children/public" % j["id"]
+ req = query_answer(answer_url)
+ try:
+ firstanswer = req.json()["data"][0]
+ except IndexError:
+ continue
+ dt = datetime.datetime.fromisoformat(firstanswer["createdAt"][:-1])
+
+ qna = {
+ # "id": int(j["id"], base = 16),
"id": int(dt.timestamp()),
- "link": None,
+ "link": answer_url,
"datetime": dt,
"question": j["content"],
- "answer": j["childFeedback"][0]["content"],
+ "answer": firstanswer["content"],
"host": "whispa.sh"
- })
+ }
+ print(qna)
+ qnas.append(qna)
+ time.sleep(2.03)
+ if dt <= stop_at:
+ print("Met the threshold for oldest Q&A, so stopped looking.")
+ break
return qnas
def get_docker_containers(host, ssh_key_path):
@@ -281,12 +324,24 @@ def get_docker_containers(host, ssh_key_path):
).run('docker ps -a -s --format "table {{.Names}};{{.Status}};{{.Image}}"', hide = True)
return [line.split(";") for line in result.stdout.split("\n")[1:-1]]
+def get_uptimes(host, ssh_key_path):
+ return fabric.Connection(
+ host = host,
+ user = "root",
+ connect_kwargs = {
+ "key_filename": ssh_key_path,
+ "look_for_keys": False
+ }
+ ).run('uptime -p', hide = True).stdout.strip()
+
def cache_all_docker_containers(ssh_key_path):
containers = {}
containers["containers"] = {}
+ containers["uptimes"] = {}
for host, name in CONFIG["docker_hosts"].items():
- print(host)
+ print(host, name)
containers["containers"][(host, name)] = get_docker_containers(host, ssh_key_path)
+ containers["uptimes"][(host, name)] = get_uptimes(host, ssh_key_path)
containers["cachetime"] = "Docker information last updated at %s" % str(datetime.datetime.now())
with open("/tmp/docker-cache.json", "wb") as f:
@@ -336,7 +391,7 @@ def get_torrent_stats():
"Uploaded:": humanbytes(s["cumulative-stats"]["uploadedBytes"]),
"Active time:": str(datetime.timedelta(seconds = s["cumulative-stats"]["secondsActive"])),
"Files added:": s["cumulative-stats"]["filesAdded"],
- "Current upload speed": humanbytes(s["uploadSpeed"]) + "s/S",
+ "Current upload speed:": humanbytes(s["uploadSpeed"]) + "s/S",
"Current download speed:": humanbytes(s["downloadSpeed"]) + "s/S"
}
@@ -344,17 +399,25 @@ def get_torrent_stats():
def get_pihole_stats():
return PiHole.GetSummary(CONFIG.get("pihole", "url"), CONFIG.get("pihole", "key"), True)
-if __name__ == "__main__":
- # print(get_trans_stats())
-
- #print(scrape_nitter(CONFIG.get("twitter", "diary_account"), 1697430888617840909))
- # print(scrape_nitter("estrogenizedboy", 1698107440489734640))
+def get_recent_commits(db, max_per_repo = 3):
+ cache = db.get_cached_commits()
+ num_per_repo = {}
+ out = []
+ for commit in cache:
+ if commit["repo"] not in num_per_repo.keys():
+ num_per_repo[commit["repo"]] = 0
- # print(parse_tweet("https://nitter.net/HONMISGENDERER/status/1694231618443981161#m"))
+ num_per_repo[commit["repo"]] += 1
+ if num_per_repo[commit["repo"]] <= max_per_repo:
+ out.append(commit)
- # print(request_recent_commits(since = datetime.datetime.now() - datetime.timedelta(days=30)))
+ return sorted(out, key = lambda a: a["datetime"], reverse = True)
- # print(scrape_whispa(CONFIG.get("qnas", "url"), datetime.datetime.fromtimestamp(0.0)))
- print(cache_all_docker_containers(os.path.join(os.path.dirname(__file__), "edaweb-docker.pem")))
+if __name__ == "__main__":
+ # print(scrape_whispa(CONFIG.get("qnas", "url")))
+ # import database
+ print(cache_all_docker_containers(os.path.join(os.path.dirname(__file__), "..", "edaweb-docker.pem")))
+ print(get_all_docker_containers())
- # print(get_torrent_stats())
+ # with database.Database() as db:
+ # print(json.dumps(get_recent_commits(db), indent=4))
diff --git a/edaweb/static/cow.txt b/edaweb/static/cow.txt
new file mode 100644
index 0000000..41aa536
--- /dev/null
+++ b/edaweb/static/cow.txt
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+ ..........................
+ ....*o|||||||8#@@@@@@@@@@@@@@@@@@@@@@@###&|o:_..
+ ..*:o|||&8##@###8888888######@#@###########################|*...
+ .:o|||8#####8888|:::**. *&########################@@################&o_
+ .*o&8###@#8&o*_. :###@##############@########################@@##&o_
+ .*o8########& :##@#@##############@############################@###|_
+ .*o|8##########8o .#######################################################&o_
+ *&##|_ ..*&##8&o*|88888|_ _#######################################@##################|.
+ *#####& *&######&o_..*o|o:_ .&##o _###########################################################&_
+ _##8*##8 .|88|:::|#######8###8|*:_ .&#@@8 _##@@@########################################################&_
+ _#@8_##8_ *8#8|*_ _:|#####&&####8 .&##############################################################|
+ _#@8.|##8_ _::o###8&##8 .|##@############################8###########################@@#|_
+ *###o.|88o ..*&####|..##& _|##########################8|_ .|#############################8
+ *|###|_ ._&####8|*_ _*_ _::&8888888888888888|::*_ .|##@####@@@##################|
+ *&###|_ _:_ .&88###8|*_ ..... .|#####@@@##################8
+ .##@#& _##& .|##o _#@@#@#| .|#######&:_ _|###@####################8
+ .:8##8o _o:*&##| *##8_.&@@##@#| _::o8#8|::|#####|_ _|#################88###8
+ .&##&*_ *###o_###| .|##8*&##|*###o _###8####8|_ _:|###|_ .*o|||o:_ _:::&8888888888|_ _##8
+ .###|_. _###o *###|*&#######8 *##8 .##8_ _:|###|_ _|###|_ .&########o _##&
+ _|####8|&##8:_ _|#########88o .##8 *##& _|###o .|###o .#########| .o##o
+ o#8|*:#@@###o _:::*__*_ _##8_ _##8_ _&##|_ *##8_ *8#####8|_ .*oo:_ o##|
+ *###o.&#####& _oo* .8##& .8##8_ .|##& o##& _::::_.*o|8######|_ .##8.
+ _###&o&##8_:*_ .###& .###|_&#####| _##8 :###o *ooo&#########@#@#& ....:##&
+ .|8||###&. _**_ .###88##|*&###|*._&##& *|##8_ *o&####@@####@@######& .*o||||||&#######8_
+ *&###o _|88##8_ _:8######|*:###|_ _##################88|_ *&#################&
+ *#####o *&8o *##& _:::*_.&##|_ _#@##############8_ :##################8*
+ .###&##8_.|88o *&8o _@@& .###| .&####@#########|_ .####@###@@########8*
+ _##&.|###|_.... .|88o _##8* *&###|_ *###o _:&88######8|_ .*o|||##################o
+ _##8_ _|########|_ .*o8####&#@@#@##o *#@8 _*:*. .&###@###################|
+ .|##& _:::::&##& .*&##############@#8_ .###o _#@####################|_
+ .&##|_ .&##8_ *o&####################8_ *##& .&#####@@############8*
+ .|##8_.&###&####8_ _########################8**##& _##################|_
+ .&###&##888888##8_ .|88######@###########|*######o _|8###############|_
+ .&#####o *###|_ _::::::*o##8**o##8 .|###8o .&##@#############&*
+ .|####o _|###|_ _##8.*&##& _*_ .#################|
+ _*_ _|###|_.. .|#####8|_ *&#@#########8###&
+ *#######&|o:_... ..*:::*. ......._:o&8####888&o:#####8_
+ _###|&888#####@#####&|||o:_........................._:o||||8##@@@@####8|:*_ _:::*_
+ .|#@###o _:::o#@#888######@@@@@@@@@@@@@@@@@@@@@@@@#####888|::::::**_
+ _::*_ :##& *&8|_:::::::::::::::::::::::::**_
+ .###8||&##8o
+ _|888888|_
+
+
+
+
+
+
+
+
+
+
diff --git a/static/images/0don0t4ofuc41-3776935852.jpg b/edaweb/static/images/0don0t4ofuc41-3776935852.jpg
index f65e951..f65e951 100755..100644
--- a/static/images/0don0t4ofuc41-3776935852.jpg
+++ b/edaweb/static/images/0don0t4ofuc41-3776935852.jpg
Binary files differ
diff --git a/static/images/1544552064683.jpg b/edaweb/static/images/1544552064683.jpg
index 20a6527..20a6527 100644
--- a/static/images/1544552064683.jpg
+++ b/edaweb/static/images/1544552064683.jpg
Binary files differ
diff --git a/static/images/1549844950404.jpg b/edaweb/static/images/1549844950404.jpg
index 5197c11..5197c11 100644
--- a/static/images/1549844950404.jpg
+++ b/edaweb/static/images/1549844950404.jpg
Binary files differ
diff --git a/static/images/1555824429083.png b/edaweb/static/images/1555824429083.png
index 5b2fd0b..5b2fd0b 100644
--- a/static/images/1555824429083.png
+++ b/edaweb/static/images/1555824429083.png
Binary files differ
diff --git a/static/images/1555824491105.png b/edaweb/static/images/1555824491105.png
index 2e20fca..2e20fca 100644
--- a/static/images/1555824491105.png
+++ b/edaweb/static/images/1555824491105.png
Binary files differ
diff --git a/edaweb/static/images/1583581996540.jpg b/edaweb/static/images/1583581996540.jpg
new file mode 100755
index 0000000..53ceaae
--- /dev/null
+++ b/edaweb/static/images/1583581996540.jpg
Binary files differ
diff --git a/static/images/1671540582317176.png b/edaweb/static/images/1671540582317176.png
index dd741d3..dd741d3 100644
--- a/static/images/1671540582317176.png
+++ b/edaweb/static/images/1671540582317176.png
Binary files differ
diff --git a/static/images/1urouter.jpg b/edaweb/static/images/1urouter.jpg
index b295e59..b295e59 100755..100644
--- a/static/images/1urouter.jpg
+++ b/edaweb/static/images/1urouter.jpg
Binary files differ
diff --git a/static/images/20220401_222149.jpg b/edaweb/static/images/20220401_222149.jpg
index d9fecae..d9fecae 100644
--- a/static/images/20220401_222149.jpg
+++ b/edaweb/static/images/20220401_222149.jpg
Binary files differ
diff --git a/edaweb/static/images/20251111_102045.jpg b/edaweb/static/images/20251111_102045.jpg
new file mode 100755
index 0000000..9f4c94b
--- /dev/null
+++ b/edaweb/static/images/20251111_102045.jpg
Binary files differ
diff --git a/edaweb/static/images/20251111_102045.png b/edaweb/static/images/20251111_102045.png
new file mode 100755
index 0000000..e7d7700
--- /dev/null
+++ b/edaweb/static/images/20251111_102045.png
Binary files differ
diff --git a/edaweb/static/images/2209509307.jpg b/edaweb/static/images/2209509307.jpg
new file mode 100755
index 0000000..1b5d515
--- /dev/null
+++ b/edaweb/static/images/2209509307.jpg
Binary files differ
diff --git a/edaweb/static/images/2684330373.jpg b/edaweb/static/images/2684330373.jpg
new file mode 100755
index 0000000..b050888
--- /dev/null
+++ b/edaweb/static/images/2684330373.jpg
Binary files differ
diff --git a/static/images/324162a23865a6a7e75761871d29935314cbc2b3.jpg b/edaweb/static/images/324162a23865a6a7e75761871d29935314cbc2b3.jpg
index cede48f..cede48f 100644
--- a/static/images/324162a23865a6a7e75761871d29935314cbc2b3.jpg
+++ b/edaweb/static/images/324162a23865a6a7e75761871d29935314cbc2b3.jpg
Binary files differ
diff --git a/static/images/3502e26d0181c684bc17b56188bde6e80569d191_full.jpg b/edaweb/static/images/3502e26d0181c684bc17b56188bde6e80569d191_full.jpg
index 1f75924..1f75924 100755..100644
--- a/static/images/3502e26d0181c684bc17b56188bde6e80569d191_full.jpg
+++ b/edaweb/static/images/3502e26d0181c684bc17b56188bde6e80569d191_full.jpg
Binary files differ
diff --git a/static/images/5600x.jpg b/edaweb/static/images/5600x.jpg
index f3995b2..f3995b2 100644
--- a/static/images/5600x.jpg
+++ b/edaweb/static/images/5600x.jpg
Binary files differ
diff --git a/static/images/9400t.jpg b/edaweb/static/images/9400t.jpg
index 175e8f1..175e8f1 100755..100644
--- a/static/images/9400t.jpg
+++ b/edaweb/static/images/9400t.jpg
Binary files differ
diff --git a/static/images/9400t_cooler.jpg b/edaweb/static/images/9400t_cooler.jpg
index dcfaf27..dcfaf27 100755..100644
--- a/static/images/9400t_cooler.jpg
+++ b/edaweb/static/images/9400t_cooler.jpg
Binary files differ
diff --git a/static/images/E1NlPc1X0AEkB-s.png b/edaweb/static/images/E1NlPc1X0AEkB-s.png
index b0be028..b0be028 100755..100644
--- a/static/images/E1NlPc1X0AEkB-s.png
+++ b/edaweb/static/images/E1NlPc1X0AEkB-s.png
Binary files differ
diff --git a/static/images/E3xdm-hWYAEADNx.jpg b/edaweb/static/images/E3xdm-hWYAEADNx.jpg
index d14513d..d14513d 100755..100644
--- a/static/images/E3xdm-hWYAEADNx.jpg
+++ b/edaweb/static/images/E3xdm-hWYAEADNx.jpg
Binary files differ
diff --git a/static/images/E4WhXAvWYAIFwEa.png b/edaweb/static/images/E4WhXAvWYAIFwEa.png
index 144eb45..144eb45 100755..100644
--- a/static/images/E4WhXAvWYAIFwEa.png
+++ b/edaweb/static/images/E4WhXAvWYAIFwEa.png
Binary files differ
diff --git a/static/images/E4cjVaPXEAU83U0.png b/edaweb/static/images/E4cjVaPXEAU83U0.png
index 941a436..941a436 100755..100644
--- a/static/images/E4cjVaPXEAU83U0.png
+++ b/edaweb/static/images/E4cjVaPXEAU83U0.png
Binary files differ
diff --git a/static/images/E7ODIBeX0AAivRV.jpg b/edaweb/static/images/E7ODIBeX0AAivRV.jpg
index dc52196..dc52196 100755..100644
--- a/static/images/E7ODIBeX0AAivRV.jpg
+++ b/edaweb/static/images/E7ODIBeX0AAivRV.jpg
Binary files differ
diff --git a/static/images/E7ODIZEWUAMQjty.jpg b/edaweb/static/images/E7ODIZEWUAMQjty.jpg
index 2e90eda..2e90eda 100755..100644
--- a/static/images/E7ODIZEWUAMQjty.jpg
+++ b/edaweb/static/images/E7ODIZEWUAMQjty.jpg
Binary files differ
diff --git a/static/images/E7ODIv0WUAUp-ad.jpg b/edaweb/static/images/E7ODIv0WUAUp-ad.jpg
index 97e704e..97e704e 100755..100644
--- a/static/images/E7ODIv0WUAUp-ad.jpg
+++ b/edaweb/static/images/E7ODIv0WUAUp-ad.jpg
Binary files differ
diff --git a/static/images/E7ODJELX0AAVqna.jpg b/edaweb/static/images/E7ODJELX0AAVqna.jpg
index eedfb14..eedfb14 100755..100644
--- a/static/images/E7ODJELX0AAVqna.jpg
+++ b/edaweb/static/images/E7ODJELX0AAVqna.jpg
Binary files differ
diff --git a/static/images/EbmVCYKWkAAwXKW.jpg b/edaweb/static/images/EbmVCYKWkAAwXKW.jpg
index 20b3a19..20b3a19 100755..100644
--- a/static/images/EbmVCYKWkAAwXKW.jpg
+++ b/edaweb/static/images/EbmVCYKWkAAwXKW.jpg
Binary files differ
diff --git a/static/images/Ffi1ducXEAArXDg.jpg b/edaweb/static/images/Ffi1ducXEAArXDg.jpg
index 5c31cc5..5c31cc5 100644
--- a/static/images/Ffi1ducXEAArXDg.jpg
+++ b/edaweb/static/images/Ffi1ducXEAArXDg.jpg
Binary files differ
diff --git a/static/images/GGBDzuSXMAA1Ktk.jpg b/edaweb/static/images/GGBDzuSXMAA1Ktk.jpg
index 35e04e1..35e04e1 100644
--- a/static/images/GGBDzuSXMAA1Ktk.jpg
+++ b/edaweb/static/images/GGBDzuSXMAA1Ktk.jpg
Binary files differ
diff --git a/static/images/GSxGe_rXQAAgEhj.jpg b/edaweb/static/images/GSxGe_rXQAAgEhj.jpg
index 0351920..0351920 100644
--- a/static/images/GSxGe_rXQAAgEhj.jpg
+++ b/edaweb/static/images/GSxGe_rXQAAgEhj.jpg
Binary files differ
diff --git a/static/images/GTq-GOgWQAErvCp.jpg b/edaweb/static/images/GTq-GOgWQAErvCp.jpg
index 6a2f7b4..6a2f7b4 100644
--- a/static/images/GTq-GOgWQAErvCp.jpg
+++ b/edaweb/static/images/GTq-GOgWQAErvCp.jpg
Binary files differ
diff --git a/edaweb/static/images/GZhgzaK.png b/edaweb/static/images/GZhgzaK.png
new file mode 100755
index 0000000..c73e8b4
--- /dev/null
+++ b/edaweb/static/images/GZhgzaK.png
Binary files differ
diff --git a/static/images/GcyexeCW0AAYssz.jpg b/edaweb/static/images/GcyexeCW0AAYssz.jpg
index c0762a8..c0762a8 100644
--- a/static/images/GcyexeCW0AAYssz.jpg
+++ b/edaweb/static/images/GcyexeCW0AAYssz.jpg
Binary files differ
diff --git a/edaweb/static/images/GegzRla.png b/edaweb/static/images/GegzRla.png
new file mode 100755
index 0000000..cf12555
--- /dev/null
+++ b/edaweb/static/images/GegzRla.png
Binary files differ
diff --git a/static/images/IMG_-g4wqat.jpg b/edaweb/static/images/IMG_-g4wqat.jpg
index 9f05aaf..9f05aaf 100755..100644
--- a/static/images/IMG_-g4wqat.jpg
+++ b/edaweb/static/images/IMG_-g4wqat.jpg
Binary files differ
diff --git a/static/images/IMG_1602.jpg b/edaweb/static/images/IMG_1602.jpg
index d1937fb..d1937fb 100644
--- a/static/images/IMG_1602.jpg
+++ b/edaweb/static/images/IMG_1602.jpg
Binary files differ
diff --git a/static/images/IMG_1603.jpg b/edaweb/static/images/IMG_1603.jpg
index 4d3e8c1..4d3e8c1 100644
--- a/static/images/IMG_1603.jpg
+++ b/edaweb/static/images/IMG_1603.jpg
Binary files differ
diff --git a/static/images/IMG_1604.jpg b/edaweb/static/images/IMG_1604.jpg
index 4cc82c3..4cc82c3 100644
--- a/static/images/IMG_1604.jpg
+++ b/edaweb/static/images/IMG_1604.jpg
Binary files differ
diff --git a/static/images/IMG_1605.jpg b/edaweb/static/images/IMG_1605.jpg
index 38d6770..38d6770 100644
--- a/static/images/IMG_1605.jpg
+++ b/edaweb/static/images/IMG_1605.jpg
Binary files differ
diff --git a/static/images/IMG_1606.jpg b/edaweb/static/images/IMG_1606.jpg
index fcbe2a4..fcbe2a4 100644
--- a/static/images/IMG_1606.jpg
+++ b/edaweb/static/images/IMG_1606.jpg
Binary files differ
diff --git a/static/images/IMG_1607.jpg b/edaweb/static/images/IMG_1607.jpg
index 825e338..825e338 100644
--- a/static/images/IMG_1607.jpg
+++ b/edaweb/static/images/IMG_1607.jpg
Binary files differ
diff --git a/static/images/IMG_1609.jpg b/edaweb/static/images/IMG_1609.jpg
index 6b7d834..6b7d834 100644
--- a/static/images/IMG_1609.jpg
+++ b/edaweb/static/images/IMG_1609.jpg
Binary files differ
diff --git a/static/images/IMG_1610.jpg b/edaweb/static/images/IMG_1610.jpg
index d201596..d201596 100644
--- a/static/images/IMG_1610.jpg
+++ b/edaweb/static/images/IMG_1610.jpg
Binary files differ
diff --git a/static/images/IMG_1611.jpg b/edaweb/static/images/IMG_1611.jpg
index 9eb1af5..9eb1af5 100644
--- a/static/images/IMG_1611.jpg
+++ b/edaweb/static/images/IMG_1611.jpg
Binary files differ
diff --git a/static/images/IMG_1612.jpg b/edaweb/static/images/IMG_1612.jpg
index f176c17..f176c17 100644
--- a/static/images/IMG_1612.jpg
+++ b/edaweb/static/images/IMG_1612.jpg
Binary files differ
diff --git a/static/images/IMG_1613.png b/edaweb/static/images/IMG_1613.png
index 63b743a..63b743a 100644
--- a/static/images/IMG_1613.png
+++ b/edaweb/static/images/IMG_1613.png
Binary files differ
diff --git a/static/images/IMG_1614.png b/edaweb/static/images/IMG_1614.png
index 349afb7..349afb7 100644
--- a/static/images/IMG_1614.png
+++ b/edaweb/static/images/IMG_1614.png
Binary files differ
diff --git a/static/images/IMG_1615.jpg b/edaweb/static/images/IMG_1615.jpg
index da42a2b..da42a2b 100644
--- a/static/images/IMG_1615.jpg
+++ b/edaweb/static/images/IMG_1615.jpg
Binary files differ
diff --git a/static/images/IMG_1616.jpg b/edaweb/static/images/IMG_1616.jpg
index 6f83c38..6f83c38 100644
--- a/static/images/IMG_1616.jpg
+++ b/edaweb/static/images/IMG_1616.jpg
Binary files differ
diff --git a/static/images/IMG_1617.jpg b/edaweb/static/images/IMG_1617.jpg
index 7528c7d..7528c7d 100644
--- a/static/images/IMG_1617.jpg
+++ b/edaweb/static/images/IMG_1617.jpg
Binary files differ
diff --git a/static/images/IMG_1618.jpg b/edaweb/static/images/IMG_1618.jpg
index 9b82ea1..9b82ea1 100644
--- a/static/images/IMG_1618.jpg
+++ b/edaweb/static/images/IMG_1618.jpg
Binary files differ
diff --git a/static/images/IMG_1619.jpg b/edaweb/static/images/IMG_1619.jpg
index ccae28a..ccae28a 100644
--- a/static/images/IMG_1619.jpg
+++ b/edaweb/static/images/IMG_1619.jpg
Binary files differ
diff --git a/static/images/IMG_1620.jpg b/edaweb/static/images/IMG_1620.jpg
index 54e92d6..54e92d6 100644
--- a/static/images/IMG_1620.jpg
+++ b/edaweb/static/images/IMG_1620.jpg
Binary files differ
diff --git a/static/images/IMG_1621.jpg b/edaweb/static/images/IMG_1621.jpg
index 5aebae0..5aebae0 100644
--- a/static/images/IMG_1621.jpg
+++ b/edaweb/static/images/IMG_1621.jpg
Binary files differ
diff --git a/static/images/IMG_1622.jpg b/edaweb/static/images/IMG_1622.jpg
index 56cc9c3..56cc9c3 100644
--- a/static/images/IMG_1622.jpg
+++ b/edaweb/static/images/IMG_1622.jpg
Binary files differ
diff --git a/static/images/IMG_1623.jpg b/edaweb/static/images/IMG_1623.jpg
index 43d0107..43d0107 100644
--- a/static/images/IMG_1623.jpg
+++ b/edaweb/static/images/IMG_1623.jpg
Binary files differ
diff --git a/static/images/IMG_1624.png b/edaweb/static/images/IMG_1624.png
index 4fd690f..4fd690f 100644
--- a/static/images/IMG_1624.png
+++ b/edaweb/static/images/IMG_1624.png
Binary files differ
diff --git a/static/images/IMG_1625.jpg b/edaweb/static/images/IMG_1625.jpg
index 496a7fa..496a7fa 100644
--- a/static/images/IMG_1625.jpg
+++ b/edaweb/static/images/IMG_1625.jpg
Binary files differ
diff --git a/static/images/IMG_1626.jpg b/edaweb/static/images/IMG_1626.jpg
index 90060fb..90060fb 100644
--- a/static/images/IMG_1626.jpg
+++ b/edaweb/static/images/IMG_1626.jpg
Binary files differ
diff --git a/static/images/IMG_1627.jpg b/edaweb/static/images/IMG_1627.jpg
index 90c4f49..90c4f49 100644
--- a/static/images/IMG_1627.jpg
+++ b/edaweb/static/images/IMG_1627.jpg
Binary files differ
diff --git a/static/images/IMG_1628.jpg b/edaweb/static/images/IMG_1628.jpg
index f2cc8c6..f2cc8c6 100644
--- a/static/images/IMG_1628.jpg
+++ b/edaweb/static/images/IMG_1628.jpg
Binary files differ
diff --git a/static/images/IMG_1629.jpg b/edaweb/static/images/IMG_1629.jpg
index b19b03e..b19b03e 100644
--- a/static/images/IMG_1629.jpg
+++ b/edaweb/static/images/IMG_1629.jpg
Binary files differ
diff --git a/static/images/IMG_1630.jpg b/edaweb/static/images/IMG_1630.jpg
index ddef77b..ddef77b 100644
--- a/static/images/IMG_1630.jpg
+++ b/edaweb/static/images/IMG_1630.jpg
Binary files differ
diff --git a/static/images/IMG_1632.jpg b/edaweb/static/images/IMG_1632.jpg
index 070615a..070615a 100644
--- a/static/images/IMG_1632.jpg
+++ b/edaweb/static/images/IMG_1632.jpg
Binary files differ
diff --git a/static/images/IMG_1633.jpg b/edaweb/static/images/IMG_1633.jpg
index 6fa7ae8..6fa7ae8 100644
--- a/static/images/IMG_1633.jpg
+++ b/edaweb/static/images/IMG_1633.jpg
Binary files differ
diff --git a/static/images/IMG_1636.jpg b/edaweb/static/images/IMG_1636.jpg
index a3de5ad..a3de5ad 100644
--- a/static/images/IMG_1636.jpg
+++ b/edaweb/static/images/IMG_1636.jpg
Binary files differ
diff --git a/static/images/IMG_1637.jpg b/edaweb/static/images/IMG_1637.jpg
index 8e6b489..8e6b489 100644
--- a/static/images/IMG_1637.jpg
+++ b/edaweb/static/images/IMG_1637.jpg
Binary files differ
diff --git a/static/images/IMG_1638.jpg b/edaweb/static/images/IMG_1638.jpg
index b9ca9f3..b9ca9f3 100644
--- a/static/images/IMG_1638.jpg
+++ b/edaweb/static/images/IMG_1638.jpg
Binary files differ
diff --git a/static/images/IMG_1639.jpg b/edaweb/static/images/IMG_1639.jpg
index 5695e58..5695e58 100644
--- a/static/images/IMG_1639.jpg
+++ b/edaweb/static/images/IMG_1639.jpg
Binary files differ
diff --git a/static/images/IMG_1640.jpg b/edaweb/static/images/IMG_1640.jpg
index df3eaea..df3eaea 100644
--- a/static/images/IMG_1640.jpg
+++ b/edaweb/static/images/IMG_1640.jpg
Binary files differ
diff --git a/static/images/IMG_1641.jpg b/edaweb/static/images/IMG_1641.jpg
index ce2eddb..ce2eddb 100644
--- a/static/images/IMG_1641.jpg
+++ b/edaweb/static/images/IMG_1641.jpg
Binary files differ
diff --git a/static/images/IMG_20210422_212009.jpg b/edaweb/static/images/IMG_20210422_212009.jpg
index a8337c4..a8337c4 100755..100644
--- a/static/images/IMG_20210422_212009.jpg
+++ b/edaweb/static/images/IMG_20210422_212009.jpg
Binary files differ
diff --git a/static/images/IMG_20210824_175000.jpg b/edaweb/static/images/IMG_20210824_175000.jpg
index 216c617..216c617 100755..100644
--- a/static/images/IMG_20210824_175000.jpg
+++ b/edaweb/static/images/IMG_20210824_175000.jpg
Binary files differ
diff --git a/static/images/IMG_20220809_172130442_HDR.jpg b/edaweb/static/images/IMG_20220809_172130442_HDR.jpg
index e1987f8..e1987f8 100755..100644
--- a/static/images/IMG_20220809_172130442_HDR.jpg
+++ b/edaweb/static/images/IMG_20220809_172130442_HDR.jpg
Binary files differ
diff --git a/static/images/IMG_20220811_133224877_HDR.jpg b/edaweb/static/images/IMG_20220811_133224877_HDR.jpg
index eb05b1b..eb05b1b 100755..100644
--- a/static/images/IMG_20220811_133224877_HDR.jpg
+++ b/edaweb/static/images/IMG_20220811_133224877_HDR.jpg
Binary files differ
diff --git a/static/images/IMG_20220811_133224877_HDR_crop.jpg b/edaweb/static/images/IMG_20220811_133224877_HDR_crop.jpg
index 7bc63ba..7bc63ba 100755..100644
--- a/static/images/IMG_20220811_133224877_HDR_crop.jpg
+++ b/edaweb/static/images/IMG_20220811_133224877_HDR_crop.jpg
Binary files differ
diff --git a/static/images/IMG_20220812_112838125_HDR.jpg b/edaweb/static/images/IMG_20220812_112838125_HDR.jpg
index 6e56a49..6e56a49 100755..100644
--- a/static/images/IMG_20220812_112838125_HDR.jpg
+++ b/edaweb/static/images/IMG_20220812_112838125_HDR.jpg
Binary files differ
diff --git a/static/images/IMG_20220823_154457137_HDR.jpg b/edaweb/static/images/IMG_20220823_154457137_HDR.jpg
index b46f0fe..b46f0fe 100755..100644
--- a/static/images/IMG_20220823_154457137_HDR.jpg
+++ b/edaweb/static/images/IMG_20220823_154457137_HDR.jpg
Binary files differ
diff --git a/static/images/IMG_20221023_163821542.jpg b/edaweb/static/images/IMG_20221023_163821542.jpg
index f2284df..f2284df 100755..100644
--- a/static/images/IMG_20221023_163821542.jpg
+++ b/edaweb/static/images/IMG_20221023_163821542.jpg
Binary files differ
diff --git a/static/images/IMG_20230812_132400733_HDR.jpg b/edaweb/static/images/IMG_20230812_132400733_HDR.jpg
index 9f46bdc..9f46bdc 100755..100644
--- a/static/images/IMG_20230812_132400733_HDR.jpg
+++ b/edaweb/static/images/IMG_20230812_132400733_HDR.jpg
Binary files differ
diff --git a/static/images/IMG_20230812_132632784_HDR.jpg b/edaweb/static/images/IMG_20230812_132632784_HDR.jpg
index 82060d1..82060d1 100755..100644
--- a/static/images/IMG_20230812_132632784_HDR.jpg
+++ b/edaweb/static/images/IMG_20230812_132632784_HDR.jpg
Binary files differ
diff --git a/edaweb/static/images/JwL2S2V.png b/edaweb/static/images/JwL2S2V.png
new file mode 100755
index 0000000..9394c56
--- /dev/null
+++ b/edaweb/static/images/JwL2S2V.png
Binary files differ
diff --git a/static/images/PXL_20250314_150055804.jpg b/edaweb/static/images/PXL_20250314_150055804.jpg
index b660e18..b660e18 100644
--- a/static/images/PXL_20250314_150055804.jpg
+++ b/edaweb/static/images/PXL_20250314_150055804.jpg
Binary files differ
diff --git a/edaweb/static/images/PXL_20251108_063442686.MP.jpg b/edaweb/static/images/PXL_20251108_063442686.MP.jpg
new file mode 100755
index 0000000..86171bb
--- /dev/null
+++ b/edaweb/static/images/PXL_20251108_063442686.MP.jpg
Binary files differ
diff --git a/edaweb/static/images/PXL_20251109_072147683.jpg b/edaweb/static/images/PXL_20251109_072147683.jpg
new file mode 100644
index 0000000..6c2df9d
--- /dev/null
+++ b/edaweb/static/images/PXL_20251109_072147683.jpg
Binary files differ
diff --git a/edaweb/static/images/PXL_20251111_125628695.jpg b/edaweb/static/images/PXL_20251111_125628695.jpg
new file mode 100644
index 0000000..557de37
--- /dev/null
+++ b/edaweb/static/images/PXL_20251111_125628695.jpg
Binary files differ
diff --git a/edaweb/static/images/PXL_20251115_180322252.jpg b/edaweb/static/images/PXL_20251115_180322252.jpg
new file mode 100644
index 0000000..9eb2905
--- /dev/null
+++ b/edaweb/static/images/PXL_20251115_180322252.jpg
Binary files differ
diff --git a/edaweb/static/images/PXL_20251115_180349152.jpg b/edaweb/static/images/PXL_20251115_180349152.jpg
new file mode 100644
index 0000000..452d7ca
--- /dev/null
+++ b/edaweb/static/images/PXL_20251115_180349152.jpg
Binary files differ
diff --git a/edaweb/static/images/PXL_20251130_222326376.jpg b/edaweb/static/images/PXL_20251130_222326376.jpg
new file mode 100644
index 0000000..1f11f65
--- /dev/null
+++ b/edaweb/static/images/PXL_20251130_222326376.jpg
Binary files differ
diff --git a/edaweb/static/images/PXL_20260210_231506089.jpg b/edaweb/static/images/PXL_20260210_231506089.jpg
new file mode 100644
index 0000000..9d7816f
--- /dev/null
+++ b/edaweb/static/images/PXL_20260210_231506089.jpg
Binary files differ
diff --git a/static/images/Screenshot_20210520-221830.png b/edaweb/static/images/Screenshot_20210520-221830.png
index 33afee7..33afee7 100755..100644
--- a/static/images/Screenshot_20210520-221830.png
+++ b/edaweb/static/images/Screenshot_20210520-221830.png
Binary files differ
diff --git a/static/images/Screenshot_20210527_122432.png b/edaweb/static/images/Screenshot_20210527_122432.png
index 33432ff..33432ff 100755..100644
--- a/static/images/Screenshot_20210527_122432.png
+++ b/edaweb/static/images/Screenshot_20210527_122432.png
Binary files differ
diff --git a/static/images/Screenshot_20210620-144127.png b/edaweb/static/images/Screenshot_20210620-144127.png
index dd9b43a..dd9b43a 100755..100644
--- a/static/images/Screenshot_20210620-144127.png
+++ b/edaweb/static/images/Screenshot_20210620-144127.png
Binary files differ
diff --git a/static/images/Screenshot_20210620-231652.png b/edaweb/static/images/Screenshot_20210620-231652.png
index 5e2532d..5e2532d 100755..100644
--- a/static/images/Screenshot_20210620-231652.png
+++ b/edaweb/static/images/Screenshot_20210620-231652.png
Binary files differ
diff --git a/static/images/Screenshot_20210727-072303.png b/edaweb/static/images/Screenshot_20210727-072303.png
index 7c03644..7c03644 100755..100644
--- a/static/images/Screenshot_20210727-072303.png
+++ b/edaweb/static/images/Screenshot_20210727-072303.png
Binary files differ
diff --git a/static/images/Screenshot_20210727-072344.png b/edaweb/static/images/Screenshot_20210727-072344.png
index 248644a..248644a 100755..100644
--- a/static/images/Screenshot_20210727-072344.png
+++ b/edaweb/static/images/Screenshot_20210727-072344.png
Binary files differ
diff --git a/static/images/Screenshot_20210727-223004.png b/edaweb/static/images/Screenshot_20210727-223004.png
index dbe0630..dbe0630 100755..100644
--- a/static/images/Screenshot_20210727-223004.png
+++ b/edaweb/static/images/Screenshot_20210727-223004.png
Binary files differ
diff --git a/static/images/Screenshot_20210731-181223.png b/edaweb/static/images/Screenshot_20210731-181223.png
index b1547be..b1547be 100755..100644
--- a/static/images/Screenshot_20210731-181223.png
+++ b/edaweb/static/images/Screenshot_20210731-181223.png
Binary files differ
diff --git a/static/images/Screenshot_20210731-181229.png b/edaweb/static/images/Screenshot_20210731-181229.png
index 363c17b..363c17b 100755..100644
--- a/static/images/Screenshot_20210731-181229.png
+++ b/edaweb/static/images/Screenshot_20210731-181229.png
Binary files differ
diff --git a/static/images/Screenshot_20210811-125853.png b/edaweb/static/images/Screenshot_20210811-125853.png
index 7d45240..7d45240 100755..100644
--- a/static/images/Screenshot_20210811-125853.png
+++ b/edaweb/static/images/Screenshot_20210811-125853.png
Binary files differ
diff --git a/static/images/Screenshot_20210818-203828.png b/edaweb/static/images/Screenshot_20210818-203828.png
index 8026a0c..8026a0c 100755..100644
--- a/static/images/Screenshot_20210818-203828.png
+++ b/edaweb/static/images/Screenshot_20210818-203828.png
Binary files differ
diff --git a/static/images/Screenshot_20210825-131938.png b/edaweb/static/images/Screenshot_20210825-131938.png
index 4b16443..4b16443 100755..100644
--- a/static/images/Screenshot_20210825-131938.png
+++ b/edaweb/static/images/Screenshot_20210825-131938.png
Binary files differ
diff --git a/static/images/Startech.jpg b/edaweb/static/images/Startech.jpg
index ba7f02f..ba7f02f 100644
--- a/static/images/Startech.jpg
+++ b/edaweb/static/images/Startech.jpg
Binary files differ
diff --git a/static/images/a4-5000.jpg b/edaweb/static/images/a4-5000.jpg
index f26fd66..f26fd66 100755..100644
--- a/static/images/a4-5000.jpg
+++ b/edaweb/static/images/a4-5000.jpg
Binary files differ
diff --git a/edaweb/static/images/aLvcFjj.png b/edaweb/static/images/aLvcFjj.png
new file mode 100755
index 0000000..c928ba7
--- /dev/null
+++ b/edaweb/static/images/aLvcFjj.png
Binary files differ
diff --git a/static/images/aaaaahh.jpg b/edaweb/static/images/aaaaahh.jpg
index 8dac9d4..8dac9d4 100755..100644
--- a/static/images/aaaaahh.jpg
+++ b/edaweb/static/images/aaaaahh.jpg
Binary files differ
diff --git a/static/images/anti_nft_b.png b/edaweb/static/images/anti_nft_b.png
index 61dfb99..61dfb99 100644
--- a/static/images/anti_nft_b.png
+++ b/edaweb/static/images/anti_nft_b.png
Binary files differ
diff --git a/static/images/arenas.jpg b/edaweb/static/images/arenas.jpg
index 2b2cac6..2b2cac6 100644
--- a/static/images/arenas.jpg
+++ b/edaweb/static/images/arenas.jpg
Binary files differ
diff --git a/static/images/basil.jpg b/edaweb/static/images/basil.jpg
index c63ba48..c63ba48 100755..100644
--- a/static/images/basil.jpg
+++ b/edaweb/static/images/basil.jpg
Binary files differ
diff --git a/edaweb/static/images/bdd_fuel.png b/edaweb/static/images/bdd_fuel.png
new file mode 100755
index 0000000..e79522e
--- /dev/null
+++ b/edaweb/static/images/bdd_fuel.png
Binary files differ
diff --git a/static/images/bigshark.png b/edaweb/static/images/bigshark.png
index a499fb1..a499fb1 100755..100644
--- a/static/images/bigshark.png
+++ b/edaweb/static/images/bigshark.png
Binary files differ
diff --git a/static/images/bob.gif b/edaweb/static/images/bob.gif
index 90b6dd5..90b6dd5 100755..100644
--- a/static/images/bob.gif
+++ b/edaweb/static/images/bob.gif
Binary files differ
diff --git a/static/images/braindamage.png b/edaweb/static/images/braindamage.png
index c26e75f..c26e75f 100755..100644
--- a/static/images/braindamage.png
+++ b/edaweb/static/images/braindamage.png
Binary files differ
diff --git a/static/images/catonlap.jpg b/edaweb/static/images/catonlap.jpg
index 37e526b..37e526b 100644
--- a/static/images/catonlap.jpg
+++ b/edaweb/static/images/catonlap.jpg
Binary files differ
diff --git a/static/images/chuddy.jpg b/edaweb/static/images/chuddy.jpg
index 7d732f7..7d732f7 100644
--- a/static/images/chuddy.jpg
+++ b/edaweb/static/images/chuddy.jpg
Binary files differ
diff --git a/static/images/cloudfree.png b/edaweb/static/images/cloudfree.png
index 71c6ff2..71c6ff2 100644
--- a/static/images/cloudfree.png
+++ b/edaweb/static/images/cloudfree.png
Binary files differ
diff --git a/static/images/embedded_img2.png b/edaweb/static/images/embedded_img2.png
index 3eeea56..3eeea56 100755..100644
--- a/static/images/embedded_img2.png
+++ b/edaweb/static/images/embedded_img2.png
Binary files differ
diff --git a/static/images/embedded_img3.png b/edaweb/static/images/embedded_img3.png
index 2a55742..2a55742 100755..100644
--- a/static/images/embedded_img3.png
+++ b/edaweb/static/images/embedded_img3.png
Binary files differ
diff --git a/static/images/embedded_img4.png b/edaweb/static/images/embedded_img4.png
index 5e6ec6d..5e6ec6d 100755..100644
--- a/static/images/embedded_img4.png
+++ b/edaweb/static/images/embedded_img4.png
Binary files differ
diff --git a/static/images/embedded_img5.PNG b/edaweb/static/images/embedded_img5.PNG
index c96d284..c96d284 100755..100644
--- a/static/images/embedded_img5.PNG
+++ b/edaweb/static/images/embedded_img5.PNG
Binary files differ
diff --git a/static/images/face.jpg b/edaweb/static/images/face.jpg
index b123e53..b123e53 100755..100644
--- a/static/images/face.jpg
+++ b/edaweb/static/images/face.jpg
Binary files differ
diff --git a/edaweb/static/images/faceoff.jpg b/edaweb/static/images/faceoff.jpg
new file mode 100644
index 0000000..a209700
--- /dev/null
+++ b/edaweb/static/images/faceoff.jpg
Binary files differ
diff --git a/static/images/first_server.jpg b/edaweb/static/images/first_server.jpg
index 8f537d7..8f537d7 100755..100644
--- a/static/images/first_server.jpg
+++ b/edaweb/static/images/first_server.jpg
Binary files differ
diff --git a/static/images/fstab.png b/edaweb/static/images/fstab.png
index 6acaa83..6acaa83 100755..100644
--- a/static/images/fstab.png
+++ b/edaweb/static/images/fstab.png
Binary files differ
diff --git a/static/images/graduation.jpg b/edaweb/static/images/graduation.jpg
index 89bafd7..89bafd7 100644
--- a/static/images/graduation.jpg
+++ b/edaweb/static/images/graduation.jpg
Binary files differ
diff --git a/static/images/greenboi.jpg b/edaweb/static/images/greenboi.jpg
index 7761c8a..7761c8a 100755..100644
--- a/static/images/greenboi.jpg
+++ b/edaweb/static/images/greenboi.jpg
Binary files differ
diff --git a/static/images/hpkvm_puttyconf.png b/edaweb/static/images/hpkvm_puttyconf.png
index 5e9852f..5e9852f 100755..100644
--- a/static/images/hpkvm_puttyconf.png
+++ b/edaweb/static/images/hpkvm_puttyconf.png
Binary files differ
diff --git a/static/images/hpkvm_serialconf.png b/edaweb/static/images/hpkvm_serialconf.png
index 76122c1..76122c1 100755..100644
--- a/static/images/hpkvm_serialconf.png
+++ b/edaweb/static/images/hpkvm_serialconf.png
Binary files differ
diff --git a/static/images/i5-1145G7.png b/edaweb/static/images/i5-1145G7.png
index 96b6fa3..96b6fa3 100644
--- a/static/images/i5-1145G7.png
+++ b/edaweb/static/images/i5-1145G7.png
Binary files differ
diff --git a/edaweb/static/images/iKVCEoy.png b/edaweb/static/images/iKVCEoy.png
new file mode 100755
index 0000000..05d6d70
--- /dev/null
+++ b/edaweb/static/images/iKVCEoy.png
Binary files differ
diff --git a/static/images/icons.png b/edaweb/static/images/icons.png
index 4f19e72..4f19e72 100755..100644
--- a/static/images/icons.png
+++ b/edaweb/static/images/icons.png
Binary files differ
diff --git a/static/images/ioporn.jpg b/edaweb/static/images/ioporn.jpg
index 6608d31..6608d31 100755..100644
--- a/static/images/ioporn.jpg
+++ b/edaweb/static/images/ioporn.jpg
Binary files differ
diff --git a/static/images/its_true_1.jpg b/edaweb/static/images/its_true_1.jpg
index 3dddfb3..3dddfb3 100755..100644
--- a/static/images/its_true_1.jpg
+++ b/edaweb/static/images/its_true_1.jpg
Binary files differ
diff --git a/static/images/its_true_2.jpg b/edaweb/static/images/its_true_2.jpg
index b532a21..b532a21 100755..100644
--- a/static/images/its_true_2.jpg
+++ b/edaweb/static/images/its_true_2.jpg
Binary files differ
diff --git a/static/images/j1800.jpg b/edaweb/static/images/j1800.jpg
index 05db3a6..05db3a6 100755..100644
--- a/static/images/j1800.jpg
+++ b/edaweb/static/images/j1800.jpg
Binary files differ
diff --git a/static/images/j5040.jpg b/edaweb/static/images/j5040.jpg
index 1a24299..1a24299 100755..100644
--- a/static/images/j5040.jpg
+++ b/edaweb/static/images/j5040.jpg
Binary files differ
diff --git a/static/images/j5040_server.jpg b/edaweb/static/images/j5040_server.jpg
index 9e2f3aa..9e2f3aa 100755..100644
--- a/static/images/j5040_server.jpg
+++ b/edaweb/static/images/j5040_server.jpg
Binary files differ
diff --git a/static/images/kvm_1.png b/edaweb/static/images/kvm_1.png
index fa05b15..fa05b15 100755..100644
--- a/static/images/kvm_1.png
+++ b/edaweb/static/images/kvm_1.png
Binary files differ
diff --git a/static/images/kvm_2.png b/edaweb/static/images/kvm_2.png
index 6fca0f8..6fca0f8 100755..100644
--- a/static/images/kvm_2.png
+++ b/edaweb/static/images/kvm_2.png
Binary files differ
diff --git a/static/images/lackrack1.jpg b/edaweb/static/images/lackrack1.jpg
index 31c4f9d..31c4f9d 100755..100644
--- a/static/images/lackrack1.jpg
+++ b/edaweb/static/images/lackrack1.jpg
Binary files differ
diff --git a/static/images/lackrack2.jpg b/edaweb/static/images/lackrack2.jpg
index 9fda7d8..9fda7d8 100755..100644
--- a/static/images/lackrack2.jpg
+++ b/edaweb/static/images/lackrack2.jpg
Binary files differ
diff --git a/static/images/libreboot.jpg b/edaweb/static/images/libreboot.jpg
index 0bac72e..0bac72e 100755..100644
--- a/static/images/libreboot.jpg
+++ b/edaweb/static/images/libreboot.jpg
Binary files differ
diff --git a/static/images/liostore.png b/edaweb/static/images/liostore.png
index 43003ee..43003ee 100755..100644
--- a/static/images/liostore.png
+++ b/edaweb/static/images/liostore.png
Binary files differ
diff --git a/static/images/media_E9lTIldWUAEeT63.jpg b/edaweb/static/images/media_E9lTIldWUAEeT63.jpg
index b30195a..b30195a 100755..100644
--- a/static/images/media_E9lTIldWUAEeT63.jpg
+++ b/edaweb/static/images/media_E9lTIldWUAEeT63.jpg
Binary files differ
diff --git a/static/images/media_FPus_2aXsAUhCu9.jpg b/edaweb/static/images/media_FPus_2aXsAUhCu9.jpg
index 398fadd..398fadd 100755..100644
--- a/static/images/media_FPus_2aXsAUhCu9.jpg
+++ b/edaweb/static/images/media_FPus_2aXsAUhCu9.jpg
Binary files differ
diff --git a/static/images/media_FRlRqYKXoAIw82O.jpg b/edaweb/static/images/media_FRlRqYKXoAIw82O.jpg
index b45a62b..b45a62b 100755..100644
--- a/static/images/media_FRlRqYKXoAIw82O.jpg
+++ b/edaweb/static/images/media_FRlRqYKXoAIw82O.jpg
Binary files differ
diff --git a/static/images/media_FeP_m8FXEAAqcJs.jpg b/edaweb/static/images/media_FeP_m8FXEAAqcJs.jpg
index f3afe10..f3afe10 100755..100644
--- a/static/images/media_FeP_m8FXEAAqcJs.jpg
+++ b/edaweb/static/images/media_FeP_m8FXEAAqcJs.jpg
Binary files differ
diff --git a/static/images/media_FfcNNZ2WYAAz97v.jpg b/edaweb/static/images/media_FfcNNZ2WYAAz97v.jpg
index 8ae39ad..8ae39ad 100755..100644
--- a/static/images/media_FfcNNZ2WYAAz97v.jpg
+++ b/edaweb/static/images/media_FfcNNZ2WYAAz97v.jpg
Binary files differ
diff --git a/static/images/media_FlBsMq2XwAATJX5.jpg b/edaweb/static/images/media_FlBsMq2XwAATJX5.jpg
index 7ba3ef1..7ba3ef1 100644
--- a/static/images/media_FlBsMq2XwAATJX5.jpg
+++ b/edaweb/static/images/media_FlBsMq2XwAATJX5.jpg
Binary files differ
diff --git a/static/images/media_FlBsfDcWQAQhJdP.jpg b/edaweb/static/images/media_FlBsfDcWQAQhJdP.jpg
index 601dfbe..601dfbe 100644
--- a/static/images/media_FlBsfDcWQAQhJdP.jpg
+++ b/edaweb/static/images/media_FlBsfDcWQAQhJdP.jpg
Binary files differ
diff --git a/static/images/minecraft.png b/edaweb/static/images/minecraft.png
index 19210d2..19210d2 100755..100644
--- a/static/images/minecraft.png
+++ b/edaweb/static/images/minecraft.png
Binary files differ
diff --git a/static/images/new_switch_opened.jpg b/edaweb/static/images/new_switch_opened.jpg
index df797ed..df797ed 100755..100644
--- a/static/images/new_switch_opened.jpg
+++ b/edaweb/static/images/new_switch_opened.jpg
Binary files differ
diff --git a/static/images/newdiscord.jpg b/edaweb/static/images/newdiscord.jpg
index d446602..d446602 100755..100644
--- a/static/images/newdiscord.jpg
+++ b/edaweb/static/images/newdiscord.jpg
Binary files differ
diff --git a/static/images/nicfan.jpg b/edaweb/static/images/nicfan.jpg
index 6c2415e..6c2415e 100755..100644
--- a/static/images/nicfan.jpg
+++ b/edaweb/static/images/nicfan.jpg
Binary files differ
diff --git a/static/images/notstolenvalour4.png b/edaweb/static/images/notstolenvalour4.png
index f9e82e2..f9e82e2 100644
--- a/static/images/notstolenvalour4.png
+++ b/edaweb/static/images/notstolenvalour4.png
Binary files differ
diff --git a/static/images/notstolenvalour5.png b/edaweb/static/images/notstolenvalour5.png
index 87c09da..87c09da 100644
--- a/static/images/notstolenvalour5.png
+++ b/edaweb/static/images/notstolenvalour5.png
Binary files differ
diff --git a/static/images/notstolenvalour8.png b/edaweb/static/images/notstolenvalour8.png
index dcddf27..dcddf27 100644
--- a/static/images/notstolenvalour8.png
+++ b/edaweb/static/images/notstolenvalour8.png
Binary files differ
diff --git a/static/images/oldpic.png b/edaweb/static/images/oldpic.png
index 20314e4..20314e4 100755..100644
--- a/static/images/oldpic.png
+++ b/edaweb/static/images/oldpic.png
Binary files differ
diff --git a/static/images/pfsenseswissvpnportforwards.png b/edaweb/static/images/pfsenseswissvpnportforwards.png
index 34c05dc..34c05dc 100644
--- a/static/images/pfsenseswissvpnportforwards.png
+++ b/edaweb/static/images/pfsenseswissvpnportforwards.png
Binary files differ
diff --git a/static/images/photo_2022-12-07_14-06-03.jpg b/edaweb/static/images/photo_2022-12-07_14-06-03.jpg
index 224b748..224b748 100755..100644
--- a/static/images/photo_2022-12-07_14-06-03.jpg
+++ b/edaweb/static/images/photo_2022-12-07_14-06-03.jpg
Binary files differ
diff --git a/edaweb/static/images/photo_2025-12-04_22-34-24.jpg b/edaweb/static/images/photo_2025-12-04_22-34-24.jpg
new file mode 100755
index 0000000..51ced37
--- /dev/null
+++ b/edaweb/static/images/photo_2025-12-04_22-34-24.jpg
Binary files differ
diff --git a/static/images/photo_5857106224099739202_y.jpg b/edaweb/static/images/photo_5857106224099739202_y.jpg
index c0a5820..c0a5820 100644
--- a/static/images/photo_5857106224099739202_y.jpg
+++ b/edaweb/static/images/photo_5857106224099739202_y.jpg
Binary files differ
diff --git a/static/images/powerani.gif b/edaweb/static/images/powerani.gif
index 1eb1a18..1eb1a18 100644
--- a/static/images/powerani.gif
+++ b/edaweb/static/images/powerani.gif
Binary files differ
diff --git a/static/images/profile_images_1598652418580963328_ENk7xKDw.jpg b/edaweb/static/images/profile_images_1598652418580963328_ENk7xKDw.jpg
index 775d4e9..775d4e9 100755..100644
--- a/static/images/profile_images_1598652418580963328_ENk7xKDw.jpg
+++ b/edaweb/static/images/profile_images_1598652418580963328_ENk7xKDw.jpg
Binary files differ
diff --git a/edaweb/static/images/rOJXmjG.png b/edaweb/static/images/rOJXmjG.png
new file mode 100755
index 0000000..58a4ae4
--- /dev/null
+++ b/edaweb/static/images/rOJXmjG.png
Binary files differ
diff --git a/static/images/rack1.jpg b/edaweb/static/images/rack1.jpg
index b5049e9..b5049e9 100755..100644
--- a/static/images/rack1.jpg
+++ b/edaweb/static/images/rack1.jpg
Binary files differ
diff --git a/static/images/rack2.jpg b/edaweb/static/images/rack2.jpg
index 1c9bc11..1c9bc11 100755..100644
--- a/static/images/rack2.jpg
+++ b/edaweb/static/images/rack2.jpg
Binary files differ
diff --git a/static/images/router.jpg b/edaweb/static/images/router.jpg
index 587f0e0..587f0e0 100755..100644
--- a/static/images/router.jpg
+++ b/edaweb/static/images/router.jpg
Binary files differ
diff --git a/static/images/russian_isp.png b/edaweb/static/images/russian_isp.png
index 5b529c0..5b529c0 100755..100644
--- a/static/images/russian_isp.png
+++ b/edaweb/static/images/russian_isp.png
Binary files differ
diff --git a/static/images/russian_isp_abuse.png b/edaweb/static/images/russian_isp_abuse.png
index 96da244..96da244 100755..100644
--- a/static/images/russian_isp_abuse.png
+++ b/edaweb/static/images/russian_isp_abuse.png
Binary files differ
diff --git a/static/images/russian_nginx_logs.jpg b/edaweb/static/images/russian_nginx_logs.jpg
index 3fe22d3..3fe22d3 100755..100644
--- a/static/images/russian_nginx_logs.jpg
+++ b/edaweb/static/images/russian_nginx_logs.jpg
Binary files differ
diff --git a/static/images/russian_yt.jpg b/edaweb/static/images/russian_yt.jpg
index 16f3767..16f3767 100755..100644
--- a/static/images/russian_yt.jpg
+++ b/edaweb/static/images/russian_yt.jpg
Binary files differ
diff --git a/static/images/s-l1600.jpg b/edaweb/static/images/s-l1600.jpg
index 34a82cf..34a82cf 100755..100644
--- a/static/images/s-l1600.jpg
+++ b/edaweb/static/images/s-l1600.jpg
Binary files differ
diff --git a/static/images/s-l16001.jpg b/edaweb/static/images/s-l16001.jpg
index 0c34348..0c34348 100755..100644
--- a/static/images/s-l16001.jpg
+++ b/edaweb/static/images/s-l16001.jpg
Binary files differ
diff --git a/static/images/s-l500.jpg b/edaweb/static/images/s-l500.jpg
index 92307ff..92307ff 100755..100644
--- a/static/images/s-l500.jpg
+++ b/edaweb/static/images/s-l500.jpg
Binary files differ
diff --git a/static/images/sample_ede336afca555579dd78f051e4a23feaa838716d.jpg b/edaweb/static/images/sample_ede336afca555579dd78f051e4a23feaa838716d.jpg
index b146bc4..b146bc4 100644
--- a/static/images/sample_ede336afca555579dd78f051e4a23feaa838716d.jpg
+++ b/edaweb/static/images/sample_ede336afca555579dd78f051e4a23feaa838716d.jpg
Binary files differ
diff --git a/static/images/selfie.jpg b/edaweb/static/images/selfie.jpg
index 17730e8..17730e8 100755..100644
--- a/static/images/selfie.jpg
+++ b/edaweb/static/images/selfie.jpg
Binary files differ
diff --git a/static/images/server.jpg b/edaweb/static/images/server.jpg
index 50bc1d7..50bc1d7 100755..100644
--- a/static/images/server.jpg
+++ b/edaweb/static/images/server.jpg
Binary files differ
diff --git a/static/images/server2.jpg b/edaweb/static/images/server2.jpg
index dda70b1..dda70b1 100755..100644
--- a/static/images/server2.jpg
+++ b/edaweb/static/images/server2.jpg
Binary files differ
diff --git a/static/images/shark1.jpg b/edaweb/static/images/shark1.jpg
index 394846c..394846c 100755..100644
--- a/static/images/shark1.jpg
+++ b/edaweb/static/images/shark1.jpg
Binary files differ
diff --git a/static/images/shark2.jpg b/edaweb/static/images/shark2.jpg
index 2c432cd..2c432cd 100755..100644
--- a/static/images/shark2.jpg
+++ b/edaweb/static/images/shark2.jpg
Binary files differ
diff --git a/static/images/shark3.jpg b/edaweb/static/images/shark3.jpg
index 5343254..5343254 100755..100644
--- a/static/images/shark3.jpg
+++ b/edaweb/static/images/shark3.jpg
Binary files differ
diff --git a/static/images/shark3.png b/edaweb/static/images/shark3.png
index 22e8ff9..22e8ff9 100755..100644
--- a/static/images/shark3.png
+++ b/edaweb/static/images/shark3.png
Binary files differ
diff --git a/static/images/shun-hashimoto-mio-chibana.gif b/edaweb/static/images/shun-hashimoto-mio-chibana.gif
index 869793f..869793f 100644
--- a/static/images/shun-hashimoto-mio-chibana.gif
+++ b/edaweb/static/images/shun-hashimoto-mio-chibana.gif
Binary files differ
diff --git a/static/images/sicp.jpg b/edaweb/static/images/sicp.jpg
index 575a456..575a456 100755..100644
--- a/static/images/sicp.jpg
+++ b/edaweb/static/images/sicp.jpg
Binary files differ
diff --git a/static/images/startech_rack_1.jpg b/edaweb/static/images/startech_rack_1.jpg
index 1f66734..1f66734 100755..100644
--- a/static/images/startech_rack_1.jpg
+++ b/edaweb/static/images/startech_rack_1.jpg
Binary files differ
diff --git a/static/images/startech_rack_2.jpg b/edaweb/static/images/startech_rack_2.jpg
index 47f9aac..47f9aac 100755..100644
--- a/static/images/startech_rack_2.jpg
+++ b/edaweb/static/images/startech_rack_2.jpg
Binary files differ
diff --git a/static/images/stolenvalour.jpg b/edaweb/static/images/stolenvalour.jpg
index d666623..d666623 100644
--- a/static/images/stolenvalour.jpg
+++ b/edaweb/static/images/stolenvalour.jpg
Binary files differ
diff --git a/static/images/sun.gif b/edaweb/static/images/sun.gif
index 674e32a..674e32a 100755..100644
--- a/static/images/sun.gif
+++ b/edaweb/static/images/sun.gif
Binary files differ
diff --git a/static/images/switch.jpg b/edaweb/static/images/switch.jpg
index 64ab20c..64ab20c 100755..100644
--- a/static/images/switch.jpg
+++ b/edaweb/static/images/switch.jpg
Binary files differ
diff --git a/static/images/switches.jpg b/edaweb/static/images/switches.jpg
index 8b56651..8b56651 100755..100644
--- a/static/images/switches.jpg
+++ b/edaweb/static/images/switches.jpg
Binary files differ
diff --git a/static/images/t30.jpg b/edaweb/static/images/t30.jpg
index 949d14b..949d14b 100755..100644
--- a/static/images/t30.jpg
+++ b/edaweb/static/images/t30.jpg
Binary files differ
diff --git a/static/images/techdome.jpg b/edaweb/static/images/techdome.jpg
index 74fe69c..74fe69c 100644
--- a/static/images/techdome.jpg
+++ b/edaweb/static/images/techdome.jpg
Binary files differ
diff --git a/static/images/telegrampic.jpg b/edaweb/static/images/telegrampic.jpg
index ddadb8b..ddadb8b 100755..100644
--- a/static/images/telegrampic.jpg
+++ b/edaweb/static/images/telegrampic.jpg
Binary files differ
diff --git a/static/images/telegrampic2.jpg b/edaweb/static/images/telegrampic2.jpg
index 8b306ff..8b306ff 100755..100644
--- a/static/images/telegrampic2.jpg
+++ b/edaweb/static/images/telegrampic2.jpg
Binary files differ
diff --git a/static/images/testimonials.PNG b/edaweb/static/images/testimonials.PNG
index 8584cdd..8584cdd 100755..100644
--- a/static/images/testimonials.PNG
+++ b/edaweb/static/images/testimonials.PNG
Binary files differ
diff --git a/static/images/theNVMEVault.png b/edaweb/static/images/theNVMEVault.png
index 2cf31d7..2cf31d7 100755..100644
--- a/static/images/theNVMEVault.png
+++ b/edaweb/static/images/theNVMEVault.png
Binary files differ
diff --git a/static/images/twitterpic.jpg b/edaweb/static/images/twitterpic.jpg
index 57f16b4..57f16b4 100755..100644
--- a/static/images/twitterpic.jpg
+++ b/edaweb/static/images/twitterpic.jpg
Binary files differ
diff --git a/edaweb/static/images/v2Yfoou.jpg b/edaweb/static/images/v2Yfoou.jpg
new file mode 100755
index 0000000..f3a3249
--- /dev/null
+++ b/edaweb/static/images/v2Yfoou.jpg
Binary files differ
diff --git a/static/images/vcss-blue.gif b/edaweb/static/images/vcss-blue.gif
index c373b2a..c373b2a 100755..100644
--- a/static/images/vcss-blue.gif
+++ b/edaweb/static/images/vcss-blue.gif
Binary files differ
diff --git a/static/images/www.gif b/edaweb/static/images/www.gif
index 48fbd13..48fbd13 100644
--- a/static/images/www.gif
+++ b/edaweb/static/images/www.gif
Binary files differ
diff --git a/edaweb/static/images/wxbKYVv.png b/edaweb/static/images/wxbKYVv.png
new file mode 100755
index 0000000..75feb10
--- /dev/null
+++ b/edaweb/static/images/wxbKYVv.png
Binary files differ
diff --git a/static/images/x200.jpg b/edaweb/static/images/x200.jpg
index d7e48eb..d7e48eb 100755..100644
--- a/static/images/x200.jpg
+++ b/edaweb/static/images/x200.jpg
Binary files differ
diff --git a/static/images/xeon.jpg b/edaweb/static/images/xeon.jpg
index 4b1eef9..4b1eef9 100755..100644
--- a/static/images/xeon.jpg
+++ b/edaweb/static/images/xeon.jpg
Binary files differ
diff --git a/static/images/xeon_motherboard.jpg b/edaweb/static/images/xeon_motherboard.jpg
index a17819f..a17819f 100755..100644
--- a/static/images/xeon_motherboard.jpg
+++ b/edaweb/static/images/xeon_motherboard.jpg
Binary files differ
diff --git a/static/index.md b/edaweb/static/index.md
index a676d59..6259ba6 100755..100644
--- a/static/index.md
+++ b/edaweb/static/index.md
@@ -1,36 +1,34 @@
-site now also avaliable under the domain [boymoder.blog](https://boymoder.blog)!
-
-![yaoi](/img/shun-hashimoto-mio-chibana.gif)
-
-## haiiiiiii
-my name is eden and im a 23yo (boymoder/[fujoshi](https://www.urbandictionary.com/define.php?term=fujoshi)) computer science/robotics PhD student. i made my own website to encourage others to do so too.
-i'll post my thoughts on here sometimes, and use this site to link to other stuff i host [more about me](/thought?id=2).
-
-[click here for a random image of lio fotia](/random?tags=lio_fotia)
-
-[click here for a random KawoShin image](/random?tags=nagisa_kaworu+ikari_shinji+yaoi)
-
-## FOSS alternative services
-
-- [nextcloud - dropbox (+ much more!) alternative](https://nc.eda.gay)
-- [git server - github alternative](https://git.eda.gay/)
-- [jellyfin - web player for ~~legally downloaded~~ TV and films](https://jellyfin.eda.gay) - RIP emby!
-
-[see the services im running right now](/services) (takes a couple seconds to load)
-
-these sites are hosted on my [homelab system](https://wiki.eda.gay)
-
-![startech 8u rack cropped](/img/GcyexeCW0AAYssz.jpg?w=300&h=5000)
-![startech 12u rack cropped](/img/Startech.jpg?h=250&w=5000)
-
-## nice websites
-- [wiby.me](http://wiby.me/) - search engine for old style websites with limited javascript (my site used to be on here but it got blacklisted for some reason?)
-- [dysmorph.nekoweb.org](https://dysmorph.nekoweb.org/) - a site that is very based because it looks similar
-- [boymoder.network](https://boymoder.network/) - website for boymoder awareness
-- [4chan.org/lgbt/](https://boards.4channel.org/lgbt/) - but dont blame me if u catch brainworms
-- [https://www.math.uni-bielefeld.de/~sillke/Twister/fun/elevator-fun90.html](https://www.math.uni-bielefeld.de/~sillke/Twister/fun/elevator-fun90.html) any website with a URL like this is gonna be good
-- [boymoder.moe](https://nyaomidev.github.io/boymoder.moe/)
-- [boymoders.com](https://boymoders.com)
-- [john.citrons.xyz](https://john.citrons.xyz/) - for the nice 'ads' featured at the bottom of my page
-
-
+site now also avaliable under the domain [boymoder.blog](https://boymoder.blog)!
+
+![yaoi](/img/shun-hashimoto-mio-chibana.gif)
+
+## haiiiiiii
+my name is eden and im a 23yo (boymoder/[fujoshi](https://www.urbandictionary.com/define.php?term=fujoshi)) computer science/robotics PhD student. i made my own website to encourage others to do so too.
+i'll post my thoughts on here sometimes, and use this site to link to other stuff i host [more about me](/thought?id=2).
+
+## FOSS alternative services
+
+- [nextcloud - dropbox (+ much more!) alternative](https://nc.eda.gay)
+- [git server - github alternative](https://git.eda.gay/)
+- [jellyfin - web player for ~~legally downloaded~~ TV and films](https://jellyfin.eda.gay) - RIP emby!
+
+[see the services im running right now](/services) (takes a couple seconds to load)
+
+these sites are hosted on my [homelab system](https://wiki.eda.gay)
+
+![startech 8u rack cropped](/img/GcyexeCW0AAYssz.jpg?w=300&h=5000)
+![startech 12u rack cropped](/img/Startech.jpg?h=250&w=5000)
+
+## nice websites
+- [wiby.me](http://wiby.me/) - search engine for old style websites with limited javascript (my site used to be on here but it got blacklisted for some reason?)
+- [dysmorph.nekoweb.org](https://dysmorph.nekoweb.org/) - a site that is very based because it looks similar
+- [transsexual.org](https://web.archive.org/web/20010802032136/http://transsexual.org/Toon.html) - awesome and relatable transsexual comics from a website that's slightly older than me
+- [norfolkchurches.co.uk](http://www.norfolkchurches.co.uk/norwichintro.htm) - site about all the churches in norwich (and norfolk!), the city that has far too many medieval churches than it knows what to do with. this site is preciesly what the internet should be, the muted ramblings of someone with an expert knowledge on his preferred niche interest. without any javascript. nice if, like me, you have a middling interest in theology
+- [boymoder.network](https://boymoder.network/) - website for boymoder awareness
+- [4chan.org/lgbt/](https://boards.4channel.org/lgbt/) - but dont blame me if u catch brainworms
+- [https://www.math.uni-bielefeld.de/~sillke/Twister/fun/elevator-fun90.html](https://www.math.uni-bielefeld.de/~sillke/Twister/fun/elevator-fun90.html) any website with a URL like this is gonna be good
+- [boymoder.moe](https://nyaomidev.github.io/boymoder.moe/)
+- [boymoders.com](https://boymoders.com)
+- [john.citrons.xyz](https://john.citrons.xyz/) - for the nice 'ads' featured at the bottom of my page
+
+
diff --git a/edaweb/static/papers/aai.pdf b/edaweb/static/papers/aai.pdf
new file mode 100644
index 0000000..af2223b
--- /dev/null
+++ b/edaweb/static/papers/aai.pdf
Binary files differ
diff --git a/edaweb/static/papers/ar2.pdf b/edaweb/static/papers/ar2.pdf
new file mode 100644
index 0000000..2b1693f
--- /dev/null
+++ b/edaweb/static/papers/ar2.pdf
Binary files differ
diff --git a/edaweb/static/robots.txt b/edaweb/static/robots.txt
new file mode 100644
index 0000000..04154e9
--- /dev/null
+++ b/edaweb/static/robots.txt
@@ -0,0 +1,7 @@
+User-agent: *
+Allow: /
+User-agent: Googlebot-Image
+Disallow: *
+User-agent: *
+Disallow: /random*
+
diff --git a/static/style.css b/edaweb/static/style.css
index 6069ebf..6069ebf 100755..100644
--- a/static/style.css
+++ b/edaweb/static/style.css
diff --git a/templates/diary.html.j2 b/edaweb/templates/diary.html.j2
index f6604f7..f6604f7 100755..100644
--- a/templates/diary.html.j2
+++ b/edaweb/templates/diary.html.j2
diff --git a/templates/discord.html.j2 b/edaweb/templates/discord.html.j2
index 597fb4b..597fb4b 100755..100644
--- a/templates/discord.html.j2
+++ b/edaweb/templates/discord.html.j2
diff --git a/templates/index.html.j2 b/edaweb/templates/index.html.j2
index d6c08d8..d6c08d8 100755..100644
--- a/templates/index.html.j2
+++ b/edaweb/templates/index.html.j2
diff --git a/templates/isocd.html.j2 b/edaweb/templates/isocd.html.j2
index 3c532c0..3c532c0 100755..100644
--- a/templates/isocd.html.j2
+++ b/edaweb/templates/isocd.html.j2
diff --git a/templates/isocd_confirmation.html.j2 b/edaweb/templates/isocd_confirmation.html.j2
index 81045a8..81045a8 100755..100644
--- a/templates/isocd_confirmation.html.j2
+++ b/edaweb/templates/isocd_confirmation.html.j2
diff --git a/templates/nhdl.html.j2 b/edaweb/templates/nhdl.html.j2
index 5ab62c2..5ab62c2 100755..100644
--- a/templates/nhdl.html.j2
+++ b/edaweb/templates/nhdl.html.j2
diff --git a/templates/questions.html.j2 b/edaweb/templates/questions.html.j2
index eb58380..eb58380 100644
--- a/templates/questions.html.j2
+++ b/edaweb/templates/questions.html.j2
diff --git a/templates/random.html.j2 b/edaweb/templates/random.html.j2
index 76b433b..76b433b 100755..100644
--- a/templates/random.html.j2
+++ b/edaweb/templates/random.html.j2
diff --git a/templates/services.html.j2 b/edaweb/templates/services.html.j2
index 9f42c7f..c336990 100755..100644
--- a/templates/services.html.j2
+++ b/edaweb/templates/services.html.j2
@@ -5,7 +5,7 @@
<h2>docker</h2>
<ul>
{% for host, containers in docker["containers"].items() %}
- <h4>{{ "%s - %s" % (host[0], host[1]) }}</h4>
+ <h4>{{ "%s - %s - %s" % (host[0], host[1], docker["uptimes"][host]) }}</h4>
<table>
{% for name, status, image in containers %}
<tr>
diff --git a/templates/template.html.j2 b/edaweb/templates/template.html.j2
index 86618bc..86618bc 100755..100644
--- a/templates/template.html.j2
+++ b/edaweb/templates/template.html.j2
diff --git a/templates/thought.html.j2 b/edaweb/templates/thought.html.j2
index 2a5b519..2a5b519 100755..100644
--- a/templates/thought.html.j2
+++ b/edaweb/templates/thought.html.j2
diff --git a/templates/thoughts.html.j2 b/edaweb/templates/thoughts.html.j2
index bf06f57..bf06f57 100755..100644
--- a/templates/thoughts.html.j2
+++ b/edaweb/templates/thoughts.html.j2
diff --git a/entrypoint.sh b/entrypoint.sh
index ecd86dc..f8664f0 100644
--- a/entrypoint.sh
+++ b/entrypoint.sh
@@ -1,3 +1,5 @@
+rm -rvf /app/edaweb/edaweb.conf/
+ln -s /app/edaweb.conf /app/edaweb/edaweb.conf
printenv | grep -v "no_proxy" >> /etc/environment
-tmux new-session -d -s "cron" 'cron -f || bash && bash';
-python3 /app/app.py --production \ No newline at end of file
+#tmux new-session -d -s "cron" 'cron -f || bash && bash';
+python3 /app/edaweb/app.py --production
diff --git a/homelab-wiki/Dockerfile b/homelab-wiki/Dockerfile
index 445bcc3..391654c 100644
--- a/homelab-wiki/Dockerfile
+++ b/homelab-wiki/Dockerfile
@@ -1,19 +1,19 @@
-FROM mediawiki:1.39.3
-
-ENV MW_HOME=/var/www/html
-
-# download and add composer to path
-RUN set -x; \
- php -r "readfile('https://getcomposer.org/installer');" | php \
- && mv composer.phar /usr/local/bin/composer
-
-# get extensions
-RUN set -x; \
- cd $MW_HOME/extensions \
- && git clone --depth 1 -b REL1_39 https://github.com/wikimedia/mediawiki-extensions-TemplateStyles \
- && git clone --depth 1 https://github.com/Universal-Omega/PortableInfobox.git
-
-# install extensions
-RUN set -x; \
- cd $MW_HOME/extensions/mediawiki-extensions-TemplateStyles \
- && composer install --no-dev
+FROM mediawiki:1.43.3
+
+ENV MW_HOME=/var/www/html
+
+# download and add composer to path
+RUN set -x; \
+ php -r "readfile('https://getcomposer.org/installer');" | php \
+ && mv composer.phar /usr/local/bin/composer
+
+# get extensions
+RUN set -x; \
+ cd $MW_HOME/extensions \
+ && git clone --depth 1 -b REL1_39 https://github.com/wikimedia/mediawiki-extensions-TemplateStyles \
+ && git clone --depth 1 https://github.com/Universal-Omega/PortableInfobox.git
+
+# install extensions
+RUN set -x; \
+ cd $MW_HOME/extensions/mediawiki-extensions-TemplateStyles \
+ && composer install --no-dev
diff --git a/homelab-wiki/LocalSettings.php b/homelab-wiki/LocalSettings.php
index e3c1d5a..13d0dfa 100644
--- a/homelab-wiki/LocalSettings.php
+++ b/homelab-wiki/LocalSettings.php
@@ -1,180 +1,183 @@
-<?php
-# This file was automatically generated by the MediaWiki 1.39.3
-# installer. If you make manual changes, please keep track in case you
-# need to recreate them later.
-#
-# See docs/Configuration.md for all configurable settings
-# and their default values, but don't forget to make changes in _this_
-# file, not there.
-#
-# Further documentation for configuration settings may be found at:
-# https://www.mediawiki.org/wiki/Manual:Configuration_settings
-
-# Protect against web entry
-if ( !defined( 'MEDIAWIKI' ) ) {
- exit;
-}
-
-
-## Uncomment this to disable output compression
-# $wgDisableOutputCompression = true;
-
-$wgSitename = "Eden's Homelab Wiki";
-$wgMetaNamespace = "Eden's_Homelab_Wiki";
-
-## The URL base path to the directory containing the wiki;
-## defaults for all runtime URL paths are based off of this.
-## For more information on customizing the URLs
-## (like /w/index.php/Page_title to /wiki/Page_title) please see:
-## https://www.mediawiki.org/wiki/Manual:Short_URL
-$wgScriptPath = "";
-
-## The protocol and server name to use in fully-qualified URLs
-$wgServer = "https://wiki.eda.gay";
-
-## The URL path to static resources (images, scripts, etc.)
-$wgResourceBasePath = $wgScriptPath;
-
-## The URL paths to the logo. Make sure you change this from the default,
-## or else you'll overwrite your logo when you upgrade!
-$wgLogos = [
- '1x' => "$wgResourceBasePath/images/c/c9/Logo.png",
-];
-
-## UPO means: this is also a user preference option
-
-$wgEnableEmail = false;
-$wgEnableUserEmail = true; # UPO
-
-$wgEmergencyContact = "";
-$wgPasswordSender = "";
-
-$wgEnotifUserTalk = false; # UPO
-$wgEnotifWatchlist = false; # UPO
-$wgEmailAuthentication = true;
-
-## Database settings
-$wgDBtype = "mysql";
-$wgDBserver = "mysql";
-$wgDBname = "homelabwiki2";
-$wgDBuser = "root";
-$wgDBpassword = getenv( "WG_DB_PASSWORD" );
-
-# MySQL specific settings
-$wgDBprefix = "";
-
-# MySQL table options to use during installation or update
-$wgDBTableOptions = "ENGINE=InnoDB, DEFAULT CHARSET=binary";
-
-# Shared database table
-# This has no effect unless $wgSharedDB is also set.
-$wgSharedTables[] = "actor";
-
-## Shared memory settings
-$wgMainCacheType = CACHE_ACCEL;
-$wgMemCachedServers = [];
-
-## To enable image uploads, make sure the 'images' directory
-## is writable, then set this to true:
-$wgEnableUploads = true;
-$wgUseImageMagick = true;
-$wgImageMagickConvertCommand = "/usr/bin/convert";
-
-# InstantCommons allows wiki to use images from https://commons.wikimedia.org
-$wgUseInstantCommons = true;
-
-# Periodically send a pingback to https://www.mediawiki.org/ with basic data
-# about this MediaWiki instance. The Wikimedia Foundation shares this data
-# with MediaWiki developers to help guide future development efforts.
-$wgPingback = false;
-
-# Site language code, should be one of the list in ./includes/languages/data/Names.php
-$wgLanguageCode = "en-gb";
-
-# Time zone
-$wgLocaltimezone = "UTC";
-
-## Set $wgCacheDirectory to a writable directory on the web server
-## to make your wiki go slightly faster. The directory should not
-## be publicly accessible from the web.
-#$wgCacheDirectory = "$IP/cache";
-
-$wgSecretKey = getenv( "WG_SECRET_KEY" );
-
-# Changing this will log out all existing sessions.
-$wgAuthenticationTokenVersion = "1";
-
-# Site upgrade key. Must be set to a string (default provided) to turn on the
-# web installer while LocalSettings.php is in place
-$wgUpgradeKey = getenv( "WG_UPGRADE_KEY" );
-
-## For attaching licensing metadata to pages, and displaying an
-## appropriate copyright notice / icon. GNU Free Documentation
-## License and Creative Commons licenses are supported so far.
-$wgRightsPage = ""; # Set to the title of a wiki page that describes your license/copyright
-$wgRightsUrl = "https://www.gnu.org/copyleft/fdl.html";
-$wgRightsText = "GNU Free Documentation Licence 1.3 or later";
-$wgRightsIcon = "$wgResourceBasePath/resources/assets/licenses/gnu-fdl.png";
-
-# Path to the GNU diff3 utility. Used for conflict resolution.
-$wgDiff3 = "/usr/bin/diff3";
-
-# The following permissions were set based on your choice in the installer
-$wgGroupPermissions['*']['createaccount'] = false;
-$wgGroupPermissions['*']['edit'] = false;
-
-## Default skin: you can change the default skin. Use the internal symbolic
-## names, e.g. 'vector' or 'monobook':
-$wgDefaultSkin = "monobook";
-
-# Enabled skins.
-# The following skins were automatically enabled:
-wfLoadSkin( 'MinervaNeue' );
-wfLoadSkin( 'MonoBook' );
-wfLoadSkin( 'Timeless' );
-wfLoadSkin( 'Vector' );
-
-
-# Enabled extensions. Most of the extensions are enabled by adding
-# wfLoadExtension( 'ExtensionName' );
-# to LocalSettings.php. Check specific extension documentation for more details.
-# The following extensions were automatically enabled:
-wfLoadExtension( 'AbuseFilter' );
-wfLoadExtension( 'CategoryTree' );
-wfLoadExtension( 'Cite' );
-wfLoadExtension( 'CiteThisPage' );
-wfLoadExtension( 'CodeEditor' );
-wfLoadExtension( 'ConfirmEdit' );
-wfLoadExtension( 'Gadgets' );
-wfLoadExtension( 'ImageMap' );
-wfLoadExtension( 'InputBox' );
-wfLoadExtension( 'Interwiki' );
-wfLoadExtension( 'Math' );
-wfLoadExtension( 'mediawiki-extensions-TemplateStyles' );
-wfLoadExtension( 'MultimediaViewer' );
-wfLoadExtension( 'Nuke' );
-wfLoadExtension( 'OATHAuth' );
-wfLoadExtension( 'PageImages' );
-wfLoadExtension( 'ParserFunctions' );
-wfLoadExtension( 'PdfHandler' );
-wfLoadExtension( 'Poem' );
-wfLoadExtension( 'PortableInfobox' );
-wfLoadExtension( 'Renameuser' );
-wfLoadExtension( 'ReplaceText' );
-wfLoadExtension( 'Scribunto' );
-wfLoadExtension( 'SecureLinkFixer' );
-wfLoadExtension( 'SpamBlacklist' );
-wfLoadExtension( 'SyntaxHighlight_GeSHi' );
-wfLoadExtension( 'TemplateData' );
-wfLoadExtension( 'TextExtracts' );
-wfLoadExtension( 'TitleBlacklist' );
-wfLoadExtension( 'VisualEditor' );
-wfLoadExtension( 'WikiEditor' );
-
-
-# End of automatically generated settings.
-# Add more configuration options below.
-$wgShowDebug = false;
-$wgDevelopmentWarnings = false;
-$wgShowExceptionDetails = false;
-$wgDebugToolbar = false;
+<?php
+# This file was automatically generated by the MediaWiki 1.39.3
+# installer. If you make manual changes, please keep track in case you
+# need to recreate them later.
+#
+# See docs/Configuration.md for all configurable settings
+# and their default values, but don't forget to make changes in _this_
+# file, not there.
+#
+# Further documentation for configuration settings may be found at:
+# https://www.mediawiki.org/wiki/Manual:Configuration_settings
+
+# Protect against web entry
+if ( !defined( 'MEDIAWIKI' ) ) {
+ exit;
+}
+
+
+## Uncomment this to disable output compression
+# $wgDisableOutputCompression = true;
+
+$wgSitename = "Eden's Homelab Wiki";
+$wgMetaNamespace = "Eden's_Homelab_Wiki";
+
+## The URL base path to the directory containing the wiki;
+## defaults for all runtime URL paths are based off of this.
+## For more information on customizing the URLs
+## (like /w/index.php/Page_title to /wiki/Page_title) please see:
+## https://www.mediawiki.org/wiki/Manual:Short_URL
+$wgScriptPath = "";
+
+## The protocol and server name to use in fully-qualified URLs
+$wgServer = "https://homelabwiki.boymoder.blog";
+
+## The URL path to static resources (images, scripts, etc.)
+$wgResourceBasePath = $wgScriptPath;
+
+## The URL paths to the logo. Make sure you change this from the default,
+## or else you'll overwrite your logo when you upgrade!
+$wgLogos = [
+ '1x' => "$wgResourceBasePath/images/c/c9/Logo.png",
+];
+
+## UPO means: this is also a user preference option
+
+$wgEnableEmail = false;
+$wgEnableUserEmail = true; # UPO
+
+$wgEmergencyContact = "";
+$wgPasswordSender = "";
+
+$wgEnotifUserTalk = false; # UPO
+$wgEnotifWatchlist = false; # UPO
+$wgEmailAuthentication = true;
+
+## Database settings
+$wgDBtype = "mysql";
+$wgDBserver = "mysql";
+$wgDBname = "homelabwiki2";
+$wgDBuser = "root";
+$wgDBpassword = getenv( "WG_DB_PASSWORD" );
+
+# MySQL specific settings
+$wgDBprefix = "";
+
+# MySQL table options to use during installation or update
+$wgDBTableOptions = "ENGINE=InnoDB, DEFAULT CHARSET=binary";
+
+# Shared database table
+# This has no effect unless $wgSharedDB is also set.
+$wgSharedTables[] = "actor";
+
+## Shared memory settings
+$wgMainCacheType = CACHE_ACCEL;
+$wgMemCachedServers = [];
+
+## To enable image uploads, make sure the 'images' directory
+## is writable, then set this to true:
+$wgEnableUploads = true;
+$wgUseImageMagick = true;
+$wgImageMagickConvertCommand = "/usr/bin/convert";
+
+# InstantCommons allows wiki to use images from https://commons.wikimedia.org
+$wgUseInstantCommons = true;
+
+# Periodically send a pingback to https://www.mediawiki.org/ with basic data
+# about this MediaWiki instance. The Wikimedia Foundation shares this data
+# with MediaWiki developers to help guide future development efforts.
+$wgPingback = false;
+
+# Site language code, should be one of the list in ./includes/languages/data/Names.php
+$wgLanguageCode = "en-gb";
+
+# Time zone
+$wgLocaltimezone = "UTC";
+
+## Set $wgCacheDirectory to a writable directory on the web server
+## to make your wiki go slightly faster. The directory should not
+## be publicly accessible from the web.
+#$wgCacheDirectory = "$IP/cache";
+
+$wgSecretKey = getenv( "WG_SECRET_KEY" );
+
+# Changing this will log out all existing sessions.
+$wgAuthenticationTokenVersion = "1";
+
+# Site upgrade key. Must be set to a string (default provided) to turn on the
+# web installer while LocalSettings.php is in place
+$wgUpgradeKey = getenv( "WG_UPGRADE_KEY" );
+
+## For attaching licensing metadata to pages, and displaying an
+## appropriate copyright notice / icon. GNU Free Documentation
+## License and Creative Commons licenses are supported so far.
+$wgRightsPage = ""; # Set to the title of a wiki page that describes your license/copyright
+$wgRightsUrl = "https://www.gnu.org/copyleft/fdl.html";
+$wgRightsText = "GNU Free Documentation Licence 1.3 or later";
+$wgRightsIcon = "$wgResourceBasePath/resources/assets/licenses/gnu-fdl.png";
+
+# Path to the GNU diff3 utility. Used for conflict resolution.
+$wgDiff3 = "/usr/bin/diff3";
+
+# The following permissions were set based on your choice in the installer
+$wgGroupPermissions['*']['createaccount'] = false;
+$wgGroupPermissions['*']['edit'] = false;
+
+## Default skin: you can change the default skin. Use the internal symbolic
+## names, e.g. 'vector' or 'monobook':
+$wgDefaultSkin = "monobook";
+
+# Enabled skins.
+# The following skins were automatically enabled:
+wfLoadSkin( 'MinervaNeue' );
+wfLoadSkin( 'MonoBook' );
+wfLoadSkin( 'Timeless' );
+wfLoadSkin( 'Vector' );
+
+
+# Enabled extensions. Most of the extensions are enabled by adding
+# wfLoadExtension( 'ExtensionName' );
+# to LocalSettings.php. Check specific extension documentation for more details.
+# The following extensions were automatically enabled:
+wfLoadExtension( 'AbuseFilter' );
+wfLoadExtension( 'CategoryTree' );
+wfLoadExtension( 'Cite' );
+wfLoadExtension( 'CiteThisPage' );
+wfLoadExtension( 'CodeEditor' );
+wfLoadExtension( 'ConfirmEdit' );
+wfLoadExtension( 'Gadgets' );
+wfLoadExtension( 'ImageMap' );
+wfLoadExtension( 'InputBox' );
+wfLoadExtension( 'Interwiki' );
+wfLoadExtension( 'Math' );
+wfLoadExtension( 'mediawiki-extensions-TemplateStyles' );
+wfLoadExtension( 'MultimediaViewer' );
+wfLoadExtension( 'Nuke' );
+wfLoadExtension( 'OATHAuth' );
+wfLoadExtension( 'PageImages' );
+wfLoadExtension( 'ParserFunctions' );
+wfLoadExtension( 'PdfHandler' );
+wfLoadExtension( 'Poem' );
+wfLoadExtension( 'PortableInfobox' );
+wfLoadExtension( 'ReplaceText' );
+wfLoadExtension( 'Scribunto' );
+wfLoadExtension( 'SecureLinkFixer' );
+wfLoadExtension( 'SpamBlacklist' );
+wfLoadExtension( 'SyntaxHighlight_GeSHi' );
+wfLoadExtension( 'TemplateData' );
+wfLoadExtension( 'TextExtracts' );
+wfLoadExtension( 'TitleBlacklist' );
+wfLoadExtension( 'VisualEditor' );
+wfLoadExtension( 'WikiEditor' );
+
+
+# End of automatically generated settings.
+# Add more configuration options below.
+# $wgShowDebug = false;
+# $wgDevelopmentWarnings = false;
+# $wgShowExceptionDetails = false;
+# $wgDebugToolbar = false;
+
+$wgShowExceptionDetails = true;
+$wgShowDBErrorBacktrace = true;
+$wgShowSQLErrors = true;
diff --git a/nitter/nitter b/nitter/nitter
deleted file mode 160000
-Subproject fcd74e8048362fcf8284871ee067099e8de28a8
diff --git a/scripts/export.sh b/scripts/export.sh
index c65a6e9..a2ecb6f 100755
--- a/scripts/export.sh
+++ b/scripts/export.sh
@@ -9,4 +9,4 @@ read export_name
echo "Exporting blog post " $id " to " $export_name
touch $export_name
-sudo docker run -it --entrypoint python3 -v "$(pwd)/edaweb.conf":/app/edaweb.conf -v "$(pwd)/$export_name":/app/$export_name --network mariadb --rm reg.reaweb.uk/edaweb /app/parser.py export -i $id -u root -o $export_name
+sudo docker run -it --entrypoint python3 -v "$(pwd)/edaweb.conf":/app/edaweb.conf -v "$(pwd)/edaweb.conf":/app/edaweb/edaweb.conf -v "$(pwd)/$export_name":/app/$export_name --network mariadb --rm reg.reaweb.uk/edaweb /app/edaweb/parser.py export -i $id -u root -o $export_name
diff --git a/scripts/update.sh b/scripts/update.sh
index b082f18..32b3b2a 100755
--- a/scripts/update.sh
+++ b/scripts/update.sh
@@ -3,4 +3,4 @@
echo -n "Input blog post ID to update: "
read id
-sudo docker run -it --entrypoint python3 -v "$(pwd)/edaweb.conf":/app/edaweb.conf -v "$(pwd)/$1":/app/$1 --network mariadb --rm reg.reaweb.uk/edaweb /app/parser.py update -i $id -u root -m $1
+sudo docker run -it --entrypoint python3 -v "$(pwd)/edaweb.conf":/app/edaweb.conf -v "$(pwd)/edaweb.conf":/app/edaweb/edaweb.conf -v "$(pwd)/$1":/app/$1 --network mariadb --rm reg.reaweb.uk/edaweb /app/edaweb/parser.py update -i $id -u root -m $1
diff --git a/static/robots.txt b/static/robots.txt
deleted file mode 100755
index c2aab7e..0000000
--- a/static/robots.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-User-agent: *
-Disallow: / \ No newline at end of file