Pull to refresh
44
0
Куликовских Сергей @kylikovskix

Инженер-программист

Send message

PostgreSQL Antipatterns: сражаемся с ордами «мертвецов»

Reading time3 min
Views18K
Особенности работы внутренних механизмов PostgreSQL позволяют ему быть очень быстрым в одних ситуация и «не очень» в других. Сегодня остановимся на классическом примере конфликта между тем, как работает СУБД и тем, что делает с ней разработчик — UPDATE vs принципы MVCC.

Кратко сюжет из отличной статьи:
Когда строка изменяется командой UPDATE, фактически выполняются две операции: DELETE и INSERT. В текущей версии строки устанавливается xmax, равный номеру транзакции, выполнившей UPDATE. Затем создается новая версия той же строки; значение xmin у нее совпадает с значением xmax предыдущей версии.
Через какое-то время после завершения этой транзакции старая или новая версии, в зависимости от COMMIT/ROOLBACK, будут признаны «мертвыми» (dead tuples) при проходе VACUUM по таблице и зачищены.



Но это произойдет далеко не сразу, а вот проблемы с «мертвецами» можно нажить очень быстро — при многократном или массовом обновлении записей в большой таблице, а чуть позже столкнуться с ситуацией, что и VACUUM не сможет помочь.
Читать дальше →
Total votes 32: ↑32 and ↓0+32
Comments15

Правила дизайна иконок, которые стоит запомнить

Reading time2 min
Views16K


Изображение стоит тысячи слов. Хорошо продуманное стоит еще больше. Мы видим их на дорожных знаках, в ресторанах, аэропортах и приложениях. Они могут сэкономить время, а могут создать путаницу.

Иконки считываются быстрее текста, их легче заметить, они занимают меньше места и требуют меньше усилий при переводе. Стена из текста сливается в кучу, а иконки различаются по форме и хорошо выглядят даже в группах. Несколько рекомендация по созданию эффективных иконок — в переводе под катом.
Читать дальше →
Total votes 27: ↑25 and ↓2+35
Comments25

Анимируем RecyclerView легко без перехода на ViewPager2

Reading time9 min
Views9.2K


Когда мы работаем с коллекциями и их отображением, перед многими из нас часто
встает выбор между ViewPager (теперь ещё и ViewPager2) и RecyclerView. Эти
компоненты похожи друг на друга по области применения, но серьезно отличаются
интерфейсом и реализацией. Начиная с support library 24.2.0 границы между
данными компонентами стали ещё более размытыми, т.к. появился вспомогательный
класс SnapHelper для автоматического доведения сhildView до
определенного положения на экране, и без устаревшего ViewPager стало проще
обходиться. С недавним релизом ViewPager2, казалось бы, о старом ViewPager и о
практиках его имитации вообще можно забыть (ViewPager2 — это по сути
RecyclerView с дополнительными вспомогательными классами, он позволяет
практически идентично повторить поведение ViewPager и сохраняет совместимость со
старым api).


Так ли это на самом деле? Лично для меня всё оказалось не так просто. Во-первых,
в классическом RecyclerView отсутствует интерфейс PageTransformer для
анимирования сhildView в зависимости от позиции (далее по тексту используется
понятие «позиционная анимация»). Во-вторых, неприятными сюрпризами долгожданного
ViewPager2 оказались модификатор класса final, который ставит крест на
переопределении метода onInterceptTouchEvent (компонент мало пригоден для
вложения горизонтальных списков в вертикальные), и приватность поля
recyclerView.


Итак, столкнувшись в очередной раз с трудностями позиционной анимации при
отображении коллекций с помощью RecyclerView и поковырявшись в ViewPager2 и
MotionLayout, я подумал, что позаимствовать принцип работы
ViewPager.PageTransformer для классической реализации RecyclerView а-ля
ViewPager2 не самая плохая идея.

Читать дальше →
Total votes 16: ↑16 and ↓0+16
Comments4

Создание персонажей в Blender и Unity

Reading time18 min
Views165K

Визуально персонажи 3D-игр имитируются с помощью использования моделей, текстур и анимаций.

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

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

Возможность многократного применения анимаций позволяет использовать анимации из Asset store и с таких вебсайтов, как mixamo.com, для ваших собственных персонажей. Это экономит кучу времени!

В этом туториале вы узнаете, как подготовить гуманоидную модель в Blender и как перенести её в Unity. В частности, вы научитесь следующему:

  • Создавать арматуру (скелет) персонажа и выполнять её риггинг (привязку скелета к мешу)
  • Модифицировать персонаж добавлением аксессуаров и объектов
  • Экспортировать модель в FBX
  • Импортировать модели Blender
  • Создавать и настраивать гуманоидный аватар
  • Прикреплять к персонажу объекты
  • Анимировать гуманоида в Unity
Читать дальше →
Total votes 42: ↑41 and ↓1+40
Comments8

Самые популярные структуры данных

Reading time9 min
Views25K
Что такое структура данных?
Проще говоря, структура данных — это контейнер, в котором хранятся данные в определенной компоновке (формате, или способе организации их в памяти). Эта «компоновка» позволяет структуре данных быть эффективной в одних операциях и неэффективной в других. Ваша цель — понять структуры данных, чтобы вы могли выбрать структуру данных, наиболее оптимальную для рассматриваемой проблемы.

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

Читать дальше →
Total votes 16: ↑12 and ↓4+12
Comments8

Разработка hexapod с нуля (часть 7) — новый корпус, прикладное ПО и протоколы общения

Reading time10 min
Views8.8K

