Перейти к основному содержимому

· 2 мин. чтения

Насчет __mode совсем недавно узнал как работает. Штука очень классная и полезная.

По-простому объясняя, нужно понимать, что сборщик мусора считает мусором те данные, на которые больше нигде не осталось ссылок.

Сами ссылки ты устанавливаешь, когда например добавляешь данные в таблицу. Пример:

local arr = {}
QWE[1] = arr

Теперь на таблицу arr установлена одна сильная ссылка. Если сделать QWE[1] = nil, то ссылок больше не останется и сборщик потом удалит эту табличку

__mode позволяет устанавливать таблицам инструкцию, что закрепленные за ней ключи или значения не будут создавать сильные ссылки (они называются слабыми)

Если мы сделаем setmetatable(QWE, {__mode = "v"}) (тем самым сказав, что значения таблицы QWE не считаются сильными ссылками) и повторим наш QWE[1] = arr, то сборщик мусора зачистит наш arr и при print(QWE[1]) после работы сборщика отпринтит nil

Слабыми можно делать и ключи, тогда нужно указать mode "v". Или и ключи и значения: "kv".

Реальное применение

Я узнал об этом совсем недавно, но успел применить так: в новой версии IGS полностью переписан API framework. Репитер упавших запросов сделан отдельным модулем. Так вот тот репитер повторяет запросы, которые по некоторым причинам провалились, но делает это не более 15 раз.

В качестве счетчика используется ключ-значение таблица, где ключом выступает сама функция, а значением число раз, которое я пытался ее выполнить. Напоминаю, что в Lua функции передаются ссылками. Так вот ключи этой таблицы я сделал слабыми ссылками и если функция удаляется сборщиком где-то из вне, то ее счетчик в таблице так же автоматически очищается и мне не приходится следить за этим "вручную".

· 5 мин. чтения

UPD 2023.12.15

В этом заканчивающемся году мы разработали и создали еще один дизайн мундштуков для другого заведения.

space

В этот раз дизайн помогла нарисовать нейронка 🔥 (берите идею на заметку). Но от этого он мне только больше нравится.

P.S. Советую выбирать резиновые колечки для шланга. Если на пластиковом сломается крепление с металлической частью, то мундштук пойдет в мусорку. В случае с резиновой можно зацепить карабинчик за основное кольцо.


Рассказ о нюансах, которые возникли при заказе, разработке и производстве персональных мундштуков. Больше всего времени и лишние расходы произошли именно из-за "нюансов"

Недавно мой хороший знакомый открыл свою кальянную и мне захотелось сделать для нее подарок - набор персональных мундштуков.

· 2 мин. чтения

После Праги Загреб был глотком свежего воздуха - именно таким я представлял европейский город еще до первого раза за границей

Хорошие дороги, приветливые люди, маленькие домики, интеграция всяческих технологий во все. Есть даже биткоин терминалы!! Да это же настоящий киберпанк, Карл.

· 1 мин. чтения

Без навыков программирования, сторонних ботов, смс и регистрации!

TL;DR

Заменяем в этой ссылке последнее слово на адрес вашего канала и используйте его в качестве RSS ссылки: https://rsshub.app/telegram/channel/tlitter

Также вы можете попробовать использовать этот бот: @crssbot, но он вроде медленно обновлял информацию и не поддерживается

Зачем это мне

Вкратце - vk.com/rurage. Сюда временно дублируется содержание моего t.me/tlitter канала

Я почти забросил VK после начала активного использования телеги и даже написал бота, который присылает мне в телегу посты с групп ВК. Но и у меня самого остается несколько групп в VK, в которые мне самому нужно писать. Чтобы не писать в Telegram и группу одновременно, я сделал, чтобы VK сам забирал новые посты с Telegram

Бонус

Сначала я нашел способ просматривать содержимое канала без регистрации и думал, что придется парсить содержимое с такой страницы: https://t.me/s/tlitter. Но страницу можно использовать даже чтобы просто показывать содержимое канала тем, кто не зарегистрирован в телеграме.

· 3 мин. чтения

Этот блог работает внутри Docker контейнера и использует Traefik в качестве reverse proxy для Ghost. Недавно вышла версия v2.0, в которой были изменены некоторые фундаментальные особенности, что требует переконфигурации trafik.toml, acme.json и docker-compose.yml

У Traefik есть официальная инструкция по обновлению, и то ли я дурак, то ли ее стоит доработать, но факт в том, что после получаса вкуривания заново все настроить для меня было гораздо проще и полезнее

· 2 мин. чтения

21 декабря 2018 года я рискнул полететь на месяц за границу с человеком, которого к тому времени видел раз в жизни) Как и с Будапештом, собрал несколько заметок

Учет расходов велся, потом пилился на двоих, но я его потерял. Помню только, что за месяц там потратили меньше, чем в Украине

· 1 мин. чтения

Итак, вы уже знаете какой-то язык, нашли GitHub репозиторий с проектом на Golang и решили его поковырять. В основах, как тру проггер разберетесь методом тыка, нужно как-то только начать. Hello World для слабаков

Установка Golang:

Использую Ubuntu 18.04
Я установил то, что было в системе: apt update && apt install -y golang-go
Встала версия go1.10.4 (свежая 1.13)
Установка свежего описана тут

Запуск приложения с GitHub

Для примера возьмем LazyDocker.

  1. Скачиваем: go get github.com/jesseduffield/lazydocker
  2. Переходим в папку: cd ~/go/src/github.com/jesseduffield/lazydocker (вместо ~/go может быть другой путь. Смотрим echo $GOPATH)
  3. Чтобы запустить приложение используем go run main.go. Чтобы сделать бинарник go build -o lazydocker main.go. Бинарник запускается через ./lazydocker и его можно переносить между системами с той же архитектурой, даже если там нет golang

Бонус:

Документация godoc fmt Println
Второе - название пакета, третье - функция

godoc -http=":6060" - запустит вебсервер с докой на :6060 порту

· 6 мин. чтения

Этот блог работает (на момент написания) внутри Docker контейнера. Привязка обеспечивает загрузку картинок в хранилище Amazon S3 вместо сохранения на локальном диске, поэтому контейнер остается stateless и ему плевать на перезагрузки и ребилды

За загрузку и получение картинок со сторонних сервисов в Ghost отвечают storage adapters. Я использую ghost-storage-adapter-s3 и это был мой первый опыт работы с AWS.