Как стать автором
Обновить
19
0
Александр @nightblaze

Пользователь

Отправить сообщение

Рефакторинг вглубь

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

Рефакторинг – это “это контролируемая техника совершенствования структуры существующего кода” [Фаулер]. Сейчас уже написано так много всего о запахах кода и приёмах рефакторинга в микромасштабе (есть, например, книги и целые сайты). А я хочу рассмотреть ситуацию крупным планом и обсудить, как именно и в каком порядке следует применять эти приёмы. В частности, берусь утверждать, что рефакторинг лучше всего выполнять наизнанку, то есть, начинать от границы с внешним API, а далее прорабатывать код вглубь, переходя к классам, методам, алгоритмам, типам, тестам или именам переменных.

Примеры кода в этом посте написаны на Rust, но техника рефакторинга наизнанку также применима и в других языках программирования. Я выбрал для примера Rust, так как рефакторинг тем удобнее, чем сильнее система типов.
Читать дальше →
Всего голосов 7: ↑7 и ↓0+15
Комментарии2

Ловись игрок, платящий и не очень…

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

Видеоигры — наверное одно из самых популярных развлечений сегодня. В них играют все подряд, от детей до взрослых. Это одновременно хобби и занятие, которое расслабляет, стимулирует, объединяет в сообществах и поднимает настроение. Повсеместное развитие мобилок превратило игры из развлечения, привязанного в основном к домашней консоли или компу, в способ провести время, доступный всем в любом месте и в любое время. Мобильные игры привлекли аудиторию большинства возрастов и социальных групп, занимая значительную часть доли рынка игр, приносят огромные прибыли студиям разработки и стимулируют создание новых, гипер аддиктивных и прибыльных игровых парадигм, например «гача», «казуал», "триматч", "батлрояль", "ферма" и др.

Хорошо, когда игра сделана с душой, удивляет сюжетом и механиками, и удерживает органичными способами. Как и везде, в играх есть грязные трюки — которые заставляют людей тратить больше времени или денег, чем они бы хотели. Аудитория игр, игровых сервисов, комьюнити и околоигровых форумов по разным подсчетам достигает 3.5млрд человек, т.е. почти каждый второй на планете, играет, играл или будет играть. Большая часть этих людей порядка 70% от общего числа, были привлечены мобильными проектами в последние 10 лет, которые, чего уж тут отнекиваться стали диктовать шаблоны и дизайны разработки всем остальным. Это не хорошо, и не плохо, это уже есть - когда у тебя есть настолько большая аудитория, то можно проверять самые различные идеи, механики и теории, в очень короткие сроки на разных возрастных группах, социальных слоях и вообще разных культурах. И это позволяет находить хорошие и отличные сочетания, двигая индустрию вперед, а высокая конкуренция не дает застояться отдельным студиям или жанрам. Но у любой медали две стороны, и вместе с положительными моментами и прогрессом идей мы получаем развитие различных темных и серых механик и практик. Зачем тратить сотни часов дизайнера, рисовать уникальный арт, оттачивать баланс и придумывать интересные активности, если можно сыграть на особенностях психологии человека?

Монеты сами себя не купят
Всего голосов 46: ↑43 и ↓3+54
Комментарии48

Оптимизация производительности Flutter приложений

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

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

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

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

Знакомимся с Flutter GPU

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

Привет, Хабр! Меня зовут Станислав Чернышев, я автор книги «Основы Dart», телеграм-канала MADTeacher и доцент кафедры прикладной информатики в Санкт-Петербургском государственном университете аэрокосмического приборостроения.

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

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

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

Собеседование в энтерпрайз

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

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

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

Как развивать мышление: уроки гениев

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

