Архив рубрики: Публикации

7 смертных грехов программирования / Начинающему программисту

В любой работе встречаются свои трудности. Иногда их провоцирует сам работник, нарушая заповеди своей профессии. Но мало кто задумывается об этом. А вот пользователи сайта Quora составили личные списки грехов программирования.

Джон Парселл, создатель CaveOfProgramming.com

  1. Использовать «Пробел» вместо «Tab». Всегда, всегда используйте «Tab», а не «Пробел».
  2. Использовать «Tab» вместо «Пробела». Всегда, всегда используйте «Пробел», а не «Tab».
  3. Не использовать автоформатирование. Забудьте про весь мусор вроде табов и пробелов, используйте автоформатирование в своем коде и людям не придется видеть ваши странные скобки и отступы.
  4. Использовать интегрированную среду разработки (IDE) с ее автоформатированием и цветными клавишами. Все коды должны быть написаны в vi или Emacs, что подтверждает безупречность ваших навыков программирования.
  5. Не использовать IDE. Никто не хочет платить за время, которое вы тратите на набор текста, если это можно сделать в один клик, или за прокручивание вверх-вниз с помощью заумной комбинации клавиш из LISP.
  6. Не учить С и С++. Два этих языка жизненно необходимы любому программисту. Думаете, Java так же хорош? Отлично, создайте мне систему управления гоночными автомобилями в режиме реального времени на Java, и я вам поверю.
  7. Учить С и С++ в то время, которое вы могли бы использовать на что-то более современное, например, на Java. Признайте – все таблицы, написанные на С или С++, изживают себя в течение 5 лет. И в таком случае в программном обеспечении есть серьезные ошибки, которые Java просто не позволил бы вам совершить.

Рой Леман, разработчик ПО

  1. Сначала написать, потом подумать. Вы получили требования к товару, пробежались по ним, запустили свою любимую IDE и принялись за работу. Легко, не правда ли?
    Стоп! Вы уверены, что поняли требования до конца? Я не сомневаюсь в вашем умении читать. Но учли ли вы все пограничные случаи? Продумали, как будете тестировать систему? Набросали алгоритм, который собираетесь использовать? Завтра вы этого и не вспомните!
  2. Изобретать колесо. Итак, вам нужно создать шаблон проектирования Producer-Consumer. Вы знаете, как это сделать, еще с университетской скамьи… Легко, не правда ли?
    Стоп! Не важно, с каким языком вы работаете, уже существуют готовые шаблоны, или модули, или открытые исходники. Используйте их. Или по крайней мере изучите их перед тем, как создавать свои.
  3. Бояться прикасаться к коду. Итак, у вас есть задание добавить несколько функций к 20 000-линейному файлу (О, нет! За что?) Вы радостно беретесь за работу и вдруг замечаете огрехи в исходных функциях – нет пограничного случая или проверки на нулевой показатель. Это находится за пределами сферы вашей ответственности. Так? Стоп! Если вы видите небезопасный код – исправьте его. Вы еще хлебнете на этих ошибках, даже если код написан не вами!
  4. Быть безразличным к тому, чем занимается ваша компания. Вы программист, верно? Написание кодов – это здорово, вы не изучали маркетинг или продажи, с чего вам интересоваться тем, что не имеет к вам отношения?
    А следовало бы! Как можно создать продукт, не понимая, чем занимается компания? Как сделать так, чтобы продукт удовлетворял потребности клиента?
    Никак! Изучите дело, будьте в курсе всех вопросов компании, а не только тех, которые касаются непосредственно вас. Это важно! В какой-то момент это даже может повлиять на ваше повышение.
  1. Не следить за новыми трендами. Вы занимаетесь программированием уже 10 лет и подыскиваете работенку.
    Перед этим вы работали старшим разработчиком С++ в крупной корпорации – за многое отвечали и имеете отличные рекомендации. Вы вроде знаете, что такое DevOps, но на практике никогда не сталкивались с этими практиками и с С++14? На вашем предыдущем месте работы в ходу был С++98… Не так уж важно, не так ли?
    Нет, не так!
    Никто не похвалит вас за владение технологиями 15-летней давности!
    Если вы не учитесь в свободное время, чтобы соответствовать запросам работодателя, ваша кандидатура будет отвергнута!
  2. Не обладать коммуникативными навыками. Вы разработчик, к чему вам уметь общаться с людьми! Вам платят за умение общаться с компьютером, а не коллегами. Сиди себе, пиши качественные коды и добьешься успеха, верно?
    Не верно!
    Ваше неумение кратко и четко изложить суть дела вышестоящим – самая большая головная боль для менеджера.
    Очевидно, что это не единственный параметр, по которому вас оценивают, но все же – грамотное предоставление информации в дружественной манере повысит доверие со стороны коллег и вот тогда вы добьетесь успеха.
  3. Не иметь целей. Вам нравится ваша работа, вы прекрасно владеете технологиями Deep Learning. Передовые технологии, прекрасные коллеги… Вы могли бы работать так вечно.
    Но – вы не будете. Все когда-нибудь заканчивается, иногда резко и неожиданно. Если у вас не будет карьерных целей, вы можете оказаться на задворках, выполняя работу и получая зарплату, которые вас не достойны.
    Так что думайте наперед – где бы вы хотели оказаться через 10 лет? В какой роли вы себя видите?
    Научным работником? Разработчиком? Менеджером по продукции? Вице-президентом? Техническим директором? Исполнительным директором?
    Вам решать!

