Результаты поиска
ITVDN: курсы программирования
Видеокурсы по
программированию
Подписка

300+ курсов по популярным IT-направлениям

Выбери свою IT специальность

Подписка
Подписка

300+ курсов по популярным IT-направлениям

Результаты поиска по запросу: mvc4 5*
5 мифов о программировании, которые сдерживают новичков

Автор: Редакция ITVDN

Мир IT привлекает многих: высокая зарплата, удалённая работа, интересные задачи. Но перед тем как начать обучение, немало людей останавливаются… из-за страха. И часто причина — в мифах, которые давно не имеют ничего общего с реальностью. В этой статье мы развенчаем пять самых распространённых мифов, которые мешают новичкам начать путь в программировании. Миф 1  «Чтобы стать программистом, нужно быть математическим гением» Этот стереотип до сих пор пугает многих. На самом деле, для старта в ИТ нужно логическое мышление, а не знание высшей математики. Да, в некоторых направлениях (например, Data Science или GameDev) математика важна. Но в Web-разработке, QA, DevOps, Backend-проектах ты можешь работать, даже если в школе не любил алгебру. Факт: согласно исследованию IBM, 72% ИТ-специалистов имеют гуманитарное образование, а не техническое. Миф 2  «Обучение длится годами» Традиционное высшее образование — это 4–5 лет, но в ИТ всё иначе. Онлайн-курсы, буткемпы, интенсивы позволяют получить базу за 6–12 месяцев. На платформе ITVDN студенты изучают HTML, CSS, JavaScript, Python или C# в своём темпе и получают практические навыки, которые востребованы работодателями. Даже после нескольких месяцев обучения можно найти стажировку или пройти тестовое задание. Миф 3 «Программирование — это только для “ботаников”» Существует представление, что программист — это замкнутый человек, который общается только с компьютером. На самом деле, это творческая и командная профессия. В ИТ ценятся коммуникация, инициатива, умение находить решения. Многие разработчики начинали как фитнес-тренеры, учителя, маркетологи или менеджеры. Программирование — это навык, который может освоить каждый. Миф 4  «Без университета тебя никто не возьмёт» Современные компании ценят скиллы, а не дипломы. Если у тебя есть GitHub, выполненные проекты, сертификаты, знание английского — это уже даёт преимущество на старте. Большинство студентов ITVDN не имеют ІТ-диплома, но после обучения успешно проходят собеседования и получают первую работу. Во время рекрутинга самое важное — практика, мышление и портфолио, а не формальное образование. Миф 5 «Чтобы стать программистом, нужно сразу знать все языки» Это один из самых вредных мифов. На самом деле, достаточно выбрать один язык для начала — и на его основе построить фундамент.  Например: Python — отлично подходит для аналитики, автоматизации, backend JavaScript — идеален для веб-разработки C# / .NET — популярен в корпоративных приложениях Позже ты сможешь добавить другие языки, но сначала важно научиться думать как программист. Мифы — это психологические барьеры. Они рождаются из незнания, чужого опыта или устаревших представлений.  А правда такова:  ✅ В программирование можно прийти с нуля  ✅ Даже если тебе далеко не 20  ✅ Без технического образования  ✅ И без “гениального” уровня IQ  Главное — мотивация, правильная программа и поддержка, которые помогут пройти путь от первого кода до первого оффера.
500+ вопросов на собеседовании по Ruby

