Pull to refresh
-16
0
Send message

Задачи планирования и программирование в ограничениях

Reading time8 min
Views26K
Когда у тебя в запасе много популярных инструментов вроде JAVA, Python, Ruby, PHP, C#, C++ и других, чувствуешь себя почти всемогущим. Стандартный подход в разработке рулит. Но только до тех пор, пока не столкнешься с определенным типом задач.

 
Подумайте, как правильно написать программу, которая оптимально…

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

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

10 кубиков синтаксического сахара

Level of difficultyEasy
Reading time5 min
Views14K

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

Читать далее

Как я ускорила парсинг строк в serde_json на 20%

Level of difficultyMedium
Reading time13 min
Views11K

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

serde — основной фреймворк для сериализации и десериализации в Rust. Его используют как крейт по умолчанию во всей экосистеме. serde_json — это официальный serde-миксин для JSON, так что каждый раз, когда нужно что-то парсить, люди обращаются именно к нему. Конечно, есть и другие библиотеки, специализующиеся на парсинге JSON, например simd-json, но популярность у них, мягко говоря, удручающая. serde_json значительно популярнее: на момент написания от него зависят аж целых 26916 крейта, а от simd-json — всего 66.

Это делает serde_json хорошей мишенью (не как у Jia Tan) для оптимизаций. Велик шанс того, что многим из тысяч пользователей переход на simd-json позволил бы добиться ускорения, но, пока они этого не делают, более мелкие оптимизации — лучше, чем совсем ничего, и такие улучшения — глобальный выигрыш для экосистемы.

Читать далее

Освоение любой темы с помощью искусственного интеллекта и метода Фейнмана

Level of difficultyEasy
Reading time5 min
Views63K

Когда в последний раз вы сталкивались с трудной для понимания темой? Или проводили часы за просмотром обучающих видео на YouTube?

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

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

По окончании чтения вы научитесь использовать ChatGPT для разбора сложных концепций и их интуитивного освоения всего за четыре простых шага.

Читать далее

Как оптимизировать аккумуляторную батарею

Level of difficultyMedium
Reading time11 min
Views11K

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

Представьте, что работаете инженером в компании по производству электромобилей, и ваш начальник обращается к вам со следующими словами: «Джереми, у нас проблема! (и да, зовут вас Джереми). Всё эти чёртовы батареи! В машине их слишком много, и это выходит для нас очень накладно. Но при этом мы хотим, чтобы клиенты могли спокойно проехать 400 миль на одном заряде».

Что вы в этой ситуации сделаете? Как вы оптимизируете батареи? Это же чёрный магический ящик, не так ли? Не так. Используйте симуляцию.
Читать дальше →

Корутины C++ для чайников: пишем асинхронный веб-клиент

Level of difficultyMedium
Reading time24 min
Views36K

Написать этот материал меня побудило... отсутствие хороших статей по корутинам в C++ в русскоязычном интернете, как бы странно это не звучало. Ну серьезно, C++20 существует уже несколько лет как, но до сих пор почти все статьи про корутины, что встречаются в рунете, относятся к одному из двух типов. Или обзор начинается с самых глубин и мелочей, пересказывая cppreference, а потом автор выдыхается и все сводится к "ну а дальше все понятно, возьмите и примените это в своем коде", что напоминает известную картинку с совой. Либо иногда в статьях рассматривается применение корутин на примере генераторов, и этим все и ограничивается. Но, давайте будем честны, генераторы — это замечательно, но за все время моей многолетней карьеры разработчика я, вероятно, делал что‑то подобное генераторам разве что разок, в то время как асинхронный ввод‑вывод приходится использовать почти в каждом проекте. И поэтому меня гораздо больше интересует реализация асинхронного ввода‑вывода с использованием корутин, а не генераторы. Поэтому пришлось разбираться во всем самому.

Читать далее

«Фууу, вы продаёте китайское» или Как мы с нуля организовали производство в Китае и почему это другое

