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

Программирование *

Искусство создания компьютерных программ

Сначала показывать
Порог рейтинга
Уровень сложности

Как за полчаса написать простую читалку книг FB2 для десктопа на Java

Уровень сложности Простой
Время на прочтение 13 мин
Количество просмотров 5.1K
Программирование *Java *Разработка под Windows *
Из песочницы

Недавно мне для личных целей понадобилось написать читалку FB2. И сразу я столкнулась с тем, что информации по теме минимум. Палочка-выручалочка под названием ChatGPT выдал что-то невразумительное в ответ на довольно подробный запрос. К тому же, никаких готовых библиотек, чтобы по-быстренькому наваять ридер, я также не смогла обнаружить. Хотя искала долго и упорно, как Чубакка расческу.

Все это привело меня к закономерному выводу, что сначала нужно изучить формат FB2. А потом подумать, как прочитать его стандартными способами и вывести на экран. После того, как я немного разобралась со структурой FB2, начала догадываться, почему нет готовых библиотек. Дело в том, что этот формат довольно простой, и нет особой необходимости писать для него отдельную библиотеку. Можно довольно быстро наваять свой код, который будет читать практически все файлы FB2. И вы сможете убедиться в этом, если дочитаете статью до конца.

А раз все так просто, зачем я пишу эту статью? Для этого у меня есть две причины. Во-первых, это моя первая проба пера на Хабре. А во-вторых, возможно, это сэкономит кучу времени другому такому же новичку, как я. Ну, или пригодится какому-нибудь студенту, который пишет реферат.

Читать далее
Всего голосов 18: ↑16 и ↓2 +14
Комментарии 35

Новости

Как я сделал SPA в два раза быстрее

Уровень сложности Средний
Время на прочтение 10 мин
Количество просмотров 8.7K
Разработка веб-сайтов *JavaScript *Программирование *Клиентская оптимизация *VueJS *
Из песочницы

Существует огромное множество статей про оптимизацию загрузки веб-сайтов, но часто они обходятся лишь общими советами или абстрактными примерами. В этой статье я хочу поделиться своим опытом комплексной оптимизации реального проекта с конкретными примерами, в данном случае SPA, написанном на Vue 3 с использованием Vuetify для части UI компонентов и Firebase для авторизации.

Немного контекста: я работаю frontend-разработчиком в компании, которая в основном занимается разработкой MVP (Minimum Viable Product), но так же и разработкой и поддержкой долгоживущих продуктов. Как раз у MVP бывает много проблем, потому что минимум времени уделяется под рефакторинг и оптимизацию, а проблемы между проектами повторяются, потому что часто используется один стартовый шаблон.

Возможность долго и планомерно заниматься оптимизацией у меня появилась на волонтерском проекте компании - combat-sport.club, которому можно было уделять сколько угодно свободного времени. Так что в данной статье идет речь именно о нем, но решения с него мы переносили и на другие проекты компании, т.к. стэк технологий и проблемы были одинаковые.

Читать далее
Всего голосов 20: ↑19 и ↓1 +18
Комментарии 19

Кроссплатформенный клиент для ChatGPT

Уровень сложности Простой
Время на прочтение 1 мин
Количество просмотров 6.8K
Программирование *Delphi *
Из песочницы

Занимался обёрткой для OpenAI для Делфи и вдобавок сделал клиент.

Прошу заранее прощения, я хотел сделать пост нового типа, но с телефона не увидел, как это можно сделать.

Читать далее
Всего голосов 35: ↑33 и ↓2 +31
Комментарии 10

Почему MVx архитектуры всегда получаются плохо

Время на прочтение 7 мин
Количество просмотров 9.2K
Программирование *Разработка под iOS *Разработка мобильных приложений *Разработка под Android *

Привет, меня зовут Владимир и у меня есть кое-что что надо обсудить, но сначала позвольте мне быстро рассказать как все это началось.

