Pull to refresh
0
0
Илья @EliasMath

Software developer

Send message

Подсчет скорости скачивания в вашем приложении

Reading time7 min
Views8K

Предыстория


Есть у меня маленький и уютный pet-project, который позволяет качать файлы из интернета. Файлы при этом группируются и пользователю отображается не каждый файл, а некоторая группировка. И весь процесс скачивания (и отображение этого процесса) сильно зависел от данных. Данные при этом получались на лету, т.е. пользователь запускает на скачивание и нет никакой информации, сколько придётся качать в реальности.


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


И тут появляется пользователь с логичной проблемой — на большой группировке непонятно, почему прогресс еле ползёт — много файлов надо скачать или низкая скорость? Как я упоминал выше — количество файлов заранее неизвестно. Поэтому, я принял решение добавить счетчик скорости.


Анализ


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


uTorrent DownloadMaster
uTorrent DownloadMaster

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


Итак, нам нужна простая цифра вида 10 MB/s или что-то подобное. Как же нам её посчитать?

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

Что почитать проектному менеджеру: книги про управление персоналом, soft skills и DevOps

Reading time4 min
Views18K
Мы в «ИТ Гильдии» уделяем особое внимание вопросам управления проектами и помогаем другим компаниям внедрять инструменты, которые оптимизируют работу в IT-отделах.

Сегодня мы собрали несколько полезных книг для PM’ов. В подборку вошла литература, которую рекомендуют к прочтению в тематических тредах на Hacker News, Reddit и Quora.

Читать дальше →
Total votes 20: ↑17 and ↓3+14
Comments1

Очень много YouTube-каналов для прокачки английского языка для программистов

Reading time4 min
Views61K
Привет, Хабр!

С помощью YouTube можно ощутимо и сравнительно быстро улучшить английский.
Понимание на слух как минимум. Истина не нова, но мало кто смотрит английский YouTube, потому что легко потеряться в бесконечности каналов. Но для вас я собрал самые стоящие каналы!

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

Поучить английский


AJ Hoge. На его канале есть всё: от базовых слов до размышлений о важности языка тела в общении. Чувак пилит видосы уже много лет, материальчик накопился.

EngVid. Если бы можно было выбрать что-то одно для улучшения английского, то это оно. Разные преподы и тематики, постоянное обновление, бездонный ресурс. Ещё сайт одноимённый крутой, с удобной навигацией — можно найти очень узкую тему по интересам.
Читать дальше →
Total votes 59: ↑52 and ↓7+45
Comments19

Решето Сундарама

Reading time4 min
Views12K
Решето Сундарама в сети представлено большим количеством источников краткой справочной информации. Тем не менее, я решил изложить то, что хотел бы прочитать сам в начале изучения теоретико-числовых алгоритмов.

Решето Сундарама входит в тройку известнейших методов генерации простых чисел. Сейчас к нему принято относиться как к некоторой экзотике по причине плохой вычислительной сложности: O(N(logN)). Однако асимптотика – асимптотикой, а на практике в 32-битном диапазоне просеивания Аткин, например, перегоняет Сундарама только при тщательной оптимизации.

Реализации решета Аткина, имеющие хождение в интернете, не превосходят решето Сундарама ни по временным характеристикам, ни по эффективности использования памяти. Так что метод Сундарама вполне можно использовать как вспомогательный инструмент при экспериментах с более продвинутыми алгоритмами.
Читать дальше →
Total votes 25: ↑25 and ↓0+25
Comments7

Игра историй

Reading time3 min
Views2.8K
С Днём знаний!
В данной статье вас ждёт интерактивная сюжетостроительная игра с механикой вычисления ситуаций, в которой можно принять деятельное участие.



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


Читать дальше →
Total votes 26: ↑7 and ↓19-12
Comments6

Личный опыт и выводы после смены профессии с дизайнера на программиста

Reading time7 min
Views17K

О чем эта статья


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


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

Читать дальше →
Total votes 29: ↑20 and ↓9+11
Comments29

Как дискомфорт помогает нам совершенствовать процесс разработки

Reading time11 min
Views13K
image