Нико Салминен, старший консультант

  1. Лень: Ну, кажется, код работает нормально. Нет необходимости писать комментарии или проводить автоматизированное тестирование.
  2. Похоть: Эй, а ведь этот новый срочный проект – отличная возможность опробовать новый крутой фреймворк, о котором все говорят!
  3. Зависть: Другая команда продвигается быстрее, чем мы. Лучше не помогать, если у них возникнут проблемы при интеграции с нашим кодом.
  4. Чревоугодие: Мне нужно выполнить итерацию ключей объекта. Мне совершенно необходимо импортировать 1,5-Мбайтную библиотеку для проведения этой операции.
  5. Гордыня: Прочтение этой книги по шаблонам проектирования сделало меня лучшим разработчиком, нежели коллеги! Я собираюсь использовать каждый шаблон, упомянутый в книге при работе над следующим проектом.
  6. Гнев: К черту все! Пускаю этот патч hotfix прямиком в производство!
  7. Алчность: Они что предлагают изменить код в моем репозитории? Отклонить! Это мой проект!

Усман Шаукат, более 8 лет опыта в сфере веб-разработки, PHP, Javascript, Node.Js

Вопрос касается программирования не как процесса разработки ПО в целом, так что мой ответ касается непосредственно фазы программирования:
  1. Программировать, не планируя. Самый страшный из всех грехов.
  2. Пытаться изобрести колесо. Если есть возможность, всегда используйте алгоритмы, предложенные в книгах и научных статьях (например, алгоритмы сортировки, поиска и т.д.), а не пишите собственные.
  3. Писать несистематизированные/некачественные коды и не придерживаться стандартов программирования.
  4. Считать, что тестирование – это не ваша забота. Я вас очень прошу, пожалуйста, тестируйте свои коды.
  5. Писать сложный код, когда с тем же успехом можно обойтись простым. Простые коды – это элегантно.
  6. Слепое копирование-вставка с сайтов вроде stackoverflow.com без ознакомления с пояснениями и комментариями.
  7. Последнее, и самое важное – совершенствуйтесь сами и осваивайте новый инструментарий. Никогда не бойтесь новшеств. Знакомьтесь с ними раньше всех. Это поможет вам оставаться востребованным.

Автор: Валерий Фетисов
Дата публикации: 2018-01-31T06:09:00.000+02:00

Стандарты и типы PoE

