среда, 6 сентября 2017 г.

Открытый курс машинного обучения на Хабре

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

Попытка номер два. Первая неделя - знакомство с Pandas. Это такой пакет к Питону для работы с таблицами, наподобие Excell, но более мощный и более гибкий. Весной было такое ощущение и сейчас повторилось, когда работал с ним - чувствую себя немного волшебником. Из кучи разрозненных данных выкристаллизовывается структура, внутренние связи и закономерности. Удивительное ощущение...

Кстати, очень классная тенденция - давать своего рода рабочие тетради в виде файлов Jupyter Notebook. Там и вся теория, и возможность тут же попробовать ту или иную команду, и поэкспериментировать с ними. Причем в git-архиве к первой неделе аж пять разных файлов, в том числе классический с данными по Титанику :) Будет чем завтра поиграться.

Курс рассчитан примерно на 10 недель и требует довольно много времени, но по концентрации информации ИМХО один из лучших на русском языке - так что планирую закончить.

вторник, 5 сентября 2017 г.

Coursera - Основы программирования на Python

В августе наткнулся на Coursera на курс "Основы программирования на Python" от ВШЭ. Питон мне нравится плюс в связи с поиском работы - лишние "корочки" лишними не будут, в общем, поступил. Coursera очень настойчиво подталкивала в сторону платного варианта обучения, (цены кстати вполне разумные), но я сейчас без работы, так что проходил в бесплатного варианте. Сегодня официально завершил обучение, ниже - впечатления от курса.


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

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

К слову, тут сказывается заметный минус курса - отсутствие информации о проходимых тестах. В примерах к каждой задаче есть два-три теста, на которых можно проверить свой код - и тут всё понятно, есть вводимая информация и написано что должна вывести на экран программа студента. Дальше, после отправки кода на сайт - он дополнительно проходит проверку на тестах, неизвестных пользователям. При этом вся доступная информация - "Wrong Answer. Test 7" - явна недостаточна для отладки.

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

К слову, цитата из видео курса про обработку ошибок: "То есть что делать, если у нас в процессе выполнения команд в try возникла какая-то ошибка, какое-то исключение было брошено. Ну вот, в принципе здесь мы можем... Как бы это сделал плохой программист? Давайте сделаем. Напишем, что возникла ошибка. Вот, отлично! Наверняка вы сталкивались с такой проблемой, что вы заполняете на сайте, например, какую-то форму, нажимаете «Отправить», а оно говорит: «Ошибка». И вы сидите ломаете голову, что за ошибка, что же оно хотело. И там оказывается, что телефон нужно было написать... вместо 8 написать +7, или какие-то скобочки или еще что-то. Догадаться до этого невозможно, и так поступают только плохие программисты. Мы пытаемся стать хорошими. Давайте пытаться лучше"
Я в таких случаях либо самостоятельно писал тестовый модуль, проверяющий мой код на различных комбинациях входных данных, либо копался в архивных записях форума - курс идет не первый поток, так что большинство критичных моментов уже обсуждалось. Уже ближе к концу курса узнал, что заметная часть простых задач вместе с тестами взяты с pythontutor.ru, так что если совсем тупик с каким-то тестом, можно попытаться найти эту задачу там.

Отдельная фича курса - вводимый код проверяется на соответствия стандартам стиля Python (PEP-8). Это - к примеру наличие пустой строки в конце файла (причем только одной) или выделение арифметических знаков пробелами. Нарушение стиля никак не влияет на выполнение программы (только на её читаемость), но неправильно оформленные программы даже не проверяются на работоспособность. Впечатления от этого неоднозначные. С одной стороны - это здорово, все эти моменты по оформлению запомнились сами собой в процессе сдачи задач. С другой стороны - требовать от начинающих ещё и соблюдение стиля, когда они толком ничего не знают, это на мой взгляд лишнее. Хорошо, что в среде PyCharm программу можно привести к стандартам PEP-8 всего одним нажатием комбинации клавиш Ctrl+Alt+L. 

