Менеджер в IT: между командой, дедлайнами и собой

Менеджмент в IT — это не просто про таски и графики, а про людей, команды и решения, которые не всегда очевидны. На канале «Кем я хочу стать, когда вырасту» директор по консалтингу крупной IT-компании рассказывает, как строятся продукты, как растут руководители и почему скука — опаснее выгорания.

Что стоит прочитать:
Тимлид-старожила — главное зло в команде
Кому на самом деле нужен ваш продукт
Саббатикал в IT — саботаж или необходимость?
Скука — главный киллер любой карьеры

Все посты основаны на личном опыте более 10 лет в роли тимлида и руководителя.

Подписывайтесь, если хотите разобраться, как на самом деле работает управление в IT.

Реклама, СЗ Миронова Н.О., ИНН 772985604739, erid: 2SDnje2ffaM
Решил собрать в одну заметку все известные мне бесплатные способы по учёту трафика в локальной сети. То есть у вас есть какой-то шлюз, локальная сеть за ним (или сеть VPN клиентов) и вы хотите получать статистику по сетевой активности, исходящей из сети. Желательно с какой-то сводной статистикой, с историческими данными и с разбивкой по типам и направлению трафика.

Когда возникает такая задача, то первое, что приходит в голову, взять продукт, позволяющий анализировать протокол NetFlow. Практически все шлюзы поддерживают перенаправление Netflow на какой-то приёмник, где он может быть обработан и упорядочен. Известные мне бесплатные решения по этой теме:

🔹Elastiflow - решение на базе своего коллектора ElastiFlow + ELK Stack для хранения метрик + Grafana для визуализации. Со времени моей заметки изменилась система лицензирования. Теперь надо обязательно получать бесплатную Basic лицензию с некоторыми ограничениями. Они описаны в тарифных планах.

🔹Akvorado - ещё один Netflow collector с хранением данных в Elasticsearch. Неплохое функциональное решение, полностью бесплатное. Написано одним человеком, им же и поддерживается. Можно посмотреть demo. Платной версии нет вообще.

🔹FlowViewer - очень старое легковесное решение для разбора Netfow потоков. Работает на базе сборщика Flow-tools и веб интерфейса на базе Perl + CGI + HTML. Для хранения используется обычный каталог в файловой системе и бинарные файлы. То есть это максимально простое и легковесное решение из всех описанных а заметке.

🔹Ntopng - известное решение по анализу трафика. Используется в некоторых программных шлюзах, например pfsense/opnsense. Бесплатная версия захватывает и анализирует трафик, проходящий непосредственно через шлюз. Для анализа Netflow нужен платный модуль, но есть бесплатный вариант - netflow2ng. Это самописный модуль от энтузиаста, который позволяет собирать NetFlow и передавать в Ntopng.

🔹GoFlow2 - агрегатор данных из NetFlow, который сам по себе не имеет веб интерфейса для визуализации данных. Но он умеет выгружать обработанные данные в различных форматах для использования в готовых стэках: Prometheus+Grafana, Kafka+Clickhouse+Grafana, Logstash+Elastic+Kibana.

Помимо Netflow анализаторов есть другие решения этой задачи:

🔹Arkime - захватывает и анализирует трафик напрямую с сетевых интерфейсов. Насколько я знаю не имеет анализатора Netflow. Данные хранит в Elasticsearch. Для управления используется веб интерфейс, есть интеграция с Suricata. Хорошее и функциональное бесплатное решение. Одно из лучших, что я видел.

🔹Бесплатные софтовые шлюзы, типа pfsense/opnsense/ipfire. В них могут быть интегрированы те или иные бесплатные решения для учёта трафика. В основном это ntopng.

🔹Платные шлюзы с ограничениями функциональности. В основном это относится к количеству наблюдаемых узлов. Известные мне примеры: Ideco NGFW и ИКС.

Если вы знаете и использовали какие-то другие решения для обработки, анализа и хранения информации о трафике, поделитесь своим вариантом.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#netflow #подборка
Вчера в подборке упомянул NetFlow collector GoFlow2, с которым я лично не работал никогда. Решил на него посмотреть. На первый взгляд кажется простым и удобным решением, которое состоит из одного исполняемого файла на Go с параметрами, передаваемыми через ключи запуска.

