Работаем с Инициалами в Фамилиях
Обсудить:
/**••••••••••
* Работаем с Инициалами в Фамилиях
*/
var PIB=(key,row)=>(row)=>{
row[key]=row[key].split(" ").reduce((acc,el,i)=>{
var [a,...rest]=el
acc+=!i?[a.toUpperCase(),...rest].join(''):' '+a.toUpperCase()+'.'
return acc
},'')
return row
}
var PIBs=(key,range)=>{
const cPIB=PIB(key)
return range.map(cPIB)
}
console.log(PIBs(0,
[['иванов Иван иванович'],
['Петров петр Петрович']]
))
//Інформація [ [ 'Иванов И. И.' ], [ 'Петров П. П.' ] ]
Обсудить:
Forwarded from DidacticСardsBot
СПИСОК НАЗВАНИЙ ВСЕХ ПОДПАПОК ПАПКИ НА GOOGLE ДИСКЕ
Источник:
••••••••••
Обсудить:
Источник:
function getSubFolders(parent) {
parent = parent.getId();
var childFolder = DriveApp.getFolderById(parent).getFolders();
while(childFolder.hasNext()) {
var child = childFolder.next();
Logger.log(child.getName());
getSubFolders(child);
}
return;
}
function listFolders() {
var parentFolder = DriveApp.getFolderById("GOOGLE_DRIVE_FOLDER_ID");
var childFolders = parentFolder.getFolders();
while(childFolders.hasNext()) {
var child = childFolders.next();
Logger.log(child.getName());
getSubFolders(child);
}
}••••••••••
Обсудить:
www.appsscript.it
Elenco dei nomi di tutte le sottocartelle di una cartella in Google Drive | Apps Script
Con queste due funzioni è possibile ottenere la lista dei nomi delle sue relative sottocartelle e delle cartelle a sua volta annidate.
Forwarded from DidacticСardsBot
modularLibraries.gs
Источник:
Нативное решение Google Apps Script для создания, использования и разработки библиотек.
Этот ридми состоит из:
Документация о том, как это работает:
Глобальное Importпространство имен
Создание экземпляра пакета и размещение имен
Как писать собственные библиотеки по этому шаблону
Примеры библиотек, расширяющих API Google с использованием базового кода, приведенного выше.
Пример библиотеки HelloWorld
Requests.gs - это тяжелая оболочка вокруг UrlFetchApp, которая позволяет детально контролировать взаимодействия с Google API.
Sheets.gs - это легкая оболочка API электронных таблиц.
SheetsDB.gs расширяет Sheets.gs, вводя сеансы
Как писать свои собственные библиотеки
Мотивация
Мне нравится экосфера Python / Github, но мне приходится использовать AppsScripts на работе. В частности, D on't R epeat Y самостоятельно . Уметь повторно использовать код, который решает определенные проблемы, но вам нужно только понимать, как с ним взаимодействовать. Библиотека должна просто инкапсулировать определенную функциональность.
••••••••••
Обсудить:
Источник:
Нативное решение Google Apps Script для создания, использования и разработки библиотек.
Этот ридми состоит из:
Документация о том, как это работает:
Глобальное Importпространство имен
Создание экземпляра пакета и размещение имен
Как писать собственные библиотеки по этому шаблону
Примеры библиотек, расширяющих API Google с использованием базового кода, приведенного выше.
Пример библиотеки HelloWorld
Requests.gs - это тяжелая оболочка вокруг UrlFetchApp, которая позволяет детально контролировать взаимодействия с Google API.
Sheets.gs - это легкая оболочка API электронных таблиц.
SheetsDB.gs расширяет Sheets.gs, вводя сеансы
Как писать свои собственные библиотеки
Мотивация
Мне нравится экосфера Python / Github, но мне приходится использовать AppsScripts на работе. В частности, D on't R epeat Y самостоятельно . Уметь повторно использовать код, который решает определенные проблемы, но вам нужно только понимать, как с ним взаимодействовать. Библиотека должна просто инкапсулировать определенную функциональность.
••••••••••
Обсудить:
GitHub
GitHub - classroomtechtools/modularLibraries.gs: A collection of importable, modular libraries for any gas project.
A collection of importable, modular libraries for any gas project. - GitHub - classroomtechtools/modularLibraries.gs: A collection of importable, modular libraries for any gas project.
Forwarded from DidacticСardsBot
Работа с часовыми поясами в JavaScript
Источник:
Недавно я работал над задачей добавления часовых поясов в JS-библиотеку календаря, которую ведёт моя команда. Мне было хорошо известно о никудышной поддержке часовых поясов в JavaScript, но я надеялся, что абстрагирование имеющихся объектов данных позволит легко решить большинство трудностей.
Однако мои мечты пошли прахом. Когда я углубился в задачу, то понял, что в этом языке действительно трудно работать с часовыми поясами. Реализовать что-то сложнее простого форматирования отображения времени и вычисления даты с помощью комплексных операций (функции календаря) было чрезвычайно трудным делом. Я получил ценный опыт решения этой проблемы, и это повлекло за собой новые затруднения.
В этой статье я хочу обсудить, с чем я столкнулся и как это решал. Пока я писал текст, осознал, что причиной всех невзгод было плохое понимание мной самой темы часовых поясов. В свете этого осознания я предлагаю сначала подробно поговорить об определении и стандартах, а уже потом переходить к JavaScript.
••••••••••
Обсудить:
Источник:
Недавно я работал над задачей добавления часовых поясов в JS-библиотеку календаря, которую ведёт моя команда. Мне было хорошо известно о никудышной поддержке часовых поясов в JavaScript, но я надеялся, что абстрагирование имеющихся объектов данных позволит легко решить большинство трудностей.
Однако мои мечты пошли прахом. Когда я углубился в задачу, то понял, что в этом языке действительно трудно работать с часовыми поясами. Реализовать что-то сложнее простого форматирования отображения времени и вычисления даты с помощью комплексных операций (функции календаря) было чрезвычайно трудным делом. Я получил ценный опыт решения этой проблемы, и это повлекло за собой новые затруднения.
В этой статье я хочу обсудить, с чем я столкнулся и как это решал. Пока я писал текст, осознал, что причиной всех невзгод было плохое понимание мной самой темы часовых поясов. В свете этого осознания я предлагаю сначала подробно поговорить об определении и стандартах, а уже потом переходить к JavaScript.
••••••••••
Обсудить:
Хабр
Работа с часовыми поясами в JavaScript
Недавно я работал над задачей добавления часовых поясов в JS-библиотеку календаря, которую ведёт моя команда. Мне было хорошо известно о никудышной поддержке ч...
База данных JavaScript TaffyDB
Источник:
Вступление
Как вы когда-нибудь замечали, что литералы объектов JavaScript очень похожи на записи? И что, если вы оберните группу из них в массив, у вас будет что-то, очень похожее на таблицу базы данных? TaffyDB - это библиотека, которая привносит в эту концепцию мощную функциональность базы данных и быстро улучшает способ работы с данными внутри JavaScript.
••••••••••
Обсудить:
Источник:
Вступление
Как вы когда-нибудь замечали, что литералы объектов JavaScript очень похожи на записи? И что, если вы оберните группу из них в массив, у вас будет что-то, очень похожее на таблицу базы данных? TaffyDB - это библиотека, которая привносит в эту концепцию мощную функциональность базы данных и быстро улучшает способ работы с данными внутри JavaScript.
••••••••••
Обсудить:
Forwarded from DidacticСardsBot
Как написать промежуточное ПО для приложений Express.js
Источник:
Express.js - это легкая HTTP-структура для node.js, которая позволяет создавать различные приложения, от стандартного веб-сайта до REST API. Это не мешает вам с минимальным API, который вы заполняете своими индивидуальными потребностями.
Структура ExpressJS такова: все является «промежуточным программным обеспечением».
Что такое промежуточное ПО?
ПО промежуточного слоя - это функция, которая получает объекты запроса и ответа цикла HTTP-запроса / ответа. Он может изменять (преобразовывать) эти объекты перед передачей их следующей функции промежуточного программного обеспечения в цепочке. Он может решить написать в ответ; он также может завершить ответ, не продолжая цепочку.
В других фреймворках «промежуточное ПО» называется «фильтрами», но концепция та же: запрос, ответ и некоторые функции преобразования.
Очень простая функция промежуточного программного обеспечения выглядит так:
Это простейшее промежуточное ПО: функция с сигнатурой (req, res, next). В этом конкретном примере простой регистратор выводит некоторую информацию об этих запросах на консоль сервера, а затем продолжает цепочку, вызывая next().
Задача Express - управлять вашей цепочкой функций промежуточного программного обеспечения. Все промежуточное ПО должно выполнять три задачи:
Это должна быть функция, которая делает что-то потрясающее
Это хорошо задокументировано
Его можно легко добавить в существующее приложение Express.
••••••••••
Обсудить:
Источник:
Express.js - это легкая HTTP-структура для node.js, которая позволяет создавать различные приложения, от стандартного веб-сайта до REST API. Это не мешает вам с минимальным API, который вы заполняете своими индивидуальными потребностями.
Структура ExpressJS такова: все является «промежуточным программным обеспечением».
Что такое промежуточное ПО?
ПО промежуточного слоя - это функция, которая получает объекты запроса и ответа цикла HTTP-запроса / ответа. Он может изменять (преобразовывать) эти объекты перед передачей их следующей функции промежуточного программного обеспечения в цепочке. Он может решить написать в ответ; он также может завершить ответ, не продолжая цепочку.
В других фреймворках «промежуточное ПО» называется «фильтрами», но концепция та же: запрос, ответ и некоторые функции преобразования.
Очень простая функция промежуточного программного обеспечения выглядит так:
function logger(req,res,next){
console.log(new Date(), req.method, req.url);
next();
}Это простейшее промежуточное ПО: функция с сигнатурой (req, res, next). В этом конкретном примере простой регистратор выводит некоторую информацию об этих запросах на консоль сервера, а затем продолжает цепочку, вызывая next().
Задача Express - управлять вашей цепочкой функций промежуточного программного обеспечения. Все промежуточное ПО должно выполнять три задачи:
Это должна быть функция, которая делает что-то потрясающее
Это хорошо задокументировано
Его можно легко добавить в существующее приложение Express.
••••••••••
Обсудить:
Stormpath User Identity API
How to Write Middleware for Express.js Apps
Express.js is a lightweight HTTP framework for node.js that allows you to create a variety of applications, from a standard website to a REST API. It gets out of your way with a minimal API that you fill in with your custom needs. The structure of ExpressJS…
#getInfoTable
/**#
* V 0.1
* Получение информации о таблице
* возвращаемые поля задаем в infoSheet
* по умолчанию берутся из #infoSheetDefault
* @param {*} id
* @param {string} [infoSheet='']
* @returns
*/
function getInfoTable(id,infoSheet=''){
var {properties,sheets}=direct_get(id)
var {title,locale,autoRecalc,timeZone}=properties
var propSheet=sheets.map(sh=>propertiesToArray(sh))
var infoSheet=infoSheet||infoSheetDefault()
var map=(sh,pr)=>(pr)=>{
return {[pr]:lens(pr).get(sh.properties)}
}
var infoTableSheets=sheets.reduce(
(t,sh)=>[...t,infoSheet.map(map(sh))],[])
return infoTableSheets.map(el=>Object.assign(...[...el]))
}
Symbolic Links for Easier Multi-Folder Local Development
Источник:
Вы знаете, как открыть «проект» в локальном редакторе кода? Я предполагаю, что разные редакторы используют разную терминологию для этого, но по сути то, что вы делаете, - это открываете папку / каталог, и он показывает вам боковую панель, полную файлов и папок, по которым вы можете перемещаться, и т.
Обычно есть одна родительская папка, а все остальное находится в этой папке. Правильно? Что ж, этого не должно быть! Вот тут-то и пригодятся символические ссылки .
Иначе известные как символические ссылки , они похожи на указатели на другое место. Хотя на самом деле вам не нужно перемещать папку, на которую вы ссылаетесь, вы можете создать указатель на нее, который будет вести себя так, как если бы вы это сделали.
••••••••••
Источник:
Вы знаете, как открыть «проект» в локальном редакторе кода? Я предполагаю, что разные редакторы используют разную терминологию для этого, но по сути то, что вы делаете, - это открываете папку / каталог, и он показывает вам боковую панель, полную файлов и папок, по которым вы можете перемещаться, и т.
Обычно есть одна родительская папка, а все остальное находится в этой папке. Правильно? Что ж, этого не должно быть! Вот тут-то и пригодятся символические ссылки .
Иначе известные как символические ссылки , они похожи на указатели на другое место. Хотя на самом деле вам не нужно перемещать папку, на которую вы ссылаетесь, вы можете создать указатель на нее, который будет вести себя так, как если бы вы это сделали.
••••••••••
CSS-Tricks
Symbolic Links for Easier Multi-Folder Local Development | CSS-Tricks
You know how you open a "project" in a local code editor? I guess different editors have different terminology for it, but essentially what you are doing is
GAS-Trigger-TestingFunction.gs
Источник:
Обсудить:
#GAS #tools #debug
Источник:
/**
* Test function for onEdit. Passes an event object to simulate an edit to
* a cell in a spreadsheet.
*
* Check for updates: http://stackoverflow.com/a/16089067/1677912
*
* See https://developers.google.com/apps-script/guides/triggers/events#google_sheets_events
*
* on Script editor, set to debug THIS function, but create breakpoints
* on the onEdit Function
*/
function test_onEdit() {
onEdit({
user : Session.getActiveUser().getEmail(),
source : SpreadsheetApp.getActiveSpreadsheet(),
range : SpreadsheetApp.getActiveSpreadsheet().getActiveCell(),
value : SpreadsheetApp.getActiveSpreadsheet().getActiveCell().getValue(),
authMode : "LIMITED"
});
}
••••••••••Обсудить:
#GAS #tools #debug
Gist
A pattern to debug google apps script (GAS) triggered functions.
A pattern to debug google apps script (GAS) triggered functions. - GAS-Trigger-TestingFunction.gs
Parcel — очень быстрый бандлер, не требующий настройки
Источник:
Parcel — маленький и быстрый бандлер, позиционируется как решение для маленьких проектов.
••••••••••
Обсудить:
Источник:
Parcel — маленький и быстрый бандлер, позиционируется как решение для маленьких проектов.
••••••••••
Обсудить:
Хабр
Parcel — очень быстрый бандлер, не требующий настройки
Для чего Parcel — маленький и быстрый бандлер, позиционируется как решение для маленьких проектов. С момента первого релиза (7 дней назад) уже собрал 8725 звезд...
‼️ Порядок выполнения файлов GS в проекте ‼️
Execution order of GS files in a Project
Cannot find function in object' error after moving class definition to separate .gs file
Тема очень больная уже не раз сталкивался
хочу найти правильный способ не зависить от того того в каком порядке функции попали в проект
Представьте, что у вас есть один файл Code.gs для всего кода скрипта приложений. У него есть своего рода JavaScript-«класс» Apple, глобальные и локальные переменные класса и функции, которая их использует:
Pastiebin
Этот скрипт отлично работает
Через некоторое время вы решите, что переместить определение класса Apple в отдельный файл - хорошая идея:
Pastiebin
Но поведение становится странным:
Ошибки выполнения скрипта: TypeError: не удается найти функцию getInfo в объекте [object Object]
Нужно разработать механизм борьбы с такими ошибками
Execution order of GS files in a Project
Cannot find function in object' error after moving class definition to separate .gs file
Тема очень больная уже не раз сталкивался
хочу найти правильный способ не зависить от того того в каком порядке функции попали в проект
Представьте, что у вас есть один файл Code.gs для всего кода скрипта приложений. У него есть своего рода JavaScript-«класс» Apple, глобальные и локальные переменные класса и функции, которая их использует:
Pastiebin
Этот скрипт отлично работает
Через некоторое время вы решите, что переместить определение класса Apple в отдельный файл - хорошая идея:
Pastiebin
Но поведение становится странным:
Ошибки выполнения скрипта: TypeError: не удается найти функцию getInfo в объекте [object Object]
Нужно разработать механизм борьбы с такими ошибками
Stack Overflow
Execution order of GS files in a Project
Where can I read documentation concerning the execution order rules for GS files?
To dimension the problem I created two trivial objects, each in their own file.
1_File.gs
var ObjB = new Object();
To dimension the problem I created two trivial objects, each in their own file.
1_File.gs
var ObjB = new Object();
Зачем знать, как вещи работают внутри?
Многие разработчики считают, что им не нужно понимать, как вещи работают внутри, а достаточно просто знать API. Я считаю, что с таким подходом есть проблема.
Изначально я думал, что понимание внутренностей системы или ее компонента помогает в дебаге. И это правда, ты можешь находить причины проблем в десятки раз быстрее, чем если бы ты не знал, что внутри. Но через какое-то время я понял, что есть еще более полезный эффект. Понимания внутренностей дает тебе понимания свойст компонента/подсистемы. А понимание свойств - это обязательный атрибут проектирования.
Не зная внутренностей, вы не понимаете свойств систем и следовательно не можете грамотно проектировать. Да, можно опираться на маркетинговый материал, но это очень наивный подход.
Примеров масса:
✅ Если вы знаете, как устроены бызы данных, то вы можете выбрать подходящую. Понимание индексов позволяет предсказать, что произойдет с выборками, если объем данных увеличиться в несколько раз. Или почему добавление индексов может снизить производительность вашего приложения.
✅ Если вы знаете, как работает Docker, то можете оценить риски изоляции и возможно начать использовать виртуалки.
✅ Если вы знаете, как работает HTTPS, то без проблем найдете проблему, когда корпоративный прокси заказчика делает man-in-the-middle и выкусывает CORS заголовки.
✅ Если вы знаете, что xslx файлы на самом деле zip с xml внутри, то вы можете предсказать, что конвертация в CSV может помочь решить проблему с со скоростью парсинга.
✅ Если вы понимаете, как работает JWT, то вы будете знать, что клиент и без "секрета" извлечь все данные с токена.
✅ Если вы понимаете, как внутри устроена файловая система, то поймете, почему лучше не хранить большое количество файлов в одной директории в ext2.
✅ Я встречал сениор разработчиков, которые, к примеру, думали, что React Native компилируется в нативных код и в результате не могли понять, когда стоит использовать RN, а когда нативные приложения.
✅ etc
Что думаете?
Многие разработчики считают, что им не нужно понимать, как вещи работают внутри, а достаточно просто знать API. Я считаю, что с таким подходом есть проблема.
Изначально я думал, что понимание внутренностей системы или ее компонента помогает в дебаге. И это правда, ты можешь находить причины проблем в десятки раз быстрее, чем если бы ты не знал, что внутри. Но через какое-то время я понял, что есть еще более полезный эффект. Понимания внутренностей дает тебе понимания свойст компонента/подсистемы. А понимание свойств - это обязательный атрибут проектирования.
Не зная внутренностей, вы не понимаете свойств систем и следовательно не можете грамотно проектировать. Да, можно опираться на маркетинговый материал, но это очень наивный подход.
Примеров масса:
✅ Если вы знаете, как устроены бызы данных, то вы можете выбрать подходящую. Понимание индексов позволяет предсказать, что произойдет с выборками, если объем данных увеличиться в несколько раз. Или почему добавление индексов может снизить производительность вашего приложения.
✅ Если вы знаете, как работает Docker, то можете оценить риски изоляции и возможно начать использовать виртуалки.
✅ Если вы знаете, как работает HTTPS, то без проблем найдете проблему, когда корпоративный прокси заказчика делает man-in-the-middle и выкусывает CORS заголовки.
✅ Если вы знаете, что xslx файлы на самом деле zip с xml внутри, то вы можете предсказать, что конвертация в CSV может помочь решить проблему с со скоростью парсинга.
✅ Если вы понимаете, как работает JWT, то вы будете знать, что клиент и без "секрета" извлечь все данные с токена.
✅ Если вы понимаете, как внутри устроена файловая система, то поймете, почему лучше не хранить большое количество файлов в одной директории в ext2.
✅ Я встречал сениор разработчиков, которые, к примеру, думали, что React Native компилируется в нативных код и в результате не могли понять, когда стоит использовать RN, а когда нативные приложения.
✅ etc
Что думаете?
Наткнулся на интересный репозиторий - 30 second of code
Более сотни коротких кусочков кода. Залипнуть можно на долго, многое может пригодиться для решения ваших задач.
Рекомендую 👍
#js
Более сотни коротких кусочков кода. Залипнуть можно на долго, многое может пригодиться для решения ваших задач.
Рекомендую 👍
#js
GitHub
GitHub - Chalarangelo/30-seconds-of-code: Coding articles to level up your development skills
Coding articles to level up your development skills - Chalarangelo/30-seconds-of-code
Вытягиваем из текста ссылки на Google Документы
regexp101
regexp101
/https:\/\/docs.google.com\/(.*)\/d\/(.*)\/.*sharing/regex101
regex101: build, test, and debug regex
Regular expression tester with syntax highlighting, explanation, cheat sheet for PHP/PCRE, Python, GO, JavaScript, Java. Features a regex quiz & library.