Pull to refresh
20
0
Дмитрий Железниченко @dzzh

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

Send message

Генеральная уборка в компании: как мы переворошили магазины

Reading time 8 min
Views 38K
В прошлом посте я рассказывал, как мы с удивлением обнаружили, что стали большой такой жирной компанией, и при этом хапнули все особенности бюрократизма. Нужно было срочно рефакториться и становиться обратно эффективными. Ниже — что мы делали в рознице. Сразу скажу, у многих пост вызовет желание поспорить, потому что я буду предельно циничен.

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



Бомжи жили около магазина пару недель. Это прямо выход из метро, поэтому им там было тепло и уютно. Решилось тем, что как только открывалась дверь, сотрудник брал толстые резиновые перчатки, и либо прямо выносил их на улицу, либо вёл с ним беседу по поводу, почему они мешают. Если они успевали полежать хотя бы 2 минуты — это вполне их устраивало. А когда и 10 секунд не давали — ну, направление миграции сместилось.

На деле, конечно, это была меньшая из проблем. И самая легкорешаемая.
Читать дальше →
Total votes 126: ↑124 and ↓2 +122
Comments 198

Генеральная уборка в компании

Reading time 8 min
Views 47K


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

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

А знаете, что такое большая компания? Это когда ты не знаешь в лицо кого-то. Когда в команде есть люди, которые работают по должностным обязанностям без понимания, для чего нужна их работа. Когда простая задача «напечатайте табличку с текстом в магазин» начинает гулять по согласованиям и решается за 22 дня. Реальный случай. Это когда договор подписывается 4 месяца. И куча других приколов звериного оскала бюрократизма.

Разгребать всё это… хм, ну, скажем, увлекательно.
Читать дальше →
Total votes 159: ↑154 and ↓5 +149
Comments 299

Обобщаем анимацию таблиц в iOS приложениях

Reading time 6 min
Views 11K
image

Пользователи хотят видеть изменения


Анимированное обновление списков всегда было непростой задачей в iOS. Что неприятно, это всегда было рутинной задачей.

Приложения крупных компаний, таких как Facebook, Twitter, Instagram, VK, используют таблицы. Более того, почти каждое iOS приложение написано с использованием UITableView или UICollectionView и пользователи хотят видеть, что изменяется у них на экранах, по этой причине reloadData не подходит для обновления экрана. Посмотрев несколько уже имеющихся фреймворков для данной задачи, я удивился, как много они в себе обобщают, помимо расчета анимаций. Некоторые же вообще при вставке одного элемента в начало, радостно сообщали о перемещениях всех остальных элементов.

Начав решать проблему обобщения построения и запуска анимаций, я ещё не понимал такого количества наличия подводных камней в дебрях UIKit. Но обо всём по порядку.
Читать дальше →
Total votes 12: ↑10 and ↓2 +8
Comments 1

Производительность в iOS — Core Animation, Offscreen Rendering и System Trace. Часть 2

Reading time 7 min
Views 11K



Как избежать проблем с производительностью с помощью пресета Core Animation, что использовать для трассировки участков кода и с помощью каких функций сократить долю вычислительных операций в приложении с 26% до 0.6% — читай во второй части статьи по материалам доклада Люка Пархэма на прошлогодней конференции MBLT DEV. Первая часть статьи доступна здесь.


Под катом не только полезные советы, но и последние early bird билеты на MBLT DEV 2018 — купить их можно только сегодня.

Total votes 17: ↑16 and ↓1 +15
Comments 1

Производительность в iOS или как разгрузить main thread. Часть 1

Reading time 8 min
Views 12K



Есть разные приёмы и хитрости, которые помогают оптимизировать работу iOS-приложений, когда одна задача должна выполняться за 16,67 миллисекунд. Рассказываем, как разгрузить main thread и какие инструменты лучше подходят для отслеживания стека вызовов в нём.


«Ребята, давайте представим, что вы сможете сократить время запуска на 10 секунд. Умножив это на 5 миллионов пользователей, ежедневно у нас будет 50 миллионов секунд. За год это составит порядка десяти человеческих жизней. Поэтому, если вы сделаете первичную загрузку на 10 секунд быстрее, вы спасёте несколько десятков жизней. Это действительно стоит того, не правда ли?»

Стив Джобс о производительности (времени запуска компьютера Apple II).


