На обучающем ресурсе Udacity запустился мини-курс по веб-производительности от сотрудника Google Ильи Григорика.
Ubran_Hera @Ubran_Heraread-only
User
Готовимся к Zabbix конференции 2014
2 min
6.6KZabbix Конференция 2014 стремительно набирает новых участников и приглашает вас присоединиться!
Осталось всего 3,5 месяца до начала 4-ой ежегодной Zabbix конференции, посвященной масштабируемости и мониторингу высокой производительности!
![](https://habrastorage.org/getpro/habr/post_images/c8a/6c3/6cf/c8a6c36cffe179f517a88ea1f2c941c0.jpg)
По уже сложившейся традиции, в этом году Zabbix конференция состоится 12-13 сентября, в Риге (Латвия) –
город, именуемый как «Жемчужина Балтики» и является культурной столицей Европы 2014.
Осталось всего 3,5 месяца до начала 4-ой ежегодной Zabbix конференции, посвященной масштабируемости и мониторингу высокой производительности!
![](https://habrastorage.org/getpro/habr/post_images/c8a/6c3/6cf/c8a6c36cffe179f517a88ea1f2c941c0.jpg)
По уже сложившейся традиции, в этом году Zabbix конференция состоится 12-13 сентября, в Риге (Латвия) –
город, именуемый как «Жемчужина Балтики» и является культурной столицей Европы 2014.
+2
Автоматизированная установка WordPress на VPS с помощью Ansible
6 min
15KTutorial
Recovery Mode
Добрый день, Хабр.
Не так давно я начал разбираться с замечательным инструментом для любого DevOps — Ansible. Сегодня хочу представить на ваш взыскательный суд небольшую вводную статью по использованию этого, во многом прекрасного, инструмента. Итак, начнем.
Ansible — это инструмент для автоматизации задач системного администратора и не только. Если своими словами — это та штука, которая позволяет автоматически настраивать сервера пачками.
Кто-то скажет, что он не нужен, т.к. есть Chef, Puppet, etc. Я с этими людьми абсолютно соглашусь. Если вы можете использовать эти инструменты — отлично. Я же пишу эту статью для тех, кто хочет немного понять как работает Ansible и как с его помощью можно многое автоматизировать.
Если вы до этого не сталкивались с Ansible вообще, то советую почитать статью компании Селектел. Отличная статья.
Давайте определимся, что нам нужно, чтоб запустить Wordpress на VPS сервере с установленной Ubuntu:
Вот в таком порядке мы и будем писать роли для настройки сервера.
Не так давно я начал разбираться с замечательным инструментом для любого DevOps — Ansible. Сегодня хочу представить на ваш взыскательный суд небольшую вводную статью по использованию этого, во многом прекрасного, инструмента. Итак, начнем.
Что такое Ansible
Ansible — это инструмент для автоматизации задач системного администратора и не только. Если своими словами — это та штука, которая позволяет автоматически настраивать сервера пачками.
Кто-то скажет, что он не нужен, т.к. есть Chef, Puppet, etc. Я с этими людьми абсолютно соглашусь. Если вы можете использовать эти инструменты — отлично. Я же пишу эту статью для тех, кто хочет немного понять как работает Ansible и как с его помощью можно многое автоматизировать.
Если вы до этого не сталкивались с Ansible вообще, то советую почитать статью компании Селектел. Отличная статья.
Максимум автоматизации
Давайте определимся, что нам нужно, чтоб запустить Wordpress на VPS сервере с установленной Ubuntu:
- Nginx
- Mysql
- PHP5
- Memcached для использования W3Total Cache плагина
- Wordpress
Вот в таком порядке мы и будем писать роли для настройки сервера.
+3
Дайджест интересных материалов из мира веб-разработки и IT за последнюю неделю №113 (8 — 14 июня 2014)
5 min
44KПредлагаем вашему вниманию подборку с ссылками на полезные ресурсы, интересные материалы и IT-новости
![](https://habrastorage.org/getpro/habr/post_images/ecb/6b5/775/ecb6b577542cd8ed920c3f9662d0b5e6.png)
![](https://habrastorage.org/getpro/habr/post_images/ecb/6b5/775/ecb6b577542cd8ed920c3f9662d0b5e6.png)
+46
11 неловких моментов при общении по email
8 min
156KTranslation
Электронная почта — неотъемлемая составляющая нашей жизни, это факт. У большинства из нас есть знакомые, которые удалили свои профили с Фейсбука или вообще отказались их заводить, взяв верх над своим эго. Может быть, вы даже знаете тех, кто горд отказом от смартфона по собственной воле. Но никому во взрослом интернетозависимом мире не позволено не иметь электронной почты.
Отказ от электронной почты сегодня сравним с отказом от телефонного номера: вы должны быть действительно на своей волне, чтобы на это отважиться.
И вот мы все пишем что-то в окнах новых сообщений, сражаемся в почтовых ящиках — вроде бы все идет хорошо. Но, как и при любом социальном взаимодействии, в электронной переписке есть свои подводные камни.
Давайте обсудим 11 самых неловких моментов, которые привносит в нашу жизнь электронная переписка.
Переведено компанией-локализатором Alconost
![](https://habrastorage.org/getpro/habr/post_images/eb1/ab1/a89/eb1ab1a89a3491e01f4f7341313ed8b0.png)
Отказ от электронной почты сегодня сравним с отказом от телефонного номера: вы должны быть действительно на своей волне, чтобы на это отважиться.
И вот мы все пишем что-то в окнах новых сообщений, сражаемся в почтовых ящиках — вроде бы все идет хорошо. Но, как и при любом социальном взаимодействии, в электронной переписке есть свои подводные камни.
Давайте обсудим 11 самых неловких моментов, которые привносит в нашу жизнь электронная переписка.
Переведено компанией-локализатором Alconost
![](https://habrastorage.org/getpro/habr/post_images/eb1/ab1/a89/eb1ab1a89a3491e01f4f7341313ed8b0.png)
+66
Дайджест интересных новостей и материалов из мира PHP № 42 (1 — 16 июня 2014)
3 min
20K![](https://habrastorage.org/getpro/habr/post_images/100/02b/589/10002b589f65085568d953429e3615f8.png)
Предлагаем вашему вниманию очередную подборку со ссылками на новости и материалы.
Приятного чтения!
+36
Как IPv6 помогает роутеры ломать
5 min
124K![image](https://habrastorage.org/getpro/habr/post_images/5d8/a04/29f/5d8a0429f0eacc5f507caf3e7e962a98.jpg)
Предисловие
Проснулся я сегодня с мыслью, что огромное количество инструкций по настройке NAT советуют использовать строку вида:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Многие понимают проблемы этой конструкции, и советуют добавлять:
iptables -A FORWARD -i ppp0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
Но, зачастую, забывают задать таблице FORWARD действие DROP по умолчанию, или добавить правило REJECT в конец таблицы.
На первый взгляд, вроде бы, все кажется нормальным. Однако, это далеко не так. Дело в том, что если не запретить маршрутизировать трафик из WAN-порта в WAN-порт, кто-нибудь из вашей WAN-сети (предположим, что провайдер садит весь подъезд в одну /24) может маршрутизировать трафик через вас, просто прописав ваш IP в качестве шлюза. Все современные SOHO роутеры это учитывают, а вот неопытный администратор, который делает роутер под обычным linux, может не знать или забыть об этом. В подсети моего провайдера таких роутеров не оказалось, и мой план по захвату мира провалился. Однако, статья совсем не об этом.
Магические двоеточия
Как вы, может быть, знаете, многие современные программы и сервисы биндятся на IP :: (два двоеточия), а не на 0.0.0.0, как было раньше. IPv6 адрес :: значит то же самое, что и IPv4 0.0.0.0, т.е. «слушаем все интерфейсы». Многие считают, что если программа слушает ::, то этот сокет может принимать только IPv6-соединения, однако это далеко не так.
В IPv6 есть так называемое отображение IPv4-адресов в IPv6 диапазон. Если программа слушает сокет ::, а к ней обращаются из IPv4-адреса 1.2.3.4, то программа получит соединение с адреса ::ffff:1.2.3.4. Этого можно избежать, сделав:
sysctl -w net.ipv6.bindv6only=1
Но это нужно далеко не всегда, т.к. обычно удобно, что программа слушает один сокет, а получать соединения может по двум протоколам сразу. Практически во всех дистрибутивах, IPv6-сокеты ведут себя именно так, т.е. bindv6only=0.
+111
30 полезных сервисов для веб-разработчика
2 min
163KРешил собрать сервисы, которые могут быть полезны веб-разработчикам и дизайнерам. Буду рад, если кто-то найдет для себя полезный сервис. Осторожно, под катом куча картинок!
+132
Продвижение приложений в AppStore (Google Play)
9 min
53KTutorial
![](https://habrastorage.org/getpro/habr/post_images/b2a/c59/2c1/b2ac592c15e7a5680b08ebf534aa5ebd.jpg)
Прежде чем мы написали этот материал, наши приложения загрузили более 2 000 000 раз, мы провели порядка 50 больших промо кампаний, побывали в топах AppStore более, чем в 24-х странах пока наконец не собрали всё это в один большой work flow. В статье почти нет очевидных вещей про ключевые слова, красоту иконок, скриншотов и рекламные кампании. Мы попытались привести работу продуктовой компании к единой модели, ответив на вопросы: «что?», «когда?», «зачем?» и даже на вопрос «а дальше что?». Если вы разрабатываете собственное приложение, хотите начать это делать или у вас просто есть друг разработчик или маркетолог продуктовой компании — в этой статье вы найдёте много полезной информации.
+24
VIM как IDE для разработки на Python
10 min
158KTutorial
![image](https://habrastorage.org/getpro/habr/post_images/461/e02/655/461e026553b084b7620d05aa5b32f963.png)
Данная статья будет посвящена настройке vim, в которой я поделюсь своим «скромным» пониманием того, каким должен быть текстовый редактор, чтобы в нем было удобно/приятно/легко (нужное подчеркнуть) писать код также, как это сейчас возможно во всевозможных IDE типа PyCharm, SublimeText и т.п.
Весь процесс постараюсь описать как можно более подробно, чтобы вопросов по мере чтения для начинающих осваивать vim возникало как можно меньше.
+46
Дэн Саффер — Микровзаимодействия (Microinteractions). Конспект книги
21 min
39KTutorial
Translation
![Microinteractions book cover](https://habrastorage.org/getpro/habr/post_images/dff/e83/311/dffe833110245a5613155cdc9574a434.jpg)
Успех цифровых продуктов определяется мелочами. Книга «Микровзаимодействия» Дэна Саффера научит вас проектировать эффективные функциональные элементы. А этот подробный конспект поможет лучше запомнить прочитанное или даже заменит англоязычный оригинал.
Как пользователю изменить настройку? Как включить бесшумный режим или узнать о получении нового сообщения?
Используя яркие примеры из реальных современных устройств и приложений, автор разбирает микровзаимодействия на составные части и показывает, как их использовать в мобильных приложениях, веб виджетах и бытовой технике.
+49
Как разрабатывать безопасные приложения под Android. Семинар в Яндексе
8 min
19KДоля пользователей, которые применяют в ежедневной жизни мобильные устройства, неуклонно возрастает. Большая часть этих устройств – смартфоны и планшеты на базе iOS, Android и Windows. Мобильность, специфические особенности взаимодействия пользователя с устройством и новые операционные системы – факторы, приводящие к появлению необычных проблем, связанных с информационной безопасностью. Мы рассмотрим часть из этих проблем, их решения, и на практике убедимся, что разработка инструментов для анализа мобильных приложений не так уж сложна.
Начнем с того, что перечислим несколько характерных для большинства мобильных устройств черт, которые могут влиять в том числе и на безопасность:
Так какие же риски порождают эти особенности. Миниатюрность приводит к тому, что устройство нетрудно потерять, после чего оно потенциально может оказаться в руках злоумышленника. Массовость и простота монетизации делает устройства привлекательными для злоумышленников. Просто заставив телефон послать SMS на платный номер, можно получить неплохую выгоду. Большое количество пользователей также означает, что и процент не очень технически грамотных пользователей достаточно велик. Универсальность мобильных устройств подразумевает, что в них может храниться практически весь спектр персональной информации, которую можно использовать: контакты, переписка, фотографии, видео, пароли и токены от различных важных сервисов вплоть до банковских клиентов. Постоянное подключение к сети – это дополнительный риск, так как злоумышленникам не нужно выгадывать моменты для атаки.
Начнем с того, что перечислим несколько характерных для большинства мобильных устройств черт, которые могут влиять в том числе и на безопасность:
- миниатюрность;
- массовость;
- универсальность;
- хранение важных для пользователя данных;
- постоянное подключение к сети (GPRS/3G/EDGE/WiFi).
Так какие же риски порождают эти особенности. Миниатюрность приводит к тому, что устройство нетрудно потерять, после чего оно потенциально может оказаться в руках злоумышленника. Массовость и простота монетизации делает устройства привлекательными для злоумышленников. Просто заставив телефон послать SMS на платный номер, можно получить неплохую выгоду. Большое количество пользователей также означает, что и процент не очень технически грамотных пользователей достаточно велик. Универсальность мобильных устройств подразумевает, что в них может храниться практически весь спектр персональной информации, которую можно использовать: контакты, переписка, фотографии, видео, пароли и токены от различных важных сервисов вплоть до банковских клиентов. Постоянное подключение к сети – это дополнительный риск, так как злоумышленникам не нужно выгадывать моменты для атаки.
+57
Git 2.0.0
1 min
57K![](https://habrastorage.org/getpro/habr/post_images/43b/c08/694/43bc08694e4a91eb17d4cd0f19175d52.png)
Состоялся долгожданный релиз, содержащий достаточно много обновлений, нововведений и багфиксов.
Одним из самых главных изменений является поведение команды
git push
. Теперь по умолчанию (если не указана ветка) push будет осуществлен только в текущую ветку. Git 1.* по умолчанию делал push во все ветки, которые были изменены локально. Конечно же можно вернуться к прежнему поведению, для этого служит опция push.default
.Поведение Git 1.*:
git config --global push.default matching
Новое поведение по умолчанию в Git 2.0:
git config --global push.default simple
Другие изменения:
+109
Дружим Git с Putty
2 min
51KTutorial
Disclaimer
Предварительно делал поиск по хабру с надеждой на подобный пост, смог найти только вот этот пост, в котором вся работа производятся через TortoiseGit.
Но это не наш метод. По той причине, что в этом случае все наши IDE не смогут сами сделать Push на сервер. Да и через Git Bash ничего не получится сделать на сервере.
Но это не наш метод. По той причине, что в этом случае все наши IDE не смогут сами сделать Push на сервер. Да и через Git Bash ничего не получится сделать на сервере.
почему мне нужно использовать Git в связке с Putty?
Так уж получилось, что я активно использую Putty с настроенными ключами для доступа к серверам. Ключей у меня не один. Git-репозитариев тоже не один.
Конечно же, можно нагенерить OpenSSH ключей для Git-а и разрулить их через ~/.ssh/config, но это получается двойная работа – поддержка ключей в Putty и отдельная поддержка для Git.
![](https://habrastorage.org/getpro/habr/post_images/268/fd7/c48/268fd7c48eb352ca893378f1a467338e.png)
Конечно же, можно нагенерить OpenSSH ключей для Git-а и разрулить их через ~/.ssh/config, но это получается двойная работа – поддержка ключей в Putty и отдельная поддержка для Git.
![](https://habrastorage.org/getpro/habr/post_images/268/fd7/c48/268fd7c48eb352ca893378f1a467338e.png)
Итак, представим, что у нас девственно чистая система, в которой нет ни Putty, ни msysgit. Приступим к настройке нашего рабочего окружения.
Установка Putty
Качаем, устанавливаем, генерим и настраиваем ключ c Pagent (инструкция, ?).
Добавляем ключ на git-сервер
Копируем публичный OpenSSH ключ из Putty-ключа
Запускаем Putty key Generator
Открываем (кнопка «Load») наш PPK-ключ
Копируем весь текст из блока «Key»
Открываем (кнопка «Load») наш PPK-ключ
Копируем весь текст из блока «Key»
Открываем страницу с SSH ключами и добавляем из буфера наш ключ
В картинках (на примере GitHub)![](https://habrastorage.org/getpro/habr/post_images/6be/113/714/6be1137147dcafa1537ad74169044d91.png)
![](https://habrastorage.org/getpro/habr/post_images/ae0/546/13b/ae054613b41a701c3b75fa8ec51cff07.png)
![](https://habrastorage.org/getpro/habr/post_images/cbc/f79/6f8/cbcf796f8393c8c61c693b8a8e3cae32.png)
![](https://habrastorage.org/getpro/habr/post_images/5ab/4fd/f57/5ab4fdf57166f086eac79162d057ef33.png)
![](https://habrastorage.org/getpro/habr/post_images/263/ee3/7e2/263ee37e2cdaeee28e6f3bad313fe547.png)
![](https://habrastorage.org/getpro/habr/post_images/6be/113/714/6be1137147dcafa1537ad74169044d91.png)
![](https://habrastorage.org/getpro/habr/post_images/ae0/546/13b/ae054613b41a701c3b75fa8ec51cff07.png)
![](https://habrastorage.org/getpro/habr/post_images/cbc/f79/6f8/cbcf796f8393c8c61c693b8a8e3cae32.png)
![](https://habrastorage.org/getpro/habr/post_images/5ab/4fd/f57/5ab4fdf57166f086eac79162d057ef33.png)
![](https://habrastorage.org/getpro/habr/post_images/263/ee3/7e2/263ee37e2cdaeee28e6f3bad313fe547.png)
Создаём и сохраняем в Putty профиль «git@github.com» и проверяем, что удаётся зайти по ключу – должна открыться и сразу закрыться консоль.
В картинках![](https://habrastorage.org/getpro/habr/post_images/df6/91a/679/df691a679f11143c4f910293da5d3dbc.png)
![](https://habrastorage.org/getpro/habr/post_images/542/7f0/c60/5427f0c609f9c6bdea50a2089e47a441.png)
![](https://habrastorage.org/getpro/habr/post_images/96d/827/353/96d82735340ed64012175cc7a5668e95.png)
![](https://habrastorage.org/getpro/habr/post_images/f4e/05d/181/f4e05d18162ab5c11de42dcb76235a8e.png)
![](https://habrastorage.org/getpro/habr/post_images/df6/91a/679/df691a679f11143c4f910293da5d3dbc.png)
![](https://habrastorage.org/getpro/habr/post_images/542/7f0/c60/5427f0c609f9c6bdea50a2089e47a441.png)
![](https://habrastorage.org/getpro/habr/post_images/96d/827/353/96d82735340ed64012175cc7a5668e95.png)
![](https://habrastorage.org/getpro/habr/post_images/f4e/05d/181/f4e05d18162ab5c11de42dcb76235a8e.png)
Устанавливаем и настраиваем msysgit
+15
Синхронизация структуры MySQL + Git
4 min
22KДля синхронизации файлов проекта, ведения истории мы используем системы контроля версий, например, Git. Однако, когда у меня встал вопрос о контроле версий структуры базы MySQL — удовлетворяющего решения найти не удалось.
Замечу, во многих фреймворках и ORM существуют необходимые механизмы «из коробки» — миграции, версионность и т.д. А вот для нативной работы с MySQL — приходится все делать ручками. И пришла идея попытаться создать автоматическую систему для отслеживания изменений.
Замечу, во многих фреймворках и ORM существуют необходимые механизмы «из коробки» — миграции, версионность и т.д. А вот для нативной работы с MySQL — приходится все делать ручками. И пришла идея попытаться создать автоматическую систему для отслеживания изменений.
+2
Книжка Discover Meteor переведена на русский
2 min
22KTutorial
![](https://habrastorage.org/getpro/habr/post_images/068/85f/a30/06885fa3017897f2918bcd807b9c6a5b.jpg)
Автор картинки: Donovan Shortey, использовано по лицензии Creative Commons.
Познавательная книжка Discover Meteor теперь переведена усилиями сообщества на русский язык и находится в свободном доступе. Английская версия по-прежнему требует подписки и стоит (разумных) денег.
В начале марта авторы оригинальной книжки Sacha Greif и Tom Coleman бросили клич, приглашая любителей фреймворка MeteorJS перевести ее на все языки мира. Локализированные версии книжки выкладывались бы под свободной лицензией Creative Commons, свободно доступные для всех желающих быстро познать мир Meteor. В настоящий момент существуют переводы на 22 языка мира, в разной степени готовности. Проект доступен на GitHub, и если кто-то заметил опечатку, или желает как-то дополнить перевод — добро пожаловать в команду.
+37
Разворачиваем сервис построения маршрутов OSRM
4 min
60KTutorial
Совсем недавно, в одном из проектов, нам была поставлена задача — научиться строить маршруты на карте для велосипедных прогулок.
Первым делом, мы начали смотреть маршруты Google и Яндекс. И к сожалению, пришлось от них отказаться, т.к. первые разрешали показывать их только на родных картах, вторые, не знали что есть велосипеды и даже пешеходы.
Немного изучив предметную область, мы нашли наконец что искали: Open Source Routing Machine. Проект, с открытым исходным кодом, который позволяет развернуть у себя на сервере, свой собственный сервис построения маршрутов.
![](https://habrastorage.org/getpro/habr/post_images/6cc/e9f/475/6cce9f475c73f7cd008c13dcbc9c5490.png)
Тайлы: MapBox, Яндекс-Карты
Картографические данные: участники OpenStreetMap
Разобравшись, как его настраивать и запускать, мы решили поделиться этим и пересказать своими словами процесс установки, и то с чем пришлось столкнуться в процессе.
Первым делом, мы начали смотреть маршруты Google и Яндекс. И к сожалению, пришлось от них отказаться, т.к. первые разрешали показывать их только на родных картах, вторые, не знали что есть велосипеды и даже пешеходы.
Немного изучив предметную область, мы нашли наконец что искали: Open Source Routing Machine. Проект, с открытым исходным кодом, который позволяет развернуть у себя на сервере, свой собственный сервис построения маршрутов.
![](https://habrastorage.org/getpro/habr/post_images/6cc/e9f/475/6cce9f475c73f7cd008c13dcbc9c5490.png)
Тайлы: MapBox, Яндекс-Карты
Картографические данные: участники OpenStreetMap
Разобравшись, как его настраивать и запускать, мы решили поделиться этим и пересказать своими словами процесс установки, и то с чем пришлось столкнуться в процессе.
+42
XCOM: Enemy Unknown портируют на Linux
1 min
14KКомпания Feral Interactive официально подтвердила, что первой игрой, портированной на Linux, будет XCOM: Enemy Unknown. Игра станет доступна через платформу Steam уже этим летом.
XCOM: Enemy Unknown — пошаговая тактическая RPG, изначально вышла на Windows и разных игровых приставках в октябре 2012 года.
Таким образом, Feral Interactive присоединяется к числу игровых студий, которые начинают осваивать Linux.
XCOM: Enemy Unknown — пошаговая тактическая RPG, изначально вышла на Windows и разных игровых приставках в октябре 2012 года.
Таким образом, Feral Interactive присоединяется к числу игровых студий, которые начинают осваивать Linux.
+47
Как писать парсеры на JavaScript
10 min
111K… а именно как писать LL парсеры для не очень сложных структур при помощи конструирования сложного парсера из более простых. Изредка возникает необходимость распарсить что то несложное, скажем некую XML-подобную структуру или какой нибудь data URL, и тогда обычно возникает либо простыня хитрого трудно читаемого кода либо зависимость от какой то ещё более сложной и хитрой библиотеки для парсинга. Здесь я собираюсь совместить несколько известных идей (какие то из них попадались на Хабре) и показать как можно просто и лаконично написать довольно сложные парсеры уложившись при этом в совсем немного строчек кода. Для примера я буду писать парсер XML-подобной структуры. И да, я не буду вставлять сюда картинку для привлечения внимания. В статье вообще картинок нет, поэтому читать будет трудно.
+52
Рендеринг WEB-страницы: что об этом должен знать front-end разработчик
6 min
232KПриветствую вас, уважаемые хабравчане! Сегодня я бы хотел осветить вопрос рендеринга в веб-разработке. Конечно, на эту тему уже написано много статей, но, как мне показалась, вся информация довольно разрознена и отрывочна. По крайней мере, чтобы собрать всю картину в своей голове и осмыслить её, мне пришлось проанализировать немало информации (в основном — англоязычной). Именно поэтому я решил формализовать свои знания в статью, и поделиться результатом с сообществом Хабра. Думаю, информация будет полезна как начинающим веб-разработчикам, так и более опытным, чтобы освежить и структурировать свои знания.
Данное направление можно и нужно оптимизировать на этапе вёрстки/frontend-разработки, поскольку, очевидно, что разметка, стили и скрипты принимают в рендеринге непосредственное участие. Для этого соответствующие специалисты должны знать некоторые тонкости.
Данное направление можно и нужно оптимизировать на этапе вёрстки/frontend-разработки, поскольку, очевидно, что разметка, стили и скрипты принимают в рендеринге непосредственное участие. Для этого соответствующие специалисты должны знать некоторые тонкости.
+99
Information
- Rating
- Does not participate
- Location
- Тольятти, Самарская обл., Россия
- Registered
- Activity