Как стать автором
Обновить
13
0
Валерий Еремеев @ChiefPilot

Пользователь

Отправить сообщение

Еще один NAS своими руками, часть 1: из того, что было

Время на прочтение23 мин
Количество просмотров228K

Аннотация


В среднем, очередной пост про NAS появляется примерно раз в полгода, и рассказывает о том, как поставить систему по документации. Мы усложним задачу, привязав ее к реальному проекту и ограничив бюджет. Кроме того, мы еще и попытаемся подстелить себе соломку в тех местах, куда не еще не ступала нога молодого сисадмина, а также разрушим несколько отраслевых мифов.

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

Я очень надеюсь, что вы найдете для себя несколько полезных идей и все-таки научитесь на чужих ошибках. Помните: система стоит не столько, сколько вы заплатили за железо, а сколько вы вложите потом времени и сил в тестирование и эксплуатацию.
Если не хотите читать — посмотрите ссылки и выводы в конце; может, и передумаете.

DISCLAIMER


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

Благодарности


Респект Андрею Александровичу Бахметьеву, инженеру и изобретателю. Я горд, что Андрей Александрович преподавал для меня в институте! Желаю ему всяческих успехов в его проектах!

Задача


Итак, есть малый бизнес-стартап, генерирующий порядка 50Гб файлов в неделю, с необходимостью их архивного хранения в течение нескольких лет. Файлы крупные (порядка 10-20 Мб каждый), обычными алгоритмами не сжимаемые. Начальный объем данных порядка 2Тб. Совсем старые данные можно хранить в оффлайне, подключая по требованию.
Нужно уложиться в весьма скромный начальный бюджет решения 500 евро (в ценах лета 2013) и двухнедельный срок на сборку и тестирование.

За эти деньги нужно построить систему, которая позволит работать с файлами небольшой группе в одной локальной сети с разных платформ (Windows, Mac OS). Требуется длительная работа без сисадмина на площадке, защита от отказов и базовые функции управления правами доступа.

Традиционные пути


Безусловно, можно купить сетевое хранилище: их делают NetApp, QNAP, Synology и другие игроки, и притом делают неплохо даже для малого бизнеса. Но наши 500 евро – это только начало разговора для пустой коробки, без самих дисков. Если у вас есть 1000-2000 евро, лучше купите готовое изделие, а мы попробуем максимально заплатить знаниями и минимально — временем и деньгами.

UPD (спойлер ред. 2 от 2014-03-08):
Если собираете из нового железа, а не из хлама
По совокупности этого поста и его комментариев, любезно предоставленных хаброкомьюнити, предлагаю следующий алгоритм для простой четырехдисковой системы:
  1. Если двойного размера самой ёмкой из доступных моделей диска не хватает для хранимых данных, прекращаем читать спойлер (пример: модель 4Тб, требуется хранить 7Тб данных, тогда продолжаем; если требуется хранить 10Тб, тогда прекращаем)
  2. Выбираем изделие из линейки MicroServer известного производителя серверов Харлампий-Панкрат; например, n36l, n40l, n54l, с четырьмя отсеками для дисков (главное, чтобы была поддержка ECC-памяти)
  3. Обязательно комплектуем наш сервер памятью с контролем четности (ECC) из расчета 1Гб на каждый 1Тб хранимых данных, но не менее 8Гб (по рекомендации FreeNAS для дисков до 4Тб получается как раз всего 8Гб)
  4. Если у нас нет ECC-памяти, немедленно прекращаем читать этот спойлер, читаем пост до конца
  5. Выбираем производителя дисков, используя актуальный обзор отказов; например, вот этот: http://habrahabr.ru/post/209894
  6. Выбираем недорогую линейку SATA дисков с обязательным наличием ERC, а зачем, читаем здесь: http://habrahabr.ru/post/92701
  7. Выбираем ёмкость дисков (2Тб, 3Тб или 4Тб) из расчета, что их будет четыре, и что доступной для данных будет только половина (вторая половина на избыточность RAID)
  8. Перед закупкой еще раз внимательно и досконально проверяем совместимость железа между собой, количества слотов, отсеков, планок и прочего, но для FreeNAS самое главное — поддержка всего железа актуальным ядром FreeBSD
  9. Выбираем хорошую загрузочную флэшку, прочитав продолжение данного поста (часть 2: хорошие воспоминания)
  10. Закупаем, вдыхаем ароматы нового железа, собираем, подключаем, запускаем; для ZFS обязательно выключаем все аппаратные RAID'ы
  11. Создаем том RAIDZ2 из четырех дисков, обязательно с двойной избыточностью (на размерах тома около 12Тб есть риск повстречать злобного URE, читайте о нем в этом посте; если мы не боимся URE и все-таки собираем RAIDZ на четырех дисках, проверяем размер физического сектора — на современных дисках он 4Кб, и в этом случае получится совершенно нелепый страйп 43Кб, который еще и просадит нам скорость массива: forums.servethehome.com/hard-drives-solid-state-drives/30-4k-green-5200-7200-questions.html)
  12. Соль, сахар, перец, jail'ы, шары, скрипты и тому подобную сметану добавляем по вкусу



