Node.js | ExcelJS
ExcelJS - пакет, позволяющий читать и записывать табличные данные в файлы формата XLSX.
Преимущества
- Может работать с буферами
- Может работать со стримами
- Поддержка формул
Пример чтения
Пример записи
ExcelJS - пакет, позволяющий читать и записывать табличные данные в файлы формата XLSX.
Преимущества
- Может работать с буферами
- Может работать со стримами
- Поддержка формул
Пример чтения
var workbook = new Excel.Workbook()
await workbook.xlsx.readFile('./file.xlsx')
Пример записи
var workbook = createAndFillWorkbook()
await workbook.xlsx.writeFile('./file.xlsx')
JS | Arguments
Многие встроенные функции JavaScript поддерживают произвольное количество аргументов.
Все аргументы функции, находятся в псевдомассиве arguments под своими порядковыми номерами. Переменная arguments не доступна в стрелочных функциях.
Многие встроенные функции JavaScript поддерживают произвольное количество аргументов.
Все аргументы функции, находятся в псевдомассиве arguments под своими порядковыми номерами. Переменная arguments не доступна в стрелочных функциях.
foo(a, b) {
console.log(arguments[1]);
}
foo('раз', 'два');
// два
Иногда вы можете не быть уверены какие аргументы приняла в себя функция, узнать это можно проверив arguments.CSS | Специфичность селекторов
Все CSS-селекторы имеют свой вес, который определяет как взаимодействуют одинаковые свойства, заданные в разных местах кода одному и тому же элементу.
Иногда это может создавать трудности, когда свойство, объявленное ниже в коде, перекрывается тем, что объявленно выше, потому что селектор первого более специфичен (имеет больший вес).
Специфичность селектора рассчитывается по 4-м позициям:
- инлайновый стиль
- id
- class
- tag
Пример расчета специфичности:
LI
0,0,0,1 — селектор по тегу.
UL LI
0,0,0,2 — селектор c двумя тегами весит больше, чем с одним.
.orange
0,0,1,0 — селектор с классом весит больше, чем селектор с тегом.
.orange A SPAN
0,0,1,2 — селектор перевесит предыдущий, потому что помимо класса содержит два тега.
#page .orange
0,1,1,0 — селектор с ID перевесит всё, кроме inline-стилей.
Все CSS-селекторы имеют свой вес, который определяет как взаимодействуют одинаковые свойства, заданные в разных местах кода одному и тому же элементу.
Иногда это может создавать трудности, когда свойство, объявленное ниже в коде, перекрывается тем, что объявленно выше, потому что селектор первого более специфичен (имеет больший вес).
Специфичность селектора рассчитывается по 4-м позициям:
- инлайновый стиль
- id
- class
- tag
Пример расчета специфичности:
LI
0,0,0,1 — селектор по тегу.
UL LI
0,0,0,2 — селектор c двумя тегами весит больше, чем с одним.
.orange
0,0,1,0 — селектор с классом весит больше, чем селектор с тегом.
.orange A SPAN
0,0,1,2 — селектор перевесит предыдущий, потому что помимо класса содержит два тега.
#page .orange
0,1,1,0 — селектор с ID перевесит всё, кроме inline-стилей.
Какой из этих селекторов выберет ТОЛЬКО изображения в формате jpg?
Anonymous Quiz
47%
[src*=".jpg"]
17%
[src^=".jpg"]
27%
[src$=".jpg"]
9%
[src~=".jpg"]
Node.js | Задание
Не так давно мы писали о ExcelJS.
Предлагаем читателям выполнить задание, для лучшего понимания того, как работает эта библиотека.
Суть
Ниже дан input.txt файл, содержащий информацию о различных, разумеется, вымышленных людях: имя, фамилия, пол, год рождения и город.
Эти данные нужно считать, проанализировать и создать в папке ./output/ файл-таблицу, по одной на город. Имена файлов должны совпадать с наименованиями городов. Сами таблицы должны содержать следующие колонки: фамилия, имя, пол. Данные должны быть осортированы по фамилии (в алфавитном порядке) и по полу (допустим, лица женского пола будут идти первыми).
Можете сделать для себя, а можете загрузить на Pastebin или Gist и поделиться ссылкой в комментариях.
Не так давно мы писали о ExcelJS.
Предлагаем читателям выполнить задание, для лучшего понимания того, как работает эта библиотека.
Суть
Ниже дан input.txt файл, содержащий информацию о различных, разумеется, вымышленных людях: имя, фамилия, пол, год рождения и город.
Эти данные нужно считать, проанализировать и создать в папке ./output/ файл-таблицу, по одной на город. Имена файлов должны совпадать с наименованиями городов. Сами таблицы должны содержать следующие колонки: фамилия, имя, пол. Данные должны быть осортированы по фамилии (в алфавитном порядке) и по полу (допустим, лица женского пола будут идти первыми).
Можете сделать для себя, а можете загрузить на Pastebin или Gist и поделиться ссылкой в комментариях.
JS | Axios
Типичная задача во фронтенде — получение JSON данных с сервера, к примеру, пользователь изменяет фильтр в каталоге и товары обновляются без перезагрузки страницы. В основе подобного взаимодействия систем лежит технология AJAX, в рамках применения которой используется экземпляр объекта XMLHttpRequest.
Axios — это широко известная JavaScript-библиотека. Она создана того чтобы облегчить программистам работу с AJAX и XMLHttpRequest и предоставляет разработчикам удобный интерфейс, избавляя их от необходимости пользоваться низкоуровневыми механизмами.
Типичная задача во фронтенде — получение JSON данных с сервера, к примеру, пользователь изменяет фильтр в каталоге и товары обновляются без перезагрузки страницы. В основе подобного взаимодействия систем лежит технология AJAX, в рамках применения которой используется экземпляр объекта XMLHttpRequest.
Axios — это широко известная JavaScript-библиотека. Она создана того чтобы облегчить программистам работу с AJAX и XMLHttpRequest и предоставляет разработчикам удобный интерфейс, избавляя их от необходимости пользоваться низкоуровневыми механизмами.
CSS | Position sticky
Липкое или приклеенное позиционирование используется для фиксации элемента в заданном месте при прокрутке страницы, отличается от fixed тем что положение фиксируется относительно родительского элемента.
Использование sticky требует определенной разметки и стилей блока, если блок не прилипает нужно проверить эти условия:
- блок имеет свойство top или bottom
- высота родителя больше высоты блока
- у родительских блоков, вплоть до html не стоит overflow: hidden
- для сафари прописано position: -webkit-sticky
Пример реализации прилипающего бокового меню по ссылке.
Липкое или приклеенное позиционирование используется для фиксации элемента в заданном месте при прокрутке страницы, отличается от fixed тем что положение фиксируется относительно родительского элемента.
Использование sticky требует определенной разметки и стилей блока, если блок не прилипает нужно проверить эти условия:
- блок имеет свойство top или bottom
- высота родителя больше высоты блока
- у родительских блоков, вплоть до html не стоит overflow: hidden
- для сафари прописано position: -webkit-sticky
Пример реализации прилипающего бокового меню по ссылке.
HTML | SEO мета теги
Чаще всего сео-оптимизация это последнее о чем задумывается фронтендер при создании сайта, при этом настроить автоматическую генерацию или вручную указать эти теги проще в начале разработки.
Небольшие рекомендации по заполнению тегов :
- noscript - уникальный для каждой страницы, обычно составляют из двух частей "название страницы | название сайта" (организации, сервиса)
- denoscription - короткий текст, обычно до 160 символов, также составляется из двух частей, описание конкретной страницы + короткая информация о компании, контакты или адрес
- keywords - основные ключевые слова страницы, можно выжимать из denoscription самый сок, три, четыре ключевых слова достаточно
Так же стоит обратить внимание на настройку OpenGraph Meta, формат мета-тегов, созданный в Facebook, служащий для передачи информации о странице при репосте в социальные сети.
Чаще всего сео-оптимизация это последнее о чем задумывается фронтендер при создании сайта, при этом настроить автоматическую генерацию или вручную указать эти теги проще в начале разработки.
Небольшие рекомендации по заполнению тегов :
- noscript - уникальный для каждой страницы, обычно составляют из двух частей "название страницы | название сайта" (организации, сервиса)
- denoscription - короткий текст, обычно до 160 символов, также составляется из двух частей, описание конкретной страницы + короткая информация о компании, контакты или адрес
- keywords - основные ключевые слова страницы, можно выжимать из denoscription самый сок, три, четыре ключевых слова достаточно
Так же стоит обратить внимание на настройку OpenGraph Meta, формат мета-тегов, созданный в Facebook, служащий для передачи информации о странице при репосте в социальные сети.
SQL | Дубликаты строк
Одним из частых вопросов на собеседовании являтся вопрос вида "Как найти дубликаты записей".
Для поиска дубликатов с одним полем можно воспользоваться следующим трюком:
Если же необходимо выбрать дубликаты записей с несколькими полями:
Одним из частых вопросов на собеседовании являтся вопрос вида "Как найти дубликаты записей".
Для поиска дубликатов с одним полем можно воспользоваться следующим трюком:
SELECT COUNT(field)
FROM table
GROUP BY field
HAVING COUNT(field) > 1Если же необходимо выбрать дубликаты записей с несколькими полями:
SELECT field1, field2, COUNT(id)
FROM table
GROUP BY field1, field2
HAVING COUNT(id) > 1Что выведется в логе?
Anonymous Quiz
22%
Иван Иванов
7%
Петя Иванов
70%
Иван Сидоров
1%
Петя Сидоров
Резервируем место под картинку
Изображениям в современном вебе уделяется особое внимание и часто встречается ситуация, когда страница загрузилась и пользователь начинает мотать страницу, потом подгружаются картинки из начала страницы и контент начинает скакать, пользователь недоволен. Рассмотрим один из способов решения проблемы, основывающийся на том, что вертикальные внутренние отступы блока рассчитываются от его ширины, а не высоты. Если вы знаете соотношение сторон картинки, то этот способ идеально вам подходит.
Изображениям в современном вебе уделяется особое внимание и часто встречается ситуация, когда страница загрузилась и пользователь начинает мотать страницу, потом подгружаются картинки из начала страницы и контент начинает скакать, пользователь недоволен. Рассмотрим один из способов решения проблемы, основывающийся на том, что вертикальные внутренние отступы блока рассчитываются от его ширины, а не высоты. Если вы знаете соотношение сторон картинки, то этот способ идеально вам подходит.
PHP | Наследование переменных в анонимных функциях
В PHP можно наследовать переменные из родительской области видимости при использовании анонимных функциях.
Однако стоит помнить о том, что значение будет браться из места определения функции, а не её вызова.
Чтобы этого избежать нужно наследовать переменную по ссылке.
Пример:
В PHP можно наследовать переменные из родительской области видимости при использовании анонимных функциях.
Однако стоит помнить о том, что значение будет браться из места определения функции, а не её вызова.
Чтобы этого избежать нужно наследовать переменную по ссылке.
Пример:
$message = 'Hi, ';
$test = function () use (&$message) {
echo($message);
};
$test();
$message = 'sWebDev!';
$test();
CSS | Правило внутреннего и внешнего
Хороший фронтендер должен разбираться в основах дизайна и типографике.
Существует универсальное правило внутреннего и внешнего:
внутреннее ≤ внешнее
Внутреннее — расстояние между строками, внешнее — между абзацами или поля вокруг текста.
Внутреннее — padding блока, внешнее — margin блока.
Поняв это правило и научившись им пользоваться можно улучшить свою разметку или найти общий язык с дизайнером, а то и поспорить с ним на счёт отступов.
Хороший фронтендер должен разбираться в основах дизайна и типографике.
Существует универсальное правило внутреннего и внешнего:
внутреннее ≤ внешнее
Внутреннее — расстояние между строками, внешнее — между абзацами или поля вокруг текста.
Внутреннее — padding блока, внешнее — margin блока.
Поняв это правило и научившись им пользоваться можно улучшить свою разметку или найти общий язык с дизайнером, а то и поспорить с ним на счёт отступов.
Что выведется в консоль?
Anonymous Quiz
22%
[{ a: 1 }]
53%
[{ a: 1 }, { a: 1 }]
12%
{ a: 1 }
13%
[1, 1]
Node.js | Twitter
Для Node.js существует npm пакет Twitter. Как понятно из названия, он будет полезен при взаимодействии с Twitter'ом.
Авторизация
Создаём новый твит
Получаем последние твиты о php в стриме
Для Node.js существует npm пакет Twitter. Как понятно из названия, он будет полезен при взаимодействии с Twitter'ом.
Авторизация
var Twitter = require('twitter')
var client = new Twitter({
consumer_key: process.env.TWITTER_CONSUMER_KEY,
consumer_secret: process.env.TWITTER_CONSUMER_SECRET,
access_token_key: process.env.TWITTER_ACCESS_TOKEN_KEY,
access_token_secret: process.env.TWITTER_ACCESS_TOKEN_SECRET
})Создаём новый твит
client.post('statuses/update', { status: 't.me/sWebDev is beautiful' })
.then(console.log)
.catch(console.error)Получаем последние твиты о php в стриме
var stream = client.stream('statuses/filter', { track: 'php' })
stream.on('data', (event) => {
console.log(event.text)
})
stream.on('error', (error) => {
console.error(error)
})👍1
Avocode
Avocode – это продукт созданный специально для верстальщиков. Сами создатели называют его "Мост между дизайнерами и разработчиками". Работает это так: дизайнер нарисовал макет в Photoshop, отправил верстальщику, а тот открывает его в Avocode, где удобно реализованы все необходимые инструменты.
Avocode – это продукт созданный специально для верстальщиков. Сами создатели называют его "Мост между дизайнерами и разработчиками". Работает это так: дизайнер нарисовал макет в Photoshop, отправил верстальщику, а тот открывает его в Avocode, где удобно реализованы все необходимые инструменты.