В рамках своей цифровой весенней уборки я решил объединить свои различные резюме, резюме и онлайн-профили в один управляемый документ. Я также хотел автоматизировать как можно большую часть моего резюме и резюме, упростив обновление и распространение, поскольку это проще, чем мой текущий процесс использования Adobe Illustrator и загрузки PDF.

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

Что такое HackMyResume?

HackMyResume - это инструмент Node.JS, который позволяет создавать, конвертировать, проверять и анализировать резюме в формате JSONResume и FRESH, а также позволяет создавать артефакты резюме в различных форматах с использованием тем JSONResume или FRESH.

Чтобы начать работу с HackMyResume, вы можете использовать команду new или указать на существующий документ. Затем вы можете запустить build, чтобы превратить резюме в артефакт, используя одну из тем, или использовать analyze, чтобы получить статистику по ключевым словам в документе, а также по любым пробелам в вашей истории занятости.

Анализ моего резюме был тем, что изначально привлекло меня к HackMyResume, поскольку я мог использовать его, чтобы убедиться, что в моей истории занятости нет пробелов, а также использовать анализ ключевых слов, чтобы убедиться, что мое резюме выделило те моменты, которые я хотел, чтобы потенциальные работодатели увидели.

Дополнительным бонусом для меня было то, что я мог использовать команду convert, чтобы получить выходные данные инструмента, который я использовал для первоначальной подшивки своего резюме, который взял мой профиль LinkedIn, превратил его в JSONResume и создал СВЕЖИЙ документ.

Кроме того, поскольку HackMyResume может использовать темы JSONResume и HackMyResume, это делает его идеальным инструментом для использования с любым форматом.

Почему FRESH вместо JSONResume?

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

Когда вы посетите веб-сайт JSONResume, вам будет предложено опубликовать свое резюме в их веб-сервисе, но этот веб-сервис вместе с рядом инструментов в экосистеме JSONResume просто не работает, поскольку они либо работают на старых Версии узлов или веб-сайт выдают постоянные ошибки тайм-аута.

HackMyResume не намного лучше на фронте веб-сайта, поскольку веб-сайт fluentdesk также никогда не исправляет; однако фактический инструментарий действительно работает, поэтому для меня это был первый шаг в сторону от JSONResume.

Во-вторых, если вы сравните схемы JSONResume и FRESH, схема FRESH предлагает гораздо больше. Оба предлагают:

  • Основная информация о человеке
  • Онлайн-профили
  • Трудовая книжка
  • Добровольная работа
  • Образование
  • Награды
  • Опубликованные работы
  • Навыки и умения
  • Языки
  • Интересы
  • использованная литература
  • Проекты
  • Метаданные контроля версий

Однако FRESH имеет следующее по сравнению с JSONResume (по крайней мере, на момент написания)

  • Навыки могут быть представлены в виде категоризированного списка, но также отдельные навыки получают свои собственные записи (для более подробных списков навыков)
  • «Опубликованные работы» разделены на письменную и устную, поэтому вы можете добавлять любые конференции, на которых выступали.
  • Вы можете добавить свою предрасположенность к поездкам и переезду, а также к удаленной работе.
  • Вы можете добавлять отзывы, а также ссылки, чтобы все эти отзывы из LinkedIn не смешивались с вашим списком людей, с которыми потенциальные работодатели могут связаться.
  • Проекты и образцы разделены, поэтому вы можете иметь более четко определенный набор образцов для использования, а не только те, которые связаны с образцами, сделанными в процессе работы.
  • FRESH разделяет волонтерскую работу на службу и членство, что упрощает запись работы, выполняемой для клубов и встреч.
  • Практически все в FRESH имеет как подсветку, так и ключевые слова, в то время как использование подсветки в JSONResume зарезервировано для нескольких свойств.

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

Автоматизация моего резюме

Я выбираю ленивого человека для тяжелой работы. Потому что ленивый человек найдет простой способ сделать это. - Билл Гейтс