Power over Ethernet (PoE) — технология, позволяющая передавать удалённому устройству электрическую энергию вместе с данными через стандартную витую пару в сети Ethernet. Данная технология предназначается для IP-телефонии, точек доступа беспроводных сетей, IP-камер, сетевых концентраторов и других устройств, к которым нежелательно или невозможно проводить отдельный электрический кабель.

Технология PoE описана стандартами IEEE 802.3af-2003 и IEEE 802.3at-2009. Существует несколько вариантов этой технологии, предшествующих первому стандарту, но они мало распространены.

Сегодня существует несколько видов технологии PoE и все они существенно отличаются. Причина этого в следующем. Когда IEEE все же решили перейти к стандартизации PoE технологии, прошло уже много времени после ее появления, а многие корпорации уже разработали и внедрили собственные решения PoE. Как пример, Cisco еще в далеком 2000-ом году представили реализацию питания по витой паре. Но даже после стандартизации IEEE 802.3af аж в 2003 году, а IEEE 802.3at в 2009-ом производители продолжают внедрять новые разработки в PoE. В основном из-за дороговизны полноценных стандартов 802.3af и 802.3at, а ведь клиентов все чаще нужны бюджетные решения.

Как результат существует несколько вариантов PoE:

– стандарт 802.3af,

– стандарт 802.3at,

– фирменные частные стандарты, из них наиболее известен в мире Passive PoE.

802.3af и 802.3at относится к активным PoE, а Passive PoE является пассивным.

Сама реализация питания по сетевому кабелю (витой паре) различается по типу распиновки. А еще в зависимости от напряжения на порт PoE делится на классы.

Всё это должно быть указано в техническом паспорте устройства для возможности правильного подбора оборудования.

Стандарты активного PoE – IEEE 802.3af и 802.3at

Основное преимущество таких PoE-источников – это их интеллектуальная рабочая схема, что помогает оборудованию работать дольше, экономить энергию и избегать поломок.

Так, перед тем, как подать питание на нужное устройство, сам активный PoE-источник стандарта 802.3af/at (может быть адаптер или коммутатор) проверяет и узнает следующее:

1. Есть ли поддержка в устройстве технологии PoE. При ее отсутствии электричество по витой паре просто подаваться не будет.

2. Проверит, какое напряжение потребляет устройство. И после установки класса питания подаст только нужное значение напряжения на подсоединенный порт.

3. Необходимо ли питание устройство, включено ли оно. При ответе нет, питание по кабелю не подается.

4. Не было ли перезагрузки устройства. При положительном ответе питание прекращается.

Параметры

Классы питания

Самым распространенным на сегодняшний день является 1-ый класс питания.

Passive PoE

Passive PoE – это существенно удешевленный аналог стандартов 802.3af и 802.3at. Пассивное питание позволяет существенно снизить цену оборудования. Но при этом такое оборудование не производит проверку нуждающегося в питании по витой паре устройства на потребляемую мощность и его состояние. То есть напряжение просто подается постоянно. Присутствует риск несовместимости оборудования, что приведет или к моментальной поломке или устройство сломается чуть позже из-за перегрева плат и их подгорания.

Ведущие производители делают дополнения технологии Passive PoE в виде полезных функций. Приведем пример устройства MikroTik с PoE out. Этот PoE out может определить есть ли подключение устройства к порту, а также узнает о коротком замыкании или перезагрузке. Еще некоторые устройства MikroTik позволяют управлять этими функциями. Можно включать и выключать PoE на портах, изменять режимы ну и так далее. Только в данном случае речь идет не об обычных PoE-шнурах, а о технологии PoE в маршрутизаторах, коммутаторах и прочем оборудовании.

Источники с Passive PoE варьируются по мощности, силе тока и напряжению. Наиболее часто производители их изготовляют непосредственно под определенное свое оборудование. По этой причине PoE-источник нужно подбирать специально под определенное устройство.

Типы распиновки

Также распиновка есть и по третьему типу, то есть когда с целью подачи питания задействована каждая жила кабеля из четырех пар. Но такая распиновка встречается редко и только в фирменной реализации PoE. Лучшим примером будет UPOE от Cisco.