Что общего между Биллом Гейтсом, физиками Майклом Фарадеем и Ричардом Фейнманом, математиком Андреем Колмогоровым и поэтом Эзрой Паундом? Их идеи изменили мир, а сами они стали новаторами в своих областях. Но как они этого добились? Автор статьи, Nabeel Qureshi, размышляет, как отказ от самообмана, отсутствие спешки и страха показаться глупым делают мышление гибким, а суждения – глубокими. 

Под катом читайте, какие мыслительные привычки отличают гениев и о том, как эти навыки развивать, ведь они, в той или иной мере, есть у каждого из нас.

*Обращаем ваше внимание, что позиция автора может не всегда совпадать с мнением МойОфис.

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

Изучаем новые структуры данных для iOS разработчика

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

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

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

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

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

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

Привет! Меня зовут Никита Грибков, я Flutter-разработчик в AGIMA. Расскажу вам про возможности Rive — фреймворка, который использует векторную графику для создания анимации во Flutter-приложениях. Эта статья выросла из небольшого поста на Хабре, в котором я коротко описал опыт работы над кнопкой для Bottom Bar в своем пет-проекте. Здесь же я уже подробно опишу, как анимировать элементы и чем вообще хорош Rive.

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

10 откликов — 8 ответов: как я ищу работу QA-инженером с помощью ChatGPT

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

Привет! Меня зовут Антон Червонный, мне 29 лет, и чуть больше трёх из них я занимаюсь тестированием. Чтобы стать QA-инженером, я прошёл курсы «Инженер по тестированию» и «Автоматизатор тестирования на Java» в Яндекс Практикуме, но это не весь мой релевантный опыт — до этого я оптимизировал процессы в отельном бизнесе и обеспечивал качество в сети квест-комнат.

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

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

Lock-free структуры данных в Rust

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

Сегодня поговорим о lock-free (или же без использования блокировок) структурах данных и атомарных операциях в Rust.

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

lock-free структуры данных позволяют нескольким потокам одновременно читать и изменять данные без блокировок.

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

Разработчикам на Rust: рецензия на книгу «Rust: атомарности и блокировки»

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

Очередной пост — рецензия на книгу «Rust Atomics and Locks: Low‑Level Concurrency in Practice» авторства Мары Бос. Это руководство по работе с низкоуровневой конкуренцией в языке программирования Rust. Издание предлагает глубокое погружение в механику атомарных операций и механизмов блокировок, что делает его полезным ресурсом для разработчиков, использующих эти инструменты в своих проектах.

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

Как я сохраняю мотивацию при разработке в одиночку

Время на прочтение6 мин
Количество просмотров10K
Один из основных камней преткновения для разработчиков, работающих в одиночку – поддержание мотивации на должном уровне. В последнее время я вел записи о попытках себя замотивировать, отмечал, что работает, а что не работает. Ниже привожу несколько рабочих методов.
Читать дальше →
Всего голосов 22: ↑22 и ↓0+24
Комментарии8

26 техник, которыми геймдизайнеры манипулируют игроком в видеоиграх

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

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

Дисклеймер:

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

Надж сам по себе не несет никакой моральной окраски. Именно вы решаете, использовать ли его во благо или во вред игрока.

Читать далее
Всего голосов 34: ↑30 и ↓4+31
Комментарии15

Сравнение алгоритмов ограничения частоты запросов

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

▍ Зачем ограничивать частоту?


Представьте чат в Twitch со множеством активных пользователей и одним спамером. Без ограничения частоты сообщений единственный спамер может запросто заполнить всю беседу сообщениями. При ограничении частоты у каждого пользователя появляется равная возможность участия.

Видео


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

Конечные точки API тоже часто ограничивают по частоте запросов, чтобы их ресурсы не монополизировал единственный пользователь. Представьте, что вам нужно, чтобы пользователи могли обращаться к затратной конечной точке не чаще ста раз в минуту. Это можно отслеживать при помощи счётчика, обнуляющегося каждую минуту. Все запросы после сотого в пределах этой минуты будут блокироваться. Это один из простейших алгоритмов ограничения частоты, называющийся fixed window limiter (ограничитель с фиксированным окном). Это распространённый способ управления трафиком к сервису.