Level of difficultyEasy
Reading time6 min
Views19K

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

Читать далее

Flutter. Стиль кода — это все

Level of difficultyEasy
Reading time14 min
Views8.1K

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

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

Люди тоже диктуют стиль. Стиль был у Роберта Мартина, у Дэвида Томаса, у Мартина Фаулера, у Эрика Эванса... Я встречал стиль в открытом исходном коде. В среде разработчиков стильных проектов куда больше, чем в каком-либо другом сообществе. Стиль — это атрибут, подход и структура.

Выше – юмористическая интерпретация слов из поэмы Чарльза Буковски «Стиль». Вариативность стиля кода настолько многогранна, что не всегда удается прийти к единому мнению в пользу того или иного подхода, поэтому стиль в сегодняшнем понимании — это целая культура.

Сегодня мы будем разматывать клубок лучших практик и скрытых трюков. После этого ваш код станет не просто рабочим, а настоящим произведением искусства. С учетом моего опыта работы мобильным разработчиком в TAGES, я готов поделиться своими знаниями и практиками, которые могут быть полезны для вашего проекта. Пристегнитесь потуже — мы взлетаем!

Читать далее

Pandas: от хаоса к красоте кода

Level of difficultyEasy
Reading time9 min
Views17K

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

Я собрала несколько советов и подводных камней, которых следует избегать, чтобы сделать код на pandas чистым. Надеюсь, вам они тоже будут полезны. Также я буду ссылаться на классическую книгу Роберта Мартина «Чистый код: создание, анализ и рефакторинг».

Погнали!

Удивительно быстрые алгоритмы

Reading time5 min
Views28K

Изучая программирование я встречаю примеры невозможных алгоритмов. Интуиция говорит, что такого не может быть, но компьютер опровергает её простым запуском кода. Как такую задачу, требующую минимум кубических затрат по времени, можно решить всего за квадрат? А вон ту я точно решу за линию. Что? Есть гораздо более эффективный и элегантный алгоритм, работающий за логарифм? Удивительно!


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


Интересно? Добро пожаловать под кат!

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

Книга «Основы Dart»

Reading time7 min
Views3.7K
imageПривет, Хаброжители!

Книга «Основы Dart» адресована тем, кто интересуется этим удивительным языком программирования. Вы узнаете об истории создания, синтаксисе и особенностях языка, таких как встроенные типы данных, и многом другом. В главе 2 вас ждет проект, который будет изменяться и расти вместе с вашими знаниями и навыками, а к главе 6 преобразится в полноценное клиент-серверное приложение. После каждой новой итерации проекта вас будут ждать предложения по внесению изменений в его кодовую базу, что позволит прокачать свои hard-скиллы. Исходный код рассматриваемых в книге примеров можно найти в GitHub-репозитории автора (весь код в книге соответствует Dart 3.4).
Читать дальше →

Event Loop. Мифы и реальность

Reading time19 min
Views20K

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

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

Читать далее

Разработчикам: рецензия на книгу «Node.js: разработка приложений в микросервисной архитектуре с нуля»

Level of difficultyEasy
Reading time4 min
Views5.7K

Компактная книга "Node.js: разработка приложений в микросервисной архитектуре с нуля" Юлии Поповой — выпущена в апреле 2024 г. как практическое руководство для разработчиков уровня джун и выше. Описан процесс создания микросервисов на Node.js с использованием фреймворка NestJS и других популярных технологий. Хотя в заголовке есть фраза «с нуля», книга рассчитана на читателей, уже имеющих опыт работы с JavaScript, TypeScript и NestJS. Автор не углубляется в теоретические основы, а дает практические аспекты построения масштабируемых приложений на базе микросервисной архитектуры. Заглянем внутрь :-)

Читать далее

Как стать Flutter-разработчиком с нуля? Бесплатная программа обучения

Level of difficultyEasy
Reading time3 min
Views29K

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

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

