Pull to refresh
0
0
Алексей @Nattfodd

User

Send message

Антипаттерны тестирования ПО

Reading time31 min
Views89K

Введение


Есть несколько статей об антипаттернах разработки ПО. Но большинство из них говорят о деталях на уровне кода и фокусируются на конкретной технологии или языке программирования.

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

Терминология


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


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

Читать дальше →
Total votes 48: ↑48 and ↓0+48
Comments31

Пошаговый план старта на Upwork #2

Reading time4 min
Views61K
image

Предыдущая часть.

Надеюсь что вы уже зарегистрировались и заполнили профиль, если нет, то вам в прошлую статью. А мы начнем.

Перед регистрацией советую внимательно прочитать правила биржи, иначе как это было в моем случае — можно улететь в бан «без-воз-мез-дно».
Читать дальше →
Total votes 29: ↑24 and ↓5+19
Comments53

Почему изменения в новом Phoenix 1.3 так важны

Reading time8 min
Views6.4K


Phoenix Framework всегда был классным. Но он никогда не был таким классным, как с новым релизом 1.3 (который сейчас находится в стадии RC2).


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


Давайте начнем!


Перевод выполнен самим автором оригинальной статьи Никитой Соболевым.

Читать дальше →
Total votes 13: ↑13 and ↓0+13
Comments3

Возможности PostgreSQL для тех, кто перешел с MySQL

Reading time9 min
Views49K

Крутой varanio буквально на прошлой неделе прочитал на DevConf забойный доклад для всех кто пересел на Посгрес с MySQL, но до сих пор не использует новую базу данных в полной мере. По мотивам выступления родилась эта публикация.


Мы рады сообщить, что подготовка к PG Day'17 Russia идет полным ходом! Мы опубликовали полное расписание предстоящего мероприятия. Приглашаем всех желающих прийти и похоливарить с Антоном лично



Поскольку доклад на DevConf вызвал в целом положительные отзывы, я решил оформить его в виде статьи для тех, кто по каким-то причинам не смог присутствовать на конференции.


Почему вообще возникла идея такого доклада? Дело в том, что PostgreSQL сейчас явно хайповая технология, и многие переходят на эту СУБД. Иногда — по объективным причинам, иногда — просто потому что это модно.


Но сплошь и рядом складывается такая ситуация, когда какой-нибудь условный программист Вася вчера писал на MySQL, а сегодня вдруг начал писать на Посгресе. Как он будет писать? Да в целом также, как и раньше, используя лишь самый минимальный набор возможностей новой базы. Практика показывает, что проходят годы, прежде чем СУБД начинает использоваться более менее полноценно.

Читать дальше →
Total votes 59: ↑58 and ↓1+57
Comments139

Что за болезнь: рак

Reading time9 min
Views85K
О раке так или иначе слышали все. Кто-то видел сообщения в социальных сетях, кто-то помогал пережить эту болезнь родным и близким, а кто-то столкнулся с ней лицом к лицу.

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

Сегодня рассказываем, что такое рак, как он развивается и почему его так трудно победить.


Автор иллюстраций Майкл Ковальски
Читать дальше →
Total votes 47: ↑45 and ↓2+43
Comments62

Как создать современную CI/CD-цепочку с помощью бесплатных облачных сервисов

Reading time10 min
Views67K



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


Такой способ создания программного обеспечения используется в процессах Непрерывной интеграции (Continuous Integration) и Непрерывного развертывания (Continuous Deployment), или CI/CD-цепочке. В этой статье мы пройдем по всем шагам настройки такой цепочки, используя для ее построения бесплатные облачные сервисы.

Читать дальше →
Total votes 41: ↑38 and ↓3+35
Comments18

Поехать на заработки в Германию и остаться жить навсегда

Reading time6 min
Views35K
Всем привет! Меня зовут Олег и сегодня я хочу поделиться своим опытом переезда в Германию.
Я общаюсь до сих пор с многими IT-специалистами из России и очень часто, на мои предложения попробовать себя и поработать в европейской компании с переездом, люди отвечают: «Мой английский не так хорош» или «Как же я буду жить без родственников рядом» или «Мне нужно много денег на переезд». Это всё очень важные и действительно сложные моменты. Но, как я хочу постараться показать на собственном опыте, вполне преодолимые.


Total votes 53: ↑52 and ↓1+51
Comments130

Ansible и Rails — гибкая замена Capistrano с сохранением знакомого комфорта