Если в обоих концах сети Вы установите сетевое оборудование с поддержкой стандарта 802.3af или 802.3at, то в этом случае тип распиновки по факту не важен, так как установленное устройство-потребитель PoE будет работать с любым из них. Но, если стандарты разные, то это важно.

Кабель для PoE

Качество PoE очень зависит от качества кабеля и от длины витой пары. Витую пару следует выбирать следующую:

– должно быть четыре пары, то есть четырехпарная витая пара и не ниже cat.5e;

– витая пара должна быть медная, а не омедненная;

– толщина проводников должна быть не менее 0,51 мм (24 AWG);

– сопротивление в проводниках должно быть не выше 9,38 Ом/100 м (если больше, то будет большая потеря мощности);

– желательно известного производителя.

Длина PoE

Стандарты 802.3af и 802.3at говорят о длине витой пары для PoE именно равной 100м. Но на практике же максимальная длина витой пары будет зависеть от множества факторов. И все эти факторы могут быть заранее неизвестны:

– сечение проводников;

– металл проводников;

– наличие изгибов на линии;

– неравномерности витой пары, перегибы кабеля и т.д.

Беря во внимание вышеперечисленное, советуем максимальную длину кабеля PoE не больше 75м. Но если кабель качественный, то можно и больше.

А вот если Passive PoE, то длина должна быть не больше 30-60м. И рассчитывать линию необходимо, учитывая следующее:

– потребляемое напряжение устройством с учетом пиковой нагрузки;

– выдаваемое напряжение источником;

– сопротивление самой витой пары и размер потерь напряжения в этой линии.

Бюджет мощности PoE

Для расчета бюджета PoE необходимо:

1. Провести подсчет общей мощности всех без исключения потребителей PoE на обслуживаемой линии. Рассчитывать нужно по пиковой нагрузке каждого устройства и брать в расчет каждый работающий модуль оборудования.

2.  Исходя из показателя мощности, подобрать PoE-источник. При этом необходимо обратить внимание на мощность отдельных портов, то есть, какое устройство к какому именно порту в будущем будете подключать, а также брать в расчет суммарную мощность источника, дабы не превысить общую мощность потребителей. И желательно приплюсовать 25% для резерва. Долгосрочная эксплуатация линии предусматривает, что подаваемая PoE-источником мощность будет терять ежегодно около 10%.

3. Учесть потерю мощности из-за длины кабеля от самого источника до непосредственно потребителя. Здесь главное именно сопротивление проводника. Кроме значений по умолчанию, не забывайте о том, что происходит увеличение сопротивления при нагреве кабеля.



2018-01-30T15:29:22
other

Как установить Ubuntu 16.04 LTS



























1/5 — (1 голос)

Ubuntu – достаточно популярный дистрибутив Linux, о котором я не раз писал в своих топах. К примеру, в топ 5 лучших дистрибутивов за прошедший 2017 год Ubuntu занял почетное 3-е место. Точно такое же место дистрибутив занял и в десятке лучших Linux для домашнего пользования. Нельзя забывать и про материал “Лучшие дистрибутивы Linux 2018”, где Ubuntu победил в номинации “Лучший игровой дистрибутив Linux 2018”. Интересный фрукт, верно же? И хотя многие пользователи Linux прекрасно понимают, что такое установка Linux, я, все же, решил написать статью, которая расскажет новичкам о том, как установить Ubuntu 16.04 LTS. Эту версию я выбрал непроста – на данный момент это последний релиз Ubuntu с долгосрочной поддержкой.

Как же установить Ubuntu

Статья будет поделена на смысловые блоки – пункты установки. Я оставляю для вас содержание материала, чтобы легче было ориентироваться. Стоит еще сказать, что данная инструкция будет справедлива и для других Linux дистрибутивов. И хоть я и планирую создать еще несколько подобных инструкций для каждого популярного дистрибутива, вы можете поглядывать в эту статью, пока эти самые инструкции не вышли. Читайте также: “Установка Ubuntu рядом с Windows 7”.

Содержание:

Подготовка к установке