К слову - разобрана отладка в PyCharm, помню мне очень не хватало этого в курсе Stepic. И вообще, если до курса я запускал Питон практически только в режиме Jupyter Notebook, то сейчас вполне комфортно чувствую себя в PyCharm. Не знаю ещё всех-всех нюансов этой IDE, но того что освоил вполне за время курса, вполне достаточно для комфортной работы.

Отдельного упоминания заслуживает преподаватель - Густокашин Михаил Сергеевич. Реально - человек на своём месте! Умеет объяснять, доходчиво и без занудства. Иногда ошибается в коде, но по факту это получается отдельный урок - как искать собственные ошибки и как реагировать на них.  

Восьмая неделя курса посвящена функциональному программированию - наконец то узнал что это такое. Зацепило своей изящностью - зачастую большой кусок программы с вводом данных, условиями, циклами можно заменить всего одной строчкой (правда длинной строчкой). Чем то напоминают концепцию перенаправления ввода/вывода в командной строке Windows или Linux, когда выходные данные одной программы становятся входными для другой в длинной цепочке. Не уверен, что такой код писать легче чем стандартный, но - интересно. Совсем по другому мозги работают. Пожалуй, когда будет по свободнее со временем - надо будет освоить Haskell.

Девятая неделя - азы объектно-ориентированного программирования. Что-то про ООП я и раньше знал, из других языков, поэтому прошёл быстро, но по ощущениям для новичков может быть сложным. Хотя, это всего три процента в итоговой оценке, так что если совсем никак - можно и пропустить.

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



вторник, 8 августа 2017 г.

Структуры данных - выбирай правильно!

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

Когда то уже брался за проект Эйлера, но хватило меня не надолго, после 20-30 задач забросил. Недавно начал прорешивать по-новой, чтобы потренировать навыки программирования на Python.

Задача 23 - Non-abundant sums - быстро набросал простенький алгоритм, используя списки (list) и запустил. Жду - ответа нет, почитал книжку - ответа нет... Ладно пообедал, вернулся за монитор - наконец-то! 24 минуты ушло на подсчет. Ответ правильный, но - 24 минуты! У меня в памяти (не помню правда откуда) что задачи проекта Эйлер должны решаться в пределах минуты. Если дольше - скорее всего это не оптимальный алгоритм. Ладно, посижу-подумаю...

Алгоритм глобально не поменять, по крайней мере у меня идей нет, но можно заменить структуры данных. Множества (set) в некоторых аспектах быстрее, чем списки. Заменил список на множество, не трогая всю остальную логику, запускаю скрипт и 15 секунд спустя тот же самый ответ. Слегка дооформив, чтобы полнее использовать плюсы множеств, сократил время подсчета до 13 секунд.

Один и тот же алгоритм, разница только в используемых структурах данных - и такая разница во времени выполнения. 13 секунд против 24 минут

суббота, 15 апреля 2017 г.

Ловушка для шпионов

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

Похоже, все вражеские шпионы на этом месте должны понять бесперспективность попыток попасть в Ивангород...

Задача имеет решение, но сохраню интригу

понедельник, 30 января 2017 г.

Как прогрессировать в турецком подъёме?

Брутальность гирь (и главное неудобство в их использовании) - большой шаг нарастания весов. 16 кг, 24 кг, 32 кг. Конечно, сейчас можно купить всё что угодно, в том числе и с шагом по 2кг, но, во-первых это не брутально, во-вторых денег жалко, в-третьих жилплощадь тоже не резиновая... В общем, надо прогрессировать с тем, что есть.

Выполнив цацулинский норматив с 16 кг (10 турецких подъёмов за 10 минут), я смог хотя бы по разу на каждую сторону сделать турецкий подъём и с 24 кг. А перейти от двух подъёмов к десяти (с большим отдыхом между подходами) - дело двух-трёх недель.

