• Существует ли датчик угла наклона относительно горизонта?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    Нет, это фантастика)
    Либо рассчитывают относительный сдвиг по ускорениях как линейных так и угловых, но это грубо и ноль всегда плывет со временем, либо мерить от известных точек - триангуляция как в GPS, иного не дано...
    Ответ написан
    Комментировать
  • Как сделать один обработчик index.php для всего сайта?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    Гуглили и ничего? Да ну..
    pogugli.com/?90583

    4aea386cfb39457f8604ccb57c04cb22.png
    Даже ваш запрос
    627951c46e10486bb04d2c35cf6e8101.png
    Ответ написан
    1 комментарий
  • Как избавится от такого хитрого adware?

    DIITHiTech
    @DIITHiTech Автор вопроса
    Fullstack javascript developer
    Вообщем, кажется вылечил ручками=)
    Как оказалось, этот ведет себя не так, как большинство всяких панелей "безопасного поиска". Вирус с бесплатным ПО переписывал упакованные ресурсы самого браузера, просто физически перезаписывал страницы браузера для всяких ошибок, как у меня для ошибки DNS ERR_NAME_NOT_RESOLVED. Не знаю вирус ли виноват, но с "Программы и компоненты" чудным образом делись деинсталляции браузеров. Установщики же, либо вообще не хотели ставить, либо ставили, но приблуда не исчезала. Вообщем, походил по папкам и тупо файлы браузера по удалял, кроме USER DATA в Local Settings ну и сразу установщики смогли поставить заново без ошибок. Думаю, вирус CRC подпортил - вот оно и не ставилось.
    Да я перерыл все, как всегда - от реестра до ярлыков и ничего не нашел. Думал уже что налету что то скрипт инжектит при запуске браузера, но нет же, все примитивно - перезапись встроенных ресурсов.
    Всем спасибо=)
    Ответ написан
    Комментировать
  • Почему window.location.hash роботает не коректно?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    Этого куска кода недостаточно, чтобы понять что у Вас там происходит. Неясно кто такой load(), где вызывается getContent.
    Раз рекурсия появляется при window.location.hash, то может вы где то навесили обработчик на hashchange, а в нем опять присваиваете hash значение. Нужно тогда проверять перед присваиванием:
    if( window.location.hash != pages) window.location.hash = pages;
    Ответ написан
  • Механика автоматического открытия/закрытия штор. Есть идеи?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    это в детстве, когда мне было лет 10-12 тоже пытался такое лепить, ахах=))
    Есть специальные карнизы с механической раздвижной системой - т.е как в жалюзи тянешь за веревочку - они открываются - ну вот вместо веревочки и приделывать ваш мотор.
    Смотрите там, а то мамка может не разделять вашу любовь к автоматизации=))
    Ответ написан
    1 комментарий
  • Как послать команду с телефона на компьютер?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    Ну либо обычный TCP сервер вместо "сайта", либо на PC вебсокет, на том же delphi (stackoverflow.com/questions/25181302/websocket-cli...) или java, сайт на nodejs, мобильный клиент- браузер с websocket.
    Ответ написан
    Комментировать
  • Почему $_POST пустой, если отправить JSON?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    А какая связь между $_POST и JSON?=)

    stackoverflow.com/questions/19004783/reading-json-...

    $json = file_get_contents('php://input');
    $obj = json_decode($json);
    Ответ написан
    4 комментария
  • Как сделать XMLHttpRequest на другой домен?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    Ответ написан
    Комментировать
  • Почему перегружает страницу через раз?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    Особо не вникал, но что бросилось сразу в глаза - Вы везде сначала отсылаете запрос, потом вешаете обработчик, что не есть хорошо.
    xmlhttp.onreadystatechange=function(){}
            xmlhttp.send("id="+id+"&hash="+hash);


    И желательно привести все ответы к JSON- у Вас где JSON где просто число в ответе, тоже не есть хорошо.
    Хотя бы к
    {"success":"true","data":{}}//ok
    {"success:"false","error":{"code":1,"message":"bla"}//error
    //success- избыточен, но есть на него идейные любители


    Ну и если на то пошло - не "подщёта" а подсчёта=)
    Ответ написан
  • Энкодер к микроконтроллеру: PNP или NPN?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    Ну так какая мк разница какой у вас там транзистор на выходе- как прошивку напишите так и будет.
    Наверно приятнее PNP для Вас будет чтоб не инверсный сигнал был.
    Ответ написан
    Комментировать
  • Можно ли на кнопке like в вк имитировать клик через js?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    Если под "кнопкой" Вы понимаете от лица пользователя вк скрытно поставить лайк через свой сайт - то нельзя, только через вк api с авторизацией пользователя.
    Ответ написан
    Комментировать
  • У кого из производителей wi-fi оборудования есть реализация заявленных Зухелем фич?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    Не знаю как насчет всего перечня, ибо настолько глубоко мне не приходилось вникать, уж точно если и искать то начинать надо с соответствующего уровня девайсов типа микротика со среднего сегмента.
    Если чего не будет хватать - скрипты писать, если и этого недостаточно - виртуальные машины поднимаем на нем с тем же openwrt и хитрыми пакетами, если и этого не хватает - пишите свои пакеты и заливайте на виртуалку=) роутер с API так что это позволяет им дергать с виртуалки, или откуда угодно.
    Ответ написан
    Комментировать
  • Как быть, если я хочу поставить в прототип Объекта Элемент?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    Можете время не терять - с DOM элементами такое наследование не будет работать. Если пытаетесь создать свой элемент на базе стандартных - то только через document.registerElement и то только в новых браузерах.
    Ответ написан
    Комментировать
  • Как с помощью JS найти подстроку в строке и обрамить ее тэгом?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    function replaceWord(str,index,tag){
           return str.substr(0,index)+str.substr(index).replace(/\w+/,"<"+tag+">$&</"+tag+">");
       }
    
           console.log(replaceWord("Hello World!",6,"strong"));

    Для поиска в русском тексте
    function replaceWord(str,index,tag){
           return str.substr(0,index)+str.substr(index).replace(/[_0-9a-zA-Zа-яёА-ЯЁ]+/,"<"+tag+">$&</"+tag+">");
       }
    
           console.log(replaceWord("Привет Мир!!",7,"strong"));
           console.log(replaceWord("Функция — это самый мощный инструмент для замены, какой только может быть.",14,"strong"));
    //Привет <strong>Мир</strong>!!
    //Функция — это <strong>самый</strong> мощный инструмент для замены, какой только может быть.
    Ответ написан
  • Каковы преимущества использования .call() при вызове [].slice.call( [1, 2, 3] )?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    через call вызывают когда надо slice вызывать на не массиве, а на том что на него по структуре похоже -перечисляемом объекте... . Вообщем методы массива можно вызвать на любом объекте, у которого есть свойство length , ну и свойства с числовыми ключами...

    var likeArrayObject = {
                       0: "a",
                       1: "b",
                       2: "c",
                       3: "d",
                       4: "e",
                       length: 5
                   },
    
                   arr = Array.prototype.slice.call(likeArrayObject, 1, 4); //теперь это массив
                   console.log(likeArrayObject);
                   console.log(arr);
    Ответ написан
    Комментировать
  • Как отследить выполнение setTimeout?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    Так? Или что там надо...
    function getData(url, callback) {
               var RESPONSES = {
                   '/countries': [
                       {name: 'Cameroon', continent: 'Africa'},
                       {name :'Fiji Islands', continent: 'Oceania'},
                       {name: 'Guatemala', continent: 'North America'},
                       {name: 'Japan', continent: 'Asia'},
                       {name: 'Yugoslavia', continent: 'Europe'},
                       {name: 'Tanzania', continent: 'Africa'}
                   ],
                   '/cities': [
                       {name: 'Bamenda', country: 'Cameroon'},
                       {name: 'Suva', country: 'Fiji Islands'},
                       {name: 'Quetzaltenango', country: 'Guatemala'},
                       {name: 'Osaka', country: 'Japan'},
                       {name: 'Subotica', country: 'Yugoslavia'},
                       {name: 'Zanzibar', country: 'Tanzania'},
                   ],
                   '/populations': [
                       {count: 138000, name: 'Bamenda'},
                       {count: 77366, name: 'Suva'},
                       {count: 90801, name: 'Quetzaltenango'},
                       {count: 2595674, name: 'Osaka'},
                       {count: 100386, name: 'Subotica'},
                       {count: 157634, name: 'Zanzibar'}
                   ]
               };
    
               setTimeout(function () {
                   var result = RESPONSES[url];
                   if (!result) {
                       return callback('Unknown url');
                   }
    
                   callback(null, result);
               }, Math.round(Math.random * 1000));
           }
    
           /**
            * Ваши изменения ниже
            */
           
           var requests = ['/countries', '/cities', '/populations'];
           var responses = {}; //, counter=0;
    
           for (var i = 0; i < 3; i++) {
               var _request = requests[i];
    
               var callback = function(request){
                   return function (error, result) {
    
                       responses[request] = result;
    
                       var i, j;
    
                       if (Object.keys(responses).length == 3) { //or counter++==3
                           var c = [], cc = [], p = 0;
    
                           for (i = 0; i < responses['/countries'].length; i++) {
                               if (responses['/countries'][i].continent === 'Africa') {
                                   c.push(responses['/countries'][i].name);
                               }
                           }
    
                           for (i = 0; i < responses['/cities'].length; i++) {
                               for (j = 0; j < c.length; j++) {
                                   if (responses['/cities'][i].country === c[j]) {
                                       cc.push(responses['/cities'][i].name);
                                   }
                               }
                           }
    
                           for (i = 0; i < responses['/populations'].length; i++) {
                               for (j = 0; j < cc.length; j++) {
                                   if (responses['/populations'][i].name === cc[j]) {
                                       p += responses['/populations'][i].count;
                                   }
                               }
                           }
    
                           console.log('Total population in African cities: ' + p);
                       }
                   }
               }(_request);
    
    
               getData(_request, callback);
           }


    Вообще такие задачи красиво решаются с Promise.all - сам код подсчета не писал

    var requests = ['/countries', '/cities', '/populations'];
           var responses = {};
    
           function load(request){
               return new Promise(function(resolve,reject){
                   getData(request,function(error, result){
                        if(!error){
                            resolve(result);
                        }else{
                            reject (error);
                        }
                   })
               });
           }
    
           function getPopulation(state){
    
               return Promise.all(requests.map(function(request){
                   return load(request);
               })).then(function(data){
                   //console.log(arguments);
                   var countries=data[0],
                       cities=data[1],
                       populations=data[2],
                       result;
    
                   console.log(countries,cities,populations);
    
                   //calc here for state
    
                   return result;
    
               },function(error){
                   console.warn("Data error",error);
               });
           }
    
           getPopulation("Africa").then(console.log);
    Ответ написан
  • Как правильно подключить js-скрипт динамически?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    Вырвал из своей библиотеки, кажется убрал все зависимости, должен быть рабочий, использует Promise:

    function loadScript(src,_timeout) {
    
               return new Promise(function(resolve, reject){
                   if(!src){
                       reject(new TypeError("filename is missing"));
                       return;
                   }
    
                   var script=document.createElement("script"),
                       timer,
                       head=document.getElementsByTagName("head")[0];
    
    
                   head.appendChild(script);
    
                   function leanup(){
                       clearTimeout(timer);
                       timer=null;
                       script.onerror=script.onreadystatechange=script.onload=null;
                   }
    
                   function onload(){
                       leanup();
                       if(!script.onreadystatechange||(script.readyState&&script.readyState=="complete")){
                           resolve(script);
                       }
                   }
    
                   script.onerror=function(error){
                       leanup();
                       head.removeChild(script);
                       script=null;
                       reject(new Error("network"));
                   };
    
                   if (script.onreadystatechange === undefined) {
                       script.onload = onload;
                   } else {
                       script.onreadystatechange = onload;
                   }
    
                   timer=setTimeout(script.onerror,_timeout||30000);
                   script.setAttribute("type", "text/javascript");
                   script.setAttribute("src", src);
               });
           }
    
           function loadCSS(src, _timeout) {
               var css = document.createElement('link'), c = 1000;
               document.getElementsByTagName('head')[0].appendChild(css);
               css.setAttribute("rel", "stylesheet");
               css.setAttribute("type", "text/css");
    
    
               return new Promise(function(resolve, reject){
                   var c=(_timeout||10)*100;
                   if(src) {
                       css.onerror = function (error) {
                           if(timer)clearInterval(timer);
                           timer = null;
    
                           reject(new Error("network"));
                       };
    
                       var sheet, cssRules, timer;
                       if ('sheet' in css) {
                           sheet = 'sheet';
                           cssRules = 'cssRules';
                       }
                       else {
                           sheet = 'styleSheet';
                           cssRules = 'rules';
                       }
                       timer = setInterval(function(){
                           try {
                               if (css[sheet] && css[sheet][cssRules].length) {
                                   clearInterval(timer);
                                   timer = null;
                                   resolve(css);
                                   return;
                               }
                           }catch(e){}
    
                           if(c--<0){
                               clearInterval(timer);
                               timer = null;
                               reject(new Error("timeout"));
                           }
                       }, 10);
    
                       css.setAttribute("href", src);
                   }else{
                       reject(new TypeError("filename is missing"));
                   }
               });
           }


    Вызывать так:
    loadScript("/engine/classes/js/jquery.pickmeup.min.js").then(function(){
               console.log("js ready");
           },function(error){
               console.log(error);
           })
    
           loadCSS("/engine/classes/css/pickmeup.min.css").then(function(){
               console.log("css ready");
           },function(error){
               console.log(error);
           })


    https://jsfiddle.net/2rfqh464/
    Ответ написан
    Комментировать
  • Где в Москве заказать кастомную клавиатуру?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    Москва - это явно не то место, где нужно искать что то технологичное и дешево, это к китайцам..
    Можно посмотреть полуфабрикаты:
    www.aliexpress.com/item/Usb-handheld-keyboard-usb-...
    www.aliexpress.com/item/Customized-Keyboard-DIY-Ke...
    Или переговорить с нужными китайцами, явно если поискать можно найти будет типа таких парней, котрые сделают проект:
    www.aliexpress.com/item/Metal-Kiosk-Keyboard-Indus...
    Ответ написан
    Комментировать
  • Что происходит в этом коде на js?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    Видно вызов перекрытого метода при прототипом наследовании.

    AboutController унаследовался от другого объекта, в нем action перекрыл метод прототипа, вот потому код вызывают в перекрытом методе дабы унаследовать функционал старого.

    В языках с классическим ООП для этого есть механизмы типа ключевого слова inherited. В JS же просто отдаленно эмитируется его функционал.

    В AboutController.__super__ лежит ссылка на прототип объекта, от которого унаследовался этот AboutController. Это свойство устанавливается на уровне фреймворка, для возможности вызова "родительских" методов, если одноименные методы "ребенка" перекрывают методы родителя т.е имееют одинаковые имя.

    У родителя есть уже метод [action] вы его перезаписали чтоб добавить свой код, но чтоб унаследовать функционал родительского метода выполняется его код через такой костыль.
    Ответ написан
    Комментировать
  • Как разложить массив в объект с минимум сравнением?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    var data = [
               '08-10-2011',
               '08-04-2007',
               '03-11-2008',
               '03-03-2008',
               '03-14-2008',
    
               '03-28-2005',
               '03-20-2005'
           ];
    
           function decodeDate(arr) {
               var i, len = data.length,
                       obj = {},
                       date,
                       year,
                       month;
    
               for (i = 0; i < len; i++) {
                   date=arr[i].split("-");
                   if(!obj[year=date[2]])obj[year]={};
                   if(!obj[year][month=date[0]]){
                       obj[year][month]=[date[1]];
                   }else{
                       obj[year][month].push(date[1]);
                   }
               }
               return obj;
           }
    
           console.log(decodeDate(data));
    Ответ написан
    7 комментариев