Reading time12 min
Views14K
Capistrano — любимый многими rails-разработчиками инструмент, с помощью которого можно быстро и без заморочек автоматизировать развертывание вашего приложения. Capistrano — стандарт де-факто для системы развертывания RoR, must-know технология для любого уважающего себя рубиста, тот инструмент, которому в своё время завидовали разработчики на python и PHP.
Несмотря на комфорт, от которого не хочется отказываться, чем более сложные задачи мне приходилось решать, тем чаще Capistrano показывал себя к ним не приспособленным.

Я отметил следующие недостатки:
  • Известные проблемы со скоростью. Вследствие своей универсальности, Capistrano деплоит медленно, выполняя лишние проверки и вызовы, которые вы не всегда можете контролировать.
  • Последовательный деплой. Небыстрое время развертывания нужно умножить на количество целевых серверов (однако, можно настроить распараллеливание комманд явным образом).
  • Сильная связанность с рельсами. Конфиги и зависимости Capistrano переплетаются с приложением, становясь его частью. Нельзя создать новое окружение-развертывания (например сервера для раннего выкатывания функционала) без создания нового rails-окружения. В сложных ситуациях Capistrano заставляет уходить от хорошей практики держать только development, test и production окружения.
  • Плагины — палка о двух концах. Давая возможность быстро “прикрутить” развертывание той или иной зависимости приложения, плагины лишают вас контроля ситуации, заставляют действовать так, как действует разработчик плагина. О влиянии лишних “телодвижений” плагинов на скорость деплоя я написал выше.
  • Сложный деплой гетерогенных приложений. Трендом последних лет в рельсах стало выделение самых тяжелых (бекграундных или сетевых) задач в отдельные сервисы, не обязательно написанные на ruby. В такой ситуации capistrano заставляет вас плодить зоопарк из разных систем развертывания для разных языков и технологий.

Многие ruby-разработчики перешли на Mina или решают свои проблемы с помощью ещё более сложных систем управления конфигурациями вроде Chef и Puppet. Все они имеют свои особенности и недостатки и в разной степени решают описанные выше проблемы. Мне же удалось их решить их с помощью Ansible, не растеряв преимуществ Capistrano, к которым я привык.

Ansible это инструмент для управления конфигурациями и в его задачи входит не только описанное в этой статье выполнение удаленных команд на серверах для развертывания и управления отдельным приложением, но и автоматизация серверного администрирования посредством хранимых серверных конфигураций (ролей на языке Ansible). А значит Ansible (как впрочем и Chef и Puppet) позволяет гораздо больше, чем Capistrano и в конечном счете они все не идут с ним ни в какое сравнение. Однако, задача этой статьи дать rails-разработчикам отправную точку для миграции и разъяснить на этом примере основы Ansible. В конце этой статьи, волшебная команда cap production deploy превратится в ansible-playbook deploy.yml -i inventory/production
Кому интересно как — прошу под кат.
Читать дальше →
Total votes 13: ↑13 and ↓0+13
Comments13

Деплой Rails-приложения с помощью Docker

Reading time6 min
Views21K

Введение


Эта запись о том, как я деплоил Ruby On Rails-приложение на сервер DigitalOcean, чтобы оно работало в отдельном Docker-контейнере. Для простоты, я собираюсь очень подробно объяснить процесс развертки Rails-приложения внутри Docker-контейнера
В этом посте:
  • Как я установил Docker на сервере
  • Dockerfile для моего Rails-приложения
  • Сборка с гемами из Gemfile
  • Сборка со скомпилированными ассетами
  • Запуск приложения в Docker
  • Переменные окружения Docker для database.yml
Читать дальше →
Total votes 17: ↑15 and ↓2+13
Comments20

Рубин на рельсах: продакшен и деплой для чайников

Reading time13 min
Views32K
Год назад я довел свое первое рельсовое приложение до приемлемого вида. Вопрос использования готового кода в продакшене ранее меня не заинтересовал. С чего вдруг? Несложный язык, лаконичный фреймворк — уж деплой-то явно не сложнее, чем преодоление ментального тормоза после PHP.

Команда разработчиков Rails рекомендует использовать Phusion Passenger, он что-то вроде mod_php — установил, разместил файлы и полетел. На момент изучения вопроса на форумах хватало баталий о производительности решений; Passenger в них фаворитом не значился.

Совета относительно альтернативы я спросил у техдиректора сайта с миллионом уников в сутки — тот отправил меня гуглить на тему Nginx и Unicorn. Инструкция по настройке продакшена, найденная на Хабре, датировалась 2009 годом. Помимо прочего, ее просто переполняли изъяны уроков «Как нарисовать сову».

Отдельные составляющие процесса кое-где разжеваны по-английский, но монолитный tutorial на глаза так и не попался. В традициях рельсового сообщества лежит принцип, предписывающий делиться результатами и опытом решения проблем.
Делюсь
Total votes 38: ↑30 and ↓8+22
Comments81

