Что такое шапка файла
Все файлы на диске хранятся в виде двоичного (бинарного) кода. Последовательность цифр 1 и 0 определяет содержимое файла. В одном случае эти цифры могут составлять простой текст, в результате чего мы видим обычные текстовые файлы. В другом - это последовательность байт, которая несет самую разную информацию, например: аудио, видео, картинки или закодированный текст. Откройте в текстовом редакторе файлы .TXT и .EXE и вы почувствуете разницу.
В данной статье рассказано каким еще способом (кроме непосредственно расширения файла) можно идентифицировать формат двоичного файла, который не является обычным текстовым. Таких файлов большинство. Именно в них часто есть заголовок файла - это первые несколько байт в определенной последовательности. Часть заголовка может быть одинакова у файлов с одинаковым расширением. Эта часть отвечает за формат файла, для удобства назовем ее «дескриптор заголовка файла» (description с англ. - описание).
Таким образом, если необходимо более точно идентифицировать формат файла или файл переименован и его истинное расширение неизвестно, то узнать что это за файл можно с помощью дескриптора заголовка файла. У нас на сайте дескрипторы представлены в трех видах: HEX, ASCII и ASCII (расширенный). Опишем преимущества каждого представления.
HEX и ASCII. Чтобы определить дескриптор заголовка файла и, соответственно, формат файла, необходима программа, которая представляет файл в виде HEX (шестнадцатеричного кода). Это может быть любой HEX-редактор. Но лучше всего для наших целей подойдет программа MiniDumper (20 Кб).
Скачиваем программу, распаковываем ее, открываем. Далее нажимаем кнопку «Select file…», выбираем файл и видим следующее:
Берем первые 2-3 блока из левой колонки (HEX) или первые символы (точки не учитываем) из правой колонки (ASCII), как показано на рисунке; вводим в соответствующее поле расширенного поиска и получаем результат:
Если расширений найдено много, то можно увеличивать количество блоков до достижения однозначного результата. И наоборот, если Вы ничего не нашли, то следует уменьшить количество блоков.
ASCII (расширенный). ASCII с расширенной таблицей символов - кириллицей и специальными символами. Этот вариант специально создан для ленивых: просто откройте файл с помощью блокнота и ищите первые от начала значащие символы. Например:
Далее, вставляем эти символы в соответствующее поле расширенного поиска и получаем результат:
Обращаем ваше внимание, что наиболее точным и продуктивным из всех трех вариантов будет поиск по HEX-декскрипторам, т.к. некоторые последовательности байт невозможно перевести в корректный ASCII-код и HEX-значения мы берем точно из начала файла.
По мере того, как программы становятся больше (и используют больше файлов), становится всё более утомительным давать предварительные объявления каждой функции, которую вы хотите использовать, и которая определена в другом файле. Было бы неплохо, если бы вы могли поместить все свои предварительные объявления в одно место, а затем импортировать их, когда они вам понадобятся?
Исходные файлы кода C++ (с расширением .cpp ) – это не единственные файлы, которые обычно встречаются в программах на C++. Другой тип файлов – это заголовочный файл (иногда просто заголовок). Заголовочные файлы обычно имеют расширение .h , но иногда вы можете встретить их с расширением .hpp или вообще без расширения. Основная цель заголовочного файла – распространять объявления в исходные файлы кода.
Ключевой момент
Заголовочные файлы позволяют нам размещать объявления в одном месте, а затем импортировать их туда, где они нам нужны. Это может сэкономить много времени при наборе текста в проектах из нескольких файлов.
Использование заголовочных файлов стандартной библиотеки
Рассмотрим следующую программу:
Эта программа печатает « Hello, world! » в консоль с помощью std::cout . Однако эта программа никогда не предоставляла определение или объявление для std::cout , поэтому как компилятор узнает, что такое std::cout ?
Ключевой момент
Когда дело доходит до функций и переменных, стоит помнить, что заголовочные файлы обычно содержат только объявления функций и переменных, а не их определения (в противном случае может произойти нарушение правила одного определения). std::cout объявлен в заголовке iostream, но определен как часть стандартной библиотеки C++, которая автоматически подключается к вашей программе на этапе линкера.
Рисунок 1 – Диаграмма процесса сборки
Лучшая практика
Заголовочные файлы обычно не должны содержать определений функций и переменных, чтобы не нарушать правило одного определения. Исключение сделано для символьных констант (которые мы рассмотрим в уроке «4.14 – const, constexpr и символьные константы»).
Написание собственных заголовочных файлов
А теперь вернемся к примеру, который мы обсуждали в предыдущем уроке. Когда мы закончили, у нас было два файла, add.cpp и main.cpp , которые выглядели так:
(Если вы воссоздаете этот пример с нуля, не забудьте добавить add.cpp в свой проект, чтобы он компилировался).
В этом примере мы использовали предварительное объявление, чтобы при компиляции main.cpp компилятор знал, что такое идентификатор add . Как упоминалось ранее, добавление предварительных объявлений для каждой функции, которую вы хотите использовать, и которая находится в другом файле, вручную может быстро стать утомительным.
Давайте напишем заголовочный файл, чтобы избавиться от этого бремени. Написать заголовочный файл на удивление легко, поскольку файлы заголовков состоят только из двух частей:
- защита заголовка, о которой мы поговорим более подробно в следующем уроке («2.11 – Защита заголовков»);
- фактическое содержимое файла заголовка, которое должно быть предварительными объявлениями для всех идентификаторов, которые мы хотим, чтобы другие файлы могли видеть.
Добавление заголовочного файла в проект работает аналогично добавлению исходного файла (рассматривается в уроке «2.7 – Программы с несколькими файлами исходного кода»). Если вы используете IDE, выполните такие же действия и при появлении запроса выберите Файл заголовка (или C/C++ header) вместо Файла С++ (или C/C++ source). Если вы используете командную строку, просто создайте новый файл в своем любимом редакторе.
Лучшая практика
При именовании файлов заголовков используйте расширение .h .
Заголовочные файлы часто идут в паре с файлами исходного кода, при этом заголовочный файл предоставляет предварительные объявления для соответствующего исходного файла. Поскольку наш заголовочный файл будет содержать предварительное объявление для функций, определенных в add.cpp , мы назовем наш новый заголовочный файл add.h .
Лучшая практика
Если заголовочный файл идет в паре с файлом исходного кода (например, add.h с add.cpp ), они оба должны иметь одинаковое базовое имя ( add ).
Вот наш завершенный заголовочный файл:
Следовательно, наша программа будет правильно компилироваться и компоноваться.
Рисунок 2 – Диаграмма процесса сборки
Включение заголовочного файла в соответствующий исходный файл
Позже вы увидите, что большинство исходных файлов включают свой соответствующий заголовочный файл, даже если он им не нужен. Зачем?
Включение заголовочного файла в исходный файл увеличивает прямую совместимость. Очень вероятно, что в будущем вы добавите больше функций или измените существующие таким образом, что им нужно будет знать о существовании друг друга.
Когда мы углубимся в изучение стандартной библиотеки, вы будете включать множество заголовочных файлов библиотек. Если вам потребовалось включение в заголовочном файле, оно, вероятно, понадобилось вам для объявления функции. Это означает, что вам также потребуется такое же включение в исходный файл. Это приведет к тому, что в исходном файле у вас будет копия включений заголовочного файла. Включив заголовочный файл в исходный файл, исходный файл получит доступ ко всему, к чему имел доступ заголовочный файл.
При разработке библиотеки включение заголовочного файла в исходный файл может даже помочь в раннем обнаружении ошибок.
Лучшая практика
При написании исходного файла включите в него соответствующий заголовочный файл (если он существует), даже если он вам пока не нужен.
Поиск и устранение проблем
Если вы получаете ошибку компилятора, указывающую, что add.h не найден, убедитесь, что файл действительно называется add.h . В зависимости от того, как вы его создали и назвали, возможно, файл может иметь имя вроде add (без расширения), add.h.txt или add.hpp . Также убедитесь, что он находится в том же каталоге, что и остальные исходные файлы.
Угловые скобки и двойные кавычки
Вам, наверное, интересно, почему мы используем угловые скобки для iostream и двойные кавычки для add.h . Возможно, что заголовочные файлы с таким же именем могут существовать в нескольких каталогах. Использование угловых скобок и двойных кавычек помогает компилятору понять, где ему следует искать заголовочные файлы.
Когда мы используем угловые скобки, мы сообщаем препроцессору, что это заголовочный файл, который мы не писали сами. Компилятор будет искать заголовок только в каталогах, указанных в каталогах включаемых файлов (include directories). Каталоги включаемых файлов настраиваются как часть вашего проекта / настроек IDE / настроек компилятора и обычно по умолчанию используются для каталогов, содержащих заголовочные файлы, которые поставляются с вашим компилятором и/или ОС. Компилятор не будет искать заголовочный файл в каталоге исходного кода вашего проекта.
Когда мы используем двойные кавычки, мы сообщаем препроцессору, что это заголовочный файл, который написали мы. Компилятор сначала будет искать этот заголовочный файл в текущем каталоге. Если он не сможет найти там подходящий заголовочный файл, он будет искать его в каталогах включаемых файлов.
Правило
Используйте двойные кавычки, чтобы включать заголовочные файлы, которые написали вы или которые, как ожидается, будут найдены в текущем каталоге. Угловые скобки используйте, чтобы включать заголовочные файлы, которые поставляются с вашим компилятором, ОС или сторонними библиотеками, которые вы установили в другом месте своей системы.
Почему у iostream нет расширения .h ?
Другой часто задаваемый вопрос: «Почему iostream (или любой другой заголовочный файл стандартной библиотеки) не имеет расширения .h ?». Ответ заключается в том, что iostream.h – это другой заголовочный файл, отличающийся от iostream ! Для объяснения требуется небольшой урок истории.
Когда C++ был только создан, все файлы в стандартной библиотеке оканчивались расширением .h . Жизнь была последовательной, и это было хорошо. Исходные версии cout и cin были объявлены в iostream.h . Когда комитет ANSI стандартизировал язык, они решили переместить все функции стандартной библиотеки в пространство имен std , чтобы избежать конфликтов имен с пользовательскими идентификаторами. Однако это представляло проблему: если бы они переместили всю функциональность в пространство имен std , ни одна из старых программ (включая iostream.h ) больше не работала бы!
Кроме того, многие библиотеки, унаследованные от C, которые всё еще используются в C++, получили префикс c (например, stdlib.h стал cstdlib ). Функциональные возможности этих библиотек также были перенесены в пространство имен std , чтобы избежать конфликтов имен.
Лучшая практика
При включении заголовочного файла из стандартной библиотеки используйте версию без расширения (без .h ), если она существует. Пользовательские заголовочные файлы по-прежнему должны использовать расширение .h .
Включение заголовочных файлов из других каталогов
Другой распространенный вопрос связан с тем, как включать заголовочные файлы из других каталогов.
Хотя это будет компилироваться (при условии, что файлы существуют в этих относительных каталогах), обратная сторона этого подхода состоит в том, что он требует от вас отражения структуры каталогов в вашем коде. Если вы когда-нибудь обновите структуру каталогов, ваш код больше не будет работать.
Лучший способ – сообщить вашему компилятору или IDE, что у вас есть куча заголовочных файлов в каком-то другом месте, чтобы он смотрел туда, когда не может найти их в текущем каталоге. Обычно это можно сделать, установив путь включения (include path) или каталог поиска (search directory) в настройках проекта в IDE.
Для пользователей Visual Studio
Кликните правой кнопкой мыши на своем проекте в обозревателе решений и выберите Свойства (Properties), затем вкладку Каталоги VC++.(VC++ Directories). Здесь вы увидите строку с названием «Включаемые каталоги» (Include Directories). Добавьте каталоги, в которых компилятор должен искать дополнительные заголовочные файлы.
Для пользователей Code::Blocks
В Code:: Blocks перейдите в меню Project (Проект) и выберите Build Options (Параметры сборки), затем вкладку Search directories (Каталоги поиска). Добавьте каталоги, в которых компилятор должен искать дополнительные заголовочные файлы.
Для пользователей GCC/G++
Используя g++, вы можете использовать параметр -I , чтобы указать альтернативный каталог для включения.
Хороший момент в этом подходе заключается в том, что если вы когда-нибудь измените структуру каталогов, вам нужно будет изменить только одну настройку компилятора или IDE, а не каждый файл кода.
Заголовочные файлы могут включать другие заголовочные файлы
Содержимое этих транзитивных включений доступно для использования в вашем файле исходного кода. Однако не следует полагаться на содержимое заголовков, которые включены транзитивно. Реализация заголовочных файлов может со временем меняться или отличаться в разных системах. Если это произойдет, ваш код может компилироваться только на определенных системах или может компилироваться сейчас, но перестать в будущем. Этого легко избежать, явно включив все заголовочные файлы, необходимые для содержимого вашего файла исходного кода.
Лучшая практика
К сожалению, нет простого способа определить, полагается ли ваш файл кода случайно на содержимое заголовочного файла, который был включен другим заголовочным файлом.
Вопрос: Я не включил <someheader.h> , и моя программа всё равно работала! Почему?
Это один из наиболее часто задаваемых вопросов. Ответ: скорее всего, он работает, потому что вы включили какой-то другой заголовок (например, <iostream> ), который сам включает <someheader.h> . Несмотря на то, что ваша программа будет компилироваться, в соответствии с приведенными выше рекомендациями вам не следует полагаться на это. То, что компилируется у вас, может не компилироваться на машине друга.
Лучшая практика
Рекомендации по использованию заголовочных файлов
Вот еще несколько рекомендаций по созданию и использованию заголовочных файлов.
ну примерно так, но не проще ли вынести все это в какой нибудь файл отдельный , чтобы в дальнейшем люди не сидели и не читали 20 строк ненужной информации?
Всегда считал и буду считать, что эта информация избыточна и абсолютно не нужна.
По поводу избыточности - полностью согласен. Хотя иногда бывает полезно, когда люди тянут пару файликов из библиотеки и потом днем с огноем не сыщешь откуда они это раскапали. Благо ситуация чисто гипотетическая, у меня она возникает когда приходится убирать мусор за фронтэндщиками на старых проектах, где еще нет bower-а и т.д.по стандартам - никак.
в любом случае это обычно dock block через строчку после <?php, содержащее к какому пакету пренадлежит файл, информация об авторе + контактные данные а так же информация о лицензии.
Информация аля "tabstop=4" обычно пишется в файлики типа .editorconfig
Суть в том, что все эти комменты в шапке никлому не нужны. Меня забавляет, как любой г-код обязательно содержит массивную шапку с бестолковой информацией и кучу копирайтов.
Профиль канала на YouTube устроен таким образом, что первое, на что обращает внимание пользователь – это шапка аккаунта. В ней, как правило, отображено фоновое изображение, в котором проиллюстрирована вся суть канала. Если пользователь находит видеоролик посредством рекомендательной системы, то в первую очередь он посмотрит его, а в случае заинтересованности пойдет дальше – начнет исследовать канал автора.
В таком контексте шапка профиля играет большую роль – от ее визуализации зависит то, будет ли пользователь смотреть другие ролики или нет. На этом, конечно, ее преимущества не заканчиваются. Она также может использоваться как инструмент для повышения узнаваемости бренда/личности, рекламы, объявления акций, конкурсов и так далее. В общем, обложка – это корень канала, который должен быть сделан со вкусом.
На что стоит обращать внимание при создании шапки, какие для этого есть инструменты и как сделать обложку канала с нуля – поговорим об этом в сегодняшней статье.
Требования к фоновому изображению
Как и любая социальная сеть, YouTube устанавливает ограничения на фоновое изображение канала. Это вовсе не означает, что вы не сможете добавить изображение иного формата (минимальный размер 1024 x 576 пикселей), но в таком случае картинка будет изменена до нужных размеров, а значит, она либо обрежется, либо расширится. Поэтому важно устанавливать именно то разрешение, которое предусмотрено сервисом.
Что на этот счет говорит нам Ютюб:
- Требуемый размер обложки: 2560 x 1440 пикселей, пропорции 16:9.
- Минимальный размер: 1024 x 576 пикселей. Если изображение будет меньше, то загрузить его не получится.
- Минимальный размер «безопасной области», отображаемой на любых устройствах: 1546 x 423 пикселей (мобильные устройства).
- Максимальная ширина с полным отображением «безопасной области»: 2560 x 423 пикселей (десктоп).
- Максимальный размер файла: 6 Мб.
Обращаю внимание на то, что шапка профиля будет отображаться на компьютере, телевизоре и телефоне немного по-разному. Чтобы все правильно настроить, можно предварительно посмотреть, как она будет выглядеть на разных устройствах. Сделать это можно через редактор баннера на YouTube. Если вы еще не знаете, как происходит загрузка шапки, посмотрим заодно и это.
- Открываем свой канал на Ютюбе и выбираем «Настроить вид канала».
- Переходим в подраздел «Брендинг» и напротив «Изображение баннера» выбираем «Загрузить».
- Для примера добавим обычное изображение с некоторым текстом, в результате чего перед нами отобразится специальное окно, в котором есть 3 зоны: для телевизора, компьютера и для всех устройств.
Разработка идеи
Несомненно, важным аспектом в разработке обложки является идея. Можно найти много референсов и сделать работу похожей, но без идеи даже такой подход может не проявить нужного результата.
Первое, на что стоит обратить внимание, – это тематика канала. Необходимо четко обозначить ее и рассказать, что уникального есть на канале. Если же вы блогер, то на обложке лучше всего изобразить себя в наилучшем образе. Если же речь идет о компании, то это может быть логотип и инфографика, рассказывающая о деятельности бизнеса.
Помимо всего прочего, мы также можем разместить в шапке:
Пожалуй, самое важное – это соблюдать единый стиль. Он должен четко соответствовать тому стилю, который используется в видеороликах и на аватаре. Если у вас есть фирменный стиль, то не забывайте и о нем, чтобы увеличить узнаваемость бренда.
Примеры баннеров от брендов и блогеров
Прежде чем переходить к оформлению канала на YouTube, рекомендую посмотреть на референсы, в качестве которых могут выступать различные каналы блогеров. Рассмотрим для примера некоторые из них.
- Канал вДудь. Довольно минималистичный дизайн – здесь мы видим только логотип канала и арт «ведущего». Аватар канала выполнен в точно таком же стиле. На примере этого канала вы можете создать что-то похожее: если у вас канал о еде, то можно разместить по центру логотип и воссоздать фон с едой. Такие баннеры создаются довольно быстро, но, несмотря на это, в них можно легко продемонстрировать свой логотип и бренд.
- Канал АФОНЯTV. Здесь мы сразу видим, что канал посвящен популярной личности. Таких решений можно встретить довольно много: указывается информация о канале, прикрепляется фотография человека и дается некое представление об общей концепции.
- КаналVarlamov. В данном случае мы видим пример хорошо проработанной композиции. Общая картина была воссоздана из склейки всевозможных изображений, хорошо гармонирующих между собой. Такую обложку создать довольно сложно, если вы не владеете графическими программами и основами дизайна.
Это была лишь малая часть возможных решений, которые используются на Ютюбе. На их основе вы можете создать собственные уникальные баннеры. О том, в каких программах это можно сделать, поговорим далее.
Где можно создать баннер для Youtube
Для этого подойдет практически любой графический редактор, даже Paint, но в нем вам вряд ли удастся создать что-то уникальное и стильное. Поэтому рекомендую остановиться на таких программах, как:
- Adobe Photoshop, GIMP, Pixlr – потребуются некоторые навыки, но с помощью данных программ можно воссоздать любой баннер, который вы хотите.
- Canva, Snappa и так далее – специальные сервисы для создания графических изображений, в которых можно сделать шапку для Ютюба. Функционал в них ограничен, однако можно воспользоваться различными шаблонами – такой способ подойдет, если вы новичок и не знаете основ дизайна.
Рассматривать, как работать в профессиональных графических редакторах, мы не будем, так как это тема для отдельной статьи, а вот посмотреть алгоритм работы в онлайн-инструментах – запросто.
Как создать обложку канала онлайн
Онлайн-сервисов для разработки собственного баннера довольно много, но ни один из них не сможет сравниться с полноценными графическими редакторами. Несмотря на это, можно быстро создать красивую шапку с помощью готовых шаблонов. Только будьте готовы к тому, что подобные обложки вы можете встретить и на других Ютюб-каналах.
Также стоит обратить внимание и на доступность сервисов – чаще всего они предоставляют полный доступ к функционалу только тем пользователям, которые приобрели премиум-аккаунт. Но даже с урезанными опциями можно сделать что-то креативное. Давайте рассмотрим, как это работает в бесплатных сервисах Canva и Fotor.
Canva
Для работы на сервисе от нас потребуется лишь создать новый аккаунт. Перейдем для этого на официальный сайт и пройдем несложную регистрацию. Затем переходим к основной инструкции:
Готово! Теперь вы можете разместить свою первую шапку на Youtube. А мы пока перейдем к следующему инструменту.
Fotor
Fotor – еще один бесплатный сервис, аналогичный предыдущему. Для работы в нем потребуется зарегистрировать аккаунт, после чего откроется доступ к различным шаблонам. Сервис предоставляет огромное количество всевозможных решений, но большинство из них доступно только для Pro-аккаунтов.
Для создания бесплатной обложки можно пойти следующим путем:
- На главной странице выбираем любой из предложенных вариантов с названием «Youtube Channel Art».
- Следующим шагом в левом меню выбираем подходящий шаблон. Обратите внимание на иконку, расположенную в правом верхнем углу миниатюры. Она символизирует о том, что шаблон доступен только для Pro-аккаунтов. На бесплатных шаблонах данный лейбл отсутствует.
- Так же, как и в Canva, мы можем отредактировать шаблон, кликнув по одному из его элементов. Как только редактирование будет завершено, можно сохранить картинку – для этого достаточно кликнуть по кнопке «Export» в верхней части окна.
Это были два популярных онлайн-сервиса для создания шаблонных обложек. Помимо этого, есть еще один способ сделать шапку для Ютюба без использования графического редактора – Google Презентации. Да, мы можем использовать сервис и для таких целей.
Создаем обложку с нуля с помощью «Google Презентаций»
Google Презентации – это лишь один из онлайн-примеров. Если у вас установлено на компьютере ПО для создания презентаций, то можете воспользоваться и им. А я рассмотрю, как создать обложку с помощью Гугла.
Создать обложку в Google Презентациях реально, и у вас это может получиться гораздо лучше и креативнее, чем у меня. Единственный минус – это неудобное перемещение элементов в рабочей области. В Фотошопе работать будет все же удобнее.
Заключение
В сегодняшней статье мы поговорили о том, как правильно подойти к реализации шапки для Youtube-канала, а также рассмотрели несколько примеров создания готовой обложки. Для наилучшего результата, конечно же, потребуется освоить графические редакторы либо нанять квалифицированного специалиста. Если вы только начинаете изучать YouTube, то подойдут и шаблонные решения – со временем вы так или иначе натренируетесь и сможете делать работы на высочайшем уровне.
Читайте также: