Как стать автором
Обновить

Компания Маклауд временно не ведёт блог на Хабре

Сначала показывать

HTML-теги и атрибуты, о которых вы, возможно, не знали

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

image


Эта статья — шпаргалка по HTML-тегам. Поэтому не будем разглагольствовать, сразу к делу.


abbr


Тег abbr определяет аббревиатуру или акроним. Аббревиатура или акроним расшифровываются с помощью атрибута title.


<abbr title="HyperText Markup Language">HTML</abbr> был разработан британским ученым Тимом Бернерсом-Ли приблизительно в 1986—1991 годах.

abbr часто используется совместно с тегом dfn, идентифицирующим понятие или термин:


<p><dfn><abbr title="Cascading Style Sheets">CSS</abbr></dfn> - формальный язык описания внешнего вида документа (веб-страницы).</p>

address


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

Читать дальше →
Всего голосов 56: ↑44 и ↓12+42
Комментарии13

Человеко-читаемый JavaScript: история о двух экспертах

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


Каждый хочет быть экспертом. Но что это хотя бы означает? За годы работы мне встречалось два типа людей, именуемых «экспертами». Эксперт первого типа – это человек, который не только знает в языке каждый винтик, но и непременно все эти винтики использует, независимо от того, приносит ли это пользу. Эксперт второго типа также знает каждую синтаксическую тонкость, но разборчивее подходит к выбору инструмента для решения задачи, учитывая ряд факторов, как связанных, так и не связанных с кодом.

Давайте угадаю, эксперта какого типа вы хотели бы видеть в своей команде. Второго, верно? Это такой разработчик, который стремится выдавать удобочитаемый код, такие строки JavaScript, которые будут понятны другим специалистам, и которые легко будет поддерживать. Но характеристика «удобочитаемый» редко является определяющей – на самом деле, она обычно заключена в глазах смотрящего. Итак, к чему нас это приводит? К чему нужно стремиться, если наша цель – удобочитаемый код? Есть ли в данном случае явно верный или неверный выбор? Зависит от многого.

Очевидный выбор


Чтобы облегчить труд разработчика, TC39 в последние годы добавил множество новых возможностей в ECMAScript, в том числе, многие проверенные паттерны, заимствованные из других языков. Одним из таких нововведений, появившихся в ES2019, является метод Array.prototype.flat(). Он принимает аргумент глубины или Infinity и выравнивает массив. При отсутствии аргументов глубина массива по умолчанию равна 1.
Читать дальше →
Всего голосов 31: ↑20 и ↓11+18
Комментарии11

Как крупное кредитное бюро Experian 5 лет зарабатывает на уязвимости в своей системе

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


В 2017 году портал KrebsOnSecurity уже сообщал об уязвимости в одном из трёх крупнейших кредитных бюро в США. Уязвимость позволяет злоумышленникам отменить запрос клиента бюро Experian о замораживании кредитного счёта и получить доступ к его персональным данным. На прошлой неделе один клиентов рассказал сотрудникам KrebsOnSecurity, что и сейчас можно разморозить счёт без входа в соответствующий аккаунт на сайте Experian. Я решил вновь поднять больную тему о проблемах с безопасностью информационных систем кредитных бюро.


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

У Experian есть специальная страница, где можно ввести информацию для восстановления забытого PIN-кода. Такой «удобной» возможностью могут воспользоваться и злоумышленники, чтобы узнать ваш PIN. Но для этого нужно иметь достаточно информации о вас. Раньше мы надеялись, что не на все вопросы можно ответить, имея при себе чужие персональные данные, которые периодически утекают в сеть из базы Equifax и других кредитных бюро. 

История клиента


В прошлом году Дюн Томас, инженер-программист из Сакраменто (Калифорния), заморозил свои кредитные счета в Experian, Equifax и TransUnion, так как узнал, что мошенники пытались получить доступ к средствам на счетах, используя адрес его пустующего дома (в штате Вашингтон), выставленного на продажу.
Читать дальше →
Всего голосов 18: ↑16 и ↓2+23
Комментарии0

Откуда в стране почти без интернета хакеры: что мы знаем о севернокорейской хакерской группировке Lazarus

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


