вторник, 27 ноября 2012 г.

Краткий курс верстальщика. Часть 1. Введение в HTML/CSS

1. Краткое введение в HTML

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

Теги
Это такие контейнеры, в которые вставляется содержимое страницы (не всегда текст), для каждого контейнера есть атрибуты, каждый тег должен закрываться (не всегда обязательно, но рекомендуется). В современном мире принято делать основную разметку страницы блоками, а остальные теги использовать только их прямого назначения. Табличные данные нужно размещать в теге <table>, заголовки в <h1> <h2> ..., абзацы в <p>.
Контейнер открывается например так <p> и закрывается точно таким же тегом, только с наклонной чертой </p>, то что находится между открывающим и закрывающим тегом является его содержимым, например

<h1>Содержимое заголовка</h1>
<p> Содержимое абзаца </p>

Но, как я и говорил, существуют такие теги, которые не имеют закрывающего тега, например: <img> - изображение
<br> - перенос строки

По правилу хорошего тона эти теги нужно закрывать вот так
<img />
<br />

Атрибуты
<тег атрибут="значение" атрибут2="значение2">

Например
<img src="image.png" border="0" />

2. Краткое введение  в CSS

То что делает CSS, возможно описать атрибутами тегов и специальными тегами, но CSS позволяет это сделать более лаконично и гибко, в CSS такой синтаксис:

селектор {атрибут: значение}

можно перечислить сразу несколько атрибутов:

селектор {атрибут1:значение; атрибут2: значение}

можно делать переносы и отступы:
селектор {атрибут1:значение;
атрибут2:значение}

можно одну группу правил применить для нескольких селекторов

селектор1, селектор2 {атрибут1:значение ......}

Теперь поговорим о селекторах
тег - название тега
#id - символ "решетка" и название id блока (или тега)
.class - "точка" и название класса

id и class это специальные атрибуты тегов, благодаря которым можно привязаться к конкретным контейнерам, в тегах это прописывается так:

<p class="vasya">.....</p>
<p id="petya">.....</p>

в CSS делается так

p {font-weight:bold;} /*для всех абзацев текст жирный*/
.vasya {color:red} /*для первого абзаца текст красный*/
#petya{color:green} /*для второго абзаца текст зеленый*/

Если вы привязали например класс к нескольким тегам
<h1 class="dima">Заголовок</h1>
<p class="dima">Текст</p>

и желаете сузить селектор, то можно делать так
h1.dima {} /*стиль действует только для заголовка с классом dima*/
p.dima {} /*стиль действует только для абзацев с классом dima*/

Сужение выборки в селекторе можно делать следующим образом (прописывая более полный CSS путь)
p.dima a {}

действует только дл тега <a>, который находится внутри тега <p> с классом dima

<p class="dima">
<h1>Это тот самый текст</h1>
</p>

В чем разница атрибутов class и id?
В атрибуте class можно перечислить несколько классов, в id только один идентификатор, для любого контейнера можно одновременно прописать несколько классов и один id.

.bold {font-weight:bold;}
.red {color:red;}
.underline {text-decoration:underline;}
<p class="bold red underline"></p>

Классы переопределяются в порядке перечисления, если в классе bold указать один цвет, а в underline другой, то цвет у тега будет такой, который прописан в последнем, т.е. в underline.


Так же стили переопределяются в самих CSS, в порядке их перечисления внутри файла и в порядке подключения CSS файлов в документ HTML.

Далее изучаем самостоятельно
HTML http://htmlbook.ru/html
CSS http://htmlbook.ru/css

Продолжение следует...

четверг, 8 ноября 2012 г.

Backup MX Postfix - резервный почтовый сервер

Данное решение не является самым правильным, но оно вполне рабочее.

Ситуация такая, у нас в организации есть Exchange сервер, который обслуживает ящики @domain.ru, мы слишком бедная контора да и затраты себя не оправдают, поэтому у нас нет ни какого резервирования канала через AS, наш провайдер очень редко, но отваливается и в этот момент мы теряем кучу писем от наших клиентов, а следовательно теряем доход.

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

Для нашего домена прописываем такие строчки в DNS
domain.ru IN MX 10 mx.domain.ru
domain.ru IN MX 30 backupxm.domain.ru
backupmx IN A IP_адрес_директора
mx IN A IP_адрес_офиса

Далее, чтобы почтовик директора воспринимался нормально, директор звонит своему провайдеру и просит прописать обратную запись PTR на свой IP, чтобы при запросе:

nslookup IP_адрес_директора

выдавало backupmx.domain.ru 

Всё остальное - дело техники

1. Пробросить 25 порт на свой нетбук (обычно у всех wifi роутеры стоят дома)
2. apt-get install postfix
3. nano /etc/postfix/main.cf

myhostname = backupmx.domain.ru
mydomain = $myhostname
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname
mynetworks = localhost

#параметры доставки
queue_run_delay=3m
minimal_backoff_time=6m
maximal_backoff_time=9m
maximal_queue_lifetime=30d

#домены, на которые пересылать почту
relay_domains = domain.ru

smtpd_etrn_restrictions = reject
disable_vrfy_command = yes
smtpd_helo_required = yes

smtpd_client_restrictions = 

 permit_mynetworks
 reject_unknown_client
 

smtpd_relay_restrictions = 
 permit_mynetworks 
 check_relay_domains

smtpd_recipient_restrictions=
 permit_sasl_authenticated
 permit_mynetworks
 reject_unauth_destination
 reject_invalid_hostname
 reject_non_fqdn_hostname
 reject_non_fqdn_sender
 reject_non_fqdn_recipient
 reject_unknown_sender_domain
 reject_unknown_recipient_domain

#проверка IP спамеров через публичные базы
 reject_rbl_client sbl.spamhaus.org
 reject_rbl_client cbl.abuseat.org
 reject_rbl_client dul.dnsbl.sorbs.net

 

поменять нужно только строки, помеченные красным цветом, ну и еще если вы захотите отправлять через ваш почтовик мыло с каких то айпи, то можно прописать в mynetwork, еще можно покопаться с параметрами smtpd_relay_restrictions и smtpd_recipient_restrictions



Рекомендуемые к прочтению статьи