Одна из самых больших проблем, которые у меня были с моей предыдущей настройкой, заключалась в том, что после того, как я определился с набором навыков, который я хотел включить в свое резюме, мне пришлось пойти и обновить документ Adobe Illustrator моего резюме, а также веб-версию моего возобновите, а затем загрузите оба на мой сайт.

Используя комбинацию Github и Travis CI, я смог автоматизировать проверку, анализ и генерацию как моего резюме, так и моего резюме, а также загрузить их, просто внеся изменения в документ JSON.

Использование Git и Github для управления моим резюме

Я использую Git каждый день на работе, поэтому Git и Github - мои инструменты для управления версиями всего, что не является двоичным.

Я также поклонник разработки функциональных веток, поскольку Pull Request, используемый для слияния всего обратно в основную ветку или ветку разработки, является хорошим напоминанием для критики вносимых изменений.

Чтобы внести изменения в свое резюме, я создаю ветку функций, вношу изменения, которые хочу обновить в своем резюме, а затем отправляю запрос на вытягивание. Затем я позволяю инструментам «Проверки», которые интегрируются с Github (в данном случае Travis CI), показывать, ухудшают ли изменения качество моего резюме, прежде чем слиться с моей основной веткой, если все в порядке.

Если затем я решу, что хочу опубликовать новую версию своего резюме, я создаю тег git для этой версии. Это на тот случай, если мои изменения в основной ветке не повлияют на конечный продукт, они не вызовут повторную загрузку, что дает мне лучший контроль над публикацией моего резюме.

Использование Travis CI для создания и публикации моего резюме

Travis CI - это моя платформа CI. Я предпочитаю его, так как у него простой интерфейс, а используемый формат YAML обеспечивает большую гибкость (например, для моего резюме требуется семейство шрифтов Ubuntu, которое можно установить с помощью команды apt-get).

У меня есть Трэвис, который запускает инструменты проверки и анализа HackMyResume при каждой фиксации, чтобы я мог быстро выявлять любые проблемы и исправлять их.

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

Есть множество других инструментов, которые я мог бы использовать и для Трэвиса, например, проверка орфографии и грамматики, проверка возраста чтения и тона моего резюме.

Когда создается новый тег git, Трэвис запускает скрипт для генерации HTML-версии моего резюме (который представляет собой отдельный более оптимизированный файл JSON) и HTML-версии моего резюме.

Я использую специальную тему для своего резюме, которая оптимизирована для одного листа формата A4, и поэтому я боролся с параметрами печати по умолчанию для HackMyResume, поэтому вместо этого у меня есть отдельный скрипт, который использует Puppeteer для создания PDF-файла из моего HTML-документа резюме.

После создания PDF и HTML моего резюме и резюме я использую сценарий для загрузки обоих на свой веб-сайт. Если какой-либо из шагов не удастся, сборка Travis станет красной, что позволяет мне четко видеть, что мне нужно вмешаться вручную.

Создание темы HackMyResume

В моем резюме используется специальная тема, основанная на моем существующем документе Adobe Illustrator, которым я пользовался последние 6 лет. Чтобы сохранить последовательность, я использовал те же правила макета и типографики для CSS при использовании Puppeteer для печати PDF-файла, поскольку он давал мне больше контроля, чем WKHTMLtoPDF или PhantomJS, над тем, как выглядит окончательный PDF-файл.

Создать собственную тему HackMyResume очень просто. Есть репозиторий FRESH-themes на Github, который вы можете разветвить, и как только вы продублируете базовую тему, вы можете взломать ее, сколько душе угодно.