Статья основана на докладе iOS-разрабочика из Fyusion Люка Пархема, с которым он выступил на Международной конференции мобильных разработчиков MBLT DEV в прошлом году.

Читать дальше →
Total votes 24: ↑23 and ↓1 +22
Comments 3

Истерия вокруг GDPR, часть 2. Полезные советы

Reading time 25 min
Views 18K
Статья опубликована 21 мая 2018 года

Первая часть статьи здесь. Если не читали её, пожалуйста, ознакомьтесь для контекста.

Разобравшись с самыми распространёнными заблуждениями о GDPR, давайте посмотрим на реальное влияние GDPR. Затем рассмотрим наиболее важные полезные советы для владельцев сайтов.

В любом законе кроме его буквального текста есть ещё дух закона, его предназначение. В данном случае предназначение GDPR состоит в том, чтобы обуздать корпорации, которые проявляют худшие практики ведения бизнеса в интернете с нарушением конфиденциальности пользователей. Законодатели стремятся вернуть контроль над данными обратно владельцам этих данных — частным лицам, которые здесь являются субъектами (отсюда термин «субъекты данных»). Есть бесчисленное множество примеров таких нарушений. Не собираюсь их здесь перечислять — на это просто не хватит времени. Но будьте уверены: положение дел таково, что регулирование не начнёт действовать быстро. Постоянные читатели моего блога знают, что тема конфиденциальности мне дорога, поэтому я приветствую GDPR и надеюсь, что закон приведёт к желаемому эффекту. Судя по количеству писем от компаний, которые почти умоляют меня разрешить им присылать спам и дальше — вероятно, это единственный закон, который явно положительно повлиял на мою жизнь ещё до того, как вступил в силу. (По иронии судьбы, эти компании нарушают закон, рассылая такие сообщения…).
Читать дальше →
Total votes 29: ↑28 and ↓1 +27
Comments 103

Истерия вокруг GDPR

Reading time 12 min
Views 35K
Статья опубликована 18 мая 2018 года

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

Эта статья является попыткой успокоить нервы тех, кто чувствует, что (их) мир на грани краха. Вообще, когда дело доходит до каких-либо законов, в том числе этого, главный принцип — Don't Panic. Статья предназначена конкретно для владельцев маленьких и средних компаний, которые активны в интернете и сейчас оказались немного в шоке.

Немного о себе: я около десяти лет занимаюсь технической экспертизой для сделок M&A (с командой из восьми человек). Этот опыт, а также убеждённость, что за конфиденциальность в интернете стоит бороться, привели меня к детальному изучению политики конфиденциальности в Сети. В итоге я сейчас отлично понимаю воздействие GDPR и вижу, как компаниям реагировать на новые правила.
Читать дальше →
Total votes 32: ↑31 and ↓1 +30
Comments 103

Обзор рынка моноколес 2018

Reading time 7 min
Views 25K
Встающее все раньше солнце, капель с южных крыш даже в холодный день и движение нулевой изотермы на северо-восток — все это признаки неумолимо приближающейся весны. Уже скоро снег и лед на тротуарах заменят персональные средства передвижения — велосипеды, самокаты и моноколеса. Сейчас самое время задуматься над способом превратить поездку на работу в приятную прогулку. Как энтузиаст моноколес, катающийся с 2016 года, я рекомендую именно этот вид транспорта, и данный обзор призван помочь выбрать аппарат, который максимально вам понравится.


Моноколесо — транспорт не только для молодежи, источник фото
Total votes 42: ↑40 and ↓2 +38
Comments 152

Образовательные стриминговые каналы программистов

Reading time 5 min
Views 49K


Источник Twitch


Удивительно, но люди действительно хотят смотреть на то, как вы пишите код. В 2014 году появился даже специальный сайт Livecoding.tv (сейчас он называется LiveEdu), на котором каждый желающий разработчик может всему миру показать процесс работы в режиме реального времени.


Идея устраивать трансляции с новорожденным кодом появилась гораздо раньше – стримеры занимались этим на Twitch, YouTube и standalone-площадках. В подборке представлены активные (за редким исключением) стримеры-кодеры, а также методы поиска интересных лично для вас трансляций.

Total votes 45: ↑45 and ↓0 +45
Comments 17

Анимации в iOS для начинающих. Модели, классы от Core Animation, блоки