А как же облачное хранение, спросите вы? На момент написания этой статьи популярные облачные хранилища для наших объемов выглядят дороже, чем хотелось бы. Например, стоимость хранения неограниченного объема данных 36 месяцев на известном сервисе Брось Бокс обойдется в пару тысяч долларов с лишним, хотя и выплачивать их можно постепенно. Конечно, есть сервисы вроде Amazon Glacier (благодарю А.М. за подсказку) или Ажурных Окон, но, во-первых, они тарифицируют не только хранение, но и обращение (как его априорно подсчитать?), а во-вторых не будем забывать, что бизнес сидит на Интернет-аплинке 10Мбит, и маневры терабайтами потребуют не только определенных усилий по управлению процессами, но и будут весьма утомительными для пользователей.

Обычно в таких случаях берут старый компьютер, докупают большие диски, ставят Linux (не обязательно, кто-то ухитряется и Windows 7), делают массив RAID5. Отлично. Всё работает хорошо примерно полгода-год, но одним солнечным утром сервер вдруг пропадает из сети без всякого предупреждения. Конечно, сисадмин уже давно работает в другой фирме (текучка кадров), резервной копии нет (объемы слишком велики), а новый сисадмин починить систему не может (при этом на чем свет стоит ругает старого сисадмина и диалект Linux YYY, ведь надо было использовать Linux ZZZ, тогда проблем бы точно не было). Все эти истории повторяются давно и одинаково, меняются только версии ОС и растут объемы данных.

Отраслевые мифы


Миф о RAID5

Самый распространенный миф, в который я и сам верил до недавнего времени – это то, что второго подряд отказа в массиве на практике не может быть по теории вероятности. А вот и может, да еще как! Смоделируем реальную ситуацию: сервер проработал пару лет, после чего в массиве отказывает диск. Пока ничего страшного, ставим новый диск, и что происходит? Ага, реконструкция массива, т.е. длительная максимальная нагрузка на уже порядком изношенные диски. В такой ситуации отказы очень даже возможны и происходят.
Но это не все. Есть еще заложенная производителем методическая вероятность ошибки чтения, которая при определенных обстоятельствах сейчас уже практически гарантирует, что RAID5 после отказа диска обратно не соберется.
Читать дальше
Всего голосов 123: ↑100 и ↓23+77
Комментарии116

События C# по-человечески

Время на прочтение6 мин
Количество просмотров491K

Невозможно, просто взять и вникнуть в этот глубокий смысл, изучая События (event) в просторах базового и, на первый взгляд, бесконечного C#.

Когда я изучал События (не в рамках .NET!), потратил много сил, чтобы, наконец-то, разобраться, как они устроены и должны конструироваться. Поэтому, я решил опубликовать свою методику понимания структуры пользовательского события, коим представляется ключевое слово event в С#.
Не буду цитировать и без того замученную MSDN, а постараюсь объяснить понятно и доступно.
Читать дальше →
Всего голосов 63: ↑44 и ↓19+25
Комментарии60

IPv6 теория и практика: введение в IPv6

