Задать вопрос
  • Языки, похожие на F# и Rust?

    Haskell, Ocaml, ML, Swift, Crystal, Idris
    ML из них самый старый, и языки, которые имеют схожие моменты с ним, называются ML-подобными.
    Ответ написан
    Комментировать
  • Объясните как работает этот код, я не понимаю эти манипуляции со скобочками?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Как комментарий ко всем ответам:
    Надо различать объект функции и вызов результата вычисления функции.
    Объект - это f
    Вызов результата - это f()
    На этом и основан фокус.
    f() превращается в a
    a() превращается в b
    b() превращается в print("nested function")
    Оно печатает строку.
    Ответ написан
    4 комментария
  • Как заменить слово в сотнях html-файлах на другие слова из списка?

    @AVKor
    Скрипт на Bash считывает файл со словами-заменителями, для каждого слова берёт очередной файл, в котором надо сделать замену и через sed её делает.
    Ответ написан
    4 комментария
  • Как сделать импорт таблицы с сайта, если она на нескольких страницах?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    На самом деле это задание, а не вопрос.

    Можно попробовать использовать какой-то просто скраппер, например, https://www.youtube.com/watch?v=gwV7L3e0gSs

    Таблица https://docs.google.com/spreadsheets/d/1OrgUq4PSRV...

    Думаю, хватит 12 минут, чтобы собрать все в одну Таюлицу.
    Ответ написан
    2 комментария
  • Как автосохранять с нескольких листов на один в Google Sheets?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    Ну, например, вот так

    function saveData2() {
      const book = SpreadsheetApp.openById(
        '1FUSSiDQoXyvKXfzYydoUUfcCGYq_TskpRiwfb28_1Z0'
      );
      const date = new Date();
      const sheetTotal = book.getSheetByName('TOTAL');
      const sheetGOOG = book.getSheetByName('NASDAQ:GOOG');
      const valuesGOOG = sheetGOOG.getRange('C3:U3').getValues().map(row => [date, 'NASDAQ:GOOG', ...row]);
      appendData_(sheetTotal, valuesGOOG);
      const sheetDIS = book.getSheetByName('NYSE:DIS');
      const valuesDIS = sheetDIS.getRange('C3:U3').getValues().map(row => [date, 'NYSE:DIS', ...row]);
      appendData_(sheetTotal, valuesDIS);
      console.info(`saveData was called successful`);
    }
    
    function appendData_(sheet, values) {
      if (sheet.getLastRow() === sheet.getMaxRows())
        sheet.appendRow([]);
      sheet.getRange(sheet.getLastRow() + 1, 1, values.length, values[0].length)
        .setValues(values);
    }


    1. Берем лист 'NASDAQ:GOOG'
    2. Берем данные из 'C3:U3'
    3. Вызываем appendData_
    4. Повторяем для листа 'NYSE:DIS'


    saveData2 задан для дневного триггера

    Результат

    61ded0ce1b9dd206623233.png

    Пример добавил в Таблицу из этого ответа https://qna.habr.com/answer?answer_id=1834719#answ...
    Ответ написан
    3 комментария
  • Можно ли склонять слова автоматически в Excel?

    hint000
    @hint000
    у админа три руки
    Для этого потребовалось бы встроить в Excel огромный словарь. И запилить функции для работы со словарём из формул и\или макросов. А microsoft уже давно выпилил даже из Word'а нормальный модуль проверки орфографии, не нужно им это: https://www.cnews.ru/news/top/rossijskaya_versiya_...
    Ответ написан
    Комментировать
  • Как задать ограничение времени для теста в 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

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