Reading time 10 min
Views 66K
Думаю, всем разработчикам хочется в той или иной степени украсить свои приложения различными эффектами. Android-отдел компании Live Typing уже выпустил две статьи на эту тему: про тип классов Animator и собственную библиотеку CannyViewAnimation, заменяющую им несовершенный ViewAnimator. Я представляю отдел iOS-разработки нашей компании и тоже хочу высказаться на тему, которая важнее, чем кажется.

Эта статья — введение в мир анимаций для iOS-приложений. Рекомендуется тем, кто никода не работал с анимациями, либо не понимает некоторые моменты в стандартных iOS-анимациях.
Читать дальше →
Total votes 17: ↑16 and ↓1 +15
Comments 3

Самый полный список мужских хобби: 77 способов занять свободное время

Reading time 33 min
Views 769K
image

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

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

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

Как писал Уинстон Черчилль, ярый любитель хобби:
Нет смысла говорить уставшим «мускулам разума»: «я дам вам хорошенько отдохнуть», «пойду прогуляюсь» или «лягу и не буду ни о чём думать». Разум всё равно остаётся занятым. Если вы что-то взвешивали и прикидывали, он так и будет взвешивать и прикидывать. Если вы волновались, он будет волноваться… Бесполезно спорить с разумом, находящимся в таком состоянии. Один талантливый психолог из США сказал: «волнение – это эмоциональный спазм. Разум цепляется за что-то и не отпускает». Можно лишь аккуратно внедрить что-то другое в эту конвульсивную хватку. И если это что-то выбрано правильно, если оно сопровождается освещением другой области интересов, то постепенно, а иногда и довольно быстро, чрезмерная хватка ослабляется и начинается процесс восстановления и заживления.

Читать дальше →
Total votes 54: ↑37 and ↓17 +20
Comments 162

Упрощение локализации в iOS

Reading time 5 min
Views 7.3K


Всем доброго времени суток! Меня зовут Николай, я iOS-Lead в компании Touch Instinct. В процессе разработки часто приходится иметь дело с проектами, которые должны работать на нескольких языках. Расскажу, к какому подходу мы пришли при работе с локализацией.


Минусы базовых подходов


Есть несколько основных подходов для локализации iOS-приложения. Сперва стоит определиться, разрабатывается приложение с использованием storyboards или нет.


С использованием storyboards


Можно локализовывать строки напрямую в storyboard. Однако, при таком подходе есть ряд минусов:


  • в случае наличия большого количества storyboards, локализованные строки разбросаны по проекту;
  • невозможность использования атрибутных строк, а также строк, которые состоят из нескольких составных частей;
  • вам всё равно придется часть строк локализовывать в коде. Это ведет к еще большему разбросу в приложении;
  • фактически отсутствует возможность что-то проверить другому разработчику при проведении code review.

Без storyboards


В этом случае локализуем всё в коде. Однако и тут есть ряд минусов. Дело в том, что файлы со строками локализации localizable.strings — магические. При изменении таких файлов очень велика вероятность возникновения ошибки из-за человеческого фактора. Изменения нельзя отследить, пока ошибка не будет найдена в процессе тестирования.


Таким образом, хотя для локализации уже есть готовые механизмы в iOS SDK, они имеют существенные минусы. Более подробно смотрите здесь.


Читать дальше →
Total votes 16: ↑15 and ↓1 +14
Comments 24

Джентельменский набор пакетов R для автоматизации бизнес-задач

Reading time 3 min
Views 14K

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


Как правило, все пакеты (9109 штук на 07.09.2016) находятся в репозитории CRAN. Те, что по тем или иным причинам, пока не опубликованы в репозиторий, могут быть найдены на GitHub. Итак, кратким списком:

Читать дальше →
Total votes 21: ↑21 and ↓0 +21
Comments 20

Маркетинг и реальность моноколес весны 2017

Reading time 10 min
Views 35K
Не секрет, что производители и продавцы могут приукрашивать характеристики своих товаров, чтобы они выглядели лучше по сравнению с конкурентами. Часто даже не надо обманывать прямо — можно умолчать о точном определении и степени важности какой-нибудь характеристики или привести ее для определенных условий, и несведущие покупатели легко обманутся сами. На территории России уже во всю идет весна, приближается сезон катания на летних гаджетах, и в этой публикации я бы хотел помочь тем, кто заинтересовался темой моноколес и не знает, по каким характеристикам их лучше выбирать.


