• Как поймать ошибку в NodeJS?

    sasha-hohloma
    @sasha-hohloma Автор вопроса
    Fullstack Developer
    Проблема оказалась внутри библиотеки SocksProxyAgent. Уже не помню где читал, но где-то на GitHub писали, что такая ошибка вываливается как uncaught, потому что не висит обработчик на событии ошибки для tls.connect.
    В итоге исправил
    return tls.connect({
        ...omit(opts, 'host', 'hostname', 'path', 'port'),
        socket,
        servername
    });


    На следующий код
    const tlsConnection = tls.connect({
        ...omit(opts, 'host', 'hostname', 'path', 'port'),
        socket,
        servername
    });
    tlsConnection.on('error', () => {
        return null;
    });
    return tlsConnection;


    Возможно имеет смысл ещё покопаться с библиотекой в поисках более изящного решения. Пока что не работает даже если выкидывать ошибку через throw new Error(). Если найду другое решение, отпишу в комменты
    Ответ написан
    Комментировать
  • Как выполнять функцию python каждый день в определенное время?

    MaxLevs
    @MaxLevs
    Используя стандартный модуль threading.
    Пример
    from time import sleep, time
    from functools import wraps
    
    
    def mult_threading(func):
         """Декоратор для запуска функции в отдельном потоке"""
         @wraps(func) 
         def wrapper(*args_, **kwargs_): 
             import threading 
             func_thread = threading.Thread(target=func,  
                                            args=tuple(args_),  
                                            kwargs=kwargs_) 
             func_thread.start()
             return func_thread 
         return wrapper
    
    
    #  Сразу делаем функцию многопоточной
    @mult_threading 
    def some_func(x, y, name="Petia", df=None, *args, **kwargs): 
         sleep(5) #  Тут мы чего-то доолго ждем / вычисляем / etc
         print("X = %s; Y = %s; Name=%s; df=%s" % (x, y, name, df)) 
         print("Another args:", args, kwargs)
    
    
    #  ==Проверяем работу==
    #  Стартуем нашу долгоиграющую функцию
    some_func(4, 7, df=11, 21, clone="SomeClone")
    
    #  Занимаемся очень важными делами
    for Z in range(25): 
        print(Z)
        sleep(0.2)


    Результат
    5c46b2b44f46b621492560.gif
    Ответ написан
    3 комментария
  • Счетчик скачиваний js + cookie возможно?

    hzzzzl
    @hzzzzl
    Возможно сделать счетчик скачиваний (кликов) по ссылке на js? Чтобы записывался в куки на 5 дней.

    то есть чтобы юзеру показывалось значение из куки, сколько раз лично он что-то нажал? да, можно

    если же надо показывать сколько раз все юзеры сайта что-то нажали/увидели/скачали, то в куки писать незачем, надо на сервере сохранять в базу данных
    Ответ написан
    3 комментария
  • Переходить ли с windows 10 на linux?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    Ну так. Сижу на линуксе уже лет 20 (да-да, я стар, как говно мамонта, но не совсем).
    1) Рекомендую установить линукс второй системой, благо это не вызовет какой-то диссонанс.
    2) Попробовать в нем поработать. Будет дискомфорт, сильный. Придется поменять привычки, изучить командную строку и найти альтернативные программы.
    3) Конечно, 4Гб для комфортно работы маловато, но достаточно при умелом использовании.
    Далее.

    Если вы разработчик, то в линуксе все для этого есть, начиная от кучи всяких IDE (благо, они практически такие же, как и на винде), и заканчивая docker/libvirt. Все вместе значительно облегчает разработку. С примесью командной строки, а еще и например с таловым менеджером типа I3, производительность будет очень высокой, правда со временем. Уходить на винду обратно - морально себя ломать.

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

    За что я люблю линукс.
    - все на кончике пальцев, в прямом смысле слова.
    - куча рабочих столов (как и в OSX), я до сих пор не пойму, почему майкрософт это никак не внедрит в свой GUI, причем оболочки типа HP Launch для еще windows 3.11 были в 1995 году.
    - все инструменты разработки создавались изначально под командную строку и все из мира unix
    - командную строку вообще практически нечем заменить, и 40 лет развития unix сделали ее просто волшебной.
    - куча редакторов для простого текста, начиная от VI/Emacs, и заканчивая тем же самым gedit. все это с подсветкой синтаксиса, автокомплитом и прочими плюшками
    - все идет из коробки, не нужно ползать по сайтам, скачивать сомнительные программы
    - отсутствие вирусов и безопасность
    - виртуализация типа docker/libvirt, развернуть.попробовать новую систему - 5-10 минут, даже винду.
    - ну и подготовка документации, обожаю pandoc и текстовый markdown. На выходе красивые PDF, которые можно хранить под управлением git/mercurial.
    - для картинок использую inkscape.

    Да, у меня еще есть парочка макбуков и аймак, но этот текст пишу с ультрабука асус s. OSX в плане юзабилити немного лучше, но в ней нет I3.
    Ответ написан
    1 комментарий
  • Как получить текст элемента при клике в react?

    hzzzzl
    @hzzzzl
    onClick={ (e) => console.log(e.target.innerText) }

    это же всё обычный яваскрипт
    Ответ написан
    1 комментарий
  • Как сделать фото на весь экран?

    @kur4chyt
    Качественный говнокод от производителя
    если вопрос в названии, то думаю вот:
    Ответ написан
    Комментировать
  • Почему объекты по-разному сравниваются?

    dimovich85
    @dimovich85 Куратор тега JavaScript
    https://u-academy.net/
    Потому что объекты сравниваются по ссылкам, если две ссылки ведут на один и тот же объект, то получаете true, иначе - false. Чтоб в первом и втором случае было true надо серьезно переработать код, так как он возвращает {...} каждый вызов функции создает новый объект, и возвращает. Использование this внутри функций A и B не оправдано, создает мусор. При сравнении >= js пытается привести оба операнда к числу, и если память не изменяет, сначала ищет метод toValueOf, а если его нет - приводит к строкам, с помощью метода toString, в Вашем случае есть метод toString, и так как объекты с одинаковыми значениями полей age >= дает true, так как из объектов вызывается неявно toString.
    Ответ написан
    Комментировать
  • Как сделать проверку доступа в базе данных?

    notiv-nt
    @notiv-nt
    Как ваше ничего? Да, моё тоже
    select dostuplvl from dostups where vkid = ${from_id}

    dostup facepalm.jpg, ну эт ладно
    выбираете все записи которые соответствуют id человека, и проверяете, на каждую если их много (?) или если вернётся одна, то тут обычным if
    Ответ написан
    5 комментариев
  • Практическое использование схем в Postgresql - когда они нужны?

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

    Важно понимать, что различные БД плохо подходят для логического группирования, т.к. разбиение по базам данных нужно скорее для администраторов, а не для приложений. Плюс, в большинстве СУБД, где существует понятие схемы, возможно ставить внешние ключи на таблицы в другой схеме, но нельзя на таблицы в другой БД. Иными словами, отдельные БД удобно создавать тогда, когда вы разделяете данные абсолютно не связанных приложений или сервисов. Например, складского учета и форума поддержки пользователей. С другой стороны, если вы хотите логически разделить таблицы в соответствии с компонентами одного приложения (например, корпоративный портал: 4 таблицы для поддержки авторизации, 10 таблиц для поддержки форума, еще 5 для чата со службой поддержки или отделом продаж) - то именно схемы будут удобным механизмом для этого.

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

    А что будет если несколько юзеров будут на одну public-схему коннектиться?

    Помимо того, что схема - это пространство имен, в большинстве СУБД это еще и пространство безопасности. Даже в рамках одного многокомпонентного приложения имеет смысл ставить границы безопасности для ограничения возможных потерь и разрушений в случае компрометации одного из компонент.

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

    то есть при работе в постгре предпочтительнее вместо отдельных баз делать разные схемы в одной

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

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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    IMHO, самый простой вариант - временны́е слоты по 15 или 30 минут и SQL.
    Ответ написан
    3 комментария
  • Как сравнить слово из БД и слово из переменной?

    shabelski89
    @shabelski89
    engineer
    Допустим ты прочитаешь основы по python и sql.
    И бац, делаешь запрос в БД и в запросе указываешь like твоя переменная.
    Ответ написан
    Комментировать
  • Как откатиться к предыдущей версии Windows?

    mindtester
    @mindtester Куратор тега Windows
    http://iczin.su/hexagram_48
    Егор Тельнов, мнда.. конфуз.. ни когда не изучал контент windows.old
    но на сколько я помню/понимаю:
    - там нет пользовательских данных. а это важно. очень важно
    - воспользоваться windows.old для восстановления, может только сама винда. в смысле 10я. при условии, что вы накатили новую версию, а потом передумали, и решили откатить
    - если вы после всего этого, сделали чистую установку...

    можете смело удалять windows.old как подсказывает hint000, проверьте наличие пользовательских данных. это самое важно что там может быть. про откат системы выше, а про пользовательские данные - в каменте hint000, собственно я так же их сохраняю/восстанавливаю, и не особо запариваюсь над самой виндой. ее обычно проще переустановить чем почистить. а все данные в обычных для этого папках профиля. и весь пользовательский тюнинг софта, обычно в AppData. реже бывают случаи ценной и хитрой привязки/активации софта.. но это реже ))
    Ответ написан
    3 комментария
  • Как сделать, чтобы useEffect не срабатывал бесконечное кол-во раз?

    Что бы useEffect сработал один раз, только при активаций.
    То как вы и сказали нужно передать пустой массив вторым аргументом.

    useEffect(() => {
      axios
        .get("http://localhost:3001/api/score")
        .then(response => {
          if (response.data.ok) {
              dispatchDataToState(response.data);
          } else throw new Error("Server side error");
        })
        .catch(err => console.error(err));
    }, []);


    Думайте о втором аргументе как о зависимости для этого эффекта. Если одна из зависимостей изменилась с прошлого раза, эффект запустится снова.

    Предупреждение как таковой не влияет на работу кода и функционал будет работать.

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

    Или можно просто отключить предупреждение
    useEffect(() => {
      // code
    
      // eslint-disable-next-line react-hooks/exhaustive-deps
    }, []);
    Ответ написан
    2 комментария
  • Как сделать анимацию закрытия модального окна?

    hzzzzl
    @hzzzzl
    const fadeoutModal = () => {
      // через useState или еще как-то убираем класс visible
      // чтобы произошла анимация
    
      // когда анимация закончится, тогда убираем модал в родительском компоненте
      setTimeout( props.setModalHidden, 300 )
    }
    
    .....
    
    
    <div
                className={classnames("modal", "visible", "fadeIn")}
                onClick={fadeoutModal}
            >
    Ответ написан
    1 комментарий
  • Как отправить JSON на PHP через POST?

    @OVK2015
    Как-то так:
    js:
    var someObj = {a:1,b:2};
    var xhr = new XMLHttpRequest();			
    xhr.open('POST', 'scratch.php');
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');			
    xhr.send('param=' + JSON.stringify(someObj));
    xhr.onreadystatechange = function()
    {
    	if (this.readyState == 4) 
    	{
    		if (this.status == 200)
    		{
    			console.log(xhr.responseText);
    		}
    		else
    		{
    			console.log('ajax error');
    		}
    	}
    };


    php:
    $param = json_decode($_REQUEST["param"]);
    $result = "Результат: a = ".$param->a."; b = ".$param->b;
    die($result);
    Ответ написан
    Комментировать
  • Какие материалы посоветуете для изучения javaFX?

    @striver
    Я бы еще добавил вот этот плейлист.
    https://www.youtube.com/watch?v=9YrmON6nlEw&list=P...
    Ответ написан
    Комментировать
  • Сallback query срабатывает несколько раз?

    Negezor
    @Negezor
    Senior Shaurma Developer
    Вы должны удалить обработчик из функции startEarn, так как обработчик будет добавляется каждый её вызов
    bot.on('callback_query', (query) => {
            workWithQuery(query, msg, randomChannel)
        });

    Вам нужно добавить его один раз и уже потом обрабатывать.
    Ответ написан
    1 комментарий
  • Как обновить значение в стейте используя React Hooks?

    @curious-101
    Frontend developer
    Линтер ругается на useNewPost, так как это не хук, то его стоит переименовать, например, в setNewPost
    Ответ написан
    Комментировать
  • Какие материалы посоветуете для изучения javaFX?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Если интересуют видеокурсы, то можете поискать в гугл
    Тимур Батыршинов javafx
    https://www.youtube.com/watch?v=TC1IXqtrrOw&list=P...

    https://javabegin.ru/
    или вот еще видеоуроки...
    https://www.youtube.com/watch?v=IMYi0bbOKvw&list=P...
    https://www.youtube.com/watch?v=Jx0DRIlm7Yo

    Можете также глянуть курсы на udemy
    Ответ написан
    Комментировать
  • Как создать тип перечисления?

    Melkij
    @Melkij
    PostgreSQL DBA
    Чтож, зависит от того что именно вы хотите сделать.

    PostgreSQL позволяет сделать полностью собственную реализацию типа данных. Которая будет себя вести так как вы захотите - но всю эту логику вы должны разработать сами на C. Потому у create type и довольно объёмная документация.

    range типы - это диапазоны. Например, дата бронирования номера гостиницы. Таблица бронирований, одно поле с диапазоном дат tsrange и exclude constraint - всё, база проконтролирует, что даты бронирования не пересекаются.

    перечисления - это обычно подразумеваются enum. Но для вашей задачи это не подходит. enum - это фиксированный набор из строк.

    что-то похожее на штатные типы данных, но с ограничениями - вы хотели найти не create type, а create domain:
    CREATE DOMAIN smallint_between_10and200 AS smallint CHECK(value >= 10 and value < 200);

    Всё, теперь в таблицах вы можете использовать тип данных smallint_between_10and200, в который тем не менее записать что-то не из диапазона 10..200 будет невозможно.
    Ответ написан
    1 комментарий