Результати пошуку за запитом: начальный курс c
Введення в розробку програм під 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” и интегрируем ее в наше приложение. Создадим тестовый сервер, в который добавим таблицу пользователей для авторизации, а в последующих уроках переведем работу списка продуктов на сервер и перепишем клиент на интеграцию с сервером.
Ідеальне резюме програміста: що писати в резюме ІТ спеціалісту
Автор: Влад Сверчков
Всім привіт!
Що таке резюме? По суті, це візитна картка, яка повинна переконати рекрутера або HR-менеджера запросити вас на співбесіду. Однак вона може не тільки переконувати наймачів, а й відмовляти розробникам навіть із завидним багажем досвіду та знань. Що написати про себе в резюме IT спеціалісту? Яким має бути резюме у програміста, щоб воно сподобалося рекрутеру та стало вашою перепусткою в IT-компанію? Чим відрізняються резюме досвідченого розробника і програміста-початківця (junior)? Давайте розберемося!
Насамперед зазначимо, що у вашому резюме має бути відсутнім:
Розмитість, неточності. Кожна людина дорожить своїм часом. Особливо рекрутер, у якого крім вашого ще кілька десятків (а буває навіть і сотень) резюме. Ніхто не захоче витрачати час на перепитування або уточнення у вас інформації, яка важлива для тієї чи іншої позиції, але яку при цьому ви забули або не захотіли вказати.
Вода. Резюме – не твір на вільну тему і не автобіографія, починаючи з пелюшок. Цей документ має чітку мету і призначення, а значить пустослів'я в ньому – поганий тон і водночас найбільш вірний шлях до кошику рекрутера.
Брехня. Також не забувайте, що брехня завжди спливає назовні – або під час співбесіди, або безпосередньо в ході трудових буднів. Не видавайте бажане за дійсне та складайте чесне резюме. Ми ще поговоримо в цій статті про те, під яким соусом краще подавати ту чи іншу інформацію, залишаючись чесним та у виграшному становищі одночасно.
Якщо підсумувати ці пункти, вірним є наступне: гарне резюме має рясніти лаконічністю, бути чесним і містити лише важливу інформацію. Тепер поговоримо детальніше, що воно має включати, і як правильно складати кожен розділ.
Структура
Жорстких вимог щодо оформлення резюме для програмістів немає. Однак існують певні правила, яких слід дотримуватись у процесі його складання. Рекомендуємо використовувати наступний шаблон (у дужках вказано назву, котру треба використовувати при складанні резюме англійською):
Прізвище, ім'я (First Name, Last Name)
Вік (Age)
Контакти (Contacts) – місто проживання, телефон, e-mail, Skype. Акцентуємо увагу на тому, що назва електронної пошти та скайпу має бути в офіційному стилі у вигляді вашого імені та прізвища: a.ivanov@... або alexander_ivanov@... і т. д. Ніяких stasik_ananasik@... та інших химерних назв. Пошту краще обирати з найпопулярніших — Gmail, Outlook та подібних. Також пошта не повинна бути прив'язана до попередніх місць роботи.
Тут же додайте посилання на ваш профіль GitHub, де знаходяться опубліковані вами проєкти. Якщо маєте гарно заповнений профіль у LinkedIn (із зазначеними місцями навчання та роботи, вивченими технологіями, вашим якісним фото та іншою інформацією), додайте посилання і на нього.
Тут же торкнемося і питання соціальних мереж. Якщо ваше резюме зацікавило рекрутера, існує висока ймовірність, що вас знайдуть через соцмережі і ознайомляться зі вмістом ваших сторінок. Тому проведіть попередню ревізію своїх профілів у Мережі та приберіть усе те, що псуватиме вам імідж (гострі політичні висловлювання, пости, що суперечать загальноприйнятим нормам моралі, та інші елементи, які будуть працювати проти вас).
Мета (Objective) — пункт, де ви повідомляєте наймачу, яку позицію бажаєте займати у компанії.
Резюме кваліфікації (Summary Of Qualification) – у цьому розділі слід розмістити основну інформацію з резюме, яку буде корисно дізнатися роботодавцю в першу чергу (не більше п'яти ключових тез, які розкажуть про вас та ваш досвід роботи в обраній сфері IT). Якщо не маєте якихось сильних аргументів про ваш кар'єрний шлях, пропустіть цей пункт.
Професійні навички (Hard Skills) – тут ви описуєте всі технології, які знаєте та вмієте використовувати. Поруч вказуйте рівень володіння кожною. Припустимо, щось знаєте добре, щось базово, але готові вивчати далі. Головне — пишіть чесно, адже з кожної технології чи вказаної мови програмування прилетять запитання.
Особисті навички (Soft Skills) – це нетехнічні навички, якими ви володієте. Які ключові навички вказати у резюме програміста? Вміння працювати в команді, вирішувати конфліктні ситуації, бути уважним до деталей, володіння гарно розвиненим критичним мисленням, уміння слухати та чітко викладати свої думки, а також інші подібні навички відносяться до софт скілів, які важливо було б почути працедавцю. Тобто це ті вміння, які допомагають нам бути ефективними на будь-якій роботі. Багато софт скілів писати не треба, однак, щонайменше три найкращі свої якості вказати необхідно.
Тут теж пишіть чесно, не вводячи роботодавців в оману – співбесіда змусить вас розкрити карти у будь-якому випадку. На допомогу прийде невелика порада, яка допоможе залишатися чесним і при цьому не торкатися ваших недоліків.
Кожен роботодавець хоче, щоб його співробітник був робочою конячкою з відмінними комунікативними навичками, здатністю швидко навчатися, чудовим володінням техніками тайм-менеджменту та іншими скілами. Але всі знають, що ідеальних людей не існує. Припустимо, якщо ви інтроверт і потребуєте певного часу на розкриття себе в колективі, не пускайтеся в оману, мовляв, ви швидко і легко знаходите спільну мову з командою. Буде розумно вчинити інакше — обійти стороною ваші навички комунікації та вказати інші позитивні якості, якими володієте – наприклад, уміння слухати, аналізувати інформацію та швидко знаходити вихід із проблеми.
Досвід (Experience) – слід вказувати у зворотному порядку, починаючи з вашого останнього місця роботи. Кожне описуване місце роботи повинно мати наступну структуру:
дати початку і кінця роботи (буде плюсом, якщо додасте в дужках час, протягом якого обіймали посаду);
назва компанії;
посада;
короткий опис проєкту (по можливості з посиланням), обов'язків, опис використовуваних технологій та досягнень.
Якщо ви до цього працювали не за фахом, спробуйте в останньому пункті описати якісь важливі навички, які ви опанували в ході роботи, і які при цьому важливі на цій позиції, на яку ви подаєте резюме.
Якщо ви тільки закінчили університет, спробуйте поміркувати та написати про університетський досвід — ймовірно, ви займалися чимось корисним на кафедрі, перебували в якійсь університетській організації або з одногрупниками розробляли власні проєкти, займалися громадською діяльністю, внаслідок чого опанували деякі вміння/навички або просто отримали досвід у застосуванні певних програмних або апаратних засобів.
З одного боку, може здатися, що досвід роботи не за фахом зовсім не цікавить роботодавця. Частково це так, однак грамотному рекрутеру/HR-менеджеру цей пункт (при правильному його описі) відкриє вас як людину, яка має досвід роботи та комунікації всередині команди. А якщо ви ще й вказали, що в процесі роботи навчилися раціонально розпоряджатися своїм часом та вчасно виконувати покладені на вас доручення, це ще один плюсик вам.
Однак якщо у вас вже є певний IT-бекграунд, то варто вказувати лише досвід в IT – які найвдаліші проєкти, якою командою керували (якщо керували), які обов'язки виконували, чого досягли і т. д.
Освіта (Education) – інформація про вищу освіту. Вказуйте назву ВНЗ, факультет, спеціальність, здобутий ступінь, роки навчання. Якщо отримали червоний диплом, згадайте про це. Школу згадувати немає потреби. Хіба що це ваша перша робота або стажування в IT і ви маєте за плечима якийсь крутий технічний ліцей.
Якщо нещодавно закінчили навчальний заклад, можете написати тему вашої дипломної роботи та середній бал за весь час навчання.
Додаткові навички (Additional Skills) – інформація про курси, семінари, тренінги та інші програми навчання, які ви проходили самостійно. В цьому ж розділі розкажіть про ваші сертифікати, якщо вони у вас є – тут настає їхня зіркова година.
Знання мов (Knowledge Of Languages) – простий пункт. Складається у вигляді “Мова – рівень володіння мовою”. Ключовим у цьому розділі є знання англійської, адже потрапити до IT без неї практично нереально. Не будьте профаном і не пишіть, наприклад, “English – гарний”. Англійська має декілька рівнів володіння: Elementary, Pre-Intermediate, Intermediate, Upper-Intermediate, Advanced, Proficiency, тому в даному прикладі доречно писати “English – Intermediate”. Можете додати уточнення, мовляв, без проблем читаєте технічну документацію, але розмовний інгліш ще підтягуєте. Дозволяється вказати поруч із рівнем володіння мовою, що на даний момент ви відвідуєте відповідні курси, якщо це відповідає дійсності.
Об'єктивно оцінюйте свій рівень володіння англійською – це дуже легко перевіряється під час співбесіди.
Додаткова інформація (Additional Information) – відомості про вас, якими ви хотіли б поділитися: ваші інтереси, захоплення, або певні особливості – наявність маленької дитини, родича, за яким вам необхідно наглядати і т. д. Зрештою, на роботу беруть не шестерню, яка буде частиною бездушного механізму, а особистість із певними знаннями, професійними навичками, поглядами на життя та рисами характеру.
Головне – вміло подати інформацію. Маєте маленьку дитину і багато часу працювали з дому – уточніть, що ці умови навчили вас стійкості до стресів і багатозадачності. Будьте на позитиві, витягайте із, здавалося б, глухих ситуацій позитивні сторони і демонструйте їх тому, хто буде дивитися ваше резюме.
Загальні поради
Вимоги до тексту.
Для резюме обирайте 12-14 кегль та шрифт Arial або Times New Roman – текст буде максимально читабельний і без дратівливих елементів. Для новачків оптимальний розмір тексту — до однієї сторінки А4, від досвідчених програмістів чекають на текст побільше, але краще не перевищувати 2-х сторінок. Причому більшу частину повинні займати ваші скіли та досвід роботи.
Суцільний текст читати важко, втомлююче і не цікаво. Оформлюйте резюме таким чином, щоб воно було легким і саме просилося у вічі. Для цього структуруйте інформацію, використовуйте відступи, абзаци, лінії тощо. Наприклад, той самий розділ “Досвід” можна зобразити у вигляді таблиці. Головне — згрупувати інформацію по блокам. Все має бути лаконічно, акуратно та читабельно.
Не забувайте про грамотність написаного тексту. Перед відправкою робіть ретельну вичитку резюме — граматичні, орфографічні та пунктуаційні помилки чудово псують думку рекрутера про претендента на посаду.
До речі про фото.
Його можна як додавати, так і не додавати. Фотографія має бути гарної якості, але не з вечірки, шашликів чи інших місць підвищеної концентрації відпочиваючих. Також на ній має бути чітко видно ваше обличчя. Якщо вірити психологам, найкраще фото — на якому ви у позитивному настрої та з посмішкою. Підходящої фотографії немає? Тоді не додавайте її зовсім. У деяких країнах фото в резюме — табу через можливу дискримінацію за статевою, расовою або іншою ознакою. Також відсутність зображення дозволяє оцінювати людину за її професійними та особистісними якостями, а не за зовнішніми даними.
Формат електронного резюме.
На розгляд рекрутеру потрібно надсилати резюме у форматі PDF. Це найуніверсальніший формат електронних документів, який безпроблемно відкривається та читається на всіх можливих пристроях.
Відповідність резюме вакансії.
Також уважно переглядайте вимоги до кожної посади і, якщо необхідно, вносьте корективи в написане вами резюме таким чином, щоб було видно, що дане резюме було складено саме для відповідної вакансії — і рекрутеру зручніше, і більше шансів бути поміченим. Адже резюме, яке розсилається всім без звертання уваги на вимоги та побажання роботодавців (резюме-спам), не викликає симпатій та має великі шанси потрапити до кошику.
Резюме англійською.
Якщо вакансія складена англійською мовою, то роботодавець однозначно хоче від кандидата англомовне резюме. Навіть якщо вакансія україномовна, а ви склали та надіслали резюме на інгліші, це буде солідним плюсом, адже, як ми говорили раніше, ця мова в IT дуже важлива. Головне, не забувайте про грамотне написання. Після складання резюме дайте його на перевірку тому, хто добре знає англійську.
Неформальність у резюме.
Цікавий момент: в IT допускається неформальність у резюме програміста, наприклад – жарти. Однак це ходіння дуже тонким льодом. Якщо ви і збираєтеся в якомусь місці показати гостроту свого розуму, робіть це вміло та доречно, інакше буде тільки гірше. Але все ж таки арсенал жартів краще приберегти на саму співбесіду — там вони допоможуть і віртуозно вийти зі скрутних положень, і зарядити всіх позитивом.
Портфоліо.
Як ми вже зазначили, у пункті “Контакти” варто розмістити посилання на свій GitHub, де розміщуються ваші проєкти, які й складають ваше портфоліо. Якщо ви новачок, там повинні бути саме ті проєкти, які ви розробляли самостійно (не здерті з ютубу чи інших ресурсів). Продемонструйте роботодавцю всі свої навички та вміння в них. Дайте зрозуміти, якими технологіями та мовами володієте.
Навігація вашим портфоліо також має бути інтуїтивно зрозумілою та зручною.
Супровідний лист.
В Україні практика написання супровідного листа не є особливо популярною, проте правильне його складання може дати вам додаткову перевагу перед іншими кандидатами-конкурентами. Це лист, який доповнює резюме. Його мета — зацікавити рекрутера/роботодавця та створити гарне перше враження про себе. Структура супровідного листа наступна:
Привітання, звернення до роботодавця.
Джерело інформації про вакансію.
Відомості, що характеризують вас як фахівця.
Демонстрація зацікавленості у вакансії.
Контактні дані.
Фривольностей тут краще не допускати – дотримуйтесь офіційного стилю викладу.
Встаньте на місце рекрутера/роботодавця.
При складанні резюме час від часу абстрагуйтеся та дивіться на нього з різних боків. Чи подобається вам те, що написано? Чи є послідовність та логічність у написаному? Що можна скоротити? Як краще виділити ту чи іншу здатність/вміння/якість/технологію? Подібна рефлексія допоможе об'єктивно розглядати резюме та на виході отримати справді якісний екземпляр.
Ресурси для автогенерації резюме
Фішка двадцять першого століття – повсюдна автоматизація різних рутинних процесів. Торкнулася ця тенденція і сфери пошуку роботи. На даний момент існує безліч сервісів, які надають послуги зі створення якісного резюме. Ми ділимо їх на два типи: вбудовані та незалежні.
До першого типу належать сервіси, що знаходяться на сайтах пошуку роботи. Як приклад, така функціональність реалізована на сайтах work.ua, grc.ua тощо. Якщо раптом десь заплутаєтеся — кожен пункт містить підказки, що дуже зручно.
Також ви можете скачати створене резюме, проте воно не буде таким стильним і барвистим у порівнянні з тим, яке пропонують ресурси генерації “візитки” другого типу.
Незалежні сервіси створення резюме – спеціалізовані сайти, які мають безліч інструментів для створення ефектного зовнішнього вигляду резюме. Вам необхідно тільки обрати шаблон, котрий сподобався, налаштувати його під себе і заповнити розділи. Розкажемо про деякі з них.
LinkedIn – соціальна мережа для ділового спілкування, яка орієнтована на пошук співробітників та вакансій. При створенні облікового запису ви вказуєте різні дані про себе: місця навчання та роботи, технології та мови програмування, якими володієте, додаткову інформацію про себе, фото тощо. LinkedIn має вбудований інструмент генерації резюме, виходячи з інформації, опублікованої у вашому профілі, проте добре заповнений профіль вже певною мірою є вашою візитною карткою. І все ж, рекрутери його розглядатимуть лише у другу чергу в якості прикріпленого посилання у розділі резюме “Контакти”.
При цьому LinkedIn має одну особливість: у майбутньому, коли ви станете розробником рівня Middle+ і матимете широку мережу знайомств на цьому ресурсі (400+ осіб), жодне резюме вам більше не знадобиться — рекрутери самі вас знаходитимуть і пропонуватимуть вакантні посади. А поки ви джуніор з нульовим досвідом роботи, LinkedIn не зможе замінити вам повноцінне резюме.
Canva.com – сервіс, що дозволяє безкоштовно створити стильне та привабливе резюме за допомогою сотень різних дизайнерських шаблонів на будь-який смак. Обираєте один із них, налаштовуєте кольори, шрифти, фон та сам макет, а потім вносите вашу інформацію та фото. Зручно та просто.
Cvmaker.com — безкоштовний ресурс, який дає можливість створювати резюме, використовуючи один із дев'яти класичних шаблонів, що відрізняються своєю лаконічністю та відсутністю надмірностей. Гарний варіант для шанувальників легкого мінімалізму.
Також існує безліч інших сервісів створення резюме — використовуйте гугл і ви знайдете для себе варіант, який вам ідеально підійде.
Ну а найоригінальнішою та найефективнішою анкетою для роботодавця може бути резюме фронтенд розробника. Цей фахівець за професією розробляє веб-інтерфейси, а тому може реалізувати своє CV у вигляді веб-сайту. Демонструєте свої скіли і одночасно подаєте необхідну інформацію про себе – дуже зручно та практично.
Підсумки
Резюме розробника — це лист-запрошення на співбесіду в IT-компанію, який ви самі і складаєте. Воно має бути структурованим, інформативним і при цьому не містити нічого зайвого. Найголовніше — резюме має справити приємне враження на того, хто його переглядатиме, і принести бажане запрошення на співбесіду. Пишіть лаконічно, уникайте води, неточностей та неправди – обман все одно розкриється під час зустрічі. Відверту брехню ніхто не терпітиме. Насамперед будьте чесні з самим собою, об'єктивно оцінюючи свої знання та здібності. Звертайте на себе увагу за допомогою креативу, нестандартного підходу – ці якості завжди цінуються наймачами.
Резюме досвідченого програміста має утримувати акцент на досвіді та проєктах, над якими розробник працював: які технології були задіяні, які обов'язки виконувались, яких результатів було досягнуто тощо. Резюме програміста-початківця (junior) має спиратися більше на самостійно розроблені проєкти, амбіції, особисті якості та навички претендента, які допоможуть йому розвиватися в IT-напрямку.
Складати резюме можете самостійно або за допомогою спеціалізованих сервісів, які допоможуть додати ефектності та помітності вашому документу. Головне – не переборщити, і все буде окей. Для додаткового ефекту напишіть гарний супровідний лист, який допоможе вам виділитись серед інших кандидатів.
Дотримуйтесь наших порад, і ви неодмінно досягнете успіху!
Бажаємо здоров'я та успіхів на вашому кар'єрному шляху!
Залишайтесь на ITVDN!
10 крутих англомовних подкастів для програмістів
Автор: EnglishDom
80% всей информации в интернете, которая хоть немного касается программирования, написана на английском. И самые свежие новости и тренды всегда сначала выходят на английском, а уже потом переводятся на остальные языки.
Хотите всегда быть в курсе? Онлайн-школа английского языка EnglishDom собрала для вас топ-10 англоязычных подкастов для программистов. Максимум полезной информации, интересные темы и обсуждение нюансов и секретов, о которых многие не знают.
Итак, не будем долго рассусоливать. Поехали!
Code Newbie
Частота публикаций: 1 эпизод в неделю
Запущен в 2014 году
Требуемый уровень английского: advanced
Замечательный подкаст для тех, кто интересуется программированием, но не знает, с чего начать. В этом подкасте большое количество интервью с различными известными программистами и их историями успеха. Подкаст больше общеобразовательный, чем узконаправленный. Его будет интересно послушать и тем, кто просто интересуется, но не собирается заниматься программированием профессионально.
Каждый эпизод знакомит новичка с разными особенностями разработки и анализа данных. Здесь вы найдете огромное количество советов, которые помогут определиться со сферами дальнейшего изучения языков программирования.
Правда, английский здесь довольно сложный. Интервью дают носители языка, которые говорят быстро и не всегда внятно. Так что придется напрячься, чтобы понять абсолютно все.
Software Engineering Daily
Частота публикаций: 1 эпизод в день
Запущен в 2015 году
Требуемый уровень английского: intermediate
Просто must have для разработчиков программного обеспечения. Здесь просто огромное количество полезной информации как для новичков, так и для Senior-разработчиков.
В среднем подкасты длятся полчаса-час и очень детально раскрывают один или несколько нюансов разработки. Кроме подкастов на сайте есть большое количество специализированных статей.
Английский у лекторов почти сценический. Фразы проговариваются очень четко, темп вполне нормальный. Есть, конечно, большое количество специфической лексики, но даже для Junior’ов все вполне понятно.
Talk Python To Me
Частота публикаций: 1 эпизод в неделю
Запущен в 2015 году
Требуемый уровень английского: upper-intermediate
Если вы изучаете Python, то этот подкаст снабдит вас огромным количеством полезной информации.
Здесь вы узнаете, как правильно изучать Python, чтобы не упустить ничего важного, как использовать все нюансы архитектуры. Это огромная база знаний с более чем 260 часами записей на тему Python. Особенно рекомендуем подкаст разработчикам с уровнем Middle.
По лексике английского никаких сложностей, но нужно привыкнуть к речи лекторов. Они говорят довольно бегло, так что здесь потребуется высокий навык восприятия речи на слух.
The Cynical Developer
Частота публикаций: 2 эпизода в месяц
Запущен в 2016 году
Требуемый уровень английского: advanced
«Циничный разработчик» — это отличный подкаст, где о разработке рассказывают с юмором и иронией.
Он будет полезен не только кодерам, но также менеджерам проектов и тимлидам. Очень много информации о комплексном процессе разработки, ведению проектов, работе в команде. Также авторы рассказывают о популярных тенденциях и трендах в разработке.
Что касается английского, то здесь очень беглый язык. Некоторые слова и фразы произносятся слитно, редуцируются отдельные звуки, темп речи очень высокий. Полезной информации просто куча, но чтобы ее получить, нужен уровень английского не ниже advanced.
Coding Blocks
Частота публикаций: 2 эпизода в месяц
Запущен в 2013 году
Требуемый уровень английского: intermediate-advanced
Еще один хороший подкаст для разработчиков ПО. Широченный архив полезных материалов буквально по всем темам: от анализа big data до всех тонкостей разработки приложений на iOS и Android.
Также есть подкасты на темы личной эффективности программиста, обзоры полезных каналов, конференций и материалов для обучения. Очень удобная система тегов, по которой можно найти все эпизоды на интересующую вас тему.
Английский здесь несложный, но все зависит от конкретного лектора. Одни говорят предельно понятно, а другие — бегло и смазано. Поэтому нужно смотреть по каждому конкретному эпизоду.
Front End Happy Hour
Частота публикаций: 3 эпизода в месяц
Запущен в 2016 году
Требуемый уровень английского: intermediate
А вот и полезности для фронтенд-разработчиков подъехали. Авторы обсуждают новые инструменты, полезные для верстальщика, делятся новыми библиотеками, рассматривают распространенные проблемы и их решения.
Тонны информации для веб-разработчиков. Кстати, недавно они отпраздновали свой 100-й выпуск, с чем их и поздравляем.
Речь авторов довольно быстрая, но у них очень четкая артикуляция, поэтому в целом подкаст воспринимается очень хорошо.
Test and Code
Частота публикаций: 1 эпизод в неделю
Запущен в 2015 году
Требуемый уровень английского: upper-intermediate
Авторы цепляют большое количество тем, среди которых тестирование, разработка программного обеспечения, программирование на Python и много связанных вопросов и проблем. Базы данных, автоматизация, постоянная интеграция, пирамида тестирования, TDD — и это только небольшая часть информации, которую вы сможете получить.
Очень годный подкаст, который особенно хорошо зайдет Python-разработчикам. Но иногда бывает ужасный звук, который жутко мешает восприятию. Лексика английского довольно специализирована, поэтому для абсолютных новичков не подойдет.
Learn to Code With Me
Частота публикаций: 2 эпизода в месяц
Запущен в 2016 году
Требуемый уровень английского: intermediate
Еще один подкаст для новичков. Авторы канала реально позаботились о них, потому что здесь собрана уйма действительно полезных материалов для Junior’ов в разных отраслях программирования.
Будет очень полезным для самоучек, которые изучают программирование или веб-дизайн самостоятельно.
Язык подкаста довольно понятный, но самое главное — вместе с каждым выпуском есть ключевые моменты в текстовом формате, которые можно проработать после или прямо во время прослушивания. Так можно ознакомиться с основной лексикой и терминологией.
Fragmented
Частота публикаций: 1 эпизод в день
Запущен в 2015 году
Требуемый уровень английского: intermediate
Отличный подкаст для разработчиков мобильных приложений на Android, в котором обсуждают возможности и особенности самой платформы, ее инструментов, паттернов и практик, с помощью которых можно превратить хорошее приложение в идеальное.
Авторы сами активно занимаются разработкой приложений, поэтому обсуждают только те моменты, которые успели оценить на практике.
Большинство лекторов говорят с акцентом, что усложняет понимание материала. НО лексика вполне понятная и если привыкнуть к акцентам, можно почерпнуть много полезного.
Soft Skills Engineering
Частота публикаций: 1 эпизод в неделю
Запущен в 2016 году
Требуемый уровень английского: intermediate
Этот подкаст больше не про разработку или отдельные инструменты программиста. В нем рассказывают, как развиваться, чтобы быть грамотным специалистом. Тут много полезной информации про методики обучения программированию, организацию времени и рабочего пространства.
Рекомендуем этот подкаст всем разработчикам, вне зависимости от сферы и уровня знаний.
Английский подкаста просто отличный. Несложный, вполне себе понятный и хорошо артикулированный. Так что можно его попробовать понять даже с уровнем pre-intermediate, но лучше все же intermediate.
Конечно, еще есть большое количество полезных подкастов, которые мы здесь не упомянули. Выбирайте, какие нравятся вам больше всего, и слушайте с удовольствием. Учите английский вместе с EnglishDom и пусть код всегда будет идеальным.
Коротко про GIT, node.js, npm, Grunt, Bower на прикладі офіційного AngularJS програми angular-phonecat
Автор: Антон Гончаров
Введение
Эта статья предназначена для начинающего разработчика, который впервые столкнулся с изучением AngularJS и сопутствующими технологиями, такими как GIT, node.js, Grunt, Bower. Вы могли много читать литературы по поводу перечисленных выше технологий, в этой статье мы лишь вкратце опишем, чем по сути является каждая из них, и как с ней работать.
1. Проходим по ссылке:
https://docs.angularjs.org/tutorial
и следуем всем инструкциям по установке. Не бойтесь, мы Вам в этом поможем! И постараемся вместе разобраться в основных понятиях современного Frontend Development'a :)
Для начала нам следует установить git на свою ЭВМ :)
Коротко о git.
Git — система для контроля версий файлов. Более обширное определение - это ресурс, который позволяет разработчику или команде разработчиков контролировать версии своих приложений. Подробнее тут:
https://ru.wikipedia.org/wiki/Git
Идем по ссылке в новой вкладке:
http://git-scm.com/
и выбираем ту версию git, которая нас интересует, в соответствии с нашей операционной системой.
Скачиваем файл для установки, с расширением .exe и устанавливаем в папку Program files.
2. Идем по ссылке в новой вкладке браузера
https://github.com/
и регистрируемся. Github – самый крупный веб-сервер для хостинга (размещения) проектов разработчиков.
Итак, мы это все сделали, далее скачиваем приложение из репозитория angular-phonecat, размещенного на Github. То есть, нашей задачей теперь будет взять и скачать готовое приложение себе на жесткий диск.
3. AngularJS – это JavaScript фреймфорк, который заточен под разработку одностраничных приложений.
Официальный сайт AngularJS
https://angularjs.org/
Основной идеей AngularJS является убеждение создателей оного, что декларативное программирование (парадигма программирования - описание программы, какая она по сути, а не то, как ее создать) находит применение в разработке внешнего вида приложения, а императивное программирование (парадигма программирования – в отличие от декларативного программирования, описывает процесс вычисления в виде инструкций, по сути, пошагово изменяет инструкции программы, похоже на приказы) используется для описания бизнес логики.
AngularJS – расширяет HTML, чтобы создать двустороннюю привязку данных для динамического контента.
Цели AngularJS:
DOM-манипуляции не зависят от логики приложения.
Параллельная разработка путем разделения клиентской части и серверной части приложения.
Планирование разработчиком всех приложений – интерфейс, бизнес-логика, тестирование.
Открываем терминал/консоль и перемещаемся в ту папку, в которую хотим сохранить проект с помощью команды
cd Documents/
(эта команда означает - cd – change derictory на Documents)
и нажимаем Enter
мы переместились в папку, где хранятся документы (просто потому, что мне так удобней, можно этого не делать и остаться в корне диска).
Копируем следующую строку
git clone --depth=14 https://github.com/angular/angular-phonecat.git
вставляем в терминал/консоль и нажимаем Enter. Эта строка создает папку angular-phonecat и копирует приложение с Git с последними 14 коммитами (изменениями). Ждем окончания копирования проекта.
Далее переходим в директорию с нашим приложением командой
cd Documents/angular-phonecat
или
cd angular-phonecat/
после жмем Enter и оказываемся в папке с приложением
4. У нас на жестком диске есть наше приложение, теперь нам следует установить node.js.
Node.js – что такое node.js? Есть много статей, определений и объяснений. В общем и коротко:
Node.js – это интерпретатор JavaScript. Приложение node.js получает js код и выполняет его.
Нам надо установить node.js в папку с нашим приложением.
Переходим по ссылке:
http://nodejs.org/download/
качаем приложение и устанавливаем.
5. Вместе с node.js устанавливается и npm. Что такое npm?
Npm – это node package manager. Npm устанавливает пакеты, которые прописаны в файле package.json
перед установкой npm нам следует проверить, какая версия node.js установлена у нас. Это мы делаем командой в терминале:
node –-version
есть :)
Теперь в терминале набираем следующее:
npm install
На выходе получаем такую структуру нашего проекта:
Файл package.json содержит в себе информацию о приложении, название, версию, установленные пакеты в приложении. Возможна установка пакетов как через файл package.json, так и через терминал.
6. Это не обязательно, но в будущем этот пакет Вам пригодится.
Grunt – это Task Runner – автоматизатор процессов, позволяет проводить минификацию кода, сборку кода(компиляцию), тестирование.
В терминале вводим следующее:
npm install -g grunt-cli
(-d - говорит о том, что мы устанавливаем grunt глобально.) Дополнительно устанавливаем в директорию с приложением
npm install grunt-cli
теперь обновляем npm:
sudo npm update npm -g
sudo - (substitute user and do – подменить пользователя и выполнить) – в Unix системах позволяет пользователям выполнять команды от имени суперпользователя root.
В директории с приложением требуется создать файл Gruntfile.js, вложим в него код из официального примера
http://gruntjs.com/sample-gruntfile
в конце страницы - конечная версия файла, копируем код себе в файл. Или копируем отсюда:
module.exports = function (grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
concat: {
options: {
separator: ';'
},
dist: {
src: ['src/**/*.js'],
dest: 'dist/<%= pkg.name %>.js'
}
},
uglify: {
options: {
banner: '/! <%= pkg.name %> <%= grunt.template.today("dd-mm-yyyy") %> /\n'
},
dist: {
files: {
'dist/<%= pkg.name %>.min.js': ['<%= concat.dist.dest %>']
}
}
},
qunit: {
files: ['test/**/*.html']
},
jshint: {
files: ['Gruntfile.js', 'src/**/*.js', 'test/**/*.js'],
options: {
// options here to override JSHint defaults
globals: {
jQuery: true,
console: true,
module: true,
document: true
}
}
},
watch: {
files: ['<%= jshint.files %>'],
tasks: ['jshint', 'qunit']
}
});
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-qunit');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.registerTask('test', ['jshint', 'qunit']);
grunt.registerTask('default', ['jshint', 'qunit', 'concat', 'uglify']);
};
Пакеты, которые мы прописали в Gruntfile.js, следует установить через npm следующими командами:
npm install grunt-contrib-uglify --save-dev
npm install grunt-contrib-qunit --save-dev
npm install grunt-contrib-concat --save-dev
npm install grunt-contrib-jshint --save-dev
Подробнее об установленных пакетах можно прочитать тут:
https://github.com/gruntjs/grunt-contrib-uglify
https://github.com/gruntjs/grunt-contrib-qunit
https://github.com/gruntjs/grunt-contrib-concat
https://github.com/gruntjs/grunt-contrib-jshint
https://github.com/gruntjs/grunt-contrib-watch
7. Установка Bower и что это такое.
Bower – менеджер пакетов для клиентской стороны приложения JS.
Отличием Bower от Npm есть то, что Bower, если возникнет конфликт, не позволит Вам поставить несовместимый пакет(библиотеку), которая уже установлена, Bower ставит одну версию пакета.
В терминале ставим глобально bower и пишем:
npm install -g bower
и конечно ставим в директорию с проектом
bower install
8. Сongrats !!!
Теперь у нас установлено приложение и мы можем запускать его, из файловой системы заходим в папку с приложением, потом в папку – app, находим файл и тапаем (двойной клик) по нему index.html или (что будет правильным) нужно зайти в терминал и ввести:
npm start
(запускаем сервер) и в браузере в омнибоксе (адресной строке) ввести:
http://localhost:8000/app/index.html
Wuala – наше приложение запускается и работает.
Подробнее об AngularJS и как с ним работать вы можете узнать из курса AngularJS в учебном центре CyberBionic Systematics.
Всем спасибо и удачного кода.
ТОП 10 найкращих HTML редакторів
Автор: Армен Маїлян
Що таке редактор HTML?
WYSIWYG редактори
Текстові HTML редактори
Найкращі HTML редактори
Visual Studio Code
Notepad++
Sublime Text
WebStorm на базі IntelliJ
Vim
Eclipse
Atom
Adobe Dreamweaver CC
Brackets
CoffeeCup HTML редактор
HTML-Online
Висновок
Що таке редактор HTML?
Якщо спростити відповідь на поставлене запитання, HTML редактор — це програма-інструмент, яка використовується для написання основи веб-сайтів. І, незважаючи на те, що практично будь-який текстовий редактор може використовуватися для створення сайтів, це зовсім не означає, що краще використовувати звичайний текстовий редактор замість спеціально створеного інструменту розробника. Сучасні HTML редактори мають безліч вбудованих механізмів, котрі істотно спрощують роботу з сайтами. Виділення спеціальних синтаксичних конструкцій, перевірка помилок, підказка та вставка часто використовуваних елементів коду HTML, механізми автозаповнення – ці та багато інших механізмів сучасних HTML редакторів щодня полегшують роботу програмістів, верстальників та дизайнерів.
Однак редактор HTML — це зовсім не одна програма. Це група програм, кожна з яких має свій функціонал, свої особливості використання, свій набір плюсів та мінусів. Завдання такого інструменту, як HTML редактор, – зменшити витрачені вами зусилля, щоб ваш код залишався функціональним і чистим.
Які ж бувають HTML редактори? Класифікуючи їх за функціональним призначенням і можливостями, виділяють: WYSIWYG редактори і текстові редактори HTML.
WYSIWYG редактори
WYSIWYG (What You See Is What You Get) – абревіатура редакторів цього типу перекладається як «що бачиш, те й отримаєш». Інша назва таких редакторів – візуальні редактори HTML. Фактично, завдання цього типу редакторів – надати інтерфейс редагування, в якому можна відразу побачити, як виглядатиме реалізація коду на сторінці діючого сайту в браузері. Для найпростішої роботи в редакторі цього типу не потрібне знання HTML. З роботи в такому редакторі простіше стартувати користувачу-початківцю, який не має досвіду написання коду.
Такий тип редакторів часто вбудовують у веб-сайти — для спрощення налаштування зовнішнього вигляду сайту за деякими заздалегідь написаними шаблонами або для редагування контенту сайту.
Текстові HTML редактори
Власне, як зрозуміло з назви, цей тип HTML редакторів орієнтований безпосередньо на роботу з текстом (кодом). Щоб використовувати такий редактор, вам знадобляться знання як мінімум мови HTML. У процесі використання такого редактора ви не зможете постійно спостерігати готову реалізацію сторінки веб-сайту, що розробляється.
Проте застосування текстового редактора дає розробнику значно більше свободи, можливостей оптимізації коду та ін.
Найкращі HTML редактори
Ми розглянули, що таке HTML редактор і кілька прикладів того, коли той чи інший тип редакторів можуть використовуватися. Розглянемо декілька популярних продуктів для розроблення, і спробуємо визначити, який текстовий редактор більше підійде для вирішення ваших завдань.
Вибір інструменту розроблення – питання смаку. Кожен професійний розробник робить цей вибір, виходячи з власних уподобань, з того, як він працюватиме з HTML редактором. Однак є ряд редакторів коду, яким розробники віддають перевагу найчастіше.
Stack Overflow щорічно складає рейтинг інструментів розробників, що використовуються найчастіше. Розглянемо результати цього опитування серед веб-розробників за 2018 рік.
Visual Studio Code
Випущений компанією Microsoft на основі коду Atom, Visual Studio Code має частину функціоналу IDE (Integrated development environment) — інтегрованого середовища розроблення — потужної програми, що містить окрім текстового редактора коду ще ряд механізмів, які дозволяють проводити аналіз коду, запуск його та налагодження. Часто уявляють саме цей інструмент, коли говорять про те, який функціонал повинне мати IDE для веб-розроблення. У багатьох рейтингах безкоштовних HTML редакторів саме Visual Studio Code займає перше місце — розробники надають йому перевагу все частіше і частіше. Так, наприклад, за даними Stack Overflow, цей редактор у 2017 році використовували 24% веб-розробників, а у 2018 році – вже 38,7%.
Плюси Visual Studio Code
Має значну частину функціоналу IDE.
Вбудований потужний механізм автозаповнення IntelliSense.
Значна кількість розширень та доповнень.
Інтегрований з Git "з коробки".
Є вбудований налагоджувач для коду JavaScript, TypeScript, Node.js
Відкритий вихідний код додатку.
Visual Studio Code розповсюджується безкоштовно.
Мінуси Visual Studio Code
З мінусів розробники відзначають досить великий час запуску програми.
Пошук за проєктами здійснюється відносно повільно.
Notepad ++
Notepad++ – це текстовий редактор, що займає небагато місця в оперативній пам`яті комп`ютера. Він розроблений для комп'ютерів під керуванням Windows. Користувачі Linux можуть використовувати його через Wine. Notepad++, випущений ще в 2003 році, є перевіреним та усталеним інструментом багатьох розробників, будучи зручним текстовим редактором для HTML коду. Цей редактор поширюється як безкоштовне програмне забезпечення, а його репозиторій доступний у GitHub. Notepad++ підтримує сторонні плагіни.
Основні переваги Notepad++
Notepad++ є простим, невимогливим до ресурсів інструментом.
Є портативна версія.
Функціонал програми легко розширюється безліччю плагінів. За бажанням такий плагін можна створити самому.
Інтерфейс програми також легко налаштовується.
Підтримується робота з великою кількістю вкладок одночасно.
Notepad++ є на 100% безкоштовною програмою.
Недоліки Notepad++
Переважна більшість користувачів цього текстового редактора HTML коду не знаходять у ньому недоліків. Однак можна відзначити деяку мінімалістичність інтерфейсу, яка не підходить ряду користувачів.
Також можна відзначити, що цей редактор не є IDE і не містить у собі його додатковий функціонал. З цієї причини багатьом користувачам доводиться використовувати якесь середовище розробки у якості додаткового інструменту до редактора Notepad++.
Sublime Text
Ще одним прикладом чудового текстового редактора для HTML є Sublime. Ця програма постачається безкоштовно з деякими обмеженнями. Іншими словами — ви можете використовувати Sublime безкоштовно, але вам доведеться купити ліцензію, якщо ви захочете скористатися всіма функціями цього редактора.
Sublime пропонує гарну підтримку, забезпечуючи постійний вихід актуальних оновлень. Користувачі можуть додавати плагіни, створені спільнотою, або створювати власні. Для значної частини розробників використання безкоштовної версії Sublime буде цілком достатнім. Якщо вам знадобиться більше можливостей, ви зможете придбати ліцензію пізніше.
Плюси Sublime
Кросплатформенність. Sublime працює у таких операційних системах, як Windows, macOS та Linux.
Sublime є інструментом, що споживає небагато ресурсів системи, тому він її не завантажує.
Є портативна версія.
Sublime надає тисячі різних доповнень з відкритим вихідним кодом, які створені великою та активною спільнотою.
Роздільне редагування. Розробники можуть використовувати кілька моніторів та редагувати різні ділянки коду одночасно.
Недоліки Sublime
Не весь функціонал доступний користувачеві безкоштовно.
Рядом користувачів відзначається незручність роботи з менеджером плагінів.
Ряд плагінів сторонніх розробників може працювати некоректно.
WebStorm на базі IntelliJ
WebStorm – дуже зручне середовище для web розроблення. WebStorm було розроблене компанією JetBrains на основі іншого їхнього продукту IDE IntelliJ.
Плюси WebStorm
Зручне автодоповнення як коду на HTML, CSS, так і на JavaScript.
Перевірка на наявність помилок та зручне налагодження коду забезпечується за допомогою інтеграції з низкою систем відстежування помилок.
Вбудована інтеграція з такими системами керування версіями, як GitHub, Git, а також Subversion, Perforce та Mercurial.
Гнучкість налаштувань.
Досить велика кількість плагінів.
Недоліки WebStorm
Властива всім IDE повільність у роботі та вимогливість до ресурсів.
Відносно складні налаштування.
Платна IDE, що розповсюджується за передплатою.
Vim
Vim (скорочення від Vi Improved) – це потужний портативний текстовий редактор з дуже багатою історією – йому вже понад 27 років. Має багатий функціонал з можливістю глибокого налаштування програми під себе. В оригінальному вигляді працює у вікні консолі. Можна використовувати версію із графічним віконним інтерфейсом – Gvim. Варто відзначити, що багато сучасних IDE — для поліпшення процесу розробки — містять емулятор функціональності Vim.
Плюси використання Vim
Повноцінна робота в багатьох операційних системах - Windows, Linux, Amiga, Mac OS X, Unix, OpenVMS, OS/2.
Глибоке налаштування роботи редактора під себе.
Дуже низькі вимоги до ресурсів. І, відповідно, — висока швидкість роботи.
Можливість редагування або перегляду файлу на віддаленому сервері через термінал
Більше 14 000 доступних пакетів розширень.
Недоліки Vim
Один із найскладніших для вивчення інструментів розробки. Високий поріг входження вимагає від користувача значних витрат часу на запам'ятовування його особливостей, команд, плагінів тощо.
Eclipse
Використання програми Eclipse як HTML редактору часто вважається надмірним. Будучи повноцінною та багатофункціональною системою розробки, вона, ймовірно, буде надто складною для написання коду на HTML та CSS. Повноцінно свої можливості Eclipse зможе проявити при розробці складних сайтів, підв'язаних на роботу з кількома базами даних і додатковими механізмами.
Часто Eclipse використовують для роботи зі сторінками, написаними на Java, PHP, JavaScript та інших мовах програмування.
Плюси Eclipse
Повноцінна IDE з усім переліком можливостей потужного інструменту розроблення.
Кросплатформенність у роботі з Windows, macOS, Linux.
Значна кількість розширень та аддонів, які допомагають гнучко налаштовувати Eclipse під різні завдання.
Приналежність Eclipse до вільного програмного забезпечення.
Мінуси Eclipse
Складність налаштування цієї IDE.
Надмірна перевантаженість як для розроблення простих сайтів на HTML та CSS.
Велика ресурсоємність.
Atom
Атом – це порівняно новий HTML редактор. Він був випущений у 2014 році командою GitHub, і з того часу, за підтримки спільноти GitHub, значно збільшив свою популярність. Цей текстовий редактор є безкоштовним, з відкритим кодом. Цікаво, що у якості слогану для Atom використовується фраза “найбільш зламаний текстовий редактор 21 століття”, маючи на увазі, що будь-який розробник може робити свій внесок у редагування, розширення, зміну та обмін вихідним кодом програми, а також створювати власні пакети для покращення Atom.
Які можливості дає Atom
Atom є кросплатформенним додатком і працює в таких операційних системах, як Windows, macOS і Linux.
Завдяки розумному механізму автозаповнення Atom допомагає швидше писати код.
Особливість інтерфейсу Atom дозволяє розбивати інтерфейс на безліч вікон, щоб ви могли порівнювати та писати код у цих вікнах одночасно.
Atom є просунутим текстовим редактором, який отримав можливості IDE завдяки різним плагінам.
Підтримує у розробленні такі мови, як: HTML, CSS, JavaScript, Python, XML, PHP, Java, SQL, C# та багато інших.
Плюси Atom
Для Atom є велика кількість доповнень, плагінів та розширень. Відак, “з коробки” Atom поставляється з 81 вбудованим пакетом, і ви також можете додати до 7500 додаткових встановлюваних пакетів. Ви також можете розробити власний пакет.
Наявність великої кількості доповнень дозволяє гнучко налаштовувати інтерфейс редактора.
Відкритий вихідний код. Весь редактор Atom розповсюджується безкоштовно, надаючи вихідний код, доступний на GitHub.
Відмінна інтеграція з Git та GitHub.
Підтримка плагіну Teletype. Цей плагін дозволяє безпосередньо в режимі реального часу писати код спільно з іншими розробниками.
Мінуси Atom
Atom є досить «ненажерливою» програмою, забираючи на себе відносно великий обсяг оперативної пам'яті.
Підтримка тих чи інших мов визначається функціоналом плагінів, написаних різними розробниками, а не єдиною організацією.
Розглянемо ще ряд додатків, що часто застосовуються у якості HTML редакторів.
Adobe Dreamweaver CC
Програма Adobe Dreamweaver CC, розроблена та керована технологічним гігантом Adobe Inc., є потужним та універсальним інструментом преміум-класу. Вона обслуговує як back-end, так і front-end розроблення. Як програмне забезпечення із закритим вихідним кодом, Dreamweaver призначений для роботи в екосистемі Adobe. Adobe також надає підтримку, плагіни та функції, щоб ви завжди могли без проблем писати код.
Dreamweaver — це один із редакторів, які підтримують як текстові, так і WYSIWYG методи роботи з кодом. Багато користувачів цієї програми вважають Dreamweaver найкращим візуальним редактором коду. Таким чином, ви можете вибирати, чи ви хочете працювати з візуальним поданням сторінки або йти класичним шляхом редагування тексту.
Основні переваги Dreamweaver CC.
Dreamweaver дозволяє писати код будь-якою з основних мов програмування.
Підтримує текстові та WYSIWYG режими редактора.
Зручний перегляд. Можливість побачити, як виглядає тег, виділивши його.
Повністю інтегрований із програмною екосистемою Adobe.
Приголомшлива продуктивність.
Підтримка Adobe Inc.
Підписка на Dreamweaver дає доступ до ряду хмарних бібліотек, що містять величезний обсяг графіки, стилів, шарів та багато іншого.
Недоліки Adobe Dreamweaver CC
Основним недоліком цього редактора є ціна та умови розповсюдження. Як і інші продукти компанії Adobe, Dreamweaver CC поширюється лише за умови передплати.
Brackets
Brackets — це програмний продукт Adobe, розроблений спеціально для дизайнерів та фронтенд розробників, котрий побачив світ у 2012 році. Цей молодий текстовий редактор, що розповсюджується, на відміну від Dreamweaver, безкоштовно, не може похвалитися великим вибором плагінів, проте відмінно працює з HTML, CSS і JavaScript – основними мовами фронтенд-розробника.
Плюси Brackets
Зв'язок із Google Chrome. Основна особливість редактора Brackets, що виділяється багатьма розробниками, — зв'язок із Google Chrome у режимі реального часу. За допомогою цього механізму розробник може відразу після внесеної зміни спостерігати, як усі ці зміни відображатимуться в браузері.
Доступність на Windows, macOS, Linux.
Brackets визнаний одним із найкращих текстових редакторів під macOS.
Широко розвинена система гарячих клавіш.
Основною особливістю, яка відрізняє Brackets від інших HTML-редакторів, є функція «Вилучити». Функція вилучення дозволяє витягувати інформацію прямо з PSD — таку як шрифти, кольори та вимірювання, з чистим CSS та без контекстних посилань на код.
Мінуси Brackets
Невелика кількість розширень порівняно з іншими редакторами на ринку.
Відсутність підтримки серверних мов (Python, PHP, Ruby).
CoffeeCup HTML редактор
HTML редактор CoffeeCup представлений на ринку як безкоштовною, так і платною версією. Незважаючи на слабку поширеність у російськомовному сегменті Інтернету, HTML редактор CoffeeCup досить популярний за кордоном. Випущений вперше ще 1996 року, до 2008 року редактор було продано вже числом 30 млн. копій.
Плюси CoffeeCup
У платній версії є окрім текстового ще й WYSIWYG-редактор.
CoffeeCup повністю сумісний із платформами Windows та macOS.
Платна версія HTML-редактора CoffeeCup включає в себе бібліотеку тегів, перевірку HTML і CSS, завершення ймовірного коду тощо.
Зручне автозаповнення тегів.
Недоліки CoffeeCup
Значна частина функціоналу та матеріалів бібліотеки представлена лише у платній версії.
HTML-Online
Завершимо наш огляд популярних HTML редакторів зручним інструментом для створення та редагування коду прямо в браузері — HTML-Online. HTML-Online є простим та зручним редактором веб-сторінок. Він, ймовірно, один з найкращих візуальних HTML редакторів серед онлайн сервісів. Завдяки сервісу HTML-Online ви зможете почати писати коди вашого нового сайту прямо в браузері, без необхідності завантажувати та встановлювати відповідну програму.
Переваги HTML-Online
Є як текстовим, так і візуальним редактором, дозволяючи спостерігати за результатами написання у процесі розробки.
Зручна конвертація файлів із формату документів Word у HTML, що дозволяє відразу застосовувати правила HTML розмітки до матеріалів із Word-івських файлів. Вбудована підтримка роботи з документами Excel, PDF та іншими форматами.
Простий графічний редактор HTML.
Недоліки HTML-Online
Основним недоліком онлайн текстових редакторів взагалі і HTML-Online зокрема є необхідність писати код відразу. Якщо ви не напишете проєкт за раз, або у вас перерветься інтернет-з'єднання, то доведеться робити проєкт спочатку.
Функціонал онлайн редакторів виглядає бліднішим на тлі можливостей повноцінних додатків.
Висновок
У кожного практикуючого розробника є можливість самому вибрати для себе відповідний інструмент-редактор зі своїм функціоналом «з коробки» та доступними плагінами.
Ми розглянули ряд редакторів, визнаних більшістю розробників найкращими HTML редакторами. Чи зможемо вибрати серед них найкращий редактор веб-сторінок? На жаль, ні.
Як видно, для полегшення роботи фронтенд розробника існує безліч різноманітних додатків, що відрізняються як вбудованим функціоналом та дизайном, доступом до плагінів та додаткових бібліотек, так і порогом входження та доступними платформами, на яких працюють редактори. Ці різноманітні додатки – лише інструменти в руках людини, котрі застосовуються, виходячи з конкретного завдання й особистих смаків.
Не так важливо, щоб ви одразу обрали для себе один раз і назавжди зручний текстовий редактор для HTML, як важливо, щоб Ви продовжували писати нові сайти, вчилися новим технологіям та відкривали для себе нові інструменти без припинення навчання.
Як правильно працювати з REST API
Автор: Zell Liew
Коротко про мене
Мене звати Зел, я розробник-фрілансер із Сінгапуру. У вільний від роботи час я люблю розбиратися в коді і принагідно публікувати у своєму блозі ті цікавості, які я виявив чи вивчив.
Вступ
Швидше за все вам уже доводилося чути про такий термін, як REST API, особливо якщо ви стикалися з необхідністю отримання даних з іншого джерела (такого як Twitter або GitHub). Але що ж все-таки це таке? Що ми можемо робити з цим і як ми можемо це використовувати?
У цій статті ви дізнаєтеся все про REST API для того, щоб працювати з ними та читати пов'язану з ними документацію.
Що ж таке REST API?
Давайте уявимо, що ви намагаєтеся знайти фільми про Бетмена на YouTube. Ви відкриваєте сайт, вбиваєте у форму пошуку слово «Бетмен», тиснете «Окей» і бачите список фільмів про супергероя. Так само працює і WEB API. Ви шукаєте щось і отримуєте список результатів від ресурсу, до якого здійснюєте запит.
Дослівно API розшифровується як Application Programming Interface. Це набір правил, що дозволяє програмам спілкуватися одна з одною. Розробник створює API на сервері та дозволяє клієнтам звертатися до нього.
REST – це архітектурний підхід, що визначає, як API мають виглядати. Читається як "Representational State Transfer". Цьому набору правил і слідує розробник під час створення свого застосунку. Одне з цих правил каже, що при зверненні до певної адреси ви повинні отримувати певний набір даних (ресурс).
Кожна адреса - маршрут, пакет даних - запит, у той час як результуючий ресурс – відповідь.
Анатомія запиту
Важливо розуміти структуру запиту:
Маршрут відправки.
Тип методу.
Заголовки.
Тіло (або дані).
Маршрут – це адреса, за якою надсилається ваш запит. Його структура приблизно така:
Root-endpoint - це точка прийому запиту на стороні сервера (API). Наприклад, кінцева точка GitHub - https://api.github.com.
Шлях визначає ресурс, до якого здійснюється запит. Це щось на кшталт автовідповідача, який просить вас натиснути 1 для одного сервісу, 2 для іншого і так далі.
Для розуміння того, які саме шляхи вам доступні, вам слід переглянути документацію. Наприклад, припустимо, ви хочете отримати список репозиторіїв для конкретного користувача на Git. Згідно з документацією, ви можете використати наступний шлях для цього:
Вам слід підставити під пропуск ім'я користувача. Наприклад, щоб знайти список моїх репозиторіїв, ви можете використати маршрут:
Остання частина маршруту – це параметри запиту. Технічно запити не є частиною REST-архітектури, але на практиці зараз все ґрунтується на них. Тож давайте поговоримо про них детальніше. Параметри запиту дозволяють використовувати у запиті набори пар «ключ-значення». Вони завжди починаються знаком питання. Кожна пара параметрів після чого розділяється амперсандом (щось подібне до цього):
Як тільки ви намагаєтеся отримати список репозиторіїв для користувача, ви додаєте ці три опціональні параметри і після чого отримуєте наступний результат:
Якщо ж ви бажаєте отримати список моїх недавно запушених репозиторіїв, вам слід ввести наступне:
Отже, як же зрозуміти, що маршрути робочі? Що ж, настав час перевірити їх на практиці!
Тестування за допомогою Curl
Ви можете надіслати запит за допомогою будь-якої мови програмування. JavaScript може використовувати методи на кшталт Fetch API або JQuery`s Ajax Method. Рубі використовує інше. І так далі.
У цій статті я використовуватиму таку утилітку, як Curl. Справа в тому, що вона вказана в офіційній документації для веб-сервісів. Якщо ви зрозумієте, як використовувати цю утиліту, ви зрозумієте, як працювати з API. Після чого ви можете робити запити будь-якою зручною для вас мовою.
Перед тим, як продовжити, слід переконатися, що Curl встановлений на вашій машині.
Якщо ж він не встановлений, саме час встановити. У такому разі ви отримаєте помилку "command not found".
Для того щоб використовувати утиліту, необхідно ввести наступне (за прикладом):
І як тільки ви підтверджуєте введення, ви отримуєте відповідь (на зразок цього):
Щоб отримати список користувацьких репозиторіїв, вам слід змінити запит за тим же принципом, який був обговорений раніше. Наприклад, щоб отримати список моїх репозиторіїв, вам слід ввести наступне:
Якщо ж ви бажаєте включити параметри запитів, переконайтеся, що ви їх екрануєте. Справа в тому, що без екранування знаки питання і рівності розцінюються системою як спецсимволи і виконання команди відбудеться з помилкою.
Також спробуйте інші команди та зробіть запити! В результаті ви отримуєте схожі відповіді.
JSON
JSON – JavaScript Object Notation – загальний формат для надсилання та прийому даних за допомогою REST API. Відповідь, що відправляється Github, також міститься у форматі JSON.
Зміст об'єкту цього формату приблизно наступний:
Повертаємось до анатомії запиту.
Ви вивчили, що запит складається із чотирьох частин:
Маршрут відправки.
Тип методу.
Заголовки.
Тіло (або дані).
Тепер давайте спробуємо розібратися з рештою.
Тип методу
Метод позначає тип запиту, який здійснюється; де-факто він є специфікацією операції, яку повинен здійснити сервер. Усього існує п'ять типів запитів:
GET
POST
PUT
PATCH
DELETE
GET – використовується для отримання з боку серверу певного ресурсу. Якщо ви здійснюєте цей запит, сервер шукає інформацію та відправляє її вам назад. По суті, він здійснює операцію читання на сервері. Дефолтний тип запитів.
POST – необхідний для створення певного ресурсу на сервері. Сервер створює в базі даних нову сутність та сповіщує вас, чи був процес створення успішним. По суті, це операція створення.
PUT та PATCH – використовуються для оновлення певної інформації на сервері. У такому разі сервер просто змінює інформацію існуючих сутностей у базі даних та повідомляє про успіх виконання операції.
DELETE – як і випливає з назви, видаляє вказану сутність із бази чи сигналізує про помилку, якщо такої сутності в базі не було.
Сам же API дозволяє вказати, який метод має бути використаний у певних контекстних ситуаціях.
GET запит у цьому випадку необхідний, щоб одержати список всіх репозиторіїв зазначеного користувача. Також можна використовувати curl:
Спробуйте надіслати цей запит. Як відповідь ви отримаєте вимогу про аутентифікацію.
Заголовки
Заголовки використовуються для надання інформації як клієнту, так і серверу. Взагалі, їх можна використовувати для багато чого; наприклад, та сама автентифікація та авторизація. На офіційній сторінці MDN можна знайти список доступних заголовків.
Заголовки являють собою пари ключів-значень. Приклад:
Також приклад із використанням curl:
(Примітка: заголовок Content-Type у випадку Github для роботи не є обов'язковим. Це всього лише приклад використання заголовка в запиті, нічого більше).
Для перегляду надісланих заголовком даних можна використовувати наступне:
Тут зірочка відноситься до додаткової інформації, наданої за допомогою curl. > відноситься до заголовків запиту, а <, відповідно, - до заголовків відповіді.
Щоб надіслати інформацію з curl, використовуйте наступне:
Для відправки множинних полів ми можемо використати декілька подібних конструкцій:
Також, якщо необхідно, ви можете розбити ваш запит на декілька ліній для забезпечення більшої читабельності:
Якщо ви знаєте, як розгорнути сервер, ви можете створити власний API та протестувати свої запити. Якщо ж ні, обов'язково спробуйте. Існує безліч інформації, присвяченої цьому.
Якщо ж бажання розгортати свій сервер немає, спробуйте безкоштовну опцію Request bin.
Після чого ви отримаєте адресу, яку спокійно зможете тестувати.
Переконайтеся, що ви створюєте власний request bin, якщо ви хочете протестувати саме ваш запит. Зважайте на те, що дефолтний час існування request bin – 48 годин. Тому ті приклади адрес, які я тут наводжу, на момент прочитання статті давно застаріли.
Тепер спробуйте надіслати деяку інформацію, після чого оновіть свою сторінку.
Якщо все пройде успішно, ви побачите наступне:
За замовчуванням curl відправляє дані так, ніби вони були відправлені за допомогою полів форм. Якщо ви бажаєте надіслати дані через JSON, ваш Content-Type повинен дорівнювати application\json, внаслідок чого вам необхідно відформатувати дані у вигляді JSON-об'єкту.
По суті, це все, що вам необхідно знати про структуру запиту.
Тепер давайте згадаємо про аутентифікацію. Що ж це таке і навіщо вона потрібна?
Аутентифікація
Ви б не дозволили нікому чужому отримати доступ до вашого банківського рахунку без спеціального дозволу, чи не так? За таким же принципом розробники не дозволяють неавторизованим користувачам робити на сервері все, що їм заманеться.
Оскільки POST, PUT, PATCH, DELETE запити змінюють базу даних, розробники повинні завжди бути на варті неавторизованого доступу до них. Проте іноді GET запити також вимагають аутентифікації (наприклад, коли ви хочете переглянути стан вашого банківського рахунку).
У випадку з вебом існує два способи представитися системі:
Через нік і пароль (базова автентифікація)
Через секретний токен
Секретний токен дозволяє представити вас системі через соцмережі на кшталт Github, Google, Twitter і так далі.
Тут же я розгляну лише базову автентифікацію.
Для виконання базової аутентифікації ви можете використовувати наступне:
Спробуйте залогінитися під свій профіль за запитом, вказаним вище. Як тільки ви успішно увійдете у свій профіль, ви побачите відповідь "problems parsing JSON".
Чому? Все просто: системі ви представилися, але - от біда - нічого корисного їй не надали. Усі типи запитів потребують певної інформації.
Тепер же давайте поговоримо про статус-коди та можливі помилки.
Статус-коди та можливі помилки
Деякі з повідомлень, наведених вище, якраз і належать до кодів помилок. Логічно, що вони з'являються лише тоді, коли щось іде не зовсім так, як було заплановано. Що ж до статусу кодів, вони дозволяють вам пізнати успіх (або невдачу) під час виконання певного запиту. Бувають статус-коди від 100 до 500+. Загалом їх можна поділити на такі групи:
200+: запит успішний
300+: запит перенаправлений на інший маршрут
400+: помилка на стороні клієнта
500+: помилка на стороні сервера
Ви можете відлагодити статус відповіді за допомогою –v або –verbose. Наприклад, я спробував отримати доступ до певного ресурсу без авторизації. Відповідно, я спіймав помилку:
У випадку ж, коли запит невірний через помилку в самій інформації, що передається, ви отримуєте статус-код 400:
Версії API
Час від часу розробники оновлюють свої API. Іноді оновлення можуть бути такими сильними, що розробник бажає здійснити реліз нової версії. У такому випадку, якщо ваш застосунок ламається, це відбувається через те, що ви писали код з урахуванням старого компонента, тоді як новий дещо відрізняється в плані реалізації.
Запросити поточну версію API можна двома шляхами.
Через маршурт
Через заголовок
Наприклад Твіттер використовує перший спосіб. На момент написання версія Twitter API була 1.1.
Водночас GitHub використовує інший спосіб:
На закінчення
У цій статті ми розглянули, що таке REST API і як його можна використовувати спільно з curl. Крім того, ви також вивчили, як залогінитись за допомогою запиту і що таке статус-код.
Я щиро сподіваюся, що ця стаття дозволила вам підвищити свій рівень загальних і не дуже знань щодо такого важливого аспекту веб-розробки. Буду радий будь-яким вашим коментарям тут.
Автор перекладу: Євген Лукашук
Джерело
Ще більше матеріалів на цю тему:
ASP.NET Core Web API. Практичний курс
ASP.NET WEB API 2
REST API в Node.js
JAX-RS Client API. Asynchronous REST
Створення API на PHP та JavaScirpt
10 заповідей Node.js розробника
Автор: Редакція ITVDN
10 отменных советов как стать лучшим Node.JS разработчиком 2018 года от автора Азата Мардана. Эта статья содержит в себе собранный и тщательно отфильтрованный опыт писателей и спикеров технологии всего Веб-сообщества.
Заметка: первоначально заголовком статьи должно было быть «Лучшие практики Node.JS от Гуру Технологии». Эта статья охватывает не «новые» и «лучшие» практики 2017-2018 года, а тщательно выверенные и проверенные временем и практикой паттерны, которые стопроцентно приведут к успеху. И хотя многие из проверенных практик Вам определенно пригодятся в 2018, 2019 и даже более поздних годах, статья не включает в себя такие новшества, как async/await и прочее. Почему? Потому что эти фичи не включены в состав, собственно говоря, кода Node.JS-ядра или кода таких популярных проектов как npm, Express и прочие.
Полноценно заниматься разработкой на Node.JS я начал в 2012 году, когда присоединился к Storify. С тех пор я никогда не жалел о принятом решении и не ощущал, как будто я многое потерял, закинув Python, Ruby, Java или PHP – языки, с которыми я работал на протяжении предыдущего десятилетия.
Работа в компании Storify для мня оказалась достаточно интенсивной. В отличии от большинства компаний, все приложения Storify работают исключительно на JavaScript. Как вы понимаете, большинство компаний, особенно такие крупные как PayPal, Walmart или Capital One, используют Node.JS только для конкретных определенных задач. Как правило, это gateway API. Однако, с точки зрения программиста, ничего не может быть лучше, чем работа и погружение с головой в одну определенную технологию.
Краткая сводка:
Избегайте нагромождения – пытайтесь разбивать свой код на столько мелких составных частей, насколько это вообще возможно. И даже больше.
Используйте асинхронный подход – избегайте синхронное программирование словно чумы.
Избегайте блокировки потоков – помещайте ВСЕ требуемые утверждения в начало файла, ибо они синхронные и, следовательно, будут блокировать программу.
Require должен быть закеширован – считайте, это такая фича в Вашем коде. Или баг. Как Вам угодно.
Всегда проверяйте свой код – ошибки – это не вышивание, которое можно выбросить в любом момент. Никогда не упускайте обнаруженные ошибки!
Используйте try…catch только в синхронном потоке – try…catch бесполезен в асинхронном коде. Кроме того, v8 никогда не оптимизирует try…catch-код.
Возвращайте значения или используйте if…else – просто на всякий случай: возвращайте значения что бы остановить выполнение участка кода.
Обращайте внимание на события ошибок – почти все Node.JS-классы или объекты реализуют паттерн-наблюдатель и производят события-ошибки. Не стоит пропускать их.
Познайте свой npm – устанавливайте модули с ключами –S или –D вместо –save или –save-dev.
Используйте текущие версии в package.json – при работе с npm он по-тупому просто добавляет верхнюю скобочку по умолчанию при использовании вместе с ключом –S. Дабы избежать этого, просто вручную блокируйте версии. Никогда не доверяйте semver в своих приложениях, но доверьтесь ему в модулях с открытым исходным кодом.
Бонус – используйте разные зависимости. Помещайте то, что требует проект только в процессе разработки в devDependencies. После этого используйте npm i –production. Чем больше ненужных зависимостей используется, тем больше риск возникновения уязвимостей.
Давайте разберем некоторые из этих пунктов поподробнее:
Избегайте нагромождения
Взгляните на некоторые модули, написанные Исааком З. Шлейтером, создателем npm. К примеру, use-strict включает «строгий» режим написания JavaScript-модульного кода. Включается эта опция всего лишь в три строчки:
Но почему-же все-таки стоит избегать нагромождения кода? Одна известная фраза американского воздушного флота гласит: «все должно быть просто до идиотизма». И на это существуют свои причины. Человеческий разум не может держать в памяти больше чем от 5 до 7 вещей одновременно. Это просто как факт.
Разбивая код на небольшие составные части, Вы и другие разработчики легко сможете разобраться в нем и понять, для чего он предназначен. Так же упрощается процесс тестирования. Вот пример:
Или еще:
Уверен, большинство из Вас отдадут предпочтение второму примеру, когда имена переменных сразу же делают понятной их суть. Конечно, в процессе написания кода Вы можете думать, что Вы понимаете, как он работает и так. Возможно, Вам даже захочется продемонстрировать свою смекалку и сообразительность, объединив несколько методов вместе в одну строку. Пожалуйста, пишите так, как если бы Вы были более неопытны. Как если бы Вы не смотрели в код на протяжении 6 месяцев, или очень устали и, кроме того, еще и выпили. Если Вы пишете код на пике своей ментальной активности, Вам будет труднее понимать его позже, не говоря уже о Ваших коллегах, которые даже не знакомы с ходом Ваших мыслей. Держать все в относительной простоте единственно верный метод – особенно в рамках Node.JS-технологии, где используется асинхронный подход.
Другими словами, преимущества от использования подхода малых частей значительно более перевешивают недостатки. Помимо прочего, они позволяют значительно быстрее исправить различные ошибки, которые могут возникнуть по разным причинам в процессе работы с Node.JS-приложением.
Используйте асинхронный подход
Синхронный код мало где используется в нынешнем Node.JS. Как правило, он находит свое применение в написании CLI-команд или скриптов, не связанных с веб-приложениями. Что же касательно веб-разработки, Node.JS программисты предпочитают использовать асинхронный подход, так как это позволяет избежать блокировки потоков.
К примеру, синхронный код будет приемлем, если мы строит скрипт для работы с базой данных, не системы для обработки параллельных/конкурентных задач:
Но, в случае веб-приложения, лучше использовать следующее:
Отличительная особенность состоит в том, пишите ли вы долго исполняемый конкурентный код или небольшой скрипт с малым временем жизни. А вообще, лучше запомните одно хорошее правило: всегда пишите асинхронный код в Node.JS.
Избегайте блокировки require
S обладает простой системой загрузки модулей, которая использует общий формат CommonJS. Самый простой способ подключить модули, разбросанные по отдельным файлам – использовать встроенную функцию require. В отличии о AMD/requirejs, Node/CommonJS синхронна. По сути, функция работает согласно следующему принципу: Вы импортируете то, что было экспортировано в виде модуля или файла.
О чем большинство разработчиков даже не догадывается, так это о том, что require кэшируемая. Потому, до тех пор, пока нет заметных изменений зарезервированного имени файла (и, в случае использования npm-модулей, их нет), код модуля будет выполнен и подгружен в переменную только единожды (для обработки). Подобная методика позитивно сказывается на оптимизации. Однако, даже с кэширование, лучше сначала попробуйте обойтись без require. Попробуйте использовать axios-модули. Путь /connect в свою очередь будет медленнее чем требуется, ибо импорт модулей происходит после генерации запроса:
Гораздо лучше будет загрузить модули тогда, когда сервер еще даже не определен, не в маршруте:
Require должен быть закэширован
Хотя я и упоминал о том, что require может быть закэширован, но что так же интересно, так это то, что мы можем поместить код вне module.exports. К примеру:
Зная, что некоторые участки кода могут быть запущены только один раз, подобная реализация окажется более чем полезной.
Всегда проверяйте свой код
Node.JS – это Вам не Java. В Java Вы выкидываете исключения потому как в большинстве случаев Ваше Java-приложение не должно продолжать работать в случае ошибки. В Java для этого Вы просто используете try…catch.
В случае Node.JS история обстоит несколько по-иному. Так как технология выполняется в асинхронном режиме, контекст ошибки всегда будет отделен от любого перехватчика (такого как try…catch) в случае возникновения самой ошибки. Этот код в Node.JS будет просто-напросто бесполезен:
Но! Привычный try…catch все еще может быть использован в синхронном режиме. Вот более действенный рефакторинг предыдущего участка кода:
Если мы не можем обернуть request-вызов в блок try…catch, ошибка будет не перехвачена. Однако, это легко решается при помощи callback-аргумента error. Кроме того, Вам нужно всегда вручную отлавливать error в каждом и каждом callback`е. Проверяйте наличие ошибки (и убедитесь, что она не равна null) и затем, или демонстрируйте содержание ошибки пользователю или клиенту и потому логируйте ее, или отправляйте ее обратно в место вызова при помощи error-callback`а.
В качестве небольшого фокуса Вы можете использовать библиотеку okay. Применяйте ее как наведено ниже что бы обойти ручной проверки на ошибки:
Возвращайте значения или используйте if…else
.JS – параллельный. Эта особенность может привести к багам, если не отнестись к ней с должной осторожностью. Что бы обезопасить себя, останавливайте выполнение участка кода при помощи ключевого слова return:
Избегайте бессмысленной работы (и ошибок) из-за неостановленного вовремя исполнения:
Просто убедитесь, что return всегда будет стоять на страже целесообразности работы Вашего кода.
Обращайте внимание на события ошибок
Почти все классы/объекты Node.JS реализую паттерн-наблюдатель, который порождает событие-ошибку. Это прекрасная возможность для разработчика отловить особо подлые ошибки и придушить их до того, как они устроят хаос.
В качестве полезной привычки было бы неплохо создавать программы-прослушиватели событий-ошибок при помощи использования .on():
Познайте свой npm
Многие Node.JS и front-end событийные разработчики знают, что –save (для npm install) не только установит модуль, но так же и создаст запись в package.json с упоминанием текущей версии модуля. Для аналогичных целей существует и –save-dev, опция для модулей, которые нужны только во время разработки. Но знаете ли Вы, что вместо этого можно спокойно использовать –S и –D? Теперь да.
И пока Вы в режиме установки модулей, удаляйте символ ^, который будут порождать команды –S и –D. Эти значки могут быть особенно опасными, так как они позволят npm автоматически обновить модуль к последней незначительной версии (вторая цифра в семантике версирования). К примеру, с версии 6.1.0 до версии 6.2.0.
Команда NPM полагается на semver, но Вы не должны. Я хочу сказать, что они используют авто обновления к промежуточным версиям модулей с открытым исходным кодом, так как они полагают, что никаких радикальных изменений в этих самых промежуточных версиях не будет. Мой вам совет: не стоит слишком в это верить. Более того, используйте npm shrinkwrap. Команда создаст новый файл с текущими версиями зависимостей зависимостей.
И в заключение
В этом посте мы охватили много всего: от работы с callback'ами до работы с асинхронными потоками, проверки на ошибки и снятия блокировки зависимостей. Надеюсь, Вы нашли для себя что-то новое и познавательное здесь.
Немного об авторе
Азат является техническим консультантом и менеджером в Capital One. JavaScript/Node.js-эксперт, автор различных онлайн-курсов. Издатель более чем 12 книг, посвященных теме, включающие такие хиты продаж как Full Stack JavaScript, React Quickly, Practical Node.JS и Pro Express.js и другие. В свое свободное время Азат читает о технике на Webapplog.com, проводит конференции и работает над продуктами с открытым исходным кодом. До того, как стать экспертом Node.JS, работал в федеральных правительственных агентствах США, принимал участие в небольших старт-апах и больших корпорациях, имея дело с такими технологиями, как Java, SQL, PHP, Ruby и прочие. Азат обожает все, что связано с технологиями и финансами, так же увлекается инновационными способами обучения и просвещения людей.
Автор перевода: Евгений Лукашук
Источник
Основи тестування. Як правильно скласти баг-репорт
Автор: Армен Маїлян
Навіщо потрібний гарний баг-репорт?
Які якості гарного баг-репорту у розробці програмного забезпечення?
Характеристики та методи для повідомлення про баг
Ефективний баг-репортинг
Простий шаблон баг-репорту
Важливі фічі у вашому звіті про помилки
Номер помилки/ідентифікатор
Найменування помилки
Пріоритет
Платформа/Середовище
Опис
Кроки для відтворення помилки
Очікуваний та фактичний результат
Скріншот
Додаткові поради для написання гарного баг-репорту
Висновок
Навіщо потрібний гарний баг-репорт?
Баг репорт це звіт про помилки. І якщо його складено правильно, то шанси на швидке виправлення цих багів вищі. Таким чином, виправлення помилки залежить від того, наскільки якісно ви про неї повідомите. Складання звітів про помилки - не що інше, як навичка, і зараз ми розглянемо, як її сформувати.
"Сенс написання звіту про проблеми (баг-репорту) полягає в тому, щоб виправити ці проблеми" - Cem Kaner. Якщо тестувальник не повідомляє про помилку правильно, програміст, швидше за все, відхиляє цю помилку, заявивши, що вона невідтворювана.
Це може нашкодити робочому настрою тестувальників, зачепити їх професійну гордість, їх его.
Які якості гарного баг-репорту у розробці програмного забезпечення?
Будь-хто може скласти приклад баг репорту. Але не кожен може написати ефективний баг-репорт.
Ви повинні вміти добре розрізняти баг-репорт середньої якості та гарний баг-репорт. Як відрізнити гарний та поганий баг-репорти? Це дуже просто – застосуйте наступні характеристики та методи, щоб якісно повідомити про помилку.
Характеристики та методи включають в себе:
1) Наявність чітко визначеного номера помилки:
Завжди надавайте унікальний номер кожному повідомленню про помилку. Це, у свою чергу, допоможе вам чітко ідентифікувати запис про помилку. Якщо ви використовуєте будь-який інструмент автоматичного формування баг-репортів, цей унікальний номер буде генеруватися автоматично кожного разу, коли ви робите звіт.
Запишіть номер та короткий опис кожної помилки, про яку ви повідомили.
2) Відтворюваність:
Якщо знайдена вами помилка невідтворювана, вона ніколи не буде виправлена.
Ви повинні чітко вказати кроки для відтворення помилки. Не приймайте та не пропускайте жодного кроку відтворення. Помилку, яка описана крок за кроком, легко відтворити та виправити.
3) Будьте конкретні:
Не пишіть нарис про проблему.
Пишіть конкретно і по суті. Спробуйте описати виявлену проблему мінімальною кількістю слів та максимально ефективним способом. Не поєднуйте описи кількох багів в одному звіті, навіть якщо вони здаються схожими. Напишіть різні звіти для кожної проблеми.
Ефективний баг-репортинг
Звіти про помилки є важливим аспектом тестування програмного забезпечення. Ефективний баг-репорт добре розуміється командою розробників і дозволяє уникнути плутанини чи непорозуміння.
Гарний звіт про помилку має бути чітким і коротким, без будь-яких пропущених ключових моментів. Будь-яка відсутність ясності веде до непорозуміння та уповільнює процес розробки. Опис дефектів та складання звітів – одна з найважливіших, але часто ігнорованих областей у життєвому циклі тестування.
Правильно складений текст звіту про знайдений баг є дуже важливим для реєстрації помилки. Один із важливих моментів, які повинен мати на увазі тестер, - це не використовувати командний тон у звіті. Такий тон порушує моральний стан колективу та створює нездорові робочі відносини. Використовуйте нейтральний тон.
Не думайте, що якщо розробник припустився помилки, то ви можете використовувати грубі слова. Перш ніж повідомляти, не менш важливо перевірити, чи був баг-репорт за цією помилкою раніше, чи ні.
Дублікати помилок – це постійна проблема у циклі тестування. Перевіряйте весь список виявлених багів. Іноді розробники можуть знати про проблему і ігнорувати її в майбутньому випуску. Використовуйте спеціальні інструменти, такі як Bugzilla, який автоматично шукає дублікати помилок. Тим не менш, найкраще додатково вручну шукати дублікати помилок.
Чітко вказуйте інформацію про помилку: «Як?» і «Де?". Звіт повинен ясно показувати, як було виконано тест і де саме стався дефект. Читач звіту повинен легко відтворити помилку та знайти її.
Майте на увазі, що мета написання баг-репорту – дати розробнику можливість візуалізувати проблему. Він повинен чітко розуміти суть дефекту, прочитавши звіт про помилку. Не забудьте надати всю необхідну інформацію, яку розробник шукає.
Крім того, майте на увазі, що звіт про помилки буде збережено для майбутнього використання і він повинен бути гарно написаний та містити необхідну інформацію. Використовуйте змістовні речення та прості слова, щоб описати знайдені помилки. Не використовуйте заплутані твердження, які витрачають час читача.
Повідомляйте про кожну помилку як про окрему проблему. У разі опису кількох багів в одному звіті, ви не зможете закрити його, доки всі проблеми не будуть вирішені.
Таким чином, краще за все розбити великі проблеми на окремі баги. Це гарантує, що кожна помилка може бути оброблена окремо. Добре написаний баг-репорт допомагає розробнику відтворити помилку у своєму терміналі. Це також допомагає їм правильно діагностувати проблему.
Простий баг репорт шаблон
Це проста форма баг-репорту. Його зміст може змінюватись в залежності від використовуваного вами інструменту для створення звітів про помилки. Якщо ви пишете баг-репорт вручну, необхідно згадати деякі поля, наприклад номер помилки, який повинен бути призначений вручну.
Укладач звіту: Ваше ім'я та адреса електронної пошти.
Продукт: У якому продукті ви знайшли цю помилку.
Версія: Версія продукту з помилкою, якщо така є.
Компонент: Основні підмодулі продукту.
Платформа:
Вкажіть апаратну платформу, де ви виявили цю помилку. Різні платформи, такі як "ПК", "MAC", "HP", "Sun" і т. д.
Операційна система:
Вкажіть усі операційні системи, у яких ви виявили помилку. Операційні системи, як-от Windows, Linux, Unix, SunOS, Mac OS. Згадайте різні версії ОС, такі як Windows NT, Windows 2000, Windows XP і т. д., якщо це можна застосувати.
Пріоритет:
Коли потрібно виправляти помилку? Пріоритет зазвичай встановлюється від P1 до P5. P1 слід розуміти як "виправити помилку з найвищим пріоритетом" і P5 - "виправити, якщо дозволяє час".
Серйозність помилки:
Визначає вплив помилки.
Типи Серйозності помилки:
Блокувальник (Blocker): подальша робота з тестування неможлива.
Критична (Critical): збій застосунку, втрата даних.
Major: серйозна втрата функціональності.
Minor: незначна втрата функціональності.
Незначна (Trivial): деякі поліпшення інтерфейсу користувача.
Поліпшення (Enhancement): запит нової функції або деякого покращення існуючої.
Статус помилки:
Коли ви реєструєте помилку в будь-якій системі відстеження помилок, за замовчуванням статус помилки буде «Новий».
Пізніше помилка проходить через різні етапи, такі як "Виправлено", "Перевірено", "Повторно відкрито", "Не виправлено" тощо.
Призначити розробнику:
Якщо ви знаєте, який розробник відповідає за той конкретний модуль, в якому виникла помилка, ви можете вказати адресу електронної пошти цього розробника. В іншому випадку залиште це поле порожнім, оскільки це надасть полю авторства помилки значення власника модуля, якщо менеджер не призначить помилку розробнику.
URL:
URL-адреса сторінки, на якій сталася помилка.
Коротке резюме:
Додайте короткий опис помилки. Орієнтуйтесь на 60 слів або менше. Переконайтеся, що складене резюме відображає проблему та місце, де вона знаходиться.
Опис:
Детальний опис помилки.
Використовуйте такі поля для поля опису:
Відтворювані кроки: чітко згадайте кроки для відтворення помилки.
Очікуваний результат: як додаток має поводитися на вказаних вище етапах.
Фактичний результат: який фактичний результат виконання вищезгаданих кроків, тобто поведінка помилки.
Це важливі кроки у звіті про помилки. Ви також можете додати "Тип звіту" як ще одне поле, яке описуватиме тип помилки.
Типи звітів включають в себе:
Помилка в коді
Помилка проєктування
Нова пропозиція
Проблема із документацією
Апаратна проблема
Важливі фічі у вашому звіті про помилки
Розглянемо кілька складових звіту про знайдений баг.
Нижче наведено важливі елементи баг-репорту:
1) Номер помилки/ідентифікатор:
Номер помилки або ідентифікаційний номер (наприклад, xyz007) значно спрощує складання баг-репорту та пошук місця помилки. Розробник може легко перевірити, чи виправлено конкретну помилку, чи ні. Це робить весь процес тестування та повторного тестування більш плавним та легким.
2) Найменування помилки:
Заголовок помилки читається частіше, ніж будь-яка інша частина баг-репорту. Варто вказати в ньому все про те, що входить в баг.
Назва помилки має бути досить осмисленою, щоб читач міг її зрозуміти. Чіткий заголовок помилки полегшує розуміння, і читач легко зможе перевірити, чи було повідомлення про помилку раніше і чи було її виправлено.
3) Пріоритет:
В залежності від серйозності помилки для неї може бути встановлений пріоритет. Помилка може бути Blocker, Critical, Major, Minor, Trivial або пропозицією щодо покращення функціоналу. Пріоритет помилки від P1 до P5 може бути заданий так, щоб найважливіші з них переглядалися першими.
4) Платформа/Середовище:
Вказівка конфігурації ОС та браузера потрібна для більшої точності в баг-репорті. Це найкращий спосіб повідомити, як можна відтворити помилку.
Без точної платформи або середовища програма може поводитися по-іншому, і помилка на стороні тестувальника може не повторюватися на стороні розробника. Тому краще чітко вказати середовище, в якому було виявлено помилку.
5) Опис:
Правильний опис помилки допомагає розробнику зрозуміти помилку. Він описує проблему, що виникла. Поганий опис створить плутанину та витратить час розробників і тестерів.
Необхідно чітко повідомити про ефект в описі. Завжди корисно використовувати повні речення. Рекомендується описувати кожну проблему окремо. Не використовуйте такі терміни, як «я думаю» чи «я вважаю».
6) Кроки для відтворення помилки:
Гарний звіт про помилку має чітко вказувати кроки для відтворення. Кроки повинні включати дії, які спричиняють помилку. Не робіть загальних заяв. Будьте конкретні у наступних кроках.
Гарний приклад правильно написаної покрокової процедури наведено нижче:
Послідовність кроків:
Виберіть продукт wer05.
Натисніть на «Додати до кошика».
Натисніть «Видалити», щоб видалити продукт із кошика.
7) Очікуваний та фактичний результат:
Опис помилки буде неповним без зазначення очікуваних та фактичних результатів. Необхідно описати в загальних рисах, який результат тесту і що очікував користувач у разі коректної роботи програми. Читач звіту повинен знати, який результат тесту буде коректним. Чітко згадайте, що сталося під час тесту і який був результат.
8) Скріншот:
Одна картинка коштує тисячі слів. Зробіть скріншот із прикладом збою з відповідними виділеннями, щоб вказати дефект. Виділіть несподівані повідомлення про помилки світло-червоним кольором. Це привертає увагу до необхідної області.
Деякі додаткові поради для написання гарного баг-репорту
Нижче наведено деякі додаткові поради, щоб написати гарний звіт про помилку:
1) Негайно повідомте про проблему:
Якщо ви виявите будь-яку помилку під час тестування, не потрібно чекати, щоб написати докладний звіт про помилку пізніше. Натомість напишіть звіт про помилку негайно. Це забезпечить гарну якість звіту та відтворюваність кроків отримання помилок. Якщо ви вирішите написати звіт про помилку пізніше, то є великі шанси пропустити важливі деталі в баг-репорті.
2) Відтворіть помилку тричі перед написанням баг-репорту:
Ваш баг має бути відтворюваним. Переконайтеся, що ваші кроки досить чіткі, щоб відтворити помилку без будь-якої двозначності. Якщо ваша помилка не відтворюється щоразу, ви все одно можете помилитися, вказавши періодичну природу багу.
3) Протестуйте цю ж помилку на інших схожих модулях:
Іноді розробник використовує один і той самий код для різних схожих модулів. Таким чином, ймовірність того, що помилка в одному модулі виникне і в інших подібних модулях, вища. Ви навіть можете спробувати знайти серйознішу версію знайденої помилки.
4) Складіть гарне резюме помилки:
Короткий опис помилки допоможе розробникам швидко проаналізувати природу помилки. Низька якість звіту надмірно збільшить час розробки та тестування. Правильно взаємодійте з вашим баг-репортом. Майте на увазі, що зведення про помилки використовується як довідкова інформація для пошуку помилки в інвентарі помилок.
5) Прочитайте декілька разів звіт про помилку, перш ніж натиснути кнопку «Надіслати»:
Прочитайте всі речення, формулювання та кроки, які використовуються у баг-репорті. Подивіться, чи не створює якесь речення двозначність, яка може призвести до неправильної інтерпретації. Слід уникати слів або речень, що вводять в оману, щоб скласти чітке повідомлення про помилку.
6) Не використовуйте образливих виразів:
Приємно, що ви зробили хорошу роботу і виявили помилку, але не використовуєте це для критики розробника чи нападок на будь-яку людину.
Висновок
Що таке баги? Це недосконалості ПЗ, з якими необхідно боротися, і один із головних помічників у цьому – репорти про помилки.
Ми розглянули деякі особливості складання звіту про знайдений баг. Немає сумнівів, що ваш баг-репорт повинен бути якісним документом.
Зосередьтеся на написанні гарних звітів про помилки і витратьте деякий час на виконання цього завдання, оскільки саме якісний баг-репорт є основною точкою зв'язку між тестером, розробником та менеджером. Менеджери зі свого боку повинні пояснити своїй команді, що складання гарного звіту про помилки є основним обов'язком будь-якого тестувальника.
Ваші зусилля щодо написання гарного звіту про помилки не тільки збережуть ресурси компанії, але й створять гарні стосунки між вами та розробниками.
Для кращої продуктивності команди намагайтеся написати якомога гарний звіт про помилки.
З нашого боку для якісної підготовки тестувальників пропонуємо вам ознайомитися з курсом підготовки спеціаліста-тестувальника на ITVDN - Quality Assurance.
За матеріалами статті.
Junior Java Developer – питання на співбесіді
Автор: Армен Маїлян
В этой статье мы рассмотрим 25 наиболее часто встречающихся вопросов на интервью для новичков в программировании на Java. Все это реальные вопросы на собеседовании Java Junior Developer.
Можно ли в Java переопределить статический метод?
Нет, статический метод в Java мы не можем переопределить. Мы можем только скрыть его.
В Java статические методы - это те методы, которые можно вызывать без создания экземпляра класса. С другой стороны, если подкласс имеет ту же сигнатуру метода, что и базовый класс - это будет переопределением метода.
Статический метод в Java не может быть переопределен по таким причинам:
Статические методы - это те, которые принадлежат непосредственно классу. Они не принадлежат объекту, и при переопределении объект решает, какой метод должен быть вызван.
Переопределение метода происходит динамически (во время выполнения), это означает, что определение того, какая версия метода будет использоваться происходит во время выполнения в соответствии с объектом, используемым для вызова, в то время как статические методы ищутся статически (во время компиляции).
Когда вы запустите программу выше, вы получите следующий результат:
Hello...Good morning
Hello...Good morning
Hello...everyone
Согласно правилам переопределения методов, вызов метода разрешается во время выполнения по типу object. Таким образом, в нашем примере выше d.hello (), во втором вызове, должен вызывать метод hello () класса DisplayMessage, поскольку ссылочная переменная класса Display ссылается на объект DisplayMessage, но вызывает hello () самого класса Display. Это происходит потому, что выполнение статического метода разрешается во время компиляции.
Таким образом, если статический метод у производного класса имеет ту же сигнатуру, что и статический метод базового класса, это будет называться сокрытием метода, а не переопределением метода.
Можно ли выполнить перегрузку метода main() в Java?
Достаточно распространенный по языку Java вопрос на интервью.
Да, вы можете перегрузить метод main() в Java.
В Java можно выполнить перегрузку метода main(), но когда мы запустим нашу программу, JVM будет искать общедоступный статический void main (String [] args) и выполнит этот метод.
Перегрузка метода main() в Java:
Когда вы запустите программу выше, вы получите такой результат:
Inside main(String[] args)
Видно, что метод main() у нас перегружен, но все же JVM вызывает метод с подписью public static void main (String [] args).
Обратите внимание, что JVM считает var args public static void main (String... args) таким же, как public static void main (String [] args).
Если мы хотим вызвать именно перегруженный метод, то вам нужно вызвать его из метода main с сигнатурой public static void main (String [] args).
Например:
Когда вы запустите программу выше, вы получите такой результат:
Inside main(String[] args)
Inside main(Integer args)
Inside main(Integer arr)
Как видите, мы вызвали перегруженные методы из main() с помощью аргумента String [].
Можем ли мы в Java переопределить приватные методы?
В Java мы не можем переопределить private методы, так как они видны только классу-владельцу.
Каков базовый класс для всех классов в Java?
java.lang.Object - это базовый класс для всех объектов.
Можете ли вы перечислить некоторые важные методы из класса object?
Среди важных методов класса object выделяют:
hashcode - в качестве возвращаемого значения имеет хеш-значение объекта;
equals - сравнивает ссылки на объекты;
wait - текущий поток ожидает, пока не будет вызвано notify или notifyAll;
notify - пробуждает один поток, который ожидает блокировки;
notifyAll - пробуждает все потоки, ожидающие блокировки;
toString - обеспечивает представление объекта в виде строкового значения;
clone - этот метод применяется для клонирования объекта;
finalize - этот метод вызывается, когда объект подвергается обработке сборщиком мусора.
Какие два метода вам нужно переопределить при помещении пользовательского объекта в качестве ключа для HashMap?
Вам нужно будет переопределить методы hashcode() и equals() в пользовательском классе, помещая объекты пользовательского класса в HashMap.
В чем отличия в Java между HashMap и HashSet?
HashMap
В HashMap реализован интерфейс Map, который выполняет сопоставление некого ключа со значением. Он не синхронизирован и не является потокобезопасным. Не допускаются дублирующиеся ключи, а также null ключи и null значения.
HashSet
В HashSet реализован интерфейс Set, не допускающий дублирования значений. Он не синхронизирован и не является потокобезопасным.
Выше employeeSet будет иметь 2 элемента, так как Set не допускает повторяющихся значений.
Метод add применяется для добавления элементов в HashSet. Если этот метод возвращает true, тогда элемент добавляется успешно, но, если возвращается false – это значит, что вы пытаетесь вставить дублирующее значение.
public boolean add(Object o)
Одна из главных особенностей HashSet - объекты, которые мы собираемся добавить в HashSet, должны реализовывать методы Hashcode() и equals(), чтобы мы могли проверять наличие дублирующихся значений. Если мы добавляем пользовательские объекты в HashSet, то мы должны переопределить методы Hashcode() и equals() в соответствии с нашими потребностями. Если HashMap и HashSet не будут переопределены, объект будет принимать реализацию по умолчанию, что может быть нежелательно.
HashMap vs HashSet:
Можем ли мы иметь абстрактный класс без какого-либо абстрактного метода в нем?
Да, вы можете иметь абстрактный класс без создания какого-либо абстрактного метода.
Что вы знаете о переменной с модификатором transient? Когда вы будете ее использовать?
Переменные с модификатором transient (нерезидент) применяются при сериализации.
Если вы не хотите делать сериализуемую переменную, вы можете сделать ее переменной с модификатором transient.
Transient переменная - это переменная, значение которой не будет сериализоваться во время сериализации объекта. А при десериализации - вы получите значение по умолчанию для этих переменных.
Допустим, у вас есть класс Country, и вы не хотите сериализовать атрибут населения, поскольку он будет меняться со временем, поэтому вы можете объявить атрибут населения как transient, и он больше не будет сериализован.
Можете ли вы вызвать метод start() дважды в Java?
Нет, вы не можете вызвать метод start() дважды. Это вызовет llegalStateException.
После того как поток был запущен, он не может быть запущен снова. Если вы попытаетесь снова запустить поток, он выдаст исключение IllegalThreadStateException
Давайте разберемся с помощью примера:
Когда вы запустите программу выше, вы получите такой результат:
Thread is runningException in thread "main"
java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:705)
at org.arpit.java2blog.StartThreadAgainMain.main(StartThreadAgainMain.java:16)
Как вы можете видеть, когда мы пытались запустить поток во второй раз, он вызывал исключение IllegalThreadStateException.
Если вы попытаетесь снова запустить поток, он выдаст исключение IllegalThreadStateException
Почему String неизменяемый (immutable) в Java?
В Java класс String неизменяемый. Если вы возьмете словарное значение слова «immutable», это означает, что он не может быть изменен с течением времени, соответственно строка не может быть изменена в Java.
Давайте разберемся с примером.
Как видите, значение str1 не изменилось. Она создала другой объект String со значением «Hellojava2blog», но не изменил String str1.
Это объясняет, что String является неизменяемым по своей природе.
Теперь давайте разберемся, каковы потенциальные причины сделать String неизменной в Java.
Пул строк:
Если вы просто присваиваете значение String, используя двойные кавычки, это значение сохраняется в области, называемой строковым пулом, и на одну строку могут ссылаться многие ссылочные переменные. Если бы String оказался изменяемым, то это повлияло бы на все ссылающиеся на нее переменные.
Потокобезопасность:
Неизменяемые объекты по умолчанию являются потокобезопасными, поэтому вам не нужно устанавливать для них синхронизацию, и экземпляр String можно безопасно разделить между несколькими потоками.
Безопасность:
Если бы String был изменяемым, это могло бы привести к множественным проблемам безопасности.
Например, при подключении к базе данных вы предоставляете имя пользователя, пароль, порт и имя хоста и т. д. в виде строки. Если бы строка - была изменяемая, то любой хакер мог бы изменить ссылочное значение, что было бы угрозой безопасности для приложения.
Хэш-значение кэша:
Когда вы используете String в качестве ключа в HashMap или HashSet или любой другой коллекции, вы можете кэшировать ее хеш-значение. Поскольку String является неизменяемым по своей природе, вам не нужно пересчитывать хэш каждый раз, поскольку он будет постоянным. Это значительно повышает производительность для этой коллекции на основе хеша.
Загрузка классов:
Строка используется в механизме загрузки классов. Она передается в качестве параметра. Если бы строка оказалась изменяемой, это вызвало бы прямую угрозу безопасности, поскольку любой хакер мог бы ее изменить.
Знаете ли вы, как сделать класс неизменным (immutable)? Можете ли вы предоставить шаги для этого?
Неизменяемый класс - это класс, состояние которого нельзя изменить после создания.
Пример: String - лучший пример неизменяемого класса. Создав строку, вы не сможете ее изменить.
Неизменяемый класс очень прост для понимания, он имеет только одно состояние.
Неизменяемые классы являются потокобезопасными. Это самое большое преимущество неизменяемого класса, потому что, - вам не нужно применять синхронизацию для неизменяемых объектов. Также, неизменяемый класс может быть полезен при помещении объекта неизменяемого класса в HashMap или может использоваться для целей кэширования, поскольку его значение не изменится.
Неизменяемые объекты по умолчанию являются потокобезопасными.
Шаги для создания неизменяемого класса:
Финализируйте свой класс:
Если вы финализируете свой класс - ни один класс не сможет его расширить, следовательно, не сможет переопределить методы этого класса.
Пометьте все переменные класса модификаторами доступа private и final:
Если вы сделаете переменную экземпляра private - ни один внешний класс не сможет получить доступ к переменным экземпляра, и, если вы сделаете их final - вы не сможете их изменить.
Скажите «нет» методам-мутаторам:
Не создавайте метод set для некоторых переменных класса, тогда не будет возможности явно изменить состояние переменных экземпляра.
Выполните клонирование изменяемых объектов при возврате из метода получения:
Если вы вернете клон объекта из метода get, то вернется объект. При этом, ваш оригинальный объект останется без изменений.
Можем ли мы иметь статический метод в интерфейсе?
Да, у нас может быть статический метод в интерфейсе из Java 8.
Можете ли вы объявить конструктор финальным (final)?
Нет, вы не можете объявить конструктор финальным.
В чем разница между StringBuffer и StringBuilder?
Что такое Java ClassPath?
ClassPath - это переменная окружения, которую виртуальная машина Java (JVM) использует для определения местоположения всех классов, используемых программой.
Например: jre / lib / rt.jar имеет все классы Java, и вам также необходимо включить файлы jar или файл классов, которые используются программой.
У вас есть список пользовательских объектов? Как вы можете их отсортировать?
Вам необходимо использовать интерфейс Comparable или Comparator для сортировки списка пользовательских объектов.
Что такое модификатор volatile в Java?
Если вы пометите любую переменную как volatile, эта переменная будет считываться из основной памяти, а не из кэша центрального процессора, поэтому каждый поток будет иметь обновленное значение в переменной.
Назовите два разных способа вызвать сборщик мусора?
System.gc() или Runtime.getRuntime().gc().
Что такое маркерный интерфейс в Java? Можете ли вы привести несколько примеров маркерного интерфейса?
Маркерные интерфейсы - это те интерфейсы, которые не содержат в себе никаких методов и полей.
Примерами интерфейсов маркеров являются: Serializable, Cloneable, Remote.
Сколько объектов будет создано ниже:
String str1= new String("John");
String str2= new String("John");
Здесь будут созданы три объекта, два в динамической памяти и один в постоянном пуле String.
Можете ли вы провести различие между проверяемым исключением (Checked Exception) и непроверяемым исключением (Unchecked Exceptions)?
Что такое исключение?
Исключением является нежелательная ситуация или условие при выполнении программы. И если вы неправильно обрабатываете исключение, то это может привести к аварийному завершению программы.
Что такое проверяемое исключение?
Проверяемые исключения - это те исключения, которые проверяются при компиляции. Если вы не обработаете их, вы получите ошибку компиляции.
Используя блок try и catch вы можете поместить код ошибки в блок try и перехватить исключение в блоке catch.
Что такое непроверяемое исключение?
Непроверяемые исключения - это те исключения, которые не проверяются во время компиляции. Java VM не будет «ругаться», если вы не обработаете такие исключения.
Если вы выполните код выше вы получите:
Exception in thread "main" java.lang.NullPointerException
at org.arpit.java2blog.NullPointerExceptionExample.main(NullPointerExceptionExample.java:7)
В чем разница между ArrayList и LinkedList? Как вы решите, какой из них вам нужно использовать?
Один из распространенных вопросов интервью: «В чем разница между ArrayList и LinkedList». Прежде чем мы действительно увидим различия, давайте кратко рассмотрим оба.
ArrayList:
ArrayList – является реализацией интерфейса List.
ArrayList не синхронизирован (поэтому не является потокобезопасным).
ArrayList реализован с использованием массива в качестве внутренней структуры данных. Его можно динамически изменять.
LinkedList:
LinkedList является реализацией интерфейса List и интерфейса Deque.
LinkedList не синхронизируется.
LinkedList реализован с использованием двусвязного списка в качестве внутренней структуры данных.
Свойство
ArrayList
LinkedList
Внутренняя структура данных
Использует динамический массив для хранения элементов внутри.
Он использует дважды связанный список для внутреннего хранения элементов.
Скорость выполнения
Если нам нужно вставить или удалить элемент в ArrayList, это может занять O(n), так как он использует массив, и нам может потребоваться сместить элементы в случае вставки или удаления.
Если нам нужно вставить или удалить элемент в связанном списке, это займет O(1), так как он внутренне использует двусвязный список.
Поиск
В ArrayList поиск выполняется быстрее, т.к. он использует массив, основанный на индексах. Сложность - O(1).
Поиск в LinkedList идет медленнее, т.к. он использует двусвязанный список. Сложность равна O(n).
Интерфейсы
ArrayList реализует только интерфейс List, поэтому его можно использовать только как List.
LinkedList реализует интерфейсы List, Deque, поэтому его можно использовать как List, Stack или Queue.
Когда использовать ArrayList и LinkedList?
Это на самом деле зависит от нашей потребности.
Если нам требуется произвести большое количество вставок или удалений, то нам следует использовать LinkedList. Если у нас имеется мало вставок или удалений, но выполняется много поисковых операций, то тогда нам следует использовать ArrayList.
В чем разница между wait и sleep в Java?
Один из распространенных вопросов на интервью Java разработчика: «В чем разница между wait и sleep в Java?». Прежде чем мы действительно увидим различия, кратко ознакомимся с обоими.
sleep vs wait:
Вы запустили три потока из основного потока. Вы должны убедиться, что основной поток завершился последним. Как вы это сделаете?
Вы можете использовать Java Thread Join() для достижения этого сценария.
Без использования метода Join:
Когда вы запускаете программу выше, вы получите следующий результат:
Main thread ends here
T2 in run method
T1 in run method
T3 in run method
С помощью метода Join:
Когда вы запустите программу выше, вы получите следующий результат:
T2 in run method
T3 in run method
T1 in run method
Main thread ends here
Как видите, основной поток завершается последним в этом сценарии.
Итоги
Мы с вами рассмотрели 25 распространенных вопросов на собеседовании на должность Junior Java Developer.
Конечно же, полноценная подготовка к собеседованию Java разработчика должна включать и практическую и теоретическую подготовку. Готовясь к собеседованию, имеет смысл с одной стороны подготовиться, используя различные наборы вопросов и ответов Java собеседований, а с другой стороны - быть готовым к решению задач на собеседованиях Java.
С нашей стороны, ITVDN.com предлагает комплексную программу подготовки Java разработчика, включающую в себя видео курсы по Java и сопутствующим технологиям.
Рекомендуем вам также ознакомиться с серией видео «Подготовка к собеседованию в IT компании. Вопросы и ответы. Хитрости. Трюки.»
По материалам статьи.
Огляд основних SQL запитів
Автор: Армен Маїлян
Види SQL запитів
Типи SQL запитів за їх видами
Створення та налаштування бази даних
Приклади простих запитів SQL до баз даних
SELECT
INSERT
UPDATE
DELETE
DROP
Приклади складних запитів до бази даних MS SQL
Висновки
Кожен сайт в Інтернеті, будь-який проєкт, який обробляє значний обсяг інформації, змушений зберігати цю інформацію у тих чи інших базах даних (БД). Переважна більшість проєктів інформацію зберігають у БД реляційного типу, роблячи записи в різних подобах таблиць. Як внесення нових записів, так і звернення до наявних здійснюється завдяки використанню запитів, що складаються конструкціями SQL (structured query language) – непроцедурної декларативної мови структурованих запитів. У нашому випадку це означає, що, використовуючи конструкції SQL ми будемо звертатися до БД, повідомляючи, що потрібно зробити з даними, але не вказуючи яким саме способом це потрібно зробити.
Фактично SQL є набором стандартів для написання запитів до БД. Остання чинна редакція стандартів мови SQL - ISO/IEC 9075:2016.
Ґрунтуючись на вказаних стандартах мови SQL, ряд організацій випустили свої розширені версії стандартів зазначеної мови. Подібні версії іноді називають діалектами SQL.
Варіанти специфікацій SQL розробляються компаніями та співтовариствами і служать, відповідно, для роботи з різними СУБД (Системами Управління Базами Даних) – системами програм, заточених під роботу з продуктами зі своєї інфраструктури.
Найбільш застосовувані сьогодні СУБД, що використовують свої стандарти (розширення) SQL:
MySQL — СУБД, що належить компанії Oracle.
PostgreSQL — вільна СУБД, що підтримується та розвивається спільнотою.
Microsoft SQL Server — СУБД, що належить компанії Microsoft. Застосовує діалект Transact-SQL (T-SQL).
Діалекти SQL, які створюються, специфікуються і використовуються різними організаціями, мають як спільні риси, так і ряд відмінностей у можливостях розширень.
Загальними рисами діалектів є основні конструкції, які застосовуються практично без відмінностей у багатьох реляційних БД. Основні відмінності діалектів полягають у відмінностях використаних типів даних, кількості, реалізації та детальних можливостей команд. Різні діалекти застосовують як різні набори зарезервованих слів, так і різні набори команд.
Тут ми розглядатимемо запити, застосовуючи конструкції зі специфікацій діалекту T-SQL.
Торкнемося класифікації SQL запитів.
Виділяють такі види SQL запитів:
DDL (Data Definition Language) – мова визначення даних. Завданням DDL-запитів є створення БД та опис її структури. Запитами такого виду встановлюються правила того, в якому вигляді різні дані будуть розміщуватися в БД.
DML (Data Manipulation Language) – мова маніпулювання даними. До запитів цього типу входять різні команди, використовуючи які безпосередньо здійснюються деякі маніпуляції з даними. DML-запити потрібні для додавання змін до вже внесених даних, для отримання даних з БД, для їх збереження, для оновлення різних записів і для їх видалення з БД. До елементів DML-звернень входить основна частина SQL операторів.
DCL (Data Control Language) – мова управління даними. Включає запити та команди, що стосуються дозволів, прав та інших налаштувань СУБД.
TCL (Transaction Control Language) – мова управління транзакціями. Конструкції такого типу застосовують для керування змінами, які здійснюються з використанням DML-запитів. Конструкції TCL дозволяють нам проводити об'єднання DML запитів у набори транзакцій.
Основні типи SQL запитів за їх видами:
Нижче ми розглянемо практичні приклади застосування SQL запитів для взаємодії з БД, використовуючи запити двох категорій – DDL та DML.
Створення та налаштування бази даних
Нам потрібна буде для прикладів БД MS SQL Server 2017 та MS SQL Server Management Studio 2017.
Розглянемо послідовність дій того, як створити запит SQL. Скориставшись Management Studio, спочатку створимо новий редактор скриптів. Щоб це зробити, на стандартній панелі інструментів оберемо «Створити запит», або скористаємось клавіатурною комбінацією Ctrl+N.
Натискаючи кнопку «Створити запит» у Management Studio, ми відкриваємо тестовий редактор, використовуючи який можна виконувати написання SQL запитів, зберігати їх і запускати.
Використовуємо для початку прості запити SQL, завдяки яким можна створити та налаштувати нову БД, щоб отримати можливість надалі з нею працювати.
Створимо нову БД з ім'ям “b_library” для бібліотеки книг. Щоб це зробити, наберемо в редакторі такий SQL запит:
CREATE DATABASE b_library;
Далі виділимо введений текст і натиснемо F5 або кнопку "Виконати". У нас створиться БД "b_library".
Усі подальші маніпуляції ми можемо провести із цією створеною нами БД. Для цього спочатку підключимося до цієї бази:
USE b_library;
У БД "b_library" створимо таблицю авторів "tAuthors" з такими стовпцями: AuthorId, AuthorFirstName, AuthorLastName, AuthorAge:
CREATE TABLE tAuthors (
AuthorId INT IDENTITY (1, 1) NOT NULL,
AuthorFirstName NVARCHAR (20) NOT NULL,
AuthorLastName NVARCHAR (20) NOT NULL,
AuthorAge INT NOT NULL
);
Заповнимо нашу таблицю такими авторами: Олександр Пушкін, Сергій Єсенін, Джек Лондон, Шота Руставелі та Рабіндранат Тагор. Для цього використовуємо такий SQL запит:
INSERT tAuthors VALUES
('Александр', 'Пушкин', '37'),
('Сергей', 'Есенин', '30'),
('Джек', 'Лондон', '40'),
('Шота', 'Руставели', '44'),
('Рабиндранат', 'Тагор', '80');
Ми можемо подивитися в «tAuthors» записи шляхом відправлення до СУБД простого SQL запиту:
SELECT * FROM tAuthors;
У нашій БД «b_library» ми створили першу таблицю «tAuthors», заповнили «tAuthors» авторами книг і тепер можемо розглянути різні приклади запитів SQL, якими ми зможемо взаємодіяти з БД.
Приклади простих запитів SQL до баз даних.
Розглянемо основні запити SQL.
SELECT
1) Виведемо всі наявні у нас БД:
SELECT name, database_id, create_date
FROM sys.databases;
2) Виведемо всі таблиці у створеній нами раніше БД «b_library»:
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'
3) Виводимо ще раз наявні у нас записи за авторами книг зі створеної вище «tAuthors»:
SELECT * FROM tAuthors;
4) Виведемо інформацію про те, скільки у нас є записів рядків у «tAuthors»:
SELECT count(*) FROM tAuthors;
5) Виведемо з «tAuthors» два записи, починаючи з четвертого. Використовуючи ключове слово OFFSET, пропустимо перші три записи, а завдяки використанню ключового слова FETCH – позначимо вибірку наступних 2 рядків (ONLY):
SELECT * FROM tAuthors
ORDER BY AuthorId
OFFSET 3 ROWS
FETCH NEXT 2 ROWS ONLY;
6) Виведемо з «tAuthors» всі записи із сортуванням в алфавітному порядку за першою літерою імені автора:
SELECT * FROM tAuthors ORDER BY AuthorFirstName;
7) Виведемо з «tAuthors» дані, попередньо по AuthorId відсортувавши їх за спаданням:
SELECT * FROM tAuthors ORDER BY AuthorId DESC;
8) Виберемо записи з "tAuthors", значення AuthorFirstName у яких відповідає імені "Александр":
SELECT * FROM tAuthors WHERE AuthorFirstName='Александр';
9) Виберемо з "tAuthors" записи, де ім'я автора AuthorFirstName починається з "се":
SELECT * FROM tAuthors WHERE AuthorFirstName LIKE 'се%';
10) Виберемо з "tAuthors" записи, в яких ім'я автора (AuthorFirstName) закінчується на "ат":
SELECT * FROM tAuthors WHERE AuthorFirstName LIKE '%ат' ORDER BY AuthorId;
11) Зробимо вибірку всіх рядків із «tAuthors», значення AuthorId у яких дорівнює 2 або 4:
SELECT * FROM tAuthors WHERE AuthorId IN (2,4);
12) Виберемо в "tAuthors" такий запис AuthorAge, значення якого - найбільше:
SELECT max(AuthorAge) FROM tAuthors;
13) Проведемо вибірку з "tAuthors" по стовпцях AuthorFirstName та AuthorLastName:
SELECT AuthorFirstName, AuthorLastName FROM tAuthors;
14) Отримаємо з "tAuthors" всі рядки, у яких AuthorId не дорівнює трьом:
SELECT AuthorId, AuthorFirstName, AuthorLastName FROM tAuthors WHERE AuthorId!='3';
INSERT
INSERT – це вид запиту SQL, у разі застосування якого СУБД виконує додавання нових записів у БД.
Додамо до «tAuthors» нового автора – Вільяма Шекспіра, 51 рік. Відповідно, у полі AuthorFirstName додасться Вільям, в AuthorLastName додасться Шекспір, в AuthorAge – 51. До AuthorId, у нашому випадку, автоматично додасться значення, інкрементоване відносно попереднього на 1.
INSERT INTO tAuthors VALUES ('Уильям', 'Шекспир', '51');
Перевіримо:
SELECT * FROM tAuthors;
UPDATE
UPDATE – SQL запит, який дозволяє внести зміни або дописувати нову інформацію до тих записів, які вже існують.
Внесемо коригування до шостого запису (AuthorId = 6). Значення змінимо для полів імені, прізвища та віку автора.
UPDATE tAuthors SET AuthorFirstName = 'Лев', AuthorLastName='Толстой', AuthorAge = '82' WHERE AuthorId = '6';
Потім звернімося до БД, щоб вивести всі наявні записи:
SELECT * FROM tAuthors;
Ми бачимо зміни інформації в записі автора під номером 6.
DELETE
DELETE – SQL запит, виконуючи який у СУБД проводиться операція видалення певного рядка з таблиці в БД.
Звернемося до "tAuthors" з командою на видалення рядка, де AuthorId = 5:
DELETE FROM tAuthors WHERE AuthorId = '5';
Щоб побачити зміни, знову звернемося до бази для виведення всіх записів:
SELECT * FROM tAuthors;
Ми бачимо, що запис автора під номером 5 тепер відсутній у tAuthors і, відповідно, не виводиться з іншими записами.
DROP
DROP – ключове слово в SQL, яке використовується для видалення даних за допомогою запиту. Наприклад, видалення деякої таблиці з БД.
Після розгляду ряду простих запитів до БД ми можемо повністю видалити нашу таблицю tAuthors, виконавши простий SQL запит:
DROP TABLE tAuthors;
Далі розглянемо складні запити SQL.
Приклади складних запитів до бази даних MS SQL
Складні запити SQL представляють собою комбінації простих запитів. Виконуючись, прості запити повертають згруповані в проміжні таблиці набори даних. А складний запит уже маніпулює даними, отриманими завдяки простим «підзапитам».
Складні запити отримуються такими способами:
Переміщенням одного запиту в інший. В цьому випадку зовнішній вираз називатиметься основним запитом, а вкладений вираз - підзапитом.
Застосування з SQL запитами різних операторів об'єднання результатів виконання підзапитів. Такі оператори називають реляційними.
Розглянемо у SQL приклади складних запитів.
Скористаємося нашою попередньою таблицею tAuthors та створимо додатково ще одну таблицю з книгами цих авторів – tBooks. У якості ідентифікатора авторів книг використовуємо значення AuthorId з "tAuthors", а назва книги - BookTitle.
CREATE TABLE tBooks (
BookId INT IDENTITY (1, 1) NOT NULL,
BookTitle NVARCHAR (20) NOT NULL,
Author INT NOT NULL
);
Заповнимо «tBooks» такими книгами:
INSERT tBooks VALUES
('Руслан и Людмила', '1'),
('Кавказский пленник', '1'),
('Евгений Онегин ', '1'),
('Радуница', '2'),
('Преображение', '2'),
('Мартин Иден', '3'),
('Морской волк', '3'),
('Белый Клык', '3');
1) Зробимо вибірку з БД усіх книг, у яких ім'я автора – «Александр»:
SELECT BookId, BookTitle
FROM tBooks
WHERE Author = (SELECT AuthorId FROM tAuthors WHERE AuthorFirstName = 'Александр');
Отримаємо:
2) Зробимо вибірку даних із «tBooks» усіх книг, авторами яких є люди з іменами «Александр» або «Сергей»:
SELECT BookTitle
FROM tBooks
WHERE Author = SOME(SELECT AuthorId FROM tAuthors
WHERE AuthorFirstName IN ('Александр', 'Сергей'));
3) Зробимо вибірку за книгами з таблиці «tBooks», у яких імена авторів НЕ «Сергій» та НЕ «Олександр»:
SELECT *
FROM tBooks
WHERE Author != ALL(SELECT AuthorId FROM tAuthors WHERE AuthorFirstName IN ('Александр', 'Сергей'));
4) Візьмемо таблицю «tBooks» і зробимо з неї вибірку всіх книг із зазначенням як імен, так і прізвищ авторів цих книг із «tAuthors»:
SELECT tBooks.BookId, tBooks.BookTitle, tAuthors.AuthorFirstName,
tAuthors.AuthorLastName
FROM tBooks
JOIN tAuthors ON tAuthors.AuthorId = tBooks.Author;
Висновки
Ми з вами розглянули декілька варіантів найпростіших і найскладніших SQL запитів. Звичайно цю статтю не варто розглядати ні як навчальний посібник, ні як вичерпний перелік можливостей запитів у T-SQL та інших діалектах. Її швидше за все можна вважати прикладом SQL запитів для початківців. Однак вона може бути для Вас відправною точкою.
Існує набагато більше різних SQL запитів. Це і запити з циклічними конструкціями, і рекурсивні, і різна робота зі змінними, і інші види запитів та підзапитів. Якщо Ви хочете вивчити цю дуже важливу специфічну мову складання запитів до БД – можете пройти відповідні курси на нашому порталі ITVDN.com, обравши відповідний Вам діалект:
Transact-SQL - https://itvdn.com/ru/video/ssms_tsql
SQL Essential - https://itvdn.com/ru/video/sql-essential
SQL Практикум - https://itvdn.com/ru/video/sql-workshop
MySQL - https://itvdn.com/ru/video/mysql-essential
PostgreSQL - https://itvdn.com/ru/video/postgresql