• Не запускается PhpStorm 2020.2.3 на Windows 10. Как исправить?

    @empirikk
    Не знаю куда именно отнести свой вариант, но кажется по названию эта ветка самая подходящая, поэтому напишу здесь, вдруг кому пригодится) Смотрите, переустанавливал несколько раз phpstorm от 2019.3.3 до 2021.2.3. Когда прообновлялся до 2021.2.3 перестали запускаться версии после 2020.n.n. Соответственно все 2019.n.n. и 2020.n.n. - работали, а 2021.n.n. - не работали. Гуглил гуглил, ничего не помогало из предложеных вариантов, как и переустановки с вычисткой реестра и перезагрузками, затем решил начать переименовывать все папки JetBrains из User\AppData и спустя две минуты и такой-то матери я нашёл эту(и) паку(и) которые создавали помеху при запуске. Оказалось всё что нужно было сделать, это удалить: "C:\Users\User\AppData\Roaming\JetBrains\PhpStorm2021.1"
    "C:\Users\User\AppData\Roaming\JetBrains\PhpStorm2021.2"
    Потом запустить PhpStorm и он создаст их(эти удалённые папки) заново и всё заработает. Надеюсь, это будет кому-то полезно. Потому что я ничего такого не нашёл при поиске
    Ответ написан
    9 комментариев
  • Как можно выводить изменения ячейки в гугл таблицах?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Пока вариант только со скриптами.

    Дополнение, которое я пишу, сможет это сделать, но оно еще готовится к публикации.
    Ответ написан
    2 комментария
  • Почему из Битрикс24 не приходит запрос после обновления товара?

    @herovoid Автор вопроса
    Нашёл ответ в техподдержке. Оказалось, это временный баг, и теперь в Битриксе создана заявка отделу разработок для устранения этой проблемы.

    "Обновленная карточка товара открывается через магазин, даже если заходить в нее из црм. Поскольку в реальности товар обновляется в магазине, событие CRMPRODUCT его не видит" - комментарий ТП.
    Ответ написан
    Комментировать
  • Illegal offset type in - как быть?

    Denormalization
    @Denormalization
    Ты пытаешься задать ключ массивом. Так нельзя.
    Ответ написан
    1 комментарий
  • Как протянуть скриптом формулу по столбцу "J:J", до последней заполненной ячейки ориентируясь на столбец "C:C"?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Вам нужно что-то типа такого

    /**
     * @file Dragg down a formula
     * @url https://qna.habr.com/q/709715
     * */
    
    /**
     * User action. Runs the snippet
     */
    function run() {
      const sheet = SpreadsheetApp.getActiveSheet();
      const base = sheet.getRange('C3:C');
      const colFormula = sheet.getRange('J3');
      draggDownFormulas_(base, colFormula);
    }
    
    /**
     * @param {GoogleAppsScript.Spreadsheet.Range} base
     * @param {GoogleAppsScript.Spreadsheet.Range} colFormula
     */
    function draggDownFormulas_(base, colFormula) {
      const baseValues = base.getValues();
      const lastBase =
        baseValues.length - baseValues.reverse().findIndex(row => row[0] !== '');
      const colFormulaFormula = colFormula.getFormula();
      colFormula
        .getSheet()
        .getRange(base.getRow(), colFormula.getColumn(), lastBase)
        .setFormula(colFormulaFormula);
    }


    5e3c613d3eabc476526073.png

    Обратите внимание
    • проверка начинается с 3й строки
    • колонка C заполнена на одну строку ниже, чем массив данных
    • копируется формула из J3
    • чтобы код работал, вам нужно включить V8


    Сниппет
    Ответ написан
    2 комментария
  • Как решить ошибку с Warning: count(): Parameter must be an array or an object that implements Countable in ....?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    Эту ошибку возвращает count когда в него передается null. До версии php 7.2 вернет 0, а с версии php 7.2 будет описанная ошибка.

    Исправить можно, вот так
    $products = $this->getProductList();
    if ($products) {


    а лучше так
    $products = $this->getProductList();
    if (is_iterable($products)) {


    а еще лучше вот так
    $products = $this->getProductList();
    if (is_countable($products)) {

    но для этого варианта нужен или php 7.3 или полифил который можно найти в комментариях к описанию функции https://www.php.net/manual/ru/function.is-countable.php
    Ответ написан
    1 комментарий
  • Как показать кириллицу в phpStorm?

    alleroy
    @alleroy Автор вопроса
    Изучаю фреймворк laravel
    Наконец та решил проблему, вместо русских букв знаки вопросов. Если кому надо будет, то нужно в phpStrom зайти в Settings → File Encoding → File/Derectory → Default Encouding выбираем UTF-8

    2d565248d5834981869721be39b128f7.png
    Ответ написан
    Комментировать
  • Есть ли в Bitrix24 REST API оператор OR для фильтров crm.deal.list?

    @noroots Автор вопроса
    Поскольку документация не особо помогает составить запрос, выложу тут решение.

    $params = [
    	'cmd' => [
            'kp_num' => 'crm.deal.list?' . http_build_query(
    			[
    				'filter'	=>  [
    					'UF_CRM_***' => '111',
    				],
    				'select'	=> [
    					'ID',
    					'COMPANY_ID',
    					'STAGE_ID',
    					'UF_CRM_***',
    					'DATE_MODIFY'
    				]
    			]
    		),
            'ord_num' => 'crm.deal.list?' . http_build_query(
    			[
    				'filter'	=>  [
    					'UF_CRM_***' => '222',
    				],
    				'select'	=> [
    					'ID',
    					'COMPANY_ID',
    					'STAGE_ID',
    					'UF_CRM_***,
    					'DATE_MODIFY'
    				]
    			]
    		),
    	]
    ];
    Ответ написан
    Комментировать
  • Как сделать авторизацию в Google Spreadsheets на PHP?

    gzhegow
    @gzhegow Автор вопроса
    aka "ОбнимиБизнесмена"
    Получилось.
    Для того, чтобы получать доступ с другого компьютера (без участия пользователя) - созданы т.н. сервисные аккаунты. Когда мы создаем такой аккаунт - Гугл предупреждает, что `credentials` будут созданы в единственном экземпляре и их недопустимо "потерять".

    Таким образом нужно использовать в скрипте:
    $client_secret_fpath = __DIR__ . 'service-account-credentials.json';
    $client->setAuthConfig($client_secret_fpath);


    А поскольку в этом файлике зашит приватный ключ - получение разрешения на пользование не требуется вообще.
    Не забудьте расшарить доступ к таблице ли или другому сервису на сервисный емейл (он тоже есть в файле-ключе сервисного аккаунта).
    ===

    А вот если мы создаем доступ как "веб-приложение" - то это не значит что мы с сервера можем подключиться к аккаунту, это означает что "сайт сможет использовать возможность спросить пользователя о разрешении", таким образом "токен" у гугла является однозначным идентификатором разрешения человека, и требует нажатия кнопки "разрешить".
    Ответ написан
    Комментировать
  • Как выкачать весь сайт?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    https://eternallybored.org/misc/wget/

    Чтобы скачать сайт целиком с помощью wget нужно выполнить команду:
    wget -r -k -l 7 -p -E -nc http://site.com/

    После выполнения данной команды в директорию site.com будет загружена локальная копия сайта site.com. Чтобы открыть главную страницу сайта нужно открыть файл index.html.
    Рассмотрим используемые параметры:
    -r — указывает на то, что нужно рекурсивно переходить по ссылкам на сайте, чтобы скачивать страницы.
    -k — используется для того, чтобы wget преобразовал все ссылки в скаченных файлах таким образом, чтобы по ним можно было переходить на локальном компьютере (в автономном режиме).
    -p — указывает на то, что нужно загрузить все файлы, которые требуются для отображения страниц (изображения, css и т.д.).
    -l — определяет максимальную глубину вложенности страниц, которые wget должен скачать (по умолчанию значение равно 5, в примере мы установили 7). В большинстве случаев сайты имеют страницы с большой степенью вложенности и wget может просто «закопаться», скачивая новые страницы. Чтобы этого не произошло можно использовать параметр -l.
    -E — добавлять к загруженным файлам расширение .html.
    -nc — при использовании данного параметра существующие файлы не будут перезаписаны. Это удобно, когда нужно продолжить загрузку сайта, прерванную в предыдущий раз.
    Ответ написан
    Комментировать
  • С чего начать изучение дискретной математики?

    usdglander
    @usdglander
    Yipee-ki-yay
    В смысле? Берете любой учебник по дискретной математике и учите. Там темы в нужном порядке расположены.
    Ответ написан
    Комментировать
  • Что быстрее массив или объект?

    ivinnic
    @ivinnic
    Full-Stack - подустал
    Добрый день

    Написал два скрипта с замером времени поиска.

    Search by object
    let obj = {}
    
    for(let i =0; i<1000; i++){
        obj['i'+i]=i
    }
    
    console.time('time')
    for(let i =0; i<1000; i++){
    const objResult = obj['i'+i];
    }
    console.timeEnd('time')


    time: 0.156982421875ms

    Search by array
    let obj = []
    
    for(let i =0; i<1000; i++){
        obj.push('i'+i)
    }
    
    console.time('time')
    
    for(let i =0; i<1000; i++){
        const arrResult = obj.find(el => el === 'i'+i);
    }
    console.timeEnd('time')


    time: 32.946044921875ms

    Время конечно может отличатся, но в целом видится что поиск по массиву работаем медленнее обращения по ключу, по крайне мере в промышленном масштабе.
    Ответ написан
    1 комментарий
  • Как обучить глупых студентов функциональному программированию?

    raf_gal
    @raf_gal
    я думаю тут надо начать с голого лиспа
    и там познать дзен

    надо полностью отказаться от императивного мышления

    надо мысленно побывать в мире "лямбда окраинная" из сказки про языки программирования:
    О глубокой философии программирования (серьезный р...
    Ответ написан
    2 комментария
  • Как извлечь кубический корень в гугл таблицах?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Как вариант, только комбинацией формул

    =SIGN(-9)*ABS(-9)^(1/3)
    Ответ написан
    Комментировать
  • Как не распыляться в обучении?

    Adamos
    @Adamos
    Эффект крысы, нашедшей рычажок, включающий электроды у нее в мозгу.
    Ты хватаешься за новую технологию, играешься с ней, получаешь удовольствие, в крови плещется дофамин.
    А берешься копать глубже - там уже рутина, неинтересно, уровень дофамина падает и мозг ищет, как его поднять. Да вот же - надо бросить все, схватиться еще за одну игрушку, и получишь новую дозу.
    Пока такое поведение не будет сопровождаться выбросом кортизола, потому что тебе реально надо заниматься делом, а ты балуешься - так и будешь "жать на рычажок".
    Можно начать с проверки, чему ты научился за эти 1,5 года. На каких-нибудь тестах, которые ткнут тебя носом в грязь и покажут, что ты полный неуч, похватал по верхам, но всерьез ничего не освоил.
    Ну, банально выйти из этой самой пресловутой зоны комфорта. Испортить себе это благодушное настроение, создать стресс. Он мотивирует.
    Ответ написан
    1 комментарий
  • Как понять, что введенное значение является датой?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Вопрос больше к JavaScript, а не к Google Apps Script.

    Проверяйте наличие чего-либо в переменной, а потом проверьте, имеет ли эта переменная метод getTime.

    function isDate(value){
      return value && value.getTime;
    }


    Академический способ, который раньше не работал в скриптах, потому что не хватало чего-то.

    function isDate(date){
      return date instanceof Date && !isNaN(date.valueOf());
    }


    Решение
    Пример с неопределенным результатом без вызова ошибки
    var birthday1 = ss1.getRange("D8").getValue();
    var birthday = isDate(birthday1) ?
      Utilities.formatDate(birthday1, "GMT+3", "dd-MM-yyyy") : 
      undefined;
    Ответ написан
    2 комментария
  • Как запустить onEdit из редактора или программным способом?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Насколько я понимаю, вы пробуете вызвать функцию onEdit из другой функции или из редактора.

    Разбор ошибки

    Ошибка
    TypeError: Cannot read property 'range' of undefined (строка 3, файл se)

    Означает, что в некотором файле se в 3й строке есть некоторая переменная со значением undefined, свойство range которой прочитать невозможно. Тут все очевидно - у undefined нет свойств.

    Если посмотреть на код, то становится ясно, что имя этой переменной e. И мы ее получаем в системную функцию onEdit. Это означает, что система сама передает контекст в эту функцию.

    ОК. Значит, чтобы протестировать эту функцию, нужно передать параметр самостоятельно.

    Например,

    /**
     * Тестирование триггера для события EDIT
     */
    function runOnEdit() {
      var source = SpreadsheetApp.getActive();
      var range = source.getRangeByName('Sheet!!B26');
      /**
       * @type {GoogleAppsScript.Events.SheetsOnEdit}
       */
      var e = {
        authMode: ScriptApp.AuthMode.LIMITED,
        oldValue: undefined, // ну или что хотите
        range: range,
        value: range.getValue(),
        source: source,
        triggerUid: 0,
        user: Session.getActiveUser(),
      };
    
      onEdit(e);
    }
    
    /**
     *
     * @param {GoogleAppsScript.Events.SheetsOnEdit} e
     */
    function onEdit(e) {
      // Работает простой триггер
    }


    Проверьте - этот код будет работать точно так же, как если бы пользователь внес изменения в Таблице.
    Ответ написан
    1 комментарий
  • Как в QUERY всегда использовать колонки по именам "ColN"?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Используйте нотацию { }

    =QUERY({DB!A13:L1155};"
    SELECT Col1, Col2, Col3
    
    WHERE
    ( Col1 >= date'2015-10-22'
    AND Col1 <= date'2015-10-25')
    AND ( Col2 = 'Campaign_1'
    OR Col2 = 'Campaign_2')
    
    ORDER BY Col7 DESC")
    Ответ написан
    1 комментарий
  • Работа с клиентами и настройки сайта Upwork?

    Denormalization
    @Denormalization
    2) После обсуждения всех деталей, и когда клиент уже "дозрел", нужно просто тактично намекнуть что, мол "А не пора ли баньку истопить?". Саму работу не нужно делать, а тем более отдавать, пока ты не нанят(должно прийти подтверждение и нужно нажать кнопку ПРИНИМАЮ). Так же нужно проверить что проект funded, иначе заказчик может кинуть.
    3) My stats обновляется хз как. Как-то не обращал внимания.
    Ответ написан
    Комментировать