Привет, Хабр!

Давно не писали про обновления в нашем образовательном проекте Хекслет, а тут как раз Новый год — самое время поделиться хорошими новостями. Мы сделали бесплатным популярный курс «Bash: Основы командной строки»! Это уникальный курс, потому что упражнения в нем (как и везде в Хекслете) выполняются в условиях, приближенных к боевым: вам доступен личный контейнер с root-доступом, в котором среди прочего запущена оболочка Bash.

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

Новые курсы


За последние месяцы вышло много новых курсов. Например, цикл по PHP сейчас выглядит так:

  1. Основы программирования
  2. Императивное программирование
  3. Алгоритмы
  4. Функциональное программирование
  5. Объектно-ориентированное программирование
  6. Автоматическое тестирование
  7. PDO: Работа с базой данных

Первые шесть курсов уже завершены, доступны все уроки и упражнения. Курс по БД завершается до Нового года.

Загляните в наш каталог курсов, возможно, найдете еще что-нибудь интересное для себя.


Крутой подарок программистам


Знаете, что можно подарить своему другу/подруге-программисту на праздники? У нас есть отличная идея :) Крутой подарок — полный доступ к курсам на Хекслете! Вы можете выбрать любое количество месяцев, указать свое имя (если хотите), и оплатить подарок картой. Мы пошлем довольному получателю письмо с подарком. Это даже круче, чем книга, потому что у нас есть практика, и каждый месяц выходят новые курсы.

Путь программиста


Мы запустили сайт «Путь программиста» в бета-режиме. Его цель — ответить на вопрос «что и в каком порядке изучать, чтобы стать программистом?»

При сегодняшнем обилии учебных материалов, курсов и книг, главный вопрос, который встает перед новичком это не «где учиться?», а «что и в каком порядке учить?». Существует множество мнений по этому поводу. Кто-то советует начинать с математики, кто-то советует конкретные языки и технологии.

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

Этот сайт детально описывает путь программиста в соответствии с нашими высокими, но справедливыми стандартами.



Сейчас доступны описания трех путей: PHP, Ruby on Rails и Static Frontend. А еще там есть полезная страница с «книгами на все времена». Мы советуем прочитать эти книги каждому программисту.

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

Вебинары


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

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

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

Вот и все (на самом деле нет)


Жизнь на Хекслете кипит, битвы на CodeBattle не прекращаются, новые уроки и курсы выходят и выходят, а наш чат продолжает быть очень клевой и активной тусовкой разработчиков (кстати, самые полезные и интересные беседы из чата сохраняются в специальный архив).

У нас куча новостей постоянно, но пост заканчивается и места больше нет :)

Мы поздравляем вас с Новым годом и желаем красивого кода в наследство, интересных, нескучных задач в проектах и чудесной документации к каждому API, с которым придется иметь дело.

Увидимся в 2016 году!

P.S. ОМГ, 2016, цифра как из фантастического фильма...