Но не всегда всё так просто.

Когда начинается и заканчивается каждое одноминутное окно? Если я запущу поток запросов ближе к концу окна, смогу ли превысить лимит? Ёмкость окна восстанавливается по одному запросу за раз, или сразу на всё количество?

В этом посте мы рассмотрим три самых популярных алгоритма, чтобы ответить на каждый из этих вопросов.
Читать дальше →
Всего голосов 34: ↑34 и ↓0+53
Комментарии4

Ключи во Flutter

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

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

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

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

Я скучаю по механикам из старых игр

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

За время существования индустрии разработки игр формул разных механик, способных развлечь нас, придумали не одну сотню. Что-то умерло засветившись в паре игр, что-то ушло со временем, какие-то существуют до сих пор. Есть и такие, которые не просто выжили, но стали мейнстримом, хотя только портят нервы игрокам. Игровой дизайн большинства старых игр, от второго фолыча до первого FarCry и пятью активными перками, пусть и не был вершиной искусства - затягивал не хуже современных песочниц с миллионом активностей. Редкую игру захочется пройти второй раз, а как вспомню, что на прохождение можно потратить под сотню и больше часов - думаю, а оно мне действительно было надо? Можно же было заняться чем-то более интересным. Я знаю, чем закончился второй фолыч, знаю это уже четвертый раз, но каждый раз игра удивляет меня чем-то новым. А вот нового "Аватара" бросил на половине, слишком много всего и все недоделанное, и прозрачные стены... просто бич игры. И тут вопрос, чего-то не хватает в этой раздутой, перекачанной сотней механик игре? Только задумайтесь - в аватаре больше сотни основных механик, которые влияют на окружение. Может в играх что-то потерялось? Хотя "потерялось" - звучит странно - за столько лет индустрия только создала просто море всего нового. Статья ориентирована на "побурчать", так что не ждите каких-то великих секретов и тонкостей мастерства.

Раньше и флешки квадратнее были...
Всего голосов 135: ↑130 и ↓5+150
Комментарии457

Rust — это не «memory safe C»

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

TL;DR:
— в Rust намного больше достоинств, чем просто скорость и безопасность
— в Rust по умолчанию CDD (compiler-driven development, разработка через компилирование). Это как TDD, только CDD
— Rust — не сложный язык, особенно если не гнаться за максимальной производительностью

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

Читать далее
Всего голосов 155: ↑149 и ↓6+168
Комментарии555

Механизация креативности. В этой статье изложена простая механическая система получения новых решений

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

Хочешь быть креативным? Тебе сюда! Не хватает новых идей? Способ уже подоспел. Ты станешь креативным когда дочитаешь.

Читать далее
Всего голосов 18: ↑6 и ↓12-4
Комментарии7

Как работает async/await в Swift

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

Функция async/await в Swift появилась в iOS 15, и я полагаю, что на данный момент вы уже знаете, как ее использовать. Но задумывались ли вы когда-нибудь о том, как работает async/await изнутри? Или, может быть, почему выглядит и ведет себя именно так? Или даже почему вообще была представлена?

В типичной для SwiftRocks манере мы углубимся в компилятор Swift, чтобы ответить на вопросы о том, как работает async/await внутри. Это не инструкция по использованию async/await, а глубокое погружение в историю и реализацию этой функции, чтобы понять, как она работает, почему она работает, чего можно добиться с ее помощью и, самое главное, какие нюансы следует учитывать при работе с ней.

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

Создаем гироскопический параллакс-эффект во Flutter

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

Сегодня расскажу, как с помощью гироскопа или акселерометра можно оживить картинку при простом наклоне телефона.

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

Информация

В рейтинге
Не участвует
Откуда
Ставрополь, Ставропольский край, Россия
Дата рождения
Зарегистрирован
Активность