Как стать автором
Обновить

Все потоки

Сначала показывать
Период

Тестировал всякое для ATARI XL/XE и написал небольшую демку в 107 Байт.

Чтобы понимать куда именно смотреть - тут экран 48х24, то есть 1152 байта, но в ОЗУ весь экран представлен всего 48 байтами, еще 78 байт (кто захочет посчитать 48+78=126, тут просто кодом реализованы однотипные строки) для программирования видеочипа, которому объяснено, что каждая строка на экране смотрит на одну и ту же часть ОЗУ, так мы заполняем весь экран. Для получения нестандартного узора используется 8 байт и перепрограммирование таблицы символов. Рисунок изначально подбирается так чтобы формировался равномерный узор. Для плавности движения используется VSYNC, анимация реализована битовым сдвигом.

.include "atari.asm"
    *= $3000
	lda #48
?copy
	sta screen-1, y
	dey
	bpl ?copy
	ldy #$00
?copydl
	lda #$42
	sta dlist2, y
	iny
	lda #<screen
	sta dlist2, y
	iny
	lda #>screen
	sta dlist2, y
	iny
	cpy #72
	bne ?copydl
	lda #>font_data
	sta CHBAS
	lda #$23
	sta SDMCTL
	lda #<dlist
	sta SDLSTL
	lda #>dlist
	sta SDLSTL+1
?main
	ldx #1
?start
	lda RTCLOK+2
?wait
	cmp RTCLOK+2
	beq ?wait
	dex
	bpl ?start
?ring
    lda font_data, x
	asl
	adc #00
	sta font_data, x
	inx
	cpx #08
	bne ?ring
	beq ?main
dlist
	.byte $70, $70, $70
dlist2
	*= dlist2+72
	.byte $41, <dlist, >dlist
screen
	*= $7400
font_data
	.byte ~11000011
	.byte ~10011001
	.byte ~00100100
	.byte ~01000010
	.byte ~01000010
	.byte ~00100100
	.byte ~10011001
	.byte ~11000011

upd: -1 байт от @vadimr

Теги:
+13
Комментарии1

Наверно уже многие читали или слышали новость о том, что НСПК (Национальная система платежных карт) запускает новую систему бесконтактной оплаты «Волна», которая должна работать по Bluetooth. Подробного описания этой системы я найти не смог.

И тут у меня в голове возникла идея, как это может работать более безопасно, нежели просто по Bluetooth, ведь это не самая защищенная технология для проведения оплаты. Итак, приступим к знакомству и размышлениям.
Не так давно мы разработали устройство (на микросхеме NRF52833-QDAA от Nordic), которое должно идентифицировать пользователя по NFC смартфона и подключаться по Bluetooth BLE для дальнейшего обмена данными системы с приложением. Если простым языком, бесконтактное спаривание телефона с устройством по средствам NFC.

Вот я и подумал, что такая схема может работать для бесконтактной оплаты. Открываем приложение банка, подносим телефон к терминалу и нажимаем кнопу оплатить. По NFC телефон и терминал идентифицируют друг друга, а дальше уже происходит передача шифрованных данных по каналу Bluetooth.

Приложение «NFC Tools» для чтения и записи NFC доступно в AppStore, а это значит, что некую часть NFC, Купертиновцы оставили открытой для разработчиков ПО. Тем самым никто не мешает банкам, условно, добавить приложение «NFC Tools» в свои онлайн-банки и реализовать такой способ оплаты с двухфакторной аутентификацией.

Возможно, «Волна» будет работать как раз по такому принципу, который я описал, но на этот счет пока что стоит лишь догадываться.

Теги:
+7
Комментарии0

Задача об IP-адресах для новых сотрудников

Казалось бы, нет ничего сложного в том, чтобы раздать IP-адреса новым коллегам. Или есть? Давайте проверим.

Условие
В компании появилось пять новых сотрудников, и HR попросили сисадмина Платона помочь в подготовке рабочих мест.

У Платона есть список IP-адресов, но только часть из них можно назначить коллегам:

  • 172.16.0.2

  • 10.0.0.30

  • 10.255.255.255

  • 224.0.0.123

  • 192.168.1.50

  • ::/128

  • 172.31.255.10

  • 127.0.0.5

  • 192.168.0.25

  • 169.254.1.0

Задача
Помогите Платону: определите, какие адреса можно использовать, а какие нет. Объясните, почему другие не подходят.

Делитесь своими ответами в комментариях. А проверить себя можно в Академии Selectel →

Теги:
+5
Комментарии6

Прошлый мой пост снискал некоторую солидарность, так что имеет смысл написать, что же делать, чтобы починить IDEA/gradle.

Итак, если у вас что-то ошибочно красится красным в IDE, у нас есть все этапы принятия (Отрицание и Гнев можно менять местами):

  1. Отрицание

    1. File -> Invalidate caches... -> Clear file system cache and Local History (опционально отметить галочкой ClearVCS Log caches and indexes, мне иногда почему-то помогало)

    2. Перезагружаем, ждём градл индекса, потенциально - продолжаем гореть

  2. Гнев

    1. Пробуем почистить проект через ./gradlew clean

    2. Пробуем собрать через ./gradlew build

  3. Торг - Тут обычно есть два варианта: оно собралось во время Гнева или нет. Если нет - пропускаем второй подпункт

    1. Удаляем контент по пути ~/.m2/repository

    2. goto Отрицание

  4. Депрессия

    1. НЕ ТРОГАЕМ ~/.gradle/gradle.properties . Удаляем контент по пути ~/.gradle/ . Я обычно это делаю через файловый менеджер - выделить всё, развыделить gradle.properties, shift+delete

    2. goto Отрицание

  5. Принятие

    1. Можно переустановить систему, но может не помочь

    2. Лучше проделоть все предыдущие шаги (а вдруг второй раз поможет)

    3. Переклонировать проект (не забудьте закоммитить изменения)

    4. Переустановить IDE (2024.1.6 на данный момент относительно нормально работает, можно даже новый UI выключить) (желательно тогда ещё конфиги и кэши версий удалить, но сами понимаете - потом надо будет ковырять настройки и скачивать IDE)