GoFlow2 может собирать данные из разных источников, объединять их и выгружать в json формате. А дальше данные можно забирать в любую систему обработки логов - Loki, Elasticsearch, Clicklhouse.

Достаточно скачать бинарник и запустить:

# ./goflow2 -transport=file -transport.file=/var/log/goflow/goflow2.log -format=json

Goflow2 запустится и будет слушать следующие порты:

◽️6343 для приёма sFlow
◽️2055 для приёма NetFlow
◽️8080 для передачи метрик о своей работе в формате Prometheus (url - /metrics)

Я для теста взял Mikrotik и в разделе IPTraffic FlowTargets указал IP адрес машины, где запустил Goflow2. Данные о трафике сразу полились в неё. Поднял рядом Prometheus, добавил job для сбра метрик коллектора:

 - job_name: 'goflow2'
  metrics_path: '/metrics'
  static_configs:
  - targets: ['10.20.1.9:8080']

К сожалению, не нашёл готового дашборда для Grafana. Похоже, его вообще не существует. Из полезных метрик непосредственно Goflow2 - информация о пакетах (goflow2_flow_traffic_packets_total) и байтах (goflow2_flow_traffic_bytes_total) с каждого источника. Можно просто отслеживать всплески и аномалии без детальной разбивки по направлениям и типам соединений. ИИ не смог мне родить рабочий дашборд, сколько его не мучал, только время потерял. В итоге вручную посмотрел на метрики и прикинул, что там может быть полезным. Метрик много, детально во все не вникал.

Дальше можно детально распарсить трафик из файлов, которые формирует goflow2. В репозитории есть пример, как это сделать с помощью ELK Stack. Там поднимается стандартный стек с обработчиком логов в виде Logstash. В compose файле прописаны образы из репозитория docker.elastic.co, к которому доступ из РФ закрыт. Можно просто заменить их на docker hub, то есть вместо docker.elastic.co/elasticsearch/elasticsearch:7.13.0 указать elasticsearch:7.13.0.

Я запустил этот docker-compose.yml и без проблем стартовал весь стек именно на указанных старых версиях. Можно более свежие поставить, но там больше заморочек с безопасностью и аутентификацией. Придётся https настраивать, учётные записи. Для проверки работы коллектора всё это не нужно.

После запуска через:

# docker-compose up

Необходимо зайти в Kibana по IP адресу сервера и порт 5601 и добавить новый индекс в разделе Stack ManagementIndex Management. В качестве index pattern укажите logstash-*, а в качестве time filter - @timestamp из выпадающего списка.

Теперь можно идти в Discover, выбирать шаблон индекса logstash-* и смотреть информацию по трафику. Так как источник данных уже в виде json, все поля проиндексированы и вы можете строить выборки по src_addr, dst_addr, dst_port и т.д.

Готового шаблона для Kibana я, к сожалению, тоже не нашёл. Так что это решение только для тех, кто работает с ELK и умеет создавать дашборды. Там нет чего-то сильно сложного, но с полтычка тоже не осилить. Надо уметь с ним работать. Можно настроить geo карту, суммировать трафик по направлениям и выводить лидеров, объединять запросы по TCP или UDP портам и т.д.

Я показал пример с ELK, но ничто не мешает эти же логи отправить, например, в Loki и смотреть их там. Либо в любое другое хранилище. Так как они в формате json, отдельно парсить их не надо.

В целом, GoFlow2 мне понравился. Никаких особых заморочек. Просто запускаешь и всё работает. Другое дело, что это не готовая система для анализа трафика, а просто сборщик. Дальнейшую обработку и визуализацию полученных данных нужно выполнять самостоятельно. Зато можно сделать так, как вам нужно. И это будет полностью бесплатно.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#netflow #elk
Три специальных технологических доклада на VK Cloud Conf 2025

26 июня пройдет ежегодная конференция VK Cloud Conf 2025, посвященная облачным технологиям.

В 17:30 начнется особенная часть конференции — технологический трек, на котором приглашенные эксперты расскажут:
🔹 как организовать доставку и обработку 1,5 млн событий в секунду,
🔹 перейти от арендованных ЦОДов к собственной инфраструктуре,
🔹 построить CDN VK под нагрузками в миллион запросов в секунду.