Автор: Влад Сверчков

Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 14 июня 2021 года. Оригинальная версия на украинском языке доступна по ссылке. Junior Ruby Developer Middle Ruby Developer Senior Ruby Developer Что нужно знать, когда проходишь техническое собеседование по Ruby? Конечно, ко всем вопросам готовым не будешь, но мы попросили интервьюеров-практиков прислать свои списки вопросов, а затем обобщили их в одном материале. Junior Общие вопросы 1. Какие принципы программирования вы знаете и какие из них вы пытаетесь соблюдать чаще всего? 2. Что такое парадигма ООП? Какие основные составляющие парадигмы? 3. Зачем нужна инкапсуляция? Что может произойти и не произойти, если все методы будут иметь модификатор доступа public? 4. Что такое наследование? Назовите пример(ы) плохого наследования (такое наследование, которое не стоило бы реализовывать). 5. Что такое полиморфизм? Приведите пример использования полиморфизма. 6. Что такое паттерн/шаблон проектирования? Какие шаблоны знаете? 7. Что такое клиент и сервер? Какая механика их взаимодействия? 8. Опишите путь, который проходит запрос после того, как в браузер ввести URL любого ресурса. 9. Что такое протокол HTTP? Какая разница между HTTP и HTTPS? 10. Что такое API? Может ли веб-приложение использовать более одного API? 11. Что такое REST API? Какие действия чаще всего выполняются над ресурсами? 12. Что такое сессия? Что такое cookies? Какая разница между ними? 13. Какие веб-уязвимости знаете? Как от них защититься? Какие есть инструменты, чтобы автоматически контролировать защиту от веб-уязвимостей? 14. Какими критериям пользуетесь для выбора библиотеки? 15. Что такое рефакторинг? Какие должны быть условия для выполнения рефакторинга? 16. Знаете ли вы семейство UNIX-подобных операционных систем (Linux, MacOS)? Назовите команды, которые чаще всего используете в терминале. 17. Что такое аутентификация? 18. Что такое авторизация? 19. Из каких частей состоит HTTP Request и HTTP Response? 20. Какие HTTP-статусы (HTTP-коды) знаете? На какие группы вы могли бы их разделить? 21. Какие HTTP-методы знаете? Зачем используется каждый из них? Git 22. Знакомы ли вы с системой Git? 23. Для чего нужны ветки в Git? Как сделать ветку? 24. Как скопировать с Git-хостинга (GitHub / GitLab / Bitbucket / другие) проект? 25. Что такое флаг -f? Для чего он и какие минусы использования? 26. Что такое Pull Request? Зачем ветви соединяют через Pull Request? 27. Какие еще команды чаще всего применяете, когда пользуетесь Git? Ruby 28. Как вы контролируете версии Ruby на своей локальной машине? 29. Что такое метапрограммирование? Какие плюсы и минусы при использовании метапрограммирования? 30. Какой менеджер библиотек для Ruby знаете? Как добавлять библиотеки? Как контролировать версии библиотек? Style guide 31. Что такое style guide и зачем его используют? 32. Какой популярный линтер контролирует выполнение большей части пунктов с Ruby Style Guide? Основы Ruby 33. Какие типы переменных есть в Ruby? 34. Что вернётся в результате сложения 10.5 и 10? 35. Чем отличаются переменные, начинающиеся с @, @@ и $? 36. Что такое attr_reader, attr_writer, attr_accessor и зачем они? 37. Что такое метод? 38. Что значит "?" в конце названия методов? Что означает "!" в конце названия методов? 39. Чем отличается энумератор map от each? 40. Что такое модуль? Какие есть варианты подключения модулей в класс? 41. Что такое класс и зачем он нужен? 42. Что такое модуль и зачем его используют? Чем модуль отличается от класса? 43. Что такое константа? 44. Что такое блок? Что такое yield? Можно ли передавать блоки в методы? Каким образом? 45. Что такое proc? 46. Что такое lambda? 47. В чем разница между proc и lambda? 48. Что такое eigenclass? 49. Какие виды условных операторов есть в Ruby? (if, unless, ternary, case) 50. Есть ли разница между операторами && и and? 51. Какие виды циклов есть в Ruby? (loop, while, until, for, each(), times(), upto()) Типы данных 52. Какие типы данных есть в Ruby? 53. Что такое интерполяция? 54. Что такое конкатенация? 55. Что такое массив в Ruby? 56. Что такое Hash в Ruby? Чем Hash отличается от массива? 57. Что такое символ и зачем он нужен? 58. Что такое Range и зачем его используют? 59. Что такое Time и Date? 60. Что такое Struct? 61. Что такое File? Структура классов и объектов 62. Что такое BasicObject? 63. Что такое Numeric? 64. Что такое Enumerable? 65. Что такое Struct? 66. Что такое OpenStruct? 67. Что такое Set? 68. Что такое Queue? 69. Что такое Object? 70. Что такое Kernel? ООП на Ruby 71. Есть ли интерфейсы в Ruby? 72. Что такое getter и setter в Ruby? Как их создавать? 73. Что такое инстансная переменная? 74. Что такое константа класса? 75. Какая разница между методом класса и методом объекта? 76. Какие есть области видимости? 77. Какие есть модификаторы доступа? Как private отличается от protected? 78. Поддерживает ли Ruby множественное наследование? 79. Как наследуются методы? Можно ли переопределить метод? 80. Зачем метод super? 81. Что такое Singleton-метод? 82. Что такое миксины? Зачем они и чем отличаются от декоратора? 83. Что такое include и extend и в чем разница между ними? 84. Какой путь поиска метода в иерархии классов? 85. Какая разница между последовательными и именуемыми аргументами метода? 86. Что такое exception? Когда они применяются? Как вызвать exception? Как отловить exception? Метапрограммирование 87. Что означает open class? 88. Что такое monkey patching? 89. Возможно ли создать класс динамически? Если да, то как именно? 90. Какие есть способы динамического управления методами, переменными и классами (define_method(), class_eval(), module_eval())? 91. Как происходит поиск метода в иерархии? Как можно обработать отсутствие метода (method_missing())? 92. Что такое алиас метода? Для чего нужны алиасы? 93. Как получить значение инстансной переменной? Как задать значение? Как проверить существование инстансной переменной (instance_variable_get(), instance_variable_set(), instance_variable_defined())? 94. Какие методы интроспекции есть в Ruby (class(), ancestors(), methods(), private_methods(), instance_variables(), singleton_methods(), local_variables())? 95. Что такое хуки и зачем их используют (inherited(), included(), method_added(), singleton_method_added(), method_missing())? RubyGems 96. Что такое gem? Что такое RubyGems? 97. С какой целью используют RVM? Что такое gemset? 98. Что такое Bundler и зачем он? 99. Что такое Gemfile и для чего его используют? 100. За что отвечает каждый из gem`ов? Если знаете нюансы в работе какого-либо из них — обязательно озвучьте. active_admin active_model_serializers bundle audit bcrypt devise jwt cancancan / pundit draper kaminari sidekiq rspec shoulda-matchers faker factory_bot simplecov rubocop (with extensions) pry Ruby on Rails 101. Что такое MVC? Является ли Rails MVC-фреймворком? 102. Что такое миграция? Для чего она нужна? Какие правила создания миграций? 103. Что такое роуты? Что такое resource и resources в роутах? 104. Чем отличается has_many through от has_and_belongs_to_many? 105. Зачем используют concerns? 106. Как работать с sensitive-данными в Rails-приложениях (токены, ключи и т. д.)? Как работает механизм credentials в Rails? 107. С какой целью используют локалы (locals)? Style guide 108. Знакомы ли вы с RoR style guide? Структура файлов в Rails 109. Из чего состоит Rails-приложение? Какая архитектура директорий? Зачем нужна каждая из них? 110. Чем отличается lib от vendor? 111. Как создать background job в Rails? 112. Какие способы загрузки ассоциаций в Rails? Модели и ActiveRecord 113. Зачем нужны модели? Что представляет собою модель? 114. Что такое ORM? Что такое ActiveRecord? 115. Какие есть правила наименования моделей и таблиц в базе данных? 116. Что такое миграции и зачем нужен этот механизм? Как создавать миграции? 117. Какие виды валидаций есть в AR? 118. Как можно вызвать валидацию? Когда валидация вызывается автоматически? Как можно отключить валидацию при сохранении? 119. Что такое callback в Rails? 120. Какие есть виды колбеков в AR? 121. Какие виды ассоциаций есть в AR? 122. Что такое has_one и belongs_to? 123. Что такое has_many? 124. Что такое has_many: through? 125. Что такое has_one: through? 126. Что такое has_and_belongs_to_many? 127. Что такое полиморфная ассоциация? 128. Что такое STI? 129. Каким образом можно получить данные из базы данных? Как получить один объект и коллекцию? Как задать условия выборки? 130. Что такое скоупы? Какова их функция? 131. Як выполнить произвольный SQL-запрос? 132. Как посмотреть информацию о том, как выполнялся запрос, какие использовались ключи и т. п.? Контроллеры 133. Что такое контроллер? Какую задачу выполняет? 134. Что такое action? Что такое CRUD action? 135. Что такое permit params? 136. Что такое ActiveRecord? Как он реализован в Rails-фреймворке? 137. Что такое параметры? Как они попадают в контроллер? Что такое дефолтные параметры (в роутах)? Что такое стронг-параметры? 138. Что такое cookies и зачем они? Где хранятся cookies? Как получить доступ к cookies? 139. Что такое сессии и в чем их задача? Где хранятся сессии? Как получить доступ к сессии? 140. Какие виды фильтров есть в Rails? (Before / after / around actions) 141. Зачем нужен объект Request? Какую информацию он содержит? 142. Для чего нужен объект Response? Какую информацию он содержит? 143. Что такое стриминг? Каким образом можно отдать файл на загрузку (Send_data, send_file)? 144. Что такое Rescue в контроллерах и для чего применяется? 145. Как принудительно включить использование HTTPS-протокола? Маршрутизация 146. Что такое роуты и в чем их функция? 147. Что означает аббревиатура CRUD? 148. Если нужно сделать новый CRUD для определенного ресурса, какие классы вы создадите и какие файлы измените? 149. Что такое ресурсы? 150. Что такое Singular ресурсы и что отличает их от обычных ресурсов? 151. Что делают неймспейсы в роутах? 152. Что такое вложенные ресурсы? 153. Что такое shallow nesting? 154. Что означает RESTful роуты? 155. Что такое нересурсные роуты? 156. Что такое actions в роутах? View 157. Что такое view и для чего он нужен? 158. Что такое layout? Чем отличается от view? 159. Что такое шаблонизатор и с какими шаблонизаторами приходилось работать? 160. Зачем нужен метод render? Что рендерить с его помощью? 161. Как передаются переменные во view? 162. Что такое partial? Когда стоит его применять? 163. Что такое хелпер и зачем его используют? 164. Какие есть хелперы для генерации роутов? 165. Какие есть хелперы для генерации форм? 166. Как создавать собственные хелперы? Интернационализация Rails 167. Что такое i18n? Зачем нужна i18n? Как она устроена в RoR? В каком виде можно хранить переводы? ActionMailer 168. Что такое ActionMailer и какие задачи он решает? AssetsPipeline 169. Что такое AssetsPipeline и какие задачи он выполняет? Инструменты консоли и rake-таски 170. Какие есть консольные команды для работы с RoR? Что такое rake-таски? Безопасность 171. Знаете ли вы какие-то уязвимые места, защиту от которых Rails предоставляет out of the box? 172. Какие атаки могут быть при неправильном использовании сессий? Почему нельзя хранить важные данные в сессиях? 173. Что такое CSRF? Как правильно защититься от CSRF? 174. В чем уязвимость Open Redirect? Как защититься от возможных атак, связанных с Open Redirect? 175. Какие уязвимости связаны с загрузкой файлов? Почему важно фильтровать имена и расширения файлов? Как защититься от опасности? 176. Почему нельзя загружать файлы в каталог, доступный снаружи? Что будет, если злоумышленник загрузит файл с кодом? 177. Какие уязвимости связаны с управлением пользователями (ссылка активации, пароли в чистом виде)? Как защититься? 178. Что такое инъекции и как происходит такая атака? Как их избежать? 179. Как организовать безопасную генерацию приглашений? Что такое deep_munge? Конфигурация 180. Где располагается основная конфигурация программы? 181. Что такое initializers? Зачем они? 182. Что такое окружение? Каково его назначение? 183. Как и где настраивается взаимодействие с базой данных? 184. Как и где настраивается Assets, генераторы, мидлвары, i18n? 185. Можно ли указывать произвольные настройки? Если да, то где и каким образом? Кэширование 186. Что такое кэш и зачем нужен этот механизм? 187. Какие виды кэширования есть в Rails? 188. Где может храниться кэш? 189. Зачем использовать кэширование страниц? 190. Зачем использовать кэширование экшенов? 191. Зачем использовать кэширование фрагментов? 192. Что такое Memcached? 193. Зачем и как реализуется низкоуровневое кэширование? 194. Как и когда кэшируется SQL? 195. Как тестировать кэширования в режиме разработки? Реляционные базы данных Теория реляционных баз данных 196. Что такое СУБД? 197. Что такое реляционная база данных? 198. Что такое нормализация базы данных? 199. Что такое нормальная форма? 200. Сколько есть нормальных форм баз данных? 201. Опишите первые три нормальные формы баз данных. 202. Что такое денормализация баз данных? 203. В чем разница между Primary Key, Foreign Key? Зачем они? 204. Какая разница между LEFT JOIN, INNER JOIN, RIGHT JOIN? 205. Как добавить запись в таблицу без ORM? 206. Как обновить запись в таблице без ORM? 207. Как удалить запись из таблицы без ORM? 208. Как прочитать записи в таблице без ORM? 209. Какие правила группировки данных в таблице вы знаете? SQL 210. Что такое DML (Data Manipulation Language)? 211. Что такое DDL (Data Definition Language)? 212. Что такое DCL (Data Control Language)? 213. Что такое TCL (Transaction Control Language)? 214. Как выбрать данные из нескольких таблиц? Какие виды JOIN вы знаете? 215. Какие агрегированные показатели можно использовать во время выборки из таблицы? 216. Что такое таблица в базе данных? 217. Как создать таблицу? 218. Как выбрать записи из таблицы? 219. Как вставить запись в таблицу? 220. Как изменить запись в таблице? 221. Как удалить запись из таблицы? 222. Как объединить выборку из разных таблиц? 223. Что такое группировка или агрегирование? 224. Каким образом можно задавать условия агрегирования? Индексы баз данных 225. Что такое индексы в базе данных? 226. Для чего нужны индексы? 227. Какие виды индексов существуют? 228. Что такое первичный ключ? 229. Что такое внешний ключ? 230. Что такое составной ключ? Полнотекстовый индекс в базах данных 231. Что такое полнотекстовый поиск и в чем его задача? 232. Что такое полнотекстовый индекс? 233. Что такое ts_vector? 234. Что такое ts_query? PostgreSQL 235. Что такое select distinct и какова его функция? 236. Каким образом можно сортировать результаты выборки? 237. Как ограничить количество результатов выборки? 238. Как проводить поиск по подстрокам? 239. Какие виды объединений (JOIN) есть в PostgreSQL? 240. Что такое подзапросы и в чем их задача? 241. Какие типы данных есть в PostgreSQL? 242. Какие есть виды символьных типов данных? 243. Какие есть виды типов данных для работы с датой и временем? 244. Что такое тип enum? Когда он используется? 245. Как можно создавать таблицы в базе данных? 246. Как изменять структуру таблицы? 247. Как удалять таблицы? 248. Как очистить таблицу? 249. Возможно ли задавать значения по умолчанию для полей? Если да, то как именно? 250. Возможно ли контролировать уникальность значений при вставке? Если да, то каким образом? 251. Что такое функции в PostgreSQL? 252. Какие операторы есть в PostgreSQL? Базы данных NoSQL Redis 253. Что такое Redis и зачем используют этот инструмент? Elasticsearch 254. Что такое Elasticsearch и зачем его используют? Статический анализ кода 255. Что такое Overcommit и зачем нужен? 256. Что такое Danger и для чего используется? 257. Что такое статические анализаторы кода? Зачем их используют? 258. Какие анализаторы для Ruby / Ruby on Rails знаете? 259. Какие статические анализаторы кода для JavaScript знаете? Тестирование 260. Какие виды тестирования знаете? Какие из них вы практиковали при использовании Rails? 261. Какой фреймворк для тестирования используете? 262. Какие показатели качества для своих тестов можете назвать? 263. С помощью какой библиотеки вы контролируете процент покрытия тестами? 264. Расскажите об основах тестирования в Ruby. Что такое RSpec? Какая разница между describe, context и it? 265. Какая разница между юнит-тестами и интеграционными? 266. Что проверяют приёмным тестированием? 267. Что проверяют интеграционным тестированием? 268. Что тестируют в моделях? 269. Что тестируют в контроллерах? 270. Что тестируют в сериалайзерах? 271. Как тестировать API? 272. Как тестировать различные Service Objects? 273. Что такое RSpec? Какие задачи выполняет этот инструмент? 274. В чем разница между let и let! в RSpec? 275. Какие хуки в RSpec знаете? 276. Что выполняется раньше: let! или хук before (:all) ? 277. Что такое Capybara? Какие задачи решает Capybara? 278. Что такое стабы? 279. Что такое моки? 280. Что такое матчер? 281. Какую задачу выполняет гем Shoulda Matchers? 282. Какую задачу выполняет Faker? 283. Зачем нужны Webmock и VCR? Чем они отличаются? 284. Что такое WebKit и PhantomJS? В чем разница между ними? Какие еще есть драйверы? 285. Как работать с базой данных в тестах? Как работает gem database_cleaner? Дополнительные RubyGems и Rails плагины 286. Какую задачу выполняет Devise? 287. Какую задачу выполняет Rake? 288. Какую задачу выполняет Cancancan и Pundit? 289. Какую задачу выполняет Kaminari и Will_paginate? 290. Какую задачу выполняет Carrierwave? 291. Какую задачу выполняет MiniMagick? 292. Какую задачу выполняет Aasm? 293. Какую задачу выполняет ActiveAdmin? 294. Какую задачу выполняет Nokogiri? 295. Какую задачу выполняет Formtastic и SimpleForm? 296. Какую задачу выполняет Omniauth? 297. Какую задачу выполняет Draper? 298. Какую задачу выполняет Faye? 299. Какую задачу выполняет Pusher? 300. Какую задачу выполняет Sidekiq, Resque? 301. Какую задачу выполняет Mongoid? Управление, сервисы и DevOps 302. Что такое SSH? Как и для чего используется? 303. Каким образом можно настроить аутентификацию на хосте без пароля? 304. Какие задачи выполняет Heroku? В чем его особенность? 305. Какие задачи выполняет Digitalocean? 306. Какие задачи выполняет Docker? Мониторинг 307. Какие задачи выполняют Airbrake, DataDog, NewRelic? 308. С какой целью используют Monit? Ruby Web Tools 309. Какие есть веб-серверы, написанные на Ruby? 310. Что такое Sinatra? 311. Что такое API? Для чего используется? Что такое сериалайзеры и зачем они нужны? 312. Что такое клиент-серверная модель? 313. Какая разница между GET- и POST-запросами? 314. Что такое HTTParty и какие задачи он выполняет? 315. Что такое Faraday и какие задачи он выполняет? 316. Что такое Rack? Что такое Rack-application? Что такое Rack middleware? 317. Что такое push-технология? Интеграции 318. Есть ли опыт интеграции с Facebook? Если да, то на каком проекте? 319. Есть ли опыт интеграции с Twitter? Если да, то на каком проекте? 320. Есть ли опыт интеграции с LinkedIn? Если да, то на каком проекте? 321. Есть ли опыт интеграции с Google? Если да, то на каком проекте? Практические задания 322. Описать в ООП-стиле: один из предметов интерьера в контексте конкретного бизнеса. Например, кресло, на котором сидит кандидат, теперь надо продавать в магазине. 323. Написать консольную версию игры «крестики-нолики», где входные данные передаются через gets, а выводят через puts. Два пользователя на одной машине должны иметь возможность сыграть партию. 324. Отсортировать массив. 325. Написать функцию, которая вернет уникальные элементы массива, не используя функцию uniq или set, to_set со стандартной библиотеки. Middle Общее 1. Что такое SOLID? Приведите примеры на каждую из букв. 2. Что такое микросервисная архитектура? Какие плюсы и минусы вы видите во время её использования? 3. Знаете ли вы шаблоны проектирования Singleton / Factory / Facade / Decorator / Template Method / Strategy? 4. Можно ли измерить скорость выполнения алгоритма? Какие факторы влияют на скорость? Какие виды зависимостей вы знаете? 5. Что такое методология Scrum? На каких активностях / встречах может присутствовать / быть полезным Software Developer? 6. Какие инструменты для логирования используете в работе? 7. Какие инструменты для мониторинга веб-приложений используете? 8. С помощью какого/каких инструментов вы деплоили приложения на staging / production? Опишите процесс. 9. Если один из ендпоинтов в приложении отрабатывает очень долго, что делать, чтобы улучшить скорость? 10. Чем отличается библиотека от фреймворка? 11. Что такое трехзвенная архитектура? Зачем и когда ее используют? Приведите примеры. 12. Что такое кэширование? Зачем и когда его используют? Приведите примеры. 13. Что такое функциональное разделение? Зачем и когда его используют? Приведите примеры. 14. Что такое Comet-сервер? Зачем и когда его используют? Приведите примеры. 15. Что такое денормализация? Зачем и когда ее используют? Приведите примеры. 16. Что такое деградация функциональности? Зачем она и в каких случаях используется? Приведите примеры. 17. Что такое сервис-ориентированная архитектура? Зачем и когда ее используют? Приведите примеры. 18. Что такое монолитное приложение? Зачем и когда его используют? Приведите примеры. 19. Что такое асинхронная обработка? Зачем и когда ее применяют? Приведите примеры. 20. Что такое ленивые вычисления? Зачем и когда их используют? Приведите примеры. Предметно-ориентированное проектирование 21. Что такое DDD? В чем преимущества перед классическим MVC? 22. Что такое домен? 23. Что такое модель? 24. Что такое контекст? 25. Что такое сущность? 26. Что такое value object? 27. Что такое агрегирование? Git и code review 28. Что делают команды cherry-pick, log, stash, reset, squash? 29. Что такое Gitflow? Какие правила использования Git на вашем прошлом проекте? 30. Каких правил именования комитов / ветвей / Pull Request`ов вы придерживаетесь? 31. На что обращаете внимание при code review? 32. Что бы вы могли назвать плохо проведенным code review? Базы данных 33. Для чего нужны индексы? 34. Какие есть виды индексов? 35. Ускоряют ли индексы все операции с базами? 36. Что такое DB view? 37. Чем отличаются materialized db view от non-materialized db view? 38. Как можно сохранить данные в различные таблицы и гарантировать, что все они или запишутся, или нет? 39. Можно ли строить индексы по нескольким полям? Важен ли порядок этих полей в индексе? 40. Какие вы знаете constraints при создании столбцов? 41. В чем разница между SQL и NoSQL базами данных? 42. Как бы вы импортировали большие массивы данных в БД (1-2 миллиона строк в CSV-файл)? 43. Что такое N+1 и как избегать? Реляционные базы данных 44. Какие различия между джоинами FULL OUTER JOIN, CROSS JOIN, NATURAL JOIN, INTERSECT и EXPECT? 45. Какие специфические типы данных есть в PostgreSQL? 46. Что такое view? С какой целью используется? 47. Что такое materialized view? 48. Что такое recursive view? 49. Что такое хранимая процедура и зачем она нужна? 50. Что такое партиционирование и какую проблему оно решает? 51. Умеете ли вы работать с чистыми SQL-запросами? 52. Каким образом можно работать с геолокацией в PostgreSQL? 53. Какие способы резервного копирования данных? Что такое pg_dump? В каком виде можно создавать резервные копии? NoSQL базы данных Redis 54. Что такое Redis? Какие задачи он выполняет? 55. Какие типы данных есть в Redis и для чего нужен каждый из них? 56. Что такое pub / sub? 57. Что такое транзакции? 58. Что такое mass insertion? 59. Что такое партиционирование? 60. Умеете ли работать с Redis в консоли? 61. Умеете ли настраивать Redis? Elasticsearch 62. Что такое Elasticsearch и какие задачи он выполняет? 63. Что такое кластер? 64. Что такое нода? 65. Что такое индекс? 66. Что такое тип? 67. Что такое документ? 68. Что такое шарды и реплики? 69. Что такое Query DSL? 70. Что такое мапинг? Статический анализ кода 71. Что такое overcommit и зачем нужна эта утилита? 72. Что такое danger и для чего используют эту утилиту? 73. Какую задачу выполняет каждый из нижеперечисленных гемов? Rubocop; Reek; Rails Best Practices; Brakeman; RubyCritic; SimpleCov; Bundle Audit; Bundle Leak; Traceroute. 74. Какие задачи выполняет каждый из нижеперечисленных модулей? Eslint; Stylelint; Prettier. Ruby 75. Какие проблемы в Ruby (как в языке программирования) вы видите? Какие, по вашему мнению, нужно решать как можно быстрее? 76. Какими библиотеками, кроме фреймворка Rails, пользовались для создания структуры проекта? 77. Как можно в Ruby запросить сторонний API? Какой встроенный класс позволяет это сделать? 78. Что такое Thread? Чем он отличается от Process? 79. Есть ли в Ruby возможность создать абстрактный класс? Есть ли способ искусственно создать абстрактный класс? 80. Есть ли в Ruby возможность множественного наследования? Есть ли способ искусственно заменить множественное наследование? 81. Назвать максимально точный путь поиска методов в Ruby 82. Какие минусы использования method_missing знаете? 83. Можно ли узнать идентификатор объекта в памяти, если да, то каким образом? 84. Какие виды enumerator для массива вы знаете? 85. Что такое мемоизация методов? Зачем ее используют? 86. С помощью какого хука можно посчитать количество потомков определенного класса? 87. В чем разница запуска rspec и bundle exec rspec? 88. Создавали ли вы гем в Ruby? Какая механика / последовательность действий для создания гема? 89. Что такое Rack middleware? 90. Есть такой код:             users = User.where (id: [1,3,4])             users.where (name: "Alex")             users.inspect После какой строчки кода ActiveRecord выполняет запрос в базу? Ruby on Rails 91. Что такое ActiveSupport? Зачем нужен? Какие задачи выполняет? Приведите пример методов, которые добавляет ActiveSupport. 92. Что такое Action Cable? Зачем используют этот фреймворк? 93. Как создать функциональность для отправки имейла в Rails-приложении? 94. Какие библиотеки для background jobs использовали? Какая механика работы таких библиотек? 95. Какие и виды кэша в Rails знаете? Где можно хранить кэш? 96. Какие библиотеки / подходы для создания API документации знаете / используете? 97. Что такое Swagger? Какие преимущества создания API документации в Swagger-формате? 98. Что такое Query Objects? Когда и как их можно использовать? 99. Что такое Decorators? Когда и как их можно использовать? 100. Что такое Form Objects / Contract? Когда и как их можно использовать? 101. Где и как вы рекомендуете держать бизнес-логику в Rails-приложении? 102. Что такое JSON API формат? Использовали ли вы библиотеки для сериализации объектов в JSON API формате? Тестирование 103. Работали ли вы с feature-тестами? Что такое capybara? 104. Что такое TDD? Какие преимущества / недостатки использования TDD-подхода видите? 105. Что такое BDD? В чем отличие между TDD и BDD? 106. Что может быть причиной того, что тесты на проекте выполняются очень долго? 107. Что такое принцип тестирования FIRST? 108. Как порекомендуете писать тесты на код, в котором посылается запрос на сторонний сервис (API)? 109. Какие инструменты помогают контролировать качество тестов? 110. Какие составляющие response`a вы тестируете, когда пишете тест на определенный эндпоинт? 111. Является ли 100% code coverage на проекте залогом низкой вероятности что-то «сломать» во время багфиксинга / имплементации новой функциональности? Объясните свой ответ. Управления, сервисы и DevOps 112. Опишите CI / CD-подход на своем последнем проекте? Как бы вы его изменили? 113. Какие в целом Continuous strategies знаете? Чем отличается Continuous Deployment от Continuous Delivery? 114. Что такое Docker? Чем отличается Docker от виртуальной машины? 115. Для чего используют docker-compose? 116. Умеете ли вы работать с Docker? 117. Что такое image в Docker? Как работать с ним в Docker? 118. Что такое container в Docker? Как работать с контейнерами? Как запускать и останавливать контейнеры? Как узнать список рабочих контейнеров? 119. Что такое Docker Daemon? 120. Что такое Docker Client? 121. Что такое Docker Hub? 122. Что такое Docker Compose? Практические задания 123. Написать клиент для открытого API ресурса с использованием только низкоуровневых библиотек: Net::HTTP, HTTP.rb, Faraday, etc. 124. Как бы вы посчитали количество пассажиров, которые заходят или выходят на определенной станции метро? 125. Посчитать количество автомобилей в пробке. 126. Организовать автомобильную стоянку. 127. Написать функцию, которая вернет уникальные элементы массива, не используя uniq или set, to_set со стандартной библиотеки. Ожидается вариант с применением хеш-таблицы, где ключами будут уникальные элементы из массива, а значениями true. Senior Общие вопросы 1. Опишите основные способы аутентификации в API. 2. Назовите основные принципы построения REST API. 3. Вам нужно спроектировать API, какие основные вопросы будете задавать клиенту? 4. Какие основные преимущества и недостатки монолитной архитектуры? 5. Какие основные преимущества и недостатки микросервисной архитектуры? 6. Что такое SOLID? Какие из принципов, по вашему мнению, чаще всего нарушаются, какие являются наиболее критичными? 7. Опишите Singleton-паттерн. Где и когда вы его использовали? 8. Опишите принцип работы DNS? 9. Что такое code smells? Каковы основные признаки плохого кода? 10. Что такое reverse proxy, для чего он нужен? 11. Что такое load balancer, основные разновидности? 12. Что такое MVC и как не попасть с ним в беду? 13. Опишите процесс обработки HTTP-запроса на примере любого веб-фреймворка в Ruby (Rails, Hanami, Sinatra, Roda, etc). 14. Чем отличается refactoring от оптимизации? Как и когда нужно выполнять каждый из вышеназванных процессов? 15. Знаете ли вы GraphQL? Какие плюсы и минусы вы видите по сравнению с REST? 16. Что такое multi-tenant architecture? Когда рекомендуете ее использовать? 17. Чем отличается понятие Dependency Inversion от Dependency Injection и от Inversion of Control? 18. Что такое GDPR? Назовите правила, которые использовали, чтобы быть GDPR compliant? Метапрограммирование и DSL 19. Параллельное выполнения кода через Thread, Fiber, Ractor. Объясните на примерах. 20. Дизайн-паттерны: Service, Form, Value, Policy, Guard, etc. Объясните на примерах. 21. Расскажите об архитектурных паттернах: Monolith, Microservices, Distributed app, etc. 22. Как организовать бизнес-логику, когда в проект уже 1000+ бизнес-операций? 23. Что такое Sidekiq? Как правильно организовывать очереди? 24. Расскажите об оптимизации быстродействия через benchmark, lineprof и flamegraph. 25. Работали ли вы с Garbage collector? Расскажите. 26. Расскажите о собственных примерах решений, которыми гордитесь и почему. Ruby / Rails 27. Что такое Thread? Какие особенности использования тредов в разработке? 28. Что такое Process? Какие особенности использования процессов в разработке? 29. Что такое Mutex? Приведите примеры использования мьютексов в разработке? 30. Если нужно определить, сколько выполняется тот или иной код, как порекомендуете это сделать? 31. Какие недостатки видите в Ruby? Когда и как они могут себя проявить во время разработки? 32. Можно ли передать контекст выполнения одного метода в другой метод? Если да, то как это сделать? 33. Какие callback-s знаете в Ruby? 34. Как реализовать Singlethon-класс Ruby? Опишите базовые концепты. 35. Как работает Garbage collection в Ruby? Опишите базовые концепты. 36. Что такое Ractor? Какая разница между классической моделью работы с тред и работой с помощью Ractor? 37. Как работают Lazy Enumerators? Чем они отличаются от классических Enumerators? Как и когда они могут помочь? 38. Назвать примеры использования Fiber`ов 39. Как include добавляет метод модуля в класс? Что происходит на уровне MRI? В чем разница по сравнению с extend и prepend? 40. У вас есть задача импортировать пользователей в базу Rails-приложения. Пользователи записаны в CSV-файле, где каждая строка - это данные. Опишите ваш подход к решению проблемы. Как изменится решение, если файл станет очень большим (> 300000 строк)? 41. Если в модели User у вас есть callback, то какие могут возникнуть проблемы при решении предыдущей задачи? 42. Как мы можем отслеживать прогресс Background Job? 43. Опишите жизненный цикл Request - Response в Rails. Через какие основные компоненты фреймворка проходит запрос и для чего они нужны? 44. Какие основные типы тестов используете и с какой целью? 45. Как вы относитесь к интеграционным тестам? 46. Что такое полиморфные ассоциации в ActiveRecord? 47. Как бы вы порекомендовали построить semantic versioning для Rails API, работающего с мобильными приложениями (iOS, Android, Web)? Поверхностно опишите стратегию. 48. Если необходимо, чтобы каждый запрос, пришедший к Rails app независимо от роута, возвращал 403 статус как можно быстрее, как бы вы порекомендовали реализовать код для этой задачи? 49. Какие, по вашему мнению, пять основных минусов Rails? Что бы вы порекомендовали изменить, чтобы нейтрализовать эти минусы? 50. Можно ли в Rails работать с несколькими базами, если да, то как это сделать? Базы данных 51. Что такое транзакция? Какие основные свойства транзакций? 52. Что такое database lock и чем он отличается от транзакций? 53. Что такое Pessimistic и Optimistic locking? 54. У нас есть таблица Users. Мы добавили к ней индекс в трех полях: first_name, last_name, email. Именно в таком порядке. Теперь делаем запрос SELECT * FROM users WHERE first_name = "Alex" AND email = "<a href="mailto:test@mail.com"> test@mail.com </a>". Поможет ли нам индекс ускорить такой запрос, и почему? 55. Что такое Database View? Какие виды есть? 56. Что такое Database trigger? 57. Что такое партицирование? Опишите кейсы, когда партицирование было бы полезным? 58. Поверхностно опишите шаги для реализации партицирования на примере любой СУБД. 59. Что такое триггеры? Как и когда их можно использовать? Какие плюсы и минусы вы видите в сравнении с тем, чтобы использовать триггеры / колбеки на уровне бэкенд? 60. Что такое WAL? Какую роль он играет? 61. Была ли у вас возможность / необходимость использовать шардинг? Чем отличается шардинг от партицирования? 62. Опишите принципы, преимущества и недостатки работы с primary / secondary (master / slave) репликацией? 63. Знакомы ли вы с CAP-теоремой? Если да, объясните основную идею. 64. Знаете ли вы ACID? Как вы понимаете букву "I" в этой аббревиатуре? 65. Представьте ситуацию, когда ваш сервер, на котором размещен redis, по неизвестным причинам перезапустился. Что рекомендуете сделать заранее, чтобы такие ситуации не нанесли большой вред? Тестирование 66. Знаете ли вы, что такое Load Testing? Чем может помочь разработчик при Load Testing? 67. Какие инструменты используют для того, чтобы собрать как можно больше метрик при Load Testing? 68. Какие подходы вы бы порекомендовали использовать, чтобы ускорить тесты на CI? 69. Как внедрить процесс написания тестов, если проект (Rails API) их совсем не имеет? Практические задания 70. Написать реализацию структуры данных Set. Объяснить алгоритмическую сложность добавления элементов к сету. 71. Спроектировать реферальную систему (то есть, пользователь может пригласить других пользователей, которые становятся его рефералами, они приглашают своих рефералов, и так формируется древовидная структура). Есть модель: class Users <ActiveRecord :: Base             end Как бы вы связали ее с рефералами? 72. Добавьте метод: class Users <ActiveRecord :: Base             end который возвращает рефералы пользователя поуровнево. Например, user имеет рефералы user1, user2. user1 имеет реферала user3, user2 имеет рефералов user4 и user5. Должны получить результат: {0 => [user]             1 => [user1, user2],             2 => [user3, user4, user5} Спасибо за вопросы Денису Земляному, Николаю Воронину, Сергею Гнилицкому, Владимиру Свередюку, Михаилу Одинюку, Виктору Нову, Александру Шестопалу, Андрею Зеленцу, Кириллу Шевченко, Виктору Новицкому.
Топ-5 лучших фреймворков для Python-разработчиков

Автор: Редакция ITVDN

Сейчас трудно представить себе любого девелопера без использования фреймворков. Здесь вы найдёте 5 лучших и наиболее признанных фреймворков для Python-разработчиков. Что такое framework? Говоря простым языком, фреймворк — набор инструментов для программиста. Фреймворк существенно упрощает разработку за счёт готовых решений и чётко выделенной структуры разработки приложений, сайтов. При использовании фреймворка вы значительно сэкономите себе время, ведь вам не придётся тратить его на решение рутинных задач программирования. Вместо этого вы сможете уделить внимание непосредственно разработке, сократив потраченное время с нескольких недель до пары дней. При использовании framework’a вы будете совершать меньше ошибок из-за невнимательности, и ваш синтаксис станет лучше. Кроме того, каждый framework оснащён собственной системой безопасности, которая защитит вас от случайной поломки программы. Большинство фреймворков являются бесплатными и имеют открытый код, хотя некоторые придётся покупать. Представляем вашему вниманию 5 лучших фреймворков для разработки на Python. Django «Классический» Python-framework, Django серьезно упрощает разработку за счёт большого количества доступных функций и паттернов. Имеет открытый код и предлагает большое количество возможных решений. Django относится к так называемым full-stack фреймворкам, которые универсальны и содержат все стандартные функции и шаблоны. К ним относится: аутентификация, маршрутизация, миграция баз данных, ORM и прочие. Django можно использовать для администрирования содержимого сайтов, аутентификации, RSS. Он отлично подойдёт для создания сайтов. Фреймворк работает с основными БД: MySQL, SQLite, PostgreSQ, Oracle. При необходимости можно установить специальные драйверы для подключения других баз данных. В целом этот фреймворк можно считать универсальным для Python-разработчиков. Он имеет большую базу шаблонов и на ура справляется со стандартными задачами, а также может помочь в решении нестандартных. Имеет полностью переведённую на русский язык техническую документацию. С хорошим переводом. Flask Платный мини-фреймворк, который предоставляет прочную основу для создания веб-приложений. Вмещается в один файл и легко устанавливается, пригодится в создании мелких и средних проектов, но не подойдёт для крупных из-за недостатка шаблонов и готовых решений. Предоставляет готовые шаблоны для маршрутизации, поддержку безопасных кукисов, WSGI 1.0. Имеет встроенный дебаггер и сервер для HTTP-разработки. Сервер поддерживает fapws3, GAEM, CherryPy, BJoem. Pyramid Бесплатный фреймворк типа «всё включено», разработан для приложений на основе Питона. Универсален и подойдёт как для создания небольших, так и больших проектов. Легок в установке, понятен, не тормозит. Имеет минималистичный дизайн. Имеет большое количество готовых шаблонов, в основном рассчитанных на разработчиков API. Умеет генерировать URL, помогает при аутентификации и авторизации пользователей, удобен для создания однофайловых приложений. Отлично подходит для тестирования и отладки. Twisted Создан для решения специальных задач сетевых разработчиков.  Быстр, бесплатен, сокращает время разработки сервисов в несколько раз. Создан на базе Deferred, которая упрощает обслуживание сетевых запросов и обработку ошибок.  Одно из главных оружий сетевого разработчика. Не подойдёт для разработки типичных веб-приложений из-за своих шаблонов и структуры. Twisted используется для разработки небольших асинхронных программ. Поддерживает большинство сетевых форматов: TCP, UDP, SSL/TLS, Domain sockets; умеет работать с сетевыми протоколами: HTTP, NNTP, XMPP, IMAP, IRC, FTP, SSH и прочими. Ещё больше модулей и форматов можно подключить с помощью драйверов. Имеет дополнительные структуры: Unit test (с поддержкой системы Deferred), Processor pools и т.д. Tornado Асинхронный фреймворк и одновременно сетевая библиотека по типу Twisted. Справляется с классической проблемой С10k (то есть может обрабатывать свыше 10 000 поступающих сетевых запросов). Представляет из себя солянку из Django, Flask и Twisted, но при этом быстрее их. Имеет встроенные шаблоны для аутентификации и авторизации, с поддержкой внедрения других шаблонов (например, Google), не блокирующийся HTTP-клиент.  Справляется с длинными запросами (long polling’ами), имеет поддержку web-сокетов. Используется разработчиками, которые создают масштабные сетевые приложения с большой нагрузкой и высокими требованиями к производительности. Каждый год количество новых фреймворков постоянно растёт, но некоторые из них уже несколько лет держатся на плаву, периодически изменяясь. Эти пять уже признаны чуть ли не классикой, и начать изучение мира фреймворков стоит именно с них. Потом вы сможете перейти на более специфические, предназначенные для решения определённых задач. Если вы изучаете программирование на Python и хотите освоить самые популярные фреймворки, смотрите видеоуроки ITVDN для Python-разработчиков, а также смотрите записи вебинаров на YouTube канале ITVDN.
HTML 5.2 is done, HTML 5.3 is coming

Автор: Charles McCathie Nevile

На сегодняшний день W3C уже выпустило релиз 5.2. Это второй пересмотр HTML 5, который идет сразу за HTML 5.1, увидевшего свет в прошлом году. В 2014 году мы выразили желание устраивать «ревизию» HTML каждый год. Что же, похоже, наше желание было услышано. Эта статья представляет из себя что-то наподобие обновленного мануала о том, что такое HTML. В прошлом году мы серьезно пересмотрели спецификацию. Мы ввели некоторые новые фичи и убрали то, что на данный момент не является частью современной веб-платформы (или то, что никогда не получало широкой гласности). Как всегда, мы также исправили некоторые замеченные баги спецификации, убедившись, что материал точно соответствует современному изменчивому веб-миру. Было внедрено множество различных фичей. Благодаря Payment Request API процесс ведения коммерции в вебе стал значительно проще и позволил снизить риски, связанные с возможными ошибками в виде багов или невнимательностью оператора. Новые функции защиты, такие как Content Security Policy, защищают пользователей более эффективно, в то время как работа, проделанная в ARIA, помогает разработчикам создавать качественный функционал веб-сайтов специально для людей с ограниченными возможностями. HTML 5.2 делает проверенную систему плагинов устаревшей. Новые технологии или возможности, такие как виртуальная реальность или скоростная передача, теперь разрабатываются как часть веб-платформы. Подобный подход позволяет обеспечить лучший контроль за системой безопасности, часто снижая стоимость разработки, и позволяет больше обращать внимание на создание сервисов, нежели на выбор платформы. Новая документация и исправление багов подняли HTML на новый уровень. Обозначение main – элемента было улучшено для поддержки современных паттернов дизайна, элемент style теперь может быть использован внутри блока body. Численные ограничения на код были упразднены, в то время как некоторые для обеспечения лучшей безопасности наоборот – усилены. Теперь браузеры предоставляют лучшую поддержку для интернациональных email-адресов и позволяют людям писать письма на тех языках, которые они используют в повседневной жизни. И это только несколько красноречивых примеров касательно того, как W3C улучшила HTML, дабы отображать запросы современного веб-рынка. Также существует ещё много изменений, больших и маленьких, в этом обновлении. Вместе с этим обновлением мы передаем привет некоторым членам нашей команды, таким как Стив Фолкнер и Тревис Ляйтред, выступивших редакторами HTML 5.0, Аррон Айхольц – разработчикам новой кодовой структуры HTML 5.1. И также Алексу Данилу. Их вклад был воистину важным, и их усилия послужили строительным фундаментом для всех тех, кто продолжил совершенствовать спецификацию разметки HTML. Также обратите свое внимание на First Public Working Draft HTML 5.3. Это была часть наших планов по созданию новой HTML-рекомендации в 2018 году. Кроме того, некоторые наши планы претерпели изменения, потому что мы стараемся отслеживать, нужно ли что-то изменить \ дополнить в спецификации согласно современным требованиям или нет. Мы стараемся улучшать работу с интернациональными особенностями, доступностью спецификации и учитываем все пожелания сообщества. Сангван Мун продолжает работать как редактор. Кроме того, нашу команду пополнили такие люди, как Брюс Левсон, Патриция Аас, Шветанк Дихит, Ттеренс Еден и Ксяоиян Ву. Еще раз спасибо Стиву Фолкнеру за то, что остается с нами и работает над новыми версиями спецификации. Для нас честь иметь настолько интернациональную команду, и мы верим, что их профессионализм принесет свои плоды. И хотя всегда есть гора достаточно монотонной работы по поддержке технологии, я верю, что этот год будет воистину годом HTML. Веб представляет из себя платформу для каждого, и то, что наша команда объединяет специалистов из великого множества стран, является свидетельством того, что наша работа не напрасна и мы вносим вклад в общее дело веб-разработки. Мы внимательно следим за обновлениями HTML и рады будем сообщать вам наиболее актуальную информацию. Автор перевода: Евгений Лукашук Оригинал статьи
Что нового в Angular 5

Автор: Дмитрий Охрименко

Переход от AngularJS к Angular 2 был огромным шагом вперед. При этом изменилось абсолютно все, без обратной совместимости. В то же время, Angular 4 добавила новые возможности, но при этом была обратно совместимой с Angular 2 (Версия Angular 3 была пропущена из-за @angular/router, который на момент релиза был 3.x, в то время как остальные пакеты 2.x. Для того, чтобы избежать путаницы и перевести все пакеты к одной версии, третья версия была пропущена). Angular 5 - это следующее обновление, в котором изменения затронули механизмы, работающие «под капотом». Многие пользователи ITVDN задают вопрос об актуальности учебных программ видеокурса Angular Essential, который записан с использованием версии 2 и видеокурса Angular Advanced (версия 4). Angular 5 не является чем-то абсолютно новым, это улучшение существующего Фреймворка. Чтобы понять и начать использовать возможности, которые появились в пятой версии, необходимо знать основы, которые не изменились, начиная со второй версии. Что нового в Angular 5? Улучшенный компилятор. В Angular 4 компилятор перекомпилировал все файлы при каждом изменении. В Angular 5 компилятор работает только с теми файлами, в которых есть изменения, а это значит, что время на компиляцию проекта в целом значительно снизилось. Оптимизированная сборка. В Angular CLI при использовании production build совместно с версией Angular 5 по умолчанию будет применяться build optimizer, который с помощью семантического анализа кода приложения сможет значительно уменьшить его размер. Акцент на упрощение разработки PWA (Progressive Web Apps). PWA - это приложения, которые объединяют в себе лучшее, что есть в веб-приложениях и лучшее, что есть в мобильных приложениях. PWA работают независимо от выбранного браузера; адаптируются под устройство - десктоп, планшет, телефон; могут работать без подключения к Интернет или при перебоях со связью; выглядят как приложение, установленное на устройство; благодаря Service Worker содержат актуальную обновленную информацию; являются безопасными, так как работают через HTTPS; используют возможности, подобные push уведомлениям; Installable – позволяют пользователю добавить приложение на домашний экран устройства. Поддержка TypeScript 2.4. Angular 5 поддерживает версию TypeScript 2.4, что дает возможность использовать новые возможности TS: перечисления, основанные на строках, улучшения проверки типов при работе с generic-типами, week-type-detection и прочее https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-4.html Pipes, адаптированные под локализацию. Обновленные Pipes для Date, Currency, Number и Percent, нет необходимости использовать i18n. https://github.com/angular/angular/blob/master/CHANGELOG.md#i18n-pipes Новые события Router. Используя события ActivationStart и ActivationEnd или ChildActivationStart и ChildActivationEnd, можно организовать отображения индикаторов загрузки при смене маршрута. HttpClient. Новый HttpClient был добавлен в версии 4.3, старый http клиент помечен как depreceted в новой версии. В Angular 6 старый клиент будет удален. Из преимуществ нового клиента можно выделить самостоятельное извлечение JSON без необходимости явного применения метода map и возможность применять interceptors. https://angular.io/guide/http Валидация форм. Теперь при работе с формами, c помощью свойства updateOn, можно определить, в какой момент будет происходить проверка – на событие blur или submit (вместо проверки на каждое событие input). Замена ReflectiveInjector на StaticInjector. Изменен механизм для внедрения зависимостей. Для нового StaticInjector не нужен полифил Reflect (но при использовании JIT данные полифил все равно нужно будет использовать), что может уменьшить размер приложения. Angular CLI 1.5 использует Angular версии 5. Улучшение NgZone. NgZone стала еще быстрее, также библиотеку можно отключить для применения другой библиотеки для улучшения производительности. Улучшенный RxJS. Поддержка обновлена до версии 5.5.2 и выше. Поддержка новых pipable operators https://github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md Angular 5 получился компактней и быстрее, чем его предшественники, и не обошелся без новых возможностей. Запуск следующей версии Angular планируется на 28 марта 2018 года. Будем ждать улучшений и новых возможностей от команды Angular.
5 ошибок разработчиков, разрушающих их карьеру

Автор: Редакция ITVDN

Это действительно пугающая мысль. Ведь сегодня Вы работаете, выполняете задания, развиваетесь, а завтра вас «попросят»? Словно ваш труд не имел никакого значения. Как же это могло произойти? Что пошло не так? Разработчики проходят через это каждый день. Большинство разработчиков ничего не украли у своих работодателей, они не сделали ничего неэтичного, они были приятными и дружелюбными. Когда их просили о помощи, они всегда шли навстречу. Так чего еще хочет работодатель?! Как оказалось, намного больше. И вот разработчики уволены. Никто не указал им на конкретные ошибки, которые им нужно было бы избежать. Поэтому большинство продолжает совершать те же самые ошибки, сжигая мосты и разрушая свою карьеру. Совершаете ли вы какие-либо из этих ошибок? 1. Доверять своим клиентам, чтобы понять их потребности При разработке приложения ваши клиенты (читайте ваш работодатель) редко начинают с четкого представления о том, что им нужно. Все расплывчато и неясно. Как вам известно, именно с этого и начинается большинство приложений, проектов и идей. Вы можете не знать, что вашему клиенту нужен особый подарок – им нужно понимание. Поэтому вам необходимо сделать выбор. Каким разработчиком вы собираетесь стать? Вы Исполнитель, который просто делает то, что ему говорят? Или вы являетесь Незаменимым консультантом, на которого полагается ваша команда? Потому что Исполнители заменяемы. Работодатели находят разработчика, который может выполнять работу. Они говорят ему, чего хотят, и разработчик делает это. Простая формула, да? Пока ваш клиент не найдет кого-то еще. Того, кто может сделать то же самое, но быстрее и за меньшие деньги. Неудивительно, что большинство разработчиков программного обеспечения становятся неконкурентоспособными к моменту, когда они достигают 40 лет. Может быть, работодатели думают, что это дело для молодых Или что люди старше 40 лет устарели Возможно, эти разработчики не знакомы с новой технологией Слишком много разработчиков являются простыми Исполнителями. Если вы Исполнитель – причина увольнения не имеет значения. В какой-то момент вашей карьеры вы просто будете навсегда заменены. С другой стороны, незаменимыми консультантами являются... Незаменяемые. Такие разработчики дают своим клиентам понимание, в котором те нуждаются. Когда проект на старте, такие разработчики стремятся вникнуть в суть. Они спрашивают о пользователях и особенностях, которые клиенты хотят видеть в проекте, спрашивают об их мотивации, обо всем, что только может прийти в голову. Такие разработчики ценятся везде, где бы они ни находились. Они рок-звезды на работе Или они вносят свой вклад в сообщество с открытым исходным кодом Часто они учат и обучают других Куда бы они ни пошли, они отдают и помогают другим. Такое отношение создает огромный контраст между ними и их коллегами, которые являются простыми исполнителями. Они делают других лучше. Делают отрасль чуть-чуть лучше. Это невозможно игнорировать. Их отдача становится их секретным оружием. Когда они оказывают помощь, они доносят информацию другим о том, что: Они эксперты. Они знают, о чем они говорят. Другие признают их компетентность. Если разработчик Незаменимый, тогда он – звезда. Если вы именно такой, тогда ваша ценность стремительно растет. А теперь лучшая часть – любой разработчик, каждый разработчик, может быть Незаменимым консультантом. 2. Не доверять своим клиентам, чтобы понять его потребности. Я только что сказал, что доверять клиентам – это плохая идея. Теперь я говорю, что и не доверять им – это ошибка? Дело в том, что все вопросы за пределами основной работы разработчика – бизнес в целом, продажи, стратегия, маркетинг – это сферы, в которых он должен полагаться на своего клиента (то есть вашего работодателя). Есть 2 типа реакции разработчиков при возникновении таких вопросов. Первый – это определенная степень апатии и равнодушия. Как только возникает незнакомая тема, такие разработчики тушуются или отключаются. Такое отношение говорит прямо: мне все равно. Второй – это знатоки. Есть разработчики, которые «думают», что разбираются абсолютно во всех вопросах. Они не хотят учиться у тех, кого они считают «ниже» своего уровня, или же делают это неправильно. Оба таких разработчика не понимают один важный нюанс. Люди вокруг вас могут почувствовать такое отношение. Вместо ценного вклада они получают апатию или презрение. Они мысленно замечают это и в дальнейшем будут действовать соответственно. Откуда я знаю, что я прав? От вас. Вы принимаете к сведению такое же отношение и к себе. Сколько раз вы рекомендовали приятеля или друга для проекта? Сколько из ваших друзей устроились на работу по вашим рекомендациям или при вашей помощи? Как часто вы замечаете «того» сотрудника, который отказывается документировать свою работу? Понимаете, о чем я? У вас есть стандарты. Как есть они и у других. Разработчики «Рок-звезды» задают вопросы. Они проявляют инициативу. Они работают, чтобы понять, как могут помочь остальным (в управлении, финансах, маркетинге и т.д.). У таких разработчиков есть глубокое понимание того, как их работа затрагивает всех остальных. Это редкое, но невероятно ценное качество. 3. Использование фразы «это невозможно сделать» как запасной вариант Написание кода, по своей сути, является решением проблемы. Вы это уже знаете. Как и все остальные. Как разработчик, вы всегда спасаете ситуацию и превращаете идеи других в настоящую реальность. Разработчики -  буквально инженеры будущего. Поэтому, когда не-разработчик слышит фразу «это невозможно сделать», он не верит вам. Да и почему он должен поверить? Ведь снова и снова вы делали невозможное возможным. Раньше вы всегда находили способ выполнить работу. Вы обыскивали форумы, тестировали открытый исходный код, отправляли вопросы на Stack Overflow – вы делали все, что нужно было делать. И пока вы не сдавались, вы побеждали. Когда не-разработчик слышит «это невозможно сделать», то в действительности он слышит: «Я не хочу». Ничто не раздражает так не-разработчика больше, чем слова: «это невозможно». Почему? Потому что это звучит так, будто Вы даже не хотите попробовать. Поэтому сначала коллеги просят вас найти способ. Потому что они верят в вас. Конечно, иногда это раздражает. Это расстраивает, когда на вас бросают задачи и ожидают, что все будет сделано. Они думают, что все очень легко и просто. Вы же знаете, что это не так. Ваши коллеги, как дети - они не знают, как это работает, просто вы волшебник, который делает зрелищные вещи. И они любят Вас за это. Некоторые вещи действительно невозможны. Вся проблема в том, как сообщить о реальной невозможности. Вы обращаетесь к не-разработчику, гневаясь? Ворча и жалуясь за спиной? Распространяя плохое отношение вокруг? Или, как разработчик, вы ищите компромисс? Вы предупреждаете их о негативных последствиях, которые связаны с тем, чего они хотят, и предлагаете решение? 4. Снисходительность и презрение «Я ненавижу маркетинг». «Менеджеры глупые». «Продавцы хуже всех». «Мой босс-идиот снова просит меня сделать что-то глупое». Вы когда-нибудь думали подобным образом? Я знаю, что да, потому что я думал. Это совершенно естественно. На самом деле, многие люди так думают. Если Вы являетесь частью какой-то подгруппы, скорее всего, вы тоже так думаете. В нашей культуре это даже поощряется. Богатые против бедных Разработчики vs маркетологи Фриланс vs клиенты Люди, с которыми мы взаимодействуем, не являются частью нашей группы разработчиков? Они чувствуют и знают, как мы на самом деле относимся к ним. Вот почему это проблема. Вы и ваши коллеги должны быть в одной команде, только в этом случае не появляются «мы» и «они». Невидимые барьеры, которые делят вашу команду. Политика и борьба за влияние становятся нормой, поскольку каждый борется за свою работу. Бонусы, рост и стимулы начинают исчезать. Отношение, от которого веет снисходительностью и презрением, делает две вещи. Это отдаляет Вас от других людей. Вы становитесь «тем человеком», с которым ужасно работать. Это медленно душит существующие отношения. Друзьям становится все труднее защищать вас, общение с вами начинает негативно сказываться на ваших коллегах. Они ничего не скажут напрямую – просто будут молча отдаляться. Как только вы потеряете друзей и союзников, все начнет рушится, пока в конце концов вы не уйдете с работы. 5. Ложные обещания и незавершенная работа «Я сделал». «Получилось вроде неплохо». Вероятно, вы и сами получали подобные обещания и ответы. Вы знаете, что «это сделано» может не отвечать действительности. Это распространенная ошибка. Разработчик сообщает своему менеджеру, что команда закончила свою работу. "Все работает!" И менеджер делает то, что делают большинство хороших менеджеров. Он доверяет им и готовится проверить их работу. Или, в некоторых случаях, он не выполняет проверку. Заведомо плохая идея, но он доверяет своим разработчикам. Он верит в них, поэтому рискует. Потому что его боссы дышат ему в затылок. Может быть, его работа на очереди или покупатель настаивает на доставке. Все, что угодно. Как бы то ни было, вскоре менеджер обнаруживает, что разработчик, которому он доверял и на которого рассчитывал, подвел его. Он никогда не забудет эту ошибку. Ему будет трудно снова доверять этому разработчику. Это также может изменить его убеждения относительно разработчиков в целом. Несправедливо, конечно, но это реальность. Если он умный, он проверяет и перепроверяет работу этого разработчика. Если он действительно умный, он проверяет работу каждого. Но это замедляет работу. Вместо того, чтобы доверять всем в команде, чтобы проявить себя и добиться своей цели, он попытается все проверить. Страх и неуверенность менеджера начинают расти. До определенного дня… Когда вас посчитают ненадежным сотрудником. Мы все сделали эти ошибки И они еще не разрушили нашу карьеру. Хороший факт о людях: они дают второй шанс. И третий. И четвертый. Вы будете удивлены, сколько шансов вам готовы дать, когда вы компетентны и стараетесь быть лучше. В какой-то момент люди теряют терпение. Они больше не хотят работать с теми, кто продолжает повторять свои ошибки, они не хотят мириться с этими проблемами. Когда так происходит, обычно виновных увольняют. Повторите эти ошибки достаточное количество раз - и ваша карьера разработчика будет закончена. Ваш послужной список будет преследовать вас. Бывший коллега предупредит всех на новой работе, что от вас следует держаться подальше. Великие разработчики не делают этих ошибок. Это правда. Если Вы дочитали так далеко, есть большая вероятность, что вы один из них. Главная проблема – это ваше отношение, а не борьба со своими ошибками. Если вы работаете над тем, чтобы стать лучше, вы добьетесь успеха. Если вы, узнав об этих ошибках, отреагировали негативно – в форме цинизма, горечи или обиды – тогда вы в зоне риска. А как насчет других разработчиков? Тех, кто продолжает бороться с этими ошибками? Будьте терпеливы с ними. Если они открыты к обсуждению, научите их. Поделитесь этой статьей. Помогите им стать лучше. Не оставляйте их одних. Получите помощь, если Вы сами боретесь с этими проблемами. Потеря вашей карьеры – пугающая мысль Представьте, что каждый день вы работаете и находитесь там, где необходимы. Где ваши коллеги доверяют вам. Где они видят в вас Незаменимую часть своей команды. Как бы вы себя чувствовали в таком окружении? Хорошо, правда? Вы получаете желаемые результаты от своей карьеры, вы - рок-звезда на работе, и вы контролируете свое профессиональное будущее. Если вы действительно работаете. Навыки кодинга являются обязательными, но, как мы увидели, их недостаточно. Станьте рок-звездой. 
Введение в разработку приложений под iOS. Часть 5.

Автор: Volodymyr Bozhek

Здравствуйте, дорогие читатели. В этом уроке мы научимся: Добавлять иконку приложения; Добавлять картинки в приложение. Разберем, как пользоваться “Assets”. Откройте проект “Warehouse”. В панели навигатора откройте модуль “Assets.xcassets”.             Нажмите “App Icon”, вы увидите область с контейнерами для добавления иконок приложения. На рисунке выше  нас интересуют два контейнера “iPhone App iOS 7-10 60pt”, тут задается иконка приложения. В разделе “iPhone Notification iOS 7-10 20pt” задается иконка, которая будет отображаться при получении “Push” уведомлений от вашего приложения в заголовке сообщения. В разделе “iPhone Spotlight – iOS 5,6 Settings – iOS 5-10 29 pt”  задается иконка приложения, которая будет отображаться в диалоге поиска вашего телефона (если приложение под iOS 5 или 6) и в настройках телефона. В разделе “iPhone Spotlight iOS 7-10 40pt”  задается иконка, которая будет отображаться в диалоге поиска вашего телефона. Теперь давайте разберем, что означают метки “2х” и “3х”.  Метки- это размер иконок. Например, ваша исходная иконка имеет размер “16х16”, для нее будет задана метка “1х”. Соответственно, для метки “2х”  будет размер “32х32” (16+16 x 16+16), т.е. в два раза больше исходной иконки под меткой “1х”. Для метки “3х”  будет размер “48х48” (16+16+16 x 16+16+16), т.е. в три раза больше исходной иконки под меткой “1х”. Принято именовать иконки следующим образом: Иконка с меткой 1х используется для iOS ниже 7 версии. Вам ее не нужно делать, так мы используем язык программирования “Swift” в нашем приложении и доступен он, только начиная с версии “iOS 8”, не ниже. В “iOS” ниже версии 8  доступен для использования язык программирования “Objective C”, его я не буду разбирать вообще, поскольку у него не удобочитаемый синтаксис и для новичков он будет сложным. Т.е., должно быть в таком формате “[Имя исходной иконки][Размер в “pt”][Метка].[Расширение файла иконки]”. Таблица с размерами и метками иконок для раздела “iPhone Spotlight – iOS 5,6 Settings – iOS 5-10 29 pt”: Таблица с размерами и метками иконок для раздела “iPhone Spotlight iOS 7-10 40pt”: Таблица с размерами и метками иконок для раздела “iPhone App iOS 7-10 60pt” (иконка нашего приложения): Таблица с размерами и метками иконок для раздела “iPhone Notification iOS 7-10 20pt”: Итак, приступим к созданию нашей иконки. Скачайте  файл “warehouse.png” (размер 512х512)  ниже на странице себе на компьютер. Откройте любой графический редактор, которым умеете пользоваться и создайте файлы иконок в соответствии с 4 разделами, приведенными выше в таблицах. Имена файлов должны соответствовать тем, что в 4 таблицах выше. Как пользоваться графическим редактором, рассматривать не стану. Под OS X  есть бесплатный графический редактор “Gimp”, есть платный “Adobe Photoshop”. После обработки данного файла в графическом редакторе должны получиться на выходе следующие файлы: Отлично с этим справились, теперь необходимо перетащить из “Finder” иконки “*.png” в соответствующие места в “App Icon” по разделам. Выполните это, должно получиться вот так: Теперь закройте проект “Warehouse” и откройте его снова. Обратите внимание на иконку приложения, которая появилась в панели инструментов. Запустите приложение. Затем выполните комбинацию клавиш “Shift + Command + H”, чтобы выйти на рабочий стол устройства. Обратите внимание на иконку приложения “Warehouse”, она тоже изменилась. А вот так она выглядит в диалоге поиска “Spotlight”: Теперь разберем, как добавлять картинки в ресурсы и отображать их в элементах управления. Тренироваться будет на списке товаров. Прилагаю список картинок, которые мы будем использовать в ресурсах. Скачайте эти картинки, затем выделите весь список. Откройте модуль “Assets.xcassets” и перетащите из “Finder” в пустую область под “App Icon” выделенный список загруженных картинок. Должно получиться вот так: Все бы хорошо, если бы только не нововведения для картинок, начиная с iOS 10 и Xcode 8. До iOS 10, добавляя картинки подобным образом в ресурсы, все без проблем загружалось в AppStore. Но вот начиная с iOS 10, было принято, чтобы картинки были в двух разных форматах “sRGB” и “Display P3”, предпринято это было для возможности управления насыщенностью цветов. Более подробную информацию, как к этому пришли, можно получить, изучив “WWDC 16, Session 712, Working with Wide Color, Understanding and optimizing for Wide Color Gamut Displays”. Если использовать версию среды разработки, например, Xcode 7.3.1, то в ней с минимальной версией приложения iOS 8.0 не надо делать никаких конвертаций с картинками, все без проблем загружается в AppStore. Если же загружать без конвертации “sRGB and Display P3” со среды разработки “Xcode 8”, то на этапе валидации мы получим ошибку “Invalid Bundle. The asset catalog at '$path' can't contain 16-bit or P3 assets if the app is targeting iOS releases earlier than iOS 9.3”. Да, с одной стороны можно было поставить минимальную версию iOS 9.3, ничего не конвертировать и отправить приложение в AppStore, но тогда бы я потерял пользователей, у кого iOS 8, 8.1, 8.2, 8.3, 9, 9.1, 9.2, 9.2.1. Пришлось разбираться, как это исправить, чтобы выполнить загрузку в AppStore, и при этом минимальная версия так и осталась iOS 8. Для конвертации изображений в OS X есть специальная бесплатная встроенная утилита “ColorSync Utility”. Картинки, которые я показывал выше, имеют формат “RGB”, чтобы убедиться в этом. В “Finder” выполните клик правой кнопкой мыши на картинке, например, “tool001.png” и в контекстном меню выберите пункт “Get info”. Обратите внимание на свойство “Color space”, его значение “RGB”. Создайте где-нибудь две папки с названиями “Tools_sRGB” и “Tools_Display_P3”. В эти папки мы будем складывать сконвертированные картинки. Картинка формата “Display P3” (16 битная) будет автоматически подгружаться, если у пользователя iOS 10, если же у пользователя версия операционной системы ниже iOS 10, будет браться картинка формата “sRGB” (8 битная). Если вы добавите только картинки в формате “sRGB”, тогда, если у пользователя операционная система iOS 10, эти картинки будут каждый раз конвертироваться из формата “sRGB” в формат “Display P3”. Добавить только картинки формата “Display P3” и не добавить картинки формата “sRGB” нельзя, надо или в обоих форматах, или только в формате “sRGB”. Если вы обратили внимание, когда добавляли картинки в “Assets.xcassets”, а затем выделили одну из добавленных картинок, с правой стороны от нее был отображен контейнер “Universal”. Давайте включим поддержку “Display Gamut”. Выделите “tool001.png”, в панели свойств откройте вкладку “Show the attributes inspector”. Найдите свойство “Gamut”, в нем сейчас установлено значение “Any”, установите значение “sRGB and Display P3”.  Перейдите в “Finder”, теперь мы должны сконвертировать исходные загруженные картинки в два формата “sRGB” и “Display P3”. Для этого в “Finder”  выделите картинку “tool001.png”, выполните по ней клик правой кнопкой мыши и в контекстном меню выберите “ColorSync Utility.app”. В открывшемся приложении “ColorSync utility”, внизу в выпадающем списке, измените значение “Match to Profile” на “Assign Profile”. Затем нажмите на выпадающий список “None” и выберите “Display”, затем “sRGB IEC61966-2.1”. Кнопка “Apply” станет активной, нажмите на нее, затем закройте окно ColorSync “tool001.png”, нажав на красную кнопку в правом верхнем углу окна. Вам будет предложено сохранить изменения. Сохраните изменения. Теперь перейдите в папку “Tools_sRGB”, которую мы создавали ранее, и выделите файл “tools001.png”, нажмите на нем правой кнопкой мыши и в контекстном меню выберите пункт “Get info”. Обратите внимание на свойство “Color profile”, оно теперь имеет то значение “sRGB IEC61966-2.1”, которое мы устанавливали через утилиту “ColorSync”. Теперь проделайте такую же операцию, еще раз с исходным файлом изображения “tool001.png”, но на этот раз выберите “Color profile” - “Display P3”. Нажмите кнопку “Apply” и закройте окно ColorSync “tool001.png”, сохраните изменения в папку “Tools_Display_P3”. Затем откройте “Finder”, перейдите в папку “Tools_Display_P3”, выделите файл “tool001.png”, нажмите на нем правой кнопкой мыши и в контекстном меню выберите пункт “Get info”. Обратите внимание на свойство “Color profile”, там установлено значение “Display P3”. Теперь перейдите в Xcode, откройте модуль “Assets.xcassets”, выделите изображение “tool001” и перенесите из “Finder” картинки в контейнер. В поле “1x sRGB” перетащите картинку “tool001.png” из папки “Tools_sRGB”. В поле “1x Display P3” перетащите картинку “tool001.png” из папки “Tools_Display_P3”. Должно получиться вот так: Остальные картинки сконвертируйте самостоятельно в форматы “sRGB” и “Display P3” по той же схеме, что мы делали выше. Ниже вы можете скачать две сконвертированные картинки. Также добавим в “Assets” еще картинку фона страницы авторизации. Она имеет размер “750х1334” и называется “warehouse-view.png”. Картинку тоже необходимо сконвертировать в два формата “sRGB” и “Display P3”. В панели навигации откройте модуль “Main.storyboard”, найдите View с именем “View Controller”, из панели компонентов перетяните на View  компонент “ImageView”. Растяните его на всю область View. Нажмите кнопку “Pin” и задайте такие ограничения: Нажмите кнопку “Add 4 Constraints”. Измените цвет кнопки “Вход” на оранжевый, цвет текста “Нет ошибок” на белый. Откройте модуль “SuppliesViewController.swift”. Обновите модель “supplies”, как показано ниже (заполнены свойства “productImage”): Обновите метод “cellForRowAt indexPath”: Тут изменения только на 92 строке, в ячейке есть встроенный компонент “ImageView”, мы обращаемся к его экземпляру и от него инициализируем свойство “image”. В инициализаторe “UIImage” мы задаем аргумент “named”, название “Image Set” из “Assets”. Запустите приложение. На этом мы завершаем данный урок. Большой получился урок, но тему “Assets” надо было обязательно рассмотреть, чтобы в будущем к ней уже не возвращаться. В следующем уроке мы рассмотрим, как работать с библиотекой “Alamofire” и интегрируем ее в наше приложение. Создадим тестовый сервер, в который добавим таблицу пользователей для авторизации, а в последующих уроках переведем работу списка продуктов на сервер и перепишем клиент на интеграцию с сервером.
Фундамент внутренней оптимизации. 5 железных факторов

Автор: Андрей Афанасьев

Введение В начале данной статьи хочу поздравить Вас и себя со своей первой публикацией в 2016 году. Искренне желаю встречать на своем пути побольше ценной и интересной информации, а также людей, которые будут делиться бесценным опытом и помогут таким образом в Вашем профессиональном росте:) А теперь можно приступить непосредственно и к теме данной публикации. Я не сомневаюсь, что многие уже успели перелопатить массу книг и статей о том, какой должна быть качественная внутренняя оптимизация, на что она влияет, какие тренды нас ждут в наступившем году, поскольку такой информации в Интернете целые массивы. Но меня это не остановило. Я уверен, что данный материал обязательно откроет что-то новое, позволит расставить акценты и сосредоточить внимание на самом главном. Тем более, кто дочитает эту статью до конца, получит небольшой, но приятный бонус:) От слов к делу Самый встречаемый вопрос, особенно среди новичков, звучит так: ”Внутренняя оптимизация - такой трудоемкий процесс, так много факторов и пунктов проверки. Подскажи, на что стоит обращать внимание в первую очередь?”. Отвечаю. Пожалуй, на всё. Наша жизнь состоит из мелочей и SEO-оптимизация тому не исключение. Практически невозможно сложить красивую картинку из пазла на 100 или даже 1000 элементов, если упустить часть деталей.  Поэтому остается только сосредоточиться, сесть за компьютер, поставить возле себя чашку ароматного кофе или чая, открывать чек-лист, кропотливо и внимательно анализировать проект по каждому из пунктов. В результате Вы получите полноценный труд в виде технического задания, которое, с большой вероятностью, Вам самим понравится и после внедрения обеспечит эффективное дальнейшее SEO-продвижение. Но, несмотря на важность всех мелочей и нюансов, я подготовил материал, в котором выделю 5 моментов критической важности, то, без чего достигнуть крепких ТОПов и заполучить целевой трафик невозможно, с кратким комментарием по их решению. Плюс все будет лаконично и конструктивно, ведь вычитать «простынь» под силу не каждому :) Наших 5 железных факторов 1. Семантика&Структура Моментом №1 в SEO анализе и оптимизации является тот, насколько структура сайта позволяет его продвигать.  Довольно часто возникает такая ситуация, что клиент хочет или требует оптимизацию сайта под семантику, к которой сайт совершенно не готов структурно. На сайте может не быть нужной вложенности, категорий и подкатегорий, страниц отзывов и прайсов, без которых эффективной оптимизации под интересную для клиента семантику не получится. Поэтому, крайне важно параллельно выбирать и анализировать семантику, а также давать рекомендации и правки по структуре сайта. Семантика + структура - очень серьезная связка. Лучше согласовать и внедрить все моменты на берегу, чем когда Вы уже выйдете в открытое плаванье и придется грести веслами обратно. Но также важно помнить, что не любая семантика, которую предлагает или на которой настаивает клиент является правильной. В силу незнания он может быть убежден в одном, но в реальности дела могут обстоять иначе. Нивелируйте это своим погружением в бизнес и опытом. 2. Настройка карты сайта, ЧПУ и хлебных крошек. Если на предыдущем этапе все ОК, двигаемся дальше. Думаю, каждому из нас хоть раз приходилось заблудиться на улице. В этом случае так хочется у первого встречного прохожого здесь и сейчас получить толковую консультацию, как попасть на улицу, которую мы ищем. А если мы еще и торопимся на жизненно важную встречу, то градус ситуации накален вдвойне. Шучу) К чему все это? Правильная навигация важна и для поисковых роботов. Он не будет тратить время на то, чтобы сканировать страницы с непонятным назначением, уровнем вложенности и неизвестной глубины. Ему необходимо видеть эту структуру и навигацию. Поэтому на сайте обязательно должны быть настроены: Человекопонятные url-адреса ЧПУ Все url-адреса на сайте должны быть приведены к ЧПУ-виду и иметь вид http://url/. Кириллица должна трансформироваться в латиницу. В качестве разделителя слов в ЧПУ следует использовать дефис "-". Также будет неоспоримым плюсом, если в url-адресах будет соблюдаться полная вложенность, т.е. http://url/>/. Пример не ЧПУ адреса может выглядеть так: site.domain/index.php?id=75. Примером ЧПУ адреса для этой же страницы может быть site.domain/itvdn. После настройки ЧПУ следует также сделать 301 редирект с не-ЧПУ урлов на ЧПУ. В нашем случае это 301 редирект с site.domain/index.php?id=75 на site.domain/itvdn. Настройка ЧПУшек и соответствующих редиректов, как правило, решается подключением стандартных плагинов. Если речь идет о самописной системе, скорее всего нужно будет «допиливать» соответствующий функционал. Реализация «хлебных крошек» Breadcrumbs Под «хлебными крошками» подразумевается навигационная цепочка, которая отражает вложенность структуры и чаще всего располагается над или под основным текстовым заголовком страницы.     Реализация Breadcrumbs полезна не только для того, чтобы показать поисковику глубину структуры сайта, но и с точки зрения юзабилити. Посетителю будет всегда удобно выйти на уровень или два уровня выше, допустим в каталог, если со страницей товара он полностью ознакомился, но хочет посмотреть что-то еще. Карта сайта sitemap.xml Как правило, данные карты генерируются стандартными плагинами в зависимости от того, на какой CMS сделан сайт. Либо есть универсальные решения, например, специальная CMS для генерации карт, которая интегрируется в корень сайта и парсит всю его структуру, в результате чего и генерируется карта сайта. Адрес, по которому должна быть доступна карта, желательно делать site.domain/sitemap.xml. Но и это еще не все. Необходимо после генерации карты скормить ее поисковому роботу в GWT в разделе «Файлы Sitemap».     Если с содержанием карты будет что-то не в порядке, Вы увидите соответствующие предупреждения об этом, которые потребуется исправить. Хочу еще подчеркнуть, что генерация карты сайта происходит в самом конце внедрения ТЗ оп оптимизации, когда устранены дубли, настроены правильные ЧПУ и т.д.   3. Диагностика и устранение дублей. Дубли – это откровенное зло. Было бы Вам приятно, чтобы кто-то копировал Ваше поведение, одевался также, носил идентичную стрижку? Думаю, что вряд ли. И поисковые роботы в этом молодцы. Они такое рубят, занижают рейтинг целевых страниц и сайта в целом, если в его содержимом содержатся дубли. Каким образом их диагностировать? Для этого есть несколько методов. Самый простой - это воспользоваться данными по повторяющимся метатегам в разделе «Оптимизация HTML». Если дубли присутствуют, Вы увидите данные в таком виде:     Диагностировать дубли можно и с помощью программы NetpeakSpider. Такой вариант даже лучше в том плане, что он сканирует актуальную структуру сайта, а страницы в GWT сканируются периодически и информация может быть не первой свежести на момент, когда Вы ищите дубли. Дальше сам собой напрашивается вопрос о том, как нам избавиться от них. Если дубль полный, т.е является 100% клоном страницы, которую дублирует, стоит проставить 301 редирект с дубля на основную страницу и отправить данный дубль на принудительную переиндексацию в разделе «Просмотреть как Googlebot».     Существуют и другие методы борьбы с полными дубликатами, например, закрытие их в robots.txt и принудительное удаление через GWT. Но 301 редиректы считаются наиболее эффективным и правильным методом. В случае частичных дублей, например, когда дублируется только и/или и/или заголовки необходимо переписывать метатеги на дублях вручную, если их много, либо формировать и внедрять шаблоны метатегов, которые в результате генерации будут уникальными для каждой страницы. Пример шаблона автогенерации метатегов может выглядеть, например, так:       После активной борьбы по искоренению дублей Вы в идеале сорвете джек-пот в таком виде:     Резюмируя данный пункт, предлагаю раз и навсегда сказать «Нет!» дублям, вовремя проверять их и давать отпор! Едем дальше…   4. Борьба с аффилиатами Под аффилиатами подразумевается другой сайт клиента с такими же контактными данными, названием компании, структурой и тематикой. Поисковые системы “за естественную конкуренцию” и ведут борьбу с монополизацией рынка. Поэтому, склеивают аффилиаты, накладывая фильтры и занижая рейтинг сразу всех сайтов. По статистике 2 из 3 клиентов приходят к нам с аффилиатами. В их качестве зачастую выступают не самостоятельные сайты на отдельных CMS и доменах, а  площадки, сгенерированные на платформах типа Prom.ua или Allbiz. Это плохая практика и что в таком случае требуется делать? Алгоритм простой: Аргументируем клиенту всю ситуацию, запрашиваем доступы к аффилиатам, проверяем их. Добавляем каждый аффилиат в Google Webmaster Tools. Настраиваем 301 редиректы со всех страниц аффилиатов на главную страницу основного сайта. Отправляем на принудительную переиндексацию аффилиаты. Если нет возможности проставить 301 редирект, нужно воспользоваться опцией в GWT в разделе «Удалить URL-адреса».     Если внутри платформы нет возможности добавить сайт в панель вебмастеров (а такое случается часто), нужно просто согласовывать полное удаление сайта-аффилиата и ждать, когда он выпадет из индекса. Такой простой алгоритм действий позволил нам вывести не один сайт из-под фильтра. Вот один из кейсов нашей компании, где мы непосредственно применяли данную методику и вытащили сайт с самого дна поиска на первые позиции. Также бытует мнение, что достаточно изменить название компании, контактную информацию - и ситуация может измениться. Этот метод не работает. Не тратьте даже время на покупку новых телефонов и не ломайте голову, как бы себя по-новому еще назвать.   5. On-Page оптимизация Подразумевает заточку и оптимизацию конкретных целевых страниц под семантическое ядро.  Здесь важны следующие моменты: Написание и размещение оптимизированных метатегов. Подготовка и размещение полезного структурированного качественного текстового контента, при этом оптимизированного под нужные поисковые запросы. Помимо контента текстового следует использовать качественные (желательно “не тяжелые” по объему памяти) изображения на всю ширину страницы. Это еще в тренде. Не помешают также тематические видеоролики, которые точно повлияют на поведенческие факторы ПФ (снизят показатели отказов и увеличат время нахождения пользователя на странице). И многие другие интересные вещи, которые Вы узнаете дальше.   На десерт Как я и обещал в начале данной статьи, Вас ожидает сюрприз. Под этой статьей находится pdf-файл «Полный чек-лист seo-оптимизатора от Abweb». Запомните, что только титаническая работа позволит получить что-то стоящее не только в сфере SEO. Жду Ваших комментариев, до следующих публикаций! Полный чек-лист seo-оптимизатора от Abweb
Разработка ASP.NET 5 веб-приложений с Visual Studio Code