Время на прочтение7 мин
Количество просмотров137K
Этой статьёй я хочу начать цикл, посвященный IPv6. Я являюсь инструктором академии Cisco, поэтому, если вы в совершенстве знаете материал нового CCNA Routing & Switching, то скорее всего, не найдёте в цикле ничего нового. Речь пойдёт о структуре и особенностях протокола IPv6, а также, применении его на маршрутизаторах Cisco (маршрутизация RIP, OSPF, EIGRP, списки контроля доступа, и др. – как пойдёт). В первой статье мы поговорим о структуре IPv6 пакета, записи адресов, префиксе. Вторая статья цикла доступна здесь. Информация подойдёт для новичков, имеющих, тем не менее, некоторые знания по IPv4 и модели OSI.
Цикл статей основан на материалах моего блога, которые, в свою очередь, основаны на опыте преподавания, работы с оборудованием и вольном переводе и обдумывании официального курса CCNA Routing & Switching.
Итак, начнём. Не буду останавливаться на стандартных рассуждениях о том, что IPv4 адресов мало, о том, что NAT и прокси – это костыли, о том, что костыли пока работают, и никто не хочет переходить на IPv6, вместо этого – сразу к сути.
Читать дальше →
Всего голосов 39: ↑35 и ↓4+31
Комментарии42

Восстановление прошивки RAID-контроллеров LSI

Время на прочтение4 мин
Количество просмотров55K
Доброго времени суток, хабравчане!

Я хочу рассказать вам о том, как я восстанавливал прошивку RAID-контроллера LSI MegaRAID после неудачного обновления.
Когда эта беда случилась со мной, то информации об этом я практически не нашел, хотя, допускаю, что плохо гуглил.

Анамнез


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

Зачастую, особенно в случае с 1U серверами я беру их уже с интегрированным контроллером LSI MegaRAID.

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

Недавно привезли несколько серверов с контроллерами LSI 2208 на борту и достаточно старой прошивкой.
Т.к. дискретные контроллеры на этих чипах я тоже активно использую, то особо не сомневаясь загрузился с флешки с Linux-ом, запустил привычное:
./MegaCli64 -AdpFwFlash -f mr2208.rom -a0
и пошел заниматься дальше своими делами.

Когда я в следующий раз обратил взор на терминал сервера, то увидел ту же самую картину, что и была — «Flashing firmware...» и никакого результата. Беда, подумал Штирлиц.
Читать дальше →
Всего голосов 53: ↑53 и ↓0+53
Комментарии36

OpenCourseWare

Время на прочтение4 мин
Количество просмотров31K
Недавно нам на глаза попался список ссылок на бесплатные онлайн-курсы от различных учебных заведений США. Список показался интересным, его запокетили, чтобы когда-нибудь посмотреть, что эти курсы из себя представляют. Вот, наконец-то, руки дошли.

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

Интересный факт: Оказывается существует целое движение — OpenCourseWare, которое началось в 1999 году в Германии, когда один из университетов разместил видео своих лекций онлайн. Вскоре и други университеты подхватили инциативу и сейчас OpenCourseWare — это достаточно популярная штука, которая представляет из себя курсы и бесплатные учебные материалы, созданные в университетах и распространяющиеся через интернет.
Как правило ресурсы OCW не требуют регистрации и не предлагают никаких сертификатов о прохождении. Все обучение — в качестве self-improvement.

Под катом список бесплатных онлайн-курсов и уроков от лучших учебных заведений
Читать дальше →
Всего голосов 37: ↑36 и ↓1+35
Комментарии5

Полезные советы новичкам в дизайне под Android

Время на прочтение3 мин
Количество просмотров171K
Этот пост послужит своеобразным началом серии публикаций на тему «как я учусь дизайну под Android». Никогда не уделял гайдлайнам достаточно внимания, считая их скучными и неинтересными, но все изменилось. Сейчас я начинаю понимать, платформа достигла своей зрелости и предлагает ряд интересных решений.
Читать дальше →
Всего голосов 64: ↑50 и ↓14+36
Комментарии47

Запускаем приложение ASP.NET MVC 4 на Ubuntu Server 12.04 + nginx

Время на прочтение5 мин
Количество просмотров45K
Захотелось мне посмотреть, как работает реализация .NET на Linux. Решено было развернуть Ubuntu Server на нашем гипервизоре, установить свежий пакет mono и через nginx запустить ASP.NET MVC4 сайт.

