• Смогу ли я полноценно работать с программами, используя Wine?

    impeee
    @impeee
    nodejs/erlang developer
    Не могу сказать про iTunes и фотошоп, могу рассказать про свой опыт например, если интересно ) Пытался играть в первый starcraft через wine на сервере iccup. Он переодически выбрасывал критические ошибки и все падало. Иногда пропадал звук, иногда кликабельность пропадала (кликания мышки). Потом попытался запустить программу fruity loops для создания музыки, не запустилось совсем. Больше wine не использовал - поставил виртуалбокс с образом Windows XP и игрался там )
    Ответ написан
    1 комментарий
  • Как узнать путь до модуля 'resty.mysql'?

    impeee
    @impeee
    nodejs/erlang developer
    Гитхаб не работает сейчас. Через пакетный менеджер luarocks можете поставить (если оно):
    https://luarocks.org/modules/nbz4live/lua-resty-mysql

    Если разместите его в папке, например, /home/bar/, тогда путь будет выглядеть так примерно:
    lua_package_path "/home/bar/?.lua;;";
    Ответ написан
    Комментировать
  • Реализация Singleton через мемоизацию?

    impeee
    @impeee Автор вопроса
    nodejs/erlang developer
    Singleton может быть далее по коду переопределен теоретически:

    // ...
    Singleton = function() {};
    let singleton3 = new Singleton(); // Singleton {}


    О нет, моя прекрасная логика! У нас теперь 2 экземпляра класса фактически в рамках одного приложения. Есть один выход, но класс Singletone станет "грязной" функцией, которая будет обращаться к переменным внешнего контекста:

    Singletone = function(foo) {
      this.foo = foo;
      Singletone = Function;
      Object.defineProperty(global, 'Singletone', {writable: false});
    };


    Допустим, мы находимся в среде nodejs, где глобальным объектом выступает "global". Здесь я не ставлю var перед Singletone, поэтому из любого участка он всплывет, и станет свойством глобального объекта, которое уже мы можем запретить перезаписывать (после первого исполнения). Как-то так
    Ответ написан
    Комментировать
  • Как подключать файл конфигурации к серверу node.js, с возможностью его модифицировать?

    impeee
    @impeee
    nodejs/erlang developer
    Либо nodemon, который все же будет перезагружать приложение, либо каждый раз подгружать файл заново, либо создать какой-то таймер, который отслеживал бы состояние файла, и в случае изменения - подгружал файл в память ноды. Есть еще извращенный способ - загружать конфиг в переменные окружения, и посредством process.env вытаскивать его )
    Ответ написан
    Комментировать
  • Как понять такое поведение участка кода на js?

    impeee
    @impeee
    nodejs/erlang developer
    for (var i = 0; i < 10; i++) {
      setTimeout((function (i) {
        console.log(i); // ?
      })(i), 0);
    Ответ написан
    1 комментарий
  • Проблема установки посредством make?

    impeee
    @impeee
    nodejs/erlang developer
    Скачал дистрибутив openswan-2.6.40.tar.gz, в распакованной директории от рута пишу "make install" - все ставится
    Ответ написан
    8 комментариев
  • Как увеличить кол-во подключений к websockets?

    impeee
    @impeee
    nodejs/erlang developer
    1019 подключений на одной машине? Какова ее конфигурация? Какими образом посчитали количество соединений?
    Ответ написан
    Комментировать
  • Как изменять статус обработки REST-запроса через WebSockets?

    impeee
    @impeee
    nodejs/erlang developer
    В RESTful есть такая практика: возвращать в качестве ответа пользователю не данные, а статус 202 Accepted вместе с линком, по которому клиент уже сам отслеживает состояние процесса, т.е. те же http-запросы. Линк примерно такого плана: /resource/id, id должен быть всегда уникален, без коллизий. Создать нужно механизм очередей на серверной стороне.
    Ответ написан
    1 комментарий
  • Как правильно сформировать структуру БД?

    impeee
    @impeee
    nodejs/erlang developer
    Самый простой вариант - завести новое поле в постах, например "user_id", хранящее уникальный _id пользователя, создавшего этот пост, и например агрегацией вытаскивать данные пользователя, дополнительно поработав фильтром:

    db.posts.aggregate([
       {
          $lookup: {
              from: 'user',
              localField: 'user_id',
              foreignField: '_id',
              as: '_user'
           }
       }
    ]);


    Либо в коллекции пользователя завести поле 'posts', которое являлось бы массивом, и хранило _id постов. Однако в таком случае стоит помнить о лимите на размер коллекции.
    Ответ написан
    2 комментария
  • Socket.io авторизация со своим сгенерированным токеном, как?

    impeee
    @impeee
    nodejs/erlang developer
    Токен может хранить любую информацию в зашифрованном виде. В случае успешной авторизации поместите в токен такое уникальное значение, на основании которого в последствии вы сможете получить данные пользователя, организовав на их основании сессию. Самый простой случай - хранить в токене уникальный id пользователя. Реализовать можно при помощи плагина "jsonwebtoken".

    Создадим отдельный модуль "secure.js" для генерации/расшифровки токена:

    let Secure = function() {
      
      const SECRET_PHRASE = 'secret';
      
      let jwt = require('jsonwebtoken');
    
      let getSecretPhrase = () => {
        return SECRET_PHRASE;
      };
      
      let generateToken = (userEntityId) => {
        return jwt.sign({ 'entity_id' : userEntityId }, SECRET_PHRASE);
      };
      
      let verifyToken = (token) => {
        return jwt.verify(token, SECRET_PHRASE);
      };
      
      return {
        getSecretPhrase : getSecretPhrase,
        generateToken : generateToken,
        verifyToken : verifyToken
      }
      
    };
    
    module.exports = new Secure();


    При авторизации по логину и паролю, сгенерируем токен для клиента в случае успеха, поместив в него уникальный _id пользователя:

    /* обращаемся к базе, находим пользователя по логину и паролю (userData) */
    let secure = require('./secure.js');
    var token = { 'token' : secure.generateToken(userData._id) };


    На стороне сервер-сокета получаем объект данного токена:

    { token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbnRpdHlfaWQiOiJ0ZXN0IiwiaWF0IjoxNDcxMDA0NDc2fQ.bu0wJbbKpNfyP2uOJWwDuzR89NkfBNmRGqUKXQ03usQ' }


    Расшифруем и вытащим из него _id пользователя из авторизации:

    let secure = require('./secure.js');
    var uid;
    try {
    uid = secure.verifyToken(token).entity_id;
    } catch(e) {
    //
    }


    И по этому uid находим данные в базе.
    Ответ написан
    Комментировать
  • Как проверить есть ли в начале имени класса определенное слово?

    impeee
    @impeee
    nodejs/erlang developer
    if( elem.className.indexOf('text_eng') === 0 ) {
    //выполнить какие-то действия
    }

    if( elem.className.startsWith('text_eng') ) {
    //выполнить какие-то действия
    }

    Регулярные выражения работают медленнее и понижают читабельность кода для других разработчиков.
    Ответ написан
    1 комментарий