Что мы знаем о Северной Корее? Да почти ничего. Как минимум, нам известно, что у этой замечательной страны имеется руководитель Шрёдингера (то ли жив, то ли нет), которого время от времени подменяет на ответственном посту симпатичная сестренка. Еще у них, вроде бы, есть атомная бомба и ракеты, причем последние временами даже летают. Наконец, злые языки утверждают, будто Северная Корея — одна из немногих стран, обладающих собственной группировкой хорошо обученных боевых хакеров. Но это, ясное дело, тоже не точно. Как подобное удалось государству, где с компьютерами и интернетом дела обстоят примерно как с копчёной колбасой в позднем СССР — все знают, что это такое, но доступно это благо только избранным? Вот об этом мы сегодня и поговорим.
Читать дальше →
Всего голосов 45: ↑41 и ↓4+54
Комментарии26

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

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

Я начал работать над передовыми инструментами для разработчика 9 лет назад. Когда я начинал, «инструменты программирования» означали средства просмотра форматов файлов, редакторы и, возможно, варианты grep. Отмечу, что существует большая проблема с определением целей внесения изменений, а еще у меня есть вопросы что у нее общего с поиском и заменой текста

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

Несмотря на это, исследования все еще на световые годы опережают то, что внедряется. Нет ничего необычного в том, чтобы прочитать статью 20-летней давности про инструмент, который, как было показано эмпирически, позволяет программистам в 4 раза быстрее справляться с задачей, а основная идея все еще пылится в подвалах университетов.
Читать дальше →
Всего голосов 33: ↑27 и ↓6+28
Комментарии14

Обзор Prisma ORM: как забыть об SQL и сосредоточиться на данных

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


Это статья-обзор о Prisma ORM.

ORM (англ. Object-Relational Mapping — «объектно-реляционное отображение или преобразование») — технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных».

Работа с базами данных (моделирование данных, изменение схем, формирование запросов и т.п.) — одна из наиболее сложных задач, возникающих при разработке приложений. Prisma предлагает решение, позволяющее сосредоточиться на данных вместо SQL.

Что такое Prisma?


Как утверждают разработчики, Prisma представляет собой «открытую ORM нового поколения для Node.js и TypeScript», реализующую «новую парадигму объектно-реляционного отображения».

Поддерживаемые языки программирования:

  • JavaScript
  • TypeScript
  • Go (в разработке)
Читать дальше →
Всего голосов 29: ↑20 и ↓9+21
Комментарии5

Оптимизируем производительность: JavaScript (V8) vs AssemblyScript (WebAssembly)

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


Чтобы повысить производительность web-приложений, используйте WebAssembly в связке с AssemblyScript, чтобы переписать критически важные для производительности компоненты web-приложения, написанные на JavaScript. «И это действительно поможет?», — спросите вы.

К сожалению, на этот вопрос нет чёткого ответа. Всё зависит от того, как вы будете их использовать. Вариантов много: в одних случаях ответ будет отрицательный, в других — положительный. В одной ситуации лучше выбрать JavaScript вместо AssemblyScript, а в другой — наоборот. На это влияет множество различных условий.

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

Кто я такой и почему занимаюсь этой темой? 


(Данный раздел можете пропустить, это несущественно для понимания дальнейшего материала).

Мне по-настоящему нравится язык AssemblyScript. Я даже в какой-то момент начал помогать разработчикам финансово. У них небольшая команда, в которой каждый серьёзно увлечён этим проектом. AssemblyScript — очень молодой язык, похожий на TypeScript и способный компилироваться в WebAssembly (Wasm). Именно в этом и заключается одно из его преимуществ. Раньше, чтобы использовать Wasm, web-разработчик должен был учить чуждые ему языки типа С, C++, C#, Go или Rust, так как в WebAssembly изначально могли компилироваться именно такие высокоуровневые языки со статической типизацией. 

Хотя AssemblyScript (ASC) и похож на TypeScript (TS), он не связан с этим языком и не  компилируется в JS. Схожесть в синтаксисе и семантике нужна, чтобы облегчить процесс «портирования» с TS на ASC. Такое портирование в основном сводится к добавлению аннотаций типов.
Читать дальше →
Всего голосов 19: ↑18 и ↓1+21
Комментарии1

Есть ли жизнь после CentOS?

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

