• Оправдано ли использование TypeScript для больших проектов?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Именно в больших проектах его применение более чем оправдано.
    Ответ написан
    1 комментарий
  • Как оплатить зарубежные сервисы, если Visa, Mastercard и PayPal приостановили деятельность?

    itsplus
    @itsplus
    C#/C++/Java Developer
    Я так понимаю, единственный пока рабочий метод - надо куда-то вылететь, оформить долгосрочную аренду, и платежи ком.услуг на свое имя, оформить счет в зарубежном банке, или wise.com, payoneer.com - пройдя валидацию по новому адресу.
    Положить туда денег с запасом и вернуться.
    А можно и не возвращаться.
    Ответ написан
    3 комментария
  • Имеет ли смысл открыть счёт в банке вне РФ для фриланса?

    alexgp13
    @alexgp13
    Руководитель ИТ-проектов
    Вы раскрыли слишком мало информации о себе, чтобы дать дельный совет (который, как верно заметили, еще и никто не знает).

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

    Но рынок фриланса есть не только на Западе, внутренний рынок тоже большой, и я знаю много людей, которые работают только с российскими клиентами. Конечно, в таком случае открывать счет в Грузии будет глупостью.

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

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

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

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Очевидно, что любая функция может использовать внешние переменные. Причём, это верно практически для любого ЯП.

    Также локальные переменные внутри функции живут только в интервале времени, пока функция выполняется. И как только она завершает работу ("}" или "return"), локальные переменные (на стеке) уничтожаются.

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

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

    Суть замыкания в том, что возникает как бы петля на стеке, запрещающая удалять временные переменные, на которые всё ещё ссылаются из вышестоящей области видимости. Это возможно, только если ЯП поддерживает замыкания, иначе такое будет считаться просто ошибкой.

    Так что в вашем примере и правда нет замыкания.
    Ответ написан
  • Почему оператор не должен менять значение своих параметров?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Ты такой пишешь в коде
    6 = 4 + 2
    А у тебя бац и 2 превратилось в 6, не иначе магия.
    Ответ написан
    Комментировать
  • Как telegra.ph понимает, что я - это я?

    @psy667
    Node.js backend developer
    Там используются HttpOnly cookie. То есть сами cookie есть, но в браузере не видны, также к ним нельзя получить доступ из клиентского кода.
    В запросе /check можно увидеть, что в response headers они устанавливаются.
    Set-Cookie: tph_uuid=<token>; expires=Wed, 08 Feb 2023 05:42:55 GMT; path=/; secure; HttpOnly
    Ответ написан
    1 комментарий
  • Как исправить ошибку "To run this application, you must install .NET Core"?

    vabka
    @vabka Куратор тега .NET
    Токсичный шарпист
    Есть несколько вариантов:
    1. Использовать .net 6 - он умеет тащить за собой не весь рантайм, а только то что нужно для работы.
    По крайней мере Hello World в 12мб получалось уместить (single file + self contained + assembly trimming)
    2. Поставлять программу вместе со скриптом, который проверит, установлен ли .net runtime и установит его сам, скачав из интернета
    3. Забить и оставить как есть (засунуть в архив)
    4. Использовать .NET Framework, который идёт на винде из коробки, но имхо - это шаг назад по всем параметрам, и так делать не стоит.

    UPD: Hello world таки весит 12 мегабайт
    Ответ написан
    6 комментариев
  • Как найти самую длинную последовательность значений?

    rozhnev
    @rozhnev
    Fullstack programmer, DBA, медленно, дорого
    Достаточно не тривиально:
    with s as (
      select 
     	* ,
     	row_number() over (partition by name order by event_time asc) - 
     	row_number() over (partition by name, event order by event_time asc) gr
      from t
    ) select 
    	name, event, count(*) 
      from s
      group by name, event, gr
      order by count desc
      limit 1;


    PostgreSQL fiddle
    Ответ написан
    2 комментария
  • Сколько по времени займёт создание Базы данных?

    @rPman
    Наискорейший способ для новичка для создания базы данных и десктопного windows приложения по работе с этой базой данных - это microsoft visual studio, .net windows forms (при использовании DataSource), а так как тебе известен язык c++ то можно сразу использовать c++.net или c# (они похоже синтаксически, а так как фреймворк так или иначе тут .net то всеравно на его использование переучиваться)
    да простят меня хейтеры
    Конечно можно и WFP но речь шла про новичка, скорость и удобство. С winforms я работал достаточно давно и тогда это было нереально удобно круто быстро просто... недавно я запустил последнюю версию студии, и проваливаясь почти на каждом шагу в ошибки и косяки понял что от былого удобства ничего не осталось (у меня выдавало ошибки на hello world примере из документации на специально начистую установленной системе и студии), например банально на уровне интерфейса красиво забиндить данные базы данных на элементы формы не получится, везде придется писать, копаться в документации и разбираться почему оно в очередной раз заглючило на пустом месте.

    Базу данных можно создавать тут же или в какой-либо другой программе проектирования базы данных. Я помню мне хватало бесплатной версии dbforge (есть и для других баз, есть драйвер даже для sqlite), в принципе программ по созданию баз данных в мышевозекательном стиле полно, с диаграммами и построителями запросов.

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

    Sgr_A
    @Sgr_A
    Не начинать. Идти в другие языки.
    Ответ написан
    Комментировать
  • Какова правда в работе и обучении будущего ИБшника?

    CityCat4
    @CityCat4 Куратор тега Информационная безопасность
    Внимание! Изменился адрес почты!
    80% работы и обучения - рутина, бесконечная и муторная работа с бумажками, зарплата колеблется около 20к в районах,

    Не бывает "средней температуры по больнице". ИБ - это огромная область, в которой десятки направлений, которые делятся еще на десятки поднаправлений.
    Все очень зависит от того, где работаешь - в одного в конторе в сотню-другую рыл, в небольшом отделе в конторе человек на 500 или в Сбербанке, например.
    Чем меньше контора - тем ширше круг обязанностей, чем больше - тем уже. В небольшой конторе ты можешь быть не очень связан регламентами, тем более, что половину из них тебе же и писать. В Сбере у тебя и 100% времени может уйти на регламенты.
    Со стороны в ИБ можно попасть только в контору типа Сбера - где ты долго будешь расти внутри подразделения. В небольшой конторе рыл на сотню-две - ИБ-шник (если он вообще есть) как правило один, максимум два и занимается он всем и имеет доступ всюду и ждут от него решения всего, в том числе весьма неприятных вопросов (например просмотреть сто тысяч (это не оборот речи - их реально было сто тысяч!) фотографий и удалить компроментирующие определенного человека).
    Работу админа он должен знать лучще админа - потому что ему их контролировать приходится.
    Работу юриста - в определенной области законодательства - не хуже юриста
    Работу психолога - не хуже психолога средней руки (ИБ это далеко не всегда про компы. ИБ зачастую про людей)

    Здесь нет никакой романтики. Здесь нет никаких эмоций - только суровая безжалостная правда, которая крошит иллюзии безжалостно, когда ты видишь на оперативном мониторе СМП, что девочка с ресепшн, о кторой ты втайне мечтаешь, переписывается с мальчиком из продаванов, и при этом матерится как сапожник и собирается отдаться за покатушки на тачке...
    Это скучная, рутинная работа, где много микротиков (или цисок, или даже фортигейта), много конфигов прокси и правил iptables, много логов и их анализа, много СМП/DLP и никакой хакерской романтики
    Ответ написан
    2 комментария
  • Как понять микросервисы?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Микросервисы пишут не для того, чтобы просто переделать API.

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

    А уже исходя из этой точки зрения:

    1. Если у каждого сервиса есть свой api, зачем API Gateway (точка входа), можно же на nginx сделать обращение по location на нужный api?

    А если нужно много экземпляров, будете одним nginx-ом раскидывать по 10 локейшенам? Микросервисы в современном мире предполагается запускать в докере на собственном легковесном веб-сервере (типа Jetty), поднимать нужное количество экземпляров и балансировать чем-нибудь на входе, но не по локейшенам.

    2. Стоит ли использовать RabbitMQ для общения между сервисами? Правильно ли понимаю, что точка входа на ноде, посылает запрос в раббит и ждет от него же ответ и отдает клиенту?

    РаббитMQ или kafka позволяют множеству экземпляров вашего сервиса обрабатывать сообщения, с гарантией того, что из очереди ничего не пропадет, и если какой-то экземпляр сдохнет, то этот запрос обработает другой экземпляр. Именно ждать ответ наверное не самое правильное, но это можно смотреть как вам удобнее - периодически опрашивать очередь, или настроить чтобы message service сам пушил по событию.

    3. Например делаем микросервис по авторизации пользователя и регистрации. У него должна быть своя база данных? Как например в админке обращаться к пользователям, чтобы их добавить или заблокировать, я должен запрашивать пользователей с микросервиса? Получается микросервис отвечающий за пользователей CRUD + Регистрация, авторизация, сброс пароля?

    Это как вы хотите. Если у вас очень много пользователей и авторизация тормозит, но можно сделать микросервис с авторизацией, сделать кластер базы данных с репликацией. Дальше можете балансировать пользователей и там уже решать как их раскидывать. Или база мощная и все экземпляры могут работать с кластером. Или делите базу на части, и раскидываете пользователей по алфавиту (база юзеров от A* до H*, база юзеров от I* до M*, по региону или как вам нравится).

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

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

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Невероятно, но я разгадал в чём проблема.
    Проблема кроется в том, что вы используете класс Array
    public static Array Values { get => ValuesArray; }
    Когда вы используете Array внутри foreach, то с ним происходит работа как с System.Collections.IEnumerable (не Generic).
    Тоесть каст будет происходить не DirEnum->Dir, а Object->Dir
    Как доказательство, вот кусочек IL:
    IL_000e: callvirt     instance object [System.Runtime]System.Collections.IEnumerator::get_Current()
    IL_0013: castclass    Dir

    Более упрощённо можно повторить эту проблему, если сделать так:
    DirEnum a = DirEnum.Up;
    object box = x;
    Dir y = (Dir) box; // Казалось бы, у нас есть оператор DirEnum->Dir, но вызываться будет castClass, а не переопределённый оператор

    Если заменить Array на IReadOnlyCollection<DirEnum>, то всё будет ок.
    Ну или если вместо Dir в foreach взять DirEnum

    PS:
    Суффиксы Enum и Array у имён нужны. Лучше бы назавали DirEnum - Direction, Dir - DirectionBox, а ValuesArray - allValues, это кстати тоже не нужно, тк есть метод Enum.GetValues
    Ответ написан
    1 комментарий
  • Что за приложение выполняется время от времени (RemoteFXvGPUDisablement)?

    Slayer_nn
    @Slayer_nn
    Гугол, памаги!
    Vmware не при чем (у меня его нет, например. Как и других виртуалок)
    RemoteFXvGPUDisablement у меня запускался и без него. Может возникать рандомно, например при смене часов и часовового пояса вручную (хотя может и совпало)
    Закрывает какую-то дыру в безопасности
    Что его в вызывает можете посмотреть в журнале
    Ответ написан
    Комментировать
  • Как найти самый новый файл через bat?

    @res2001
    Developer, ex-admin
    В вашем примере не законченная команда. В окончательном виде будет выглядеть примерно так:
    set "filename="
    for /f %%i in ('dir /b /T:A /A:-D /O:-D *.xls') do (
    set "filename=%%~i"
    goto:finloop
    )
    :finloop
    echo.%filename%

    Все построено на умении команды dir сортировать файлы с помощью опций /o и /t. А дальше просто берется первая строка вывода dir, сохраняется в переменную, в конце переменная выводится на экран.
    Ответ написан
    Комментировать
  • Как сгенерировать QR код для чека согласно требованиям налоговой?

    @Bergi22
    Возможно не совсем по теме, но мне нужно было сформировать просто qr-код. Просто в строчку в любой генератор штрих кодов: t=20180311T150100&s=53.00&fn=871000
    0100603283&i=51219&fp=408618133&n=1
    где, t=ГГГГММДДTЧЧММСС (буква T между ДД и ЧЧ пишем на английском, если секунд нет просто пишем 00),
    s=₽₽.Коп,
    fn=16цифр ФН( номер фискального накопителя),
    i=ФД (номер фискального документа)
    n=ФПД (фискальный признак документа)
    n= тип системы налогообложения (0-ОСН,1-УСН Доход,2-УСН Доход-Расход, 3-ЕНВД, 4-ЕСН, 5-Патент) может кому пригодится.
    Ответ написан
    1 комментарий
  • Что такое normaliz.dll?

    @Mercury13
    Программист на «си с крестами» и не только
    Нормализация Юникода.
    Обычно находится в Windows\System32 (Windows\SysWOW64).
    Официальный сайт не держит библиотек cURL, он только даёт ссылки на чужие сборки. cURL (или OpenSSL) использует VC2008; вы явно скачали версию НЕ для XP. Ничего, VS2008 Redistributable можно скачать тут.
    https://www.microsoft.com/en-us/download/details.a...

    Я специально искал и нашёл сборку cURL/OpenSSL, которая не требует ничего необычного. Мы программисты, ставим кучу софта — а у одного бета-тестера не прокатило, т.к. на его рабочем ноутбуке не было VS2013, приблудил с OpenSSL.
    Ответ написан
    Комментировать