Я тимлид и моя задача — обеспечить продуктивную работу команды. Это непросто, поскольку готового рецепта успеха не существует. Конечно, есть признанные методологии: Agile, Lean, Value Stream Mapping. Они дают общие ориентиры и ценности, что уже неплохо, но это лишь ориентиры. А с конкретными решениями, будь добр, вертись сам. На то ты и тимлид.

В статье я расскажу, как мы с командой постепенно сформировали и теперь регулярно уточняем подход к эффективной работе. Ключевой момент в том, что выбранные инструменты действительно приняты всей командой и прижились в работе. Это даёт надежду на то, что подход полезный.
Читать дальше →
Total votes 22: ↑20 and ↓2+18
Comments7

Генетические алгоритмы (или Клиент всегда король — и часто дурак)

Reading time7 min
Views6.7K
(версия 2, с исправленными опечатками — надеюсь, что всеми...)

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

Сейчас вот сидел, делал для товарища прототип генетического алгоритма. Навеяло поделиться оным, да и некоторыми другими мыслями…

Дано (клиент заказал): в некоем царстве складе есть 100 ячеек. В нем товар лежит. Как взять количество Х так, чтобы опустошить все задействованные ячейки до конца? Ну то есть, есть у вас типа ячейки [34, 10, 32, 32, 33, 41, 44, 4, 28, 23, 22, 28, 29, 14, 28, 15, 38, 49, 30, 24, 18, 9, 15, 8, 17, 9, 2, 7, 30, 29, 29, 2, 28, 23, 19, 4, 15, 30, 38, 3, 14, 21, 43, 50, 29, 14, 17, 12, 25, 15, 23, 28, 47, 38, 29, 7, 36, 45, 25, 6, 25, 11, 10, 1, 19, 37, 24, 27, 50, 12, 1, 1, 44, 22, 48, 13, 46, 49, 11, 33, 29, 4, 19, 33, 12, 3, 47, 27, 26, 45, 40, 37, 21, 2, 8, 41, 5, 1, 9, 5] — как набрать, скажем, 40

Ну можно перебором, наверняка есть что-то умное, а можно генетическим алгоритмом это решить…
Читать дальше →
Total votes 20: ↑14 and ↓6+8
Comments5

Тренинг Cisco 200-125 CCNA v3.0. День 29. PAT и NAT

Reading time14 min
Views12K
Сегодня мы будем изучать PAT (Port Address Translation), технологию трансляции IP- адресов с использованием портов, и NAT (Network Address Translation), технологию преобразования IP-адресов транзитных пакетов. PAT является частным случаем NAT. Мы рассмотрим три темы:

— приватные, или внутренние (внутрисетевые, локальные) IP-адреса и публичные, или внешние IP-адреса;
— NAT и PAT;
— настройка NAT/ PAT.

Начнем с внутренних адресов Private IP. Мы знаем, что они делятся на три класса: А, В и С.



Внутренние адреса класса А занимают диапазон «десятки» от 10.0.0.0 до 10.255.255.255, а внешние – диапазон от 1.0.0.0 до 9. 255.255.255 и от 11.0.0.0 до 126.255.255.255.

Внутренние адреса класса В занимают диапазон от 172.16.0.0 до 172.31.255.255, а внешние – от 128.0.0.0 до 172.15.255.255 и от 172.32.0.0 до 191.255.255.255.
Total votes 16: ↑16 and ↓0+16
Comments16

Расчет нулевой гипотезы, на примере анализа зарплат украинских программистов

Reading time5 min
Views20K
Решил поделиться, да бы и самому не забывать, как можно использовать простые статистические инструменты для анализа данных. В качестве примера использовался анонимный опрос относительно зарплат, стажа и позиций украинских программистов за 2014 и 2019 год. (1)

Этапы анализа


  • Препроцессинг данных и предварительный анализ (кому интересно код тут)
  • Графическое представление данных. Функция плотности распределения.
  • Формулируем нулевую гипотезу (H0) (2)
  • Выбираем метрику для анализа
  • Используем метод bootstraping для формирования нового массива данных
  • Рассчитываем p-value (3) для подтверждения или опровержения гипотезы

Препроцессинг данных


После некоторых манипуляций (код тут), приводим данные в следующий вид:

# Строка здесь это отдельный результат опроса, колонки переменные.

display(data_14_1.head(), data_19_1.head())
print('Всего опрошенных программистов: \n \
      {} чел. в 14 году и {} в 19 году'.format(len(data_14_1), len(data_19_1)))


Читать дальше →
Total votes 27: ↑23 and ↓4+19
Comments50

Чему я научился у ведущего программиста

Reading time16 min
Views69K

Год назад я начал работать на полную ставку в Bloomberg. И тогда же задумал написать эту статью. Я думал, что буду полон идей, которые смогу выплеснуть на бумагу, когда придёт время. Но уже через месяц понял, что всё будет не так просто: я уже начал забывать то, чему научился. Либо знания настолько хорошо усвоились, что мой разум заставил меня поверить, будто я всегда это знал, либо они просто вылетели у меня из головы.1

Это одна из причин, по которой я начал вести дневник. Каждый день, попадая в интересные ситуации, я описывал их. И всё благодаря тому, что я сидел рядом с ведущим программистом. Я мог вблизи наблюдать за его работой, и видел, насколько она отличается от того, что сделал бы я. Мы много программировали вместе, что ещё больше облегчало мои наблюдения. Более того, в нашей команде не осуждается «подглядывание» за людьми, пишущими код. Когда мне казалось, что происходит что-то интересное, я поворачивался и смотрел. Благодаря постоянным вставаниям я всегда был в курсе происходящего.

Я год просидел рядом с ведущим программистом. Вот чему я научился.
Total votes 86: ↑80 and ↓6+74
Comments37

Полюби Козла

Reading time7 min
Views11K
Как тебе твой начальник? Что о нём думаешь? Душка и лапочка? Самодур? Настоящий лидер? Задрот конченный? Дебил рукожопый? О Боже, какой мужчина?

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

Из этих двадцати людей я искренне благодарен не всем. Только тринадцати. Потому что они – Козлы. Именно так, с большой буквы.
Читать дальше →
Total votes 74: ↑37 and ↓370
Comments40

Заметка про NULL

Reading time10 min
Views186K
Всем привет!
Долго думал, что бы написать полезного про Оракл, перепробовал кучу тем. Каждый раз получалось слишком длинно, потому что уносило глубоко в дебри. Поэтому решил начать с максимально простой темы, чтобы оценить интерес аудитории и её отношение к моему стилю изложения материала (имхо, писатель из меня не очень). Несколько замечаний:
  • заметка относится к СУБД Oracle, но большинство написанного касается и других СУБД;
  • не получилось симпатично оформть код: тег source lang=«sql» подсвечивает слишком мало, как сделать по другому не в курсе. Если кто покажет, быстро всё приведу в более читабельный вид.
Итак.

Основные положения

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

Основная особенность NULLа заключается в том, что он не равен ничему, даже другому NULLу. С ним нельзя сравнить какое-либо значение с помощью любых операторов: =, <, >, like… Даже выражение NULL != NULL не будет истинным, ведь нельзя однозначно сравнить одну неизвестность с другой. Кстати, ложным это выражение тоже не будет, потому что при вычислении условий Oracle не ограничивается состояниями ИСТИНА и ЛОЖЬ. Из-за наличия элемента неопределённости в виде NULLа существует ещё одно состояние — НЕИЗВЕСТНО.
Читать дальше →
Total votes 75: ↑73 and ↓2+71
Comments46

N+7 полезных книг

Reading time6 min
Views67K
Привет! Это очередной традиционый список книг, оказавшихся полезными за год. Сугубо субъективный, конечно. Но я серьёзно рассчитываю, что вы подскажете ещё классных штук почитать.



Думай медленно, решай быстро — Даниэль Канеман
Это самое волшебное, что случалось за последние годы в плане гиковой литературы. Эта штука последовательно открывает когнитивные искажения и учит настраивать мышление. При этом увлекательно. Вообще, подход к тому, что мышление — это набор техник, которые можно тренировать и оттачивать, он, наверное, правильнее подхода «это шаманство». Канеман в отличие от следующей в списке книги, показывающей особенности реверсивного мышления, не даёт новых техник — но показывает, где и какие ошибки мы совершаем при обычных процессах. Такой серьёзный дебаг мозга.
Читать дальше →
Total votes 73: ↑71 and ↓2+69
Comments80