Я познакомился с понятием “архитектурные паттерны” и MVC в частности еще в 2012, и с тех пор заболел идеей архитектур программного обеспечения. Я восхищался людьми, которые пишут архитектурные фреймворки. Я тратил дни и недели читая их исходники и просматривая видео на YouTube. Но чем больше я в это погружался, тем больше я чувствовал себя в состоянии, которое я называю “начинающий иллюзионист”: пока смотришь на фокусы - это магия, но когда начинаешь их делать, то они становятся банальными.

За годы я попробовал разные существующие паттерны и фреймворки, на разных языках и в разных проектах. Какие-то реализации я писал с нуля, с какими-то знакомился в чужих проектах, но почти каждый раз упирался в их несовершенство. И каждый раз это было очень болезненно. И вот я думал, что в следующий раз все сделаю правильно, но опять что-то шло не так. Тогда я решил разобраться в этом вопросе и сделал своей миссией поиск того самого подхода, который имеют ввиду, когда говорят “нормально делай - нормально будет”.

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

В своих скитаниях я нашел кое-что не менее интересное: причину почему MVx всегда получается плохо. И вот об этом и пойдет речь сегодня.

Читать далее
Всего голосов 39: ↑36 и ↓3 +33
Комментарии 17

Истории

Spring для GraphQL

Время на прочтение 10 мин
Количество просмотров 765
Блог компании OTUS Программирование *
Перевод

GraphQL — это язык запросов с открытым исходным кодом, созданный Facebook в качестве альтернативы распространенной архитектуре REST. Он позволяет пользователям запрашивать конкретные данные и таким образом избежать классической проблемы избыточности данных в ответах, связанной с REST.

В этой статье мы рассмотрим Spring для GraphQL, преемника проекта GraphQL Java Spring от команды GraphQL Java.

Читать далее
Всего голосов 11: ↑11 и ↓0 +11
Комментарии 0

Вопросы и ответы для собеседования по Kotlin. Часть 3

Уровень сложности Средний
Время на прочтение 19 мин
Количество просмотров 1.1K
Программирование *Java *Разработка под Android *Kotlin *Учебный процесс в IT
FAQ

Цикл статей с вопросами по Kotlin, которые могут задать на собеседованиях.

Вопросы и ответы для собеседования по Kotlin. Часть 1
Вопросы и ответы для собеседования по Kotlin. Часть 2 
Вопросы и ответы для собеседования по Kotlin. Часть 3 — вы находитесь здесь
Вопросы и ответы для собеседования по Kotlin. Часть 4 (скоро)

Читать далее
Всего голосов 2: ↑2 и ↓0 +2
Комментарии 0

Clean Architecture

Уровень сложности Простой
Время на прочтение 8 мин
Количество просмотров 2K
Блог компании OTUS Программирование *Совершенный код *
Обзор

Как многие разработчики, я прекрасно понимаю, насколько важно создавать приложения, которые будет легко поддерживать, расширять и развивать в долгосрочной перспективе. Именно поэтому принципы Clean Architecture (Чистая архитектура) стали неотъемлемой частью моей работы. В этой статье я расскажу о том, почему следование принципам Clean Architecture так важно и какие преимущества эти принципы могут дать.

Читать далее
Всего голосов 11: ↑11 и ↓0 +11
Комментарии 2

Полезные команды GNU/Linux для разработчика. Часть 1

Уровень сложности Простой
Время на прочтение 11 мин
Количество просмотров 3.4K
Блог компании Maxilect Программирование *Разработка под Linux *Лайфхаки для гиков

В этой статье поговорим про команды GNU/Linux, которые удобно использовать разработчику для решения повседневных задач. Подборка ориентирована на тех, кто не хочет залезать глубоко в систему, но по работе вынужден иногда ходить на Linux-сервер. Здесь мы собрали то, чем пользуемся сами и к чему привыкли, однако почти все упомянутые задачи можно решить и другими способами.

Статья написана по мотивам ИТ-посиделки, где мы обменивались полезными лайфхаками. Все команды, которые успели обсудить, мы разделили на две части. В первой поговорим про запросы общей информации о пользователях и системе, работу с файлами, процессами и текстом. Во второй части - о bash и работе с сетью, в частности ssh.

