Search
Write a publication
Pull to refresh
21
0
Алексей @java73

Kotlin/Python fun hobby

Send message

Paging3 в стиле Compose: секретный DSL, о котором молчат все Android-разработчики

Level of difficultyMedium
Reading time11 min
Views2.9K

В статье описан путь преобразования предложенного экспертами Google способа отображения страничных данных с использованием библиотеки Paging3 и Compose от развесистого сборника if'ов и when'ов, вероломно нарушающего все границы архитектурных слоев, до чистого, лаконичного и затягивающего в себя DSL.

Погрузиться в магию

Proto DataStore + AndroidX Preferences на Kotlin

Reading time11 min
Views5.5K

С тех пор, как команда Google AndroidX представила на замену библиотеки SharedPreferences новую библиотеку DataStore, прошел почти год, однако популяризация новой либы явно не стоит в активных задачах. Иначе я не могу объяснить 1) неполноценный гайд, следуя лишь по которому, у вас вообще не соберется проект из-за отсутствия всех необходимых зависимостей и дополнительных build-задач для системы сборки, и 2) отсутствие не hello-world подобных примеров в CodeLabs, кроме одного, и то, заточенного не под пример использования библиотеки с нуля, а под миграцию с SharedPreferences на Preferences DataStore. Аналогично все статьи на Medium буквально или другими словами повторяют все то же, что написано в гайде Google, либо используют неправильные подходы для работы с DataStore, предлагая заворачивать асинхронный io-код в runBlocking прямо на ui-потоке.

А еще неплохо бы соединить "тыл" с "фронтом", так сказать: у Google имеется библиотека AndroidX Preferences, которая позволяет в два клика накидать готовый material-design фрагмент для управления настройками приложения, чтобы излюбленным способом кодогенерации освободить разработчика от написания boilerplate. Однако эта библиотека в качестве хранилища предлагает использовать устаревшие нынче SharedPreferences, а официального гайда по соединению с DataStore нет. В этой заметке я хотел бы своим способом устранить два описанных недостатка.

Читать далее

Простой вариант разношерстного recycler view на шаблоне Посетитель

Reading time13 min
Views7.1K

Прошло полгода, как я с паскаля перекатился на kotlin и влюбился в android-разработку, и вот уже разрешаю себе публично лезть со своими идеями в чужой монастырь. Но причина на то есть. Понаблюдав в профильных чатах за тем, какие чаще всего возникают вопросы у android-разработчиков, и не только у новичков, я понял, что в большинстве случаев, когда человек сталкивается с ошибкой, которую не может понять, как не может понять объяснение коллег из чата или их наводящие вопросы, причиной является бездумное использование готовых кусков кода или библиотек. Однако, полагаясь на готовые примеры кода, которые у них не работают (а в этой сфере код, написанный больше года назад, по умолчанию требует обновления или вообще переработки, и это касается кода со stack overflow, библиотечных гайдов и даже гайдов от самого Google), они не понимают причин возникающих ошибок или же отличающегося поведения, поскольку полагаются на библиотеку как китайскую комнату, не пытаясь разобраться в её архитектуре и принципах работы.

Поскольку очень часто всплывают вопросы, связанные с recycler view, я бы хотел немного разобраться в том, как самостоятельно сделать расширяемый и чистый код для отображения мульти-элементного списка в приложении.

Читать далее

Склонение слов и инициалов в Delphi/Freepascal

Reading time7 min
Views4.5K

Добрый, предновогодний день всем! В этой статье я бы хотел рассказать, как мне пришлось вернуться в legacy-проект на паскале, причем буквально перед тем, как навсегда распрощаться и с ним, и с лазарусом, и с отсутствием темной темы из коробки.

В прошлый раз я объяснял, что не являюсь программистом по роду профессиональной деятельности, но использую любимое хобби для автоматизации всего, что попадается под руку в работе юриста. Я уверен, что 90% всей юридической волокиты может быть успешно автоматизировано: ведение разнообразных баз и карточек, составление документов по шаблонам, контроль сроков выполнения задач, использование любых вспомогательных сервисов, уже имеющих свои api, для прикручивания автоматизации на конкретном рабочем месте и т.д. К этому нужно стремиться, чтобы по заветам Айзека Азимова высвободить время юриста для реализации основной задачи - размышлять над условиями договора и разводить демагогию в суде.

Читать далее

Как устроен фреймворк tiOPF для delphi/lazarus. Шаблон «Посетитель»

Reading time23 min
Views4.7K

От переводчика


Есть две причины, по которым я взялся перевести несколько материалов по разработанному двадцать лет назад для не самой популярной ныне среды программирования фреймворку:

1. Несколько лет назад я, познав многие прелести работы с Entity Framework как ORM для платформы .Net, тщетно искал аналоги для среды Lazarus и в общем для freepascal.
Удивительно, но хорошие ORM для нее отсутствуют. Всё, что тогда удалось найти — open-source проект под названием tiOPF, разработанный еще в конце 90-х годов для delphi, позже портированный под freepascal. Однако этот фреймворк коренным образом отличается от привычного вида больших и толстых ORM.

Визуальные способы проектирования объектов (в Entity — model first) и сопоставления объектов с полями таблиц реляционной базы данных (в Entity — database first) в tiOPF отсутствуют. Разработчик сам позиционирует этот факт как один из недостатков проекта, однако в качестве достоинства предлагает полную ориентацию именно на объектную бизнес-модель, стоит лишь один раз похардкодить…
Читать дальше →

Deprecated! Автоматизация получения сведений из ЕГРЮЛ с помощью Freepascal

Reading time9 min
Views11K


В своей работе (юридической) я готов автоматизировать всё, что только поддаётся этому. Но пока прокачанные нейросетями роботы из утопии Германа Грефа не появились и не отняли всю работу у рядовых юристов, рутина надолго останется нашим главным спутником. Автоматизация этой рутины — то, чем я периодически занимаюсь на протяжении последних лет, будь то многочисленные таблицы в excel с кучей формул, позволяющих быстро распечатать сотню однотипных документов-рассылок в word'е, ну или автоматически генерируемые отчеты. Но есть и такие вещи, которые простыми формулами и подстановками не сделаешь. Здесь на помощь приходит программирование, которым я увлекаюсь с детства, и так уж вышло, что началось это с delphi. Сейчас мне проще, чем в C# или python, осваивать которые начал недавно, сделать быстро какой-то проект в среде Lazarus, используя freepascal. И да, я на полном серьёзе считаю, что возможностей этой среды более, чем достаточно. Поэтому автоматизировать ЕГРЮЛ, как вы догадались, предстоит с помощью паскаля.

Читать дальше →

Перегрузка операторов в freepascal на примере обыкновенных дробей

Reading time5 min
Views8.1K
image

Все мы помним, как в школе учили обыкновенные дроби. Числители, знаменатели, НОД и НОК, арифметические действия с дробями. Но и в реальной жизни обыкновенные дроби успешно применяются в разных сферах деятельности, в том числе юридической: например, в обыкновенных дробях могут выражаться доли участников хозяйственных обществ, доли в праве общей долевой собственности и т.д.

И вот, понадобилось как-то раз реализовать пару функций в корпоративном приложении для оперирования обыкновенными дробями. Современная реализация паскаля, будь то delphi или freepascal, предлагает удобные средства для этого.
Читать дальше →

Безболезненная прививка объектного мышления

Reading time13 min
Views19K

Или как можно проще об основных принципах ООП в Lazarus и FreePascal


Часть I


Изучать ООП (объектно-ориентированное программирование) можно двумя способами: или прочитать сотню книжек, в которых дается голая теория об устройстве классов и принципах наследования, полиморфизма, инкапсуляции, но так ничему и не научиться, или перестать беспокоиться и попытаться на практике освоить новые приемы, переработав, к примеру, готовые коды, а лучше с нуля изготовив что-то простое, но красивое.


Во всех книгах, посвященных паскалю, delphi и lazarus (я нашел аж целых две о последнем), очень схожая часть, посвященная ООП. По этим книгам можно много узнать о том, насколько круче ООП устаревшего структурного подхода, но так и не получить достаточных навыков применения этого на практике. Конечно, любой программист, использующий визуальные IDE, уже по умолчанию использует ООП, так как все компоненты и структурные элементы визуального приложения представляют собой объекты, однако свои собственные структуры и абстракции перенести в парадигму ООП бывает очень сложно. Чтобы понять всю прелесть и оценить открывающиеся перспективы, я решил сделать небольшое приложение, которое в конечном итоге превратилось в простенький screensaver. Заодно вспомнил о существовании тригонометрии.

Приложение будет рисовать на экране в случайных местах пятьдесят полярных роз с разными характеристиками: размер, цвет, количество лепестков. Потом их же затирать и рисовать новые, и т.д. Используя принципы структурного программирования, можно, конечно, сделать обычный многомерный массив объемом на 50 и в нем сохранять все уникальные характеристики. Однако стоит вспомнить, что паскаль подразумевает строгую типизацию данных, а, следовательно, массив не может состоять их элементов с разными типами. Можно сделать массив из записей (record), но чего уж мелочиться, от записи до класса — один шаг. Вот его мы и сделаем.

Information

Rating
1,726-th
Location
Сенгилей, Ульяновская обл., Россия
Date of birth
Registered
Activity