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

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

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

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

Лицензирование софта: типы, нюансы, сложности

Время на прочтение 10 мин
Количество просмотров 3.1K

У каждого разработчика хотя бы раз возникала мечта создать крутой продукт, который обязательно захотят купить (а не спиратить) все пользователи, а сам он станет богаче Илона Маска и будет запускать свои Falcon, но конечно же намного удачнее. Но чаще всего эта мечта спустя время разбивается о суровую реальность: софт почти никому не нужен из-за переполненного рынка, а если и нужен, то его постоянно пиратят, безжалостно и беспощадно. 

Если с первой проблемой помогут справиться талант и удача, то разобраться со второй — попробуем помочь мы. Ниже рассказываем о нюансах лицензирования, с которыми сталкивается разработка. 

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

Старые кодовые базы как классическая литература

Уровень сложности Простой
Время на прочтение 6 мин
Количество просмотров 9.2K

Сохранившиеся фрагменты греческих папирусов, источник

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

Применим ли этот принцип в обучении программированию?
Читать дальше →
Всего голосов 61: ↑61 и ↓0 +61
Комментарии 8

Как программируются кассовые аппараты?

Уровень сложности Простой
Время на прочтение 13 мин
Количество просмотров 5.5K

Привет, Хабр!

А вы когда-нибудь задумывались, каким образом ваша покупка на угловой заправке или в супермаркете превращается в акт, сохраняющийся в электронной памяти кассового аппарата? Эти устройства - настоящие живые свидетели каждой транзакции, но как они работают внутри?

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

Читать далее
Всего голосов 25: ↑15 и ↓10 +5
Комментарии 16

Code smells — обзор на примере PHP

Уровень сложности Простой
Время на прочтение 9 мин
Количество просмотров 6.5K

Hola, Amigos! Меня зовут Евгений Шмулевский, я PHP-разработчик в агентстве заказной разработки Amiga. В этой статье хотелось бы рассмотреть вопрос качества кода и что из рекомендаций по нему лично для себя использую. Статья адресована начинающим разработчикам.

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

Истории

Изучаем веб-сервисы ChatGPT и пробуем программировать

Время на прочтение 9 мин
Количество просмотров 6.9K


Прямого доступа к сервисам OpenAI в РФ, как известно, нет. Для работы с ChatGPT многие пользуются телеграм-ботами, чаще всего бесплатными. В основном, запросы к ним — непритязательные. Пользователи практикуются в английском и, не раздражая никого пробелами в орфографии, получают списком все свои ошибки. Можно задавать ботам относительно простые вопросы.

Но, боты, в подавляющем большинстве работают на версии GPT3.5, возможности которой ограничены. Поэтому даже на хороший, но не релевантный запрос можно получить очень странный ответ, который начинается чем-то вроде «Да, я просто языковая модель и не могу сделать того, что вы от меня хотите...» и т. д. Нельзя забывать и о том, что телеграм-бот едва ли сможет хранить контекст, размером более 4000 токенов.

Поэтому в некоторых случаях удобнее использовать именно веб-сервисы, у них функции побогаче.
Читать дальше →
Всего голосов 24: ↑22 и ↓2 +20
Комментарии 8

FORTRAN — первый язык высокого уровня

Уровень сложности Простой
Время на прочтение 11 мин
Количество просмотров 5.4K

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

Когда FORTRAN только зарождался, языков высокого уровня практически не существовало, и уж тем более не было таких, которые получили бы широкую известность. Сейчас, когда такие языки стали практически универсальными, необходимо помнить, что языки высокого уровня были созданы для того, чтобы облегчить работу программиста. Раньше код писался на "родных" инструкциях компьютера, которые определялись его аппаратной частью. С помощью языка высокого уровня стало возможным использовать инструкции, приближенные к человеческим. Кроме того, программы можно было переносить с одного компьютера на другой, хотя при разработке FORTRAN это не учитывалось, поскольку язык изначально создавался специально для компьютера IBM 704.

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

C++ Дайджест №5 (2 октября – 15 октября 2023)

Уровень сложности Простой
Время на прочтение 3 мин
Количество просмотров 3.2K

