Серьезная реновация

This commit is contained in:
Александр Кирюхин 2024-11-28 00:46:17 +03:00
parent 8b78390987
commit 54375572e1
Signed by: neonxp
SSH key fingerprint: SHA256:SVt7TjxbVc87m1QYaQziOJ0N3OCFURv2g76gD/UTTXI
91 changed files with 609 additions and 139 deletions

View file

@ -3,3 +3,5 @@
deploy: deploy:
hugo --gc && rsync -avz --delete public/ neonxp@neonxp.ru:/var/www/neonxp.ru hugo --gc && rsync -avz --delete public/ neonxp@neonxp.ru:/var/www/neonxp.ru
post:
hugo new content posts/$(shell date '+%Y-%m-%d')-$(name)/_index.md

82
assets/css/main.css Normal file
View file

@ -0,0 +1,82 @@
.p-summary {
display: none;
}
.logo {
height: 64px;
}
.print-footer {
display: none;
}
figcaption {
text-align: center;
}
@media print {
.sidebar {
display: none;
}
article {
border: 0
}
article footer {
display: none;
}
.container>header {
display: none;
}
.container>footer {
display: none;
}
.comments {
display: none;
}
.h-entry {
width: 100% !important;
}
.container {
width: 100% !important;
}
.print-footer {
display: block !important;
}
}
/* Give canvas a proper size and pixel perfect scaling */
canvas {
image-rendering: optimizeSpeed;
image-rendering: -moz-crisp-edges;
image-rendering: -webkit-optimize-contrast;
image-rendering: optimize-contrast;
image-rendering: pixelated;
-ms-interpolation-mode: nearest-neighbor;
border: 0px;
width: 512px;
height: 512px;
background: black;
display: block;
/* For nice loading */
}
#pico-container {
width: 512px;
margin: auto;
}
#pico-container .buttons {
margin-top: 24px;
display: grid;
grid-template-columns: calc(100%/6) calc(100%/6) calc(100%/6) calc(100%/6) calc(100%/6) calc(100%/6);
grid-auto-rows: 1fr;
grid-template-areas:
". up . . . ."
"left . right . . a"
". down . . b . "
}
.square_hack {
width:0;
padding-bottom: 100%;
}

View file

Before

Width:  |  Height:  |  Size: 453 B

After

Width:  |  Height:  |  Size: 453 B

View file