Темы докладов

🔹 Highload-логистика: как управлять потоком из 1,5 млн событий в секунду


Доклад про организацию доставки и обработки событий, возникающие проблемы и используемые инструменты.

Спикеры: Дмитрий Куколев, руководитель направления безопасности Runtime; Кирилл Назаров, руководитель группы DevOps, направление безопасности Runtime, блок «Информационная безопасность», VK.

🔹 Без единой точки отказа: путь к облаку на трех AZ и tier-4 ЦОДах

Опыт перехода к первым в России ЦОДам Tier-4.

Спикер: Николай Бутенко, директор по надежности сервисов VK Cloud, лучший спикер Highload++ 2024.

🔹 Много храним и быстро раздаем: как мы построили CDN VK под нагрузками в миллион запросов в секунду

Узнайте, как обслуживать миллионы запросов и раздавать десятки терабит в секунду.

Спикер: Дмитрий Радчук, руководитель группы граничных сервисов, департамент инфраструктурных сервисов VK.

Регистрируйтесь
На днях читал новость про взлом крупного почтового сервиса через уязвимость в Roundcube Webmail. Это один из самых, если не самый популярный open source проект для веб интерфейса почтового клиента. Я повсеместно и очень давно его использую и уже привык, что там периодически находят уязвимости. Подписан на их рассылку и сразу иду ставить обновление, если оно появилось. Не откладываю.

С публичным веб интерфейсом постоянно сидишь как на пороховой бочке. Я рекомендую, если есть возможность, скрывать веб интерфейс почты за VPN. Не оставлять его напрямую в интернет. Не всегда это возможно.

Если вам всё же нужно оставить его в публичном доступе, то не ставьте веб интерфейс напрямую на почтовом сервере, хотя часто хочется это сделать. Если сервер не очень большой, то веб интерфейс особо не нагружает систему и удобно иметь всё, что связано с почтой, на одном сервере.

Ставьте веб интерфейс на отдельный веб сервер. Не оставляйте к нему прямого доступа. Если у вас более-менее насыщенная инфраструктура с веб сервисами, то наверняка используется какой-то обратный прокси. Делайте доступ к веб интерфейсу через него. В таком случае при взломе любого веб клиента, не обязательно Roundcube, уязвимости находят везде, просто этот самый популярный, доступ получат только к данным этого клиента.

А там не так уже много конфиденциальной информации. Самое ценное – список всех актуальных почтовых адресов ваших доменов. Неприятно, но некритично. Можно пережить. Если с этого сервера дальше никуда нет доступа и там больше ничего нет, то вы особо не пострадаете. Доступ к почте, как правило, при таком взломе не получить, если на самом почтовом сервере нет уязвимостей, с помощью которых можно без аутентификации получить доступ к почте. Сами пароли от ящиков в веб клиентах обычно не хранятся.

#mailserver #security
В комментариях к одной из заметок проскочила ссылка на небольшой проект, где одним скриптом реализована установка OpenVPN сервера с простеньким веб интерфейсом - Simple OpenVPN Server. Я постоянно использую OpenVPN, так что решил на него глянуть, раньше не видел.

В репозитории представлен bash скрипт, который выполняет установку стандартного сервера OpenVPN, вместе с ним Nginx с запароленным доступом к небольшой админке, где можно добавлять и удалять пользователей. Больше ничего нет.

На первый взгляд ничего особенно и похожих панелей много. Но лично мне понравилась реализация. Сейчас расскажу подробнее. Установка с помощью этого скрипта выглядит следующим образом:

# wget https://raw.githubusercontent.com/theonemule/simple-openvpn-server/master/openvpn.sh
# chmod +x openvpn.sh
# ./openvpn.sh --adminpassword=serveradmin --host=339119.simplecloud.ru --dns1=62.76.76.62 --dns2=77.88.8.1 --vpnport=1194 --protocol=udp [email protected]

Ключи задают: пароль администратора для доступа к админке, имя сервера для выпуска бесплатных сертификатов, dns сервера, которые будут передаваться клиентам в виде настроек, порт сервера и протокол, на котором он будет работать, email, который будет зарегистрирован в let's encrypt при выпуске сертификата.