Прежде всего, нам необходим сам образ Ubuntu 16.04 LTS. Скачать его можно с самых различных источников, однако я рекомендую делать это с официальных зеркал/ресурсов. Поэтому без зазрения совести мы переходим на официальный сайт Ubuntu, а точнее – страницу загрузки.

Как установить Ubuntu 16.04 LTS загрузка дистрибутива

Ubuntu Desktop – это и есть то, что нам нужно, однако прокрутив чуть ниже, можно увидеть еще несколько интересных вариантов. В самом же низу будут доступны альтернативные загрузки.

Загрузка образа

Итак, кликаем на, обведенную красным, ссылку, после чего нас перекидывает на страницу загрузки конкретно десктопной версии Ubuntu. Там мы можем кликнуть на зеленую “Download”, после чего, помимо всего прочего, нас перекинет на страницу с ползунками. На ней вы сами можете установить размер пожертвования компании за труды. Есть возможность пропустить это, нажав на соответствующий пункт.

Загрузка образа Ubuntu 16.04 LTS

Можно также (лучше всего) использовать и альтернативные загрузки. Там, например, доступны торрент-файлы, загрузка через которые проходит гораздо быстрее.

Запись образа на USB

В принципе, в интернете полным-полно статей на эту тему. Я не буду здесь подробно расписывать как и что надо делать, потому что уже сделал это в статье: “Как записать образ Linux на USB-носитель”. Также скажу кратко об утилитах, которые можно использовать для этих целей (процесс работы с ними описан в материале).

Для windows стоит использовать программу Rufus. Она отлично справляется с записью Linux-образов на USB-носители.

В Linux и Mac можно использовать Etcher или консольные инструменты.

Установка Ubuntu 16.04 LTS

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

Установка Ubuntu 16.04 lts на жесткий диск

Подготовка к установке Ubuntu

Подготовка к установке Ubuntu

На данном этапе вам предложат отметить два пункта, их вы можете видеть на скриншоте. Если у вас есть активное подключение к интернету (которое мы потом настроим), то первый пункт отмечаем обязательно. Это позволит сэкономить время после установки.

Второй же пункт также лучше отметить, потому как установка медиаданных, в дальнейшем, все равно понадобится.

Выбираем тип установки

Выбираем тип установки в Ubuntu 16.04 lts

Тип установки будет определять разметку вашего жесткого диска. Например, если будет выбран вариант “Стереть диск и установить Ubuntu”, то установщик автоматически разметит диск, попутно стирая все данные, которые у вас там уже есть. Если вы будете устанавливать систему рядом с другой (например, с Windows или другим дистрибутивом Linux), то в этом окне будет вариант “Установить рядом с…”. Он также автоматически размечает диск, но сохраняет данные.

Ручная разметка диска

Мы же пойдем от противного, и разобьем диск вручную. Выбираем “Другой вариант” и переходим в следующее окно.

Ручная разбивка жесктого диска при установке Ubuntu

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

Итак, нам нужно создать 3 раздела:

  • Раздел для системных файлов ОС – точка монтирования “/” (~20-30Gb)
  • Домашний раздел для наших собственных файлов – “/home” (Оставшаяся память)
  • Раздел подкачки (swap) – он нужен не всегда, но лучше создать (~4-5Gb)

Для первых двух, в качестве файловой системы, мы оставляем Ext4 (Пункт “Использовать как”), для последнего выбираем “Раздел подкачки”, что автоматически его разметит. Точку монтирования выбираем в соответствии с указанными выше.

Вот так вкратце и выглядит дефолтная разметка диска для установки Ubuntu. Надеюсь, что это прояснило некоторые моменты.

Выбираем местоположение

Выбираем местоположение при установке Ubuntu 16.04

А тут все просто: кликаем по карте в районе своего (или ближайшего к нам) города, или же вписываем его название в поле.

Раскладка клавиатуры

Раскладка клавиатуры в Ubuntu 16.04

Здесь также особо не заморачиваемся. Выбираем нужную раскладку, и нажимаем продолжить.