Комментарии (29)


  1. Self_Perfection
    29.12.2015 13:42
    +1

    Посмотрел минут 5 из вашего курса по bash из любопытства.

    И вижу у вас стандартный методологический косяк: не разделяются понятия «команды» и «утилиты». Просто чуть более точная терминология позволит не образовываться каше в голове. Видел я уже людей, пытающихся делать 'sudo cd'.


    1. toxicmt
      29.12.2015 14:02
      +2

      Спасибо за ревью, учтем в будущих реинкарнациях.


    1. toxicmt
      29.12.2015 14:06
      +2

      Вы практику еще зацените ;)


    1. khim
      29.12.2015 14:47
      -1

      А на какой уровень там курс вообще? Потому что некоторые вещи ведь и «команды» и «утилиты» одновременно. Скажем "[" (не путать с "[[" !).

      P.S. А вообще bash — это, конечно, что-то с чем-то. Много вы знаете языков программирования для которых задача «запомнить где-то значение переменной, чтобы потом восстановить его» была бы сложной проблемой, а не чем-то с чего описание языка бы начиналось?


      1. Self_Perfection
        29.12.2015 16:12

        Если иметь ввиду, что bash это не язык программирования, а shell, среда для более-менее удобного запуска других программ и согласования их работы, то многое становится на свои места.

        Не понимаю, где вы увидели сложности в «запомнить где-то значение переменной»

        FOO=$BAR
        

        нет?


        1. sledopit
          29.12.2015 17:02
          +1

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

          $ cat file
          woo
          hoo
          $ wii=1 ; cat file | while read title ; do wii=$title ; echo $wii ;  done ; echo $wii
          woo
          hoo
          1
          Да, конкретно этот случай можно несложно обойти, например так:
          
          $ wii=1 ; while read title ; do wii=$title ; echo $wii ;  done < file ; echo $wii
          woo
          hoo
          hoo
          правда, нужно помнить, что файл не должен заканчиваться на \n (иначе в конце получится пустая строка).
          И вообще обо всей этой кухне нужно знать.


          1. icCE
            29.12.2015 18:09
            +1

            >И вообще обо всей этой кухне нужно знать.

            Боюсь сейчас начнут минусовать, но как по мне лучше все же для более сложных вещей использовать python или go.
            На bash много всего можно сделать, но вот приходится переодически выкручивать мозг и пусть лучше он останется для фана, чем развивать в себе башизм.


            1. khim
              29.12.2015 19:13

              Программа на python'е, увы, далеко не на каждой системе запустится, увы. go для простых скриптов может быть просто слишком велик (несколько мегабайт рантайма), так что без bash'а, увы, часто не обойтись.

              В идеале, конечно, нужно писать на posix shellе, но там даже массивов нету (а без них очень тяжело корректно работать с командными строками), да и с переносимостью на практике всё… не очень (на системах где есть современный posix shell всегда есть и bash, а если bash'а нету, то часто и всяких вещей типа "[[" нету тоже).


              1. navion
                29.12.2015 23:40

                Для администрирования работа на любой кофеварке не требуется, там проще указать в требованиях yum install python сразу после установки и не выкручивать мозги башем.
                У разработчиков да, тащить здоровый рантайм для установочного скрипта некомильфо. Хотя в VMware плевать на это хотели и для пары скриптов в VMTools требуют Perl.


                1. icCE
                  30.12.2015 03:13

                  Да ладно там VmWare, вон некоторые производители типа HP аж Java с tomcat тащат для управление стримером, а аж чуть не подавился. Perl это просто рай я считаю.


                  1. navion
                    30.12.2015 08:10

                    Такие «веб-интерфейсы» встречают довольно часто, а у VMware реально скрипт на десять строк, который меняет хостнейм, настройки сети и пароль у рута, при этом ему всё равно нужны net-tools ведь вставить проверку ОС и параметры для NetworkManager — нереально сложная задача.


                    1. icCE
                      30.12.2015 14:53

                      Я тут вспомнил как для управление RAID!!! приходилось ставить java.Скрипт запуска на универсальном наше был такой, сохранил на память. Пришлось его править руками, точнее в storagnt sed -e “s/0-6/\ 1-6/g” -i stor_agent иначе выдавала ошибку.

                      start() {
                        echo "starting Adaptec Storage Manager agent ..."
                        kill `ps axwww | grep java | grep StorMan | grep ManagementAgent | cut -b 1-6` 1>/dev/null 2>&1
                        sleep 2
                        kill -9 `ps axwww | grep java | grep StorMan | grep ManagementAgent | cut -b 1-6` 1>/dev/null 2>&1
                        sh /usr/StorMan/StorAgnt.sh >/dev/null 2>&1 &
                        sleep 1
                        echo
                      }
                      
                                                                                      
                      stop() {
                        echo "stopping Adaptec Storage Manager agent ..."
                        kill `ps axwww | grep java | grep StorMan | grep ManagementAgent | cut -b 1-6` 1>/dev/null 2>&1
                        sleep 2
                        kill -9 `ps axwww | grep java | grep StorMan | grep ManagementAgent | cut -b 1-6` 1>/dev/null 2>&1
                        sleep 1
                        echo
                      }
                      


              1. icCE
                30.12.2015 03:11
                +1

                >Программа на python'е, увы, далеко не на каждой системе запустится, увы.

                Честно говоря, я уже с трудом могу представить на каких системах python не запустится.
                Уж в популярном RH и Ubuntu с Suse вставлено во все места и причем давно.
                Если мы говорим про embendend решение, так и там уже стали не ломать себе мозг, но обычно там целенаправленно все пилят.
                Ну и вы правильно заметили, что с таким подходом надо использовать posix shell.

                В общем для фана и изучение да, но вот реальное писать нет, так как универсальность там страдает.
                Код читать тяжко итд.


                1. khim
                  30.12.2015 17:15

                  Честно говоря, я уже с трудом могу представить на каких системах python не запустится.
                  Вы лучше скажите на каких запустится. Что вы напишите в шебанг? В одних системах это /usr/bin/python2, в других /usr/bin/python3 (а /usr/bin/python может и вообще не быть в зависимости от фантазий автора дистрибутива).

                  То есть как ни крути вам потребуется вспомогательная программа, которая найдёт у вас в системе python! И на чём вы её будете писать, спрашивается?


                  1. icCE
                    30.12.2015 22:26

                    env вам в помощь, это раз.
                    Я пока не видел системы с pyhton3 и что бы было проблемы с python2.
                    Ну и окружение virtualenv еще не отменили.


                    1. khim
                      30.12.2015 23:48

                      env вам в помощь, это раз.
                      Это, увы, только первый шаг. То есть да — это, в общем, решение, но это значит, что вам придётся поддерживать ещё больше разных версий python'а, так как env «увидит» не только системные python'ы, но и всякие python'ы из MacPorts и прочее.

                      Я пока не видел системы с pyhton3
                      Вам, значится, сюда. Усё будет. Скоро. Ждите.

                      и что бы было проблемы с python2.
                      В смысле с /usr/bin/python2? MacOS X. Там есть /usr/bin/python, а вот /usr/bin/python2, увы, отсутствует. Причём в каком-нибудь Arch'е /usr/bin/python — это Python 3. Вам рассказать что-нибудь про «изумительную совместимость» этих двух разных языков? Особенно с учётом того, что мы говорим об отдельно взятом скрипте и не хотим «грузить» пользователя установкой всяких добавочных модулей?

                      Да, все эти проблемы разрешимы и, в конечном итоге, сделать скрипт на python'е, которую можно просто скачать и запустить возможно (слава богу python2.4+ может запускать .ZIP файлы) — но для этого вам нужно будет сделать столько работы и навернуть столько разных приблуд, что мама не горюй.

                      И, скорее всего, результатом будет не «простенький скрипт», который хотелось породить изначально, а ZIP-архив с кучей модулей, большая часть которых будет посвящена борьбе с разными версиями python'а и прочими отличиями в системной конфигурации.

                      Заявлять после этого, что вы выбрали python потому что работать с bash'ем неудобно… как-то язык не поворачивается… да, синтаксис не очень, есть кой-какие проблемы, но по сравнению со всем вышеописанным…


                      1. icCE
                        31.12.2015 02:30

                        Вы придумали проблем, там где их нет.
                        В системе как не странно может не быть bash, ash,ksh итд.
                        Вы реально думаете, что большенство разработчиков в компании сидят такие и думают, как бы блин нам все угодить, что бы везде работало? Пишут на чем могут, а если у тебя этого нет то ты сам себе дятел. Мы написали на java 6, то что там у тебя уже java 8 да пофиг.

                        Если брать про питон, то можно писать вполне себе и для 2 и для 3 если такая задача ВДРУГ стоит.
                        Писать проще и легче.
                        Если мы дальше говорим про модули, то вот где гарантия что у человек может стоять awk например? sed?
                        Почему я вспомнил, да так как такие конструкции сплошь и рядом. Одни для определения ip вызывают ifconfig, другие ip. Где гарантия, что у меня стоит iproute?

                        В общем к чему я это все, к тому, что если надо быстрое, простое и примитивное то ok.
                        Все, что пошло сложнее — заставляет лично меня выворачивать руки и мозг. Страдать башизмом.
                        Да можно на bash сделать эмуляции двухмерного массива или еще чего, но зачем?
                        Можно забивать гвозди микроскопом, причем парой очень удобно, пробовал.
                        Но лучше все же для этого использовать молоток.


                        1. khim
                          31.12.2015 15:15

                          Если мы дальше говорим про модули, то вот где гарантия что у человек может стоять awk например?
                          однако
                          sed?
                          Разумеется. А также dd, tr и много всего другого интересного.

                          Тот факт, что есть люди, которые делают всё через «одно место» не означает, что стоит игнорировать существование стандартов.


        1. khim
          29.12.2015 19:07

          В том-то и дело, что нет.

          $ declare -A BAR=([a]=x [b]=y)
          $ FOO=$BAR
          $ echo "|${BAR[a]}|"
          |x|
          $ echo "|${FOO[a]}|"
          ||
          

          Насчёт того язык программирования bash или нет можно спорить, но если вы скачаете с какого-нибудь GOG'а игрушку, то получить файл мегабайт в 100 размером, который будет-таки shell-скриптом… строк на 500, примерно (остальное — это «приклеенный в конец» архив), но всё-таки в нём будут и функции и циклы и много чего другого.


          1. icCE
            30.12.2015 03:16

            Надо будет посмотреть GOG, но если это и так — то это не означает, что путь верен и надо так делать.


            1. khim
              30.12.2015 17:20

              А как надо делать? Вам всего-навсего нужен инсталлятор, который разберётся в том, что у вас где стоит, найдёт в системе нужные компоненты (библиотеки, X'ы, python, в конце-концов) и разложит все файлы нужным способом. Конечно написать такую штуку можно на чём угодно, но… как потом сделать так, чтобы ваше творение у человека запустилось? Написать ещё один скрипт для запуска того скрипта? Так тоже иногда делают, но, в конечном итоге речь идёт не том, чтобы обойтись без shell-скрипта, а о том, что сделать в этом скрипте, а что — уже в самой программе. Альтернативы, по большому счёту, нету. То есть нету от слова «совсем». Даже если вы сделаете какой-нибудь RPM или DEB пакет настроечная часть будет, опять-таки, shell-скриптом!

              Ну нет ничего другого в Linux (да и в POSIX), что стояло бы везде и везде в известном месте!


              1. icCE
                30.12.2015 22:31

                bash может как не странно, точно также может быть в разных местах.
                Серебренный пули тут нет. Я не первая инстанция, что бы меня спрашивать как делать. Каждый вправе делать так, как он хочет и может. Я сам был упоротым по bash одно время, но просто если «код» начинает переваливать разумные значения с простым функционалом, то явно тут что-то не то.


                1. khim
                  31.12.2015 00:00

                  Я не первая инстанция, что бы меня спрашивать как делать.
                  Ну это какая-то уж совсем неконструктивная критика: сказав А (это не означает, что путь верен и надо так делать) скажите уж и Б (а как, собственно, нужно?). Иначе и обсуждать нечего, сплошная демагогия…

                  bash может как не странно, точно также может быть в разных местах.
                  Может. Но /bin/bash присутствует на большинстве систем (в том числе на MacOS X). Если очень нужно поддерживать всякие странные системы типа FreeBSD можно использовать env, как вы уже говорили.

                  Я сам был упоротым по bash одно время, но просто если «код» начинает переваливать разумные значения с простым функционалом, то явно тут что-то не то.
                  Тут как бы вопрос сразу: а что вы понимаете под «простым функционалом»?


                  1. icCE
                    31.12.2015 02:20

                    >Тут как бы вопрос сразу: а что вы понимаете под «простым функционалом»?

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


  1. teamfighter
    30.12.2015 13:18

    Странно, почему в курсе даже не затронули такую важную вещь, как циклы…


    1. toxicmt
      30.12.2015 15:13

      Этот курс не про программирование, а про то как пользоваться консолью для тех кто ее никогда в жизни не видел.


      1. khim
        31.12.2015 00:15

        И как мне пользоваться консолью без циклов, извините? Как мне обработать больше, чем один файл? Скажем какая-нибудь простейшая задача переименовывания файлов так, чтобы они все были в одном регистре. Как это сделать — понятно:

        $ find -type f -print0 | while IFS='' read -r -d '' f ; do mv "$f" "$(printf '%s' "$f" | tr [:upper:] [:lower:])" ; done
        В скрипте я, понятно, заведу переменные, чтобы избежать сообщений « «x» и «x» — один и тот же файл », если команду нужно выполнить один раз, то, пожалуй, я о таких «нежностях» забуду, но как без циклов-то обойтись?


  1. Oxyd
    31.12.2015 02:56

    Какой-то уж, совсем-совсем, детский курс. И таки за это раньше деньги платили?


    1. toxicmt
      31.12.2015 10:32

      Плата идет за доступ ко всему контенту на проекте, а не за отдельные курсы.