я попросил ChatGPT сгенерировать пример резюме на TeX, это правильно?
пример TeX и moderncv
% Пример файла resume.tex
\documentclass[11pt,a4paper,sans]{moderncv}
% Выбор стиля и цветовой схемы moderncv (есть варианты: casual, classic, banking, oldstyle, fancy)
\moderncvstyle{classic}
\moderncvcolor{blue}
% Кодировка и поддержка кириллицы
\usepackage[utf8]{inputenc} % Если компилируете через pdfLaTeX. Для XeLaTeX можно убрать.
\usepackage[T2A]{fontenc}
\usepackage[russian]{babel}
% Настройки полей страницы
\usepackage[scale=0.85]{geometry}
% Личные данные
\name{Иван}{Иванов}
\title{Резюме} % Заголовок (профессия или должность)
\address{ул. Пушкина, 1}{Москва, 123456}{Россия}
\phone[mobile]{+7~123~456~7890}
\email{ivan@example.com}
\homepage{www.example.com}
\social[github]{ivanivanov} % Логин на GitHub, если есть
\begin{document}
% Создание заголовка CV
\makecvtitle
% Опыт работы
\section{Опыт работы}
\cventry{2018--2023}{Senior Developer}{Компания «Пример»}{Москва}{\textit{Полная занятость}}{%
\begin{itemize}
\item Разработка веб-приложений;
\item Координация команды разработчиков;
\item Внедрение CI/CD процессов.
\end{itemize}}
\cventry{2015--2018}{Junior Developer}{Компания «Другая Компания»}{Москва}{\textit{Полная занятость}}{%
Участие в создании программного обеспечения, отладка и тестирование приложений.}
% Образование
\section{Образование}
\cventry{2010--2015}{Бакалавр в области информатики}{Московский Государственный Университет}{Москва}{\textit{С отличием}}{}
% Навыки
\section{Навыки}
\cvitem{Языки программирования}{C++, Python, Java}
\cvitem{Инструменты}{Git, Docker, Jenkins}
% Владение языками
\section{Языки}
\cvitemwithcomment{Русский}{Родной}{}
\cvitemwithcomment{Английский}{Продвинутый}{B2/C1}
\cvitemwithcomment{Немецкий}{Базовый}{A2}
% Дополнительная информация
\section{Дополнительная информация}
\cvitem{Хобби}{Спорт, чтение, путешествия}
\end{document}
TeX сам позиционирует всё как нужно.
Я хотел еще сделать так, чтобы резюме выглядело красиво и мне было намного проще использовать HTML. CSS/HTML позволяют сделать любое представление.
Мой инструмент позволяет еще группировать скилы, которые указаны в местах работ. Не нужно самому перечислять то, что вы указываете на конкретных позициях
Скриншот с навыками
Считает еще период, сколько человек проработал в компании
Скриншот по периодам
Период, навыки, и тому подобное, можно высчитывать самому вручную но мой инструмент делает это сам.
правда с относительно небольшим количеством ключевых слов TeX
в моем инструменте используется JSON и HTML (JSX если быть точнее), все достаточно просто.
А вот заполнить свой профиль на всех сайтах для поиска работы - это тот ещё геморрой..
Согласен с вами полностью, что заходить на разные сайты и заполнять свой профиль там, это такое себе "удовольствие".
Введите каждое поле отдельно, выберите дату рождения из трёх выпадающих списков (день, месяц, год), потом для каждого прошлого места работы - дата начала (день, месяц, год) и дата окончания (день, месяц, год), название компании, размер компании, имя собачки начальника,
Именно по этой причине, вариант с PDF считается мобильным, потому что его просто отправить куда угодно и не нужны никакие дополнительные программы. Иногда резюме нужно посылать по почте или через телегу, pdf очень удобный в этом случае.
Сейчас практически на всех формах отклика вакансии, есть обязательный пункт "attach CV", и нужно прикладывать файл.
Это я говорю про зарубежный рынок, в HH/HabrCareer вроде просто можно кнопочку нажать и работодатель увидит все в вашем профиле, нет необходимости ему отдельно присылать файлы.
потому что парсить резюме из pdf они не хотят (и никто не хочет, спасибо)
не совсем правда, я уже встречал несколько сайтов, где форму можно предзаполнить через загруженный PDF. С технической точки зрения это достаточно легко сделать сейчас, любые LLM справятся с этой задачей которые распознают картинки
Вот если бы вы написали инструмент, который всё это автоматизирует на разных сайтах - тогда это было бы более нужно.
это сложно технически, можно написать расширение для браузера, которое будет заполнять форму используя JSON с опытом и LLM, но овчинка не стоит выделки 😀
А тут ещё и к вам это всё надо ввести.
Да, заполнить нужно, но вот в этом случае как раз только 1 раз. JSON это универсальный формат, им можно описать что угодно, и я не придумывал JSON 😅
Этот инструмент не подходит потому что я хотел отделить этапы создания содержимого резюме от представления. В TeX, как я понимаю, нужно думать над позиционированием элементов и одновременно вспоминать свой опыт.
Вручную не пишется, все ошибки отслеживаются Effect и из них делается union.
Например вот тут, todo это эффект, который не имеет смысла, просто показал как Effect отслеживает ошибки, он может завершиться либо Error1, либо Error2.
import { pipe, Data, Effect } from "effect"
export class Error1 extends Data.TaggedError("Error1")<{}> {}
export class Error2 extends Data.TaggedError("Error2")<{}> {}
const todo =
pipe(
Effect.fail(new Error1),
Effect.andThen(
Effect.fail(new Error2)
)
)
// const todo: Effect.Effect<never, Error1 | Error2, never>
Сам по себе Promise не типиризует ошибки, он типизирует только успешный результат. То есть Promise<A> это Effect<A, any, never>
В вашем примере React Query больше похож на одно из применений Effect, мне нравится.
Я немного знаю по React Query но думаю что он заточен под работы с Реакт непосредственно и с хуками Реакта. Ну а так да, вам не нужны тут эффекты, и так хорошо код выглядит
Effect же это про программирование на эффектах, есть система эффектов, рантайм и тп.
Повторюсь что с Promise<any> невозможно пробрасывать ошибки и компилятор никогда не догадается что там за тип, так как такого Generic параметра просто не задумано.
Promise<number> это Effect<number, any, never> то есть ошибка может быть типа any то есть вообщем любым значением
Effect<A, E, R> это типа "умный" Promise, у которого в типе есть информация о типе с успешним значением A, или возможной ошибкой типа E, и которому требуется контекст типа R, для того чтобы система типов (Effect runtime) мог запустить этот промис
deleted
Да, это очередное преимущество возможность вставить свое JSON резюме в LLM, и попросить исправить ошибки.
JSON это универсальный формат и для него еще есть JSON Schema
я попросил ChatGPT сгенерировать пример резюме на TeX, это правильно?
пример TeX и moderncv
Я хотел еще сделать так, чтобы резюме выглядело красиво и мне было намного проще использовать HTML. CSS/HTML позволяют сделать любое представление.
Мой инструмент позволяет еще группировать скилы, которые указаны в местах работ. Не нужно самому перечислять то, что вы указываете на конкретных позициях
Скриншот с навыками
Считает еще период, сколько человек проработал в компании
Скриншот по периодам
Период, навыки, и тому подобное, можно высчитывать самому вручную но мой инструмент делает это сам.
в моем инструменте используется JSON и HTML (JSX если быть точнее), все достаточно просто.
Спасибо за комментарий!
Согласен с вами полностью, что заходить на разные сайты и заполнять свой профиль там, это такое себе "удовольствие".
Именно по этой причине, вариант с PDF считается мобильным, потому что его просто отправить куда угодно и не нужны никакие дополнительные программы. Иногда резюме нужно посылать по почте или через телегу, pdf очень удобный в этом случае.
Сейчас практически на всех формах отклика вакансии, есть обязательный пункт "attach CV", и нужно прикладывать файл.
Это я говорю про зарубежный рынок, в HH/HabrCareer вроде просто можно кнопочку нажать и работодатель увидит все в вашем профиле, нет необходимости ему отдельно присылать файлы.
не совсем правда, я уже встречал несколько сайтов, где форму можно предзаполнить через загруженный PDF. С технической точки зрения это достаточно легко сделать сейчас, любые LLM справятся с этой задачей которые распознают картинки
это сложно технически, можно написать расширение для браузера, которое будет заполнять форму используя JSON с опытом и LLM, но овчинка не стоит выделки 😀
Да, заполнить нужно, но вот в этом случае как раз только 1 раз. JSON это универсальный формат, им можно описать что угодно, и я не придумывал JSON 😅
Спасибо за мысль
Этот инструмент не подходит потому что я хотел отделить этапы создания содержимого резюме от представления. В TeX, как я понимаю, нужно думать над позиционированием элементов и одновременно вспоминать свой опыт.
жесть конечно 🤯
Я не понимаю что у этой компании делает Тимлид, если он не видит банального:
Ну а вообще вы дело говорите, эта тема интересная
Effect это как раз про идею, что используем систему эффектов чтобы писать программы любой сложности. Effect-ts это реализация этой идеи в TypeScript
https://www.youtube.com/watch?v=252slbrmk8M
Вручную не пишется, все ошибки отслеживаются Effect и из них делается union.
Например вот тут, todo это эффект, который не имеет смысла, просто показал как Effect отслеживает ошибки, он может завершиться либо Error1, либо Error2.
Но если хотите то всегда можно явно написать тип.
https://effect.website/docs/error-management/expected-errors/#error-tracking
Хороший вопрос 🙂
У кастомных ошибок должно быть свойство _tag: string, в примере выше этот тег проставляется в классе Data.TaggedError
https://effect.website/docs/error-management/yieldable-errors/
Суть в том что в вашем случае вы можете забыть какой тип ошибки, вам нужно знать класс ошибки чтобы пользоваться оператором instance of
в случае с effect работает typescript inference и все возможные ошибки аккумулируются в эффекте и все они известны в compile time
Сам по себе Promise не типиризует ошибки, он типизирует только успешный результат. То есть Promise<A> это Effect<A, any, never>
В вашем примере React Query больше похож на одно из применений Effect, мне нравится.
Я немного знаю по React Query но думаю что он заточен под работы с Реакт непосредственно и с хуками Реакта. Ну а так да, вам не нужны тут эффекты, и так хорошо код выглядит
Effect же это про программирование на эффектах, есть система эффектов, рантайм и тп.
Нет никаких заглушек, я не понимаю что вы мне пытаетесь доказать но забавно как вы себя причислили в группу хороших программистов, улыбнуло, спасибо
Не понимаю при чем тут это
Effect это не про реактивное программирование, в вашем коде видно что вы во фронте Loader скрываете.
Просто со стримами API похож на работу с эффектами но это совсем другая история
я напишу в следующий раз статью получше и расскажу почему это не реактивный фреймворк
Никакую технику suspense я не видел, да и код его вообще не понятно на чем, похоже на $mol или какой то псевдокод. Никаких генераторов тоже не видно
он пишет код который похож на какой то реактивный фреймворк
А без React, на ванильном js чтобы работало в браузере или nodeJS? Можете прям сниппет здесь написать?
Не очень понимаю про что вы 😅
Повторюсь что с Promise<any> невозможно пробрасывать ошибки и компилятор никогда не догадается что там за тип, так как такого Generic параметра просто не задумано.
Promise<number> это Effect<number, any, never>
то есть ошибка может быть типаany
то есть вообщем любым значениемEffect<A, E, R> это типа "умный" Promise, у которого в типе есть информация о типе с успешним значением A, или возможной ошибкой типа E, и которому требуется контекст типа R, для того чтобы система типов (Effect runtime) мог запустить этот промис
Хм, можете наглядный и простой пример привести? Я вот что то не знаю как сделать так, чтобы
fetch
возвращал неPromise
а сразу его значениеНе совсем понял про что вы говорите, можете сказать про что именно вы хотите подчеркнуть разницу?
В Effect много что поддерживает Dual Api
https://effect.website/docs/code-style/dual/