Под конец и без того нелегкого 2020 года Red Hat преподнесла всем поклонникам CentOS весьма неожиданный «подарок», объявив о радикальном сокращении EOL восьмой версии дистрибутива и последующем отказе от дальнейшего развития проекта. Пользователи операционной системы, на протяжении многих лет занимавшей третье место по популярности в мире, оказались на распутье. Что выбрать в такой ситуации? Стать «вечным бета-тестером», перейдя на CentOS Stream? Выделить бюджет на покупку лицензии Red Hat Enterprise Linux? Или быть может попробовать одно из конкурирующих решений?
Читать дальше →
Всего голосов 30: ↑29 и ↓1+37
Комментарии45

Адаптивный дизайн как антипаттерн

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


Анимированная гифка показывает, что происходит на Invidious, когда я сужаю окно браузера на пару пикселей.

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

Уверен, не я один часто сталкиваюсь с подобным. Лично мне нравится, когда окна моего браузера достаточно узкие, но в последние лет десять веб-страницы стали реагировать на такое предпочтение так, будто мне нужна мобильная, функционально урезанная версия страницы. Здесь кроется большая проблема, и не одна.

Пространственный газлайтинг


Одна из фундаментальных концепций, на которых основан дизайн Macintosh, первый по-настоящему клиент-ориентированный графический пользовательский интерфейс – это идея о пространственном упорядочивании человеко-машинных взаимодействий при работе с компьютером. Пользователя избавили от необходимости запоминать текстовые команды, чтобы обустраивать файлы на диске, а предоставили возможность тасовать файлы так, чтобы это было наглядно и – вот оно, озарение – запоминать их положение, как будто в пространстве. Пользователь мог вспомнить, куда положил файл, и не столь важно, как этот файл называется. Точно так мы запоминаем, куда положили кошелек, ключи или важный документ.
Читать дальше →
Всего голосов 33: ↑21 и ↓12+17
Комментарии20

Markdown в науке

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

Интернет и эпоха Web 2.0 существенно изменили метод подготовки научных публикаций. Сейчас мы читаем статьи с экранов компьютеров, смартфонов и электронных книг, а не только с бумаги. Крайне желательно, чтобы работа над текстом по превращению журнальной статьи в энциклопедическую вики-справку, в презентацию, или же в содержимое сайта, не требовала чрезмерных усилий. Далее мы рассмотрим решение означенной проблемы с помощью текстовой разметки Markdown и попробуем представить себе дальнейшее развитие технологий.

Читать далее
Всего голосов 38: ↑38 и ↓0+38
Комментарии21

Этический антидизайн: как разработать продукт, не вызывающий привыкания

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

Почему бы не сделать перерыв?


На столе, напротив открытого окна (смотрите картинку) лежит Wii Remote. Это контроллер для игровой консоли Wii компании Nintendo. Люди, которые выросли c Wii, вспомнят как в игре Wii Sports периодически всплывало окно с сообщением, вежливо напоминающим вам, что стоит сделать перерыв. Возможно, это несколько нелогично, но для такого вторжения в вашу жизнь есть несколько причин. В онлайн-играх, основанных на подписке, компания действительно могла извлечь выгоду, когда вы время от времени выходили из системы (не волнуйтесь, мы и про социальные сети тоже поговорим). Вы ведь не откажетесь от своей подписки, а каждую секунду вашего пребывания в сети вы «съедали» драгоценную серверную мощность. В других играх такие вещи, как гриндинг, хоть и заманчивы, но могут всё испортить. В Pokémon, например, если вы доведете всю свою команду до 60-го уровня, прежде чем сразитесь с Элитной четвёркой, вы выиграете, но не самым эффектным или честным способом. 

С Wii история другая. Кажется, что команда Nintendo знала, что их аудитория в основном состояла из детей. Разработчики чувствовали необходимость вмешаться, в интересах самого игрока (и, возможно, для успокоения родителей), когда ребёнок проводил слишком много времени в игре. Сейчас мы редко встречаем подобные вещи, и я всегда хотел узнать, почему.

Сервера уже не так дороги, как раньше. Механика многих современных видеоигр больше не позволяет заниматься гриндингом. Неужели Nintendo перестала заботиться о наших детях? Что ж, индустрия сильно изменилась. Сегодня многим разработчикам онлайн-игр наоборот выгодно, когда игроки проводят больше времени в сети. В мобильной игре Clash of Clans игроки могут предотвратить нападение на свою базу оставаясь онлайн. Чем быстрее вы закончите игру, тем быстрее вас заставят купить её DLC или, еще лучше, Season Pass. 
Читать дальше →
Всего голосов 22: ↑18 и ↓4+21
Комментарии7