Всем привет! Проектирование, печать и сборка нового корпуса наконец-то завершились. Также завершился запуск новой платы управления на базе STM32F373 и FW успешно перенесено на новый МК. Все ближе подходит релиз версии 1.00 с базовым функционалом. Теперь можно рассказать о том, что еще ни разу не упоминалось в цикле — прикладное ПО для управления и используемые протоколы для коммуникации. Как всегда, будет много картинок, видео и список граблей, на которые я успел наступить с прыжка.

Этапы разработки:

Часть 1 — проектирование
Часть 2 — сборка
Часть 3 — кинематика
Часть 4 — математика траекторий и последовательности
Часть 5 — электроника
Часть 6 — переход на 3D печать
Часть 7 — новый корпус, прикладное ПО и протоколы общения
Часть 8 — улучшенная математика передвижения
Часть 9 — завершение версии 1.00
Total votes 13: ↑13 and ↓0+13
Comments18

3D-печать: краткие советы по переходу от CAD-модели к напечатанному объекту

Reading time12 min
Views14K
image

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

Когда проект готов, выполняется ряд дополнительных операций: задание ориентации модели и других параметров, обеспечивающих надлежащее выполнение процесса печати. Помимо этого, необходимо учитывать тот факт, что большинство 3D-принтеров позволяют выбирать степень заполнения модели ячеистыми структурами. Правильный выбор данного параметра обеспечивает защиту объекта от деформации и разрушения в процессе печати, а также существенную экономию материала и сокращение сроков изготовления.

Наконец, последний фактор, влияющий на успех или неудачу процесса 3D-печати, – прочность соединения модели со столом. Если при печати заготовка отделится от стола, то вся работа пойдет насмарку.

Здесь мы расскажем о процессах 3D-печати и приведем ряд простых рекомендаций по использованию возможностей аддитивного производства на этапе проектирования. Кроме того, остановимся на методиках подготовки готового проекта к печати, а также рассмотрим способы надежного крепления заготовки к столу.
Читать дальше →
Total votes 12: ↑6 and ↓6+5
Comments25

Анатомия каналов в Go

Reading time34 min
Views187K

Привет, Хабр! Представляю вашему вниманию перевод статьи "Anatomy of Channels in Go" автора Uday Hiwarale.


Что такое каналы?


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


Создание канала


Go для создания канала предоставляет ключевое слово chan. Канал может передавать данные только одного типа, данные других типов через это канал передавать невозможно.

Читать дальше →
Total votes 22: ↑22 and ↓0+22
Comments7

Cascadeur: Задача о падающей кошке

Reading time3 min
Views26K

Все знают, что кошка всегда приземляется на 4 лапы, как бы ее ни бросили. Этот вопрос давно занимал физиков, и было предложено несколько моделей того, как это кошке удается. Все эти модели достаточно приблизительны и обычно ограничиваются цилиндрами. Однако, команда программы для physics-based анимации Cascadeur попробовала смоделировать переворот кошки на более подробной физической модели.

Раньше физики думали, что кошка может заранее рассчитать свое вращение и в начале падения успевает правильно оттолкнуться, приобретая начальный угловой момент. Но эксперименты показали, что даже если кошку подвесить за лапы на веревки, а потом резко перерезать их, то кошка все равно умудряется перевернуться.
Total votes 125: ↑125 and ↓0+125
Comments47

Контролируем сеть с помощью Raspberry Pi

Reading time4 min
Views14K
Привет, Хабр! Представляю вашему внимаю перевод статьи из журнала APC.

image

Безопасность сети – неотъемлемое условие для обеспечения целостности ваших данных и аппаратного оборудования. Несомненно, брандмауэр на маршрутизаторе и средства защиты ПО необходимы, однако, чтобы знать больше о том, что происходит в сети, нужно иметь инструмент для её наблюдения и контроля.

Может показаться, что средство для мониторинга сети, которое бы посылало сигналы компьютеру о попытке взлома, является лишь элементом сюжета фантастического фильма, однако такой инструмент имеет место в реальности. По сути это означает, что вы можете быстро узнать, когда устройства, находящиеся в пределах вашей сети, были отключены от Интернета (например, приложения для умного дома или Интернет вещей), и обнаружить неавторизованное подключение к своему роутеру или сетевому аппаратному обеспечению. Всё, что вам потребуется, это одноплатный компьютер Raspberry Pi и программа Nagios.

Программа Nagios, как и одноплатный компьютер Raspberry Pi, доступна в нескольких версиях. Для простоты понимания здесь будут рассмотрены два варианта инсталляции программы: создание образа диска и ручная установка на текущую ОС.

NEMS (Nagios Enterprise Monitoring Server) — корпоративный контрольный сервер Nagios, он устанавливается на Raspberry Pi и доступен по ссылке: bit.ly lxf253nems. Для него потребуется карта памяти ёмкостью по меньшей мере 16 Гб, но лучше всего выбрать 32 Гб. Для работы рекомендуется использовать Raspberry Pi 3B+, хотя подойдёт любая версия, кроме Raspberry Pi1 Model A и Raspberry Pi Compute Module. Заметьте, что пакет NEMS может быть загружен только через BitTorrent. Однако другие образы диска Nagios находятся в свободном доступе. После загрузки пакета используйте инструмент создания образа диска и записи файлов IMG на SD карту.
Читать дальше →
Total votes 9: ↑3 and ↓6-1
Comments5

Оживляем гексапода. Часть вторая

Reading time12 min
Views3.2K

Видео двигающегося гексапода


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

Total votes 11: ↑11 and ↓0+11
Comments4

Information

Rating
Does not participate
Location
Курган, Курганская обл., Россия
Date of birth
Registered
Activity