Серьезная реновация
4
Makefile
|
@ -2,4 +2,6 @@
|
|||
|
||||
deploy:
|
||||
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
|
@ -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%;
|
||||
}
|
Before Width: | Height: | Size: 453 B After Width: | Height: | Size: 453 B |
|
@ -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)
|
|
@ -1,7 +1,7 @@
|
|||
+++
|
||||
categories = ['Без рубрики']
|
||||
date = '2024-07-13T20:49:12Z'
|
||||
image = '/upload/top-encrypted-todo-and-note-taking-apps-01.jpg'
|
||||
image = 'joplin.jpg'
|
||||
tags = ['it', 'joplin']
|
||||
title = 'Заметочник Joplin'
|
||||
+++
|
Before Width: | Height: | Size: 192 KiB After Width: | Height: | Size: 192 KiB |
|
@ -1,8 +1,6 @@
|
|||
+++
|
||||
categories = ['Без рубрики']
|
||||
date = '2024-09-26T19:05:00Z'
|
||||
image = '/upload/logo.png'
|
||||
location = ['На базе']
|
||||
tags = ['блог']
|
||||
title = 'Hugo → WordPress'
|
||||
+++
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
|
@ -1,7 +1,7 @@
|
|||
+++
|
||||
categories = ['Мои проекты']
|
||||
date = '2024-10-06T12:00:11Z'
|
||||
image = '/upload/bash_org.jpg'
|
||||
image = 'bash_org.jpg'
|
||||
tags = ['go', 'it', 'моё']
|
||||
title = 'Цитатник Рунета'
|
||||
+++
|
Before Width: | Height: | Size: 96 KiB After Width: | Height: | Size: 96 KiB |
|
@ -1,7 +1,7 @@
|
|||
+++
|
||||
categories = ['Без рубрики']
|
||||
date = '2024-10-17T19:26:00Z'
|
||||
image = '/upload/Rama16wiki.jpg'
|
||||
image = 'Rama16wiki.jpg'
|
||||
tags = ['книги']
|
||||
title = 'Книжные рекомендации №2'
|
||||
+++
|
||||
|
@ -28,4 +28,4 @@ title = 'Книжные рекомендации №2'
|
|||
|
||||
Книга является частью цикла, и я прикладываю цикл целиком:
|
||||
|
||||
[Цикл «КенгХо» скачать](https://neonxp.ru/upload/КенгХо.zip)
|
||||
[Цикл «КенгХо» скачать](КенгХо.zip)
|
|
@ -11,7 +11,7 @@ location = "Казань"
|
|||
|
||||
С тех пор мои вкусы несколько поменялись и я открыл для себя его величество [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 это же генератор статичных сайтов, куда ты ему будешь отправлять заметку для публикации?» — можешь спросить
|
||||
меня ты. А я отвечу что у меня вот такой план:
|
||||
|
||||
{{< figure src="/img/posts/obsidian/publish.png" title="план-кабан" >}}
|
||||
{{< figure src="/posts/2024-11-17-obsidian/publish.png" title="план-кабан" >}}
|
||||
|
||||
То что выделено красным — ещё не существует в природе.
|
||||
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 77 KiB |
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 61 KiB |
BIN
content/posts/2024-11-27-hyperlocality/90e.jpg
Normal file
After Width: | Height: | Size: 130 KiB |
BIN
content/posts/2024-11-27-hyperlocality/braindance.jpg
Normal file
After Width: | Height: | Size: 190 KiB |
BIN
content/posts/2024-11-27-hyperlocality/camp.jpg
Normal file
After Width: | Height: | Size: 222 KiB |
BIN
content/posts/2024-11-27-hyperlocality/in-internet.jpg
Normal file
After Width: | Height: | Size: 176 KiB |
139
content/posts/2024-11-27-hyperlocality/index.md
Normal 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!
|
22
content/projects/games/_index.md
Normal 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)
|
5
content/projects/games/bubblebreaker.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
+++
|
||||
Title="Шарики"
|
||||
Game="/projects/games/bubblebreaker.p8.png"
|
||||
Type="pico8"
|
||||
+++
|
BIN
content/projects/games/bubblebreaker.p8.png
Normal file
After Width: | Height: | Size: 9.5 KiB |
5
content/projects/games/gameof15.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
+++
|
||||
Title="Пятнашки"
|
||||
Game="/projects/games/gameof15.p8.png"
|
||||
Type="pico8"
|
||||
+++
|
BIN
content/projects/games/gameof15.p8.png
Normal file
After Width: | Height: | Size: 5.7 KiB |
5
content/projects/games/lines.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
+++
|
||||
Title="Цветные линии"
|
||||
Game="/projects/games/lines.p8.png"
|
||||
Type="pico8"
|
||||
+++
|
BIN
content/projects/games/lines.p8.png
Normal file
After Width: | Height: | Size: 7.3 KiB |
5
content/projects/games/snake.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
+++
|
||||
Title="Змейка"
|
||||
Game="/projects/games/snake.p8.png"
|
||||
Type="pico8"
|
||||
+++
|
BIN
content/projects/games/snake.p8.png
Normal file
After Width: | Height: | Size: 6.2 KiB |
|
@ -2,6 +2,7 @@
|
|||
description = 'Мой небольшой Jabber сервер'
|
||||
slug = 'jabber'
|
||||
title = 'Jabber'
|
||||
draft = true
|
||||
+++
|
||||
|
||||
## Быстрое вкатывание
|
||||
|
|
11
hugo.toml
|
@ -3,7 +3,6 @@ languageCode = "ru-RU"
|
|||
DefaultContentLanguage = "ru"
|
||||
Title = "~/neonxp.log"
|
||||
enableRobotsTXT = true
|
||||
theme = "neonxp"
|
||||
|
||||
[params]
|
||||
logo = "/img/logo.png"
|
||||
|
@ -28,6 +27,11 @@ name = 'Проекты'
|
|||
pageRef = '/projects'
|
||||
weight = 10
|
||||
|
||||
[[menus.main]]
|
||||
name = 'Игры'
|
||||
pageRef = '/projects/games'
|
||||
weight = 15
|
||||
|
||||
[[menus.main]]
|
||||
name = 'Бортжурнал'
|
||||
pageRef = '/posts'
|
||||
|
@ -63,6 +67,11 @@ name = 'Проекты'
|
|||
pageRef = '/projects'
|
||||
weight = 40
|
||||
|
||||
[[menus.sections]]
|
||||
name = 'Игры'
|
||||
pageRef = '/projects/games'
|
||||
weight = 50
|
||||
|
||||
[[menus.sections]]
|
||||
name = 'Архив блога'
|
||||
pageRef = '/archive'
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
<div class="h-entry col-xs-12 col-sm-12 col-md-8 col-lg-8">
|
||||
<article>
|
||||
<header>
|
||||
<div class="row between-sm">
|
||||
<div class="row between-xs">
|
||||
<span class="p-name"> {{ .Title }} </span>
|
||||
<a href="/posts/index.xml">{{ partial "icon.html" "rss" }}</a>
|
||||
</div>
|
|
@ -10,7 +10,7 @@
|
|||
{{ if .Title }}
|
||||
<article>
|
||||
<header>
|
||||
<div class="row between-sm">
|
||||
<div class="row between-xs">
|
||||
<span class="p-name"> {{ .Title }} </span>
|
||||
<a href="index.xml">{{ partial "icon.html" "rss" }}</a>
|
||||
</div>
|
|
@ -15,7 +15,7 @@
|
|||
<div class="h-entry col-xs-12 col-sm-12 col-md-8 col-lg-8">
|
||||
<article>
|
||||
<header>
|
||||
<div class="row between-sm">
|
||||
<div class="row between-xs">
|
||||
<span class="p-name"> {{ .Title }} </span>
|
||||
{{ if .Date }}
|
||||
{{ $dateMachine := .Date | time.Format "2006-01-02T15:04:05-07:00" }}
|
||||
|
@ -24,10 +24,13 @@
|
|||
{{ end }}
|
||||
</div>
|
||||
</header>
|
||||
{{ if .Params.Image }}
|
||||
<img src="{{.Params.Image}}" />
|
||||
{{ end }}
|
||||
<div class="p-summary">{{ .Summary }}</div>
|
||||
<div class="e-content">{{ .Content }}</div>
|
||||
<footer>
|
||||
<div class="row between-sm">
|
||||
<div class="row between-xs">
|
||||
<span>
|
||||
{{ partial "terms.html" (dict "taxonomy" "tags" "page" .) }}
|
||||
</span>
|
|
@ -9,6 +9,9 @@
|
|||
{{ end }}
|
||||
</div>
|
||||
</header>
|
||||
{{ if .Params.Image }}
|
||||
<img src="{{ .RelPermalink }}{{.Params.Image}}" />
|
||||
{{ end }}
|
||||
{{ if .Description }}
|
||||
{{ .Description }}
|
||||
{{ else }}
|
50
layouts/pico8/list.html
Normal 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
|
@ -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)"
|
||||
>
|
||||
⇑
|
||||
</button>
|
||||
<button
|
||||
id="pico-down"
|
||||
style="grid-area: down"
|
||||
onclick="PicoPress(3, 0)"
|
||||
>
|
||||
⇓
|
||||
</button>
|
||||
<button
|
||||
id="pico-left"
|
||||
style="grid-area: left"
|
||||
onclick="PicoPress(3, 0)"
|
||||
>
|
||||
⇐
|
||||
</button>
|
||||
<button
|
||||
id="pico-right"
|
||||
style="grid-area: right"
|
||||
onclick="PicoPress(3, 0)"
|
||||
>
|
||||
⇒
|
||||
</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" />←
|
||||
<img src="/img/p8_rt.png" />→
|
||||
<img src="/img/p8_up.png" />↑
|
||||
<img src="/img/p8_dw.png" />↓
|
||||
<img src="/img/p8_x.png" />Z C
|
||||
<img src="/img/p8_o.png" />X V
|
||||
<h3>Игрок 2</h3>
|
||||
<img src="/img/p8_lf.png" /> S
|
||||
<img src="/img/p8_rt.png" /> F
|
||||
<img src="/img/p8_up.png" /> E
|
||||
<img src="/img/p8_dw.png" /> D
|
||||
<img src="/img/p8_x.png" />Q W
|
||||
<img src="/img/p8_o.png" />TAB
|
||||
<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 }}
|
8
static/.well-known/matrix/client/index.json
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"m.homeserver": {
|
||||
"base_url": "https://neonxp.ru:443"
|
||||
},
|
||||
"org.matrix.msc3575.proxy": {
|
||||
"url": "https://neonxp.ru:443"
|
||||
}
|
||||
}
|
3
static/.well-known/matrix/server/index.json
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"m.server": "https://neonxp.ru:443"
|
||||
}
|
BIN
static/img/p8_dw.png
Normal file
After Width: | Height: | Size: 674 B |
BIN
static/img/p8_lf.png
Normal file
After Width: | Height: | Size: 673 B |
BIN
static/img/p8_o.png
Normal file
After Width: | Height: | Size: 676 B |
BIN
static/img/p8_rt.png
Normal file
After Width: | Height: | Size: 675 B |
BIN
static/img/p8_up.png
Normal file
After Width: | Height: | Size: 674 B |
BIN
static/img/p8_x.png
Normal file
After Width: | Height: | Size: 680 B |
25
static/js/pico8.js
Normal file
118
static/js/picoplayer.js
Normal 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
|
||||
});
|
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 13 KiB |
|
@ -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.
|
|
@ -1,7 +0,0 @@
|
|||
# Theme Name
|
||||
|
||||
## Features
|
||||
|
||||
## Installation
|
||||
|
||||
## Configuration
|
|
@ -1,5 +0,0 @@
|
|||
+++
|
||||
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
|
||||
date = {{ .Date }}
|
||||
draft = true
|
||||
+++
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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"
|
Before Width: | Height: | Size: 20 KiB |
|
@ -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/'
|
||||
|