Привет, Хабр! Сегодня я хочу вам представить подборку интересных новостей и материалов из мира C++ за последние две недели.

Приятного чтения!

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

Примитивы синхронизации в Python Asyncio: Исчерпывающее руководство

Уровень сложности Сложный
Время на прочтение 14 мин
Количество просмотров 6.9K

При написании многопоточного приложения нужно помнить о возможности состояния гонки при использовании неатомарных операций. Даже простая задача по увеличению целого числа на единицу в конкурентной программе может вызвать ошибки, с трудом поддающиеся воспроизведению. Но при использовании asyncio мы всегда работаем в одном потоке, а значит можно не беспокоиться о гонках, правда? На самом деле не всё так просто...

Что было дальше?
Всего голосов 17: ↑16 и ↓1 +15
Комментарии 4

Архитектурный паттерн для обработки больших данных: Lambda

Уровень сложности Сложный
Время на прочтение 13 мин
Количество просмотров 8.8K

Привет, Хабр!

Мы сталкиваемся с огромными объемами информации, высокой нагрузкой, и постоянно меняющимися требованиями. Все это требует от нас не только навыков программирования, но и грамотного проектирования архитектуры, которая способна справиться с этими вызовами.

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

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

Язык программирования Sound

Время на прочтение 3 мин
Количество просмотров 6.5K

Средство обработки унифицированных по назначению данных (Sound – system for operating with unified data) разрабатывается для внятного программирования, обеспечивающего соответствие результатов вычислений назначениям. Под назначением данных понимается формальная спецификация вычислений, приводящих к этим данным. Язык программирования Sound нужен как универсальный инструмент, позволяющий транслировать вычислительную логику в любой язык программирования.

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

Сквозное наблюдение (observability) в микросервисах

Уровень сложности Простой
Время на прочтение 11 мин
Количество просмотров 5.1K

Привет, Хабр!

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

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

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

Разберемся подробнее с первым из ключевых компонентов сквозного наблюдения - трассировкой.

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

От теории к практике: создаём веб-приложение для решения задачи коммивояжёра

Уровень сложности Средний
Время на прочтение 14 мин
Количество просмотров 6.1K

В таких сферах, как исследование операций (Operations Research) и наука о данных (Data Science) чрезвычайно актуально сближение теории и её практического применения в виде программных проектов. Теоретические выкладки формируют базу программ для оптимизации чего‑либо, так как теория даёт средства для решения разнообразных задач. Но очень важно помнить и о том, что подобные программы должны быть доступны конечному пользователю, что с ними должно быть удобно работать.

Задача коммивояжёра (Traveling Salesman Problem, TSP) — это, без сомнения, та самая задача комбинаторной оптимизации, которая изучена лучше всего (Rego, C., Gamboa, D., Glover, F., & Osterman, C., 2011. Traveling salesman problem heuristics: Leading methods, implementations and latest advances. European Journal of Operational Research, 211(3), 427–441). Её легко описать (по крайней мере — на словах), её можно использовать для того чтобы продемонстрировать некоторые из возможных компонентов API современной программы по построению маршрутов. В результате я просто не мог подобрать ничего лучше этой задачи в качестве основы для примера, который разобран в этой статье.

Здесь вы узнаете о том, как использовать Python‑библиотеку Streamlit для создания веб‑приложения, которое позволяет решать задачу коммивояжёра с использованием входных данных, предоставленных пользователем. Так как нас интересует создание приложения, пригодного для решения реальных задач, мы, анализируя пути перемещения между некими географическими точками, будем интересоваться не только евклидовым расстоянием между ними, но и другими характеристиками путей. В частности, наша программа, используя координаты точек, должна уметь получать данные о том, какое расстояние по автомобильным дорогам нужно преодолеть для перемещения между ними. Эти данные должны учитываться при выполнении оптимизации. Для этого мы воспользуемся API OpenStreetMap.

Если вы хотите лучше разобраться в теоретических аспектах числовой оптимизации — вам, возможно, интересно будет почитать мои статьи о линейном программировании и о задаче маршрутизации транспорта (это — обобщение задачи коммивояжёра).