Читать далее
Всего голосов 15: ↑11 и ↓4 +7
Комментарии 6

Вся правда о редакторе связей

Время на прочтение 8 мин
Количество просмотров 1.8K
Программирование *Совершенный код *Компиляторы *

Сначала я хотел назвать эту заметку «Редактор связей? Это очень просто». Именно так называл свои прекрасные книжки Евгений Айсберг: «Радио? Это очень просто!», «Телевидение? Это очень просто!» Но поскольку я уже использовал эту шутку в статье о планировщике Windows, чтобы не повторяться, теперь использую любимую формулу многих журналистов: «Вся правда о…».

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

Другое дело я, который сопровождает и даже по мере сил развивает средства программирования. Приходится разбираться и с работой редактора связей, а, значит, как говорится, мне и карты в руки. Попробую кратко и на пальцах объяснить назначение и работу этого программного инструмента. И не просто объяснить, а привести примеры из конкретной реализации. Иначе абстрактные рассуждения плохо воспринимаются. Сам не люблю лекторов, которым кажется, что им достаточно поводить пальцем в воздухе, чтобы аудитория все поняла с полуслова. Так не бывает.

Читать далее
Всего голосов 14: ↑12 и ↓2 +10
Комментарии 10

Правильная поддержка Apple Silicon: как избежать проблем при апгрейде с Intel (x86_64) на Apple (arm64)

Уровень сложности Средний
Время на прочтение 6 мин
Количество просмотров 1.4K
Блог компании Surf Программирование *Разработка под iOS *Разработка мобильных приложений *
Туториал

Инженеры Apple придумали прекрасные по быстродействию и производительности процессоры Apple Silicon (M1, M1 Max и так далее) на архитектуре arm64. Но за полученное быстродействие разработчикам пришлось платить своим временем.  

Рассказываем, к каким проблемам мог привести апгрейд рабочего мака и что нужно учитывать с изобретением процессоров Apple Silicon.

Статья вдохновлена ограничениями в недавно вышедшем Xcode 14.3: запуск из-под Rosetta в нём стал deprecated.

Читать далее
Всего голосов 4: ↑4 и ↓0 +4
Комментарии 3

Combine: часть 2. Вершина айсберга

Уровень сложности Средний
Время на прочтение 15 мин
Количество просмотров 486
Блог компании SimbirSoft Программирование *Разработка под iOS *Разработка мобильных приложений *Swift *
Обзор

Привет, Хабр! На связи Сергей, iOS-разработчик в компании SimbirSoft.

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

Интеграция Combine в проект будет полезна для обеих сторон — бизнеса и команды разработки:

1. Процесс работы становится быстрее, а значит дешевле.

2. Фреймворк считается достаточно модным. Есть большое количество разработчиков, которым нравится использовать реактивный подход, и которые хотят поработать с новым инструментом — повышается интерес соискателей к вакансиям, в которых фигурирует эта технология.

3. Combine способствует легкой поддержке и удобном переходе на современные технологии в будущем (например, на SwiftUI).

Читать далее
Всего голосов 1: ↑1 и ↓0 +1
Комментарии 0

Семафоры в Linux медленно сходят со сцены

Время на прочтение 6 мин
Количество просмотров 20K
Программирование *Системное программирование **nix *Разработка под Linux *
Перевод

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

Читать далее
Всего голосов 52: ↑51 и ↓1 +50
Комментарии 28

Игры в телеграм в 2023. Пациент жив или скорее мертв?

Уровень сложности Простой
Время на прочтение 6 мин
Количество просмотров 4.1K
Python *Программирование *Разработка игр *Развитие стартапа Дизайн игр *
Мнение

Всем привет! Это создатель игры Dev's Battle (Образовательной MMO-RPG игры для разработчиков в Телеграмм). В этой статье я решил рассказать про наш опыт использования телеграма, как платформы для создания игры, а также обсудить с другими разработчиками плюсы и минусы этой концепции.

Статья будет полезна, всем кто сейчас работает над похожими проектами, чатботами или вообще решился на то, чтобы сделать что-то используя телеграмм. Я не претендую на какое-либо новаторство или гениальность, а просто хочу поделиться с комьюнити своей историей, ну и привлечь немного внимания (конечно же).

Читать далее
Всего голосов 11: ↑6 и ↓5 +1
Комментарии 19

C# как замена VBA в Excel

Уровень сложности Средний
Время на прочтение 14 мин
Количество просмотров 7.9K
Блог компании RUVDS.com Программирование *C# *Visual Basic for Applications *
Туториал
Перевод
Я довольно много пишу на C#, и это мне нравится. Время от времени мне хочется, чтобы можно было использовать C# внутри других приложений.

Думаю, одним из таких приложений, в которых хорошо приживётся C#, был бы Excel, этим языком можно было бы заменить VBA. Язык VBA уже немного отстаёт от времени, а Microsoft не планирует его апгрейдить. Вместо него — компания предлагает среду-песочницу для JavaScript под названием Office Scripts.

Я понимаю привлекательность JavaScript для веб-версии Excel, но не в качестве хорошей замены VBA.

Так как этим не собирается заниматься Microsoft, я решил, что могу попробовать сам. В конце концов, если Microsoft так увлечена JavaScript, маловероятно, что она выдавит меня с обширного рынка использования C# в Excel.

Итак, вот что я создал:

QueryStorm IDE, выполняющая запрос LINQ для таблицы Excel

«Это что, IDE языка C#, выполняющая запросы LINQ для таблиц Excel?» Именно. Всё так и есть.

Я назвал это QueryStorm. Моя работа над этим проектом началась ещё в 2014 году. Изначально у него имелась только поддержка SQL, и с тех пор я продолжал над ним работать, постепенно добавляя поддержку скриптинга на C#, пользовательских функций C#/Excel, поддержку NuGet, отладчик и даже магазин приложений!
Читать дальше →
Всего голосов 79: ↑79 и ↓0 +79
Комментарии 16

Визуальное программирование vs DSL

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 2.2K
Блог компании lsFusion Ненормальное программирование *Программирование *Визуальное программирование *

В последнее время набирают популярность low-code и no-code платформы. В них для разработки приложений предлагается использовать визуальное программирование. При таком подходе, разработчики, в качестве которых выступают обычные бизнес-пользователи, вместо написания программного кода создают приложение при помощи мыши в графическом интерфейсе. Также визуальное программирование в некотором виде используется, например, в Конфигураторе 1С.

Однако, возникает вопрос. Какие преимущества дает визуальное программирование по сравнению с Domain Specific Language ? Безусловно это зависит области применения. С одной стороны, в классических языках визуальное программирование практически не используется. В то же время при разработке графического интерфейса такой подход конечно же имеет много преимуществ. Однако, при создании интерфейсов, например, с помощью популярной библиотеки React все-таки больше используется плоский код.

Читать далее
Всего голосов 22: ↑19 и ↓3 +16
Комментарии 27

В чём разница между хорошим и плохим кодом? Объяснение для непрограммистов

Время на прочтение 4 мин
Количество просмотров 7.2K
Блог компании билайн Программирование *Совершенный код *Учебный процесс в IT
Перевод

Однажды я где-то прочитал цитату, имевшую приблизительно следующий смысл:

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

Кажется, это заявление я прочитал в каком-то крупном СМИ. Статья называлась примерно так: «Опасайтесь плохого кода, он может вас убить; хотя постойте, он невидим, так что не стоит беспокоиться!». Весьма успокаивающее послание для читателей, как считаете? Сейчас я думаю, что авторы статьи просто пытались создать сенсацию из наличия таящегося «плохого кода» в авиалайнерах, поездах и беспилотных автомобилях, которых становится в нашем обществе всё больше, и таким образом увеличить количество просмотров.

