Обновить
89
0
Сергей Шашков @ShashkovS

Менеджер продукта, методист, разработчик

Отправить сообщение

(Простите за токсичный комментарий, не удержался)

Так, этот — js'ник, роботам такие не нужны, его забирайте первым!

Ну-ка, тест на программиста робота: чему равно 0.1 + 0.2?

Код внутри спойлера не работает.
Снаружи работает, внутри:

Заголовок спойлера

Код: `code` ``` много кода ```

<spoiler title="Заголовок спойлера">
Код: `code`
</spoiler>

Когда знаешь, что искать, то вполне сносно.

Вот полный список

$mol, nix, .NET, 1С, 1С-Битрикс, 3D-принтер, API, AR и V, ASP, Accessibility, Action Script, Adobe Flas, Agile, Ajax, Amazon Web Services, Angular, Apache, Apache Flex, Assembler, Asterisk, Atlassian, Big Data, Brainfuck, C, C#, C++, CAD/CAM, CGI (графика), CMS, CRM-системы, CSS, CTF, CakePHP, Canvas, Cisco, Clojure, Cobol, Cocoa, CodeIgniter, CoffeeScript, Creative Commons, Cubrid, D, DIY или Сделай са, DNS, Dart, Data Engineering, Data Mining, Delphi, Derby.js, DevOps, Django, Doctrine ORM, Drupal, ECM/СЭД, ERP-системы, Eclipse, Elixir/Phoenix, Elm, Emacs, Email-маркетинг, Ember.js, Erlang/OTP, F#, FPGA, Facebook API, Fidonet, Firebird/Interbase, Firefo, Flask, Flutter, Forth, Fortran, GPGPU, GTD, GTK+, Git, GitHub, Go, Godot, Google API, Google App Engine, Google Chrom, Google Cloud Platform, Google Cloud Vision API, Google Web Toolkit, Gradle, GreaseMonkey, Groovy & Grails, Growth Hacking, HTML, Hab, Hadoop, Haskell, Haxe, Help Desk Software, I2P, IIS, INFOLUST, IPFS, IPTV, IPv6, IT-инфраструктура, IT-компани, IT-стандарты, IT-эмиграци, Internet Explore, Java, JavaScript, Joomla, Julia, Kohana, Kotlin, Kubernetes, LaTeX, LabVIEW, Laravel, Lisp, LiveStree, Lua, MODX, Magento, Maps API, Matlab, Mercurial, Mesh-сети, Meteor.JS, Microsoft Access, Microsoft Azure, Microsoft Edg, Microsoft SQL Server, MongoDB, Mono и Moonlight, MooTools, MySQL, Natural Language Processing, Nginx, NoSQL, Node.JS, Objective C, Open source, OpenStreetMap, Openshift, Oper, Oracle, PD, PHP, Perl, Phalcon, PostgreSQL, PowerShell, Processing, Prolog, Puppet, Python, Qt, R, ReactJS, Ruby, Ruby on Rails, Rust, SAN, SCADA, SQL, SQLite, SaaS / S+S, Safar, Scala, Serverless, Service Desk, SharePoint, Silverlight, Small Basic, Smalltalk, Solidity, Sphinx, SvelteJS, Swift, Symfony, TDD, TYPO3, Tarantool, TensorFlow, Twisted, Twitter API, TypeScript, UEFI, UML Design, Unity, Unreal Engine, Usability, VIM, Visual Basic for Applications, Visual Studio, VueJS, WebAssembly, WebGL, WordPress, XML, XSLT, Xamarin, Xcode, Yii, Zend Framework, jQuery, Автомобильные гаджет, Администрирование баз данных, Администрирование доменных имен, Алгоритмы, Анализ и проектирование систем, Аналитика мобильных приложений, Антивирусная защита, Астрономи, Беспроводные технологии, Библиотека ExtJS/Sencha, Бизнес-модели, Биллинговые системы, Биографии гико, Биологи, Биотехнологи, Браузер, Брендин, Будущее здес, ВКонтакте API, Веб-аналитика, Веб-дизайн, Венчурные инвестици, Верстка писем, Видеокарт, Видеоконференцсвяз, Видеотехник, Визуализация данных, Визуальное программирование, Виртуализация, Восстановление данных, Высокая производительность, Гаджет, Геоинформационные сервисы, Глобальные системы позиционирования, Голосовые интерфейсы, Графические оболочки, Графический дизайн, Демосцен, Децентрализованные сети, Дизай, Дизайн игр, Дизайн мобильных приложений, Законодательство в I, Занимательные задачк, Зву, Здоровь, Игры и игровые консол, Изучение языко, Инженерные системы, Интервь, Интернет веще, Интернет-маркетинг, Интерфейсы, Инфографик, Информационная безопасность, Искусственный интеллек, Исследования и прогнозы в IT, История I, Карьера в IT-индустри, Квантовые технологи, Киберпан, Киберспор, Клиентская оптимизация, Кодобре, Компиляторы, Компьютерная анимация, Компьютерное желез, Контекстная реклама, Контент-маркетинг, Конференци, Копирай, Космонавтик, Краудсорсин, Криптовалют, Криптография, Лазер, Лайфхаки для гико, Логические игр, Локализация продуктов, Математика, Машинное обучение, Медгаджет, Медийная реклама, Мессенджеры, Микросервисы, Микроформаты, Моз, Монетизация IT-систем, Монетизация веб-сервисов, Монетизация игр, Монетизация мобильных приложений, Мониторы и Т, Мультикоптер, Накопител, Нанотехнологи, Настольные компьютер, Настройка Linux, Научная фантастик, Научно-популярно, Ненормальное программирование, Носимая электроник, Ноутбук, ООП, Облачные вычисления, Облачные сервисы, Оболочки, Обработка изображений, Образование за рубежо, Открытые данные, Отладка, Офисы IT-компани, Параллельное программирование, Патентование, Перифери, Планшет, Платежные системы, Повышение конверсии, Подготовка технической документации, Поисковая оптимизация, Поисковые технологии, Презентаци, Программирование, Программирование микроконтроллеров, Продвижение игр, Проектирование и рефакторинг, Производство и разработка электроники, Промышленное программирование, Прототипирование, Профессиональная литература, Процессор, Работа с 3D-графикой, Работа с векторной графикой, Работа с видео, Работа с иконками, Развитие стартап, Разработка веб-сайтов, Разработка для Office 365, Разработка для интернета вещей, Разработка игр, Разработка мобильных приложений, Разработка на Raspberry Pi, Разработка под AR и VR, Разработка под Android, Разработка под Arduino, Разработка под Bada, Разработка под Java ME, Разработка под Linux, Разработка под MacOS, Разработка под Sailfish OS, Разработка под Tizen, Разработка под Windows, Разработка под Windows Phone, Разработка под e-commerce, Разработка под iOS, Разработка робототехники, Разработка систем связи, Распределённые системы, Расширения для браузеро, Реверс-инжиниринг, Регулярные выражения, Резервное копирование, Робототехник, Семантика, Серверная оптимизация, Серверное администрирование, Сетевое оборудовани, Сетевые технологии, Сжатие данных, Системное администрирование, Системное программирование, Системы сборки, Системы управления версиями, Смартфон, Совершенный код, Сотовая связ, Соф, Социальные сети и сообществ, Спам и антиспа, Спортивное программирование, Стандарты связи, Старое желез, Статистика в I, Суперкомпьютер, Схемотехника, Телемедицин, Терминология I, Тестирование IT-систем, Тестирование веб-сервисов, Тестирование игр, Тестирование мобильных приложений, Типографика, Транспор, Удалённая работ, Умный до, Управление e-commerce, Управление медиа, Управление персоналом, Управление продажами, Управление продуктом, Управление проектами, Управление разработкой, Управление сообществом, Урбаниз, Учебный процесс в I, Физик, Финансы в I, Фототехник, Фрилан, Функциональное программирование, Хакатон, Хими, Хостин, Хранение данных, Хранилища данных, Читальный за, Экологи, Электроника для начинающи, Энергия и элементы питани, Яндекс API

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