Готовы поработать? Взгляните на то, что у нас должно в итоге получиться…

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

Набор инструментов backend reliability инженера

Уровень сложности Простой
Время на прочтение 5 мин
Количество просмотров 2K

Привет! Меня зовут Андрей, я возглавляю команду, которая отвечает за надежность и стабильную работу бэкенда в Wrike. Если вы когда-нибудь задумывались, что же такое «backend reliability», то знайте, что вы не один! Я часто объясняю, что это что-то вроде должности инженера по надежности сайта (SRE), но сфокусированная исключительно на бэкенде. В статье я расскажу о зонах ответственности BRE команды и инструментах, которые мы применяем для поддержания стабильной работы бэкенда на высоком уровне.

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

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн
PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн

Паттерн производитель-потребитель и очередь с приоритетом asyncio.PriorityQueue в Python

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 2.7K

В предыдущей статье вы могли узнать что такое очередь в целом и как работает FIFO-очередь asyncio.Queue. Давайте продолжим и посмотрим на примере библиотеки aiohttp как работают очереди с приоритетом asyncio.PriorityQueue.

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

LLM как оптимизатор для задачи линейной регрессии

Уровень сложности Средний
Время на прочтение 7 мин
Количество просмотров 4.9K

В сентябре 2023 года инженеры из гугла выпустили статью "Large Language Models as Optimizers" об использовании LLM в качестве оптимизаторов.

Ниже мы рассмотрим, как языковая модель Mistral-7B-Instruct на основании текстовых инструкций справится с задачей линейной регрессии.

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

Что такое платформа «ГосТех» и как она развивается в России?

Уровень сложности Простой
Время на прочтение 9 мин
Количество просмотров 9.4K

Мы – компания CodeInside и вот уже 14 лет разрабатываем программное обеспечение и высоконагруженные веб-системы для государства и бизнеса. Рады знакомству!

Почему мы начали про «ГосТех»? С развитием платформы мы набирали соответствующую экспертизу. Наша проектная команда входит в команду разработки цифровой системы, которую в будущем планируется разместить на платформе «ГосТех».

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

Книги по Swift и iOS-разработке для начинающих специалистов и профессионалов

Время на прочтение 4 мин
Количество просмотров 5.5K

iOS-разработка не теряет актуальности, и количество программистов, которые создают приложения для iOS, не снижается. В России можно приобрести несколько хороших книг, которые помогут начинающим получить больше теории и практики, а профессионалам — дополнить свои навыки. Подборка книг — под катом.

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

Web Workers в JavaScript: Параллельные вычисления и улучшение производительности

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 9.3K

В современном мире пользователи становятся все более требовательными к производительности веб‑сайтов и хороший пользовательский опыт выходит на первый план. Даже малейшее зависание или отсутствие плавности могут привести к потере пользователей.

Есть случаи, когда эту проблему можно решить с помощью Web Workers, про них я и расскажу вам далее!

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

Open-source блокнот Wolfram Language или как воссоздать минимальное ядро Mathematica на Javascript и не только

Уровень сложности Средний
Время на прочтение 20 мин
Количество просмотров 7.5K

На Хабре уже проскакивали упоминания о совместимых или систем-копиях Wolfram Mathematica, но реализованных на других языках, скажем, Mathics. В качестве расширения этой ниши я представляю молодую систему, которая не только воспроизводит многие ключевые функции блокнота Mathematica с нуля, но и расширяет функционал гораздо дальше, чем там, где очертил его границы Стивен Вольфрам, создав эту потрясающую систему более 30-ти лет назад.

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

Чем отличается синтетическое событие клика от обычного в javascript фреймворках?

Уровень сложности Сложный
Время на прочтение 3 мин
Количество просмотров 6.9K

Сегодня, стало более ли менее стандартом использование синтетических событий в современных js фреймворках, нежели обычный addEventListener. Но, как же работают эти события? В данной статье, я постараюсь на примере Cample.js версии 3.2.0-beta.1 рассказать об этом.

Читать далее
Всего голосов 15: ↑7 и ↓8 -1
Комментарии 15

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