Под теплым светом кресс-салата и табака

Время на прочтение5 мин
Количество просмотров4.1K
image
Табак это не только вредные сигареты, но и крутое модельное растение. Российские разработчики модифицировали, внедрив биолюминесцентные грибные белки.

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

А иногда крутые штуки создаются чуть ли не just for fun, но в итоге становятся крутыми и важными проектами. Или не становятся. Многие помнят, как в свое время затравили проект Glowing Plant на Kikstarter. В результате, несмотря на то, что они собрали $484,000, Kikstarter ввел правило, запрещающее выставлять в качестве награды ГМО-семена. В итоге, светящуюся Резуховидку Таля они не сделали. Зато смогли обойти запреты и разослали модифицированный мох.

Сегодня буду рассказывать про светящийся салат, светлячков, и то, зачем вообще ученым надо заставлять растения светиться.
Всего голосов 22: ↑19 и ↓3+25
Комментарии1

Слабо поднять такой крошечный контейнер? Создаем контейнеризованный HTTP-сервер на 6kB

Время на прочтение4 мин
Количество просмотров14K
TL;DR  я решил создать самый маленький образ контейнера, при помощи которого все-таки можно сделать что-нибудь полезное. Опираясь на преимущества многоступенчатых сборок, базового образа scratch и крошечного http-сервера на основе этой сборки, я смог ужать результат до 6.32kB!





Если предпочитаете видео, вот ролик по статье, выложенный на YouTube!

Раздутые контейнеры


Контейнеры часто превозносятся как панацея, позволяющая справиться с любыми вызовами, связанными с эксплуатацией ПО. Притом, как мне нравятся контейнеры, на практике мне часто попадаются контейнерные образы, отягощенные разнообразными проблемами. Распространенная беда – размер контейнера; у некоторых образов он достигает многих гигабайт!  

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

Задача


Правила довольно просты:
Всего голосов 46: ↑44 и ↓2+56
Комментарии37

Сброс пароля и базовая настройка Cisco 1941

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

Бывает так, что приходится сталкиваться с задачами, к решению которых ты вроде бы и не готов, а получить результат надо здесь и сейчас. Знакомо, да? Добро пожаловать в мир восточноевропейского менеджмента с соответствующей культурой управления.

Итак, допустим, ты представитель местечкового провайдера, уже знающий, как настроить какой-нибудь ASUS, но волею судьбы ещё не получивший сертификат CCNA. Рядом с тобой стоит местный админ, тоже без сертификата, глазами молящий ничего не "сбрасывать в ноль", ибо "всё работает, я просто не знаю пароль, только вы никому не говорите".

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

Проведём же вместе сеанс чёрной айтишной магии с последующим её разоблачением. А именно : сбросим пароль, настроим интерфейсы (локальный и внешний), соединим эти сети маршрутами и трансляцией адресов и прикроем(нет) фаерволом. Кирпич с фирменным шильдиком волшебным образом превратится в полезное сетевое устройство.

Читать далее
Всего голосов 19: ↑18 и ↓1+26
Комментарии4

Релиз Node.js 16: обзор лучшего

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


20 апреля состоялся релиз новой 16 версии Node.js. Среди основных изменений обновление движка JavaScript V8 до версии 9.0, встроенные бинарники (двоичные файлы) для Apple Silicon и несколько API, но обо всем по порядку.

С полным списком изменений можно ознакомиться здесь.

Node.js 16 заменит Node.js 15 в качестве «текущего» (current) релиза. Этот статус будет сохраняться за ним на протяжении следующих 6 месяцев. Затем, в октябре 2021 года, Node.js 16 перейдет в статус «долгосрочной поддержки» (long-term support, LTS). После перехода в статус LTS он получит кодовое имя 'Gallium'.

Подробности о релизах можно найти в репозитории «Node.js Release Working Group». А пока давайте пройдемся по лучшим новостям.
Читать дальше →
Всего голосов 43: ↑43 и ↓0+43
Комментарии1

От версии 8 к 8.1: новый виток развития PHP

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


Я уже несколько раз писал о том, что происходило с PHP за год и всегда с нетерпением ждал следующего года. Я делал это в 2020-м и 2019-м. И продолжаю делать в 2021-м. 