Но, выполнив тот же норматив с гирей 24 кг, я ни разу не смог сделать турецкий подъём с двухпудовкой. Ладно, пойдем другим путём. На протяжении двух недель делаю максимальное количество турецких подъёмов с 24 кг в течение десяти минут. У меня получалось по девять на каждую сторону. После этого очередную тренировку начинаю с попытки выполнить подъём с 32 кг. Не получается, отдыхаю пару минут и делаю традиционные максимальное количество подъёмов с 24 кг в течение 10 минут. Так прошла ещё неделя...


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

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

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

Подскажет кто, где можно купить гирю 40 кг по разумной цене?

пятница, 13 января 2017 г.

Софт для бегуна

Когда почти два года назад начал готовиться к первым соревнованиям, поставил себе на телефон программу Sports Tracker. Тренировался, бегал - вроде бы всё нормально было, но на соревнованиях он насчитал мне 12.7 км вместо 10.5. И, кстати, не было русскоязычного голоса на звуковых оповещениях. Так что, когда после большого перерыва, этим летом снова начал бегать, решил искать другую софтину.

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

Вспомнил, что в каратистском лагере Татьяна говорила про micoach от Адидас. Правда в ГуглПлэй искать надо было не micoach, а train&run. Практически всю осень отбегал с этой софтиной, был полностью доволен... В начале зимы прошло очередное обновление... Слов нет, одни маты - раньше голосовое оповещение можно было выставить, чтобы срабатывало через каждые 250 м, 500 м, 1 км и далее, это было очень удобно. Большую часть пробежек я ставил на оповещение через 500 м, когда бежал темповый бег и важно держать скорость - через 250 м. После обновления режимы 250 м и 500 м исчезли, меньше 1 км не поставить. Вдобавок вместо темпа (пять минут на км), программа стала говорить скорость (двенадцать километров в час). Теоретически разницы нет, но практически, те кто бегают разницу оценят.

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


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

Ладно, ищу дальше... Все упорно хвалят Runkeeper - решил дать ему второй шанс, тем более что переустановил смартфон. Поставил и... понравилось. Голосовые оповещения есть, на русском в том числе, оповещения выставить можно и по 250 м, и по 500. Дистанцию меряет точно - бегая с train&run ближние к дому 5 км промаркировал, результаты обоих программ совпадают. Просмотр результатов на сайте реализован менее удобно, чем на micoach - мелковат масштаб графика темпа, стометровые ускорения похоже будет проблемно считывать, но с этим я готов мириться. Похоже, мой выбор по софту сделан - по крайней мере на ближайшее время.

З.Ы. Получил сегодня рассылку от Runkeeper - "Присоединяйтесь к Испытанию" - именно так, с большой буквы


Вообще у меня на сегодняшний день семь или восемь пробежек после НГ, ну да ладно, движуху я люблю, присоединился. И после этого пришло второе письмо


Советы, чтобы бежалось легко:
- Посмотрите видео
- Сделайте ваше фото и поделитесь им
- Посмотрите, кто ещё считает так

Я стараюсь, наматываю километраж, а оказывается всё можно было сделать гораздо проще. Вот он - постиндустриал...

среда, 4 января 2017 г.

Хочешь насмешить Бога - расскажи ему о своих планах...

В ноябре думал, как классно будет наконец-то покататься на лыжах (после двадцатилетнего перерыва). Купил лыжи, палки, ботинки, а потом заглянул в прогноз погоды:


В общем за декабрь раза четыре покататься удалось...

Ладно, в январе раз тепло - решил ударно заняться бегом, первый день просто идеальная погода была, сегодня - уже другая:


На пробежку собирался всерьёз - футболка, тёплая тельняшка, свитер, куртка. Снизу - трусы, хэбэшные штаны, поверх шорты и спортивные штаны. Шорты - для утепления вторичных половых признаков - помню ещё по ноябрьским пробежкам: если всё свободно болтается, то на морозе замерзает и звенит. Ничего, отбегал. Морально настраиваюсь на следующую пробежку.

Что характерно - нормального снега всё равно нет, выпало на полсантиметра и всё...