• Какие решения существуют для поиска кадров в небольшую команду?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Подъëм зарплаты всегда работает.
    Ответ написан
    Комментировать
  • Возможно ли в либе pdf-lib на js заюзать русские шрифты?

    @SeLive
    По умолчанию PDF-LIB использует шрифты с кодировкой ANSI. Достаточно загрузить в библиотеку сторонний шрифт, например Microsoft Sans Serif, через метод embedFont() и указывать нужный шрифт при написании текста.

    // Загружаем PDF
    		const url = 'https://pdf-lib.js.org/assets/with_update_sections.pdf'
    		const existingPdfBytes = await fetch(url).then(res => res.arrayBuffer())
    		// Загружаем шрифт с поддержкой русского языка, в данном случае это Microsoft Sans Serif
    		const url2 = 'https://db.onlinewebfonts.com/t/643e59524d730ce6c6f2384eebf945f8.ttf'
    		const fontBytes = await fetch(url2).then(res => res.arrayBuffer())
    
    		const pdfDoc = await PDFDocument.load(existingPdfBytes)
    
    		// Устанавливаем шрифт
    		let customFont;
    		if (fontBytes) {
    			pdfDoc.registerFontkit(fontkit);
    			await pdfDoc.embedFont(fontBytes);
    			customFont = await pdfDoc.embedFont(fontBytes);
    		}
    
    		const pages = pdfDoc.getPages()
    		const firstPage = pages[0]
    
    		const { width, height } = firstPage.getSize()
    
    		firstPage.drawText('Привет мир!', {
    			x: 5,
    			y: height / 2 + 300,
    			size: 50,
    			font: customFont, // Указываем наш кастомный шрифт
    			color: rgb(0.95, 0.1, 0.1),
    			rotate: degrees(-45),
    		})


    Важно подключить в проекте pdf-lib/fontkit, что бы зарегистрировать шрифт в библиотеке через registerFontkit().
    Ответ написан
    1 комментарий
  • С чего начать в 30 лет?

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

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

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

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

    Напомню, вопрос именно в очередности изучения
    Непонятно изучение чего вас интересует. Без проблем вы можете изучить, например, сольфеджио, но если у вас нет слуха то музыкантом вы не станете. Так и в программировании, нет проблем прочитать пару книг типа "Пишем игру на Unity за 24 часа", но если у вас нет критического мышления программистом вы не станете
    Ответ написан
    Комментировать
  • С чего начать в 30 лет?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Фундаментальная проблема - в игрострой стоит очередь фанатов с горящими глазами. Людей, которые пишут игры, играют в игры, моддят игры, хакают игры..., начиная с возраста, когда они смогли дотянуться до клавиатуры (как ваш покорный слуга). При этом, у них столько мотивации, что они могут сами поставить себе задачу, сами нагуглить все, что нужно (Спасибо дяде Немнюгину за его учебник. Это все что нужно знать о DOS, чтобы закодить dOOm) и сами все напишут и нарисуют (работая над этим сутками. Не потому что над душей стоит босс с воплями о лишении премии, а потому что им это интересно).

    И вот теперь, Андрей, который уже устал хочет встать в очередь высоко мотивированных конкурентов и попросить себе оффер. Каковы его шансы на успех?

    В играх есть много специализаций программирования - хотите графику, придется учить одно (причем на 2d и 3d это одно будет разное), хотите игровую логику и скриптинг - это номер два, хотите системную часть и бэкенд - это будет третье.

    Для универсального развития, нужно начинать с простых фиговин вроде тетриса, арканоида, бильярда и прочего (в которых однако есть все столпы игростроя - графика + логика + системный движок, можно и добавить сеть, если подумать) и потом наращивать сложность - делать платформер или RTS.
    Ответ написан
    4 комментария
  • Как устроить на первую работу в сферу frontend'a?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Устраивался я 21 год назад, не фронтом и даже не web-разработчиком, так что экспертом приглашать меня не стоило. Но раз уж пригласили, то поделюсь опытом найма. Стажёров и джунов почти никто не нанимает. При этом в ИТ сейчас прёт всё больше народа, количество соискателей уже в сотни раз больше, чем вакансий для начинающих. Отсюда относительно высокие требования к соискателю при достаточно низких зарплатах. Поэтому первое, что нужно - везение. Можно быть сколь угодно крутым, но затеряться в потоке. Второе - нужно хорошо составленное резюме и пет-проект. И последнее по очереди, но не по значению - надо быть лучше остальных ста соискателей. Это не сильно сложно, большинство из них - жертвы курсов и видео-уроков. Имея всё вышеперечисленное, придётся сделать очень много откликов, сходить на очень много собеседований и потом поработать годик за еду. После каждого проваленного собеседования просите обратную связь. Зубрите то, что спрашивали. Подтягивайте то, с чем не справились.
    Ответ написан
    1 комментарий
  • Удалённая работа в зарубежной компании — какие есть подводные камни?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Этот факт никому не нравится, но шанс устроиться в иностранную компанию по собственной инициативи чрезвычайно мал. Если это настоящая иностранная компания, а не стартап из трёх белорусов, работающих во Вьетнаме. Большинство тех, кто работает в иностранных компаниях, не отправляли в неё резюме, а откликнулись на приглашение рекрутёра. Чтобы привлечь внимание иностранных рекрутёров, надо сначала дорасти до сеньорского уровня, работая в компаниях родной страны. Либо быть гениальным студентом, которого заметят и схантят через кафедру.
    Ответ написан
    4 комментария
  • Как понять блокчейн?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    в чем его преимущества

    Ни в чем. Просто модная хайповая тема. Так же как "облака". Поначалу пытались впихнуть как всегда невпихуемое, кто-то поднял бабла, кто-то прогорел, после того как хайп прошел и стала ясна область применения - сидят тихо и не жужжат, потому что область применения оказалась очень узкой и весьма специфичной...
    Ответ написан
    4 комментария
  • На собеседовании сказали, что не все функции - замыкания. Так ли это?

    @Arlekcangp
    Разработчик, Лид, Архитектор ПО
    Похоже вас поймали на том что в js кто-то решил переопределить термин "замыкание"... Т к javascript далеко не первый язык, в котором есть нечто, претендующее называться термином "замыкание", то следует в первую очередь рассмотреть общее определение. Возьмём его из википедии:

    Замыкание (англ. closure) в программировании — функция первого класса, в теле которой присутствуют ссылки на переменные, объявленные вне тела этой функции в окружающем коде и не являющиеся её параметрами. Говоря другим языком, замыкание — функция, которая ссылается на свободные переменные в своей области видимости.
    Замыкание, так же как и экземпляр объекта, есть способ представления функциональности и данных, связанных и упакованных вместе.
    Замыкание — это особый вид функции. Она определена в теле другой функции и создаётся каждый раз во время её выполнения. Синтаксически это выглядит как функция, находящаяся целиком в теле другой функции. При этом вложенная внутренняя функция содержит ссылки на локальные переменные внешней функции. Каждый раз при выполнении внешней функции происходит создание нового экземпляра внутренней функции, с новыми ссылками на переменные внешней функции.
    В случае замыкания ссылки на переменные внешней функции действительны внутри вложенной функции до тех пор, пока работает вложенная функция, даже если внешняя функция закончила работу, и переменные вышли из области видимости.[1]
    Замыкание связывает код функции с её лексическим окружением (местом, в котором она определена в коде). Лексические переменные замыкания отличаются от глобальных переменных тем, что они не занимают глобальное пространство имён. От переменных в объектах они отличаются тем, что привязаны к функциям, а не объектам.


    Как видим из этого длинного определения (а не только его первого предложения) интервьюер оказался формально прав (что является неожиданностью и для меня самого. Кто знает, возможно это веяние нового или всё же творчество чрезмерного ЧСВ js-кодерков, но не будем предвзятыми) Посмотрим дальше...Переходим в английскую версию той же страницы в википедии:

    In programming languages, a closure, also lexical closure or function closure, is a technique for implementing lexically scoped name binding in a language with first-class functions. Operationally, a closure is a record storing a function[a] together with an environment.[1] The environment is a mapping associating each free variable of the function (variables that are used locally, but defined in an enclosing scope) with the value or reference to which the name was bound when the closure was created.[b] Unlike a plain function, a closure allows the function to access those captured variables through the closure's copies of their values or references, even when the function is invoked outside their scope.


    О! А тут нет никаких "функций, вложенных в функцию" и нет никаких "создающихся каждый раз" Хм... Интересно. Ну за то есть абзац о том как появились замыкания:

    The concept of closures was developed in the 1960s for the mechanical evaluation of expressions in the λ-calculus and was first fully implemented in 1970 as a language feature in the PAL programming language to support lexically scoped first-class functions.[2]

    Peter J. Landin defined the term closure in 1964 as having an environment part and a control part as used by his SECD machine for evaluating expressions.[3] Joel Moses credits Landin with introducing the term closure to refer to a lambda expression whose open bindings (free variables) have been closed by (or bound in) the lexical environment, resulting in a closed expression, or closure.[4][5] This usage was subsequently adopted by Sussman and Steele when they defined Scheme in 1975,[6] a lexically scoped variant of Lisp, and became widespread.


    Ага. Оказывается первоначально они появились в такой не конвенциональной, с сегодняшней точки зрения VM, как SECD... И их создатель прямо говорит, что это код плюс данные. Далее термин применяют к лямбда-выражениям. Ничего не говорится, должны ли эти выражения возвращаться функцией, или достаточно того, что бы они захватывали переменные из своего лексического (или динамического, как в common lisp) окружения. Далее нам сообщают, что некие мистеры, Сасман и Стил, спустя каких то 11 лет добавили это в свой язык Scheme... Ну что же. Посмотрим замыкания в Scheme... А именно откроем книгу Сасмана и соавторов "Структура и интерпретация компьютерных программ" или "SICP" Первый раз (исключая содержание) слово "замыкание" встречается в главе 2 "Поcтроение абстракций c помощью данных"


    Важная идея в работе с составными данными — понятие замыкания (closure): клей для
    сочетания объектов данных должен позволять нам склеивать не только элементарные
    объекты данных, но и составные.


    Но, как выяснилось, это не те замыкания... Это замыкание в том смысле, что структуру одного типа (в данном случае пары) могут ссылаться на самих себя. И это то как термин "замыкание" понимают математики. Далее в SICP никаких других определений замыканий нет (несмотря на то, что само их использование конечно же есть) Ну ничего не остаётся как посмотреть что же сегодня называют замыканиями в языке Scheme... Гугл по этому запросу выдал первой ссылкой: https://www.cs.utexas.edu/ftp/garbage/cs345/schint....
    Цитирую:

    Procedures are Closures
    Scheme procedure's aren't really just pieces of code you can execute; they're closures.

    A closure is a procedure that records what environment it was created in. When you call it, that environment is restored before the actual code is executed. This ensures that when a procedure executes, it sees the exact same variable bindings that were visible when it was created--it doesn't just remember variable names in its code, it remembers what storage each name referred to when it was created.

    Since variable bindings are allocated on the heap, not on a stack, this allows procedures to remember binding environments even after the expressions that created those environments have been evaluated. For example, a closure created by a lambda inside a let will remember the let's variable bindings even after we've exited the let. As long as we have a pointer to the procedure (closure), the bindings it refers to are guaranteed to exist. (The garbage collector will not reclaim the procedure's storage, or the storage for the let bindings.)

    Here's an example that may clarify this, and show one way of taking advantage of it.

    Suppose we type the following expression at the Scheme prompt, to be interpreted in a top-level environment:

    Scheme> (let ((count 0))
               (lambda ()
                  (set! count (+ count 1))
                  count)))

    ##

    Evaluating this let expression first creates a binding environment with a binding for count. The initial value of this binding is 0. In this environment, the lambda expression creates a closure. When executed, this procedure will increment the count, and then return its value. (Note that the procedure is not executed yet, however--it's just created.) This procedure, returned by the lambda expression, is also returned as the value of the let expression, because a let returns the value of its last body expression. The read-eval-print loop therefore prints a representation of the (anonymous) procedure.


    Что имеем ? В Scheme - вообще любая функция - это замыкание! Т к она всегда захватывает контекст, даже если там пусто!. Что видим в коде ? Ну с точки зрения Scheme тут конечно вложенная функция, т к let - это на самом деле lambda, но так происходит потому, что в Scheme нет переменных в понимании js. В js же можно считать, что глобальный контекст - результат действия нечто, что эквивалентно let. Захватывает ли любая функция в js этот контекст ? Не знаю. Но точно знаю, что в вашем примере это определенно так - х часть контекста, который захватывается функцией. Кто хочет поспорить - идите спорьте с создателями Scheme (скажите, когда попкорн покупать, я посмотрю как вас пороть будут. Набежало тут вайтишников =)) Кто то может сказать "а вот у нас в js замыкания определяются не так" На что я отвечу: знаете, товарищи, а идите ка вы лесом! Если есть однажды созданный и определенный термин, нужны весьма веские причины что бы менять его определение. Желания левой ноги очередного вайтишника тут не достаточно.
    Ответ написан
    30 комментариев
  • На собеседовании сказали, что не все функции - замыкания. Так ли это?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    тут нет замыкания. Это обычный вызов функции. Ты прав.
    Тебе нужно понять простую вещь - на собеседования часто приходят мудаки, которые не понимают ничего в программировании. Как в теории, так и в практике
    Ответ написан
    Комментировать
  • На собеседовании сказали, что не все функции - замыкания. Так ли это?

    snaiper04ek
    @snaiper04ek
    Не стреляйте в эникея, он админит как умеет
    парень. Всё равно ты будешь использовать ту терминологию, которую используют на работе. Если там под замыканием подразумевается замыкание с инкапсуляцией, то после того как тебе сказали что "твой код - говно", было два варианта: 1)поговорить о терминах либо со ссылкой на официальную документацию, либо вместо с собеседником вывести определение исходя из смысла понятия, не прибегая к авторитетам вообще. 2) Сказать о том, что прочитал такое определение у %авторитет%, и сказать, что готов использовать то, которым пользуетесь вы на работе.

    По поводу выведения определения: есть смысл замыкания. Его нужно чётко озвучить согласиться с ним. Например, ты хочешь сказать, что смысл замыкания это ничто иное как "повесить ссылку на переменную с которой окончена работа до объявления функции, для сейва от мусорщика". Спросить - согласен ли с этим собеседник, или есть дополнения/возражения. Если согласен - значит "функция, являющаяся замыканием - любая функция, которая ссылается на переменную вне своего тела, в случае если переменную иначе удалил бы сборщик." Далее нужно договориться, что "иначе удалил бы" можно опускать как лишнюю сущность, которая усложняет определение такой функции, и упростить до - "функция, ссылающаяся на переменную вне своего тела."

    Есть второй вариант: собеседник тебе говорит: "Ахтунг! Замыкание используется не просто для того, чтобы спасти переменную от удаления! Это ещё и способ сокрытия данных: замыканием можно использовать локальную глобальную переменную, вместо того чтобы использовать просто глобальную переменную, или же городить отдельный класс."
    В этом случае всё твое определение идёт в пешее эротическое, и ты соглашаешься, что для этого придётся обернуть функцию в функцию, чтобы у тебя была функция с локальными переменными, которые будут глобальными для этой функции в функции.
    Ответ написан
    13 комментариев
  • Как реализовать балансировку нагрузки на кластер PostgreSQL, чтобы запросы на чтение поступали только на слейв?

    Melkij
    @Melkij
    PostgreSQL DBA
    А как? Ну вот прямым текстом: как это в принципе и в теории возможно сделать без участия приложения?

    begin isolation level repeatable read ;
    select ... from users;
    -- а дальше-то что?

    Окей, begin действительно можно отсрочить до прихода следующего запроса, но вот абсолютно никак не позже запроса select вы обязаны решить, отправлять эту транзакцию на реплику либо на мастер. Как вы это определите? С равной вероятностью следующей командой может быть commit, другой select или пишущий запрос. Вы это никак не можете узнать, но вам уже необходимо эту транзакцию отправить куда-то и получить результат. И ровно так же вы не можете отправить запрос сначала на реплику, а запись потом на мастере потому что у вас развалится снэпшот транзакции.

    select * from calculate_user_rating(423);
    А это читающий или пишущий запрос? Да этого сама база не знает! Хрен его разберёт, что этой pl/python хранимке на непонятном для базы языке вздумается делать.

    Репликами должно уметь пользоваться само приложение. Кроме самого приложения больше никто не знает, допустимо ли запрос отправлять на реплики и если да, то на какие именно
    Ответ написан
    7 комментариев
  • Стоит ли подписывать такой nda ???

    Zoominger
    @Zoominger
    System Integrator
    В этом документе предусматривалась ответственность за разглашение конфиденциальной информации, в частности штраф от миллиона рублей за каждый случай разглашения, который я обязан выплатить работодателю в течение пяти рабочих дней + ответственность по УК.

    Открою секрет: ни одна писулька, где вам запрещают что-то рассказывать (даже коммерческую тайну, даже размер зарплаты), никакой юридической силы не имеет. Абсолютно.
    Ответ написан
    6 комментариев
  • Должен ли WEB-разработчик уметь настраивать VPS/сервер?

    Adamos
    @Adamos
    Вопрос "должен ли" - всегда идиотский. Никто никому ничего не должен. В частности, нанимать и платить.
    Если вы такой крутой фронтендер, что вас ценят именно на этом фронте настолько, чтобы работодателю было жалко тратить ваше ценное время на настройки, он лучше наймет девопса - скорее всего, вам это все не понадобится.
    Но как можно стать крутым специалистом, вообще не интересуясь настолько смежными областями? Я не знаю.
    Вы такими сомнениями и прикидками сами себе ограничиваете рост статусом веб-макаки, которую можно только посадить в опенспейс на узкоспециализированную работу и до настройки серверов просто не допускать. Зато - "не должен", да...
    Ответ написан
    3 комментария
  • Почему выбирают MacBook?

    @Neonoviiwolf
    Flutter developer
    Как владелец вынужденный именно с целью разработки, то плюсы без меня опишут, но есть минусы:
    всё удобство заканчивает, как нужно выйти из экосистемы apple, даж скачать фото с андроида через кабель, уже софт отдельный нужен.
    Хорошо работает только со своим оборудованием, вот отваливается у меня монитор hdmi (на разных маках разные мониторы проверял подключённые по hdmi), отваливается клавиатура блютуз (не мака), отваливается f3 хоткей, если несколько студий запустить(на родной клаве работает без пробем), глючит мышка (кнопки меняются местами). Если повспоминать, найдётся куча крывостей.
    Если мак купить домохозяйке - будет наверно рада, если для работы, проблем хватает
    Ответ написан
  • Возможно ли устроиться джуном на удаленку за рубеж?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Нет, невозможно
    И вопрос на засыпку, какой вообще является работа на дистанционке за рубежом? Чисто черной? или договор присылают как-то почтой?

    Ну, тебе это не светит, можешь забыть про этот вопрос

    Вообще, если ты задал этот вопрос на тостере, то это уже показатель твоей профнепригодности и особенно за рубежом
    Ответ написан
    3 комментария
  • Какое направление выбрать, если не хочешь до конца жизни пилить формочки и гонять json?

    Adamos
    @Adamos
    Предпочитаете до конца жизни пилить государственную статистику так, чтобы она показывала нужные цифры?
    Чтобы не заниматься скучной работой, нужно искать интересную и самому быть интересным работодателю. Вузовские курсы могут кое-чем помочь на этом пути, но выбор конкретного курса совершенно ничего не решает. Уж поверьте инженеру-строителю, четверть века назад положившему диплом на полочку.
    Ответ написан
    7 комментариев
  • Как понять достоин ли ты более лучшей зар.платы или ещё не дорос и не надо высовываться даже?

    @vism
    DevDie,
    Интересно послушать какие задачи я должен решать, не "будучи стажёром"? Учитывая что я задачи решаю такие же, как и люди с опытом от 3 лет и больше.

    Капец я с такими намучался.
    Клиенты "помощников нанимали"
    "Решают задачи" так, что потом переделывать полностью надо
    в 10 раз дольше
    Еще и мозг выносят всякими тупыми решениями, которые обосновать пытаются и в штыки любую критику.
    Просто пипец.

    А вот по "резюме" из вопроса автор больше чем я умеет :)

    В офис надо идти и лет 5 учится у реально крутых ребят, потом фриланс уже.
    на фрилансе 95% ничего не могут сделать нормально и огромное самомнение и "опыт".
    Ответ написан
    2 комментария
  • Есть ли книги с систематизированным изучением C#?

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

    Нельзя изучать языки по роликам в ютубе!
    Ты машину водить тоже учишься по роликам в ютубе?

    Шилдт Г. Полное руководство С#4.0. Отлично пишет для новичков.

    Далее - Троелсен. Troelsen_C# 2010 and the .NET 4 Platform. Средний уровень.

    Финал - Рихтер. CLR via C#. Программирование на платформе Microsoft .NET Framework 4.0 на языке C#. Это для спецов скорее по внутренней реализации, явно не для начинающих.
    Ответ написан
    11 комментариев
  • Что можно писать для десктопа на JS?

    approximate_solution
    @approximate_solution
    JS Developer. Angular\React\Vue\Ember
    5fcf7ae55f865547842046.png

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

    Можно ли с помощью этих фреймворков написать подобное приложение для финансовых рынков на windows или mac?

    Можно, но затраченных усилий будет в разы выше, чем это реализовывалось бы на языке, уже изначально заточенным под задачи(библиотеками, и тд)
    Ответ написан
    Комментировать