• Основы прозрачного проксирования с использованием 3proxy и iptables/netfilter или как «пустить всё через прокси»

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

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

    В распространенных инструкциях к прокси-серверу Squid предлагают даже сгенерировать собственный сертификат и установить его клиентам, что полный бред как минимум нерационально и выглядит как MITM — атака. Я знаю, что Squid уже что-то подобное умеет делать, но речь в этой статье о проверенном и рабочем способе с использованием 3proxy от уважаемого 3APA3A.

    Далее мы подробно рассмотрим процесс сборки 3proxy из исходников, его настройку, полное и выборочное проксирование с использованием NAT, распределение канала на несколько внешних прокси-серверов, а также использование роутера и статических маршрутов. В качестве ОС используем Debian 9 x64. Начинаем!
    Читать дальше →
  • Первая работа в IT: взгляд с другой стороны стола

    Буквально несколько дней назад я наткнулся на вопрос в Hacker News — «Стоит ли нанимать и обучать джуниоров?[1]». В комментах развернулась бурная дискуссия, желающие могут сходить по ссылке и принять участие. Меня же эта дискуссия сподвигла поделиться с аудиторией хабра несколькими советами тем, кто хочет пройти первое собеседование на позицию программиста.

    image
    Читать дальше →
  • Forever Junior. Почему вне зависимости от квалификации нужно всегда оставаться Junior



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

    Иоанн Златоуст
    Открывая сайт наподобие «хэ-хэ-ру», вбив в поиск вакансий «Java» (подставьте свой любимый язык) вы получите список, просматривая который вам будут попадаться слова «Junior», «Middle», «Regular», «Senior». Эти слова относятся к общепринятой классификации уровней разработчика. На тему к какому уровню отнести себя написано огромное количество статьей, в том числе и на хабре, поэтому я не буду повторяться. Напишу лишь общий вывод: нет точных критериев, по которым можно точно отнести себя тому или иному уровню. У каждой компании они свои.

    Зачем такая градация существует в вакансиях — понятно. Зачем нам как разработчикам относить себя к какому-то уровню — не ясно. Где наша выгода? Потешить самолюбие? Повысить ЧСВ? Мы тратим на этот процесс время и силы, особенно в начале пути в мире IT. Я не выбираю такую философию!
    Читать дальше →
  • Начиная свой путь в Game Dev

    Добрый день, дорогой читатель!

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

    Я закончил технический институт по направлению “Железо и Программирование”. Все знания были свалены в одну кучу, и единственным условием обучения было “Разобраться или искать новый вуз”. Процесс был непростой, но интересный: по пути пришлось изучить все возможные языки программирования. Assembler, Shell, Fortran, Pascal, C/C++/C#, Javascript, HTML, Python — никто и не подумал объяснить, для чего они могут использоваться, какой лучше применять для решения той или иной задачи. Даже банальный вопрос: “Что такое Backend и Frontend?” — первое время оставался без ответа. Пришлось изучить историю компьютеров полностью, даже написать свой микропроцессор с нуля. Я очень полюбил программирование, но параллельно занимался другой деятельностью, и не мог полностью ему себя посвящать. Пытался устроиться на стажировки, практики и открытые вакансии, но поскольку являюсь гражданином другой страны, не все возможности были открыты.

    После института год сидел без работы и пытался выяснить, что мне нравится. Изучил десятки книг по программированию, но все они были на одно лицо: описание языка, история, типы данных, функции, структуры, классы. Общие слова без особых разъяснений, несколько глав, заключение… и ты уже “знаешь” очередной язык программирования. Молодец!
    При этом дальнейшего развития нет, и куда применить знания — не особо понятно.
    Читать дальше →
  • История одного cover letter

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


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


    Читать дальше →
  • React-redux, connect по-новому, разделение отвественности в компонентах

    При написании SPA с помощью связки react-redux, для работы с redux используют функцию connect в файле react компонента для проброски стейта и «диспатча». Вся боль в том, что «коннекторы» и «диспатчеры» многие описывают там же, в компоненте. В этой статье я опишу connect по новому, и покажу простой способ разделения кода.
    Читать дальше →
  • Hellow hubr из esp32 с исползованием Platformio и framework espidf

    1 Start


    Приветствую %user% в данной статье мы быстро пробежимся о том как собрать и настроить корабль для путешествие в дивный чудный мир iot на esp32 .


    1.1 Используемые П.О и устройства


    • Kubunty 18 ->
      Linux x 4.15.0-39-generic #42-Ubuntu SMP Tue Oct 23 15:48:01 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
    • Текстовый редактор Atom
      Atom: 1.26.1
      Electron: 1.7.11
      Chrome: 58.0.3029.110
      Node: 7.9.0
    • Toolchain разработки PlatformIO
      Home 1.0.6
      Core 3.6.2a2
    • TTGO MINI32 V2.0 ESP32

    1.2 Первоначальная настройка


    Начнем с установки текстового редактора Atom:


    wget -O atom-amd64.deb https://atom.io/download/deb

    Gdebi

    программа для установки deb пакетов. Преимущество её в том, что она может устанавливать deb пакеты, используя автоматическое разрешение зависимостей (автоматически загружает и устанавливает необходимые пакеты). И ещё не нужно запускать Центр приложений Ubuntu для установки загруженного deb пакета в графическом режиме, а для этой цели используется легковесный конкретный инструмент.


    Далее установим gdebi которую мы будем использовать для установки ранее загруженного пакета Atom. А также clang.


    sudo apt install gdebi-core clang 

    Используем gdebi для установки пакета с зависимостями .


    sudo gdebi atom-amd64.deb 

    Проверим на работоспособность командой atom в консоле


    Platformio настройка


    1.Для начала устоновим нужные пакеты в атом для этого
    надо перейти Menu: Edit > Preferences > Install
    2.Провести поиск пакета platformio-ide
    3.Установить кликнув install .


    Ещё один способ установки ввести в командную строку


     apm install platformio-ide 

    Также можно посмотреть, установилось ли или нет командой :


     apm list 
     apm list | grep platformio 
    Читать дальше →
  • Установка SQLite.Swift (CocoaPods)

    Введение


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

    Предисловие
    При написании своего приложения для IOS было необходимо использовать существующую таблицу. Само приложение очень простое. Существует некая таблица с определенным количеством строк и столбцов. Каждому столбцу соответствует свое текстовое поле (TextField). Пользователь вводит число в любой TextField нажимает «Готово» и во всех остальных текстовых полях автоматически подгружаются значения из таблицы. В случае если такого числа нет, то необходимо выполнять интерполяцию чисел взятых из двух ближайших строк.
    Приложения простое, вот только возникла проблема: как связать базу данных и Swift.

    Читать дальше →
  • Студент в ИТ: учиться нельзя работать

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

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

    Основатель digital-агентства Роман Квартальнов делится простым решением, которое помогло сделать производственные процессы прозрачными, дало возможность в любой момент времени оценить себестоимость проекта и компании целиком, а также экономить около 1 000 000 рублей на сборе отчетов с сотрудников.

    Знаете ли вы себестоимость работы вашей компании? Можете за 3 минуты получить доступ к информации о выполненной работе за вчера? А за неделю?

    Четыре года назад я открыл свою компанию. На старте у нас была небольшая команда. Очевидно, что чем меньше людей, тем лучше у них получается работать слаженно, быть единым организмом. К концу первого года мы начали активно масштабироваться и столкнулись с проблемами роста. В определенный момент мы просто потеряли контроль над процессами внутри компании и начали принимать решения хаотично. Есть такой термин – «хаотичное управление», его можно трактовать так: руководитель не имеет возможности прогнозировать риски, постоянно тушит пожары и не разбирается почему они происходят. У такого подхода есть 2 пути развития:

    1. Признать, что такова жизнь и основателю бизнеса отведена роль пожарного. В этом случае ваш потолок – крутой пожарный, пожарный-супермен.

    2. Осознать, что пожаротушение развивается спиралевидно, т.е. время идет, задачи растут, ресурсы уменьшаются. В этом случае ваша цель — поднапрячься и выйти за рамки, встать над проблемами и постараться найти системные решения.

    Читать дальше →
  • Мерещится: ждать ли «криптовалюту» ко второму чтению «О цифровых активах»?

    «Не случайно мы встретились с вами здесь 7 ноября, в канун Революции!, — выдала на конференции по блокчейн в Санкт-Петербурге Элина Сидоренко, руководитель рабочей группы по оценкам рисков оборота криптовалюты Госдумы, — Самое время совершить переворот относительно стандартов работы на крипто рынке и стать примером для всех остальных стран». Как именно совершать переворот — спикер не уточнила. Но предупредила, блокчейн — хорошо, а вот децентрализация может довести до абсурда — появления сразу нескольких жен у участников крипто-сообщества в самых разных городах мира. Что называется: на пальцах о технологичном.
    Читать дальше →
  • Оптимизация скриптов с Webpack SplitChunksPlugin

    В этой статье я бы хотел поделиться своим опытом по разбиению бандлов для многостраничного сайта с помощью Webpack 4. Cначала создадим для каждой страницы свою точку входа. Рассмотрим на примере 4 страниц:


    const path = require("path");
    
    const PATHS = {
      src: path.resolve(process.cwd(), "src"),
      dist: path.resolve(process.cwd(), "dist")
    };
    
    module.exports = {
      entry: {
        common: `${PATHS.src}/js/common`,
        index: `${PATHS.src}/js/index`,
        contacts: `${PATHS.src}/js/contacts`,
        about: `${PATHS.src}/js/about`,
      }
    }

    При сборке для каждой страницы будет создан свой бандл. В точку входа common я вынес общие скрипты для всех страниц. Чтобы подключить наши бандлы на страницы воспользуемся плагином Webpack'a HtmlWebpackPlugin.


    Рассмотрим на примере:


      module.exports = {
      ...
      plugins: [
        new HtmlWebpackPlugin({
          filename: `${PATHS.dist}/index.html`,
          template: `${PATHS.dist}/index.html`,
          chunks: ["index", "common"]
        })
        ...
      ]
      ...
    };
    Читать дальше →
  • Как девочки помогли мне подружится с Django

    В данной статье я бы хотел поделиться опытом изучения языка программирования Python в целом и фреймворка Django в частности (с нуля, или почти с нуля).


    Немного истории


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


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


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

    Читать дальше →
  • Про социальные лифты. Конкурс «Лидеры России»

    Данная заметка является последствием прочтения недавней статьи на Хабре: “Карьерные стероиды. Лифты”. Спасибо автору. Прекрасная мотивация. Решил и я попробовать один из лифтов. Тот самый конкурс «Лидеры России» (конкурс управленцев).

    Конечно, я слышал о нём и раньше. И даже один мой друг дошёл в прошлом конкурсе до финальной стадии. И он с большим воодушевлением рассказывал мне об этом конкурсе. О всяких «плюшках» при проведении регионального отбора, о ещё более замечательных фуршетах, знакомствах и т.д. при проведении финальной части. И я даже жалел тогда, что не стал участвовать в нём.

    Читать дальше →
  • Настройка связки php-fpm + nginx под WSL

    Я — виндузятник и всячески увиливаю от окончательного перехода на Linux на своём PC не смотря на все его преимущества. Поэтому последние пару лет для создания локальных площадок под проекты использовал Docker for Windows. Не сказать что штука сверхстабильная, но существенных проблем не вызывала, пока на одном проекте на Laravel площадка не стала вести себя странно: часть запросов (и всегда разная часть) возвращались с ошибкой. Скрипт не мог открыть файл кэша.

    Бесполезно потратив изрядное количество времени на поиск причины решил в данном случае отказаться от Docker и развернуть площадку под WSL в ручном режиме.
    Читать дальше →
  • SoapUI, Postman и Katalon Studio: Обзор 3 лучших инструментов для тестирования API

    За последние пять лет, по данным Google Trends, значительно вырос интерес к тестированию API. Такая тенденция отражает сдвиг парадигмы в сторону web и мобильных приложений, а также разделение серверных служб и пользовательских интерфейсов.

    Чтобы помочь вам разобраться, какие же все-таки инструменты лучше всего подходят для автоматизации тестирования API, в этой статье для вас будет представлены обзор и сравнение трех популярных инструментов для тестирования API: SoapUI, Postman и Katalon Studio. SoapUI и Postman специализируются исключительно на тестировании API, в то время как, Katalon Studio предоставляет полный набор инструментов для тестирования API, Web и мобильных приложений.

    Katalon Studio


    Katalon Studio — это интегрированная среда для создания и выполнения тестирования при работе с API, Web и мобильных приложениями. Имеет богатый набор инструментов для тестирования и поддерживает множество платформ, включая Windows, Mac OS и Linux. Интегрируя движки от Selenium и Appium со всеми необходимыми компонентами, встроенными ключевыми словами и шаблонами, Katalon Studio предоставляет уникальную среду разработки как для тестировщиков, так и для разработчиков, занимающихся тестированием API и веб-автоматизации. Вот некоторые примечательные особенности инструмента:

    • Обработка API, Web и мобильных тестов на разных платформах
    • Возможность для тестировщики и разработчиков легко делиться и совместно работать над тестами
    • Сотни встроенных ключевых слов для создания тестов
    • Поддержка AssertJ для создания гибких проверок с использованием BDD стиля
    • Интеграция с другими инструментами ALM и интеграционного тестирования CI / DevOps

    Katalon Studio предоставляется бесплатно, хотя и не имеет открытого исходного кода.
    Специальные услуги по оказанию поддержки, устранение неполадок и консультационные услуги предлагаются в форме бизнес поддержки и поддержки предпри
    Читать дальше →
  • 3 факта о блокчейне, которые понятны каждому

    1. Блокчейн — не то же самое, что эпоха интернета в середине 90х

    Хотя между состоянием интернета в середине 90х и блокчейном на сегодняшний день определённо есть сходства, отличия гораздо резче. Во-первых, интернет был создан в основном для связи. Именно человеческая потребность в связи обеспечила возможность централизации данных за последнее десятилетие.

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

    Цель блокчейна — противостоять текущей проблеме централизации данных. Таким образом, блокчейн, скорее, эволюция интернета, а конкретно — инфраструктуры данных, чем новый интернет. Его цель — создать децентрализованную систему данных, которую одному человеку взломать или использовать в своих целях не под силу.
    Читать дальше →
  • Настройка APC Smart UPS 1000 в Ubuntu server 14.04 LTS и установка модуля Webmin

    Началось все с того, что у меня сгорел служивший верой и правдой много лет Back-UPS 500VA. Не беда, подумал я и заменил его на APC Smart UPS 1000, что для моего сервера оказалось гораздо лучше. Сразу скажу, изначально сервер работал на форточках и проблем с бесперебойником не было. После замены ИБП и окончательно-бесповоротном переходе на Ubuntu я задался вопросом: собственно, как мониторить состояние сети электропитания и состояние бесперебойника? Погуглив некоторое время, я наткнулся на несколько инструкций по подключению бесперебойников к никсовым машинам, но почему-то они все были про Back UPS и USB. В частности, меня натолкнуло на написание этой статьи аналогичная статься на Хабре «Начальная настройка ИБП APC в Linux с точки зрения чайника».

    Но у меня же старенький тысячник с ком-портом и про USB он и слыхом не слыхивал.
    Читать дальше →