Пример восстановления таблиц PostgreSQL с помощью новой мега фичи pg_filedump

Reading time5 min
Views19K


Позвольте я расскажу вам об одной классной фиче, которую мы с коллегами из Postgres Pro недавно запилили в утилите pg_filedump. Фича эта позволяет частично восстанавливать данные из базы, даже в случае, если база была сильно повреждена и инстанс PostgreSQL с такой базой уже не запустишь. Конечно, хочется верить, что потребность в таком функционале возникает крайне редко. Но на всякий случай нечто подобное хотелось бы иметь под рукой. Читайте дальше, и вы узнаете, как данная фича выглядит в действии.
Читать дальше →
Total votes 45: ↑45 and ↓0+45
Comments4

Ghost Methods в Ruby (перевод)

Reading time3 min
Views14K
Предлагаю вашему вниманию перевод фрагмента книги Metaprogramming Ruby 2 за авторством Паоло Перротта (Paolo Perrotta).

Что такое method_missing?


В Руби мы можем вызывать методы которые не существуют, но это будет возвращать нам ошибку. Для примера:

class Lawyer; end
nick = Lawyer.new
nick.talk_simple

NoMethodError: undefined method 'talk_simple' for #<Lawyer:0x007f801aa81938>

Помните ли вы как работает поиск методов? Когда вы вызываете метод talk_simple, Ruby идет в класс объекта nick, и перебирает там методы. Если он не может найти метод там, он ищет его в родителей данного класса, потом в Object и наконец в BasicObject. Ну и поскольку Ruby не может нигде найти метод talk_simple, он запускает метод method_missing для nick’a. Ruby знает что этот метод есть, потому, что это приватный метод BasicObject от которого наследуются все объекты.
Читать дальше →
Total votes 17: ↑17 and ↓0+17
Comments28

Как победить Excluded Constraints с помощью RubyGem

Reading time3 min
Views4.7K


Во время разработки iOS/OSX-приложений непременно приходится использовать Interface Builder и Auto Layout. В приложениях со сложными интерфейсом и в приложениях, находящихся в разработке достаточно давно, часто появляется проблема с большим количеством «исключенных констрейнов». Storyboard грузится необоснованно долго, а во время перехода между сценами можно успеть сходить за кофе.

Но, казалось бы, интерфейс всех контроллеров такой же незамысловатый, как и в релизе полгода назад. Что же случилось? Тем, кто использовал Size Classes, сразу понятно, что интерфейс — не такая простая штука, как кажется. Он ведет себя по-разному в разных ориентациях и на разных дисплеях. Делает он это, потому что некоторые constraints применяются только в определенной ситуации.

Это значит, что в остальных ситуациях эти constraints не используются. У Xcode Interface Builder есть особенность, которая помогает при разработке сложных интерфейсов и мешает при разработке простых. Если добавить constraint к какому-то UIView и затем удалить его из Xcode Inspector (а чаще всего это — самый удобный путь), Xcode не удалит его, а лишь сложит в список неиспользуемых на случай, если понадобится для другого дисплея или ориентации.

Иногда, если развернуть все группы constraints, можно ужаснуться происходящему в storyboard-файле:


Не хотите наблюдать подобное? Добро пожаловать под кат!
Читать дальше →
Total votes 10: ↑9 and ↓1+8
Comments4

Что нужно знать, чтобы хорошо рисовать?

Reading time5 min
Views256K


Давид Ревуа — прекрасный художник, работающий со свободным программным обеспечением, постоянный член сообществ Krita Foundation и Blender Institute, концепт-художник анимационных проектов Gooseberry Open Movie Project, Mango Open Movie Project (Tears of Steel) и Durian Open Movie Project (Sintel). В этой статье он делится с начинающими художниками списком знаний, которые необходимо приобрести, чтобы работы получались реалистичными. Он обращает внимание, что для рисования «в цифре» следует обзавестись теми же навыками, что и в традиционной технике. Итак, приобщимся к его опыту.
Читать дальше →
Total votes 134: ↑128 and ↓6+122
Comments113

Kotlin для Android, или лёгкий способ перестать программировать на Java

Reading time1 min
Views40K
На нашей конференции мобильных разработчиков #MBLTDev, которая прошла в конце октября в Москве, продуктолог компании JetBrains Илья Рыженков рассказал доклад о языке программирования под Android Kotlin.

Kotlin был разработан в компании JetBrains и публично представлен в 2011 году. В 2012 был открыт исходный код.


Презентация

Илья рассказал про историю создания языка, преимуществах программирования на Kotlin, отличия Kotlin от Java и о том, что на нем можно делать. А также показал несколько примеров кода на Kotlin для платформы Android.
Читать дальше →
Total votes 30: ↑25 and ↓5+20
Comments14

