Из-за известных всем причин сейчас очень важным стал вопрос импортозамещения западного ПО во всех сферах деятельности, включая деятельность бизнеса. Не в последнюю очередь это касается и программного обеспечения, которым пользуются в наше время практически все - от школьников до пенсионеров, включая, конечно, и сотрудников госструктур и бизнеса, от малого до крупного. Сегодня речь пойдет об офисных программах. Мы настолько привыкли за много лет работать в известных всем офисных программах фирм…
В 2018 году я устроился на новую работу в стартап, связанный с высокорискованным кредитованием. На собеседовании мне говорили, что это мечта любого программиста. Необходимо переписать проект на современный стек.На предыдущей работе, я создавал небольшие приложения для нескольких брендинговых агентств. В основном это были сайты разной сложности, но с полным отсутствием «легаси». В то время, я не знал такого слова.Что же мне предстояло переносить — архитектурное чудо, написанное аутсорсерами на …
В предыдущей части - Как я переносил блог из CakePHP в Angular, я делился своей историей миграции блога из CakePHP в Angular. В этой статье, я хочу продемонстрировать связку Angular и Contentful. Я по шагам создам новое приложение, добавлю необходимые вендоры, а также реализую требуемые скрипты для загрузки и генерации контента.Исходный код на githubДемо можно посмотреть на angular-blog.fafn.ru. Демонстрация готового проекта Angular & ContentfulСоздание проектаСоздать проект можно с помощь…
Вы когда-нибудь пробовали скачивать видео с YouTube? Я имею в виду ручками, а не через такие софтины, как youtube-dl, yt-dlp или один из «этих» сайтов. Оказывается, это гораздо сложнее, чем можно было бы подумать. Youtube зарабатывает на показе рекламы пользователям. Поэтому с точки зрения платформы логично внедрить специальные ограничения, которые не позволяли бы скачивать видеоролики или даже просматривать их через неофициальный клиент, например YouTube Vanced. В этой статье будут пояснены т…
Написать что знаю несколько языков это одно, но действительно знать, понимать, и применять на практике это совсем другое, поэтому плохо зная свой сигнатурный язык мышления, полученный от социальной среды с рождения, буду рассказывать в статье как правильно собирать данные нажатия, виртуальной клавиатуры Android в web проекте, используя javascript. Классика, сам не умею научу других. Для чего это может понадобиться, если у вас возник такой вопрос, то вы явно новичок во всех "этих движения&#…
Итак, мы с вами добрались до третьей, самой «хардовой» части цикла. Сегодня поговорим про gRPC.Что такое gRPC? Сам RPC — удалённый вызов процедур (иногда вызов удалённых процедур; RPC от англ. remote procedure call) — класс технологий, позволяющих программам вызывать функции или процедуры других программ, делая это так, как если бы они находились в одном адресном пространстве. Буква g в названии — это гугловая реализация этих технологий.Разберем это все на примере.Допустим, что вы — программис…
История возникновения паттерновПеред тем как ответить на вопрос - зачем нужны паттерны проектирование - сделаем немольшой исторический экскурс.С появлением первых программ, разработчики начали выделять в них некоторые повторяющиеся куски программного кода, для повторного их использования. Эти части когда, которые решали конкретные задачи в приложении, начали выделяться в самостоятельные сущности, и среди них начали выделять наилучшие варианты их реализации. Эти самостоятельные сущности в итоге…
В прошлом году я решил поучаствовать в гейм-джеме js13kgames. Это длящееся один месяц ежегодное соревнование по созданию с нуля игры на JavaScript, которая должна уместиться в 13 КБ (в zip). Места как будто не очень много, но с достаточным количеством креативности при таких ограничениях можно достичь многого. Просто взгляните на потрясающие примеры прошлых лет: Underrun (победитель в 2018 году); Ninja vs Evil-corp (победитель в 2020 году); Beat Rocks (второе место в 2021 году). Хотя в прош…
В этой статье разберем еще одну малоизвестную, но не менее полезную возможность @reduxjs/toolkitПредыдущая статья по redux и @reduxjs/toolkitДля начала разберем варианты и возможности типизации createAsyncThunkСанки можно типизировать как при помощи дженериков,createAsyncThunk<Returned, ThunkArg, ThunkApiConfig>()так и при помощи непосредственно аргументовcreateAsyncThunk( 'asyncThunkTypePrefix', (arg: ThunkArg, apiConfig: ThunkApiConfig) => {} )где:- Returned – тип возвра…