Как добраться до железного века

Мне всегда нравились разные передачи по Дискавери и тому подобным каналам, где народ из ничего строит разные технологичные штучки. Но если взять ту же “свалку”, то там основная задача – найти правильные готовые детали и собрать их. А вот что мне было интереснее – а можно ли было бы создать цивилизацию быстро, если бы у нас была только информация о том, что и как работает?

И вот, мой малый только что мне дал одну ссылку. Mike – известный ютубер. Известен он тем, что забравшись в лесную чащу только в трусах, начинает там строить всякие полезные штуки из того, что есть в реальной природе, а не паразитируя на человеческих отбросах. Вот сейчас он на канале Primitive technology начал очередной проект. Из ничего он уже дошел до железного века – собрал из глины печь, на которой восстановил железо из “грязи” – на самом деле, он набрал комки бактерий, окисляющих железо. И получил из них крицу – сырое низкокачественное железо, которое нужно еще доочистить, добавить еще восстановители и т.п. Да, железо низкокачественное, но блин! Это уже железный век! Не бронзовый, не каменный!

А еще на канале есть видео, где Майк строит крытую водонепронецаемую хижину, с обогревом и вентиляцией; подготовка угля, изготовление лука, ферма для сладкого картофеля (забыл, как он одним словом называется). В общем, похоже, я нашел для себя правильный канал. Интересно, когда он доберется до Альфа-центавра?

Posted in IT | Tagged | Leave a comment

Нейросети и творчество

prismaВ прошлом посте, я затронул тему, как уже в обозримом будущем может выглядеть одна из самых интеллектуальных (исходя из моего определения, что такое интеллект) профессий – профессия программиста. Но что происходит в творческих специальностях? Упомяну только малую толику новостей о прогрессе в данной области.

В последнее время только ленивый не писал о Prisma – приложении, которое выполняет стилизацию реальных фотографий под разные художественные стили. Приложение пока доступно только под iOS и не для всех рынков (так что я пока могу только посмотреть чужие примеры). Скоро его должны увидеть и на других платформах. Как и большинство новинок последнего времени, оно основано на глубоких нейронных сетях. Причем, данное приложение по сути не содержит ничего наукоемкого – используются уже существовавшие до него технологии. Основная его суть в том, что ребята смогли правильно найти целевую аудиторию и сделать вокруг нейросети удобную интерфейсную обертку. Конечно, еще большая работа по обучению сетей – ведь для этого нужны данные. Много данных. Правильных данных. Вот здесь интервью с одним из основателей стартапа – Алексеем Моисеенковым.

Перейдем к профессии звукорежиссера. Одна из задач здесь – правильно озвучить видеоряд (если не используется живой звук). И вот впечатляющая работа, которая позволила озвучить клип правильными звуками от барабанной палочки. Возможно, скоро не столь уж фантастично будут выглядеть системы, где на вход подается старый и мутный черно-белый немой фильм, а на выходе получаем цветной, Full HD, озвученный на заданном языке. Как минимум, реставрация картин уже очень скоро должна достичь новых высот.

Brain.fm. Еще один стартап. Мужики занимаются тем, что заставляют генерировать музыку по заказу. Теоретически она должна способствовать тому или иному типу психоактивности пользователя (хотя половина тем – скорее психопассивности). Не могу сказать, что то, что я успел послушать, можно назвать шедеврами, но… как на мой неказистый слух, эти произведения ничем не хуже кучи другой фоновой музыки. Вполне можно генерировать музыку для игр, фильмов, подстраивающуюся под сюжет.

Про автоматическую генерацию текстов я уже постил в своем фейсбуке – “В Китае журналистов меняют на роботов“.

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

Posted in Deep learning, IT | Leave a comment

Литературная неделя

2aНа прошлой неделе опубликовал 2 статьи на Хабре и на Geektimes.

C# — есть ли что-то лишнее?

Статья получилась достаточно спорной, что видно по комментариям. В некотором смысле, я сознательно шел на провокацию. Хотелось обговорить многие вопросы развития языка, но ведь если на каком-то форуме просто напишешь “а расскажите, ну вот реально ли вам нужен Tuples”, то вряд ли тебе ответят много людей, причем специалистов. Поэтому и сделал такую развернутую статью, размещенную на одной из самых посещаемых площадок для разработчиков. Затронул и свои самые больные темы – синтаксис запросов в LINQ и var.

