Уникальные без удаления строк
#snippet #JS #GAS
#snippet #JS #GAS
function g(range){
//var range=[['v'],["v"],["b"]]
var r=range.flat()
var u=[...new Set(r)]
var d=r.reduce((acc, el) => {
acc[el] = (acc[el] || 0) + 1;
return acc;
}, {})
var a=Object.entries(d)
return a.map((e)=>[e[0],...Array(e[1]-1)
.fill('')])
.flat()
.map((h,i)=>[range[i][0],h])
}Путь к пониманию шаблонных литералов в JavaScript
Источник:
Шаблонные литералы дают нам новый механизм создания строковых значений. Этот механизм отличается множеством мощных возможностей, среди которых — упрощение создания многострочных конструкций и использование местозаполнителей для внедрения в строки результатов вычисления выражений. Кроме того, тут имеется и ещё одна возможность — теговые шаблоны (tagged template literals). Это — расширенная форма шаблонных литералов. Теговые шаблоны позволяют создавать строки с использованием выражений, находящихся внутри строк, и с применением особых функций. Всё это расширяет возможности программистов по работе со строками, позволяя, например, создавать динамические строки, которые могут представлять собой URL, или писать функции для тонкой настройки HTML-элементов.
••••••••••
#JS #book
Обсудить:
Источник:
Шаблонные литералы дают нам новый механизм создания строковых значений. Этот механизм отличается множеством мощных возможностей, среди которых — упрощение создания многострочных конструкций и использование местозаполнителей для внедрения в строки результатов вычисления выражений. Кроме того, тут имеется и ещё одна возможность — теговые шаблоны (tagged template literals). Это — расширенная форма шаблонных литералов. Теговые шаблоны позволяют создавать строки с использованием выражений, находящихся внутри строк, и с применением особых функций. Всё это расширяет возможности программистов по работе со строками, позволяя, например, создавать динамические строки, которые могут представлять собой URL, или писать функции для тонкой настройки HTML-элементов.
••••••••••
#JS #book
Обсудить:
Хабр
Путь к пониманию шаблонных литералов в JavaScript
Спецификация ECMAScript, вышедшая в 2015 году (ES6), добавила в JavaScript новую возможность — шаблонные литералы (template literals). Шаблонные литералы дают на...
Шаблоны, или что общего у приходного кассового ордера и метода ToString() / Хабр
https://m.habr.com/ru/post/560722/
https://m.habr.com/ru/post/560722/
Хабр
Шаблоны, или что общего у приходного кассового ордера и метода ToString()
Вот как-то так оно и выглядит...Задачу генерации текстовых строк по шаблону никак нельзя назвать новой, даже с натяжкой. Сюда можно отнести и заполнение стандартных форм наподобие приходных...
Forwarded from Alex Pirks
Из собственного наблюдения.
Дело не в CRM и таблицах. А в неумении менеджеров работать с данными, которые живут в бизнес процессах.
Если менеджер понимает с чем он имеет дело, он сам выберет необходимый ему инструмент и ... архитектуру проекта.
А таблицы это как мираж озера в пустыне, кажется "щас напьтемся досыта", ан нет, вы еще только в начале пути автоматизации бизнес процессов.
Еще добавлю, одну мысль, которая была отпечатана на бумаге и висела в рамке у одной команды разработчиков.
"Автоматизация эффективных процессов увеличивает их эффективность, автоматизация неэффективных - увеличивает неэффективность."
Дело не в CRM и таблицах. А в неумении менеджеров работать с данными, которые живут в бизнес процессах.
Если менеджер понимает с чем он имеет дело, он сам выберет необходимый ему инструмент и ... архитектуру проекта.
А таблицы это как мираж озера в пустыне, кажется "щас напьтемся досыта", ан нет, вы еще только в начале пути автоматизации бизнес процессов.
Еще добавлю, одну мысль, которая была отпечатана на бумаге и висела в рамке у одной команды разработчиков.
"Автоматизация эффективных процессов увеличивает их эффективность, автоматизация неэффективных - увеличивает неэффективность."
Forwarded from Что вы мне рекламируете?
Лайфхак для тех, кто пишет
Сам я вообще ненавижу писать, удивительно было создавать этот канал и блог, когда я диплом еле-еле написал, для меня писать было чем-то сверхъестественным, я был тем самым человеком из мемов, который не мог подступить к написанию и сидел перед белым Word A4 несколько часов, но недавно я понял, как этот процесс улучшить. Этот локальный хинт для как раз тех, кому сложно начать.
На самом деле я до сих пор иногда также туплю, возможно поэтому в блоге статьи появляются раз в квартал, лол.
Секрет в том, чтобы перед написанием чего-то сесть на 30 мин и почитать книгу. Идеально, если это какая-нибудь художественная, но на самом деле любая подойдет (хотя какая-нибудь Python for dummies может и не подойдет).
Как это работает (мое предположение):
1. Ты сосредотачиваешься, 30 мин чтения на самом деле не хуже медитаций. Думаю, дело как раз в том, что лодка клипового мышления внутри головы перестает так сильно раскачиваться, как вовремя постоянного серфинга лент
2. Типичный день, особенно будни — это текучка из задач, постоянный тудулист, по которому ты идешь, рутина без какого-либо творчества. Написать что-то красиво и интересно — задача из другого раздела.
Сесть почитать — это окунуться в мир своих фантазий, 30 мин и вы фреш для глаголинга пером
Минус в том, что можно сильно увлечься книгой, поэтому нужно сразу себя настроить на короткий спринт. А еще этот прием подойдет для каких-нибудь брейнштормов, людям, кому иногда нужно из себя креатив на конвейере поставлять 👁
Сам я вообще ненавижу писать, удивительно было создавать этот канал и блог, когда я диплом еле-еле написал, для меня писать было чем-то сверхъестественным, я был тем самым человеком из мемов, который не мог подступить к написанию и сидел перед белым Word A4 несколько часов, но недавно я понял, как этот процесс улучшить. Этот локальный хинт для как раз тех, кому сложно начать.
На самом деле я до сих пор иногда также туплю, возможно поэтому в блоге статьи появляются раз в квартал, лол.
Секрет в том, чтобы перед написанием чего-то сесть на 30 мин и почитать книгу. Идеально, если это какая-нибудь художественная, но на самом деле любая подойдет (хотя какая-нибудь Python for dummies может и не подойдет).
Как это работает (мое предположение):
1. Ты сосредотачиваешься, 30 мин чтения на самом деле не хуже медитаций. Думаю, дело как раз в том, что лодка клипового мышления внутри головы перестает так сильно раскачиваться, как вовремя постоянного серфинга лент
2. Типичный день, особенно будни — это текучка из задач, постоянный тудулист, по которому ты идешь, рутина без какого-либо творчества. Написать что-то красиво и интересно — задача из другого раздела.
Сесть почитать — это окунуться в мир своих фантазий, 30 мин и вы фреш для глаголинга пером
Минус в том, что можно сильно увлечься книгой, поэтому нужно сразу себя настроить на короткий спринт. А еще этот прием подойдет для каких-нибудь брейнштормов, людям, кому иногда нужно из себя креатив на конвейере поставлять 👁
Разработка Технического задания по ГОСТ 34 легко и просто / Habr
https://m.habr.com/ru/amp/post/432852/
https://m.habr.com/ru/amp/post/432852/
Хабр
Разработка Технического задания по ГОСТ 34 легко и просто
Нередко слышишь мнение, что составление Технического задания по ГОСТ 34 (ТЗ) занятие не только трудоемкое, но и крайне раздражающее, поскольку приходится писать...
How to automatically refresh a filter view in Google Sheets when new data comes in via Google Forms?
Источник:
Я провел утро в поисках чего-то похожего.
Источник:
Я провел утро в поисках чего-то похожего.
function myFunc() {
var spreadSheet = SpreadsheetApp.getActive();
var reportSheet = spreadSheet.getSheetByName('Report Sheet');
var columnCount = reportSheet.getLastColumn();
reportSheet.clearContents(); // I do this because each day gets a fresh report
if(reportSheet.getFilter()) {
var hadFilter = true;
var sheetFilter = reportSheet.getFilter();
var filterSettings = new Array(columnCount);
// Array indexed at 0, columns indexed at 1. A recipe for disaster!
for(var i = 0; i < columnCount; i++) {
filterSettings[i] = sheetFilter.getColumnFilterCriteria(i + 1);
}
// If you attempt to append data over a set of rows that had a filter still applied,
// things get weird. Hence removing and re-creating the filter.
sheetFilter.remove();
}
// Not going to bore you with the details;
var arrayOfCells = myCustomFunctionThatReturnsData();
reportSheet.getRange(1,1,arrayOfCells.length,columnCount).setValues(arrayOfCells);
if(hadFilter) {
var sheetFilter = reportSheet.getDataRange().createFilter();
for(var i = 0; i < columnCount; i++) {
sheetFilter.setColumnFilterCriteria(i + 1, filterSettings[i])
}
// Here's the magic! Without this, you get a filter that looks
// like it should work but doesn't actually apply.
SpreadsheetApp.flush();
}
}Web Applications Stack Exchange
How to automatically refresh a filter view in Google Sheets when new data comes in via Google Forms?
I have a filter view in Google Sheets that does not refresh when new data comes in via Google Forms.
To refresh the filter view, I can remove the filter and apply it again, or even just click "OK"...
To refresh the filter view, I can remove the filter and apply it again, or even just click "OK"...
Forwarded from DidacticСardsBot
Логирование активности с использованием Web Beacon API
Источник:
/ URL куда отправить данные
let url = '/api/my-endpoint';
// Создание нового FormData
let data = new FormData();
data.append('hello', 'world');
let result = navigator.sendBeacon(url, data);
if (result) {
console.log('Добавлено в очередь!');
} else {
console.log('Ошибка.');
}
••••••••••
Обсудить:
Источник:
/ URL куда отправить данные
let url = '/api/my-endpoint';
// Создание нового FormData
let data = new FormData();
data.append('hello', 'world');
let result = navigator.sendBeacon(url, data);
if (result) {
console.log('Добавлено в очередь!');
} else {
console.log('Ошибка.');
}
••••••••••
Обсудить:
Хабр
Логирование активности с использованием Web Beacon API
Beacon API — это основанный на JavaScript интерфейс для: отправки небольшого количества данных на сервер с браузера, без ожидания ответа. В этой статье, мы расс...
Forwarded from DidacticСardsBot
freeCodeCamp.org
How to use Google Sheets as a JSON Endpoint
By Clark Jason Ngo UPDATE: 5/13/2020 - New Share Dialog Box steps available below. Thanks Erica H! Are you building a prototype dynamic web application and need to collaborate with non-developers? I have been to a hackathon before and experienced p...
Forwarded from DidacticСardsBot
Определите, находится ли событие / активная ячейка внутри именованного диапазона
Источник:
••••••••••
Обсудить:
Источник:
••••••••••
Обсудить:
Gist
Google App Scripts - Sheets - Determine if event/active cell is inside a Named Range
Google App Scripts - Sheets - Determine if event/active cell is inside a Named Range - code.gs
Function.caller - JavaScript | MDN
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/caller
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/caller
MDN Web Docs
Function.prototype.caller - JavaScript | MDN
The caller accessor property of Function instances returns the function that invoked this function. For strict, arrow, async, and generator functions, accessing the caller property throws a TypeError.
Алгоритм сравнение двух списков list, для синхронизации таблицы
Источник
P.S. Пока на JAVA и как кейс...
Источник
P.S. Пока на JAVA и как кейс...
Telegraph
Алгоритм сравнение двух списков list, для синхронизации таблицы
1.Задача Необходимо сделать синхронизацию локальной таблицы с таблицей загруженной из сервера. Было принято решение поэтапно сравнивать два списка(локальный список и серверный). Первоначально, списки были отсортированы. Далее осталось в этапном сравнивании…
Развертывание с помощью Google Cloud Deployment Manager через NodeJS
https://dzone.com/articles/deploying-your-stuff-with-google-cloud-deployment
https://dzone.com/articles/deploying-your-stuff-with-google-cloud-deployment
dzone.com
Deploying with Google Cloud Deployment Manager via NodeJS - DZone Cloud
If you've been looking for a way to deploy to Google Cloud with JS, you might not have gotten very far. Luckily, developers are always creating, so this might help.
Превосходя часы работы со скриптами приложений: поздоровайтесь с MemsheetApp!
MemsheetApp использует двумерный массив в памяти для имитации электронной таблицы, чтобы избежать превышения квоты времени выполнения для вызовов JavaScript в GoogleSheets.
https://dzone.com/articles/beating-the-apps-script-clock-say-hello-to-memshee
MemsheetApp использует двумерный массив в памяти для имитации электронной таблицы, чтобы избежать превышения квоты времени выполнения для вызовов JavaScript в GoogleSheets.
https://dzone.com/articles/beating-the-apps-script-clock-say-hello-to-memshee
dzone.com
Beating the Apps Script Clock: Say Hello to MemsheetApp! - DZone Performance
See how to use MemsheetApp to avoid hitting the execution time quota for JavaScript calls in GoogleSheets by using a 2-D in-memory array to mimic a spreadsheet.
Forwarded from DidacticСardsBot
Как создавать формы, позволяющие загружать файлы на Google Диск
Источник:
Узнайте, как создавать формы загрузки файлов для Google Диска и получать большие файлы от кого угодно. От респондента формы не требуется входить в свои учетные записи Google.
С помощью форм загрузки файлов ( демонстрационная форма ) для Google Таблиц вы можете получать большие файлы любого размера от кого угодно прямо на вашем Google Диске. Вы можете автоматически отправлять подтверждения по электронной почте, чтобы уведомить отправителя формы. Формы могут быть созданы в Google Таблицах с использованием встроенного конструктора форм перетаскивания, и формы могут иметь CAPTCHA, собирать электронные подписи , загружать несколько файлов, защищать паролем и многое другое.
В отличие от функции загрузки файлов в Google Forms, респондентам формы не требуется учетная запись Google для загрузки файлов через вашу форму.
••••••••••
Обсудить:
Источник:
Узнайте, как создавать формы загрузки файлов для Google Диска и получать большие файлы от кого угодно. От респондента формы не требуется входить в свои учетные записи Google.
С помощью форм загрузки файлов ( демонстрационная форма ) для Google Таблиц вы можете получать большие файлы любого размера от кого угодно прямо на вашем Google Диске. Вы можете автоматически отправлять подтверждения по электронной почте, чтобы уведомить отправителя формы. Формы могут быть созданы в Google Таблицах с использованием встроенного конструктора форм перетаскивания, и формы могут иметь CAPTCHA, собирать электронные подписи , загружать несколько файлов, защищать паролем и многое другое.
В отличие от функции загрузки файлов в Google Forms, респондентам формы не требуется учетная запись Google для загрузки файлов через вашу форму.
••••••••••
Обсудить:
Digital Inspiration
How to Create Forms that Allow File Uploads to Google Drive
Learn how to build file upload forms for Google Drive and receive large files from anyone. The form respondent does not have to be signed in to their Google accounts