На официальном сайте mono готовый пакет для Ubuntu только 2-х летней давности. С этого момента начались поиски в сети путей осуществления задуманного. Результатом полученного опыта стал скрипт для автоматического развертывания на голой Ubuntu Server 12.04.3 или 13.04 всего необходимого для запуска сайтов ASP.NET MVC4:
  • Соберем из исходников и установим mono 3.2.1
  • Добавим monoserve скрипт в init.d для автоматического запуска сайтов и управления ими.
  • Установим nginx 1.4.1
  • Создадим и настроим простой сайт, чтобы проверить работоспособность всей связки.

Сразу под катом находится строчка для автоматического выполнения всей процедуры, описанной в статье.
Читать далее...
Всего голосов 43: ↑42 и ↓1+41
Комментарии51

Будущее игровой индустрии с hi-res 3D сканами людей и Oculus Rift

Время на прочтение2 мин
Количество просмотров86K
Энтузиаст технологий виртуальной реальности Teddy, известный в определённых кругах адаптацией устройства Razer Hydra для работы с Unity Development Kit, помог другому этузиасту 3D сканирования Ли Перри-Смиту (Lee Perry-Smith), известному в определённых кругах своей студией для мгновенного бесконтактного 3D сканирования людей в высоком разрешении.

В результате получилось интересное демо, раскрывающее потрясающие возможности сотрудничества технологий виртуальной реальности и 3D сканирования (местами 16+).



Хочу 18плюс!
Всего голосов 112: ↑109 и ↓3+106
Комментарии70

perl скрипт производящий голосовой обзвон (оповещение) через usb модем huawei e1550

Время на прочтение17 мин
Количество просмотров42K
В свое время, так как я много времени проводил в командировках, мной была приобретена замечательная игрушка — usb модем Huawei e1550. Но времена лихой молодости прошли, и необходимость в использовании данного девайса по прямому назначению отпала. Так он и пылился у меня на полке в течении нескольких лет. И пылился бы и дальше, но возникла задача сделать систему оповещения. Тут я и вспомнил про модем. Рассмотрев поставленную задачу — был вынужден отказаться от SMS оповещения в пользу голосового дозвона по причине невозможности получить уведомление о прочтении SMS. Решения на базе Asterisk показались мне несколько громоздкими, и почитав доку по модему я решил написать звонилку самостоятельно.

Причина публикации.

Несмотря на обилие статей по работе с USSD и SMS запросами, я не нашел ни одной реализации голосовых вызовов на скриптовых языках (таких как Perl, PHP, Node.js). Надеюсь данная статья будет для Вас хорошим подспорьем.
Читать дальше →
Всего голосов 60: ↑56 и ↓4+52
Комментарии19

Упрощаем жизнь администратору, ассоциируем имя пользователя и имя компьютера в автоматическом режиме в каталоге AD

Время на прочтение10 мин
Количество просмотров150K
Добрый день, хабр!
Наверное, у всех системных администраторов была проблема определения имени компьютера пользователя. То есть мы знаем имя сотрудника, но какой у него компьютер, без понятия. И, зачастую, попытка заставить пользователя определить имя компьютера вызывает мучение. Они вместо этого называют имя пользователя, mail, номер телефона, все что угодно, только не имя компьютера. А попытка объяснить пользователю где находится информация о системе вызывает баттхерт сотрудника и лютую ненависть. Можно, конечно, было бы написать какую-нибудь утилитку, позволяющая отображать имя компьютера на рабочем столе или где-нибудь еще на видном месте, но для этого надо каждый раз объяснять где находится эта информация. Немного упрощает задачу, но не решает ее полностью. Тем более что я склоняюсь к тому, что пользователю и во все положено не знать имя компьютера, на котором он сидит. В результате было решено сделать определение имени компьютера современным, удобным, правильным и, главное, автоматическим.

image
Примерно так может выглядеть подключение к компьютеру. При чем оснастку даже не обязательно открывать с помощью административной учетной записи. Для тех, кому интересно как все это работает и как это сделать в вашей инфраструктуре, добро пожаловать под кат.
Для выполнения описанного, вы должны понимать что такое AD, понимать хотя бы примерно структуру объектов в AD, понимать работу скриптов, а также любить котиков.
Читать дальше →
Всего голосов 36: ↑28 и ↓8+20
Комментарии48