@ -7,8 +7,10 @@ title = 'Книжные рекомендации 1'
Подумалось, почему бы не рекомендовать понравившиеся мне книги. Подумалось, почему бы не рекомендовать понравившиеся мне книги.
В прошлый раз, ещё [в VK рекомендовал](https://vk.com/wall-174034751_45) Азимовский цикл “Основание”. А в этот разрекомендую цикл фантастики Андре Нортона “Королева Солнца”. В прошлый раз, ещё [в VK рекомендовал](https://vk.com/wall-174034751_45) Азимовский цикл “Основание”.
А в этот раз рекомендую цикл фантастики Андре Нортона “Королева Солнца”.
Если без спойлеров — цикл описывает приключения помощника супер-карго Дейла на космическом корабле вольных торговцев“Королева Солнца”. Читается легко и увлекательно. Книги небольшие, проглатываются за пару часов. Если без спойлеров — цикл описывает приключения помощника супер-карго Дейла на космическом корабле вольных торговцев
«Королева Солнца». Читается легко и увлекательно. Книги небольшие, проглатываются за пару часов.
[Скачать](https://neonxp.ru/wp-content/uploads/2024/09/andre_norton-queen_of_sun.zip) [Скачать](andre_norton-queen_of_sun.zip)

View file

@ -1,7 +1,7 @@
+++ +++
categories = ['Без рубрики'] categories = ['Без рубрики']
date = '2024-07-13T20:49:12Z' date = '2024-07-13T20:49:12Z'
image = '/upload/top-encrypted-todo-and-note-taking-apps-01.jpg' image = 'joplin.jpg'
tags = ['it', 'joplin'] tags = ['it', 'joplin']
title = 'Заметочник Joplin' title = 'Заметочник Joplin'
+++ +++

View file

Before

Width:  |  Height:  |  Size: 192 KiB

After

Width:  |  Height:  |  Size: 192 KiB

View file

@ -1,8 +1,6 @@
+++ +++
categories = ['Без рубрики'] categories = ['Без рубрики']
date = '2024-09-26T19:05:00Z' date = '2024-09-26T19:05:00Z'
image = '/upload/logo.png'
location = ['На базе']
tags = ['блог'] tags = ['блог']
title = 'Hugo → WordPress' title = 'Hugo → WordPress'
+++ +++

View file

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View file

@ -1,7 +1,7 @@
+++ +++
categories = ['Мои проекты'] categories = ['Мои проекты']
date = '2024-10-06T12:00:11Z' date = '2024-10-06T12:00:11Z'
image = '/upload/bash_org.jpg' image = 'bash_org.jpg'
tags = ['go', 'it', 'моё'] tags = ['go', 'it', 'моё']
title = 'Цитатник Рунета' title = 'Цитатник Рунета'
+++ +++

View file

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 96 KiB

View file

@ -1,7 +1,7 @@
+++ +++
categories = ['Без рубрики'] categories = ['Без рубрики']
date = '2024-10-17T19:26:00Z' date = '2024-10-17T19:26:00Z'
image = '/upload/Rama16wiki.jpg' image = 'Rama16wiki.jpg'
tags = ['книги'] tags = ['книги']
title = 'Книжные рекомендации №2' title = 'Книжные рекомендации №2'
+++ +++
@ -28,4 +28,4 @@ title = 'Книжные рекомендации №2'
Книга является частью цикла, и я прикладываю цикл целиком: Книга является частью цикла, и я прикладываю цикл целиком:
[Цикл «КенгХо» скачать](https://neonxp.ru/upload/КенгХо.zip) [Цикл «КенгХо» скачать](КенгХо.zip)

View file

@ -11,7 +11,7 @@ location = "Казань"
С тех пор мои вкусы несколько поменялись и я открыл для себя его величество [Obsidian](https://obsidian.md/). С тех пор мои вкусы несколько поменялись и я открыл для себя его величество [Obsidian](https://obsidian.md/).
![Obsidian logo](/img/posts/obsidian/logo.png) ![Obsidian logo](/posts/2024-11-17-obsidian/logo.png)
В целом он такой же заметочник, с ± тем же функционалом, но имеет для меня одну особенность, которая буквально В целом он такой же заметочник, с ± тем же функционалом, но имеет для меня одну особенность, которая буквально
переворачивает всё. Это мощнейшая система плагинов. Серьёзно, я нашел плагины которые покрывают для меня всё, кроме переворачивает всё. Это мощнейшая система плагинов. Серьёзно, я нашел плагины которые покрывают для меня всё, кроме
@ -152,7 +152,7 @@ ___
и переходя к сегодняшней заметке я сразу получаю такую заготовку: и переходя к сегодняшней заметке я сразу получаю такую заготовку:
{{< figure src="/img/posts/obsidian/templater.png" title="Заметка из шаблона" >}} {{< figure src="/posts/2024-11-17-obsidian/templater.png" title="Заметка из шаблона" >}}
### Остальные плагины ### Остальные плагины
@ -179,7 +179,7 @@ ___
«Но Hugo это же генератор статичных сайтов, куда ты ему будешь отправлять заметку для публикации?» — можешь спросить «Но Hugo это же генератор статичных сайтов, куда ты ему будешь отправлять заметку для публикации?» — можешь спросить
меня ты. А я отвечу что у меня вот такой план: меня ты. А я отвечу что у меня вот такой план:
{{< figure src="/img/posts/obsidian/publish.png" title="план-кабан" >}} {{< figure src="/posts/2024-11-17-obsidian/publish.png" title="план-кабан" >}}
То что выделено красным — ещё не существует в природе. То что выделено красным — ещё не существует в природе.

View file

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 46 KiB

View file

Before

Width:  |  Height:  |  Size: 77 KiB

After

Width:  |  Height:  |  Size: 77 KiB

View file

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

View file

@ -0,0 +1,139 @@
+++
title = "Гиперлокальность"
description = ""
date = 2024-11-27T17:50:18+03:00
categories = [ "гиперлокальность" ]
tags = [ "разное", "IT", "размышления", "гиперлокальность" ]
+++
Это очередной пост моих пространных рассуждений про тенденции и будущее интернета, которых в последнее время становится
как-то многовато. Вероятно, в последствии, это станет даже серией постов.
Этот же я воспринимаю, как вводный в лор гиперлокальности.
Сначала, пожалуй, расскажу про посылки, а потом уже о том, куда они ведут, и какие из этого можно сделать выводы.
<!--more-->
# Посылка
Думаю, все мы заметили как много вокруг стало ИИ инструментов. Сейчас ИИ на хайпе и его засовывают буквально
куда можно и куда нельзя. Само по себе меня это не беспокоит. Я отношусь к ИИ как к просто очередному инструменту,
который можно и нужно использовать там, где он применим. С этим нет проблем.
Пройдёт какое-то время и ИИ инструменты займут ниши, где они наиболее уместны и где от них наибольшая польза.
Однако тут есть и негативный нюанс. Этот инструмент будет способствовать в том числе и тому,
что интернет станет (если ещё не стал!) по сути своей «мёртвым». Не мёртвым буквально, а «мёртвым» в том же смысле, в
котором в «Руководстве путешествующего автостопом по галактики» Д. Адамса была вселенная обозначена необитаемой.
{{< quote author="Д. Адамс" source="Ресторан «У края Вселенной», 19 глава" >}}
Вселенная — кое-какая информация, облегчающая существование в ней.
<...>
4. Население: Отсутствует.
Известно, что существует бесконечное множество планет.
Это объясняется той простой причиной, что пространство, в котором они могут существовать, также
бесконечно. Однако не всякая из этих планет обитаема. Отсюда следует, что число обитаемых планет конечно.
Частное от деления любого конечного числа на бесконечность стремится к нулю и не дает остатка,
следовательно, можно заключить, что средняя численность населения планет Вселенной равна нулю. Отсюда
следует, что численность населения во всей Вселенной также равна нулю, и потому все люди, которые порой
попадаются на вашем пути, являются продуктом вашего воспаленного воображения.
{{< /quote >}}
# Следствие
Количество сгенерированного ИИ контента, ИИ ботов пишущих комментарии и иным способом имитирующих людей будет
расти нелинейно. Таким образом будет «размываться» весьма конечное количиство «живых» пользователей «неживыми» до того,
что все эти миллиарды «живых» пользователей будут лишь статистической погрешностью относительно «неживых» ИИ ботов.
# Как это повлияет на наше восприятие реальности?
Представьте себе мир, где большинство сообщений, комментариев и публикаций создаются ИИ. Мы будем жить в мире, где
трудно отличить реальность от иллюзии. Где каждый день нам придётся задаваться вопросом: кто написал этот комментарий
реальный человек или искусственный интеллект?
Это приведёт к тому, что доверие к информации в интернете начнёт стремительно падать. Люди станут всё больше сомневаться
в подлинности того, что видят и читают. В итоге, интернет превратится в огромное море данных, где настоящие голоса людей
тонут в океане фальшивок и симуляций.
{{< figure src="/posts/2024-11-27-hyperlocality/braindance.jpg" title="Киберпанк который мы заслужили" >}}
# Гиперлокальность
Уже сейчас вполне себе просматиривается контур того, что я, за неимением лучшего термина, называю «Гиперлокальностью».
Термин мне нравится тем что он, с одной стороны, хорошо описывает то, куда, по моему мнению, мы придём,
а с другой стороны, названием отсылает к «гипертексту».
## Что я под этим подразумеваю?
Помните старые времена, когда интернет только-только появлялся и из каждого утюга звучало как одно из его преимуществ,
то, что «вы сможете находить себе собеседников и друзьей в любой точке мира, не выходя из дома». Звучало многообещающе,
и в каком-то смысле, оно так и было.
{{< figure src="/posts/2024-11-27-hyperlocality/90e.jpg" title="Наивное представление из 90х о том, что интернет будет нас соединять" >}}
Но что происходит сейчас? Интернет, вместо того чтобы соединять людей по всему миру, начинает дробиться на маленькие
замкнутые круги. Почему так происходит? Ответ кроется в недоверии. Когда невозможно понять, кто перед тобой настоящий
человек или ИИ-бот, люди начинают замыкаться в узких кругах тех, кому они доверяют.
{{< quote author="Януш Леон Вишневский" source="Одиночество в Сети" >}}
Интернет, он не сближает. Это скопление одиночества. Мы вроде вместе, но каждый один.
Иллюзия общения, иллюзия дружбы, иллюзия жизни…
{{< /quote >}}
Эти круги становятся всё меньше и меньше, пока не превращаются в замкнутые сообщества, где общение ограничено только
теми, кого знаешь лично. Таким образом, получается некая WebOfTrust, но только по валидации «человечности».
Это напоминает модель «доверительных сетей», которая существовала задолго до появления интернета, но теперь она
приобретает новый смысл в цифровую эпоху.
А личные знакомства они, как правило, достаточно локальные. А следовательно, в ближайшее время мы увидим расцвет
изолированных «анклавов» из _лично_ знакомых между собой людей, который и будут существовать своими маленькими,
**гиперлокальными** сообществами. Размер при этом может быть почти любой, как группка из трёх друзей, так и небольшой
клуб из пары десятков _лично знакомых_ единомышленников.
Причём, примеры гиперлокальных сообществ уже сейчас есть и в большом количестве. Например, у меня с друзьями уже почти
10 лет есть свой маленький чатик на шесть голов. И, в принципе, этого круга общения мне вполне хватает. И в своём кругу
мы, конечно же, уверенны в «человечности» каждого из нас, ибо знакомы и ИРЛ.
Причём, «достаточность» этого кружка для меня такая, что если у меня, вдруг, магическим образом, останется только этот
чатик, мой NAS в который загруженно примерно 50К книг и несколько любимых сериалов, и, конечно, VPN до работы, чтобы
я мог зарабатывать на жизнь — то, это и будет вся моя гиперлокальная сеть. И как будто, не сильно то я и потеряю если
останется только это, ну или как минимум, уж точно выживу.
Если что, это именно магически и гипотетически, но тем не менее.
Так же, подобные кружки, я видел и,
например, у своих старших родственников. Они, в основном, устраивают гиперлокальные «кружки» в том же вотсаппе. Там
они делятся рекомендациями фильмов, рецептами, шутками, новостями и прочим подобным.
## А к чему я это всё?
Да к тому что на текущем этапе развития интернета, мы всё больше уходим от **глобальной** сети к **гиперлокальной**.
И, наверное, мне это даже вполне нравится. Это как-то... уютно чтоли.
{{< figure src="/posts/2024-11-27-hyperlocality/camp.jpg" title="Примерно так я визуализирую гиперлокальное сообщество" >}}
# Перспективы
Дисклеймер. Дальше идут мои размышления, которые основываются в основном на интуитивных, а не объективных предположениях
С развитием этого тренда будут всё больше и больше отмирать крупные социальные сети типа ВК или РКНбука. История сделает
виток и восскресит т.н. локалки, которые были популярны в 90е-00е. Конечно же, уже в другом облике. Никто не будет
лазать по чердакам чтобы протянуть витуху между соседями, но именно суть останется. А суть в том, что будет бо́льшая
концентрация на небольшом числе условно локальных ресурсов, где человек будет только со своими друзьями, а «большой»
интернет отходит на второй план.
Так же могут получить развитие indieweb технологии, а так же self-hosted решения для общения, например, Matrix.
Эти инструменты потребуются как ответ на заполненные ботами и спамом соцсети и мессенджеры.
Конечно же, всё что нужно не затащить в свою уютненькую локалочку, но вылазка за недостающей инфой в интернет будет
ощущаться, как выход из своей зоны комфорта в дикую и опасную пустошь.
{{< figure src="/posts/2024-11-27-hyperlocality/in-internet.jpg" title="Вылазка в «большой» интернет" >}}
# Окончание?
Я отдаю себе отчёт что то, что я написал выше — весьма сумбурно. Но это следствие того, что я ещё не до конца исследовал
эту тему, и многие мысли на эту тему в моей голове пока ещё не сформированы в слова, а остаются на интуитивном уровне.
А написал я это, скорее как повод начать дискуссию на эту тему. Мне интересно, что вы думаете по этой теме. Возможно,
мнение со стороны меня наведёт на еще какие мысли.
В дальнейшем у меня уже есть некоторые мысли на развитие темы, но уже в каких то отдельных аспектах.
Остаёмся на связи, 73!

View file

@ -0,0 +1,22 @@
+++
Title = 'Мои игры'
Type = "pico8"
+++
Мои небольшие игрушки на прекрасном движке PICO-8
<!--more-->
И на всякий случай дистрибутивы самих приложений.
Ведь их больше не купить у нас в стране, а значит это не пиратство, а корсарство! Яррр!
- PICO-8
- [Linux](/upload/pico-8_0_2_6b_amd64.zip)
- [macOS](/upload/pico-8_0_2_6b_osx.zip)
- [Windows](/upload/pico-8_0_2_6b_windows.zip)
- Picotron
- [Linux](/upload/picotron_0_1_0g_amd64.zip)
- [macOS](/upload/picotron_0_1_0g_osx.zip)
- [Windows](/upload/picotron_0_1_0g_windows.zip)
- Voxatron
- [Linux](/upload/voxatron_0_3_5b_amd64.zip)
- [macOS](/upload/voxatron_0_3_5b_osx.zip)
- [Windows](/upload/voxatron_0_3_5b_windows.zip)

View file

@ -0,0 +1,5 @@
+++
Title="Шарики"
Game="/projects/games/bubblebreaker.p8.png"
Type="pico8"
+++

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

View file

@ -0,0 +1,5 @@
+++
Title="Пятнашки"
Game="/projects/games/gameof15.p8.png"
Type="pico8"
+++

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

View file

@ -0,0 +1,5 @@
+++
Title="Цветные линии"
Game="/projects/games/lines.p8.png"
Type="pico8"
+++

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

View file

@ -0,0 +1,5 @@
+++
Title="Змейка"
Game="/projects/games/snake.p8.png"
Type="pico8"
+++

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

View file

@ -2,6 +2,7 @@
description = 'Мой небольшой Jabber сервер' description = 'Мой небольшой Jabber сервер'
slug = 'jabber' slug = 'jabber'
title = 'Jabber' title = 'Jabber'
draft = true
+++ +++
## Быстрое вкатывание ## Быстрое вкатывание

View file

@ -3,7 +3,6 @@ languageCode = "ru-RU"
DefaultContentLanguage = "ru" DefaultContentLanguage = "ru"
Title = "~/neonxp.log" Title = "~/neonxp.log"
enableRobotsTXT = true enableRobotsTXT = true
theme = "neonxp"
[params] [params]
logo = "/img/logo.png" logo = "/img/logo.png"
@ -28,6 +27,11 @@ name = 'Проекты'
pageRef = '/projects' pageRef = '/projects'
weight = 10 weight = 10
[[menus.main]]
name = 'Игры'
pageRef = '/projects/games'
weight = 15
[[menus.main]] [[menus.main]]
name = 'Бортжурнал' name = 'Бортжурнал'
pageRef = '/posts' pageRef = '/posts'
@ -63,6 +67,11 @@ name = 'Проекты'
pageRef = '/projects' pageRef = '/projects'
weight = 40 weight = 40
[[menus.sections]]
name = 'Игры'
pageRef = '/projects/games'
weight = 50
[[menus.sections]] [[menus.sections]]
name = 'Архив блога' name = 'Архив блога'
pageRef = '/archive' pageRef = '/archive'

View file

@ -9,7 +9,7 @@
<div class="h-entry col-xs-12 col-sm-12 col-md-8 col-lg-8"> <div class="h-entry col-xs-12 col-sm-12 col-md-8 col-lg-8">
<article> <article>
<header> <header>
<div class="row between-sm"> <div class="row between-xs">
<span class="p-name"> {{ .Title }} </span> <span class="p-name"> {{ .Title }} </span>
<a href="/posts/index.xml">{{ partial "icon.html" "rss" }}</a> <a href="/posts/index.xml">{{ partial "icon.html" "rss" }}</a>
</div> </div>

View file

@ -10,7 +10,7 @@
{{ if .Title }} {{ if .Title }}
<article> <article>
<header> <header>
<div class="row between-sm"> <div class="row between-xs">
<span class="p-name"> {{ .Title }} </span> <span class="p-name"> {{ .Title }} </span>
<a href="index.xml">{{ partial "icon.html" "rss" }}</a> <a href="index.xml">{{ partial "icon.html" "rss" }}</a>
</div> </div>

View file

@ -15,7 +15,7 @@
<div class="h-entry col-xs-12 col-sm-12 col-md-8 col-lg-8"> <div class="h-entry col-xs-12 col-sm-12 col-md-8 col-lg-8">
<article> <article>
<header> <header>
<div class="row between-sm"> <div class="row between-xs">
<span class="p-name"> {{ .Title }} </span> <span class="p-name"> {{ .Title }} </span>
{{ if .Date }} {{ if .Date }}
{{ $dateMachine := .Date | time.Format "2006-01-02T15:04:05-07:00" }} {{ $dateMachine := .Date | time.Format "2006-01-02T15:04:05-07:00" }}
@ -24,10 +24,13 @@
{{ end }} {{ end }}
</div> </div>
</header> </header>
{{ if .Params.Image }}
<img src="{{.Params.Image}}" />
{{ end }}
<div class="p-summary">{{ .Summary }}</div> <div class="p-summary">{{ .Summary }}</div>
<div class="e-content">{{ .Content }}</div> <div class="e-content">{{ .Content }}</div>
<footer> <footer>
<div class="row between-sm"> <div class="row between-xs">
<span> <span>
{{ partial "terms.html" (dict "taxonomy" "tags" "page" .) }} {{ partial "terms.html" (dict "taxonomy" "tags" "page" .) }}
</span> </span>

View file

@ -9,6 +9,9 @@
{{ end }} {{ end }}
</div> </div>
</header> </header>
{{ if .Params.Image }}
<img src="{{ .RelPermalink }}{{.Params.Image}}" />
{{ end }}
{{ if .Description }} {{ if .Description }}
{{ .Description }} {{ .Description }}
{{ else }} {{ else }}

50
layouts/pico8/list.html Normal file
View file

@ -0,0 +1,50 @@
{{ define "main" }}
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-4 col-lg-4 last-xs last-sm first-md first-lg sidebar">
<article>
<header>Навигатор</header>
{{ partial "menu.html" (dict "menuID" "sections" "page" .) }}
</article>
</div>
<div class="h-entry col-xs-12 col-sm-12 col-md-8 col-lg-8">
{{ if .Title }}
<article>
<header>
<div class="row between-xs">
<span class="p-name"> {{ .Title }} </span>
</div>
</header>
{{ .Content }}
</article>
{{ end }}
{{ $paginator := .Paginate .Pages 7 }}
{{ range $paginator.Pages }}
<article>
<header>
<div class="row between-sm">
<a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
{{ if .Date }}
<span>
{{- .Date | time.Format (or .Site.Params.dateFormat.published "02 Jan 2006") -}}
</span>
{{ end }}
</div>
</header>
{{ if .Description }}
{{ .Description }}
{{ else }}
{{ .Summary }}
{{ end }}
<a href="{{ .RelPermalink }}">
<img src="{{ .Params.Game }}" />
</a>
<footer>
<a href="{{ .Params.Game }}">Скачать</a>
</footer>
</article>
{{ end }}
<nav>{{ partial "pagination.html" . }}</nav>
</div>
</div>
{{ end }}

106
layouts/pico8/single.html Normal file
View file

@ -0,0 +1,106 @@
{{ define "main" }}
<div class="row">
<div
class="col-xs-12 col-sm-12 col-md-4 col-lg-4 last-xs last-sm first-md first-lg sidebar"
>
{{ if .Params.toc }}
<article>
<header>Содержание</header>
<aside>{{ .TableOfContents }}</aside>
</article>
{{ end }}
<article>
<header>Навигатор</header>
{{ partial "menu.html" (dict "menuID" "sections" "page" .) }}
</article>
</div>
<div class="h-entry col-xs-12 col-sm-12 col-md-8 col-lg-8">
<article>
<header>
<div class="row between-xs">
<span class="p-name"> {{ .Title }} </span>
</div>
</header>
<div id="pico-container">
<!-- <div class="buttons">
<button
id="pico-up"
style="grid-area: up"
onclick="PicoPress(3, 0)"
>
&uArr;
</button>
<button
id="pico-down"
style="grid-area: down"
onclick="PicoPress(3, 0)"
>
&dArr;
</button>
<button
id="pico-left"
style="grid-area: left"
onclick="PicoPress(3, 0)"
>
&lArr;
</button>
<button
id="pico-right"
style="grid-area: right"
onclick="PicoPress(3, 0)"
>
&rArr;
</button>
<button
id="pico-a"
style="grid-area: a"
onclick="PicoPress(3, 0)"
>
A
</button>
<button
id="pico-b"
style="grid-area: b"
onclick="PicoPress(3, 0)"
>
B
</button>
<div class="square_hack"></div>
</div> -->
</div>
<h2>Управление</h2>
<h3>Игрок 1</h3>
<img src="/img/p8_lf.png" />&larr;&nbsp;
<img src="/img/p8_rt.png" />&rarr;&nbsp;
<img src="/img/p8_up.png" />&uarr;&nbsp;
<img src="/img/p8_dw.png" />&darr;&nbsp;
<img src="/img/p8_x.png" />Z C&nbsp;
<img src="/img/p8_o.png" />X V&nbsp;
<h3>Игрок 2</h3>
<img src="/img/p8_lf.png" /> S&nbsp;
<img src="/img/p8_rt.png" /> F&nbsp;
<img src="/img/p8_up.png" /> E&nbsp;
<img src="/img/p8_dw.png" /> D&nbsp;
<img src="/img/p8_x.png" />Q W&nbsp;
<img src="/img/p8_o.png" />TAB&nbsp;
<h3>Пауза</h3>
P/Enter
<footer>
<div class="row between-xs">
<a href="{{ .Params.Game }}">Скачать</a>
</div>
</footer>
</article>
{{ if .Params.comments }} {{ partial "comments.html" . }} {{ end }}
</div>
</div>
<script src="/js/picoplayer.js"></script>
<script src="/js/pico8.js"></script>
<script>
document.addEventListener("DOMContentLoaded", function (event) {
PicoPlayer("pico-container", "{{.Params.Game}}");
});
</script>
{{ end }}

View file

@ -0,0 +1,8 @@
{
"m.homeserver": {
"base_url": "https://neonxp.ru:443"
},
"org.matrix.msc3575.proxy": {
"url": "https://neonxp.ru:443"
}
}

View file

@ -0,0 +1,3 @@
{
"m.server": "https://neonxp.ru:443"
}

BIN
static/img/p8_dw.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 674 B

BIN
static/img/p8_lf.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

BIN
static/img/p8_o.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 676 B

BIN
static/img/p8_rt.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 675 B

BIN
static/img/p8_up.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 674 B

BIN
static/img/p8_x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 680 B

25
static/js/pico8.js Normal file

File diff suppressed because one or more lines are too long

118
static/js/picoplayer.js Normal file
View file

@ -0,0 +1,118 @@
// Big thanks to https://github.com/AfBu/PicoLoader
// pico-8 web player variables that must be present
var Module;
var playable_area_count = 0;
var playarea_state = 0;
var codo_command = 0;
var codo_command_p = 0;
var codo_volume = 256;
var codo_running = true;
var pa_pid = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
// Pico-8 buttons to Web Player key codes lookup table
var pico8keys = [
[37, 39, 38, 40, 90, 88],
[83, 70, 69, 68, 9, 81]
];
// Loads pico8 web player library and setups everything to run
function PicoPlayer(element, cart, lib) {
// fallback to bbs version of pico8 console
if (!lib) {
lib = '/js/pico8.js';
}
// load element by ID
if (typeof(element) == 'string') {
element = document.getElementById(element);
}
// create canvas and add it into element
var canvas = document.createElement('canvas');
element.appendChild(canvas);
// setup module to load card and point to our canvas
Module = {
arguments: [cart],
canvas: canvas
};
// load pico8 library
var head = document.getElementsByTagName('head')[0];
var js = document.createElement('script');
js.src = lib;
head.appendChild(js);
}
// press button
function PicoPress(k, p) {
var kc = pico8keys[p][k];
gd({
type: 'keydown',
keyCode: kc
});
}
// release button
function PicoRelease(k, p) {
var kc = pico8keys[p][k];
gd({
type: 'keyup',
keyCode: kc
});
}
// set volume (0 - 256)
function PicoVolume(vol) {
codo_volume = vol;
codo_command = 2;
codo_command_p = codo_volume;
}
// toggle sound
function PicoMute() {
codo_volume = (codo_volume == 0 ? 256 : 0);
codo_command = 2;
codo_command_p = codo_volume;
}
// toggle pause
function PicoPause() {
codo_running = !codo_running;
if (codo_running) {
Module.resumeMainLoop();
} else {
Module.pauseMainLoop();
}
}
// reset cart
function PicoReset() {
codo_command = 1;
codo_running = true;
Module.resumeMainLoop();
}
window.addEventListener('keydown', (e) => {
if (e.target.localName != 'input') {
switch (e.keyCode) {
case 37: // left
case 39: // right
e.preventDefault();
break;
case 38: // up
case 40: // down
e.preventDefault();
break;
default:
break;
}
}
}, {
capture: true,
passive: false
});

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

View file

@ -1,21 +0,0 @@
MIT License
Copyright (c) 2024 Alexander Kiryukhin
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -1,7 +0,0 @@
# Theme Name
## Features
## Installation
## Configuration

View file

@ -1,5 +0,0 @@
+++
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
date = {{ .Date }}
draft = true
+++

View file

@ -1,45 +0,0 @@
.p-summary {
display: none;
}
.logo {
height: 64px;
}
.print-footer {
display: none;
}
figcaption {
text-align: center;
}
@media print {
.sidebar {
display: none;
}
article {
border: 0
}
article footer {
display: none;
}
.container>header {
display: none;
}
.container>footer {
display: none;
}
.comments {
display: none;
}
.h-entry {
width: 100% !important;
}
.container {
width: 100% !important;
}
.print-footer {
display: block !important;
}
}

View file

@ -1,23 +0,0 @@
baseURL = 'https://example.org/'
languageCode = 'en-US'
title = 'My New Hugo Site'
[[menus.main]]
name = 'Home'
pageRef = '/'
weight = 10
[[menus.main]]
name = 'Posts'
pageRef = '/posts'
weight = 20
[[menus.main]]
name = 'Tags'
pageRef = '/tags'
weight = 30
[module]
[module.hugoVersion]
extended = false
min = "0.116.0"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

View file

@ -1,20 +0,0 @@
name = 'NeonXP Theme'
license = 'MIT'
licenselink = 'https://git.neonxp.ru/neonxp/theme/LICENSE'
description = 'My own theme based on PicoCSS'
# The home page of the theme, where the source can be found
homepage = 'https://git.neonxp.ru/neonxp/theme'
# If you have a running demo of the theme
demosite = 'https://neonxp.ru'
# Taxonomy terms
tags = ['blog', 'minimal', 'personal']
features = ['remark42', 'microformats']
# If the theme has a single author
[author]
name = 'Alexander NeonXP Kiryukhin'
homepage = 'https://neonxp.ru/'