Обложка канала

Sea++. Страница 2

Канал об интересных материалах из мира C/C++, Python, Go, Linux и не только. Новости, заметки, полезные советы и многое другое.

  • Sea++

    Pythonic C++

     std::string s;
    s = 1;

    — Вау, C++, оказывается, как Python! Можно присваивать строке целые числа, — подумаете вы, увидев, что данный фрагмент кода компилируется без ошибок. И... Будете неправы.

    Все дело в объявлении оператора присваивания:
     string& string::operator=(char ch);

    которое приводит 1 в char.

    Так что никакой магии нет. И данный момент заставит вас подумать, почему же в код закралась ошибка.

    А если вы все-таки хотите подобное поведение как в Python, взгляните в сторону std::any https://en.cppreference.com/w/cpp/utility/any

    English version: https://telegra.ph/Pythonic-C-03-18
  • Sea++

    Мечтаешь стать хакером, но вузы такому не учат?

    Пройди бесплатно 5-дневный интенсив, напиши свой первый вирус на самом востребованном языке Java! А еще у нас есть куча призов для участников, главный из которых – сертификат на 30 000 рублей и бюджетное поступление на курс по Java-программированию с последующей стажировкой и трудоустройством.

    Дерзай! 👉 https://goo.gl/dszdS1
  • Sea++

    RapidJSON

    English version: https://telegra.ph/RapidJSON-10-15

    Если вам в своих программах на C++ нужна библиотека для работы с JSON, рекомендую попробовать RapidJSON: https://github.com/Tencent/rapidjson

    Эта header-only библиотека, пожалуй, одна из самых быстрых библиотек для сериализации/десериализации JSON.

    Поддерживает SAX и DOM парсинг, SSE, Unicode и in-place парсинг. Лицензия MIT.
  • Реклама

  • Sea++

    ​​Зачем тратить время на обработку строк, анализ метрик и формирования всего в единый отчет?

    В век нейросетей пора прекратить вручную перебирать тысячи ячеек в Excel и копировать формулы. Пройди курс «Python для автоматизации аналитики» и узнай все инструменты для автоматизации процессов, чтобы делать работу в считанные минуты.

    Первым 20 — скидка 25%
    Присоединяйся 👉 https://goo.gl/9WbwxP
  • Sea++

    Технология Hibernate в Яндекс.Браузере

    English version: https://telegra.ph/Hibernate-Technology-in-YandexBrowser-09-26

    Было ли у вас такое, что вы работаете в браузере, открываете кучу вкладок, ваш компьютер начинает тормозить, при переключении между вкладками вы видите, что страницы перезагружаются? Многие согласятся, что Chromium-based браузеры страдают этим.

    Но позвольте представить вашему вниманию доклад от одной из наших групп по разработке Яндекс.Браузера, а точнее группы разработки рендеринг-движка: https://habr.com/company/yandex/blog/423507/

    Ребята создали технологию Hibernate, которая при нехватке памяти, выгружает неиспользуемые веб-страницы на диск в зашифрованном виде. Причем полностью сохраняется состояние Blink и V8!
    На самом деле, они написали Clang-плагин, который парсит исходники V8 и Blink и генерирует код сериализации и десериализации.

    Самое интересное, что все это происходило буквально на моих глазах (сижу рядом с одним из разработчиков Hibernate) и наслышан тем, что создатели V8 делают все что только можно в угоду производительности. Да уж, смотреть код V8 то еще удовольствие.

    Более подробно можно прочитать в статье.
  • Sea++

    ​​Хотите стать профессиональным аналитиком и научиться анализировать данные?

    У Skillfactory есть курс “Python для анализа данных”.
    Преподаватель курса: Программист-аналитик Яндекс.Маркета Константин Башевой.

    Вы научитесь:

    1. Уверенно использовать Python и Pandas для боевых задач аналитики
    2. Объединять данные из разных источников, работать с большими файлами (30 Гб), проектировать системы сквозной аналитики для реальных проектов
    3. Парсить веб-страницы, работать с открытыми API, подробно изучите работу с API Яндекса и Google
    4. Автоматически обновлять отчеты. Сделаете Telegram бота, который будет следить за работоспособностью системы и сообщать о проблемах обновления данных.
    5. Пройдете финальный экзамен и получите диплом.

    Получить полную программу курса можно по ссылке → https://bit.ly/2xbHrzq
  • Sea++

    Cracking the Coding Interview

    English version: https://telegra.ph/Cracking-the-Coding-Interview-09-13

    Если вы задумываетесь о прохождении собеседования в такие компании как Yandex, Facebook, Google, Apple, Microsoft, Amazon и другие, где вам обязательно будут давать задачки на алгоритмы и структуры данных, то не поленитесь и подготовьтесь как следует.

    Начать лучше всего, на мой взгляд, с замечательной книжки от бывшей разработчицы Google Гейл Лакманн Макдауэлл (Gayle Laakmann McDowell) Cracking the Coding Interview http://www.crackingthecodinginterview.com
    Книга пережила уже 6 изданий и является классикой для подготовки к собеседованиям.

    Далее от себя очень сильно рекомендую пройтись по не менее знаменитой The Algorithm Design Manual от Стивена Скиены (Steven Skiena) https://www.springer.com/gb/book/9781848000698

    Читать Кормена при подготовке, конечно, можно, но там все написано слишком академическим языком.
  • Sea++

    Browsh

    English version: https://telegra.ph/Browsh-09-10

    Нашел интересную штуку: текстовый браузер, который может работать в терминале и поддерживает HTML5, CSS3, JS, видео и WebGL.

    https://www.brow.sh все это умеет делать. Фокус в том, что запускается headless Firefox, который и рендерит все html элементы. Далее через экстеншен идет перехват экрана и отправка в Browsh. Подробнее об устройстве можно прочитать тут: https://www.brow.sh/docs/introduction/

    Ну, и в качестве демонстрации можно просто зайти по ssh:
    ssh brow.sh
  • Sea++

    Go 2 Draft

    English version: https://telegra.ph/Go-2-Draft-08-29

    Вчера Расс Кокс (Russ Cox) выпустил короткую видео заметку о Go 2: https://blog.golang.org/go2draft

    Слухи были верны: в Go 2 будет улучшенная обработка ошибок и дженерики.

    Вот пример обработки ошибок с использованием ключевого слова check:
     func CopyFile(src, dst string) error {
    handle err {
    return fmt.Errorf("copy %s %s: %v",
    src, dst, err)
    }

    r := check os.Open(src)
    defer r.Close()

    w := check os.Create(dst)
    handle err {
    w.Close()
    os.Remove(dst) // (only if a check fails)
    }

    check io.Copy(w, r)
    check w.Close()
    return nil
    }

    А вот пример дженериков с использованием контрактов:
     contract Addable(t T) {
    t + t
    }

    func Sum(type T Addable)(x []T) T {
    var total T
    for _, v := range x {
    total += v
    }
    return total
    }

    Оригинальный черновик можно прочитать тут: https://go.googlesource.com/proposal/+/master/design/go2draft.md
  • Sea++

    Virtual Method Anchor

    English version: https://telegra.ph/Virtual-Method-Anchor-08-28

    В стандартах кодирования LLVM есть пункт Provide a Virtual Method Anchor for Classes in Headers: https://llvm.org/docs/CodingStandards.html#provide-a-virtual-method-anchor-for-classes-in-headers

    Там говорится, что если класс объявлен в заголовочном файле и имеет таблицу виртуальных функций, то разработчик должен предоставить хотя бы один out-of-line метод в соответствующем .cpp файле. Иначе компилятор будет копировать таблицу виртуальных функций и RTTI информацию в каждый объектный файл.

    Например, такой код будет выдавать предупреждение с использованием флага -Wweak-vtables:

     // A.h
    class A {
    public:
    virtual ~A() {}
    };

    warning: A has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit

    и даже такой:
     // A.h
    class A {
    public:
    virtual ~A() = default;
    };

    Чтобы избежать этого предупреждения, нужно перенести деструктор в .cpp файл:
     // A.h
    class A {
    public:
    virtual ~A();
    };

    // A.cpp
    A::~A() = default;

    "Да кому это нужно", — скажете вы? "Ведь все равно линкер объединит все таблицы виртуальных функций в одну".
    Да, это правда, и линкер на самом деле на это способен. Но не забывайте, что это увеличивает время линковки. Например, в таком проекте как Chromium, где десятки тысяч классов, данная оптимизация может сэкономить несколько минут (!) линковки и она обязательна.

    Кстати, можно просто в каждом подобном классе делать специальный anchor-метод, как в LLVM, но так придется больше писать:
    https://github.com/llvm-mirror/llvm/blob/f17bde5ddcb1947199f44b44af6107f9209dbdd4/include/llvm/ExecutionEngine/ObjectCache.h#L24

    https://github.com/llvm-mirror/llvm/blob/f17bde5ddcb1947199f44b44af6107f9209dbdd4/lib/ExecutionEngine/ExecutionEngine.cpp#L65
  • Sea++

    Профессия web-разработчика одна из самых высокооплачиваемых и востребованных на рынке IT-специалистов.
    Существует огромное количество сервисов для web-разработки, однако именно возможности Python позволяют решить 98% всех задач максимально просто.

    Ребята из SkillFactory подготовили онлайн-курс: “Python для web-разработчиков” → https://bit.ly/2vXKwTV

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

    Подробности и регистрация по ссылке → https://bit.ly/2vXKwTV
  • Sea++

    Книга по x86 ассемблеру

    English version: https://telegra.ph/x86-Assembly-book-08-09

    Многие говорят, что сейчас знание ассемблера не нужно, что это прошлый век и все такое. Однако когда такие "советчики" встречаются с багом компилятора или с непонятным core dump'ом они почему-то сразу смолкают.

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

    Неплохое введение по ассемблеру можно найти в книге А. Столярова "Программирование на языке ассемблера NASM" http://www.stolyarov.info/books/asm_unix
    Книга бесплатная. Рекомендую, если вы совсем "чайник".
  • Sea++

    Live Coding с Common Lisp

    English version: https://telegra.ph/Live-Coding-with-Common-Lisp-07-13

    Парк Сун Мин (박성민) выкладывает на своем Youtube-канале красивые видео своего кодирования. При помощи звукового пакета SuperCollider, Cocoa, OpenGL и обильного количества Common Lisp кода он создает впечатляющие аудио-визуальные представления. Пример видео: https://www.youtube.com/watch?v=xzTH_ZqaFKI
    А вот как это смотрится в одном из арт-кафе: https://www.youtube.com/watch?v=EkYUU0UoB_0

    На Youtube канале можно найти и другие работы. Вот уж в самом деле creative programming.
  • Sea++

    Самая сложная когда-либо написанная программа

    English version: https://telegra.ph/The-most-sophisticated-program-ever-written-07-05

    Недавно нашел описание червя Stuxnet, который использовал уязвимости Windows, чтобы незаметно скопировать себя с флэшки так, что ни одна антивирусная программа ничего не заподозрила, затем, использовав украденные сертификаты Realtek и JMicron, копировал себя на другие флэш используя ложный драйвер, распространял себя по всей локальной сети, затем искал ПО от Siemens для контроля над промышленными центрифугами, копировал себя в контроллер и незаметно для специалистов выставлял неправильную скорость вращения центрифуг, что приводило к их порче, когда они обогащали уран.
    Поучительная история.
    https://habr.com/post/358930/
    https://www.symantec.com/content/en/us/enterprise/media/security_response/whitepapers/w32_stuxnet_dossier.pdf
  • Sea++

    Алан Кей и STEPS

    English version: https://telegra.ph/Alan-Kay-and-STEPS-07-04

    Алан Кей, автор SmallTalk, создает экспериментальную систему STEPS (рекурсивный акроним STEPS Toward Expressive Programming Systems), которая способна заменить ОС. Кодовое название системы – Frank. Причем, это не просто ядро операционной системы вроде Minix, а полноценно функционирующая среда с графической оболочкой, просмотром и редактированием документов и т.д.

    Принципиально, что весь исходный код должен уложиться в 20'000 строк кода. Для сравнения Windows NT 3.1 занимал 4-5 миллионов строк кода, ядро Linux 2.6.0 – 5.2 миллиона. Все это примерно 18 тысяч книг. Понятно, что никто в принципе не способен не то чтобы осознать, а хотя бы все прочитать. Но если уместить весь исходный код сложной системы в одной книге, то все становится сильно проще.

    Как же все уместить в двадцать тысяч строк? Ответ: метапрограммирование и DSL (предметно-ориентированные языки). С помощью объектно-ориентированного языка OMeta, языка исполняемой математики Nile и низкоуровневого языка Nothing и достигается краткость кода. К примеру, реализация TCP/IP занимает всего 160 строк.

    Интересная концепция: довести модульность до абсолютного уровня. Жаль, что это пока исследовательский проект.

    http://www.vpri.org/pdf/tr2011004_steps11.pdf
  • Реклама

  • Sea++

    MongoDB и комментарии

    English version: https://telegra.ph/MongoDB-and-comments-06-05

    Если кому интересно, как сделать комментарии к блог постам на MongoDB, можете посмотреть это на официальном сайте:
    https://docs.mongodb.com/ecosystem/use-cases/storing-comments/

    Вообще статья показывает, как при помощи документной модели построить различные системы, где раньше вовсю использовали (и сейчас используют) реляционную модель.
    Если кратко: нет ничего невозможного, но нужно помнить про ограничения конкретной СУБД.
  • Sea++

    Google Abseil

    English version: https://telegra.ph/Google-Abseil-05-23

    Недавно Google выпустила свою кроссплатформенную C++ Open Source библиотеку Abseil https://abseil.io/. Эта библиотека широко используется внутри самой компании.

    В ней собраны всевозможные utility-классы такие как:
    • контейнерные версии алгоритмов (c_sort(container) вместо sort(container.begin(), container.end()))
    • несколько своих собственных контейнеров, таких как fixed_array и inlined_vector
    • стек трейсы
    uint128
    • огромное количество функций для работы со строками (StrCat, StrJoin, StrSplit)
    • высокопроизводительные примитивы синхронизации
    • функции для работы со временем

    и многое другое.

    Также в рамках этого проекта создан блог C++ Tips of the Week https://abseil.io/tips/, рассказывающий о C++ техниках, которые активно применяются в Google.
  • Sea++

    Еще одна небольшая подборка занимательных каналов о технологиях и программировании.

    @theaftertimes - Несерьезный дайджест IT. Ежедневно. Цитаты, паста, картинки.

    @w20to - Настоящее и будущее технологий. Future, Science, Tech, Trands, Robotics, AI, IoT, VR, and more.

    @dncuug - Канал посвящён вопросам разработки под .NET Core: новые фичи C#, .NET разработка под macOS X и Linux, микросервисы и HighLoad. Вот это вот все и даже больше.

    @ITBroadcast - Канал для тех, кто хочет быть в теме и познавать новое в области IT. Входим в Top 1 каналов Telegram о технологиях.

    @SysadminNotes - Заметки практикующего сисадмина о Linux и администрировании серверов.