• Google's Shell Style Guide (на русском)

    • Перевод
    • Tutorial

    Предисловие


    Какой Shell использовать


    Bash единственный язык shell скриптов, который разрешается использовать для исполняемых файлов.


    Скрипты должны начинаться с #!/bin/bash с минимальным набором флагов. Используйте set для установки shell опций, что бы вызов вашего скрипта как bash <script_name> не нарушил его функциональности.


    Ограничение всех shell скриптов до bash, дает нам согласованный shell язык, который установлен на всех наших машинах.


    Единственное исключение составляет если вы ограничены условиями того под что вы программируете. Одним из примеров могут стать пакеты Solaris SVR4, для которых требуется использование обычного Bourne shell для любых скриптов.


    Когда использовать Shell


    Shell следует использовать только для небольших утилит или простых скрптов-оберток.


    Хотя shell-скриптинг не является языком разработки, он используется для написания различных утилит во всем Google. Это руководство по стилю является скорее признанием его использования, а не предложением использовать его в широком применении.

    Читать дальше →
  • SSLH: Прячем SSH/HTTPS/OpenVPN/Telegram за единым портом 443

    • Tutorial
    image

    SSH/HTTPS/OpenVPN/Telegram и всё на одном порту?! Что?!
    — Да!
    • Хотите скрыть наличее у вас некоторых сервисов?
    • В публичной wi-fi сети блокируется всё кроме 443 (https) порта?
    • Настроили Telegram Proxy/OpenVPN и не хотите его «светить» ?
    • SSH подключение к своему серверу из стран с цензурой?

    На все эти вопросы ответ один — Мультиплексирование SSL/TLS соединений, или SSLH.

    В посте мы рассмотрим как в 1 команду спрятать кучу сервисов за 1 портом.
    Читать дальше →
  • И еще раз: не пользуйтесь публичным WiFi

      image

      Мысль, изложенная в данном посте кому-то может показаться очевидной и банальной, но, как показал разговор в курилке с коллегами, многие, даже имеющие отношение к IT об этом даже не задумывались, не говоря уже о более далеких от техники людей.
      Читать дальше →
    • Маленький ноутбук для системного администратора



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

      К сожалению, мой рабочий Thinkpad x200 слишком тяжёл и громоздок для постоянного ношения, а ничего кардинально лучшего не нашлось. Вообще, маленькие ноутбуки в последнее время скатились к подражанию МакБук Эйру — нечто тонкое, блестящее, с минимумом портов, с функциональностью, принесенной в жертву стилю. Такой ноутбук годится только на то, чтобы ставить лайки в фейсбуке, но никак не для работы.

      Не найдя ничего достойного, я задумался о том, каким-бы получился ноутбук, если-бы его разрабатывали, думая не о маркетинге, а о потребностях реальных пользователей. Например, системных администраторов. Раздумий набралось на целую статью.
      Читать дальше →
    • Как уже снова не получить телефон (почти) любой красотки в Москве, или интересная особенность MT_FREE

      UPD0 14.03 8:21 — Телефон больше не получить. Остальные интересные данные пока остались.


      UPD1 14.03 10:39 — Дабы не очернять ребят из саппорта MaximaTelecom: Сообщил о ней я окольными путями, но раз пять переспросил и уточнил, дошло ли моё письмо до адресата — короче говоря, убедился, что оно у эфемерного (имена просили молчать) ответственного за вафли лица в метро. Я признаю, что это тупо, но цепочка "проблема в мосметро" → "у меня уже были связи со всяким мос, надо позвонить им" мне показалась весьма и весьма логичной в момент обнаружения уязвимости.


      UPD2 14.03 15:40 — Уязвимость была найдена в uid Antxak — суть в том, что в uid лежит md5 телефона без соли. Снова можно искать телефоны.


      Пример намайненного телефона

      image


      UPD3 14.03 18:55 — Уязвимый хэш в uid был заменен на тот же, что и в телефоне. Пока не раскололи последний.


      UPD4 15.03 20:51 — Значения и ключи почти всех полей были заменены на предположительно обфускованные.

      Читать дальше →
    • Нотной грамоте учат неправильно*

        ФейспалмПреподаватели готовы разделить с вами все таинства музыкальной теории но не раньше, чем вы научитесь читать эти закорючки самостоятельно.


        Предполагается, что студент должен страдать самостоятельно освоить ноты, путем многократного повторения. И вообще, если «ниасилил», значит у тебя нет Таланта — иди мести двор.


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


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


        * Дисклеймер

        Прошу прощения, если заголовок статьи показался вам чересчур дерзким и провокационным. Таковым он, в общем-то, и является.


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


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


        Эффективность я оценивал исключительно на себе, поскольку сей субъект оказался самым доступным для исследования.

        Читать дальше →
      • Пособие по webpack

        • Перевод
        • Tutorial


        Давайте сначала разберемся, зачем нужен вебпак (webpack), и какие проблемы он пытается решить, а потом научимся работать с ним. Webpack позволяет избавиться от bower и gulp/grunt в приложении, и заменить их одним инструментом. Вместо bower'а для установки и управления клиентскими зависимостями, можно использовать стандартный Node Package Manager (npm) для установки и управления всеми фронтэнд-зависимостями. Вебпак также может выполнять большинство задач grunt/gulp'а.


        Bower это пакетный менеджер для клиентской части. Его можно использовать для поиска, установки, удаления компонентов на JavaScript, HTML и CSS. GruntJS это JavaScript-утилита командной строки, помогающая разработчикам автоматизировать повторяющиеся задачи. Можно считать его JavaScript-альтернативой Make или Ant. Он занимается задачами вроде минификации, компиляции, юнит-тестирования, линтинга и пр.

        Допустим, мы пишем простую страницу профиля пользователя в веб-приложении. Там используется jQuery и библиотеки underscore. Один из способов — включить оба файла в HTML:

        Читать дальше →
      • WhatsApp, что внутри?

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

          В этой статье мы подробно посмотрим как можно изучать протокол работы мессенджера, ответим на вопрос «может ли WhatsApp читать нашу переписку?» и приложу весь необходимый код на языке PHP.
          Читать дальше →
        • Root хуже Михалкова

            Рут – это мифическое существо в экосистеме Linux. Он может всё: зайти в любой каталог, удалить любой файл, завершить любой процесс, открыть любой порт. В общем это суперчеловек, чрезвычайно могущественный и очень полезный. Но задумывались ли вы когда-нибудь, какую цену мы платим руту? Не думали же вы, что он работает за просто так.


            Вы знаете команду df? Она показывает все подключенные сейчас диски и статистику по ним: сколько место занято, сколько свободно. Например:


            $ df -m
            Filesystem     1M-blocks   Used Available Use% Mounted on
            udev                 224      1       224   1% /dev
            tmpfs                 48      1        47   2% /run
            /dev/dm-0           9204   7421      1294  86% /

            Вы когда-нибудь замечали, что для локальных дисков сумма Used и Available чаще всего меньше общего размера диска? Ненамного, но меньше.

            Читать дальше →
          • Атакуем DHCP часть 3. DHCP + Apple = MiTM

              LOGO


              В данной статье я расскажу о том как осуществить MiTM любого устройства компании Apple в WiFi сети. Прежде чем читать эту статью настоятельно рекомендую ознакомиться с первой и второй частью.

              Читать дальше →
              • +21
              • 9,3k
              • 6
            • Автомонтирование файловых систем с systemd

              • Tutorial
              Среди множества функций, которые предоставляет systemd, есть одна, которую несправедливо забыли. Это функция автомонтирования. При настройке автомонтирования указанный каталог будет подмонтирован только после первого обращения к нему (точнее, прямо во время).

              NFS over VPN


              Конкретный пример: у меня есть удалённый сервер, на котором есть интересующий меня каталог. Я хочу иметь этот каталог локально на своей машине. Протокол доступа — nfs. Т.к. он не имеет шифрования, то разумным решением выглядит использование vpn-канала до сервера.

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

              Как оно устроено


              Systemd имеет специальный вид automount-юнитов, которые позволяют автоматически монтировать указанный каталог.
              Читать дальше →
            • Bash-скрипты, часть 3: параметры и ключи командной строки

              • Перевод
              Bash-скрипты: начало
              Bash-скрипты, часть 2: циклы
              Bash-скрипты, часть 3: параметры и ключи командной строки
              Bash-скрипты, часть 4: ввод и вывод
              Bash-скрипты, часть 5: сигналы, фоновые задачи, управление сценариями
              Bash-скрипты, часть 6: функции и разработка библиотек
              Bash-скрипты, часть 7: sed и обработка текстов
              Bash-скрипты, часть 8: язык обработки данных awk
              Bash-скрипты, часть 9: регулярные выражения
              Bash-скрипты, часть 10: практические примеры
              Bash-скрипты, часть 11: expect и автоматизация интерактивных утилит

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

              image
              Читать дальше →
            • Python: коллекции, часть 1/4: классификация, общие подходы и методы, конвертация

              Часть 1 Часть 2 Часть 3 Часть 4
              Коллекция в Python — программный объект (переменная-контейнер), хранящая набор значений одного или различных типов, позволяющий обращаться к этим значениям, а также применять специальные функции и методы, зависящие от типа коллекции.

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

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

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

              Будем рассматривать стандартные встроенные коллекционные типы данных в Python: список (list), кортеж (tuple), строку (string), множества (set, frozenset), словарь (dict). Коллекции из модуля collections рассматриваться не будут, хотя многое из статьи должно быть применимым и при работе с ними.

              ОГЛАВЛЕНИЕ:


              1. Классификация коллекций;
              2. Общие подходы к работе с коллекциями;
              3. Общие методы для части коллекций;
              4. Конвертирование коллекций.
              Читать дальше →
            • «Больше чем Аудиомания»: Как научиться играть на барабанах?



                Фото rskspyder man / CC

                Бывают в жизни такие моменты, когда одна навязчивая идея прочно врезается в голову, не отпуская ни на минуту. Иногда это следствие осознанного и планомерного движения к цели, иногда – импульсивное желание осуществить детскую мечту.

                Наш сегодняшний материал для тех, чья цель (или мечта) – научиться играть на барабанах. Мы в Аудиомании собрали интересные и полезные советы начинающим барабанщикам и узнали у Дмитрия Полтинина – менеджера по международной логистике Аудиомании и барабанщика и бэк-вокалиста группы †B†C†B† – о его опыте игры на ударных.
                Читать дальше →
              • Путешествие запроса Select через внутренности Постгреса

                • Перевод
                До конференции PG Day'16 Russia остались считанные дни, расписание можно посмотреть на нашем сайте. Мы трудимся в поте лица, но тем не менее успеваем готовить для вас переводы самых интересных материалов о PostgreSQL. Сегодня представляем вашему вниманию перевод статьи Pat Shaughnessy о поведении запроса Select.

                Готовясь летом к этой презентации, я решил изучить некоторые части исходного кода PostgreSQL на C. Я запустил очень простой запрос select и наблюдал, что Постгрес с ним делает, с помощью LLDB, отладчика C. Как Постгрес понял мой запрос? Как он нашел данные, которые я искал?



                Этот пост — неформальный журнал моего путешествия через внутренности PostgreSQL. Я опишу пройденный мной путь и то, что я видел в процессе. Я использую серию простых концептуальных диаграмм, чтобы объяснить, как Постгрес выполнил мой запрос. В случае, если вы понимаете C, я также оставлю вам несколько ориентиров и указателей, которые вы можете поискать, если вдруг решите покопаться во внутренностях Постгреса.

                Исходный код PostgreSQL восхитил меня. Он оказался чистым, хорошо задокументированным и простым для понимания. Узнайте сами, как Постгрес работает изнутри, присоединившись ко мне в путешествии в глубины инструмента, которым вы пользуетесь каждый день.
                Читать дальше →
              • Захвати и визуализируй! Или гистограмма с микрофона средствами Web Audio API



                  Я очень люблю «живые» графики. Смертельная скука — смотреть на статичные картинки с цифрами. Мне хочется, чтобы график завораживал, чтобы заставлял человека, который смотрит на него, взаимодействовать и открывать для себя новые грани всех данных на нем. Поэтому любой пример, что попадает мне в руки, и любая библиотека визуализации, которой не повезло оказаться на моей машине, проходит испытание “оживлением”. Вот и в очередной раз, раздумывая, как же еще я могу раскорячить визуализационные виджеты из DevExtreme библиотеки, я задумалась об отображении звука. «Интересно и живо» — подумала я в тот день, запаслась чаем с печеньками и засела за эту задачу. Что у меня в итоге вышло — узнаете под катом.
                  Читать дальше →
                • Если бы программисты делали блины (по кошерным методологиям)

                    Waterfall


                    Заказчик сообщает, что хочет блинов. Компания выделяет проджект менеджера, который говорит: «Говно вопрос! Наша компания специализируется по производству блинов! Мы сделаем вам офигенских блинов за две тысячи человеко-часов!»

                    Далее начинается аналитическая фаза. Бизнес-аналитик берет эксперта, и они денно и нощно заседают в офисе заказчика, потребляют халявный кофе и пончики, а также тщательно записывают бизнес-требования вплоть до толщины блинной корочки с точностью до микрона. Документы записываются на фирменных бланках компании, после чего заверяются подписью директора компании-заказчика, директора компании-исполнителя, стороннего консультанта по блинному производству, а также печатью Папы Римского. После окончания аналитической фазы на проект остается 1000 часов.
                    Читать дальше →
                  • Опыт домашнего марсоходостроения


                      Привет Хабр! Я работаю RnD-художником в минском центре разработки Wargaming. А в свободное время даю волю своей инженерной фантазии. В этой статье я хочу поделиться своим опытом домашнего марсоходостроения.
                      Читать дальше →
                    • Создание архитектуры программы или как проектировать табуретку

                      Взявшись за написание небольшого, но реального и растущего проекта, мы «на собственной шкуре» убедились, насколько важно то, чтобы программа не только хорошо работала, но и была хорошо организована. Не верьте, что продуманная архитектура нужна только большим проектам (просто для больших проектов «смертельность» отсутствия архитектуры очевидна). Сложность, как правило, растет гораздо быстрее размеров программы. И если не позаботиться об этом заранее, то довольно быстро наступает момент, когда ты перестаешь ее контролировать. Правильная архитектура экономит очень много сил, времени и денег. А нередко вообще определяет то, выживет ваш проект или нет. И даже если речь идет всего лишь о «построении табуретки» все равно вначале очень полезно ее спроектировать.

                      К моему удивлению оказалось, что на вроде бы актуальный вопрос: «Как построить хорошую/красивую архитектуру ПО?» — не так легко найти ответ. Не смотря на то, что есть много книг и статей, посвященных и шаблонам проектирования и принципам проектирования, например, принципам SOLID (кратко описаны тут, подробно и с примерами можно посмотреть тут, тут и тут) и тому, как правильно оформлять код, все равно оставалось чувство, что чего-то важного не хватает. Это было похоже на то, как если бы вам дали множество замечательных и полезных инструментов, но забыли главное — объяснить, а как же «проектировать табуретку».

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

                      Данная статья является попыткой ответить на эти вопросы хотя бы в первом приближении.
                      Читать дальше →
                    • Чистим домашний интернет от очень назойливой рекламы (Ad's blocker для OpenWRT)



                        Дело было вечером, делать было нечего... © С. В. Михалков
                        Навеяно публикацией «Как я bind`ом вирусы искал…», а конкретно этой веткой комментариев. Надеюсь, не поздно размещаю.

                        Сидел я и думал, телевизор Samsung, WinPhone, (а впоследствии может кофеварка и пылесос) показывают суперназойливую рекламу, надо с этим чтото делать, и раз в WinPhone и телевизор(кофеварку, пылесос) плагина AdBlock нету, то он должен быть там где ходит их трафик, на роутере.
                        Читать дальше →