Я всегда повторяю: PHP это уже не тот язык, которым он был десять лет назад, и мы очень этому рады. Сегодня это быстрый и надёжный язык, позволяющий разрабатывать сложные и масштабируемые приложения. Давайте обсудим некоторые из наиболее заметных изменений, которые появились за год — как в самом языке, так и в экосистеме.

От версии 8 к 8.1


Новая мажорная версия PHP 8 появилась в конце прошлого года. Я уже много об этом писал, так что не буду здесь повторяться. Как всегда, его производительность становится всё лучше и лучше. Этот факт подтверждают тесты от Kinsta.
Читать дальше →
Всего голосов 34: ↑31 и ↓3+43
Комментарии35

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

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


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

Если вы давно хотели разобраться в CORS и вас достали постоянные ошибки, добро пожаловать под кат.

Ошибка в консоли вашего браузера


No ‘Access-Control-Allow-Origin’ header is present on the requested resource.

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://example.com/

Access to fetch at ‘https://example.com’ from origin ‘http://localhost:3000’ has been blocked by CORS policy.


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

Эти всплывающие ошибки в процессе разработки просто раздражают. Но на самом деле, CORS — это невероятно полезный механизм в мире неправильно настроенных веб серверов, злоумышленников, орудующих в интернете и организаций, продвигающих веб-стандарты.

Но давайте-ка пойдем к истокам…
Читать дальше →
Всего голосов 41: ↑40 и ↓1+57
Комментарии14

Видеоигры: лечат депрессию, снижают преступность и аддиктивные, как казино

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


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

Но оправдана ли цензура по отношению к играм? Являются ли видеоигры причиной преступлений и психологических заболеваний? Что, если их влияние на эти вещи совершенно обратное? Давайте посмотрим на научные исследования.

Положительное влияние видеоигр


Игры против депрессии


Прежде, чем говорить о влиянии игр на депрессию, давайте разберемся что это и как эта болезнь влияет на организм.

В нашей с вами голове есть две очень важных (да и как всё остальное в голове) части мозга. Первая называется гиппокамп. Одна из его функций — это обучение человека. 
Читать дальше →
Всего голосов 29: ↑27 и ↓2+36
Комментарии71

Манифест: почему я не делаю свой пет-проджект постоянной работой

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


Когда доходы от продаж с моего сайд-проекта пробили отметку $100k, я, к собственному удивлению, обнаружил:

Не хочу бросать основную работу.

Никакого позыва написать, что наконец-то я бросаю «крысиные бега». Не написал ни единого твита о том, как я стал творить, и «изменил собственную жизнь. (И вам это под силу! Купите мой курс!)». Не написал письма в духе Джерри Магуайера.

Подумал, может со мной что не так. Зависая в соцсетях, я постоянно натыкался на фетишизацию трудоголизма, из-за чего меня подмывало бросить работу. Такая свобода подобна нирване, «все или ничего» и, как только вкусишь ее, пути назад не будет. Чем не киносценарий?  

Я хочу написать новый сценарий – о тех, кто Творит По Совместительству. Давайте определим, что это такое, почему этим стоит заниматься, как дать этому ход, а потом довести до ума.

Не просто деньги


Годовой заработок в $100k всегда казался мне планкой, с которой начинается успешный «независимый доход». В лучшие годы мои родители зарабатывали меньше, а в большинстве городов $100k хватает на самообеспечение и даже на то, чтобы прокормить семью. Еще лучше, если доход целиком пассивный – мечтал, каково путешествовать по свету, а деньги пускай зарабатываются, пока я сплю.  
Читать дальше →
Всего голосов 37: ↑33 и ↓4+39
Комментарии11

5 возможностей systemd, которые нравятся сисадминам

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

Изображение: Shmuel Csaba Otto Traian (CC BY-SA 3.0)

Каждый специалист знает, что в современных системах происходит много чего интересного: в фоновом режиме периодически запускаются и завершаются какие-то приложения, придерживаются своего расписания автоматизированные задачи, пишутся логи, приходят отчёты об изменении статуса служб. Часто эти процессы контролируют с помощью стандартного набора Unix-утилит. Но по мере усложнения систем появились новые задачи: real-time обработка невиданного доселе объёма данных, управление контейнерами приложений, управление доступом к облачным серверам и так далее. Насколько эффективно с этим можно справиться стандартными средствами?
Читать дальше →
Всего голосов 30: ↑28 и ↓2+36
Комментарии31