Классика маркетинга — девушка и товар. Первоисточник неизвестен — магазины копируют это фото друг у друга.
Читать дальше →
Total votes 36: ↑35 and ↓1 +34
Comments 120

RxSwift: работа с GUI

Reading time 26 min
Views 62K


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

В основном для проработки материала используются стандартные примеры из RxExample, но для прояснения отдельных моментов была создана песочница UIExplanation и дополнительный пример в RxExample
Весь код можно найти здесь github.com/sparklone/RxSwift

При работе с UI элементами в Rx есть основные потребности:
1) понять какие подводные камни нас ожидают в принципе и зачем нужен Driver
2) научиться делать привязку UI к Observable, чтобы элементы Observable меняли состояние свойства/свойств UI элемента. Это решается с помощью UIBindingObserver
3) научиться переводить паттерн target-action на рельсы Rx. Это делается с помощью ControlEvent
4) сделать двустороннюю привязку к свойствам UI элемента. Это делается с помощью ControlProperty
5) т.к. зачастую у UI элементов delegate/dataSource предполагаются в единственном числе, — ввели класс DelegateProxy, который позволяет одновременно использовать как обычный делегат, так и Rx последовательности.

Рассмотрим каждую потребность отдельно
Читать дальше →
Total votes 16: ↑15 and ↓1 +14
Comments 29

Когнитивные стимуляторы и другая психофарма: можно ли стать умнее

Reading time 14 min
Views 193K
Привет, %username%!

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

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

Spoiler: NZT ещё не изобрели, но синтезировали некоторое количество потенциально интересных штук.
Читать дальше →
Total votes 70: ↑64 and ↓6 +58
Comments 577

«Яндекс. Карты» перешли на вектор

Reading time 1 min
Views 52K


Сегодня вышли новые версии мобильных приложений «Яндекс.Карты» для iOS и Android.

Самое главное нововведение, что карты всех регионов заметно уменьшились в размере. Например, офлайн-карта Москвы теперь занимает всего 144 МБ вместо 1,9 ГБ, офлайн-карта Санкт-Петербурга и области — 231 МБ вместо 3,2 ГБ.
Читать дальше →
Total votes 48: ↑46 and ↓2 +44
Comments 196

Симметрическая разность возможностей Swift и Objective-C

Reading time 24 min
Views 23K

image


В этой статье я расскажу о различии возможностей, которые предоставляют iOS-разработчикам языки Swift и Objective-C. Безусловно, разработчики, которые интересовались новым языком от Apple, уже видели немало подобных статей, поэтому я решил акцентировать внимание на тех отличиях, которые действительно влияют на процесс разработки и на архитектуру приложения. То есть, те отличия, которые следует знать, чтобы использовать язык максимально эффективно. Я попытался составить наиболее полный список, удовлетворяющий этим критериям.


Кроме того, рассказывая о новых возможностях, которые Swift привнёс в разработку, я постарался не забыть упомянуть то, что он потерял по сравнению с Objective-C.


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


На момент написания статьи текущая версия Swift — 3.0.1.


Читать дальше →
Total votes 22: ↑21 and ↓1 +20
Comments 12

Боль и анимация таблиц для iOS. Фреймворк Awesome Table Animation Calculator

Reading time 10 min
Views 12K

Представим себе экран обычного мобильного приложения с уже заполненным списком ячеек. С сервера приходит другой список. Нужно посчитать разницу между ними (что добавилось/удалилось) и проанимировать UICollectionView.


«Простой» подход — полностью заменить модель с последующим вызовом reloadData. К сожалению, при этом теряются анимации и могут возникать другие нежелательные эффекты и тормоза. Куда интереснее редактировать списки аккуратно, анимированно. Попробовав это сделать несколько раз, я убедился, что это неимоверно трудно.


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

Читать дальше →
Total votes 15: ↑15 and ↓0 +15
Comments 9

iOS 10: новое в создании анимаций

Reading time 5 min
Views 19K


Не так давно на WWDC 2016 был анонсирован обновленный интерфейс работы с интерактивными анимациями в iOS 10: теперь у разработчиков появился гибкий инструмент их создания, управления и модификации. В этой статье речь пойдет о том, какие произошли изменения и что из себя представляет новое API.
Читать дальше →
Total votes 30: ↑27 and ↓3 +24
Comments 2

Information

Rating
Does not participate
Location
Amsterdam, Noord-Holland, Нидерланды
Date of birth
Registered
Activity