P.S при выборе системного языка раскладка устанавливается автоматически

Имя пользователя и пароль

Имя пользователя и пароль при установке Ubuntu

Просто вводим свое имя/логин, после чего оно автоматически копируется еще и в следующие два поля. Также не забываем задать пароль от аккаунта.

Пункт “Шифровать мою домашнюю папку” нужен для безопасности. Система будет требовать пароль от аккаунта всякий раз, когда кто-то будет пытаться открыть ее или использовать файлы, которые там расположены.

С пунктами “Входить в систему автоматически” и “Требовать пароль…”, думаю, итак все понятно.

Итог

Итог установки Ubuntu 16.04

Вот, собственно, и все. Система установится в течение следующих 10-15 минут, и будет готова к работе. Надеюсь, что данная статья помогла вам прояснить некоторые моменты и устранила недопонимание. Установить Ubuntu куда проще, чем кажется. Это намного легче, чем устанавливать тот же Arch или Gentoo. В любом случае, следуя этой инструкции вы сможете сделать это (я надеюсь).


2018-01-30T12:34:02
Linux

Шаблоны MSS описание

Ну раз уж мы установили шаблоны MSS, посмотрим, что еще в них есть полезного.

Неспроста же это дополнительный пак шаблонов для безопасности.


AutoAdminLogon – позволяет включить функцию автологона по сохраненным в реестре учетным данным при запуске системы. По умолчанию (если политика не задана) выключено, как и рекомендуется.

AutoReboot – просто определяет, будет ли система автоматически перезагружаться после сбоя. Если ничего не менять – то будет.

AutoShareWks – дает возможность отключить административные шары на рабочей станции (типа ADMIN$, C$, IPC$). Но сие действо может привести к проблемам в работе софта или администрировании, так что даже стандарты по безопасности не требуют удалять административные шары.

DisableSavePassword – позволяет отключить возможность сохранения пароля для dial-up и VPN-подключений. Безопасники рекомендуют.

Hidden – компьютер перестает вещать о своих ресурсах. Что не особо смутит хакера, а для юзверей может быть неудобно.

NoDefaultExempt – определяет к каким типам трафика не применяются фильтры IPSec. Рекомендуется оставлять только IKE.

NoDriveTypeAutoRun – можно отключить автозапуск. Конечно, отключим! на всех, пожалуйста!

NoNameReleaseOnDemand – включить, чтобы защититься от спуфинга по NBT-NS. Но мы уже отключали NBT-NS, так что мало что изменится.

NtfsDisable8dot3NameCreation – возможность отключить использование имен файлов в стиле 8.3 (типа блабла~.doc). Рекомендуется отключить (т.е. поставить политику в Enabled), т.к. хакер порой может воспользоваться упрощенными наименованиями.

SafeDllSearchMode – определяет порядок поиска загружаемых библиотек. Значение Enabled определенно безопаснее.

ScreenSaverGracePeriod – фигня какая-то, определяет срок, когда экранная заставка может быть сброшена без пароля. Безопасники рекомендуют ставить 0, но вроде это ничего особо не меняет.

WarningLevel – полезен для предупреждения о заполнении лога безопасности, если в нем не настроена перезапись при заполнении.

EnableDeadGWDetect – контролирует переключение на запасной дефолтный гейтвэй. Для безопасников бесполезна.

PerformRouterDiscovery – включает автоматический поиск шлюза по протоколу IRDP. Обязательно отключаем!

SynAttackProtect – понижает тайм-ауты в условиях SYN-флуда, полезно.

TcpMaxConnectResponseRetransmissions – количество попыток отправить SYN для установки сессии. Для нормально работающих сетей просто оставить как есть.

TcpMaxDataRetransmissions – количество попыток передачи датаграмм TCP. Рекомендуется 3, по умолчанию 5, так что разница невелика.

Источник: https://t.me/informhardening



2018-01-30T11:23:59
Закрытие уязвимостей

Усиление сетевых настроек Windows

В продолжении статьи:

Усиление сетевых настроек Linux