Как оценивают соблюдение ESG-принципов
Бизнес, который претендует на хорошую ESG-оценку, должен соответствовать стандартам развития в трех категориях: социальной, управленческой и экологической.
Экологические принципы определяют, насколько компания заботится об окружающей среде и как пытается сократить ущерб, который наносится экологии.
Например, бренд обуви Timberland сотрудничает с производителем шин Omni United и делает подошвы ботинок из переработанных шин.
Социальные принципы показывают отношение компании к персоналу, поставщикам, клиентам, партнерам и потребителям. Чтобы соответствовать стандартам, бизнес должен работать над качеством условий труда, следить за гендерным балансом или инвестировать в социальные проекты.
Например, американский бренд верхней одежды Patagonia не владеет фабриками, которые шьют его продукцию, поэтому не может влиять на размер зарплаты рабочих. Чтобы это исправить, в рамках программы «Честная торговля» бренд направляет часть средств с продажи продукции на фабрики, чтобы поднять зарплату сотрудников до уровня прожиточного минимума.
К 2019 году бренду Patagonia удалось поднять зарплату рабочим до прожиточного минимума на 11 из 31 фабрики
(Фото: Patagonia)
Управленческие принципы затрагивают качество управления компаниями: прозрачность отчетности, зарплаты менеджмента, здоровую обстановку в офисах, отношения с акционерами, антикоррупционные меры.
По словам Евгения Хилинского, директора управления анализа инструментов с фиксированной доходностью Газпромбанка, для устойчивого развития компания должна соблюдать баланс между всеми критериями. Но их значимость может различаться в зависимости от деятельности разных компаний. Например, для энергетики особую роль играют экологические критерии, для сектора услуг — социальные, а для финансов — управленческие.
Исполняемые команды
Я надеюсь, что через некоторое время в следующие месяцы напишу статью об использовании SSI с маленькими CGI-программами. Ниже показано, что вы можете делать с элементом exec. Вы фактически можете с технологией SSI выполнить команду, используя оболочку (/bin/sh, если быть точным – или оболочку DOS, если у вас Win32). Следующие примеры предоставляют вам перечень директив.
<pre> <!—#exec cmd=»ls» —> </pre> |
Или для Windows:
<pre> <!—#exec cmd=»dir» —> </pre> |
Вы могли бы заметить некоторую странность форматирования этой директивы для Windows, так как вывод команды dir содержит строку «<dir>», что сбивает обозреватели.
Обратите внимание на то, что эта особенность очень опасна, так как будет выполнятся любой код, который включен в тег exec. Если у вас ситуация, когда пользователи могут редактировать содержание на ваших веб-страницах, например, на «гостевой странице», убедитесь, что вы отключили эту характеристику
Вы можете разрешить использование SSI, но без функции exec, установив аргумент IncludesNOEXEC для директивы Options.
Как узнать и изменить название сети на роутере
Узнать имя сети на маршрутизаторе и сменить его на другое несложно. В технике различных брендов этот процесс схож, а разница заключается лишь в названии разделов, в которые нужно перейти для настройки.
TP-Link
Посмотреть SSID в настройках роутера TP-Link можно по-разному, в зависимости от установленной версии прошивки и интерфейса модели.
Инструкция для техники с синим интерфейсом:
- Нажать «Базовая настройка».
- Перейти в раздел «Беспроводной режим».
- Здесь можно посмотреть текущее имя подключения (или нескольких, если роутер двухдиапазонный), установить новое значение и изменить пароль.
Завершив изменения, нужно нажать «Сохранить», а затем перезапустить маршрутизатор, чтобы новые значения вступили в силу.
Модели с зеленым веб-интерфейсом:
- Открыть вкладку «Беспроводной режим».
- Выбрать «Настройки беспроводного режима».
- Установить название.
- Нажав «Защита беспроводного режима», можно выбрать тип шифрования и установить пароль.
Завершив действия, нужно кликнуть «Сохранить».
Роутеры с черным веб-интерфейсом (AX110000):
- Кликнуть «Wireless».
- В строке Network Name (SSID) установить новое имя.
- В поле «Password» ввести новый пароль.
- Сохранить изменения.
В зависимости от модели, года выпуска и версии прошивки встречаются и другие варианты веб-интерфейса роутеров TP-Link. Принцип действия будет одинаков: нужно найти раздел «Беспроводная сеть (режим)» и внести в нем соответствующие изменения.
Asus
Чтобы узнать имя сети на роутерах ASUS и сменить его, нужно:
- Открыть веб-интерфейс.
- В разделе «Дополнительные настройки» кликнуть «Беспроводная сеть».
- Перейти во вкладку «Общие».
- В поле «SSID» посмотреть и изменить имя.
- В поле «Предварительный ключ WPA» ввести новый пароль.
Сохранить изменения, нажав на кнопку «Применить».
D-link
Инструкция для роутеров D-Link:
- Открыть личный кабинет устройства.
- Выбрать вкладку «Wi-Fi», нажать «Основные настройки».
- В строке «SSID» изменить имя.
- Чтобы изменить пароль, перейти в «Настройки безопасности».
- Ввести новое значение в поле «Ключи шифрования».
Сохранить новые значения кнопкой «Применить».
Keenetic
Инструкция для роутеров Zyxel Keenetic:
- Открыть настройки маршрутизатора.
- Кликнуть «Сеть Wi-Fi».
- Нажать на «Соединение».
- Включить точку беспроводного доступа.
- В поле «Имя» ввести новое название.
- Во вкладке «Безопасность» можно установить или изменить пароль.
Кнопкой «Применить» сохранить изменения.
Tenda
Инструкция для роутеров Tenda:
- Открыть интерфейс устройства.
- Перейти в раздел «Wireless Settings».
- Включить Wi-Fi.
- В поле «Wi-Fi Name» указано имя соединения. Его можно изменить или отставить в прежнем виде.
Для сохранения новых значений нужно нажать «Ок».
«Server Side Includes» — Основы и приемы использования
div.main {margin-left: 20pt; margin-right: 20pt} «Server Side Includes» — Основы и приемы использования William Bontrager Это сделает ваши страницы живыми. «Includes» (англ. «включать») «Server Side» означает то, что SSI Где Вы бы не использовали один и Это просто!
Но если это так просто, то почему не каждый Большинство хостинговых Если Вы не знаете поддерживает ли Заметьте, что теги SSI находятся (2) Тег: <!—#include Примеры:
«../filename.txt» (3) Тег: <!—#exec cgi=»__________»—> Используя эти 3 простых тега у Вас Вся эта конструкция займет Удачи! |
Какие компании входят в топ ESG-рейтингов
В мире есть множество примеров успешных корпораций, которые ориентируются на принципы ESG. По версии компании Corporate Knights, в 2021 году в первую пятерку входят:
- Французская машиностроительная компания Schneider Electric.
- Датская транснациональная энергетическая компания Ørsted A/S.
- Национальный банк Бразилии Banco do Brasil SA.
- Финская нефтегазовая компания Neste Oyj.
- Международная компания профессиональных услуг в области дизайна, архитектуры и консалтинга Stantec Inc.
Компания Corporate Knights ежегодно публикует рейтинг 100 самых устойчивых глобальных корпораций в мире. Рейтинг основан на публично раскрытых данных.
Многие российские компании тоже придерживаются ESG-принципов. Например, горнорудная компания «Полиметалл» активно развивает экологические и социальные проекты:
- Проводит мониторинг состояния флоры и фауны вблизи предприятий и разрабатывает программу по их сохранению.
- Создала некоммерческую ассоциацию «Женщины в горнодобывающей отрасли» для борьбы с гендерными стереотипами.
- Инвестирует в инфраструктуру, здравоохранение, образование и культуру города Амурска в Хабаровском крае.
- Планирует использовать только сухое складирование отходов без традиционного возведения дамб, чтобы снизить риск утечек и аварий.
В результате Полиметалл уже четвертый раз подряд становится лидером рэнкинга независимого кредитного рейтингового агентства RAEX-Europe. Рэнкинг — это часть проекта RAEX-Europe по сбору, систематизации и анализу ESG-данных компаний постсоветского пространства.
Зеленая экономика
Кто стал самой «зеленой» компанией России — январский рейтинг RAEX
RAEX-Europe обновляет ESG-рэнкинг каждый месяц: агентство переоценивает компании по мере выхода их годовых отчетов, а также включает новые, которые еще не получали оценку. Таким образом, рэнкинг охватил уже 135 российских компаний из 24 различных отраслей.
Первый в России крупный форум на тему ESG состоялся в Москве 14 октября 2021 года при поддержке медиахолдинга РБК. С итогами конгресса «ESG-(Р)Эволюция» вы можете ознакомиться на странице мероприятия.
Installing third-party add-ons
Home Assistant allows anyone to create add-on repositories to share their add-ons easily. To try this locally, you can use our example add-on repository at
Home Assistant cannot guarantee the quality or security of third-party add-ons. Use at your own risk.
From Configuration > Add-ons & Backups open the add-on store.
Add the URL of the repository and then press «Add». A new card for the repository will appear.
Help: Repository is not showing up
If you have added a repository, but it’s not showing up, it means that the repository contains invalid configuration. Go to Configuration > Add-ons & Backups > System to find the System log. It should tell you what went wrong. Report this information to the repository author.
Including a standard footer
If you are managing any site that is more than a few pages,
you may find that making changes to all those pages can be a
real pain, particularly if you are trying to maintain some kind
of standard look across all those pages.
Using an include file for a header and/or a footer can
reduce the burden of these updates. You just have to make one
footer file, and then include it into each page with the
SSI command. The
element can determine what file to include with either the
attribute, or the
attribute. The attribute is a file path,
relative to the current directory. That means that it
cannot be an absolute file path (starting with /), nor can it
contain ../ as part of that path. The
attribute is probably more useful, and should specify a URL
relative to the document being served. It can start with a /,
but must be on the same server as the file being served.
<!--#include virtual="/footer.html" -->
I’ll frequently combine the last two things, putting a
directive inside a footer file to be
included. SSI directives can be contained in the included file,
and includes can be nested — that is, the included file can
include another file, and so on.
Настройка SSG сервера
Нам понадобится Express сервер.
Установим и добавим настройки для него.
npm i express
В корне проекта нужно создать файл index.js – он будет хранить в себе все настройки сервера.
const express = require('express');const app = express();const path = require('path');const port = process.env.PORT || 5000;app.use(express.static('dist'));app.get('*', (req, res) => { res.sendFile(path.resolve(__dirname, 'dist', 'index.html'));});app.listen(port, () => console.log(`Server is running on: http://localhost:${port}`));
Далее в файле nuxt.config.js нужно указать для ключа target значение static. Это будет значить, что nuxt будет работать в режиме генерации html-файлов в папку dist. На эту папку мы и натравили наш сервер.
Также в файле настроек придётся перечислить все страницы, которые должны быть сгенерированы. Найдите ключ generate и укажите нужные страницы.
generate: { routes: ['/', '/about']}
В этом случае будет сгенерирована главная страница и страница About.
Ну и остаётся запустить команду
npm run generate
В папке dist будут созданы css, js и html файлы, то есть всё что необходимо. Причем это всё будет сжато и оптимизировано.
Если вам нужно настроить проект на хостинге, предлагаю ознакомиться с одной из моих статей. Она поможет быстро и без проблем запустить ваш проект, который будет полностью готов к продакшну.
Но это еще не всё. Я крайне рекомендую познакомиться с проектом, где до недавнего времени был настроен SSG. Там вы сможете найти всё, что понадобится, если вдруг вы тоже захотите настроить SSG в своём проекте.
Настройка SSR сервера
Настройка SSR на самом деле проще, чем SSG, так как nuxt предоставляет свой сервер. Нам не придётся устанавливать express или настраивать что-то – всё готово и настроено.
Чтобы его запустить, достаточно выполнить три шага:
- В файле nuxt.config.js поменять значение для ключа target со static на server.
- Выполнить команду npm run build – она оптимизирует все файлы в папке .nuxt, за которой будет наблюдать сервер
- Ну и запустить сам сервер командой npm start или nuxt start
При успешном старте в консоли будет следующее сообщение
╭────────────────────────────────────────────╮ │ │ │ Nuxt @ v2.15.2 │ │ │ │ ▸ Environment: production │ │ ▸ Rendering: server-side │ │ ▸ Target: server │ │ │ │ Memory usage: 61.2 MB (RSS: 176 MB) │ │ │ │ Listening: http://localhost:3000/ │ │ │ ╰────────────────────────────────────────────╯
По сообщению видно: nuxt указал, что запущен в режиме production, где всё оптимизировано и сжато.
Теперь вам не нужно указывать в generate какие страницы генерировать. Nuxt будет создавать html налету.
Собственный API на nuxt сервере
Настроив SSR, мы можете создавать собственный API, что даёт ещё больше возможностей.
Например, на сайте есть форма, которая должна отправлять данные на почту. Чтобы не расписывать всю логику на стороне фронта и не светить токены, можно будет создать отдельный API-поинт, написать для него простенький smtp сервер и спокойно слать на него запросы. При этом мы не будем грузить фронт дополнительным кодом + все токены будут лежать на стороне сервера, что намного безопаснее, ну и не нужно будет платить за сторонний API, который будет делать те же самые вещи, только за деньги.
Давайте настроим.
В первую очередь создадим две папки. Одна общая – server, в которой будут находится все файлы сервера, вторую – middlewares добавим в папку server, она нужна для API-поинтов.
Создадим в папке middlewares файл с название logger.js и вставим туда простенький код.
export default function (req, res, next) { console.log('Hello world!') next()}
Когда будем обращаться к нему, он будет всего лишь выводить сообщение в консоль. Для примера пойдет.
Далее в файле nuxt.config.js добавим новый ключ serverMiddleware. В нём нужно указать путь до API-поинта и адрес, по которому он будет доступен.
serverMiddleware: [ { path: '/api/log', handler: '~/server/middlewares/logger.js' }]
Теперь, если делать запрос по адресу http://localhost:3000/api/log, в консоли увидим сообщение “Hello world!”
Восстановление соединения
При создании объекта браузер автоматически подключается к серверу, а при обрыве – соотвественно пытается его возобновить.
Это очень удобно, никакой другой транспорт не обладает такой встроенной способностью.
Как же серверу полностью закрыть соединение?
При любом закрытии соединения, в том случае если сервер ответит на запрос и закроет соединение сам – браузер через короткое время повторит свой запрос.
Есть лишь два способа, которыми сервер может «отшить» надоедливый EventSource:
- Ответить со статусом отличным от 200.
- Ответить с Content-Type, не совпадающим с text/event-stream.
Между попытками возобновить соединение будет небольшая пауза, значение которой зависит от браузера (1-3 секунды) и может быть изменено сервером через указание retry: в ответе:
retry: 15000 data: Поставлена задержка 15 секунд
Браузер, со своей стороны, может закрыть соединение, вызвав close():
var eventSource = new EventSource(...); eventSource.close();
При этом дальнейших попыток соединения не будет. Открыть обратно этот объект тоже нельзя, можно создать только новый EventSource.
Идентификатор id
Для того, чтобы продолжить получение событий с места разрыва, стандарт предусматривает идентификацию событий через идентификатор id.
Сервер может указать его в ответе:
data: Сообщение 1 id: 1 data: Сообщение 2 id: 2 data: Сообщение 3 data: из двух строк id: 3
При получении id: браузер:
- должен установить свойство eventSource.lastEventId в его значение.
- при пересоединении пошлёт заголовок Last-Event-ID с этим id, так что сервер сможет переслать последующие, пропущенные, сообщения.
Обращаю внимание: id шлётся не перед сообщением, а после него, чтобы обновление lastEventId произошло, когда браузер всё уже точно получил
Update
Best practice for updating a Home Assistant installation:
-
Backup your installation, using the backup functionality Home Assistant offers.
-
Check the release notes for breaking changes on Home Assistant release notes. Be sure to check all release notes between the version you are running and the one you are upgrading to. Use the search function in your browser ( / ) and search for Breaking Changes.
-
Check your configuration using the Check Home Assistant configuration add-on.
-
If the check passes, you can safely update. If not, update your configuration accordingly.
-
Update Home Assistant.
To update Home Assistant Core when you run Home Assistant Operating System you have 2 options.
Using the UIUsing the CLI
- Open your Home Assistant UI
- Navigate to the Configuration panel
- On the top you will be presented with an update notification
If you do not see that notification you can navigate to the Configuration > Add-ons & Backups > System panel. and click the “Reload Supervisor” button.
Setting variables
Using the directive, you can set variables
for later use. We’ll need this later in the discussion, so
we’ll talk about it here. The syntax of this is as follows:
<!--#set var="name" value="Rich" -->
In addition to merely setting values literally like that,
you can use any other variable, including
environment variables, or some of the
variables we discussed above (like , for
example) to give values to your variables. You will specify that
something is a variable, rather than a literal string, by using
the dollar sign ($) before the name of the variable.
<!--#set var="modified" value="$LAST_MODIFIED" -->
To put a literal dollar sign into the value of your
variable, you need to escape the dollar sign with a
backslash.
<!--#set var="cost" value="\$100" -->
Finally, if you want to put a variable in the midst of a
longer string, and there’s a chance that the name of the
variable will run up against some other characters, and thus be
confused with those characters, you can place the name of the
variable in braces, to remove this confusion. (It’s hard to
come up with a really good example of this, but hopefully
you’ll get the point.)
<!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" -->
Setup
The element is not available on the default installation of IIS 7 and later. To install it, use the following steps.
Windows Server 2012 or Windows Server 2012 R2
- On the taskbar, click Server Manager.
- In Server Manager, click the Manage menu, and then click Add Roles and Features.
- In the Add Roles and Features wizard, click Next. Select the installation type and click Next. Select the destination server and click Next.
- On the Server Roles page, expand Web Server (IIS), expand Web Server, expand Application Development, and then select Server Side Includes. Click Next. .
- On the Select Features page, click Next.
- On the Confirm installation selections page, click Install.
- On the Results page, click Close.
Windows 8 or Windows 8.1
- On the Start screen, move the pointer all the way to the lower left corner, right-click the Start button, and then click Control Panel.
- In Control Panel, click Programs and Features, and then click Turn Windows features on or off.
- Expand Internet Information Services, expand World Wide Web Services, expand Application Development Features, and then select Server-Side Includes.
- Click OK.
- Click Close.
Windows Server 2008 or Windows Server 2008 R2
- On the taskbar, click Start, point to Administrative Tools, and then click Server Manager.
- In the Server Manager hierarchy pane, expand Roles, and then click Web Server (IIS).
- In the Web Server (IIS) pane, scroll to the Role Services section, and then click Add Role Services.
- On the Select Role Services page of the Add Role Services Wizard, select Server Side Includes, and then click Next.
- On the Confirm Installation Selections page, click Install.
- On the Results page, click Close.
Windows Vista or Windows 7
- On the taskbar, click Start, and then click Control Panel.
- In Control Panel, click Programs and Features, and then click Turn Windows Features on or off.
- Expand Internet Information Services, then select Server Side Includes, and then click OK.
Разбираемся с файлами и папками
Nuxt подготовил для нас готовую структуру, где большинство файлов и папок привязаны к определённому функционалу.
С одной стороны это позволяет не задумываться, где и как хранить файлы, с другой стороны может показаться, что nuxt ограничивает нас. Но скажу по своему опыту, проблем пока не было.
- .nuxt – это папка. В реальном времени nuxt собирает в неё откомпилированные, но еще не сжатые файлы. При запуске команд npm run dev или npm run build будут использоваться файлы именно из этой папки.
- components – папка для компонентов страниц. Кнопки, инпуты, селекты и т.д.
- layouts – обёртки для страниц. Иногда может понадобиться обёртка с сайдбаром слева, например, для админ панели, но в тоже время сайдбар не нужен на страницы авторизации. В этом случае нам и помогут разные лайауты – с сайдбаром и без.
- middlewares – папка для функций, которые должны запускаться до рендера лайаута или страниц. Через них можно, например, проверять, имеет ли пользователь доступ на определённую страницу, и если нет, то перенаправлять его на специальную страницу.
- pages – папка для страниц. Созданные в ней файлы преобразуются в роуты. Настраивать ничего не нужно. Подробнее об этом написал ниже.
- plugins – все плагины, которые будут устанавливаться в проект, должны находиться в этой папке. Это не обязательно, просто так принято.
- static – папка, в которой обычно хранят фавиконку, различные манифесты, иконки для метаданных и т.д. Файлы в этой папке будут доступны по прямой ссылке, например, http://localhost:3000/favicon.ico
- store – временное хранилище, которое позволяет централизовать данные.
- nuxt.config.js – это основной файл настроек. С него и начнем.
Control Commands
CounterCommand
-
The SSI counter command. Used to do things like cpt = cpt
+ 1. - Parameters:
-
- name = the counter identifier
- init = the init value
- incr = the value to add to the counter
- value = a flag
- Example:
-
<!--#cpt name="cpt1" init="" --> Initialisation: cpt1 = 0 <!--#cpt name="cpt1" incr="1" --> cpt1 = cpt1 + 1 <!--#cpt name="cpt1" value="true" --> display the current value of cpt1
- Parameters:
-
- name = the loop command identifier
- command = a command name (jdbs, cpt)
- var = a command identifier
- equals = a string value
- Example:
-
<!--#exitloop name="loop2" command="cpt" var="cpt1" equals="4" -->
IfCommand
- Parameters:
-
- name = the command identifier
- command = a command name (jdbc, cpt)
- var = a command identifier
- equals = a string value
- Example:
-
<!--#if name="if2" command="cpt" var="cpt1" equals="2" -->
Возврат к Server Side Rendering
Однако, в отличие от старого подхода, когда разметка генерировалась на сервере с помощью серверных языков программирования, например PHP,
теперь в Server Side Рендеринге, как и в CSR, будут использоваться современные JavaScript библиотеки, например React.
Разница только в том, что приложение будет генерировать разметку с помощью React не на клиентской стороне, а на серверной.
Это решение было направлено на исправление существующих проблем с производительность и SEO.
Всякий раз, когда поисковый робот запрашивает страницу, то он получит необходимый контент — для визуализации больше не требуется выполнение JavaScript на клиенте.
Теперь, когда в разработке упоминают термин Server Side Rendering, то ссылаются именно на этот сценарий.