Записки iOS разработчика: Делимся опытом, часть 1

Время на прочтение6 мин
Количество просмотров46K
imageЗдравствуйте, дорогие читатели Хабра!

Я разрабатываю приложения под iOS и Mac OS. Уже около года занимаюсь фрилансом и, переходя от клиента к клиенту, начал замечать, что в задаче разбираюсь одиножды; а при появлении похожего заказа, просто использую уже разработанные ранее модули. В серии статей «Записки iOS разработчика» я постараюсь осветить некоторые часто встречающиеся в заказах аспекты; напишу подобие шпаргалки, прочитав которую, вы сможете быстро и безболезненно внедрить новую технологию в свой проект. Мои заметки ни в коем случае не претендуют на глубокое понимание процессов, но описывают легкий способ закончить заказ в срок.

Содержание:

  1. Часть 1: Работа с Файлами; Шаблон Singleton; Работа с Аудио; Работа с Видео; In-App Purchases
  2. Часть 2: Собственные всплывающие окна (Popups); Как использовать Modal Segue в Navigation Controller; Core Graphics; Работа с UIWebView и ScrollView
  3. Часть 3: Жизнь без Autolayout; Splash Screen; Работа с ориентацией девайса в iOS 6+; Сдвиг содержимого UITextField
  4. Часть 4: Google Analytics; Push Notifications; PSPDFKit; Вход в приложение через Facebook; Рассказать друзьям — Facebook, Twitter, Email
  5. Часть 5: Core Data; UITableView и UICollectionView
Читать дальше →
Всего голосов 52: ↑40 и ↓12+28
Комментарии30

Core Data для iOS. Глава №2. Практическая часть

Время на прочтение9 мин
Количество просмотров23K
Хабралюди, добрый день!
Сегодня хочу начать написание ряда лекций с практическими заданиями по книге Михаеля Привата и Роберта Варнера «Pro Core Data for iOS», которую можете купить по этой ссылке. Каждая глава будет содержать теоретическую и практическую часть.



Содержание:
  • Глава №1. Приступаем (Практическая часть)
  • Глава №2. Усваиваем Core Data (Практическая часть)
  • Глава №3. Хранение данных: SQLite и другие варианты
  • Глава №4. Создание модели данных
  • Глава №5. Работаем с объектами данных
  • Глава №6. Обработка результатирующих множеств
  • Глава №7. Настройка производительности и используемой памяти
  • Глава №8. Управление версиями и миграции
  • Глава №9. Управление таблицами с использованием NSFetchedResultsController
  • Глава №10. Использование Core Data в продвинутых приложениях

Читать дальше →
Всего голосов 32: ↑26 и ↓6+20
Комментарии38

Посты-рекордсмены

Время на прочтение5 мин
Количество просмотров105K
На Хабре я недавно (чуть меньше месяца), до этого Хабр практически не читал. Пришёл, огляделся, походил по тематическим «хабам», почитал «Лучшее за всё время», просмотрел статьи отдельных, заинтересовавших меня персонажей и понял, что для того, чтобы получше понять, как живёт и чем дышит это замечательное сообщество, мне придётся Хабр распарсить и позадавать ему разные вопросы. К тому же, раз уж в своих статьях я писал в основном об автореферентности в разных её проявлениях, как не написать на Хабре статью о Хабре?

Посмотрю, интересно ли это всё кому-либо кроме меня. Если интересно, напишу ещё несколько постов, идей и материала для этого более чем достаточно.

Если я ничего не пропустил в интерфейсе сайта, единственные списки самых-самых, которые можно посмотреть — это общий рейтинг пользователей и список статей, т.н. «Лучшее за всё время». Оба списка отсортированы по рейтингу (пользователей и статей, соответственно). Между тем, существует ещё куча параметров, по которым было бы интересно всё отранжировать.
Читать дальше →
Всего голосов 215: ↑202 и ↓13+189
Комментарии59

Взломать Wi-Fi за 10 часов

