Задать вопрос
  • Как избежать дублирования кода при создании полей форм?

    @Yan-s
    Это не проблема прогнать подходящий формат с данными элементов форм через foreach и сгенерировать так всю форму. Просто очень часто формы и их элементы должны быть заверстаны и кастомизированы не одинаково. И даже если сперва вам это не понадобится, рано или поздно такая потребность сделает всю вашу абстракцию бесполезной.

    Наверное лучшее что можно сделать в плане организации кода, это применять компоненты на фронте.
    Ответ написан
    2 комментария
  • Как изменить кодировку на PHP?

    @galliard
    Ни на какую. Первоначально твоя строка выглядела как
    \u0430\u0432\u044b\u0430\u0432\u044b\u0430
    Но ты, видимо, встроил это строку прямо в строку запроса, и mysql посчитал обратные слеши экранирующими символами и не записал их.

    А вообще это формат, которым функция json_encode кодирует русские символы, если вторым параметром не передать константу JSON_UNESCAPED_UNICODE. Чтобы исправить текущую строку, можешь раскодировать и закодировать заного

    json_encode(json_decode('"\u0430\u0432\u044b\u0430\u0432\u044b\u0430"'), JSON_UNESCAPED_UNICODE);
    Ответ написан
    4 комментария
  • React как тебя заставить при нажатии на дочерний элемент не отрабатывать onClick родительского?

    glem1337
    @glem1337
    При клике на одном из узлов DOM, событие click "всплывает" вверх по дереву до тех пор пока не достигнет корня или не будет отменено в явном виде.

    React передает в обработчик события "синтетический" объект события, который, помимо прочего имеет метод stopPropagate. Этот метод (как и его нативный аналог) останавливает дальнейшее "всплытие" события вверх по дереву DOM. Вот как можно использовать этот метод на практике:

    var Block = React.createClass({
        handleClose: function(e) {
            e.stopPropagation();
            alert('close');
        },
        handleClick: function(e) {
            alert('click');
        },
        render: function() {
            return (
                <div onClick={this.handleClick}>
                    <span>Foo Bar Baz</span>
                    <span onClick={this.handleClose}> &#215;</span>
                </div>
            );
        }
    });


    Проще говоря вам надо применить e.stopPropagation(); при клике на нужный вам элемент(лайк)
    Ссылка на вопрос на stackoverflow: https://ru.stackoverflow.com/questions/537267/reac...
    Ответ написан
    3 комментария
  • Как вывести id?

    glem1337
    @glem1337
    Ответ написан
    Комментировать
  • Как убрать полностью блок на телефоне?

    mtvphnx
    @mtvphnx
    Двигаю пиксели, играюсь со шрифтами
    А js можно использовать? Есть такая штука - https://github.com/hgoebl/mobile-detect.js
    Подключаешь:
    <script src="https://cdnjs.cloudflare.com/ajax/libs/mobile-detect/1.4.1/mobile-detect.min.js"></script>

    Пишешь скрипт, который будет навешивать css или убирать, если обнаружен мобильник.
    Выстави в инструментах разработчика мобильную версию > какой-нибудь телефон, например iphone 6 и перезагрузи страницу. Блок пропадет, независимо от ориентации экрана.
    Вот код: https://codepen.io/matvey-phoen1x/pen/eKQPag
    Ответ написан
    1 комментарий
  • Как выделить все содержимое контейнера div и скопировать в буфер обмена?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    var content = document.querySelector(".entry-content");
    var button = document.querySelector("#button");
    
    function copyToClipboard(el) {
    	var range;
    	if (document.selection) {
    		range = document.body.createTextRange();
    		range.moveToElementText(el);
    		range.select().createTextRange();
    	} else if (window.getSelection) {
    		range = document.createRange();
    		range.selectNode(el);
    		window.getSelection().addRange(range);
    	} else return;
    	
    	document.execCommand("copy");
    	
    }
    
    button.addEventListener('click', () => copyToClipboard(content));


    CodePen
    Ответ написан
    Комментировать
  • Как передать русский язык в клавиатуру чатбота?

    YardalGedal
    @YardalGedal
    yeah boy
    json.dumps(KEYBOARD_STEP_1, ensure_ascii=False).encode("utf-8")
    Ответ написан
    1 комментарий
  • Веб скраппинг,парсинг на Python?

    @vl12
    Скрэпинг - одна из наверно 4 основных тем работ на фрилансе. (Остальные - это создание вебприложений, нейросети, высшая математика или статистика - они попадаются чуть реже. Но надо знать отдельные фреймоворки. Для математики и нейросетей нужно высшее образование.)
    Заработок - в среднем 30$ за сайт, но посидеть над каждым сайтом надо будет несколько полных дней. Т.е. реально получится где-то по 1-2$/час. Почасовую на скрепинг найти сложней, если заказчик не новичок и сравнивал цены. Это при условии что вы разбираетесь в фреймворках для скрэпинга. Также учтите, что многие сайты не скрэпятся как html, ибо они динамические на JS, нужно изучать доп. фреймворки, и может стоять всякая защита. Большинство сайтов-гигантов не скрэпятся. С фейсбук сейчас вообще очень сложная ситуация.
    При этом там толпы, реально толпы, индусов, демпящих цены.
    Есть плохие заказчики, тянущие сроки. Т.е. можете работать полный день целую неделю. А то и месяц - за 20$. Минус 20% которые возьмет биржа фриланса (процент может отличаться).

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

    @Levhav
    Возьмусь за разработку проектов любой сложности.
    Я в своих проектах делаю так:
    Приложение пишем на cordova на html5 (сразу получается кросплатформеное)
    Сообщение доставляем по вебсокетам
    На сервере используем связку php+mysql для логики приложения и CppComet для доставки сообщений

    В итоге получается что требует всё это минимум работы и минимум знаний но на выходе будет web версия и мобильное приложение на обе платформы.

    Вот минимальный пример чата который можно за 15 минут закатать внутрь приложения на cordova.

    И быстродействие нормальное так как самая важная часть по доставке сообщений на C++ реализована, и в тоже время вы не тратите кучу своего времени на написание бизнес логики приложения на чём то сложнее чем javascript и php.
    Особенно такой подход хорошо идёт на фрилансе где не многие заказчики имеют бюджет на оплату нескольких месяцев работы для команды программистов которые будут писать нативные приложения под каждую из платформ.
    Ответ написан
    Комментировать
  • Как правильно организовать структуру класса?

    Если что-то попроще, но при этом более-менее ООПшное, то можно как-то так:

    class Plugin {
    
    	constructor (rawUrl, rawName) {
    		this.url = new UrlParser(rawUrl);
    		this.name = new NameParser(rawName);
    	}
    
    	doSomething () {
    		// code
    	}
    }
    
    function userCode() {
        new Plugin("example.com", "FooBar").doSomething()
    }


    Если хотите побольше DI и всего такого, но при этом не потерять лёгкость использования, то можно так:

    class Plugin {
    
    	constructor (urlParser, nameParser) {
    		this.url = urlParser;
    		this.name = nameParser;
    	}
    	
    	doSomething () {
    		// code
    	}
    
    }
    
    Plugin.init = function (url, name) {
    	return new Plugin(
    		new UrlParser(url),
    		new NameParser(name)
    	);
    }
    
    function userCode() {
    	Plugin.init("example.com", "FooBar").doSomething()
    }


    UrlParser и NameParser - это классы, которые парсят всё необходимое, а потом внутри имеют свойства для обращения к ним.

    class UrlParser {
    
    	constructor (urlString) {
    		var result = this.matchUrlStrign(urlString)
    		
    		this.anchor = result[0];
    		this.path   = result[1];
    		// etc
    	}
    }


    Соответственно, в плагине используете как-то так:
    this.url.anchor
    Ответ написан
    3 комментария
  • Как взять рандомный элемент массива?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Как извлечь случайный элемент массивоподобного объекта:

    const randomItem = arr => arr[Math.random() * arr.length | 0];

    Извлекаем:

    // одно значение
    const randomName = randomItem(arr_names);
    
    // или сразу несколько
    const randomNames = Array.from(
      { length: 5 },
      randomItem.bind(null, arr_names)
    );
    
    // работать можно не только с массивами, но и, например, со строками
    const randomChar = randomItem('abcdefg');
    
    // и HTMLCollection тоже будет как надо обработана
    const randomImage = randomItem(document.images);
    Ответ написан
    Комментировать
  • Как установить курсор после выделения?

    lidacriss
    @lidacriss
    wtf
    Ответ написан
    Комментировать
  • Как сделать закрытие консоли если будет нажатие на кнопку?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Многопоточный вариант
    import time
    from threading import Thread
    
    run = True
    
    def ticker():
        while run:
            time.sleep(1)
            print('Тик')
            time.sleep(1)
            print('Так')
    
    
    # Запуск функции ticker в отдельном потоке.
    # Параметр daemon=True нужен чтобы
    # дочерний поток умирал вместе с основным
    # в случае внештатного выхода.
    Thread(target=ticker, daemon=True).start()
    
    while run:
        command = input('Для выхода введите "exit"\n')
        if command.lower() == 'exit':
            run = False

    Асинхронный вариант
    import asyncio
    import signal
    
    def shutdown():
        # Отменяем все задачи, кроме вызвавшей
        for task in asyncio.Task.all_tasks():
            if task is not asyncio.tasks.Task.current_task():
                task.cancel()
    
    
    async def user_io():
        loop = asyncio.get_event_loop()
        # Ждём действия от пользователя
        while True:
            # Запускаем input() в отдельном потоке и ждём его завершения
            command = await loop.run_in_executor(None, input, 'Для выхода введите "exit"\n')
            if command.lower() == 'exit':
                shutdown() # Отменяем все задачи
                break      # и выходим из цикла
    
    
    # Сопрограмма, выполняемая параллельно с ожиданием пользовательского ввода
    async def task_manager():
        counter = 0
        while True:
            try:
                await asyncio.sleep(1)
            except asyncio.CancelledError:
                break # Выходим из цикла, если задачу отменили
            counter += 1
            print("I'm a task manager {}!".format(counter))
    
    
    if __name__ == '__main__':
        # Устанавливаем обработчик Ctrl+C
        signal.signal(signal.SIGINT, lambda n, f: shutdown())
    
        # Запускаем цикл событий
        loop = asyncio.get_event_loop()
        # Задача ждущая завершения сопрограм user_io и task_manager
        main_task = asyncio.wait([user_io(), task_manager()])
        try:
            loop.run_until_complete(main_task)
        except asyncio.CancelledError:
            # Позволяем main_task завершиться
            loop.run_until_complete(main_task)
        loop.close()
    Ответ написан
    2 комментария
  • Для чего в PyQt указывается ObjectName?

    @zaswed
    например в css стилях
    QPushButton#exit_button {
        border-image: url(resources/icons/64/exit.png);
    }
    QPushButton#config_button {
        border-image: url(resources/icons/64/config.png);
    }


    config_button и exit_button имена объектов
    Ответ написан
    1 комментарий
  • Как установить PyQt5 для Python 3.6 (windows)?

    x67
    @x67
    попробуй использоватьpip3 install pyqt5
    Ну и неплохо бы читать гайды перед установкой
    Ответ написан
    5 комментариев
  • Как установить PyQt5 для Python 3.6 (windows)?

    @Dim_M
    Всем глубокоуважаемый привет. Сам долго мучился с этим вопросом.
    С начало
    pip3 install pyqt5
    потом
    pip install PyQt5-tools
    ищешь в C:\Python36\Lib\site-packages\pyqt5-tools ярлык designer.exe
    Рисуешь окна и кнопки в designer.
    Сохраняешь в С:\ test.ui и командой С:/test.ui -o С:/test.py конвертируешь питон
    или батник сделать.
    PS
    в pycharm можно настроить открытие designer.exe
    Ответ написан
    Комментировать
  • Кириллица и кодировка в MS-DOS QBasic?

    NeiroNx
    @NeiroNx
    Программист
    Там кодировка CP866. Лишь некоторые блокноты способны с ней работать - попробуйте Notepad++
    в консоли перез дапуском программы можно сменить кодировку на CP1251:
    mode con codepage select=1251
    Имхо изучали бы лучше питон - он так же прост.
    Ответ написан
    2 комментария
  • Как отсортировать массив, если часть значений - undefined?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Отсортировать существующий массив:

    arr.sort(({ date: a }, { date: b }) => !a ? 1 : !b ? -1 : a - b);
    // или
    arr.sort((a, b) => (a.date || Infinity) - (b.date || Infinity));

    Собрать отсортированный новый:

    const sortedArr = arr
      .map(n => [ n, n.hasOwnProperty('date') ? n.date : Infinity ])
      .sort((a, b) => a[1] - b[1])
      .map(n => n[0]);
    Ответ написан
    2 комментария
  • Как запустить HTML5 валидацию формы перед AJAX?

    Audiophile
    @Audiophile Автор вопроса
    Наконец-то нашёл более-менее простой способ.

    Нужно прописать нечто такое перед инструкциями в tryToLogin():

    if(!$('.login-form')[0].checkValidity()) {
            $('.login-form__submit').off( "click" ).click().click(function (e) {
                e.preventDefault();
                tryToLogin();
            });
            return false;
        }


    Т.е. если браузер сообщает, что проверка не пройдена, мы анбиндим функцию с клика на сабмит, кликаем сабмит (браузер покажет нативные сообщения), и сразу же биндим функцию обратно.
    Ответ написан
    4 комментария
  • .net visual basic удалить значение из массива?

    @dmitryKovalskiy
    программист средней руки
    Array.Copy(sourceArray,1,destinationArray,0,sourceArray.Length-1)

    Примерно так можно
    Ответ написан
    Комментировать