Получил достаточно много интересных откликов, которые заставили на некоторые моменты взглянуть иначе. Всем, кто ответил с развернутыми примерами – благодарен, даже если они писались с негативной эмоциональной окраской. Это Хабр. Главное, что я достиг своих целей.

Генерация программы из описания на естественном языке

Нашел интересную статью. Ссылки: оригинал статьи (русский перевод). Статья заинтересовала настолько, что решил внимательно перевести. К сожалению, уровень английского позволяет иногда терять важные вещи при беглом прочтении взглядом. А потом подумал – почему бы не поделиться мыслями? Получилась небольшая статья в моем любимом, научно-популярном стиле.

Posted in C#, Deep learning, IT | Tagged , | Leave a comment

Бесплатные книги по deep learning

first-contact-with-tensorflowНашел ссылку на эти книги, оставлю для себя здесь – планирую глянуть чуть позже. Но, может еще кому пригодятся – литературы в этой области пока очень немного. Книги на английском.

  1. Продвинутый уровень:Deep Learning” написана известными в области deep learning учеными Ian Goodfellow, Yoshua Bengio и Aaron Courville. Книга описывает все основные алгоритмы в данной области и может быть использована как справочник для тех, кто занимается экспериментами в области deep learning.
  2. Средний уровень:Neural Networks and Deep Learning”. Автор – Michael Nielsen. Данная книга является хорошей стартовой площадкой для тех, кто уже имеет опыт в машинном обучении и хочет глубже понять специфику нейросетей.
  3. Начальный уровень:FIRST CONTACT WITH TENSORFLOW, get started with Deep Learning programming” за авторством Jordi Torres. Книга ориентирована на инженеров, которые знакомы только с базовыми понятиями машинного обучения и хотят расширить их практическими навыками работы, используя TensorFlow.
Posted in Deep learning, IT | Tagged | Leave a comment

Украль… и пропиль!

Реклама в лифте
Ukral

Один из подарков на день рождения (это шоколадки вообще-то):
Chocolate-for-developers

Posted in Личное | Tagged | Leave a comment

Все будет быстро

Хочу поделиться одним видео. Многое из того, что я сбивчиво пытался объяснить в своем посте, весьма коротко и красиво смог рассказать Анатолий Левенчук.

Posted in IT | Tagged , | 1 Comment

Var (val, auto) в Java

java-varСейчас происходит активное обсуждение возможности введения в новую версию Java автоматического вывода типов, как это сделано в таких языках, как C# или C++. Вот в этих статьях можете почитать “pro et contra” относительно этого предложения:

У меня по этому поводу мнение такое. Код пишется один раз, читается много (банальная истина). Автоматический вывод типа во многих случаях заставляет делать дополнительные действия для того, чтобы понять, какого типа переменная. А значит, это плохо. Да, это привычно, например, для JavaScript-программистов, но там совершенно другая парадигма типизации.

Раздражение от явного и полного прописывания типов вызывают такие вот куски кода:

List<Pair<String, Double>> scores = seeker.getScores(documentAsCentroid);
...
for (Pair<String, Double> score: scores)

И это (Pair<String, Double>) далеко не самый длинное определение типа, которое приходится повторять. А любые повторы – это действительно плохо (помимо того, что просто неуклюже). Но есть способ значительно лучше и выразительнее. Вот чего мне после Паскаля не хватало в Java, а затем в C#, так это конструкции типа Type (typedef в C). В C# под это дело пытался приспособить using, который позволяет в начале файла написать что-то типа:

using StopWordsTables = System.Collections.Generic.List<System.Collections.Generic.Dictionary<string, string>>;

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

Вот если бы ввели typedef в Java, это бы решило проблему громоздких типов без ущерба для читаемости кода.

Возражения по поводу того, что можно было бы договориться использовать var только там, где тип легко вывести глазами (т.е., он явно виден в инициализаторе) не найдут у меня поддержки по одной простой причине. Аналогичное правило уже ввела в Code Agreement Майкрософт. Только вот практически никто этого не соблюдает. Var победило. Люди ленивы.