Дальше скрипт выполняет следующие действия:

1️⃣ Устанавливает необходимые пакеты.
2️⃣ Загружает набор скриптов easy-rsa и генерирует необходимые сертификаты.
3️⃣ Формирует конфигурацию openvpn на основе переданных параметров.
4️⃣ Добавляет настройки iptables для NAT и роутинга соединений клиентов.
5️⃣ Формирует шаблон для конфигураций пользователей.
6️⃣ Получает сертификаты и настраивает виртуальных хост в Nginx.
7️⃣ Скачивает скрипты для виртуального хоста, которые создают конфигурации пользователей и отзывают сертификаты.

В конце скрипт выдал ошибку на перезапуск службы apache. Не знаю, зачем там эта команда. Возможно, автор просто ошибся. Сам apache не устанавливается в систему. Я вручную перезапустил Nginx:

# systemctl restart nginx

После этого можно идти в браузер по имени хоста, вводить логин admin и указанный ранее пароль, чтобы попасть в "админку". Аутентификация реализована с помощью basic_auth.

Теперь отдельно про пару моментов, которые мне понравились. Реализация очень простая. Все конфигурации служб на своём месте. То есть после работы скрипта можно про него забыть и дальше управлять всем этим, как-будто вы всё поставили вручную. Скрипт установки легко читается, можно изменять.

Меня отдельно привлёк веб интерфейс, а точнее то, как он реализован. В директории /var/www/html находятся два bash скрипта: index.sh и download.sh. Их выполнение настроено в Nginx вот так:

location ~ \.sh$ {
    gzip off;
    fastcgi_pass unix:/var/run/fcgiwrap.socket;
    include /etc/nginx/fastcgi_params;
    fastcgi_split_path_info ^(.+?\.sh)(/.*)$;

Я первый раз вижу такую реализацию. В скриптах смесь html и bash. То есть по сути интерфейс управления написан на bash и привязан к кнопочкам на страничках.

Эти скрипты легко приспособить под ваш OpenVPN сервер, который управляется полностью консольно. Если вам надоело добавлять и отзывать пользователей через CLI, можете взять эти скрипты и прикрутить куда-то к себе в закрытый контур.

Реализовано там всё обычными консольными командами, типа таких:

./easyrsa build-client-full $client nopass
./easyrsa --batch revoke $client

и т.д. То есть всё максимально стандартно. Нужно будет только пути поправить под свои реалии и всё.

Вот такой необычный проект для быстрой настройки OpenVPN сервера. Мне в целом понравилось. У меня есть свои подобные скрипты для установки сервера, создания и удаления пользователей. Писал в своё время, чтобы управлять серверами.

📌 Пара полезных ссылок по данной теме:

◽️Подборка вариантов настройки и управления OpenVPN сервера через web интерфейс
◽️Ovpn-admin - простой веб интерфейс в виде одного бинарника для управления Ovpn сервером

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#openvpn
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Настало время... первого открытого Call For Papers на IT Elements 2025!

10–11 сентября ИТ-сообщество традиционно соберется на большой осенней конференции для тех, кто делает ИТ в России. Готовьтесь к новым трекам, новым спикерам и новой грандиозной площадке!

Если у вас есть сильный кейс, нестандартный опыт или нешаблонное решение — пришло время предложить свой доклад. Главное требование — экспертность и новизна темы.

Рассматриваются доклады по ключевым направлениям:
▪️ИТ-инфраструктура
▪️Сетевые решения
▪️Кибербезопасность
▪️Прикладные решения

Станьте главным элементом IT Elements 2025!

Узнать больше и подать заявку можно до 20 июля.
Война пользователей Windows с Defender идёт с тех пор, как он появился и перестал отключаться. Я и сам, помнится, воевал с ним и отключал. Давно это было, но в то время его процессы выжирали у ноутбука заряд, поэтому я вынужден был это делать. Точно помню, как смотрел вечерами фильмы, интернет отключен, а в фоне что-то шуршит, вентиляторы крутятся, заряд батареи утекает.

Навскидку вспоминаются несколько способов. Например, можно было у его бинарников забрать права и разрешение на запуск. Другой вариант - удалить директорию с ним, создать новую такую же и запретить туда запись. В какой-то момент всё это переставало работать с очередным обновлением и Defender снова приезжал в систему.

Сейчас уже давно этим не занимаюсь, смирился. У меня на ноуте работает Defender и я его вообще не трогаю. И вам в общем случае не советую. ☝️ То, что будет рассказано дальше, не рекомендация и не руководство к действию. Расскажу про необычный способ отключить Defender, который меня просто порадовал самой идеей и простотой.

В Windows есть штатный механизм замены Defender на любой другой антивирус. Как только он появляется в системе, Defender отключается и работает сторонний антивирус. Наверняка это какие-то антимонопольные законодатели подсуетились, иначе зачем Microsoft это делать, но не суть.

Какой-то умелец придумал антивирус пустышку, который ставится в систему, ничего не делает, но при этом отключает Defender. Назвал его - defendnot. У меня есть системы, где встроенный защитник нафиг не нужен (компы без сети, тестовые системы). Решил проверить, как этот defendnot работает.

Первое, что приходит в голову, а не вирус ли сам по себе этот липовый антивирус. Virustotal в нём вирусов не находит. Да и сама Windows хоть и не даёт скачать и запустить defendnot, но тем не менее, как вирус его не обозначает, а помечает VirTool:Win64/Defnotldr.A. То есть понимает, что эта штука просто отключает защиту.

В общем, скачал я его и запустил, предварительно отключив защиту. И всё получилось. Defender реально не работает, показывает, что вместо него трудится dnot.sh. В репозитории есть разные способы установки. Я просто скачал zip архив и запустил там defendnot-loader.exe без каких-либо ключей. Потом перезагрузил систему.

Наверняка со временем Microsoft что-то придумает против таких заглушек, но пока работает. Так что, кому надо, пользуйтесь на свой страх и риск. Мне на тестовых виртуалках такое очень кстати, так как надоедает воевать с защитником, когда хочешь для теста запустить какое-то ПО, а он не даёт.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#windows
Для передачи файлов между устройствами существует огромное количество разных способов. В локальной сети отлично работает LocalSend. Я постоянно пользуюсь дома. За пределами локалки через интернет можно передавать файлы через облачные диски. Я использую Яндекс.Диск, но это долго и не очень удобно. Для небольших файлов можно использовать Telegram. Это удобный передатчик файлов, но не всё туда хочется грузить, так как останется навечно.

Расскажу про ещё один простой и безопасный способ передачи своих файлов - croc. Это сервис, который можно поднять у себя и безопасно передавать файлы через интернет в шифрованном виде. То есть вы полностью будете замкнуты на свою инфраструктуру. В репозитории скудное описание и если следовать только ему, то использование croc не кажется удобным. Я с ним немного поразбирался и настроил всё так, чтобы было удобно. Сразу показываю итоговый вариант.

Croc - одиночный бинарник, который может работать и как клиент, и как relay сервер. Если вы не настроите свой relay, то croc будет работать через свой – croc.schollz.com.

Берём любую VPS в интернете, настраиваем доменное имя и скачиваем туда croc. Можно автоматом загрузить:

# curl https://getcroc.schollz.com | bash

В macOS, Windows, Arch, Fedora, Gentoo и даже Freebsd croc есть в стандартных репах. Для Debian/Ubuntu почему-то нет.

Показываю systemd unit для запуска croc relay. Обращаю внимание на переменную CROC_PASS=serveradmin. Это пароль для доступа к relay, чтобы пользоваться им могли только вы.

# cat /etc/systemd/system/croc-relay.service

[Unit]
Description=Croc Relay Server
After=network.target

[Service]
Environment="CROC_PASS=serveradmin"
ExecStart=/usr/local/bin/croc relay
Restart=on-failure
User=nobody
Group=nogroup

[Install]
WantedBy=multi-user.target

Теперь ставим клиент на любое устройство. Он есть под все популярные системы, в том числе Android. Живёт приложение в F-Droid. Разработчик сторонний, не автор croc.

Прежде чем начнём передавать файлы, переведём croc в режим работы classic. В нём можно передавать парольные фразы в виде ключей запуска. Это небезопасно, если системой пользуется кто-то ещё, так как ключи можно посмотреть в описании запущенного процесса. В данном случае это некритично, так как мы запустим процесс с ключами ровно один раз и сразу запишем их в конфигурационный файл, чтобы не вводить каждый раз.

# croc --classic
# croc --remember --relay 339127.simplecloud.ru --pass serveradmin send --code serveradmin /file

◽️--relay 339127.simplecloud.ru - адрес моего сервера с релеем
◽️--pass serveradmin - пароль доступа к релею
◽️--code serveradmin - кодовая фраза, которой шифруются передаваемые данные
◽️/file - файл, который передаю, можно передать сразу директорию

Ключ --remember позволяет записать все используемые параметры в конфиг ~/.config/croc/receive.json. Теперь можно просто написать:

# croc send /file

После запуска передачи в консоли увидите строку для клиента:

CROC_SECRET="serveradmin" croc --relay 339127.simplecloud.ru --pass serveradmin

Идём на другую Linux машину и выполняем там команду, добавив и туда ключ --remember:

# croc --classic
# CROC_SECRET="serveradmin" croc --remember --relay 339127.simplecloud.ru --pass serveradmin

Параметры тоже будут сохранены и в следующий раз файл можно принять так:

# croc

В таком виде этой штукой пользоваться уже удобно. Я ставил клиента на Windows, пробовал передавать файлы. Нормально работает, конфиг сохраняет. В приложении на Android параметры нужно будет задать через GUI.

В целом удобное приложение, замыкающее передачу файлов через интернет полностью на вашу инфраструктуру. Настраивается легко. Там есть ещё некоторые параметры, которые можно поменять. Проект старый, довольно популярный (30.4k звёзд), автор его поддерживает.

🌐 Сайт / Исходники

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#fileserver
Как выбрать техподдержку 1С, чтобы не пожалеть о выборе подрядчика?

В рамках закрытого вебинара облачный провайдер K2 Cloud и официальный партнёр 1С — компания ФТО — обсудили, как устроена техподдержка, зачем бизнесу аутсорс, и как это помогает сэкономить, усилить безопасность и закрыть дефицит экспертизы.

Эксперты подробно обсудили

🔹 SLA и что важно зафиксировать в соглашении
🔹Как правильно организовать передачу системы на поддержку
🔹Какие риски чаще всего встречаются и как их избежать
🔹Лучшие кейсы K2 Cloud и ФТО

Оставьте заявку — и получите весь комплект: запись вебинара, чек-листы по передаче 1С и управлению рисками, а также презентацию спикеров.

Получить материалы>>
Небольшая техническая информация для тех, кто может быть не знал или просто не задумывался о практической разнице между Wi-Fi 2,4 ГГц и 5 ГГц. В городе обычно выставляешь ту частоту, что меньше забита, чтобы получить более стабильное и скоростное соединение. И выбирать зачастую не приходится. О максимальных скоростях этих частот можно только мечтать. Там что получится, то и получится.

Я настраивал точку доступа у себя в деревянном доме, где рядом вообще нет ни одной Wi-Fi сети. Первый раз оказался в такой ситуации, настраивая Wi-Fi роутер. Можно выбирать любые подходящие настройки. Частота 5 ГГц даёт более высокую скорость, но хуже покрытие. Роутер на ней не покрывает весь дом. В крайних точках связь нестабильная и отваливается.

А 2,4 ГГц имеет более низкую скорость, но лучше преодолевает препятствия и уверенно покрывает весь дом. Ставил точку в один конец дома и уверенно принимал сигнал в дальней комнате на втором этаже. Я эту частоту и оставил, так как Wi-Fi нужен редко для доступа в интернет, который всё равно медленнее. Во все стационарные места я провёл кабели.

Причём с кабелем я ошибся. На момент покупки просто не знал об одном нюансе. Купил какой-то дорогой экранированный кабель, но он у меня не заземлён. Может ещё и заморочусь, но пока заземления нет. Без заземления экранированный кабель работает хуже, чем обычный. Так что если не планируете заземлять свой utp кабель, не покупайте с экраном.

#железо #wifi
2025/06/28 04:35:05
Back to Top
HTML Embed Code: