• Как работать с состояниями в приложений JavaScript?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Один из вариантов хранить их как битовую карту – одно целое число, где определённый бит что-то значит. В вашем случае первые 5 битов, например, отражают состояние чекбоксов:
    0000 0010
       │ │││┕╼ бит 0, чекбокс 0
       │ ││└── бит 1, чекбокс 1
       │ │└─── бит 2, чекбокс 2
       │ └──── бит 3, чекбокс 3
       └────── бит 4, чекбокс 4


    Так вы сможете чуть быстрее писать условия, напр.
    switch( bitmap) {
      case 0: // все выключены
        // загрузить что-то там
        break;
      case 1<<3: // включен только 3-й бит
        // загрузить что-то для 3-го чекбокса
        break;
      case 28: // вкл. 3, 4 и 5-й
      // ...
    }
    Ответ написан
    2 комментария
  • Какие различия программирования под UNIX и Linux?

    Сможете.

    Различия UNIX и Linux (на англ.)

    Linux is a Unix clone written from scratch by Linus Torvalds with assistance from a loosely-knit team of hackers across the Net. It aims towards POSIX compliance.
    Ответ написан
    Комментировать
  • Функция сортировки массива в js?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    в документации на MDN неплохо описано назначение сортировочной функции:
    Если функция сравнения compareFunction предоставлена, элементы массива сортируются в соответствии с её возвращаемым значением. Если сравниваются два элемента a и b, то:

    Если compareFunction(a, b) меньше 0, сортировка поставит a по меньшему индексу, чем b, то есть, a идёт первым.

    Если compareFunction(a, b) вернёт 0, сортировка оставит a и b неизменными по отношению друг к другу, но отсортирует их по отношению ко всем другим элементам. Обратите внимание: стандарт ECMAscript не гарантирует данное поведение, и ему следуют не все браузеры (например, версии Mozilla по крайней мере, до 2003 года).

    Если compareFunction(a, b) больше 0, сортировка поставит b по меньшему индексу, чем a.

    Функция compareFunction(a, b) должна всегда возвращать одинаковое значение для определённой пары элементов a и b. Если будут возвращаться непоследовательные результаты, порядок сортировки будет не определён.
    Ответ написан
    Комментировать
  • Как сконвертировать плоский массив в дерево?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    1. Найти корневой элемент – в вашем случае это с наименьшим id
    2. Далее рекурсивно вызывать функцию, которая получая на вход элемент дописывает ему детей по их id.


    Чтобы быстрее по id находить весь элемент, данные в начале преобразовываются в «словарь» – объект, где свойства это id, а значения элементы.

    var data = [
    {id: 0, name: 'Main', path: '/', childs: [1,2]},
    {id: 1, name: 'One', path: '/one', childs: [3]},
    {id: 2, name: 'Two', path: '/two', childs: []},
    {id: 3, name: 'Three', path: '/one/three', childs: []}
    ];
    
    function makeTree(d) {
      var id, el, i, dict = {}, minId, r;
      
      function parseChildren(el) {
        var i, newEl;
        for( i = 0; i < el.childs.length; i++) {
          newEl = makeElement(dict[ el.childs[i] ]);
          parseChildren( newEl);
          el.children.push( newEl);
        }
        delete el.childs;
      }
      
      for( i = 0; i < d.length; i++) {
        el = d[i];
        id = el.id;
        if( typeof minId === 'undefined' || minId > id) minId = id;
        dict[id] = el;
      }
    
      r = makeElement( dict[minId] ); // root element
      parseChildren(r);
      return r;
    }
    
    function makeElement(arrElement) {
      return {
        name: arrElement.name,
        path: arrElement.path,
        childs: arrElement.childs,
        children: []
      };
    }
    
    var tree = makeTree(data);
    /* {
    	"name": "Main",
    	"path": "/",
    	"children": [{
    		"name": "One",
    		"path": "/one",
    		"children": [{
    			"name": "Three",
    			"path": "/one/three",
    			"children": []
    		}]
    	}, {
    		"name": "Two",
    		"path": "/two",
    		"children": []
    	}]
    } */
    Ответ написан
    Комментировать
  • Как мне добавить к 001 единицу и чтобы стало 002?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    1. найти позицию, с которой начинаются цифры в конце
    2. запомнить длину числа
    3. увеличить на 1 и перевести в строку
    4. при необходимости дописать нулей
    5. склеить с частью до числа
    function stringInc(s) {
      var pos = s.length - 1;
      while(pos >= 0) {
        if( Math.abs(s.charCodeAt(pos) - 52.5) < 5) pos--;
        else break;
      }
      if( ++pos >= s.length) return s; // no number
      var numLength = s.length - pos;
      var numString = (parseInt(s.substr(pos)) + 1).toString();
      if( numString.length < numLength) {
        numString = ((Array(1 + numLength).join('0')) + numString).substr(-numLength);
      }
      
      return s.substr(0,pos) + numString;
    }
    
    stringInc('abc123') // abc124
    stringInc('abc999') // abc1000
    stringInc('abc00009') // abc00010
    stringInc('009') // 010
    stringInc('9') // 10
    stringInc('aaa') // aaa
    Ответ написан
    Комментировать
  • Как правильно распарсить массив?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Создать объект со свойством areas:
    var result = { "areas": "значение для areas"}

    Взять массив из свойства "mh" исходных данных. Это запись в JSON поэтому просто пишем
    peremennaya = {...тут весь этот JSON...}
    peremennaya.mh // тут нужный массив


    Из этого массива нужно сделать новый, где каждый элемент будет содержать только два свойства: id и title. Первое берется из оригинала как есть, а второе нужно составить, собрав значения свойств элемента title и count через пробел-дефис-пробел:
    '' + el.title + ' - ' + el.count

    Когда нужно над каждым элементом массива произвести какое действие, удобен метод массивов map(). В него передаётся функция, которая, получая на вход очередное значение из массива, что-то с ним делает и возвращает новое значение.

    Итого:
    var d = {"mh": [{"id": "BR", "count": 18516, "title": "Brazil"}, 
        {"id": "US", "count": 4514, "title": "United States"}, 
        {"id": "MY", "count": 390, "title": "Malaysia"}, 
        {"id": "IT", "count": 208, "title": "Italy"}]
    };
    
    var result = {areas: d.mh.map(el => ({id:el.id, title:''+el.title+' - '+el.count}))}
    
    // {"areas":[{"id":"BR","title":"Brazil - 18516"},{"id":"US","title":"United States - 4514"},
    //   {"id":"MY","title":"Malaysia - 390"},{"id":"IT","title":"Italy - 208"}]}
    Ответ написан
    Комментировать
  • Как деактивировать ключ вк сообщества через этот же самый ключ?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    Такие методы API отсутствуют.

    Попробуйте задать вопрос в тех. поддержку ВК по API.
    Если отыщите решение, поделитесь, пожалуйста, в этом же вопросе.
    Ответ написан
    Комментировать
  • Как правильно посчитать площадь прямоугольника?

    Недоделили. 1 квадратный метр это 1000*1000мм.
    Полученные миллиметры надо делить на миллион.
    Ответ написан
    Комментировать
  • Как быстро научиться читать «с листа» математические формулы?

    sergiks
    @sergiks Автор вопроса
    ♬♬
    Нашёл отличную шпаргалку, которая решает все мои вопросы: приложение к книге Sebastian Raschka «Introduction to Artificial Neural Networks and Deep Learning: A Practical Guide with Applications in Python»

    sebastianraschka.com...appendix_a_math_notation.pdf

    Ноутбуки книги на github: rasbt/deep-learning-book
    Ответ написан
    Комментировать
  • С чего нужно начать изучать программирование нейронных сетей?

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

    Как вариант, Школа Анализа Данных Яндекса. Посмотрите вступительные задания (напр. 2016 года)

    На английском языке выбор шире – на Coursera, Udacity есть программы по ML.
    Ответ написан
    Комментировать
  • Чем реально полезным можно заняться школьнику знающему программирование?

    «Заявить о себе» можно на крупных публичных площадках:
    1. github – помочь существующему проекту или запилить новый, свой, невероятно полезный многим;
    2. kaggle – разобраться с машинным обучением и научиться точнее всех прогнозировать;
    3. олимпиады.
    Warning обратная сторона медали: в результате попытки заявить о себе может случиться так, что станет очевидным, как много кругом крутых перцев и как до них бесконечно далеко, что угрожает самооценке.
    Ответ написан
    Комментировать
  • Как избавится от знака? , в запросе?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Решается настройкой веб-сервера. Это он должен при отсутствии папки или файла с запрошенным названием «переписывать» запрос и передавать в index.php уже GET-параметрами или иначе запрошенный адрес.

    У вас Nginx или Apache? Такой паттерн называется «front controller».

    Nginx:
    try_files $uri $uri/ /index.php?q=$uri&$args;
    или ещё проще, читайте запрошенную строку из переменной $_SERVER['REQUEST_URI'] и напишите просто try_files $uri $uri/ /index.php;

    Apache:
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php?$1 [QSA,L]
    Ответ написан
    1 комментарий
  • Как выбрать из текста 3 слова одинаковой или похожей (максимально приближенной) длины?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Собрать из текста словарь "длина": [слово,слово]
    Выбирать слова нужной длины, а при отсутствии смотреть соседние по значению ключи.

    words = txt.replace(/[\.,\?\!\:;\–\(\)]/g, '').toLowerCase().split(/\s+/);
    
    // make dictionary
    var db = [];
    for( var i = 0; i < words.length; i++) {
      word = words[i];
      len = word.length;
      if(db.length <= len || typeof db[len] == 'undefined') db[len] = [];
      if(!~db[len].indexOf(word)) db[len].push(word);
    }
    
    function getWords(db, length, n) {
      n = n || 3;
      var result = [], offset = 0, m;
      length = Math.max(0, Math.min(length, db.length));
      while( result.length < n) {
    
        m = n - result.length;
        if( db[length + offset]) {
          result = result.concat( getUpTo(m, db[length + offset]))
        }
    
        m = n - result.length;
        if( offset &&  m  &&  db[length - offset]) {
          result = result.concat( getUpTo(m, db[length - offset]))
        }
        
        m = n - result.length;
        if( m === 0) break;
        offset++;
        if( offset + length > db.length && offset > length) break;
      }
      
      return result;
    }
    
    function getUpTo(n, arr) {
      return arr.slice(0, Math.min(n, arr.length));
    }


    Fiddle
    Ответ написан
    1 комментарий
  • Что нужно что бы доработать это до нейронной сети?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Чтобы обучить сеть понадобится немаленькая «обучающая» выборка правильных данных: 4 ваших входных параметра + ответ. Таких строк бы да побольше, разных.

    У вас 3 булевых входа (true/false) и один реальный (float). На выходе true/false.

    Возможно, для этой задачи больше подойдёт не нейронная сеть, а дерево принятия решений. Хорошее видео, объясняющее, как построить такое дерево на Python (на англ., но можно включить титру с автопереводом на Русский язык)

    Возвращаясь к нейронной сети и весам. На рисунке – три слоя: входной, скрытый и выходной. В каждом слое от 1 до нескольких «нейронов».

    У каждого нейрона два параметра, допустим, a и b. На вход к нему попадает некое значение x. Нейрон его умножает на a и прибавляет b, чтобы отправить дальше.

    Часто сеть инициализируют случайными весами, чтобы они не были нулевыми.

    Затем начинают прогонять через неё готовые, «обучающие» примеры. И смотреть, что на выходе. Разницу между «ожиданием» и «реальностью» называют «потерей» (loss). Её нужно минимизировать. Тема длинная, я плохо рассказываю. Лучше посмотрите курс какой-нибудь. Ответы на ваши вопросы:

    1. коэффициентов обычно не так много. Их держат в памяти во время работы сети и сохраняют в файл на диске, чтобы потом можно было снова загрузить.
    2. связи все-ко-всем. Если какие-то из них не нужны – ставится нулевой вес. Расчёт этих коеффициентов обычно делается «оптом» – операциями с матрицами.
    3. ваш код пока далёк от реализации нейронной сети, а ближе к упомянутому выше дереву принятия решений.
    4. в случае нейронной сети и градиентного спуска считается частная производная и делается маленький «шаг» в нужном направлении – коэфф. изменяется с текущего значения «чуть-чуть».
    Ответ написан
    2 комментария
  • Самый сильно защищенный мессенджер — какой он?

    Посмотрите исходники и спецификации протокола мессенджера Signal:
    https://signal.org/docs/
    Ответ написан
    Комментировать
  • Как правильно сгенерировать SSL сертификат для Telegram?

    Выполните эту команду 1:1, у вас создадутся файлы YOURPRIVATE.key и YOURPUBLIC.pem
    Ответ написан
    Комментировать
  • Как записываются видеоданные в *.mov?

    Ответ написан
    Комментировать
  • Как лучше опрашивать состояния элементов?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Т.е. на сервере что-то происходит, о чём надо оповестить клиент, и вы делаете это, опрашивая раз в секунду сервер «есть чё?», причём в несколько параллельных потоков – по каждому айтему.

    Сделайте «конец» api, с которого можно забирать сразу несколько готовых задач. Когда задача на сервере «пропадает», пихайтё её item_id в некий одноразовый массив для выдачи в клиент.

    Так хоть в один всего поток раз в секунду будете опрашивать сервер, и забирать массив с id завершенных.
    Ответ написан
    Комментировать
  • Как реализовать распознавание фотографий на js и нейронных сетях?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Распозначание цифр делается на основе обучения сети немаленьким набором картинок MNIST где каждой нарисованной цифре соответствует её правильное значение.

    На JavaScript возьмите, например, библиотеку ConvnetJS.

    Готовую, обученную на распознавание компьютерной техники по картинкам сеть хотите готовенькую? Вряд ли найдёте.

    Напишите и обучите сами, спарсив какой-нибудь магазин компьютерной техники – там легко сопоставить картинку и соответствующий ей класс устройства. Но набор только продающихся моделей, наверное, маловат. Можно ещё добавить поисковую выдачу Яндекса/Google по картинкам.
    Ответ написан
    Комментировать