Другого рецепта счастья у меня для вас сейчас нет, искренне желаю продуктивной работы на фоне стабильных IDE и систем сборки :)

Теги:
+4
Комментарии2

Давайте посмотрим, как в 9 уникальных технических кодов можно уместить пространственное положение матрицы третьего порядка.

Имеем подобное, как на картинке выше, представление подпространственности. У нас есть 1, 2, 3 (нижние границы отрезка или оси), 4, 5, 6 (верхние) и 7, 8 и 9 (сами пространственные отрезки). Кодируем 1, как 1, 2, как 12, 3, как 123, 4, как 1234, 5, как 12345 и тд., финализируя в тринарные значения матрицы 3х3, ПРОСТРАНСТВЕННО же разводя нашу десятку. Надеюсь данное не трудно. В следующих постах расскажу, как матрицу 3х3 запрограммировать к итоговым 3³. Не скучайте.

Теги:
+3
Комментарии0

Как мы интегрировали Managed Kubernetes с сервисами публичного облака — поделимся на IT-конференции GoCloud Tech 🎤

Приходите на конференцию GoCloud Tech — послушать доклад и обсудить тему в неформальной обстановке. Расскажем, как сервисы наблюдаемости помогают автоматизировать мониторинг, логирование и аудит в Kubernetes. Разберем, как повысить гибкость и масштабируемость решения с помощью интеграции облачных инфраструктурных сервисов, а безопасности приложений — с помощью систем управления ключами и секретами. А еще обсудим подводные камни, которые встречаются на пути межсервисной интеграции, и что с ними делать.

🕚 Когда: 24 октября с 16:05 до 16:30

📍 Где: онлайн и офлайн в Москве в лофт-пространстве Goelro

👉 Зарегистрироваться на GoCloud Tech

А еще сейчас вы можете подключить Evolution Managed Kubernetes и пользоваться сервисом со скидкой 60% до конца 2025 года.

Полезное в блоге:

Теги:
+3
Комментарии0

История тупняка.
В тестах я использую билдеры на минималках: создаю DTO и мутирую его с помощью универсального метода With или специальных методов расширений. Это позволяет устанавливать только важные для теста поля. Выглядит так-то так:

var person = DefaultPerson().With(x => Name = "Вася");
//или
var person = DefaultPerson().WithName("Вася");

И вот мне понадобилось в таком стиле работать с рекорадми, а они не мутируются. Ну я такой не растерялся, вспомнил, что есть нормальная реализация паттерна builder, когда мы сначала настраиваем builder, а потом потом уже создаём интересующий нас объект. Выгляди так раньше, только есть вызов Build().

var person = DefaultPerson().WithName("Вася").Build();

Минус в том, что билдер нужно писать, поэтому вспомнил про source-generators, нашёл библиотеку в которой просто объявляешь класс билдера, вешаешь атрибует, а остальное она сделает сама. Выглядит вот так:

[AutoGenerateBuilder(typeof(PersonDto))]
public partial class PersonDtoBuilder
{
}

А потом решил загуглить как народ выкручивается, искал по запросу C# record builder. И нашёл, что можно просто использовать ключевое слово with. Очень просто:

DefaultPerson() with {Name = "Вася" }; 

И знаете что? Я знал про with, просто никогда не пользовался и забыл. Такой вот тупняк на ровном месте.

Теги:
+2
Комментарии2

С недавних пор гугл требует верефицировать аккаунт разработчика. При этом необходимо подтвердить номер телефона и адрес.
Было много статей в СМИ о том, что гугл не принимает российские номера телефонов. И официальный ответ гугла, что дело не в стране. Сказали, у них глобальный сбой, который стремительно решают.
Стремительно решают они его уже год, при этом ничего не решается. А сообщения о том что номера не принимаются валятся в огромных количество от людей со всего света. Судя по всему, в ближайшее время гугл лишится половины приложений. Может в этом была какая то их глобальная задумка? Не знаю.

Практическая часть.
Телефон.

Не работают большинство российских операторов. Грузинские тоже не работают.
Работает российский Теле2. Сори за невольную рекламу.

Адрес.
С подтверждением адреса тоже проблема. Мой грузинский договор аренды они не приняли, сказали такого документа не знают.
Скан российского паспорта с пропиской тоже не приняли. Сказали, что документы из этой страны не принимают. Это, кстати, мог бы быть настоящий повод для возмущения в СМИ.
В итоге их устроила выписка со счета из банка с адресом. Сделал ее в Bank of Georgia. Что интересно, выписка делается через чат в приложении. Адрес можно назвать любой, никто не проверяет.

Итого, пройти верефикацию возможно. Но не факт, что с российским адресом.
С гуглом происходит какая-то хрень.

Спасибо за внимание.

PS: Мы подтвердили аккаунт и скоро стартуем наше приложение "Что почитать?"
А пока подписывайтесь на наш канал

Теги:
+2
Комментарии1