Читать далее

Психология в UX/UI дизайне: 10 принципов, повышающих вовлеченность и удержание

Level of difficultyMedium
Reading time3 min
Views7.4K

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

Читать далее

Индуктивная статистика: доверительные интервалы, предельные ошибки, размер выборки и проверка гипотез

Level of difficultyMedium
Reading time15 min
Views18K

Одной из самых распространённых задач аналитики является формирование суждений о большой совокупности (например, о миллионах пользователей приложения), опираясь на данные лишь небольшой части этой совокупности - выборке. Можно ли сделать вывод о миллионной аудитории крупного мобильного приложения, собрав данные 100 пользователей? Или стоит собрать данные о 1000 пользователях? Какую вероятность ошибиться при анализе мы можем допустить: 5% или 1%? Относятся ли две выборки к одной совокупности, или между ними есть ощутимая значимая разница и они относятся к разным совокупностям? Точность прогноза и вероятность ошибки при ответе на эти и другие вопросы поддаются вполне конкретным расчётам и могут корректироваться в зависимости от потребностей продукта и бизнеса на этапе планирования и подготовки эксперимента. Рассмотрим подробнее, как параметры эксперимента и статистические критерии оказывают влияние на результаты анализа и выводы обо всей совокупности, а для этого смоделируем тысячу A/A, A/B и A/B/C/D тестов.

Читать далее

Детальный обзор Well-known Symbols

Reading time12 min
Views8.8K


Доброго времени суток, друзья!

Символ (Symbol) — это примитивный тип данных, представленный в ECMAScript2015 (ES6), позволяющий создавать уникальные идентификаторы: const uniqueKey = Symbol('SymbolName').

Вы можете использовать символы в качестве ключей для свойств объектов. Символы, которые JavaScript обрабатывает особым образом, называются хорошо известными символами (Well-known Symbols). Эти символы используются встроенными алгоритмами JavaScript. Например, Symbol.iterator используется для перебора элементов массивов, строк. Его также можно использовать для определения собственных функций-итераторов.

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

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

В данной статье речь пойдет о хорошо известных символах с примерами их использования.
Читать дальше →

Малоизвестные и интересные особенности C и C++

Level of difficultyMedium
Reading time43 min
Views53K

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

Целью статьи является не освещение какой-то конкретной особенности языка или подготовка к собеседованиям, и уж тем более нет цели рассказать все потайные смыслы языка, т. к. для этого не хватит одной статьи и даже книги. Напротив, статья нужна для того, чтобы показать малоизвестные и странные решения, принятые в языках C и C++. Своего рода солянка из фактов. Вопрос “что делать с этими знаниями?” я оставляю читателю.

Если вы, как и я, любите и интересуетесь C/C++, и эти языки являются неотъемлемой частью вашей жизни, в том числе и его углубленного изучения, то эта статья для вас. По большей части я надеюсь, что эта статья сможет развлечь и заставить поработать головой. И если получится, рассказать что-то, чего вы, возможно, еще не знали.

Читать далее

Обзор решений на основе 3D Gaussian Splatting

Level of difficultyMedium
Reading time10 min
Views7.6K

Спустя полгода после выхода публикации 3D Gaussian Splatting лавина препринтов на его основе накрыла область 3D-реконструкции. Какие задачи теперь решаются проще, и как именно Gaussian Splatting помогает в приложениях реального времени?

Читать далее

Apache Spark… Это база

Level of difficultyMedium
Reading time6 min
Views13K

Apache Spark — это фреймворк для обработки и анализа данных, который позволяет выполнять операции на вычислительных кластерах и поддерживает несколько языков программирования: Scala, Java, Python, R и SQL.

В статье рассмотрим основные понятия для понимания обработки данных на Spark, разберем функционал его компонентов и сформируем DataFrame разными способами.

Читать далее
1
23 ...

Information

Rating
Does not participate
Registered
Activity