А, ну и конкретно про 3.14. Для вычисления угла используется atan2, а для приближения справа Math.atan2(0, -1) = 3.1415...

Там есть вариант, когда оно играет в змейку вообще без промежуточного слоя: 4 входных и 3 выходных, то есть всё управление — это 15 весов.

Для змейки всегда есть положение «вперёд». Во входе «яблоко» угол от положения «вперёд» в радианах.

У меня вот есть такая интерактивная иллюстрация работы ма-а-а-аленькой сеточки, которая играет в змейку: https://shashkovs.ru/ai/

ReLU + чем толще линия — тем больше слагаемое
ReLU + чем толще линия — тем больше слагаемое

А вот вы попробуйте открыть в какой-нибудь программе текстовый файлик на пару ГБ. Тут же окажется, что вообще редкая программа это может... А Far — может :)

Размер бинаря же :)

"Лучше" в плане меньшего веса бинарника

Отличная статья, спасибо! Из нового узнал только про requestIdleCallback, но читалось легко (только «обещание» вместо «промиса» немного резало глаз).

Я бы ещё добавил про то, когда начинает исполняться код из промиса. В JS это совсем не так, как, скажем, в Python. В JS функция, переданная промису, начинает исполняться немедленно, без попадания в список таксов или микротасков. В отличие от кода в then, который выполнится в микротаксе даже в том случае, если код внутри промиса зарезолвится сразу, синхронно.

