• Где лучше всего следить за релизом новых гаджетов, продуктов, сервисов?

    mixail_fet
    @mixail_fet
    Дизайнер веб-интерфейсов
    Далеко идти не нужно, с habr.com информацию не пропустишь.
    Ответ написан
    Комментировать
  • Как учить Java и Android?

    @pontifex024
    Я начинал учить Java с книги HeadFirst "Изучаем Java". В ней хорошо дается понимание основ ООП, естественно самого языка Java, и все это подкрепляется интересными примерами. После этой книги нужно побольше практики, гуглить задачки. Также, в коллекции HeadFirst есть замечательная книга по "Паттерны проектирования", читал ее для тренировки ООП мышления, ну и для изучения самих паттернов. Для андроида сам искал материал, тоже планирую изучать, нашел вот этот ресурс developer.alexanderklimov.ru/android/index.php
    Правда, сам еще его не разглядывал, но, на первый взгляд, материал излагается понятным языком.
    Ответ написан
    Комментировать
  • Счего начать изучение DevOps?

    insiki
    @insiki
    broken pipe
    Неплохо раскрыта тема здесь Как попасть в DevOps, как учиться и что читать
    Ответ написан
  • Счего начать изучение DevOps?

    Sanes
    @Sanes
    Docker, Ansible, Puppet, Chief для начала. Про bash и Python наверное и так понятно.
    Но стек у всех компаний разный.
    Ответ написан
  • Чем сисадмин отличается от devops?

    @yellowmew
    Cloud infrastructure, monitoring engineer. SRE
    Наиболее близко отвечает InoMono но советую всем углубиться в ветку комментариев, поскольку изначальный ответ очень мутный, а в комментах есть нормальные и внятные пояснения от него же самого.

    Ответ на вопрос ТС, если кратко: то что пишется в вакансиях "devops инженер" и других "devops-другое слово" по сути - только хотелки конкретной компании по организации devops процессов. Например, им нужен тот кто настроит уже упомянутые ci\cd и, что наиболее важно для бизнеса, сократит время выкатки кода на живую до минимума, убрав, в том числе кучу ручного труда(что есть потери по времени, а значит и деньгам).
    В чем отличие соответственно с сисадмином?
    Сисадмин - это явный ops и от него по умолчанию не требуется заниматься процессами доставки кода.
    Вы можете работать на небольшом заводе, иметь свою серверную с набором серверов, заниматься внешней почтой, веб серверами, ip телефонией на asterisk и еще кучей явно опсовских активностей, и не иметь отношения к доставке какого-либо кода, поскольку у вас в штате есть только один вид программиста - 1с-ник. Вполне может быть что этот программист - тоже вы :D
    Вы можете заниматься развертыванием веб серверов со всеми прилегающими в небольшой веб-студии, и тоже быть только сисадмином. Но тут вы скоро вымрете, вы здесь не нужны: как только возникает потребность доставлять код (особенно если он пишется не одним человеком) - тогда и возникает необходимость налаживать процессы из девопс практик.
    P.S. никто вам не мешает использовать практики Infrastructure as a code и другие из devops и вообще поднимать всю инфраструктуру терраформом. Никто не мешает вам настраивать сервера с помощью chef\puppet\ansible, будучи сисадмином - это ваш плюс, ваш шаг к полной автоматизации вашей работы. Девопс, однако, на вашем заводе вы все равно не построите.
    Ответ написан
    Комментировать
  • Счего начать изучение DevOps?

    Continuous Integration and Delivery - GitLab TravisCI CircleCI
    Docker -> docker-compose -> Kubernetes
    Это базовое начало, которое доставит море хлопот .
    Ответ написан
  • Счего начать изучение DevOps?

    saboteur_kiev
    @saboteur_kiev Куратор тега Системное администрирование
    software engineer
    1. для начала git плюс какая-нибудь система управления (подойдет знакомство с github)

    2. Во-вторых CI Инструмент - Jenkins или Teamcity.
    Попробуйте для начала установить локальный дженкинс, и какие-нибудь задачи перенести из cron в Jenkins, посмотреть как это работает

    3. Виртуальные машины не должны быть проблемой, vmware и virtualbox сейчас потихоньку замещаются облаками и контейнерами. То есть было бы неплохо иметь базовое представление о том, как работать с docker, aws, kubernetes. Этого будет достаточно, чтобы прийти помощником девопса.

    4. Деплой это вопрос отдельный, зависит от проекта. Их множество.

    5. Неплохо бы знать что примерно делает maven - это поможет в java проектах.
    Ответ написан
  • Счего начать изучение DevOps?

    neatsoft
    @neatsoft
    Life is too short for bad software
    Базис:
    The Twelve-Factor App (перевод)

    Список необходимых инструментов и технологий:
    DevOps Roadmap
    Ответ написан
  • Счего начать изучение DevOps?

    Так же понадобится знание bash (скрипты), большим плюсом будет знание какого либо ЯП, например python. Зачастую будет необходимо понимать суть чужого кода на незнакомых ЯП.
    Знание Jenkins, и, например, GitlabCI.
    Какой-либо системы оркестрирования: ansible, puppet, chief, solt...
    Лично у нас деплой через capistrano, но деплой-систкм так же превиликое множество.
    У каждой команды будет свой стек инструментов и методик. Нужно приходить в команду и прыгать в этот омут.
    Ответ написан
  • Почему не запускается код на Java?

    OLDJman
    @OLDJman
    Добрый день. Специально зарегестрировался, чтобы описать решение этой проблемы.
    Сам недели две назад тоже мучился и думал что я м.д.к, потому ничего не работает.

    Это не совсем так, поэтому читайте ниже.

    Суть проблемы:
    При повторение видео урока, а точнее действий в нем, желаемый результат не выводился. Конкретнее была написана программа вывода сообщения Hellow World в консоли WIndows
    А именно, компилированный ява файл, вызывался командой java ИМЯ.class, и выходила соответствующая ошибка: "could not find or load main class ИМЯ_класса"
    т
    Как решил:
    Вызывать надо уже ОТКОМПИЛИРОВАННЫЙ файл командой[b][i] java ИМЯ [/i][/b]И все!!! Тогда консоль нормально воспроизводит программу, если, разумеется, в ней нет ошибок.
    Возможно для гуру программирования, это очевидный ответ, и кажется что это норма, но я как 3-ью неделю изучающий яву, на второй день реально не понимал в чем суть проблемы. И так как несмотря на то что обучение идет трудно, мне было обидно и непонятно почему это не работает.

    Ниже распишу полный алгоритм работы с ява машиной на базовом уровне, может быть кому-то это поможет.

    1) Скачать JDK c оф сайта (ссылку давать не буду, это точно найти сможете)
    2) Установить скачанный пакет
    3) Подключить установленную ява машину к нашей системе ( у меня это Windows 7)
    а) зайти в папку с установленным пакетом и найти файл java.exe (у меня на Windows это было: C:\Program Files\Java\jdk1.8.0_05\bin\java.exe)
    _______обращаю внимание, что находить именно файл java.exe не обязательно, просто я сделал так=)
    б) Нажать на java.exe правой кнопкой мыши, выбрать "Свойства". В выскочевшем окошке, во вкладке "Общие", ищите строку "Расположение". Выделяйте и копируйте путь (у меня это C:\Program Files\Java\jdk1.8.0_05\bin)
    в) Открываем пуск, наводим мышку на "Мой компьютер", жмем правую кнопку мыши, жмем "Свойства".
    г) В открывшемся окне, слева, жмем кнопку "Дополнительный параметры системы"
    д) В отрывшемся окне "Свойства системы", во вкладке "Дополнительно" (она по умолчанию выделена/открыта), внизу ищем кнопку "Переменные среды". Жмем на нее
    е) В открывшемся окне "Переменные среды", в верхней его части, а именно "Переменная среды пользователя..." нажимаем кнопку создать
    ж) В открывшемся окне вводим имя переменной, у меня это Path (можно ли другую, я не знаю), а в поле "Значение" вводим наш скопированный путь (C:\Program Files\Java\jdk1.8.0_05\bin)
    д) Жмем "ОК", сохраняем все.
    4) Проверяем нашу ява машину
    а) Запускаем консоль (либо WIN + r => затем cmd и Enter либо Пуск => вводим в поиск над пуском cmd и жмем Enter)
    б) В открывшейся консоли, вводим java
    в) После этого должно появиться куча команд ява, служебная информция и прочее, если все нормально подключилось, если нет, то выдаст ошибку, вроде "Нет такой команды", или что-то похожее. Если что-то не так, делай действия выше по новой.
    5)Если все ок, идем дальше. Создаем нашу простую программу на java.
    6)Открываем блокнот, и пишем там код ниже:
    [code=java]public class Hellow
    {
    public static void main(String[] args)
    {
    System.out.println("Hellow World!");

    }
    }
    [/code]
    Обращаю внимание, что тут частые ошибки, это не написан метод "main", и "println" ошибочно написано. Внимательно проверьте что напечатали сами. Если вы абсолютный новичек, то прежде чем будете понимать что происходит, должно пройти время, поэтому не умничайте, и проверяйте вплоть до каждой запятой.
    7) Сохраняем наш файл. Вот тут обратите внимание на деталь: "В строке public class Hellow, слово Hellow, это имя класса, оно по сути, может быть почти любым, но очень важно, чтобы это имя совпадало с именем вашего файла, что вы сохраняете, причем если у вас он с большой буквы, значит и имя файла должно быть с большой. Сегодня я выяснил что в java вообще принято давать имена классов с большой буквы, так что не ленитесь, пишите с большой, но с маленькой, тоже не будет ошибкой, главное сохранить правило, какое имя класса, такое и имя файла.
    Сохранять надо с расширением .java
    В итоге, в нашем примере нужно сохранить файл в таком виде Hellow.java (вроде бы есть исключения, типо можно обозвать файл как хочу, но я не уверен, увы, но пока этого не знаю, так что делайте как выше написано, потом если узанете правду, напишите мне, благодарен буду)
    8) На данном этапе, мы просто создали файл, который может откомпилировать программа, вторая ошибка, это желать сразу открыть этот файл и исполнить его. Деталей я не знаю, но суть в том, что современные Операционки и процессоры, не умеют это делать, не знаю почему, вроде что то там с процессом производства компьютеров, они вроде 4-битные, или наоброт не 4 битные, короче этот код просто так не запустить, его нужно откомпилировать, перевести в машинный язык, который можно запускать, для этого идем к след шагу
    9)Запускаем консоль, в ней переходим в папку с нашим файлом Hellow.java
    Обращаю внимание, так как я полный новичек, то как переходить в консоли, тоже понятия не имел, на всякий случай распишу минимум, который нужно знать
    Чтобы зайти в каталог, нужно ввести команду cd ИМЯ_каталога. Например, нам нужно зайти в каталог/папку Desktop , вводим cd desktop. Разумеется, зайти мы туда сможем, только если эта папка находимся в том месте, где мы есть. Текущее местоположение отображается слева от вводимой команды в виде C:\Program Files\
    Чтобы вернуться в корневую папку диска C нужно ввести cd \
    Как-то можно подыматься на каталог выше, и прочие действия, но тут уже гуглите, у меня задача другая.
    Команда dir показывает список всех папок в данном каталоге/папке
    Если вы знаете точный путь к каталогу, можно из любого месте прописать полный путь в виде C:\Program Files\Java\... и вы туда попадете. В конце обязательно ставте \, а в начале диск C например. Иначе не сможете зайти.
    Команад help выводит вроде базовый список возможных команд

    Итого, алгоритм действий для попадания в нашу папку, где лежит файл Hellow.java
    ввести cd \
    потом dir
    прочитать что там есть, зайти в нужную папку командой cd ...
    снова dir
    и так далее
    Разумеется нужно понимать самому, где находиться твой файл, например, путь для файла, сохраненного на рабочем столе будет таким c:\users\ИМЯПОЛЬЗОВАТЕЛЯ\desktop\
    10) Теперь нам нужно откомпилировать файл Hellow.java. Для этого в консоли пишем javac Hellow.java
    Если все ок, через пару секунд снова загорится поле ввода команды.
    Если выскочила ошибка, как правило это какой либо косяк на этапе компиляции, читайте что там написано, там всегда пишут в чем была ошибка. Чаще всего это косяк в коде. Заходите в ваш файл и проверяйте внимательно строки. Чем чаще будете читать ошибки, тем быстрее научитесь их распозновать, Знание английского в 100500 раз облегчит работу.
    11) Когда файл откомпилировался, он сохраняется в той же папке, что и основной (Hellow.java), принимая имя, вроде бы класса, это детали, я их увы, не знаю, но расширение станет уже .class В нашем случае это будет файл Hellow.class
    12) Вот только теперь можно запускать этот файл, для проверки, что он у нас есть в папке, где мы находимся, в консоли вводим команду dir
    видим наш файл, и вводим команду java Hellow
    Причем обращаю внимание, не java Hellow.class , а именно java Hellow. Так как первый вариант выдаст ошибку, уж почему, извините, я не знаю.

    13) в консоли, на новой строке, выскочит сообщение Hellow World!
    Все.

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

    Спасибо за внимание и заранее извините за ошибки. Если когда-нибудь надо будет, может быть я исправлю все недочеты своей короткой статьи, а пока держите, как есть.
    Удачи в программировании!
    Ответ написан
    10 комментариев
  • Сложно ли написать свой блог на nodejs?

    Кстати, рекомендованный выше сайт https://learn.javascript.ru как раз написан на Node.JS (точнее, io.js). Никаких сложностей нет, но, как и всегда в реальных проектах - есть много-много деталей.
    Ответ написан
    3 комментария
  • Системное администрирование сайтов на vps. Что для этого нужно знать?

    @ramjke
    Языки - никаких не надо знать. Достаточно грамотно настроить программы.
    Nginx - настройки оптимизации (кеширование, keepalive, gzip, количество воркеров), и безопасности (сервак не должен ложиться под дос-атаками и выполнять php, загруженный под видом картинки). Уметь пользоваться Rewritemode.
    MySQL - настройки кеширования (размер кеша, количество таблиц в кеше).
    PHP - Memcache/Xcache для кеширования результатов запросов к php. Настройка заключается в основном в выставлении размера кеша.
    Wordpress - знание основных атак и установка плагинов от них (из популярных атак - брутфорс пароля к админке и xml-rpc атака).
    Ротация логов - чтобы место на диске не закончилось от распухших логов.
    Fail2Ban - чтобы не забрутфорсили пароли к ftp, smtp, ssh.
    Опционально - установка системы мониторинга (Zabbix, Nagios) для отслеживания работы служб (nginx, mysql и другие необходимые) и доступности сайта.
    Из утилит нагрузочного тестирования простейшая - ApacheBench (просто шлёт n запросов на одну страницу), покруче - Jmeter (с возможностью записывания сценариев).
    Ответ написан
    2 комментария
  • Что нужно знать чтобы стать начинающим системным инженером (devops)?

    Singaporian
    @Singaporian
    Статья, которую должен прочитать каждый.

    DevOps - не профессия. Это название культуры доставки кода от разработчика (dev) через тестировщиков и до сисадмина(ops) и обратная связь по этой цепочке.

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

    Профессии, которые отрисуются в процессе построения этой методологии следующие:
    • Build Engineer - инженер, который управляет зависимостями, сборками, конфликтами кода.
    • Release Engineer - инженер, который управляет репозиторием кода (кто куда и по каким правилам мерджится и откуда бренчуется). Пожалуй, это самая сложная задача в больших проектах. Особенно с нестрогим Agile или в Waterfall.
    • Automation Engineer - инженер, который занимается автоматизацией рутинных задач. Обычно деплоймент, автотесты, etc. Все эти buzz-слова типа Docker - его инструментарий.
    • Site Reliability Engineer - инженер, который поддерживает ops (апгрейды, расширение железа)
    • Configuration Manager - непонятная мне специальность. Жуткое порождение HR-специалистов, давящих на громкое название позиции. Можно было бы пойти дальше и назвать специальность ZooKeeper Vice President

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

    Почти всегда все эти роли совмещают один-два человека. Ну это зависит от качества кода.
    Назовем эту компанию BRAE/CM для краткости.
    Задача BRAE/CM состоит в том, чтобы программный код, который выходит из под пера программистов, оставался на контроле программистов и сисадминов одновременно. Программисты, равно как и сисадмины, благодаря DevOps-подходу, имеют возможность и даже обязаны обслуживать код на протяжении всего жизненного цикла от планирования архитектуры до мусорки.
    То есть сисадмины начинают рулить еще до того, как код попадет к ним - на ранних стадиях, а программисты продолжают рулить своими задачами уже после того, как код от них ушел к сисадминам - на поздних стадиях. И все это прозрачно друг для друга и все проблемы и решения ходят туда сюда и не спотыкаются о бюрократия в стиле "ничего не знаю, мы код уже закоммитили, у меня тут свои проблемы, у них сломалось - пусть сами и чинят".

    Так вот эта работа - завершающая стадия системного администратора и начинающая стадия разработчика. Поэтому не бывает Junior BRAE/CM.
    BRAE/CM бывает всегда только Senior в системном администрировании и всегда Junior в программировании.

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

    Сразу оговорюсь по языкам.
    У каждого языка свое предназначение. Java чаще используется в корпоративном секторе. Там много серверов и сложные бизнес-приложения. Поэтому Java-мир очень чувствителен к таким понятиям, как "технинческий долг" и "управление процессом разработки". И именно поэтому именно там все основные вакансии DevOps и именно там будет самый интересный опыт.
    Кроме Java, традиционно сильная DevOps-культура у Ruby. Практически все остальные языки не имеют столь развитой и популярной инфраструктуры в в данном контексте и потому вам скорее всего будут неинтересны.
    Другими словами, если в среде разработчиков выбор языка - тема для холивара и эмоций с миллионами сравнительных анализов с противоположными результатами, то для специалистов по DevOps выбор очевиден и прозрачен. Java - это одновременно самые интересные задачи, самый богатый toolset, самый большой выбор вакансий и самые высокие зарплаты.

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

    Итак, что делать:
    1) Почитать книги Head First по Java. Пройти курсы Java на EDX.
    2) Освоить SVN. Есть прекрасные тьюториалы. (GIT освоим позже)
    3) Поставить VirtualBox (не VMWare!!!)
    4) Написать простенькое приложение. Код коммитить в SVN. Собирать его при помощи maven.
    5) Поднять на отдельной виртуалке Jenkins. Он должен брать код приложения на SVN и запускать свой локальный maven для сборки.
    6) Написать модульные тесты (unit tests) своего кода. Пусть maven и их прогоняет.
    7) Поднять где-нибудь Nexus. Усложнить задачу maven, чтобы он теперь складывал все в Nexus. Если maven'у потребуются внешние библиотеки, он тоже не сам должен ходить в интернет, а через Nexus (Central repo).
    8) Настроить на своем десктопе vagrant так, чтобы он с нуля создавал виртуалки VirtualBox.
    9) Создать виртуалку DEV через vagrant. При этом ansible должен на ней что-нибудь настроить (например установить JDK)
    10) Научиться деплоить jar/war из Nexus на виртуалку DEV чем-нибудь. Чем - не посоветую, так как сам работаю с очень сложным IBM uDeploy, а это точно не для новичка. Посмотрите в сторону Rundeck или чего-то такого. Может самим Jenkins'ом задеплойте.
    11) Напишите интеграционные АВТОтесты. На чем хотите (как вариант: Selenium).

    Усложняем систему.
    12) Донастраиваем Jenkins: собирает maven-проект; выкладывает на Nexus; дергает vagrant/ansible для создания виртуалки SIT (system integration test); деплоит приложение на SIT; прогоняет автотесты на SIT; удаляет виртуалку после успешного завершения автотестов.
    13) Прикручиваем SonarQube в Jenkins для статического анализа кода. Исправляем косяки своего кода, согласно полученным от SQ рекомендациям.
    14) Прикручиваем мониторинг Sensu.
    15) Пишем нагрузочные тесты на чем-нибудь. В идеале потрогать два инструмента: jMeter и Gatling.
    16) Как и в 12-м шаге прикручиваем в Jenkins автоматизацию создания виртуалки SLT (Stress/Load test) и прогона на ней тестов. Только уже лоад-тестов(обязательно) и стресс-тестов(опционально) соответственно.
    17) Дописываем в свое приложение какой-нибудь функционал, чтобы использовалась база.
    18) Придется познакомиться с LiquiBase. Деплой SQL руками делать запрещено.
    19) Перейти на Docker (то есть теперь приложение выкладывать не напрямую в ОС, а внутрь докера)

    20) Денек на то, чтобы почитать про Agile, Scrum, Waterfall и прочие организационные порядки.

    А теперь немного уходим в управление проектом:
    21) Поставить Atlassian Jira. Разобраться, чем отличаются Epic, Story, Task, Sub-Task. Создать себе подобной этой структуре фронт работ (делать его не придется, просто нафантазируйте).
    22) Поставить Atlassian Stash и связать его с Jira.
    23) Переехать со своего SVN на GIT, предоставленный Stash'ем.
    24) Пройти Git-тьюториал какой-нибудь. Инструмент очень нетривиальный.
    25) Взять любую таску в работу. При этом в начале работы сделать новый Git branch из тикета Jira.
    26) По завершению работы запустить всю построенную ранее цепочку, но уже для своего брэнча.
    Дайте попробую угадать: вам пришлось скопировать все джобы и переписывать в них ветки?
    27) Сделать джобы нормально. Чтобы одни и те же можно было использовать для любых веток - по аналогии с принципом программирования "reuse code". У Вас будет reuse job :)
    28) Сделать pull request, самому сделать code review и самому себя же за-approve'ить. После этого сделать merge своей ветки в master.
    29) Сделать сборку брэнча автоматической по git-hook (или SCM pool)

    30) А теперь высший пилотаж: к чертям Docker, Copistrano и прочую buzz-word-hipsters-галиматью. Теперь вы с этим знакомы и сможете применить, но пришло время выгрызать этот детский сад калёным железом. Теперь вы доставляете код только как .deb-пакеты. Это значит, что вы:
    a) разбиваете control-файл на несколько пакетов, возможно с lib*,
    b) оверрайдите все ~20 dh_ в файле rules так, чтобы все это соответствовало вашим наработкам в предыдущих пунктах.
    c) раскидываете файлы по .install
    d) самое тяжелое: готовите .preinst, .postinst, .prerm, .postrm файлы СОГЛАСНО ИХ ПРИМЕРАМ .ex, сгенерированным dh_make - то есть с разбиемнием на update/configure/broken-install и что там еще есть. Это означает, что при переустановке, при апгрейде, при даунгрейде, при удалении и при пурдже, у вас будут разные сценарии, каждый из которых должен быть проработан досканально. На этом этапе вы также познакомитесь с понятием "регрессионные тесты".

    Ну как бы базовый вариант вот. Но это далеко не весь инструментарий и путь. Это так, для начала.
    Кроме этого неплохо бы познакомиться с Puppet (это не очень подходит для DevOps, скорее для рядовых админов с кучей серверов, но это очень популярный инструмент ввиду того, что никто не понимает, что такое DevOps и вас скорее всего заставят управлять сотней серверов, вместо релиз инжиниринга). А так же нужно познакомиться с операционными системами NixOS (обязательно) и CentOS/Debian (опционально, но я бы палкой бил тех, кто не знает эти OS). Кроме того, надо базово ориентирваться в PostgreSQL.

    Внимание, важный момент, который должен быть вшит на уровень подсознания у DevOps-ориентированного инженера: вы все время пробуете новые инструменты. Вы всегда будете находить что-то очень отличное. Знаете Nexus как свои пять пальцев и он решает почти все проблемы? Отлично! Теперь выкидываете Nexus и ставите Artifactory. Знаете хорошо CentOS? Круто! Теперь пробуете все это проделать на Windows или Debian. Потому что только когда вы сможете сравнивать инструменты, ваша работа будет ювелирной. А DevOps бывает либо ювелирным, либо он не DevOps. Вы должны быть языко-независимым, платформо-независимым и инструменто-независимым.

    Что будет дальше? Дальше вы начнете работать с микросервисами (сотни одинаковых контейнеров в облаке, которые должны как-то работать друг с другом без ручной конфигурации). Тогда познакомитесь со всякими Consul, ZooKepper и кучей инструментов AWS/OpenStack.
    Ответ написан
    13 комментариев
  • При выборе скорости 100Мбит\сек дуплекс отваливается кабель, при 10 Мбит всё нормально. почему?

    @pfg21
    ex-турист
    навскидку:
    дальность большая,
    затухание где-то, кабель влажный, изоляция хреновая, небольшое межжильное сопротивление.
    жила оборвалась и просто прижат - повышенное погонное сопротивление,
    куча перегибов с большим углом и маленьким закруглением,
    может просто технологический косяк в самом кабеле
    и еще куча возможных вариантов...
    100 мбс затухает, а 10 мбс пробивает.

    как вариант попробовать в середину линии воткнуть хаб/свитч для усиления сигнала.
    но лучше проверить линию.
    Ответ написан
    6 комментариев
  • Объясните что такое полиморфизм простыми словами ?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Да ладно, парни. Ну хватит уже, к чему такие сложности? Берём и читаем. Вообще совсем не обязательно читать про архитектуру и абстракции именно по своему языку, хотя javascript в этом плане родился уродом.

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

    Собственно, представим себе рядом стакан, кружку, чайник, кофемашину, велосипед и скейт. Что между ними всеми общего? Ну как минимум то, что они есть. То есть это - объекты, которые были созданы. Но как они были созданы? Скорее всего на заводе производителя по чертежам. Ок, чертежём назовём конструктор. Ну а класс? А что это такое? А его нет в нашей вселенной - эта сущность есть абстракция, что живёт лишь в наших мыслях. В реальном мире её нет и никогда не будет, такова уж физика - ей по барабану, что птицы и млекопитающие имеют дальних родственников - она лишь обеспечивает возможность естесственного отбора. А уж родственников друг другу находим мы, люди.

    С объектами и классами разобрались, а что же там с нашими стаканами и велосипедами. Мы уже поняли, что всё это объект, то есть грубо можно все объекты наследовать от какого-нибудь суперпредка, суперкласса, что и реализовано в некоторых языках. Но что другого общего между скейтом и стаканом, например? Конечно, можно углубляться и считать, что они все из молекул, и они все из твёрдых веществ. Однако это всё бред и СПГС, так что ответ прост - да ничего. То есть это совершенно разные объекты с совершенно разным функционалом. Более того - естесственно компьютерные модели и иерархии будут сильно отличатся от физик и химий. И это нормально, вопрос об адекватностях моделей ставиться лишь когда модель неадекватна, а до тех пор пилить можно что угодно, лишь бы работало.

    Вот. У нас есть супер-предок Object, от которого дефолтно наследуются все объекты. Допустим, то что объекты состоят из атомов и есть то, что наследуют все объекты. Но все дополнения и правки - полиморфизм. Так, из атомов мы слепили колёса и приделали на доску - ок, это скейт. На него можно встать и катиться, а сильно извернувшись и полетать в трёх метрах над землёй, прямо таки излучая своё яркое эго. В то время как стакан - это мы слепили из атомов плотную ёмкость, из которой вода не выливается под действием силы тяжести. И прямое применение стакана - налив воды опрокинуть его над ртом, чтобы вода вытекла прямо в желудок. Так делают настоящие пацаны, не заботясь об икоте или страхе утонуть, так что вот - полиморфизм.

    Однако что с остальным? У нас ещё абстракция, инкапсуляция и наследование. Ок, начнём с наследования, так оно наиболее близко. Вот что у нас общего между стаканом и кружкой? Ну в оба можно налить воду, но у кружки есть ручка чтобы держаться. То есть можно придумать некий общий класс - ёмкость. Однако что это за класс? Можно например за этот класс взять стакан, тогда все ёмкости по дефолту стаканы, а всё остальное - видоизменённые стаканы. Но кому-то больше нравяться кувшины, например некоторые чики насят их на голове, считая что это удобно. Ну и пусть носят, но как-то же решить надо, что главнее и идеальнее. Так вот - недостяжимый идеал и есть главный - это называется абстрактный класс. То есть ёмкость, что невозможно создать, для которого нет полного чертежа. А все чертежи, что дополнили до полного - есть наследованные классы от класса ёмкость.

    Тут мы подошли к абстракции. Вот такое иерархическое наследование приводит нас к, возможно главной, идее ООП. Вот мы взяли и выделили всё, куда можно налить воду в отдельный класс, нарисовали общий чертёж, но специально не доделали его, оставив зазор для будущих творцов, и назвали чертёж - ёмкость. Тысячи лет изобретатили всех миров создают свои ёмкости, одна лучше другой. Для разных людей - по разному, конечно. Но каждый раз группировать молекулы стекла определённым образом - непростая задача. Поэтому ремесленники пошли на хитрость, они создали тайный совет ремесленников мира и решили делиться друг с другом своими наработками. То есть создавать мелкие чертежи и объявлять классом, например, извлистой ручки в форме ленты Мёбиуса, например. Возможно такая ручка удобно только инопланетным существам, но чертёж создан и к нему можно ссылаться при создании своего чертежа. Таким образом мы абстрагируемся от низкоуровневой задачи "формирования ёмкостей посредством перемещения молекул" к "конструированию ёмкости посредством совмещения деталей, элементов". Это и есть абстракция.

    Но мы подошли к последнему пункту - инкапсуляция. Она неразрывна с абстракцией, и по сути благодаря ей она и работает. Инкапсуляция - это своеборазный клей (или синяя изолента), которым склеивают разные чертежи в один. То есть совмещение деталей для создания своей - это и есть инкапсуляция. Причём при совмещении мы можем не описывать детали этого совмещения (то есть члены класса могут быть приватными), таким образом помогая абстрагироваться тем, кто этот чертёж использует. Вот посмотрим на чайник - что это такое? Это стакан (или кружка) к которому снизу (а может внутри по середине?) приклеен нагревательный элемент. Пустив по нему ток, согласно инкапсулированному в нагревательный элемент закону Ома, будет выделяться тепло и нагреваться вода. А кофемашина? Это куда более сложное устройство, с множеством насосов, ёмкостей, шлюзов, измельчителей и чайников. И всё склееное клеем. А может синей изолентой. Это снова инкапсуляция.

    Таким образом, абстракция невозможна без инкапсуляции и наследовании, как невозможен полиморфизм без, собственно, наследования. Ну а полиморфизм невозможен ещё и без инкапсуляции, которая банально бесполезна без наследования и полиморфизма. Вот такие тут треугольники с пирогами. Жаль только про пирог наврали. И про день рожденье.
    Ответ написан
    3 комментария
  • Программа для удаленного выполнения разных задач?

    @Tabletko
    никого не трогаю, починяю примус
    SCCM, ansible, PS + скрипты
    Для тестирования под Win есть ещё какой то продукт от MS, но я не помню его названия
    Ответ написан
    2 комментария
  • Redmine vs jira. Что выбрать?

    @NooName
    В jira имеется достаточное количество плагинов, позволяющих настроить процесс под бизнес. Что касаемо русского языка, то сами atlassian потихоньку переводят приложение на русский, плагин доступен и бесплатен.
    Ответ написан
    Комментировать