Автор: Редакция ITVDN

Введение 10 лет назад трудно было вообразить, что разработка ASP.NET веб-приложений вне интегрированной среды разработки Visual Studio .NET буде возможна. Но в прошлом году произошли изменения. В апреле 2014 года на конференции разработчиков (Build)  Microsoft анонсировал запуск нового легкого кросс-платформенного кодового редактора для разработки современных веб-приложений под именем Visual Studio Code. Visual Studio Code Visual Studio Code свободна для скачивания с официального сайта.  Работаете ли Вы на Linux, Mac или Windows – не имеет значения. Вы можете скачать и запустить VS код на своей платформе. Установка Visual Studio Code довольно проста, но если Вы застрянете, то всегда можете просмотреть документацию по установке. Visual Studio Code является просто редактором кода на файловой основе и не имеет всех преимуществ полной интегрированной среды разработки Visual Studio .NET. Он легче по дизайну. Тем не менее, у редактора есть множество особенностей, которые поддерживают такие технологии, как IntelliSense для дополнения кода, Peek Definition для быстрого взгляда на функциональный код без навигации,  реорганизацию кода и прочие. Visual Studio Code также поддерживает множество языков, например CoffeeScript, F#, Go, Jade, Java, Handlebars, Powershell и Python, для примера. Вы можете проверить языковую поддержку здесь. Также Visual Studio Code способен поддерживать такие среды выполнения, как ASP.NET 5 и Node.JS. Если Вы их используете для веб-разработки с Microsoft Stack, можете быть уверенны, что ASP.NET 5 (новая версия ASP.NET) сейчас поддерживает кросс-платформенную разработку. Это значит, что можно разрабатывать ASP.NET-приложение в среде Linux, Mac или Windows так же, как и запускать его в любой из них. И Вам даже не нужно иметь интегрированную среду разработки Visual Studio .NET, чтобы сделать это. Visual Studio Code – это все, что вам нужно, чтобы начать работать с ASP.NET 5, и это здорово! Установка ASP.NET 5 & DNX (среды выполнения .NET): ASP.NET 5 был построен с нуля, чтобы убедиться, что он придерживается современной парадигмы веб-приложений, и что приложения, разработанные с его помощью являются «облачными». Ключевыми аспектами ASP.Net 5 являются гибкость и модульность – он предлагает минимальные накладные расходы и позволяет нам выбирать только то, что мы хотим в рамках нашего веб-приложения. DNX расшифровывается как Dot Net eXecution Environment. Что такое Yeoman? Если Вы работали в интегрированной среде разработки Visual Studio .NET, Вам будет интересно: «Есть ли здесь File > New > ASP.NET шаблон проекта?» Visual Studio Code является редактором кода на файловой базе, так что Вы можете просто открыть файл и начать редактирование. Кроме того, нужны поддерживающие средства, чтобы работать с исполняемым шаблоном ASP.NET. Yeoman является популярным консольным инструментом для автоматического построения структуры проекта, а также обеспечивает базовым ASP.NET шаблоном для старта. Yeoman может быть установлен с помощью NPM, но для начала надо установить Node.JS. Если у Вас нет Node в системе, можете установить его. Кроме Yeoman, Вам также нужны другие поддерживающие средства, такие как генератор ASP.NET, исполнитель задач Grunt и Bower. Вы можете выполнить это за одну команду. В командной строке набрать следующую команду и нажать enter: npm install –g yo grunt-cli generator-aspnet bower Теперь Вы можете строить веб-приложения. Создание веб-приложения Разберем пошагово, как  построить структуру проекта нового ASP.NET 5 веб-приложения. 1. Откройте командную строку и перейдите в папку, где Вы хотите создать свое новое веб-приложение. 2. Введите в командную строку следующую команду:  yo aspnet 3. Yeoman отобразит варианты приложений для генератора aspnet. Возможные варианты: консольное приложение веб-приложение основное веб-приложение (без членов/аутентификации) веб-приложение API Nancy ASP.NET приложение библиотека классов тестовый проект Unit Выберите сейчас основное приложение. Используйте клавиши со стрелками для выбора опции и нажмите enter. 4. Дальше нам нужно назвать веб-приложение. Используем HelloWorld как имя нашего образца ASP.NET 5 веб-приложения. Введите имя и нажмите enter. Yeoman построит структуру проекта. 5. Каталог, в котором будет создано наше веб-приложение будет иметь то же имя, что мы дали только что Yeoman. В данном случае - “HelloWolrd”. cd HelloWorld   6. Через командную строку откройте Visual Studio Code code 7. Visual Studio Code запустит проект HelloWorld. Файлы в проекте будут отображаться в окне Проводника. 8. В редакторе Visual Studio Code выберите View > Command Palette option и в командной палитре введите следующую команду: dnx: dnu restore - (HelloWorld) Выше написанная команда restore устанавливает нужные NuGet пакеты, необходимые для запуска веб-приложения. Она запустит командную строку, куда будут загружаться все пакеты. После выполнения будет получено сообщение, что загрузка завершена. Запуск веб-приложения Теперь, когда мы успешно создали веб-приложение, пришло время запустить его и посмотреть на результат. 1. В Visual Studio Code откройте Command Palette, выбрав View > Command Palette. Введите следующую команду для запуска приложения: dnx: kestrel -(HelloWorld,Microsoft.AspNet.Hosting--server Kestrel–config hosting.ini Примечание: Когда Вы начинаете набирать команду, командная палитра подскажет Вам полную команду в списке. Вы можете выбрать команду из списка и команда будет выполнена. 2. Откройте браузер и перейдите по ссылке http://localhost5000 Мы только что создали ASP.NET веб-приложение вне интегрированной среды разработки Visual Studio. Фактически, в настоящее время ASP.NET больше не только в Windows. Мы переходим на кросс-платформу – как с точки зрения разработки, так и размещения. Интеграция Telerik UI для набора ASP.NET MVC Teleric предлагает пользовательский интерфейс, известный как UI для ASP.NET MVC. Он произошел от Kendo UI и предусматривает HTML-помощников, которых называют “Kendo UI wrappers.” Они упрощают работу с элементами управления Kendo UI и ускорят вашу разработку. Представим пошагово добавление пользовательского интерфейса для ASP.NET MVC в наш проект: 1. Откройте файл project.json и в узле (“dependencies”) добавьте Kendo (в настоящее время доступна бинарная версия Kendo Mvc – 2015.2.805). "dependencies":{     ...     "Kendo.Mvc":"*" } 2. Дальше откройте Startup.cs и найдите метод “ConfigureServices”. Добавьте следующий фрагмент в метод. //Register UI for ASP.NET MVC Helpers Services.AddKendo(); 3. Затем откройте ~/Views/_ViewImports.cshtml и импортируйте пространство имен Kendo.Mvc.UI. @using Kendo.Mvc.UI 4. Скопируйте Kendo UI ресурс с клиентской стороны. Для этого Вам нужно установить пакет Kendo UI Professional (Commercial Package). Его можно установить через Bower с помощью следующей команды: bower install https://bower.telerik.com/bower-kendo-ui.git Пакет Kendo UI Professional Bower размещается в частном git-хранилище и требует активировать аккаунт Telerik. Во время установки Вам предложат ввести пароль несколько раз. Bower установит пакет Kendo UI Professional как “kendo-ui” в папку wwwroot/lib. 5. Дальше нам необходимо зарегистрировать скрипты Kendo UI и стили в ~/Views/Shared/_Layout.cshtml. <head>     ...     <link rel="stylesheet" href="~/lib/kendo-ui/styles/kendo.common-bootstrap.min.css" />     <link rel="stylesheet" href="~/lib/kendo-ui/styles/kendo.bootstrap.min.css" />     <link rel="stylesheet" href="~/lib/kendo-ui/styles/kendo.dataviz.bootstrap.min.css" /> head> 6. Теперь  давайте используем виджет Kendo UI в одном из видов. Мы будем использовать виджет Kendo UI DatePicker. Откройте ~/Views/Home.Index.cshtml и добавьте следующий фрагмент: <body>     ...     <script src="~/lib/kendo-ui/js/kendo.all.min.js">script>     <script src="~/lib/kendo-ui/js/kendo.aspnetmvc.min.js">script>     @RenderSection("scripts", required: false) body> 7. Запустите веб-приложение через dnx: kestrel команду, что мы использовали ранее. Результат представлен ниже. Заключение Готово. У нас есть законченное веб-приложение ASP.NET 5, интегрированное с Telerik UI для ASP.NET MVC виджетов, разработанное только использованием Visual Studio Code с поддержкой таких инструментов, как Yeoman и Bower. Надеемся, Вам понравилось! Источник -  http://developer.telerik.com/featured/developing-asp-net-5-web-apps-with-visual-studio-code/
Запуск ASP.NET 5 на Linux

