• Как задать ограничение времени для теста в google forms?

    oshliaer
    @oshliaer
    Google Products Expert
    Не знаю, что так сломало автора другого ответа, но вот дополнение, которое это делает https://workspace.google.com/marketplace/app/forml...

    Судя по картинкам там несложно.
    Ответ написан
    Комментировать
  • Как проставить группу дат в таблице?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    A4:A6
    ="— Группа_"&ОКРУГЛВНИЗ((СТРОКА()+2)/3)
    =A2+1
    =A5

    И скопировать этот блок
    Демонстрационная таблица
    Ответ написан
    1 комментарий
  • Как безболезненно перейти с Python на Rust?

    Как безболезненно перейти с Python на Rust?

    Учиться, учиться, учиться.
    1) Python медленный

    Питон на удивление быстрый, особенно если использовать PyPy, а сильные тормоза возникают только в особых случаях.
    2) В python нет адекватного управления памятью

    Автоматический GC - это один из самых адекватных способов управления памятью, который только придумывало человечество.
    3) В python мне приходится испльзовать кучу мегабайт библиотек (я чувствую себя тупым и бесполезным при импортировании библеотек)

    А вы импортируйте их с мыслью "я не хочу тратить кучу времени на реализацию этого всего с нуля"
    В расте вам точно также придётся импортировать кучу библиотек, как и в любом другом языке, где есть библиотеки.
    4) Python кажется игрушечным языком

    Зря так думаете. Python очень мощный.
    5) Python не подходит род микроконтроллеры (micropython - просто игрушка)

    Раст+МК для новичков тоже очень страшная вещь - посмотрите на вопросы от товарища eegmak, например, чтобы в этом убедиться.
    Micropython - вполне себе production ready инструмент для тех случаев, когда его хватает, и не нужно ужиматься в очень дешёвые чипы.
    6) Проблемы из-за GIL'а

    С какими именно проблемами вы столкнулись на практике?)
    Скорее всего, их можно решить и менее радикальными методами.

    ИМХО: вы услышали от кого-то что Rust-топ язык, а Python - игрушечный, а настоящие программисты используют ручное управление памятью и сами реализовывают всякие сложные алгоритмы и протоколы.
    Хотя обычно ещё пишут, что настоящие программисты пишут только на C, только в виме, и никогда не ищут ответы на русскоязычных форумах.

    Если я прав - задумайтесь ещё раз, какую именно вашу проблему может решить раст, которую не может решить Python.

    Если я вас не отговорил - берите rustbook (лучше способа не придумали ещё).

    Если хочется перейти на другой язык, не обязательно раст - посмотрите в сторону других языков со сборкой мусора - например C#, Go, или D. Их все можно использовать в том числе и на МК, с разной степенью извращений.
    Ответ написан
  • Как склеить два столбца без повторов?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    =uniqie(arrayformula({a:a;b:b}))
    Ответ написан
    Комментировать
  • Как можно выводить изменения ячейки в гугл таблицах?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    Нужно отслеживать событие onEdit(event) и писать лог в нужный лист.
    function onEdit(event) {
      //Возникает при изменении ячейки
      var ss = event.source.getActiveSheet();//Текущий лист
      var address = event.range.getA1Notation().toUpperCase();//Адрес ячейки
      var row = event.range.getRow();      //Номер строки
      var col = event.range.getColumn();  //Номер столбца
      var newValue = event.value;            //Новое значение
      var oldValue = event.oldValue;        //Старое значение
      
      if (["Лист1","Лист2"].indexOf(ss.getName())==-1) return;	//Указываем на каких листах должен работать скрипт
      //Можно при желании ещё фильтровать по строке/столбцу (row/col), или по старому/новому значению (oldValue/newValue)
      
      var archive = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Архив");
    
      archive.getRange(archive.getLastRow()+1, 1).setValue(
        formatDateTime(new Date())+" " + "[" + ss.getName() + "!" + address + "] '" + (oldValue==undefined?"":oldValue) + "' >> '" + (newValue==undefined?"":newValue) +"'"
      );
    };
    
    function formatDateTime(date) {
    
      var dd = date.getDate();
      if (dd < 10) dd = '0' + dd;
      var mm = date.getMonth() + 1;
      if (mm < 10) mm = '0' + mm;
      var yy = date.getFullYear() % 100;
      if (yy < 10) yy = '0' + yy;
      
      var hh = date.getHours();
      if (hh < 10) hh = '0' + hh;
      var MM = date.getMinutes();
      if (MM < 10) MM = '0' + MM;
      var ss = date.getSeconds();
      if (ss < 10) ss = '0' + ss;
      
      return dd + '.' + mm + '.' + yy + ' ' + hh + ':'+ MM + ':'+ ss;
    }

    Вот ссылка на демо
    Ответ написан
    4 комментария
  • Как в формуле указать последний существующий столбец (в диапазоне)?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    вся строка:
    =SUM(1:1)
    до конца строки от столбца D:
    =SUM(D1:1)
    первые 5 строк:
    =SUM(1:5)
    Ответ написан
    2 комментария
  • Простой CSV редактор, а?

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

    к примеру, у одного объявления в среднем 3 тега, на 1 миллион объявлений будет 3 миллиона записей в "объявления-теги", как там будет по скорости при выборке? Сильно я выиграю, если нарушу правило и буду писать теги, перечисляя их в строку через запятую?

    1. Представим, что промежуточная таблица объявление-тег - это два гуида.
    Тогда одна строчка будет занимать около 32 байт. 3*32*1000000 = 96 мегабайт (метрических)
    2. Естественно, выборка будет медленной, если не добавить индекс. Индекс по id объявления ещё примерно столько же займёт. Выборка уже будет быстрее. Для фильтров ещё надо будет добавить индекс в обратную сторону - от id тега.
    3. Ещё и фильтроваться по тегам можно будет, что, мне кажется, является одним из важнейших качеств тегов.
    4. Если 96 мегабайт тебя пугает - используй int64 или int32 - тогда будет меньше в 2 или в 4 раза соответственно
    Сильно я выиграю, если нарушу правило и буду писать теги, перечисляя их в строку через запятую?

    Как уже сказали в комментах - очень сильно обосрёшься.
    Выборка, конечно, будет очень быстрая, но
    1. Представим что тег - это 6 букв на русском языке, а храним мы строки в Utf8 кодировке.
    Тогда на каждое объявление будет тратиться 6*2*3+3+4=45 байт. Соответственно на миллион объявлений уйдёт 45 метрических мегабайт.
    2. Но тут не будет индексов, по тому и фильтроваться будет очень дорого

    PS: все прикидки по памяти взяты с потолка. В реальной БД числа будут другие, но примерно похожие.
    PPS: если не совсем понятно, что я предлагаю, то вот:
    ._________.             .______________.           .____________.
    | post    |             | post_tag     |           | tag        |
    |=========|             |==============|           |============|
    | id: int |<------------| post_id: int |           | id: int    |
    | ...     |             | tag_id: int  |---------->| name: text |
    |_________|             |______________|           |____________|
    Ответ написан
    1 комментарий
  • Как научится правильно верстать?

    pluffie
    @pluffie
    Стыдно за старые вопросы
    я не знаю как правильно назвать тот или иной класс

    Так, чтоб было понятно, за что он отвечает.

    нужно ли для всех тегов писать классы

    Нет. Без контекста, ответить что-либо более осмысленное я не смогу.

    не понимаю зачем нужен container и wrapper

    Если ты не понимаешь, зачем тебе что-либо нужно, то тебе это не нужно

    Я забросил вёрстку и начал изучать JavaScript. Но после изучения основ я вернулся к проблеме что не умею верстать.

    Авось поможет

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

    Задавай себе вопросы, когда пишешь код.
    Нужна шапка. Что подразумевается под шапкой? Панель с кнопками для навигации сверху сайта.
    <nav></nav>
    Что в ней должно быть? Название сайта и ссылки на страницы.
    <nav>
      <span>My site</span>
      <a href="page1.html">Page1</a>
      <a href="page2.html">Page2</a>
    </nav>

    Тег a подчёркивается. Я так хочу? Нет.
    a {
      text-decoration: none;
    }

    Проблема решена, но теперь a вообще нигде не подчёркивается. Я хочу так? Нет.
    nav a {
      text-decoration: none;
    }

    Теперь a не подчёркивается, если оно находится в элементе nav. А если я создам ещё один такой элемент, но для немного других целей, и там подчёркивания понадобятся?
    <nav class="main-navbar">
      <span>My site</span>
      <a href="page1.html">Page1</a>
      <a href="page2.html">Page2</a>
    </nav>

    .main-navbar a {
      text-decoration: none;
    }

    Теперь я хочу выровнять все элементы по вертикали но не знаю как :(. Тут тебе на помощь придёт твой личный Оракул (правда я больше предпочитаю всевидящую утку). Просто задай ему вопрос "Как это сделать?", и он моментально выдаст ответ.

    Не знаю может это мне не дано или я делаю что то не так. Я не могу решить эту ОГРОМНУЮ проблему.

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

    Хочется изучать что то новое но я застрял на этой вёрстке и не могу двигаться дальше.

    Как то, что ты не умеешь верстать, мешает тебе изучить, допустим, историю Танзании?
    Ответ написан
    1 комментарий
  • Лагает Фигма. Что делать?

    DevMan
    @DevMan
    не может, а точно в этом.
    сейчас даже 16 - ниочем, а вы с 4 выступаете.

    ssd поможет, но не долго.
    или памяти добавляйте, или платформу меняйте.
    Ответ написан
    1 комментарий
  • Прокрастинация, проблемы языка или я не программист?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    На изучение почти чего угодно в сфере ИТ обычно нужны эти 3 вещи:
    1. время
    2. терпение
    3. английский

    Если чего-то не хватает, то шансы на успех (и его качество) резко снижаются. Всё целиком можно назвать одним словом мотивация. Другими словами, стать программистом может практически каждый. Другое дело, что не каждый хочет им стать. Или, например, хочет стать, но не хочет тратить время - это равносильно тому, что не хочет совсем. Подробнее о том, как устроена твоя мотивация и твои планы на годы вперёд, знаешь только ты.

    В процессе изучения, конечно, тебя сопровождает естественное любопытство. Но только лишь на нём не получится ехать всю дорогу. Когда начинается рутина или непреодолимые сложности, понадобятся воля и терпение. Да и всё то, что я перечислил выше.

    Удовольствие в программировании, как в его изучении, так и в решении практических задач, построено на дофаминовом подкреплении. Оно, к сожалению, рассчитано только на короткие цели. Поэтому (и не только поэтому) большие задачи необходимо разбивать на более мелкие. Это называется декомпозиция. Но это также и навык, которым нужно овладеть, прежде чем иметь возможность применять. Змейку не захотелось делать потому, что она слишком сложная и долгая. Однако если в своей голове сумеешь разбить змейку на более простые задачи: управление, показ еды, показ самой змейки, - то будет намного интереснее.
    Ответ написан
    8 комментариев
  • Как удалить ячейки с определенным значением?

    MiloNNe
    @MiloNNe
    Жаль не взял собой рундук. Сундук для рун - РУНДУК
    В расширенных настройках ставь галку и очистишь все ячейки61cc76fbb3707852298368.png

    И потом выделяешь все пустые ячейки в "Найти и выделить" и удаляшь их со смещем куда надо
    Ответ написан
    Комментировать
  • Какая может быть формула суммы диапазонов у разных листов?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    =arrayformula({
    B2&"!A2:A";
    B3&"!A2:A";
    B4&"!A2:A"
    })

    и т.д.
    Ответ написан
    2 комментария
  • Почему не получается записать в базу данных?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    База данных всегда сама подробно расскажет, почему у неё не получилось выполнить запрос. Надо её только об этом попросить.

    Поэтому сначала учимся правильно соединяться.
    Весь этот детский лепет "не могу соединиться с БД" выкидываем и пишем нормальный код, который сам, без всяких проверок, сообщит нам об ошибках.
    В случае mysqli это
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $link = mysqli_connect($host, $user, $pass, $db_name);
    $link->set_charset("utf8mb4");

    Здесь первая строчка отвечает как раз за информирование об ошибках

    Кроме того надо не забыть про ошибки РНР
    Во-первых, всегда в коде должно быть error_reporting(E_ALL);
    Плюс на домашнем компе ini_set('display_errors',1);, а на боевом - ini_set('display_errors',0);ini_set('log_errors',1);, и смотреть, соответственно, в логах.

    После этого переписываем запрос. Причем так, чтобы данные в БД всегда попадали отдельно от самого запроса. Это непреложное правило, которое надо соблюдать всегда.
    Для этого надо
    • Заменить все переменные в запросе на специальные маркеры, которые называются плейсхолдеры или параметры, а по сути - просто знаки вопроса
    • Подготовить запрос к исполнению с помощью функции prepare(). Эта функция принимает строку запроса и возвращает экземпляр специального класса stmt, с которым в дальнейшем и производятся все манипуляции
    • Привязать переменные к запросу.
    • Выполнить подготовленный ранее запрос с помощью с помощью execute()

    В mysqli это будет так
    $sql = "INSERT INTO `events` (`title`, `discription`, `date`, `img`) VALUES (?,?,?,?)";
    $stmt = $link->prepare($sql);
    $stmt->bind_param("sssss", $title, $discription, $date, $path);
    $stmt->execute();

    bind_param() принимает в качестве параметров все переменные, которые должны попасть в запрос, в том же самом порядке, в котором стоят плейсхолдеры в запросе. Но кроме того, сначала в этой функции должны быть указаны типы для всех переменных, в виде строки, где тип переменной обозначается одной буквой. То есть букв в этой строке должно быть ровно столько, сколько дальше будет переменных. К счастью, можно особо не париться с типами и для всех переменных указывать тип "s".

    И тогда никаких ошибок запроса уже никогда не будет. Не говоря уже о том что при любых других вариантах твой сайт поломает любой пятиклассник

    Но по-хорошему для работы с БД в РНР лучше использовать PDO, Тем более что там колупаться с bind_param не нужно, а можно сразу отправить все данные в execute

    Подключение
    $host = '127.0.0.1';
    $db   = 'test';
    $user = 'root';
    $pass = '';
    $port = "3306";
    $charset = 'utf8mb4';
    $options = [
        \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
        \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
        \PDO::ATTR_EMULATE_PREPARES   => false,
    ];
    $dsn = "mysql:host=$host;dbname=$db;charset=$charset;port=$port";
    $pdo = new \PDO($dsn, $user, $pass, $options);

    Здесь за информирование об ошибках отвечает параметр PDO::ERRMODE_EXCEPTION, а остальные просто для удобства/корректности.

    Выполнение запроса
    $sql = "INSERT INTO `events` (`title`, `discription`, `date`, `img`) VALUES (?,?,?,?)";
    $stmt = $link->prepare($sql);
    $stmt->execute([$title, $discription, $date, $path]);
    Ответ написан
    2 комментария
  • Как извлечь информацию из конкретных ячеек таблицы файла .docx с помощью python и библиотеки docx?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Чего там понимать?
    from docx import Document
    
    document = Document('document.docx')
    table = document.tables[0]
    cell = table.cell(0, 1)
    print(cell.text)
    Ответ написан
    2 комментария
  • Где посмотреть идеи для проекта OpenSource?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Если часто встречаете вопросы "Что написать" на форумах, то это не значит, что задающие их люди способны что-то написать. Скорее наоборот.
    Уже есть в сети всякие там кикстартеры. шде люди ищут финансирование для своих проектов, а также есть гитхаб, где люди могут собраться в работе над опенсорс-проектом и поработать.
    Если нет какого-то известного сайта, знакомящего разработчиков и пользователей, дающего им пообщаться, то это всего лишь означает. что разговаривать им не о чем.
    Людей на планете дофигища и всем сто-то нужно в той или иной степени. Идей масса, продуктов платных и бесплатных разного качества тоже полно, зато людей, которым вообще пофигу что писать, причем забесплатно, видимо, раз, два и обчелся. Не наберётся их на целую социальную сеть.

    Да и в чем проблема? Вот есть фотошоп - платный и не дешевый, а есть немалая куча "бесплатных аналогов фотошопа". Самый, наверно, известный - это Gimp. Нужен ли кому-то хороший графический редактор - безусловно. Много ли таких людей? Очень! Есть ли опенсорс проекты в этой тематике? Огромное количество!
    А вот с качеством у них так себе, хотя многие вполне юзабельны и во многом спообны аменить хорошие платные аналоги.
    Слышали выражение "Блеск и нищета опенороса"? Вот лучше не скажешь. Огромное кооличество человекочасов работы энтузиастов и штатных программистов, сидящих на своих окладах, пишут очень большое количество открытого кода. Можно садиться и писать любой проект. Нет никакого дефицита проектов и идей. Просто бери и пиши любой ткрытый проект с гитхаба, или любой аналог популярного платного. И тех и других в избытке!

    Зачем делать социальную сеть, которая даёт то. чего и так навалом? Она никому не нужна.

    Да, если нужны идеи проектов, то так и формулируйте вопрос. Огромное количество людей готовы делиться своими идеями. Идей много, без реализации они гроша выеденного не стоят, а на все проекты жизни не хватит их реализовывать, поэтому я совершенно не понимаю почему люди "боятся рассказать свои идеи, чтобы их не украли".
    К примеру я всегда с удовольствием делюсь своими идеями. которых накопилось уже не мало. У меня не хватит никаких ресурсов, чтобы их се реализовать. так что если кто-то какую-то из них "украдёт", я буду только рад, ведь, если повезёт и "ворюга" не просто балабол, а реально что-то может сделать, то я смогу при жизни попользоваться своими поплощенными идеями. Обычно идеи лежат в облатси интересов своих авторов. а значит автор не отказался бы попользоваться их воплощенями.

    Так какой смысл прятать идеи. если выгоднее ими делиться?!
    В общем за идеями приходите, рассказывайте что интересно - накидаем.
    Ответ написан
    Комментировать
  • Как сортировать числа в правильно порядке?

    desaki
    @desaki
    пишу ботов для телеги
    Возможно данная статья поможет вам: ссылка
    В статье говорится о методе sort()

    Скорее всего, вы что-то не так делаете. Покажу пример:
    Если у вас список состоит из чисел, то вывод будет следующим:
    number = [1, 10, 5, 11, 2, 4, 20, 21]
    number.sort()
    Вывод: [1, 2, 4, 5, 10, 11, 20, 21]
    
    Но, если у вас список такой, то вывод будет уже другим:
    number = ['1', '10', '5', '11', '2', '4', '20', '21']
    number.sort()
    Вывод: ['1', '10', '11', '2', '20', '21', '4', '5']

    Думаю, вы поняли, в чем заключалась ваша ошибка
    Ответ написан
    3 комментария
  • Как с помощью формул объединить данные по оплатам клиента в одну строчку финансового календаря для его автоматизации?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Возможно,

    =INDEX(IF(
      VLOOKUP(C6:AG6;{D3:D4\F3:F4};2)>=C6:AG6;
      VLOOKUP(C6:AG6;{D3:D4\C3:C4};2);
    ))


    61c065401ffa7169229125.png

    Обратите внимание, что для большего числа уникальных постояльцев необходимо будет усложнять индекс и условие отбора.

    https://docs.google.com/spreadsheets/d/1tU2tNlqb1r...
    Ответ написан
    Комментировать
  • Как начать Lua?

    BacCM
    @BacCM
    C++ почти с рождения
    tylerneylon.com/a/learn-lua

    А потом сюда

    https://love2d.org/

    там с примерами - можно сразу игрушку писать простенькую, хоть на ПК хоть на андроид
    Ответ написан
    Комментировать
  • Как сделать ВПР по всем листам в Google Таблице?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    Сделать триггер, в котором при изменении таблицы будет переписываться формула. В формуле можно получить все данные и тут же сделать ВПР()
    Что-то вроде:
    =arrayformula(i(A2:A="";"";впр(A2:A;{
    Лист1!A:B;
    Лист2!A:B;
    Лист3!A:B
    };0)))
    Ответ написан
    1 комментарий