Задать вопрос
  • Почему функция, определенная в выражении выражения 'if', не видна снаружи?

    Lynn
    @Lynn
    nginx, js, css
    Потому что это Function Expression и его имя видно только внутри самой функции.

    learn.javascript.ru/function-declaration-expressio...
    https://developer.mozilla.org/ru/docs/Web/JavaScri...
    Ответ написан
    Комментировать
  • Рекурсивное каррирование?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Вся проблема в том, что Вы на каждый вызов переопределяете метод valueOf у оригинальной функции, правильнее возвращать каждый раз новую функцию:
    const curring = (...initArgs) => {
      let sum = 0;
      const curried = (...args) => {
        sum = args.reduce((a, b) => a + b, sum);
        return curried;
      };
      curried.valueOf = () => sum;
      return curried(...initArgs);
    };
    Ответ написан
    Комментировать
  • Как с обычного метода класса вызвать static метод?

    @SOmni
    Вместо Test.a();
    Используйте this.constructor.a();
    Ответ написан
    Комментировать
  • Удалить все файлы за исключением папки и файла?

    @Tabletko
    никого не трогаю, починяю примус
    find --exclude -delete
    Ответ написан
    2 комментария
  • Вызов приватных методов?

    c3gdlk
    @c3gdlk
    Ментор в http://rubyboost.ru/
    потому что вы у объекта вызываете публичный метод, а его нет. И не важно, что self и текущий объект - одно и то же. Руби видит синтаксис вызова публичного метода, вызывает его и не находит, говорит что есть такой же, но приватный.
    Ответ написан
    2 комментария
  • Выполнение заданий?

    2ord
    @2ord
    Согласен с тем что написал Артур, только вместо whenever предлагаю использовать clockwork, поскольку можно запустить процесс одинажды в фоне, а не запуская фреймворк ежеминутно, излишне нагружая систему.
    Ответ написан
    1 комментарий
  • WebPack + Slim как настроить?

    const path = require('path');
    const ExtractTextPlugin = require('extract-text-webpack-plugin');
    const CleanWebpackPlugin = require('clean-webpack-plugin');
    const CopyWebpackPlugin = require('copy-webpack-plugin');
    const ImageMinPlugin = require('imagemin-webpack-plugin');
    
    const extractHTML = new ExtractTextPlugin('index.html');
    const extractCSS = new ExtractTextPlugin('css/style.css');
    
    const conf = {
      //context: path.resolve(__dirname, 'dist'),
    
      entry: [
        './src/js/app.js',
        './src/slim/index.slim',
        './src/scss/style.scss'
      ],
      output: {
        path: path.resolve(__dirname, './dist'),
        filename: 'js/build.js',
      },
    
      devServer: {
        overlay: true
      },
    
      module: {
        rules: [
            {
              test: /\.slim$/,
              use: extractHTML.extract({
                use: [
                  {
                    loader: 'html-loader',
                    options: {
                      minimize: false
                    }
                  },{
                    loader: 'slim-lang-loader',
                    options: {
                      slimOptions: {
                        //'pretty': true
                      }
                    }
                  }
                ]
            })
          },{
            test: /\.scss$/,
            use: extractCSS.extract({
              use: [
                {
                  loader: 'css-loader',
                  options: {sourceMap: true}
                },{
                  loader: 'postcss-loader',
                  options: {sourceMap: true}
                },{
                  loader: 'sass-loader',
                  options: {sourceMap: true}
                }
              ],
              fallback: 'style-loader'
            })
          },{
            test: /\.(png|gif|jpe?g)$/,
            loaders: [
                {
                  loader: 'file-loader',
                  options: {
                    name: '[name].[ext]',
                    outputPath: './images/'
                  },
              },
              'img-loader',
            ]
          },{
            test: /\.svg$/,
            use: [
              {
                loader: 'svg-url-loader',
                options: {
                  encoding: 'base64'
                }
              },{
                loader: 'svgo-loader',
                options: {
                  plugins: [
                    {
                      removeViewBox: false
                    }
                  ]
                }
              },
            ]
          }
        ]
      },
    
      plugins: [
        new CleanWebpackPlugin(['dist']),
        extractHTML,
        extractCSS,
        new CopyWebpackPlugin (
          [
            {from: './src/images', to: 'images'}
          ], {
            ignore : [
              {glob: 'svg/*'}
            ]
          }
        )
      ]
    };
    
    module.exports = conf;
    Ответ написан
    1 комментарий
  • RegExp: Скобочные группы и глобальный поиск?

    lidacriss
    @lidacriss
    wtf
    думаю, что в вашем случае можно заюзать такую конструкцию
    console.log(str.match(/(?<=:).*$/mg).map(match => match.trim()))


    п.с. используем "смотрящие" вперед/назад, чтобы не выхватывалось с помощью str.match()

    UPD
    Что-то скобочные группы не работают в глобальном поиске

    и не подскажите где про это почитать в доках?


    Метод match()
    Метод match() возвращает получившиеся совпадения при сопоставлении строки с регулярным выражением.

    т.е. все, что сопоставляется с регуляркой, не важно сколько групп и какие они
    Ответ написан
  • Телеграм бот, как правильно разделить на модули?

    @printercu
    В новой версии 0.14 `context_handler` удален, и таких ситуаций не будет. Несмотря на это, такая ситуация довольно частая, и может возникнуть как в контроллере с методами `before_action, helper_method`, так и в моделях, например c методами `validates, scope, ...`

    `context_handler` это метод класса, и он доступен только в контроллере бота, он не определен для любого модуля руби. Тут нужно поправить код так, чтобы `context_handler` был вызван у контроллер, когда TelegramAddNotification будет инклужен. В руби для этого есть `Module#included`, в рельсах используется модуль api.rubyonrails.org/classes/ActiveSupport/Concern.html (рекомендую прочитать описание и исходный код) , который расширяет возможности `.included`.

    module TelegramAddNotification
      extend ActiveSupport::Concern
    
      included do
        context_handler ...
      end
    end
    Ответ написан
    1 комментарий
  • Sidekiq количество потоков в очереди?

    blackst0ne
    @blackst0ne
    Фулстэк-разработчик
    Комментировать
  • Viewer для Redis под Windows?

    morihaos
    @morihaos
    На 99% вопросов уже есть ответы в инетке...
    Привет,
    Идете в Яндекс (Гугль и т.п.) и ищете по "redis gui" - вам ссылок накидает кучу на разные софтины для этого. Выбирайте, качайте, пробуйте...
    Ответ написан
    1 комментарий
  • При нажатии на кнопку KeyboardButton отправлялась команда?

    Sanasol
    @Sanasol
    нельзя просто так взять и загуглить ошибку
    никак не сделать "нормально".
    Мапить слова на нужные команды в коде надо.

    Я использую ленивый вариант на кнопках текст в виде "/r Команда"

    Где /r это команда которая запускает другие команды по "ключевому слову".
    Ответ написан
    Комментировать
  • Сверстать кнопку в письме?

    @paulinekorkina
    Верстальщик
    Верстала письмо под разные почтовики, в Windows 10 смотрится хорошо.

    Кнопка-ссылка кроссплатформенно верстается только таблицей, насколько я знаю, правда, я делала упор на Outlook и The Bat! (последний в плане верстки - просто жесть). Паддинги многие почтовики не хавают, поэтому в качестве левого и правого мы используем пустые столбцы таблицы с заданной шириной. У меня окончательный вариант получится такой:

    <table role="presentation" cellspacing="0" cellpadding="0" border="0" align="center" style="margin: 0; background: #0382Ce; border-radius: 2px;">
      <tr>
      	<td width="19" style="width: 19px;">&nbsp;</td>
            <td style="height: 38px;">
                <a href="#" style="height: 38px; text-align: center; font-family: Arial, Tahoma, Geneva, sans-serif; font-size: 12px; line-height: 38px; text-decoration: none; padding: 0; display: block; border-radius: 4px;">
                     <font face="Arial, sans-serif" color="#ffffff" style="font-size: 12px; line-height: 38px;">
                               <span style="font-family: Arial, Tahoma, Geneva, sans-serif; color: #ffffff; font-size: 12px; line-height: 38px; font-weight: bold; letter-spacing: 0.05em; -webkit-text-size-adjust:none;">ПОДРОБНОСТИ&nbsp;НА&nbsp;ПЛОЩАДКЕ</span>
                    </font>
                 </a>
    	</td>
    	 <td width="19" style="width: 19px;">&nbsp;</td>
      </tr>
    </table>
    Ответ написан
    Комментировать
  • Ссылка на телеграм бота с комнадой?

    Sanasol
    @Sanasol
    нельзя просто так взять и загуглить ошибку
    а чем стандартная start не нравится? Первый заход всё равно надо будет нажать юзеру её.

    но в start можно передать параметры через ?start=extra_infos

    https://core.telegram.org/bots#deep-linking
    Ответ написан
    2 комментария
  • Таблица и border неправильно работает?

    @CODALSD
    1 вариант:
    <table style="width: 100%; border-collapse: collapse; padding: 10px 20px; font-family: -apple-system, BlinkMacSystemFont, Helvetica, Arial, sans-serif; color: #333333; text-align: center;">
                <thead>
                    <tr>
                      <th colspan="7" style="padding: 15px 0; font-size: 19px; font-weight: bold;">
                       Currency rate changes
                      </th>
                    </tr>             
                </thead>
                <tbody>
                  <tr class="tr">
                    <td class="td">Currency pair</td>
                    <td class="td">Exchanges</td>
                    <td class="td">Direction</td> 
                    <td class="td">Accounting price</td>
                    <td class="td">Current price</td>  
                    <td class="td">&plusmn;</td> 
                    <td class="td">%</td> 
                  </tr>
    
                 
                </tbody>
              </table>

    th {
      border:none;
    }
    .tr {
    background-color: #e2e2e2;
    height: 50px;
    padding: 10px;
    }
    .td {
    border: 1px dotted #777; 
    border-right: none;
    }
    .td:first-child {
      height: 50px; 
    }
    .td:last-child {
      border-right: 1px dotted #777;
    }


    2 вариант:
    th {
      border:none;
     background-image: linear-gradient(to right, black 33%, rgba(255,255,255,0) 0%);
    background-position: bottom;
    background-size: 3px 1px;
    background-repeat: repeat-x;
    }
    .tr {
    background-color: #e2e2e2;
    height: 50px;
    padding: 10px;
    }
    .td {
    background-image: linear-gradient(black 33%, rgba(255,255,255,0) 0%);
    background-position: right;
    background-size: 1px 3px;
    background-repeat: repeat-y;
    border-bottom:1px dotted #777;
    
    }
    .td:first-child {
      height: 50px; 
      border-left: 1px dotted #777;
    }
    .td:last-child {
      border-right: 1px dotted #777;
    }
    Ответ написан
    3 комментария
  • Docker-compose build не видит переменных?

    Xuxicheta
    @Xuxicheta
    инженер
    Так и не должен видеть. Переменные из .env docker-compose вставляет только в docker-compose.yml
    Чтобы передать их в билд, можно использовать вот это
    https://docs.docker.com/compose/compose-file/#args

    build:
      context: .
      args:
        APP_HOME: $APP_HOME


    Но вообще не вижу смысла менять расположение папки с приложением. Это же изолированный контейнер. сделайте просто /app

    А и еще вопрос, зачем вам nodejs внутри контейнера с ruby?
    Ответ написан
    Комментировать
  • Certbot для NGinx в Docker?

    @chromimon
    Идея работы certboot проста

    1) По определенному URL (/.well-known) certbot размещает данные (файл)
    2) После чего обращается к серверу LetsEncrypt
    3) Сервер LetsEncrypt опрашивает сайт, на котором размещен certbot с разных адресов и тем самым убеждается, что сервер тот, за кого себя выдает.
    4) LetsEncrypt отдает сертификат/ключ certbot`у

    Как сделать:

    1) Использовать certbot в режиме webroot (не nginx)
    2) В nginx прописать ./well-known чтобы указывал туда, куда certbot положит файл, который проверит LetsEncrypt
    3) В nginx указать брать сертификат/ключ оттуда, куда его положит certboot

    Пути к файлам для пунктов 2) и 3) - нужно указывается в параметрах certbot.

    То есть куда кладет файлы certbot - оттуда берет и nginx


    Сертификат LetsEncrypt действует 90 дней, поэтому нужно его обновлять (разумеется, чаще чем раз в 3 месяца)
    Certbot запоминает свои настройки и обновлять чтобы не обязательно все параметры со всеми путями задавать.

    И, разумеется, nginx должен быть доступен снаружи и именно по тому самуму url "/.well-known"

    Готовое решение
    https://github.com/diresi/docker-nginx-certbot
    Ответ написан
  • Переход на Ubuntu несколько вопросов?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    1. Для выбранного DE, если это гном или KDE - наверняка есть стопицот коммандеров. Но как совершенно справедливо заметил Виктор Таран - если планируется "жили они долго и счастливо" - придется освоить консоль и всенепременно - mc. Потому что в линухе DE - это именно DE, а не нечто всеобьемлющее, без которого невозможно решать обычные админские задачи. Админство в линухе не требует наличия графики. От слова совсем.
    2. Я использую TDE, поэтому скрины снимаю через KScreenShot, а редактирую их через KPaint.
    3. Не знаю, у меня не ноут
    Ответ написан
    Комментировать