7 ключевых трендов веб-дизайна на 2015 год

Reading time5 min
Views89K
Оглядываясь на 2014, можно отметить некоторые впечатляющие тенденции, появившиеся в веб-дизайне: платформы для проектирования «без кода», параллакс, одностраничные веб-сайты и многое другое.

Хотя многие тенденции в дизайне мимолетны, некоторые из них являются естественной эволюцией данной отрасли. Растущий диапазон устройств, на которых мы просматривать веб-сайты, обязывает разработчиков постоянно адаптировать свою технологию для удовлетворения динамических изменений, которые происходят в веб-дизайне.

Чтобы узнать, какие тенденции будут процветать в течение следующего года, я обратился к членам проектной команды Webydo, разработчикам веб-дизайн платформы, чтобы они рассказали, какими будут по их мнению топ 7 главных трендов в веб-дизайне на 2015 год.
Читать дальше →
Total votes 38: ↑30 and ↓8+22
Comments38

Jump Start в PowerShell (часть I)

Reading time5 min
Views248K
Только автоматизация. Только PowerShell.



Предисловие


В качестве хобби и при наличии времени преподаю студентам в УКИТ (бывший Московский государственный колледж информационных технологий). На данный момент у меня мало времени, чтобы уделить его группе студентов, зато вполне достаточно, чтобы подготовить пост здесь, на Хабре.

Я работаю системным администратором в крупной не ИТ-компании с большой завязкой на ИТ ресурсы. По роду деятельности представляется решать большое количество однотипных задач по обслуживанию пользователей.

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

Внимание: PowerShell вызывает привыкание.
Читать дальше →
Total votes 46: ↑37 and ↓9+28
Comments63

ActiveRecord немного про грабли, Relations и индексы

Reading time8 min
Views23K
Хочу рассказать Вам о наболевшем: о работе с AR в целом и с Relation в частности; предостеречь от стандартных садовых изделий, которые легко могут испортить жизнь и сделать код медленным и прожорливым. Повествование будет основываться на Rails 3.2 и ActiveRecord того же разлива. В Rails 4, конечно же, много чего нового и полезного, но на него ещё перейти нужно, да и фундамент в любом случае один и тот же.

Сей материал, по большей части, предназначен для начинающих, ибо автору очень больно смотреть на извлечение содержимого целых таблиц в память в виде ActiveRecord объектов и на прочие отстрелы конечностей при использовании AR. Разработчикам, познавшим дзен, топик вряд ли принесёт пользу, они могут лишь Помочь, дополнив его своими примерами и назиданиями.
Читать дальше →
Total votes 27: ↑24 and ↓3+21
Comments41

Лучшие плагины для Sublime Text

Reading time5 min
Views639K

WebInspector


Мощный инструмент для дебаггинга JavaScript, полноценный инспектор кода для Sublime. Фичи: установка брейкпоинтов прямо в редакторе, показ интерактивной консоли с кликабельными объектами, остановка с показом стек трейса и управление шагами дебаггера. Все это работает на ура! А еще есть Fireplay от Mozilla, который позволяет подключаться к Firefox Developer tools и максимально простой дебаггер JSHint.



Читать дальше →
Total votes 116: ↑114 and ↓2+112
Comments101

Обзор Kindle Paperwhite 2013: чем второе поколение лучше

Reading time3 min
Views198K
Последнее время производители электронных книг в некотором роде уперлись в стену: значительных улучшений в ридерах на электронных чернилах добиться не удается. Уже больше года компании соревнуются скорее в качестве электронных книг с подсветкой, и Amazon первая, кто выпускает уже второе поколение подобного устройства. По традиции осенью компания Amazon представляет новую линейку электронных книг. В этом году — лишь обновленный Kindle Paperwhite, «рядовая» модель Kindle – осталась без изменений.

Надо сказать, что не всем производителям, выпустившим электронные книги с подсветкой, удалось сохранить уже достигнутый до этого уровень чёткости в отображении текста: нередко «картинка» букв в таких моделях получалась не столь контрастной. Kindle Paperwhite в этом моменте также чуть заметно уступал своему младшему «брату».

В новой модели нам обещали более быструю работу, лучшую контрастность и новые привлекательные программные особенности. В сегодняшнем обзоре попробуем ответить на вопрос, достаточно ли улучшений у ридера, чтобы менять старую модель на новинку.
Читать дальше →
Total votes 66: ↑61 and ↓5+56
Comments75
1
23 ...

Information

Rating
Does not participate
Location
Харьков, Харьковская обл., Украина
Date of birth
Registered
Activity