Экстраполяция IT
2.46K subscribers
89 photos
25 videos
305 links
Канал об IT в целом и о программировании в частности.

На канале объявлено военное положение и поэтому по вопросам рекламы пишите: @aratak, а деньги отправляйте сюда: https://send.monobank.ua/jar/97f7LwGQJF
加入频道
Засилье разнообразных способов подготовить статические файлы для вашего сайта продолжается. На данный момент победу уверено держит webpack, но проект http://brunch.io хоть и меньше известен, наступает лидеру на пятки. Вообще эти все менеджеры-компиляторы ассетов выглядят, как в свое время выглядел Makefile для компиляции бинарников.
Конечно же, Makefile тоже придумали не за один день, но стандарт этот прижился уже давно и выглядит достаточно стабильным. А вот компиляция ассетов находится еще в той аморфной стадии, когда перейдя от технологии к технологии концепция компиляции меняется коренным образом. И так как стандартна нет, каждый крутит свой велосипед. Ожидаемое время стагнации технологии — 3-6 месяцев.
"Веб-дизайнер", как понятние в русскоязычном пространстве совершенно не совпадает с аналогичным понятием в англоязычном пространстве. У русскоязычный веб-дизайнер занимается составлением коллажа и макетов будущих страниц. Продвинутые вебдизайнеры, чтобы отличаться от тех, низкоквалифицированных дизайнеров, дополнительно вешают на себя ярлыки UI/UX дизайнера или "дизайнера интерфейсов", подразумевая, что они предварительно думают головой, прежде чем рисовать коллажи и макеты будущих страниц и приложений. А особо продвинутые называют себя "арт-директором" или еще как-то так.
Правильному веб-дизайнеру просто необходимо уметь на выходе выдавать не красивую psd-ai-sketch картинку, а набор html+css+js, полностью готовый к интеграции в существующее приложение. В итоге веб-дизайнер должен еще быть хорошим веб-верстальщиком. Само собой, голову ему тоже стоит использовать в своей работе, поэтому "дизайнер-интерфейсов" как понятие тоже должно отсутствовать. Веб-дизайнер и точка.
Когда разрабатываешь новую библиотеку, один из главных вопросов - название. Название должно быть словом, которое знакомо каждому, но, в то же время, будет достаточно оригинальным и, хоть немного, отразит сущность библиотеки.
Ребята из ruby сообщества сталкиваются с этой проблемой довольно часто. На момент написания на rubygems.org в общий доступ выложено 7716 gem'ов.
Мы решили объединить gem'ы Солнечной системы и немного в них разобраться:

Sun ( https://rubygems.org/gems/sun ) - простая библиотека для расчета времени восхода и заката для заданной даты и координат.
Mercury ( https://rubygems.org/gems/mercury ) - фреймворк, написанный поверх Sinatra. Позволяет создавать приложения, используя haml, sass, coffee-script и markdown.
Venus ( https://rubygems.org/gems/venus ) - генератор для добавления и настройки гемов в приложение, написанное с использованием Ruby on Rails.
Earth ( https://rubygems.org/gems/earth ) - набор моделей данных обо всем на свете. Страны, автомобили, zip-коды городов, породы домашних животных и так далее.
Mars ( https://rubygems.org/gems/mars ) - фреймворк, который очень напоминает Mercury.
Jupiter ( https://rubygems.org/gems/jupiter ) - библиотека, предназначенная для ускорения развертывания новых виртуальных машин путем клонирования существующей виртуальной машины, даже если она была запущена, или с помощью предварительно созданных шаблонов.
Saturn ( https://rubygems.org/gems/saturn ) - если верить описанию, то это должен был быть gem для постройки сверхзвуковых летательных аппаратов на Ruby, однако разработка так и не началась 😞
Uranus ( https://rubygems.org/gems/Uranus ) - еще один замечательный gem, который так и не был разработан.
Neptune ( https://rubygems.org/gems/neptune ) - DSL, который позволяет разворачивать приложения на поддерживаемых облачных платформах.
Pluto ( https://rubygems.org/gems/pluto ) - gem, который позволяет создавать веб-страницы, используя открытые источники.
Сегодня последний день, когда вы можете бесплатно обновить Windows 7/8/8.1 до Windows 10. С завтрашнего дня бесплатно можно будет обновиться только до Ubuntu.
В мире NodeJS библиотеки двухмесячной давности уже считаются устоявшимися. Еще в этой инфрастуктуре очень тяжело со стандартами. Например, компиляцией ассетов умеет заниматься четыре разных популярных библиотеки: Brunch, Webpack, Grunt, Gulp. Все разные и все популярные. Обязательно нужно разработать пятую, которая будет лучше предыдущих и наконец введет стандарт конфигураций.
Все, что вы боялись спросить о функциональном программировании, но боялись спросить собрано в одном справочнике.
https://github.com/hemanth/functional-programming-jargon
"Плохой программист Джон сделал ошибку в коде, из-за которой каждый пользователь программы был вынужден потратить в среднем 15 минут времени на поиск обхода возникшей проблемы. Пользователей было 10 миллионов. Всего впустую потрачено 150 миллионов минут = 2.5 миллиона часов. Если человек спит 8 часов в сутки, то на сознательную деятельность у него остается 16 часов. То есть Джон уничтожил 156250 человеко-дней ≈ 427.8 человеко-лет. Средний мужчина живет 64 года, значит Джон убил примерно 6 целых 68 сотых человека. Как тебе спится, Джон — серийный программист?"
"-Что там с тикетом, Чарли?
- Пять часов, Турецкий
- Пять часов назад было же два часа."
Подборки различных репозиториев по различным темам гитхаб ведет уже давно на отдельной странице (https://github.com/showcases) и подборки там достаточно качественные, хоть и не сильно часто обновляемые. Значительно бóльшую популярность нашли отдельные репозитории, в которых центром внимания становятся readme.md файлы с кучей ссылок на полезные ресурсы, библиотеки или что-то там еще в контексте тематики репозитория. И, конечно же, есть главный репозиторий, который включает в себя список репозиториев с такими вот подборками, сортированные по темам: https://github.com/sindresorhus/awesome Похоже, именно с этого репозитория нужно начинать изучение новой платформы, языка или технологии. Отдельного упоминания заслуживает секция "Другое" в этом списке. Туда вошло много таких подборок, которые можно изучать часами. Например список различных сервисов, так или иначе с бесплатным доступом для разработчиков: https://github.com/ripienaar/free-for-dev
Что самое интересное в таких подборках, что каждый читатель может предложить как улучшить или дополнить этот список, через обычный пулл реквест. Похоже на сервисы социальных закладок из прошлого десятилетия по типу del.icio.us, только в гите и с публичным обсуждением и на гитхабе.
Никто не знает какая сингулярность нас ждет. Возможно, человечество никогда не придумает исскусственный интеллект, а просто возьмет количеством фонннеймановского кода. Вполне вероятно, что те абстракции, что сейчас не позволяют подняться на следующую ступень программирования и оперировать сложными макро-командами возьмут верх над квантовыми вычислениями и тщетными попытками смоделировать мозг. Сейчас проходит соревнования роботов, в котором роботам-участникам предлагается много чего такого делать, чего ждут все фантасты. И по скромной оценке экспертов, модели роботов на этом конкурсе года имеют интеллект примерно трехлетнего ребёнка. Да-да, вы ничего не перепутали. Трехлетнего. И, конечно же, такое сравнение просто-напросто спекуляция. Они, конечно, делают все действия, на уровне ребенка, но их интеллект не сравним ни с одним живым существом, потому как они не имеют возможности обучаться и адаптироваться. Тем не менее, одно из возможных сингулярностей будет состоять из множества тьюринг-полных конечных автоматов. Хотя, как представить себе саморазвивающийся конечный автомат понятия не имею.
Довольно часто, перед тем, как оформить свой код в commit, приходится на мгновение задуматься и найти самое подходящее имя коммиту. Или же придумать название небольшому проекту на github.
В основном, эти названия подчиняются правилам (https://github.com/erlang/otp/wiki/writing-good-commit-messages). Иногда несут какой-то позитивный посыл.
Реже - негативный.

Слово f#ck: встречается на github у 1291го пользователя в профиле, 1252572 раза в коде, 36586 раз в issues и в названиях и описании 3153 проектов.
На удивление, ref#cktoring не так популярно. Всего 10 issues и 49 упоминаний в коде.
Sh#t встречается в названиях и описании почти 4 с половиной тысяч проектов. 1706311 раз встречается в коде и украшает информацию о 1145 пользователях. Довольно часто присутствует в wiki проектов - 2668 раз.
Более поэтичное bullsh#t встречается в несколько раз реже. 502 тысячи раз в коде, 6404 раз в названиях проектов и у 51 пользователя в описании.
Слово b#tch - не редкость на просторах github.com. Возможно, оно как-то связано с битами, а ch - сокращение от channel. Так или иначе, его вы можете встретить более 500000 раз.
Чаще всего, в топе языков, при поиске этих слов, появляются JavaScript, Java, Python и Ruby. Скорее всего, это свидетельствет о популярности этих языков.
Какова вероятность, что в группе из 23 человек найдутся двое с днями рождения в один и тот же день в году? Интуиция подсказывает, что вероятность будет весьма небольшая. В самом деле, вспомните свою группу из института или класс из школы. Вероятность совпадения дней рождения двух человек с любым днём в году равна 0.27% (1/365). При группе в 23 человека, умножаем эту вероятность на 23 и получаем всего лишь 6.3%. Для 60 человек умножение даст 16,2%.
Такое рассуждение в корне не верно, так как нужно оценивать не общее количество людей, а общее количество пар людей в группе. При группе в 23 человека таких пар будет 253, а в группе из 60 людей пар будет 1770. В итоге для группы из 60 человек такая вероятность будет более 99%, а для группу в 23 человека вероятность будет больше 50%. Сначала такое утверждение звучит невероятно, но если правильно считать все кажется логичным и последовательным. Для этой задачи есть даже специальное название, «Парадокс дней рождения», но строго говоря, парадоксом это является только из-за различия в интуитивном восприятии и результатами математического расчета.
Вместо вывода можно посоветовать проверять гиппотезы, прежде чем брать за основу решение, которое лишь выглядит очевидным, а таковым не является.
Помните тест, в котором нужно было сосчитать количество передач баскетбольного мяча? Если вы не видели, то посмотрите, прежде чем читать дальше.

В 2004 году был сформулирован принцип «ложной слепоты». Этот термин объеденяет в себе несколько разнообразных феноменов нашего восприятия. Обычно выделяют два вида ложной слепоты: слепоту невнимания и слепоту к изменениям. Слепота невнимания (или перцептивная слепота) подразумевает неготовность нашего мозга воспринимать изменения, которые мы не ожидаем увидеть. Как гориллу в ролике, которую уже окрестили «невидимой гориллой» и даже сайт отдельный есть по этому поводу. Еще причиной называют рассеянность, которая вызванная необходимостью полностью сконцентрировать внимание. Очевидно, что на себе вы этот феномен можете почувствовать только если о нем не знаете. И действительно, при повторном эксперименте с другими футболистами и совершенно другой макакой вы ее обязательно заметите, так как ожидаете ее увидеть.

Слепоту к изменениям тоже можно заметить гораздо проще, есть довольно много роликов в интернете на эту тему. Даже BBC снял передачу, посвященную этому феномену. В обычных условиях изменение наблюдаемой картины мгновенно обращает на себя внимание. Однако мы можем не замечать изменения, если они совпадают с коротким прерыванием наблюдаемой картинки. Это может быть кратковременное моргание экрана, монтажный стык видео или короткая помеха. В экспериментах по слепоте к изменениям обнаружилось, что почти 70% испытуемых не замечали подмены главного действующего лица, а изменения менее существенных деталей оставались проигнорированными почти в 100% случаев.

Казалось бы, отвязанный от программирования термин и совершенно не понятно как знание о этой слепоте можно применить. Но можно. Разработчик может быть настолько сосредоточен на решении конкретной задачи, которая полностью захватывает его внимание, что не видит очевидных проблем в соседнем методе или решает задачу каким-то странным образом. Отсюда и возникает требование делать ревью кода, идеи парного программирования и концепция работы по технике помидорок, хотя не все могут четко сформулировать почему эти требования существуют. Еще в команде всегда найдется такой разработчик, который будет неимоверно крут на фоне всех остальных, и его код, как правило, отсматривается сквозь пальцы. И менее опытные разработчики стесняются делать замечания более опытному товарищу. При отсмотре кода своего коллеги внимательно изучайте то, что могло быть пропущено по этому принципу и помните про эффект ложной слепоты.
Многие наверняка слышали про некие «проблемы тысячилетия» и про самую известную проблему, которая называется «P и NP». Наверняка столь популярный успех и узнаваемость этой проблемы как-то связана с тем, что это единственная проблема, после прочтения стати на википедии понятно хотя бы о чем речь.
Если объяснять на пальцах, то бывает два вида задач. Как бы видов задач больше, но интересуют нас сейчас только два.

Первый вид задач -- это те задачи, решить которые можно не угадывая ответ. Например задача «найти ответ выражения 2 + 3» — задача класса «P», ведь не обязательно перебирать все натуральные числа, чтобы найти ответ. Второй вид задач решается только полным перебором или подбором. Строго говоря, существование задач, которые можно решить полным перебором и нельзя решить быстрее еще не доказано. Допустим, знаменитая задача коммивояжера точно относится к классу «NP» и является ярким его представителем. Или задача раскраски планарного графа и раскраской его тремя цветами.

Сложность этой проблемы тысячилетия состоит как раз в том, чтобы найти способ решить задачу класса «NP» быстрее, чем полным перебором. Или же доказать, что это не возможно.
Очень хороший пример использования нейронных сетей. Yahoo выложил в открытый доступ исходный код свей библиотеки для определения контента для взрослых. Да, это классификатор, который определяет порно в картинках, мультиках, скетчах и фотографиях. Входящему изображению присваивается баллы безопасности изображения от 0 до 1. Картинки с рейтингом меньше 0.2 считаются вполне безопасными, а вот 0.8 и выше практически наверняка будут NSFW. Исходный код доступен на гитхабе, а подробнее можно почитать в блоге Yahoo. Интересно как эту библиотеку можно использовать за пределами Yahoo.
Продолжая тему awesome-репозиториев хочется отметить репозиторий с собранием публикаций, статей и книг так или иначе связанный с машинным обучением и нейтронными сетями. Многие из которых нужно прям брать и читать.

https://github.com/terryum/awesome-deep-learning-papers
Вымышленный диалог про невымышленную проблему современного javascript о том, как все устали от джаваскрипта, и о том, что никто не хочет в этом признаваться. Сейчас сделать любое сколь угодно маленькое веб-приложение просто вопиюще требует иметь гору сборщиков, библиотек, компиляторов и интерпретаторов. Иногда по нескольку штук. Более того, даже серверно-ориентированые фреймворки перекладывают заботу о работе с браузерами и с манипуляцией страницами на сторону джаваскрипта и его инфрастуктуры. Существует даже теория, что "какой бы фреймворк или язык вы бы не начали изучать, через пару часов вы будете дебажить джаваскрипт". В общем очень правдивая и очень печальная юмореска.

https://hackernoon.com/how-it-feels-to-learn-javascript-in-2016-d3a717dd577f
Чем клево число Пи? Во-первых и основных это иррациональность и трансцендентность этого числа. Технически это означает, что π нельзя представить никаким другим числом. В том смысле, что его нельзя предствить в виде корня какого-то другого многочлена с целыми коэффициентами и нельзя представить в виде дроби простых чисел (m/n). Число π бесконечно и непериодично в десятичном представлении. А это значит, что теоретически в числе π найдется любая другая подпоследовательность. Нужно только хорошо ее поискать.

А совсем недавно нашли формулу, которая позволяет вычислять любой знак числа пи без вычисления предыдущих, и эта формула относительно проста. И тут понеслось.

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

Конечно же, искать подпоследовательность хотя бы в 50 мегабайт очень долго и тяжело, но вот после того, как найти такую подпоследовательность, этот файл можно выписать себе на листик в виде смещения в π и длинне подпоследовательности. Сжатие в 100%! Никаким «зипам» и «рарам» это и не снилось!

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

Ну ничего, давайте файл разобъем на более мелкие кусочки, скажем в 640 килобайт, а их уже будем прятать в π. Тогда на смещение в 640КиБ нам нужно будет потратить, скажем, 2Киб, и тогда сжатие будет не 100%, а ~99%. Звучит более реалистично и вполне реализуемо. Более того, уже даже файловая система такая есть, основанная на этом незамысловатом принципе. Работает, конечно, медленно, но работает.

https://github.com/philipl/pifs
На нейронных сетях и машинном обучении мир не сходится. Существует множество задач, которые решаются и без нейронных сетей, и в современных реалиях их решают с помощью «искусственного интеллекта» только потому что это модно и трендово. Например, задача понимания естественной речи вполне решаема безо всяких нейронок, а тупо по старинке, с помощью регулярок и алгоритмов. Стенфорд достаточно давно выложил в публичный доступ свою библиотеку по обработке естественной речи (http://stanfordnlp.github.io/CoreNLP/) и какой-то парень из университета Ватерлоо написал приложение на питоне (https://github.com/ayoungprogrammer/nlquery), которое отвечает на вопросы естественного языка. Даже с демо: http://nlquery.ayoungprogrammer.com/. Список того, что умеет приложение не аховое, конечно, но видно, что нейронки нужны далеко не всегда.

В качестве морали скажем, что выбирать инструменты по задачам, а не по популярности. И если бы все так делали, то MEAN.io не существовало бы.
Помню, как играл в детстве в Супер Марио и все в этой игре было прекрасно. Ах, какая была графика, какие звуки, какой геймплей! Позже узнал, что облачка и кусты на фоне — это один и тот же объект, программно покрашенный в разные цвета. Какой это был удар! И когда в мой мир пришли тайлы и спрайты, «Супер Марио» был морально оправдан за такое нечестное издевательство над моим разумом. Десять-пятнадцать лет назад спрайты и тайлы в интернете были нормальным делом, и каждый второй сайт считал просто обязательным найти такой узор, которым можно замостить фон и чтобы паттерн картинки не угадывался. Это было сделать довольно сложно, особенно если фоновый спрайт был каким-то осознанным, допустим бело-голубые облака или селено-салатовая трава. Как только вы замечаете какую-то особенность в фоне, например маленький сучок в древесном волокне, который повторяется через одинаковые интервалы, то сразу теряется вся иллюзия натуральной случайности.

Семь лет назад появилось «правило цикады» (https://habrahabr.ru/post/117160/) для формирования бесшовных заливок и это было гениально. Это было невероятно просто, решение лежало на поверхности и от этого оно становилось еще гениальней — природа и математика подсказали решение рисования заливок на веб-страничках!

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

https://github.com/mxgmn/WaveFunctionCollapse