Вот несколько советов:

  • Существуют отдельные документы HTML и CSS для создания выходных файлов PDF и HTML для тем, поэтому убедитесь, что вы обновили правильный.
  • Вы можете переопределить частичные шаблоны, поместив их в папку partials и обновив основной шаблон, чтобы удалить sections/ часть вызова шаблона (затем будут использоваться частичные данные в вашей папке partials)
  • Вы можете использовать {{{, чтобы HandleBars не экранировались, что полезно для апострофов в названиях организаций.
  • Лучше всего кодировать в base64 любые изображения, а не ссылаться на них.
  • Вы можете указать формат даты, используемый функцией dateRange после периода, например {{dateRange . 'YYYY'}}, чтобы он отображал только годы (по умолчанию он показывает год и месяц.

PDF печать

Для меня печать была, наверное, самой сложной частью HackMyResume. Поскольку мне нужно было сохранить мой шаблон резюме на одном листе формата A4, мне потребовались более продвинутые параметры для управления настройками печати. К сожалению, опции WKHTMLtoPDF и PhantomJS, предлагаемые в настоящее время HackMyResume, не реализовались, поэтому я использовал Puppeteer для управления браузером Chrome без головы.

Я запишу здесь свои выводы, полученные при использовании различных параметров печати, на случай, если это кому-то поможет.

Чтобы управлять настройкой печати, вам необходимо создать документ JSON, в котором будут указаны параметры, передаваемые в HackMyResume. В этом документе вы можете определить механизм, используемый для печати, объявив wkhtmltopdf или phantomjs под ключом pdf.

Если вы используете механизм wkhtmltopdf, вы можете затем определить новый объект под ключом wkhtmltopdf, который будет содержать аргументы, переданные в WKHTMLtoPDF. Они могут включать:

  • Маржа
  • Размер бумаги
  • Ориентация бумаги
  • Заголовок для использования в PDF

Даже при всей гибкости, предлагаемой параметрами, которые вы можете определить, я обнаружил, что WKHTMLtoPDF и PhantomJS не поддерживают многие правила и шрифты flex-box, которые я определил в моем CSS.

Я выбрал Puppeteer, поскольку он позволяет вам использовать Chrome, который уже имеет отличную поддержку печати PDF и предоставляет множество опций для управления выводом, мой последний сценарий Puppeteer выглядел так:

const puppeteer = require("puppeteer");
const path = require("path");
const filePath = path.resolve(__dirname, '../out/cv.html'); 
(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto(`file:///${filePath}`);
  await page.pdf({
    path: "out/CV.pdf",
    format: "A4",
    printBackground: true,
    displayHeaderFooter: false,
    margin: {
      top: "10mm",
      left: "10mm",
      right: "10mm",
      bottom: "10mm"
    }
  });
   await browser.close();
})();

Этот скрипт по существу сообщает Chrome открыть HTML-файл моего резюме и распечатать PDF-файл без верхних или нижних колонтитулов и распечатать фоновые изображения (поскольку я использую их для набора настраиваемых пунктов списка)

Улучшения, которые я хотел бы сделать

Автоматизация создания моего резюме и резюме - это на самом деле только первый шаг, который я сделаю к цели, которая у меня есть: облегчить для тех, кто работает, поддерживать свое резюме в актуальном состоянии вместо того, чтобы делать это только каждые три года, когда они хотят сменить работу.

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

Чат-бот может использовать систему ветвления функций, которую я использую, для отправки запроса на слияние после разговора с ним, позволяя мне принять изменения при просмотре уведомлений Github. Это дает мне лучший контроль над тем, что входит, и когда Трэвис проверяет коммиты, я вижу регрессии.

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

Еще одна интеграция, которую я буду искать, - это обновить мой LinkedIn, Stack Overflow Developer Story и другие сайты в рамках процесса выпуска, чтобы все оставалось синхронизированным и согласованным.

Я также буду искать интерактивный шаблон резюме в формате HTML. Все темы, которые я видел до сих пор, в значительной степени ориентированы на создание статических веб-сайтов для печати. Мой вариант использования немного отличается, поэтому возможность использования таких инструментов, как React и D3.js для визуализации данных моего резюме, поможет мне выделиться.

Резюме

Поддерживать актуальность информации может быть непросто, поэтому автоматизация анализа и генерации моего резюме и резюме позволяет мне сосредоточиться только на изменении текста.

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

Хотя HackMyResume лучше, чем JSONResume, параметры печати не идеальны, поэтому вам может потребоваться создать собственный сценарий печати, чтобы получить желаемый результат.