function foo() {
  console.log('before promise');
  const p = new Promise((resolve, reject) => {
    console.log('inside promise');
    resolve(3);
  });
  p.then((value) => console.log('then', value));
  console.log('after promise');
}
foo();
// before promise
// inside promise
// after promise
// then 3

ИМХО, самый главный совет — в любой непонятной ситуации см. сюда: https://github.com/k88hudson/git-flight-rules/blob/master/README_ru.md

Если подробно, то я для изучения гита рекомендую такой «рецепт»:

  1. Сначала потратить час и пролистать первые три главы gitbook: https://git-scm.com/book/ru/v2. Этот час окупится, так как будет понимание, что же происходит.

  2. Использовать git для любых своих проектов и аккуратно коммитить изменения (объединяя их по сути).

  3. В любой непонятной ситуации смотреть рецепт в git flight rules: https://github.com/k88hudson/git-flight-rules/blob/master/README_ru.md

Python c PyPi ещё, терпимо: в типичном среднем проекте 20-60 зависимостей. А вот экосистема javascript — это что-то... Смотрю наши проекты: приложение на vuejs — 3220 уникальных пакетов-версий, на реакте — 6386, бек на ноде — жалкие 772. Понятно, что с такими числами хотя бы минимально прикинуть, что за проекты ты используешь, нет никакой реальной возможности.

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

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

У меня есть статья https://habr.com/ru/post/349860/ с миллионом просмотров и двумя тысячами закладок.
В новом редакторе я бы даже не пытался её выложить на хабр.
Я ещё с той версией ну просто задолбался редактировать вёрстку переносов строк, в такой большой статье это было ужасное мучение.

Статью писал сразу в html в WebStorm'е: там и горячие клавиши, и мгновенное обновление в соседнем окне. И замены регулярками (оформление отдельных деталей я несколько раз переделывал). Пустые строки бесили неимоверно, в остальном жить можно.

Сейчас открыл новый редактор — для меня это адок, я в нём статьи писать не буду. Хорошо, что старый работает.

PS. Для меня было бы идеально, если был бы формат «честный html с ограничениями» — можно использовать подмножество html (описанное в доках), добавлять некоторое количество стилей (описанное в доках), но никакой другой стилевой доработки не производится (стандартные стили — ОК). Без смеси html и маркдауна, с которой приходится всё время бороться.

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

Не могу в полной мере согласиться с «с архитектурой что-то не то».

Давайте пример. Вот есть, скажем, карты. Давайте не будем резать, путь будет первый сервис.
А есть такси — второй.

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

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

  • аналитика — новая фича легко может требовать новой аналитики

  • балансер — новая фича может добавлять хитрой асимметричной нагрузки

  • биллинг — хитрости с оплатой — легко

  • helpdesk — ну, хз. Фичи для поддержки где живут? Добавим пока сюда

  • карты — начинали с карт

  • мобилка — поменял карту — поменяй мобилку

  • такси — тоже с них начинали

Ну, 10 не натянулось, но 7 можно придумать.

По поему опыту работы в банке (в котором огромная куча изолированных систем) фича может легко затрагивать доработками 5-6 систем.

Читаю, и сразу на будущее хочется прикрутить «Graceful Degradation» — возможность контролируемо срезать нагрузку. В духе «упёрлись в базу» — сразу отключили «Воронеж» (в смысле самый неэффективный по выручке на один запрос регион/ресторан+источник (источник — мобилка или сайт). Потом — следующий, и так пока поднимется.

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

Иногда хочется сортировать данные ещё быстрее, и XXX придумал, как это сделать. Однако с тех пор появились жёсткие диски, и этот алгоритм стал никому не нужен. Однако он настолько красив, что я его сейчас расскажу.

И дальше страниц 10-20 жёстких тонкостей.

Да! И теперь для веб-разработчиков safari — это IE6 нового временим со своими плюхами. Только в отличие от всего IE работу в safari точно нужно поддерживать.

Есть ещё адок с полями для ввода номеров телефонов. Самая жесть — захардкодить +7 в начале, после чего оставлять ровно 10 символов из того, что ты вкопипастил.
Так как номера у меня везде хранятся с префиксом +7, то обязательно обрезаются последние цифры. А если ты копируешь номер из условного телеграма, то там ещё будут и пробелы, поэтому весь хвост номера обрежется.

Ещё лютое — требование к паролю, когда одновременно
а) нужно, чтобы в пароле была и маленькая буква, и большая, и цифры, и спецсимвол;
б) нужно, чтобы длина пароля была строго до 16 символов.
А-а-а-а, мой длинючий пароль из 20 символов не подходит, я должен его отрезать до 15, добавить в конец условный восклицательный знак, а потом это запомнить! (знаю про парольные менеджеры, но пароли банков в них не храню).

Информация

В рейтинге
Не участвует
Откуда
Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Бэкенд разработчик, Менеджер продукта
Ведущий
Python
Управление проектами
Алгоритмы и структуры данных
Asyncio