Задать вопрос
  • Как поймать ошибку в 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
    DBA Team для вашего PostgreSQL?
    Чтож, зависит от того что именно вы хотите сделать.

    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 комментарий