• Как подобрать библиотеки для имитации клика?

    @alfangur
    у меня была задача:
    - получать скриншоты окон в виндовс
    - передавать события мыши и клавиатуры в окна
    - получать информацию об окнах

    основная разработка была на нодажс, мост к винапи делал на отдельном приложении написаном на делфи, мост работает по стандартному вводу/выводу в формате джсон

    под виндовс можно расширить функционал, под остальные ОС лежит заглушка так как с устройством остальных не разбирался да и потребность в других ОС мало у кого есть

    если интересно могу поделиться
    Ответ написан
    3 комментария
  • Выбор варианта из условия, с двойной переменной?

    @alfangur
    при "выборе" вариантов кладете в стэк данные для расчета.
    при изменении "выбора" удаляете не нужный, кладете новый в стэк.
    после все считаете.
    Ответ написан
    Комментировать
  • Как вставить iframe только 1 раз?

    @alfangur
    при создании своего iframe вам необходимо определить что window является главным а не дополнительным iframe. на странице с iframe's можно определить является ли он iframe следующим кодом
    if (window && window.top === window) {
    	// основная страница окна
    } else {
    	// iframe

    сработает ли это в расширениях, проверяйте. окончательное решение будет близко к этому.
    Ответ написан
    1 комментарий
  • Подключение style.css в javascript файле?

    @alfangur
    да можно,
    spoiler
    let head = window.document.getElementsByTagName('head')[0]
    
    function includeCSS(aFile, aRel){
    	let style = window.document.createElement('link')
    	style.href = aFile
    	style.rel = aRel || 'stylesheet'
    	head.appendChild(style)
    }
    дальше сами думайте как автоматизировать процесс.
    Ответ написан
    6 комментариев
  • Система для ведения проектов?

    @alfangur
    как альтернативу Trello рекомендую YouGile.
    в YouGile добавлено пару сущностей (Компания, Проект) что дает лучше структурировать проект.
    самой главной фишкой YG, исполнение твоих скриптов в компании, пишешь скрипт на JS, загружаешь в систему и при каждом входе пользователя в компанию он выполняется. У них неплохой API для работы JS.
    Советую познакомится с этой системой, хотя бы для сравнения.

    я для себя сделал пару плагинов:
    - отменяющий создание досок листов со стандартными названиями, вместо этого создаю свою структуру в каждую доску.
    - если в названии есть определенные слова (#TASKS, #PROJECT), то внутри создается удобная структура досок и листов для работы.
    Ответ написан
    Комментировать
  • Какой ноутбук взять для веб разработки + ИБ?

    @alfangur
    использую Dell Latitude 5480 (i5-7440HQ, 32GB, 930MX), доволен как слон.

    было две проблемки:
    - клавиатура (тактильный джойстик в одно направление медленнее работал, и доп клавиши мыши просели)
    - писк из корпуса (под нагрузкой из корпуса доносился писк с разной частотой)
    обратился в службу поддержки, объяснил, приняли заявку, взяли данные.
    итог:
    - через 4 дня приехал домой инженер (Санкт-Петербург)
    - за 40 минут заменил материнскую плату и блок клавиатуры
    - уехал

    от инженера узнал, что его сосед в офисе занимается MSI и при ремонте очередного ноутбука ругается как сапожник.
    от себя про MSI: пришлось оказать помощь человеку с мелким ремонтом ноутбука GE70, что бы его полностью разобрать пришлось снимать систему охлаждения, под трубками был один винт, клавиатура с завода была приклеена на двухсторонний скотч очень хорошего качества, клавиатура снималась с трех этажным матом.
    Ответ написан
  • Как добавить значение в массив jsonb postgresql 9.6?

    @alfangur
    в вашем случае, в случае работы с объектом можно пойти таким путем:

    DO
    $$
    DECLARE
    objectOrigin jsonb;
    objectModingCount jsonb;
    objectModingCraft jsonb;
    arrayCraft jsonb;
    BEGIN
    objectOrigin = '{"craft":[], "count":0}'::jsonb;
    
    arrayCraft = objectgetvaluearray(objectOrigin, 'craft', '[]');
    arrayCraft = arraypushstring(arrayCraft, 'string');
    arrayCraft = arraypushnumber(arrayCraft, '1234567890');
    arrayCraft = arraypushboolean(arrayCraft, 'true');
    arrayCraft = arraypushobject(arrayCraft, '{}');
    arrayCraft = arraypusharray(arrayCraft, '[]');
    
    objectModingCount = objectsetvaluenumber(objectModingCount, 'count', 2);
    objectModingCraft = objectsetvaluearray(objectModingCraft, 'craft', arrayCraft);
    
    objectOrigin = objectOrigin || objectModingCount || objectModingCraft;
    RAISE NOTICE '%', objectOrigin;
    END;
    $$
    LANGUAGE plpgsql;

    NOTICE: {"count": 2, "craft": ["string", 1234567890, true, {}, []]}
    CONTEXT: PL/pgSQL function inline_code_block line 21 at RAISE
    результат запроса (1 строка) отброшен.

    Query returned successfully with no result in 18 msec.


    objectgetvaluearray, arraypushstring, arraypushnumber, arraypushboolean, arraypushobject, arraypusharray, objectsetvaluenumber, objectsetvaluearray - это мои обертки над стандартными функциями (устал в коде вечно приводить к типу и всякие скобки и тире писать), обычные getters и setters.

    есть еще функция jsonb_set, с ее помощью можно манипулировать данными нужной глубины. почитайте в документации. в документации много описано и с примерами, также загляните в раздел функций в pg_catalog и найдите все функции у которых название начинается на "jsonb_", поиграйтесь с ними.

    настоятельно рекомендую изучить особенность конкатенации объектов и массивов jsonb.
    Ответ написан
  • Как установить nvidia драйвер Debian?

    @alfangur
    ставил себе с сайта производителя. инструкцию читал там же и еще где-то, собирал с разных источников что бы понять принцип. у меня в Debian используется рабочее окружение KDE. в текущей версии у них с nvidia какие-то проблемы. загрузка рабочего стола не происходит, если быть точнее то рабочий стол не видно, черный экран. помогло только удаление драйвера и возвращение все по дефолту. больше этим вопросом не занимался. на первых 2-х установках запорол систему, вернее не знал как откатить изменения до работоспособных, удалось что то изменить путем ковыряние конфигов, но опыта и понимание всех тонкостей еще не так много.
    Ответ написан
    Комментировать
  • Как получить от PostgreSQL массив данных сразу в Json формате для Symfony?

    @alfangur
    в любом случае вам прямая дорога в документацию.
    на хабре есть несколько стайте о работе с json в postgresql.
    в документации не все функции описаны по работе с json, с остальными можете ознакомиться через такой костыль (pgadmin 3, каталоги, postgresql, функции и там найти в алфавитном порядке json функции).
    обращу ваше внимание на следующее, в postgresql есть два типа json (json, jsonb), какая в них разница не помню, я использую jsonb, и вам рекомендую использовать его.

    в двух словах, очень удобно работать с jsonb в самой базе.
    Ответ написан
    Комментировать
  • Как улучшить код javaScript и подход в целом?

    @alfangur
    1. тебе нужно весь код из script.js завернуть в (function(){/*your code*/})(), правильного термина к такой функции не знаю. данным маневр нужен для того что бы твой код не "гадил" в глобальном пространстве.
    2. в своем скрипте первой строчкой ты обращаешься к объекту сторонней библиотеки. в таких случаях я всегда проверяю наличие необходимого объекта.
    Ответ написан
    1 комментарий
  • Можно ли поставить Raspberry Pi 3 на 24/7 работу?

    @alfangur
    на хабре вроде бы есть статья по этому вопросу.

    у малинки узкое место по железу это флэш карта. проделать манипуляции с настройкой системы что бы на карту было как можно меньше чтение\запись операций.
    Ответ написан
    Комментировать
  • Какой ноутбук выбрать с бюджетом ~1000$?

    @alfangur
    Ответ написан
    Комментировать
  • Как правильно вписать значения от и до в javascript?

    @alfangur
    возможно Вам поможет следующий вариант.

    вам нужна функция которая будет принимать ваши значения, эти значения передаются как строка
    в теле функции идет обращение к объекту "хранилищу" где записаны эти значения в виде ключа а значение этого ключа будет полезная функция

    var STORAGE = {}
    STORAGE['-0.10'] = function(){/../}
    STORAGE['+1.00'] = function(){/../}
    STORAGE['+0.25'] = function(){/../}
    
    function EntryPoint(aValue){
        var FN = STORAGE[aValue]
        if (FN) {
            FN()
            return true
        }
        return false
    }
    Ответ написан
    Комментировать
  • Миникомп с i7 HQ, и поддержкой 64гб озу?

    @alfangur
    подойдет ли для 24/7, спросите у знающих.
    64gb думаю можно придумать какие-то варианты.
    https://luna-design.org
    Ответ написан
    Комментировать