Автор: Редакция ITVDN

Введение Данная статья содержит подсказки и советы, как правильно запустить ASP.NET vNext на Linux.  Если Вы используете метод чистой установки, вам следует установить Mono 3.4.1 или более позднюю версию. Вы можете сделать это путем составления источников. Также установка Mono возможна с помощью менеджера пакетов.  1. Доступ к Ubuntu с помощью удаленного рабочего стола Если Ubuntu работает на облаке Windows Azure, а показать его нужно на Surface RТ, необходимо получить доступ к Ubuntu с помощью удалённого рабочего стола. Вот замечательное руководство по работе с удалённым рабочим столом с Ubuntu: Как установить xrdp в Ubuntu 14.04 Если Вам не нужно запускать браузер, то удалённый рабочий стол Вам не понадобится. Чтобы увидеть веб-приложения, работающие на Linux, Вам нужно открыть некоторые порты или использовать туннель для Linux. 2. Установка K Runtime Выполните следующие команды в терминале: curl https://raw.githubusercontent.com/aspnet/Home/master/kvminstall.sh | sh && source ~/.kre/kvm/kvm.sh Это позволит установить K Runtime Manager (KVM), K Runtime (Kre) и K Package Manager (KPM), также следует запустить приложения ASP.NET vNext. 3. Установите последнею версию KRE Теперь давайте установим последнею версию KRE. Выполните такую команду в терминале:  kvm upgrade Эта команда вызывает KVM для загрузки и установки последней версии KRE. 4. Натройка NuGet.config Вполне возможно, что NuGet не имеет никакого представления об источнике пакета ASP.NET vNext. Вы можете найти NuGet.config в: /home//.config/NuGet Если он имеет только пустые и закрытые теги конфигурации, то для изменения содержимого выполняйте: xml version="1.0" encoding="utf-8"?> <configuration>   <packageSources>     <clear />     <add key="AspNetVNext" value=https://www.myget.org/F/aspnetmaster/ />     <add key="NuGet.org" value="https://nuget.org/api/v2/" />   packageSources> configuration> 5. Получите Ваше приложение из Git Затем нужно получить источник ASP.NET vNext приложения для Вашей машины. Возможно, Вы используете Git. Чтобы скачать примеры приложений ASP.NET vNext, Вам нужно выполнить команду: git clone https://github.com/aspnet/Home.git 6. Восстановление пакетов Отправляйтесь к корневой папке вашего приложения ASP.NET vNext и, чтобы восстановить пакеты, используйте для запуска: kpm restore Теперь KPM восстанавливает все пакеты, необходимые для запуска приложения. Эта информация считывается из project.json файлов в приложениях корневых папок. 7. Запустите приложение Пришло время для запуска приложения: k kestrel Эта команда вызывает KRE и использует Kestrel как веб-сервер. Источник: http://gunnarpeipman.com/2014/10/running-asp-net-5-on-linux/
Notification success