Время на прочтение12 мин
Количество просмотров1.5M
Еще не так давно казалось, что беспроводная сеть, защищенная с помощью технологии WPA2, вполне безопасна. Подобрать простой ключ для подключения действительно возможно. Но если установить по-настоящему длинный ключ, то сбрутить его не помогут ни радужные таблицы, ни даже ускорения за счет GPU. Но, как оказалось, подключиться к беспроводной сети можно и без этого — воспользовавшись недавно найденной уязвимостью в протоколе WPS.


Читать дальше →
Всего голосов 304: ↑294 и ↓10+284
Комментарии164

Подборка инструментов для эффективной frontend разработки

Время на прочтение3 мин
Количество просмотров101K
В эту прекрасную пятницу осмелюсь предложить хабрасообществую небольшую подборку приложений, предназначенных для увеличения продуктивности во время работы с фронтэндом. Если ваш любимый апп здесь не представлен — добро пожаловать в комментарии!

Form Builder

image

Этот прекрасный генератор форм поможет вам в создании красивейших CSS логин-боксов и прочих input вещей, при минимальных временных затратах. Помимо форм на сайте этого проекта можно создавать и другие не менее красивые CSS элементы, в том числе кнопки и ленты.
еще 24 ссылки
Всего голосов 204: ↑197 и ↓7+190
Комментарии46

Хочешь быть iOS разработчиком? Будь им!

Время на прочтение2 мин
Количество просмотров388K
На хабре в прошлом месяце была опубликована статья Конкурс ВК: Мессенджер для Android. Как это было!, в которой автор поделился своими мыслями о конкурсе и опубликовал список ресурсов и статей, которые помогли ему в создании приложения. Так как в последнее время я начал изучать разработку под iOS, то у меня скопилось некоторое количество ссылок, которые могут быть полезны для начинающих. Поэтому я последую его примеру и сделаю то же самое, только для своей платформы. Надеюсь, кому-нибудь они окажутся полезны и сэкономят немного времени.

Читать дальше →
Всего голосов 234: ↑222 и ↓12+210
Комментарии38

Лекториум записал почти тысячу лекций за год

Время на прочтение4 мин
Количество просмотров57K
Дорогой Хабр!



У нас для тебя небольшой подарок. Мы тут работали-работали и вот чего сделали.
Сняли и опубликовали почти тысячу лекций по IT и математике.

UPD2 Помогите, пожалуйста, оперативно решить вопрос насчёт организации торрентов на php.

Читать дальше →
Всего голосов 340: ↑333 и ↓7+326
Комментарии183

Онлайн-инструменты для кодеров

Время на прочтение2 мин
Количество просмотров284K
Онлайн-сервисы становятся все популярнее, постепенно усложняя функционал и улучшая интерфейсы. В этой подборке представлены онлайн-инструменты для кодеров.

Cloud9


«Это Google Docs, только для кода» — так говорят о проекте. Облачный сервис вырос из Mozilla Bespin. Основные фишки: SSH, drag-and-drop и возможность разработки оффлайн.

Читать дальше →
Всего голосов 204: ↑191 и ↓13+178
Комментарии55

Делаем приватный монитор из старого LCD монитора

Время на прочтение2 мин
Количество просмотров973K


Вы наконец-то можете сделать кое-что со своим старым LCD монитором, который завалялся у Вас в гараже. Превратите его в шпионский монитор! Для всех вокруг он будет выглядеть просто белым экраном, но не для Вас, потому что у Вас будут специальные «волшебные» очки.

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

Читать дальше →
Всего голосов 1486: ↑1468 и ↓18+1450
Комментарии327

Руководство по оформлению HTML/CSS кода от Google

Время на прочтение12 мин
Количество просмотров356K

От переводчика


С удовольствием ознакомился с этими рекомендациями и теперь предлагаю вам перевод.

Введение


Это руководство описывает правила для оформления и форматирования HTML и CSS кода. Его цель — повысить качество кода и облегчить совместную работу и поддержку инфраструктуры.

Это относится к рабочим версиям файлов использующих HTML, CSS и GSS

Разрешается использовать любые инструменты для минификации компиляции или обфускации кода, при условии, что общее качество кода будет сохранено.
Читать дальше →
Всего голосов 295: ↑286 и ↓9+277
Комментарии168

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность