Точка входа – Telegram
Точка входа
518 subscribers
13 photos
1 file
60 links
Спасибо, что зашли на канал!

Субъективно про будущее и настоящее IT сферы от разработчика ПО
Download Telegram
Последнее время активно пишу на Go (golang.org) и все сильнее убеждаюсь, что он со временем прижмет своих конкурентов по веб части.

В языке больше всего радуют 3 вещи:
- обработка ошибок
- жесткий синтаксис
- быстрый компилятор

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

С жестким синтаксисом проблемы стиля кода отваливаются by design. Все как при коммунизме: все пишут одинаково (если забиндили вызов gofmt на сохранение кода, либо вызвали его руками) и нет никаких if в одну строку или тернарных операторов в тернарных операторах. С таким подходом к стилю кода, можно нанимать джуниоров не опасаясь за "нововведения по стилю" - они будут сходу писать простой и читаемый код (инфа проверена и оттестирована)

С компилятором все понятно: экономит время и нервы разработчика. Это позволяет увеличить кол-во сборок и сглаживает итерации ручного тестирования при написании кода

Рекомендую начать учить Go, хотя бы для того, чтобы увидеть другой подход. Стоит попробовать написать на нем простейшее приложение с обработкой http запросов, либо бота для телеграмма. Язык учится максимум за неделю, а рвотный рефлекс от нового синтаксиса проходит практически сразу (особенно если забиндить на сохранение файлов не просто gofmt, а сразу вот это: https://github.com/bradfitz/goimports)

Я начал познавать Go с этого тура: https://tour.golang.org

#golang #go
Презентация CEO NVIDIA о том, как применяется машинное зрение в автомобильной промышленности:
https://www.youtube.com/watch?v=KkpxA5rXjmA

Если нет времени смотреть всю презентацию, то посмотрите хотя бы 32ую минуту, там показан результат не слабой сегментации

Для тех, кому интересно как это работает: вот тут есть код другой реализации сегментации, не уступающей по уровню той, которая показана на видео: http://mi.eng.cam.ac.uk/projects/segnet/
Каталог каналов от самой большой медиасети в Telegram - @catalog_channels
Сегодня освежал свои знания по ReactJS. Посмотрел доклад https://vimeo.com/168648012
который читает автор суперского бойлерплейта https://github.com/mxstbr/react-boilerplate/

В докладе говорится о текущих фишках фронта:
- надо разбивать файлы не по типам, а по фичам, которые они реализуют
- стоит использовать модульный CSS и изолировать влияние стилей только рамками компонента
- следует использовать Redux
- и что-то про ImmutableJS, но это уже слишком

Волна, которую запустили Facebook несколько лет назад, под названием React (в нее входят ReactJS, GraphQL, паттерн Flux и тд) очень крутая и очень нужна разработке веб приложений, но к сожалению, сообщество еще не дошло до уровня "упакованности" того же AngularJS. Я очень удивился, когда увидел, что для форм на ReactJS до сих пор нет нормальных не примитивных валидаторов (в AngularJS это, практически, из коробки идет)

Если посмотреть на вакансии, то ReactJS уже востребован на уровне AngularJS. Например, Тинькофф Банк уже слез с AngularJS и наисал крутую статью о своих результатах : https://habrahabr.ru/company/tcsbank/blog/303580/
Посмотрите историю развития такой штуки, как "машинное обучение" от одного из калифорнийских инвесторов: http://a16z.com/2016/06/10/ai-deep-learning-machines

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

Впервые масштаб гугла я почувствовал, когда посмотрел фильм про то, как они сканируют книги: они просто решили отсканировать все книги мира во всех библиотеках мира, а потом скормить это роботам, чтобы те распознали, а то что не распознали, скормить людям через капчу. Компания-титан, что сказать

Здесь можно поиграться с нейронной сетью онлайн (это та песочница, которая показана на видео): http://playground.tensorflow.org/
Вчера задали вопрос: "нейронные сети выдают крутой результат, но как вообще эта штука работает?". Есть очень наглядный пример работы обученнной нейронной сети, на котором видно что сеть получает на входе и что отдает на выходе: https://rawgit.com/TigranGalstyan/mnistconvnetdemo/master/index.html
Автор обучил нейронную сеть на распознавание рукописных цифр

Можно увидеть, что в итоге, нейронная сеть - это обычная функция, которой на вход подается много параметров, а на выходе ожидается массив вероятностей для каждого из заложенного в нее ответов (в случае с цифрами 10 значений). Конкретно в этом примере на вход функция (сеть) принимает массив пикселей (например, если пиксель черного цвета, то будем считать, что пиксель имеет значение 1, если пиксель белого цвета, то 0). Т.к. изображение двумерно, то пиксели выстраиваются в один ряд, чтобы массив был одномерным. Получается, функция (сеть) примет на вход длинный массив с нулями и единицами

Потом происходит магия нейронной сети (по сути решение уравнений), в результате которой сеть сообщает вероятности всех ответов, заложенных в нее (массив вероятностей ответов). Как видно из примеров с распознаванием рукописных цифр, сеть выдает для каждой цифры вероятность того, что вы изобразили именно ее. Попробуйте начать рисовать цифру 6, а потом плавно перейти к 8, и вы увидите, как сеть поменяет свое решение (опустит вероятность 6 и поднимет вероятность 8)
Свежая интересная статья: заведующий лабораторией нейронных сетей и глубокого обучения МФТИ рассказал про нейронные сети и эволюционные алгоритмы

"Мы собираемся развивать нейроэволюционные подходы для оптимизации топологии нейросетей и регуляризации — это самый многообещающий подход. Получится революция или нет — увидим."

https://nplus1.ru/material/2016/07/06/evodevo
Очень часто, в начале обучения программированию люди говорят: "я понял, что есть циклы и т.п., но что делать дальше?" и просят накидать задачек. Рекомендую отличный (бесплатный) ресурс с задачами: https://www.hackerrank.com

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

Если выберите Go, то советую прочитать про стиль табличного тестирования: https://github.com/golang/go/wiki/TableDrivenTests
Решите вопрос тестирования на разных наборах входных данных и привыкните писать тесты
Судя по статьям и презентациям, в мире во всю идет работа над новой областью, называемой Connected Car. С точки зрения программиста - это еще одна почва для стартапов

Кидаю ссылки на несколько интересных презентаций с недавней конференции "Connected Car" (http://ccsummit.ru/ru). Все доступные презентации можно скачать в разделе "Программа"

В целом про connected devices (изображена очень интересная идея на 5ом слайде):
http://www.smileexpo.ru/public/upload/showsEvent/evolyutsiya_podklyuchyonnih_avtomobiley._keysi_14628707177749_file.pdf

Про сервисы и приложения в этой теме:
https://drive.google.com/file/d/0B2xwQ6W4pZxwYk1PSktyOEQ3dUE/view?usp=sharing

Взгляд оператора связи (Билайн) на эту область:
http://www.smileexpo.ru/public/upload/showsEvent/connected_car_videnie_sotovih_operatorov_14625219162375_file.pdf
В конце прошлого года гугл выпустил крутейшую библеотеку для машинного обучения TensorFlow. Как по мне, библиотека отличается от своих конкурентов более низким порогом входа. Качество сопровождающих материалов так же на уровне, посмотрите, например, это видео: https://www.youtube.com/watch?v=cSKfRcEDGUs

А вот по этому туториалу (https://codelabs.developers.google.com/codelabs/tensorflow-for-poets/index.html) можно обучить сеть, которая различает различные виды цветов (одуванчики, розы, тюльпаны и т.д.). Все разворачивается несколькими командами в Docker контейнере. Тренировочный датасет с цветами прилагается

Если собирайтесь попробовать, то готовтесь - уйдет больше часа на обучение сети. Но результаты стоят потраченного времени

#MachineLearning #TensorFlow
Интересные слайды из презентации Мэри Микер "internet trends 2016" с кратким описанием поколений

Интересно, в будущем будут описывать поколонеие после миллениалов?

Тренд с отсутствием браков подтверждается. Одна из традиционных ценностей может уйти через несколько десятков лет
На днях открыл для себя MIT OpenCourseWare. Был удивлен, что один из самых сильных технических ВУЗов мира вот так свободно открывает все свои лекции и конспекты. К слову, обучение в данном вузе стоит от 3 млн рублей в год

По утверждению самих авторов, такой поход к образованию с открытыми лекциями побуждает преподавателей тщательней готовить свои курсы. Материал не сильно отличается от того, что преподают в топовых российских ВУЗах, но подача материала явно нестандартная. Может мне просто повезло, но в первой лекции, которую я посмотрел, были цепи Маркова, суть которых пояснялась на примере Симпсонов

Здесь можно посмотреть список всех курсов (там присутствуют не только технические специальности): http://ocw.mit.edu/courses/audio-video-courses/

Круто то, что публикуются курсы различной давности. Интересно смотреть на манеру преподавания различных периодов. Судя по википедии, лекторы обновляют свои материалы на сайте, так что присутствуют достаточно свежие (2014-2015г.) лекции. Из плохого: еще нет приложения для мобильников, как у Coursera - не всегда удобно смотреть/слушать с компа
Работа с графикой, всегда выглядит впечатляюще. Вдвойне круто, когда это работает в браузерах. Что интересно, я ни разу не встречал в резюме, чтобы люди, рабоающие с JavaScript, указывали хоть какой-то опыт работы с WebGL. Даже про обычную работу с Canvas не особо часто говорят. Хотя, на мой взгляд всем JS разработчикам стоит попробовать поиграться с холстом, сделать, например, какую-то простенькую псевдо 3D игрушку

Для работы с WebGL рекомендуют обычно эту библиотеку: http://threejs.org
По крайней мере, интерактивную рекламу для больших компаний делают с помощью нее

Здесь можно посмотреть пример реализации модели человеческого глаза: http://www.vill.ee/eye/
(на мобильниках тоже открывается, но не получится удобно повертеть глаз)
В последние дни всех накрыло игрой про покемонов. Я не фанат игр, но меня радует сама механика. Она приближает людей к тому, что дополненная реальность - это нормально

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

По этой теме есть хорошая статья про то, что "Pokémon Go" - это еще один шажок к виртуальной реальности: http://www.vox.com/2016/7/12/12152776/pokemon-go-augmented-reality-beginning

#AugmentedReality
Вчера посмотрел презентацию по лучшими практиками написания приложений на Go. Хочу прокомментировать в нескольких постах основные моменты, которые пригодятся не только Go программистам

1. Пишите тестируемый код

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

Особенно эта боль остро чувствуется в языках с динамической типизацией. Например: функция всегда ожидала на вход число, а тут она начнет получать (null / nil) и начинает падать. Разработчик в принципе не мог помнить, что от чего зависит в проекте, соответственно ругать его - не самое лечшее решение, чтобы избежать подобных проблем. В таких ситуациях лучше всего писать приложение (автоматические тесты), которое тестирует ваше приложение. Такой подход поможет выиграть время, которое вы бы могли потратить на ручной прогон приложения

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

1) избегать глобальные состояния (global state);

2) делать "инъекции" зависимостей (dependency injection) в тестируемые функции

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

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

По теме тестирования хочу посоветовать отличную книгу "Как тестируют в Google". После прочтения, становится понятно, как массивная компания все еще имеет возможность так быстро двигаться. Секрет в особом подходе к тестированию (неожиданно, да?)

P.S. Я начинаю прорабатывать видео курс (бесплатный) по программированию на Go, и если вам интересно понаблюдать за разработкой реального приложения со многими проблемами и их решениями, стоящих на пути разработчика (в том числе и автоматические тесты), то напишите "+" мне в личку @dkostenko
Слайд с тем, что нужно помнить во время написания кода
Не думал, что напишет столько людей. Спасибо, что читаете посты!

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

1) @brain_party

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

Подписывайтеся, возможно, пересечемся на какой-то из встреч

2) @NeuroScienceRu

Крутые материалы хлещут как из пробоины из этого канала. Последние исследования мозга, нейросетей и тд все здесь

Проматайте ленту на месяц назад - по пути будет встречаться только актуальная инфа, есть что почитать