«Несезон» в жизни фрилансера: как пережить и выжить?

Reading time4 min
Views4.3K
Это только со стороны кажется, что заработок фрилансера при умелом подходе достаточно стабилен и ни от чего не зависит. На самом деле, окунаясь с головой в вольное творчества, оказывается, что есть периоды простоя, которые случаются каждый год. Как правило, это январские праздники, и летний сезон.

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

Другой вопрос — как пережить эти периоды с минимальными финансовыми потерями? И здесь есть свои небольшие тонкости и лайфхаки. О них и пойдет речь далее.

И швец, и жнец, и на дуде игрец



Читать дальше →
Total votes 18: ↑13 and ↓5+8
Comments5

Архитектура нейронной сети для реализации алгоритма RL с возможностью задания одновременно выполняющихся действий

Reading time4 min
Views4.2K
Одна из классических схем нейронной сети для реализации алгоритма RL выглядит следующим образом:


Где: inputs – входы в нейронную сеть; FC – (fully connected) архитектура скрытых слоев или CNN — FC – архитектура архитектура скрытых слоев (в зависимости о того, что подается на входы); outputs – выходы сети. Часто выходы сети это softmax слой, который выдает вероятность выполнения одного из действий из набора всех возможных действий.

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

Для решения этой проблемы предлагается архитектура с слоем маски. Предлагаемая архитектура выглядит следующим образом:


Эта архитектура полностью соответствует классической архитектуре, но также включает слой маски действий. Выход у данной архитектуры один – это значение ценности действия (группы одновременно выполняемых действий). Слой маски действий может быть реализован в соответствии с псевдокодом ниже:
Читать дальше →
Total votes 14: ↑13 and ↓1+12
Comments6

О проектировании гибкой системы способностей персонажей в играх

Reading time3 min
Views11K
Система способностей персонажа пожалуй самая требовательная к гибкости в игре. Невозможно на этапе проектирования предсказать какие заклинания появятся в финальной версии или последующих обновлениях. Этот пост будет о том, как я абстрагировал процесс исполнения способностей.

Сама по себе способность есть ни что иное, как набор действий. Минимальный интерфейс способности состоит из одного метода: «применить», но не всё так просто и о сложностях под катом.

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

Эволюция одного алгоритма

Reading time17 min
Views7.9K

Некоторое время назад мой коллега попросил помочь ему с одной проблемой. Проблему я ему решил, но кроме того, мне показалось, что на решении этой проблемы можно объяснить несколько алгоритмов и приёмов программирования. А также показать ускорение времени выполнения алгоритма с 25 сек до 40 мс.

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

В печенках сидит. Почему удаление опухолей печени – показатель высшего мастерства хирурга

Reading time13 min
Views43K
В рамках материалов о лечении онкологических заболеваний мы в своем блоге до сих пор не затронули такую ответственную область, как хирургия. Хотя именно хирургическое удаление опухоли – единственный радикальный метод лечения, существующий в онкологии.

Радикальный метод – тот, который устраняет главную проблему и причину всех остальных тяжелых симптомов: злокачественное новообразование.
Читать дальше →
Total votes 33: ↑33 and ↓0+33
Comments5

Почему я сменил фриланс на удаленную команду

Reading time14 min
Views14K
Существует масса вариантов удаленного взаимодействия. Принято выделять дистанционную работу и фриланс, но чаще мы находимся в каком-то из промежуточных состояний. И состояние состоянию рознь. Одни варианты дают охват рынка, другие – поток заказов, третьи – социальный пакет. А перспективы везде разные. Так что лучше четко представлять, куда хочется прийти.
Для себя я выбрал формат дистанционной работы в распределенной команде. Под катом – о причинах выбора: анализ моего опыта и вариантов, с которыми доводилось сталкиваться лично.

image
Читать дальше →
Total votes 40: ↑34 and ↓6+28
Comments14

Information

Rating
Does not participate
Location
Харьков, Харьковская обл., Украина
Date of birth
Registered
Activity