Да, еще момент – допустим, введут таки этот var, чтобы писать быстрее. Так почему бы не довести идею уже до логического завершения, как это сделано в Go? В инициализаторе вместо “=” писать “:=”, что означает, что тип выводится автоматически. И тогда вообще не нужно никакого слова писать на месте типа. Еще короче… Кстати, type в Go тоже есть, что очень удобно.

Posted in IT | Tagged | Leave a comment

Go+eclipse

goclipse-logo2В позапрошлом посте писал про то, что мне понравилось работать с Go под IDEA. Есть только пара замечаний – некоторая тяжеловесность (дебажить по шагам медленно даже на моем i5 с 16 гигами RAM) и есть проблемы при дебаге рекурсивно вызываемых функций (при пошаговой трассировке останавливаемся во вложенных вызовах). В общем, решил еще посмотреть разные варианты.

NetBeans всегда славилась (даже по сравнению с Eclipse) легковесностью. Но почитав описание плагина для Go, решил даже не проверять. Насколько я понял, там фактически только подсветка синтаксиса.

Более подробно опробовал Goclipse (плагин под Eclipse). Впечатления:

  1. Установка была более заморочливой, чем в IntelliJ IDEA – нужно было поставить не только сам плагин, но и дополнительные компоненты. Подсказки работают, как бы это сказать… менее интеллектуально, чем в IDEA.
  2. Не подсвечиваются не включенные пакеты, автоматом не добавляются в раздел import. Ну и больше нужно делать разных телодвижений и кликов, чтобы получить синтаксический код.
  3. Сам редактор более быстрый и отзывчивый (это плюс, если что).
  4. Watch менее интеллектуальный – не раскрывает структуры, слайсы. Это нужно прописывать явно.
  5. Ну и под конец всего, сам дебаггер пару раз слетел, отвалившись от исполняемого процесса.

В общем, пока по совокупности параметров, для Go моим фаворитом остается IDEA. Но большая шустрость Eclipse все же оставляет приятные впечатления.

Ну и просто об ускорении. Наконец, попробовал SSD. Долго не решался, но скорость загрузки Windows (а её иногда таки нужно перезагружать), запуска приложений уже достали. А цены потихоньку переходят в диапазон сравнимых с обычными винтами. Так что взял попробовать SSD начального уровня (KINGSTON SV300S37A480G). Естественно, тратить неделю на переустановку всего, что мне нужно не очень хотелось, поэтому просто скопировал системный раздел с HDD на SSD. Для этого очень удобной оказалась бесплатная утилита EaseUS Todo Backup Free. Необходимые действия с ней были достаточно простыми (вот инструкция). Только не забудьте поставить галочку в пункте “Optimize for SSD”.

Впечатления… Скажем так – нужно было раньше переходить на SSD и не тратить бесцельно своё время ))). Что перезагрузка Винды, что запуск приложений – ускорилось в разы. Пока доволен как слон.

Posted in Go, IT | Tagged , , , | Leave a comment

Нелогичность сортировки в Go

golang.sh-600x600На днях разбирался с одной непонятной ошибкой в учебном проекте. Вроде бы все правильно перенес из аналогичного примера на Питоне, а не работает. Причина оказалась банальна. Прочитав, как работает сортировка слайса в Go, я написал аналогичное (как мне казалось) выражение для обратной сортировки. У меня была сортировка структуры – там нужно реализовать небольшой интерфейс из трех методов, но это не особо важно, поэтому я покажу на примере сортировки слайса с плавающей запятой (один из трех, для которых этот интерфейс реализован заранее).

Итак, сортировка идет следующим образом:

a := sort.Float64Slice{-1, 1, 0, 3, -2}
fmt.Println(a)
sort.Sort(a)
fmt.Println(a)

Получаем:
Continue reading

Posted in Go | Tagged | Leave a comment

Немножко о Go

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

В процессе этого выяснилось, что появилась (или я только до неё добрался) довольно приличная бесплатная среда разработки под него. Это IDEA (как раз вышла версия 2016.1) в бесплатной редакции Community Edition и плагин под Go к ней.

Получаем вполне современную среду с подсветкой, минимальными возможностями рефакторинга (самое главное, чего мне не хватало – переименования идентификаторов), отладкой и т.п.
Для тех, кто «нулевой» в Go, алгоритм установки такой:
Continue reading

Posted in Go | Tagged , , | Leave a comment