Так как же объяснить концепцию «плохого кода» обывателю?


Я пишу код, анализирую код и выполняю рефакторинг кода (то есть переписываю его более чётким и удобным образом) примерно по пять часов в день, поэтому знаю, что такое код (и что такое плохой код!). Иногда я забываю о том, что многие люди не имеют понимания о том, что же такое код.

Для таких людей я представлю ответ на вопрос: «Если вы кодер, то чем вы занимаетесь?»
Читать дальше →
Всего голосов 40: ↑30 и ↓10 +20
Комментарии 30

Пол — это лава: разработка прототипа интерактивной светодиодной игровой платформы

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 6.2K
Программирование *Разработка игр *Программирование микроконтроллеров *Разработка на Raspberry Pi *DIY или Сделай сам
Кейс

Дурная голова рукам покоя не даёт… история началась несколько месяцев назад: я увидел в интернете забавное видео игры в комнате с пиксельным светодиодным полом и решил сделать подобное для своих детей. За эти месяцы я получил массу удовольствия от процесса разработки и даже заразился идеей масштабирования проекта, но обо всём по порядку! Внимание, ниже будет много фото! А в конце статьи есть видео работы.

Читать далее
Всего голосов 80: ↑80 и ↓0 +80
Комментарии 25

AbortController: Варианты применения для эффективного управления асинхронными операциями

Уровень сложности Средний
Время на прочтение 5 мин
Количество просмотров 4.1K
JavaScript *Программирование *Node.JS *
Из песочницы

В современных веб-приложениях асинхронные операции играют ключевую роль. Однако управление ими может быть сложным, особенно когда нужно отменить задачи, уже отправленные на выполнение. До появления AbortController разработчики прибегали к различным костылям, таким как создание глобальных переменных, которые отслеживали состояние запроса или использование оберток над XMLHttpRequest.

Читать далее
Всего голосов 12: ↑12 и ↓0 +12
Комментарии 30

Обучение C++, UTF-8 с первой программы

Уровень сложности Средний
Время на прочтение 13 мин
Количество просмотров 7.2K
Программирование *C++ *Учебный процесс в IT Разработка под Windows *
Туториал

Мне понадобилось провести несколько вводных уроков по языку программирования C++. В интернете есть много разнообразных учебных пособий для начинающих. Но почти во всех из них символьные и строковые литералы в примерах и упражнениях даются на английском языке, начиная со знаменитой первой программы «Hello, world!».

В этой статье я стараюсь показать, что действующий стандарт языка C++, современные компиляторы, редакторы кода и другие инструменты программиста позволяют писать исходный код программ, символьные и строковые литералы на разных языках, в частности на русском языке. При желании можно использовать иероглифы, эмодзи и любые другие символы из таблицы Юникода.

Возникает вопрос, почему при наличии таких возможностей авторы современных учебников и руководств по C++ для начинающих не используют эти возможности с самого начала, с первой программы. Мне кажется, русскоязычным ученикам было бы удобнее и интереснее использовать в своих первых программах литералы на русском языке, а также эмодзи. Может быть, авторы учебников просто застряли в прошлом веке?

Читать далее
Всего голосов 18: ↑13 и ↓5 +8
Комментарии 46

Книга «Software: Ошибки и компромиссы при разработке ПО»

Время на прочтение 11 мин
Количество просмотров 1.9K
Блог компании Издательский дом «Питер» Программирование *Профессиональная литература *
image Привет, Хаброжители!

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

Мы будем рассматривать реальные сценарии, в которых были приняты неверные решения, а затем искать пути, позволяющие исправить подобную ситуацию. Томаш Лелек и Джон Скит делятся опытом, накопленным за десятки лет разработки ПО, в том числе рассказывают о собственных весьма поучительных ошибках. Вы по достоинству оцените конкретные советы и практические методы, а также неустаревающие паттерны, которые изменят ваш подход к проектированию.
Читать дальше →
Всего голосов 5: ↑5 и ↓0 +5
Комментарии 4

Вклад авторов