Pull to refresh
0
0
devotus @devotus

User

Send message

Аналоги в Python и JavaScript. Часть первая

Reading time5 min
Views17K

Привет, Хабр! Представляю вашему вниманию перевод статьи "Equivalents in Python and JavaScript. Part 1".


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


Это не справочник, здесь не будет базовой информация о типах переменных, if-ах и циклах.
Но мы рассмотрим более сложные структуры данных и операции с ними используя Python и Javascript.


Также я проиллюстрирую это примерами из практики.


Эта серия будет интересна бэкендерам, использующим Django, Flask или любой другой Python-фреймворк, которые хотят получше узнать о современном Javascript'е. С другой стороны, эти статьи будут полезны фронтендерам, которые желают лучше понять как работает бэкенд, или даже написать свой сайт на Django.


Остальные статьи в этой серии:


  1. Часть вторая: JSON, регулярки, ошибки-исключения
  2. Часть третья: современные Python и JS: строковые шаблоны (f-строки), распаковка списков, лямбда-функции, итерации по спискам, генераторы, множества.
  3. Четвертая часть — аргументы функций, создание и работа с классами, наследование, геттеры-сеттеры и свойства класса.
Читать дальше →
Total votes 27: ↑20 and ↓7+13
Comments13

Классические алгоритмы и структуры данных на JavaScript

Reading time2 min
Views93K
Привет Всем! Я недавно запустил на GitHub проект JavaScript Algorithms and Data Structures, который содержит примеры классических алгоритмов и структур данных написанных на JavaScript с объяснениями, примерами и ссылками для дальнейшего изучения (в частности на соответствующие YouTube видео).

Основная задача проекта — помочь программистам в изучении и применении алгоритмов и сделать это на JavaScript-е.
Читать дальше →
Total votes 76: ↑71 and ↓5+66
Comments31

SSL. Безопасность передачи данных

Reading time2 min
Views20K
Как давно вы проверяли надежность своего SSL? Мало просто купить SSL сертификат и его установить, нужно его и настроить.

Почему это важно. Внешний анализ безопасности (ручной или автоматический) обычно начинается с проверки SSL-конфигурации. SSL конфигурация обычно показывает общий уровень защищенности всей системы защиты данных. Поэтому продвинутые пользователи начинают слать запросы типа “как вы можете защитить мои персональные данные, если у вас ещё SSL v3 включён”. В рамках GDPR надежная настройка SSL относится к техническим мерам по защите персональных данных.

Тестирование конфигурации SSL

Проблемы связанные с версиями SSL протоколов:

  • SSL v2 небезопасен, устарел и не рекомендуется для использования. См. атаку DROWN по этому протоколу.
  • SSL v3 небезопасен и устаревший инструмент. См. атаку POODLE.
  • TLS v1.0 также является устаревшим протоколом, но на практике он все же оказывается необходим. Его основная слабость (BEAST) была смягчена в современных браузерах.
  • TLS v1.1 и TLS v1.2 оба не имеют известных проблем с безопасностью, но только v1.2 предоставляет современные криптографические алгоритмы.


SSL 2.0, SSL 3.0 и TLS 1.0 настоятельно рекомендуется отключить, так как большинство стандартов безопасности их уже давно не поддерживают (например, PCI DSS 3.1).

Рекомендуемые протоколы TLS v1.1 и TLS v1.2 с актуальными алгоритмами шифрование и снятия хэшей.
Читать дальше →
Total votes 17: ↑15 and ↓2+13
Comments2

Объяснение HTTPS на почтовых голубях

Reading time3 min
Views71K
image

Криптография — сложная штука для понимания. Она состоит математических теорем, доказательств, что повышает порог входа. Но даже если вы используете её в своём проекте, не обязательно вникать в эти алгоритмы, главное понимать принципы работы.

Этот пост — перевод статьи.

Если вы открыли эту статью с целью создать следующий HTTPS протокол, вы зашли не туда. Этой статьи будет не достаточно. В ней описаны принципы работы HTTPS на пальцах или по аналогии с почтовыми голубями.
Читать дальше →
Total votes 56: ↑46 and ↓10+36
Comments54

Как обучть мдль пнмть упртые скрщня

Reading time16 min
Views39K

Недавно я натолкнулся на вопрос на Stackoverflow, как восстанавливать исходные слова из сокращений: например, из wtrbtl получать water bottle, а из bsktballbasketball. В вопросе было дополнительное усложнение: полного словаря всех возможных исходных слов нет, т.е. алгоритм должен быть в состоянии придумывать новые слова.


Вопрос меня заинтриговал, и я полез разбираться, какие алгоритмы и математика лежат в основе современных опечаточников (spell-checkers). Оказалось, что хороший опечаточник можно собрать из n-граммной языковой модели, модели вероятности искажений слов, и жадного алгоритма поиска по лучу (beam search). Вся конструкция вместе называется модель зашумлённого канала (noisy channel).


Вооружившись этими знаниями и Питоном, я за вечер создал с нуля модельку, способную, обучившись на тексте "Властелина колец" (!), распознавать сокращения вполне современных спортивных терминов.


Читать дальше →
Total votes 88: ↑87 and ↓1+86
Comments17

Руководство по написанию защищённых PHP-приложений в 2018-м

Reading time18 min
Views57K

Приближается 2018 год, и технари — в частности веб-разработчики — должны отбросить многие старые методики и верования в сфере разработки защищённых PHP-приложений. Особенно это относится ко всем, кто не верит, что такие приложения вообще возможны.


Это руководство — дополнение к электронной книге PHP: The Right Way с сильным уклоном в безопасность, а не общие вопросы программирования на PHP (вроде стиля кода).

Читать дальше →
Total votes 75: ↑72 and ↓3+69
Comments38

Как писать на Spring в 2017

Reading time10 min
Views276K

В одной из классических статей для новичков, мелькавших недавно на Хабре, рассказывалось про создание базового Web приложения на Java. Все начиналось с сервлета, потом создания JSP страницы и, наконец, деплоймента в контейнер. Посмотрев на это свежим взглядом я понял, что для как раз для новичков это, наверняка, выглядит совершенно жутко — на фоне простых и понятных PHP или Node.js, где все просто — написал контроллер, вернул объект, он стал JSON или HTML. Чтобы немного развеять это ощущение, я решил написать "Гайд для новичков в Spring". Цель это статьи — показать, что создание Web приложений на Java, более того — на Spring Framework это не боль и мучительное продирание через web.xml, persistence.xml, beans.xml, и собирание приложения как карточного домика по кусочкам, а вполне себе быстрый и комфортный процесс. Аудитория — начинающие разработчики, разработчики на других языках, ну и те, кто видел Спринг в его не самые лучше времена.

Читать дальше →
Total votes 47: ↑44 and ↓3+41
Comments110

Шаблоны проектирования с человеческим лицом

Reading time32 min
Views487K

image


Шаблоны проектирования — это способ решения периодически возникающих проблем. Точнее, это руководства по решению конкретных проблем. Это не классы, пакеты или библиотеки, которые вы можете вставить в своё приложение и ожидать волшебства.


Как сказано в Википедии:


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

image Будьте осторожны


  • Шаблоны проектирования — не «серебряная пуля».
  • Не пытайтесь внедрять их принудительно, последствия могут быть негативными. Помните, что шаблоны — это способы решения, а не поиска проблем. Так что не перемудрите.
  • Если применять их правильно и в нужных местах, они могут оказаться спасением. В противном случае у вас будет ещё больше проблем.

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

Читать дальше →
Total votes 148: ↑134 and ↓14+120
Comments98

Генерируем произвольные последовательности на выводах платы Raspberry Pi

Reading time18 min
Views18K


Автор: Николай Хабаров, Embedded Expert DataArt, евангелист технологий умного дома.

В этой статье я расскажу, как написать обычное user space-приложение на Python для современного ARM-процессора с ОС Linux для генерирования сложных последовательностей импульсов на выводах платы. Суть идеи — использовать DMA-модуль процессора для копирования из предварительно подготовленного буфера в памяти в GPIO с высокой точностью по времени.

Когда речь заходит о необходимости сгенерировать сложную последовательность импульсов, например, для шаговых двигателей, обычно используют старые добрые простенькие микроконтроллеры с установленной специальной операционной системой реального времени или вообще без операционной системы. Реализация при этом, в лучшем случае, написана на C++. Сейчас процессоры шагнули далеко вперед и имеют массу преимуществ: производительность, возможность использования операционной системы Linux со всей инфраструктурой и ПО, а также высокоуровневых языков программирования, таких как Python. И все же современные микроконтроллеры для генерирования сложных последовательностей на выводах GPIO, как правило, не используют.

Я реализовал генерацию импульсов для управления шаговыми двигателями проекта PyCNC — проекта контроллера машин с ЧПУ, станков, 3D-принтеров, полностью написанного на Python и запускаемого на современном ARM-процессоре на плате Raspberry Pi.

Статья может быть полезна желающим реализовать генерацию сложных последовательностей установки уровней на выводах одного или нескольких GPIO на других высокоуровневых языках программирования, используя DMA-модули других процессоров.
Total votes 8: ↑7 and ↓1+6
Comments22

Развертка среды разработки Symfony под Windows

Reading time5 min
Views15K

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


Production на удалённой VDS, Ubuntu 16, со всем необходимым окружением. Главные репозитории в GitLab — бесплатном аналоге GitHub. Каждый разработчик удаленно трудится над проектами на своих локальных машинах, работая с клоном репозитория и проверяя все доработки на встроенном в symfony веб-сервере.


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


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


image
Читать дальше →
Total votes 21: ↑13 and ↓8+5
Comments31

Матрица: революция. Часть вторая — ESP8266

Reading time6 min
Views24K
image

В своей статье я обещал показать вам наше светлое будущее в техногенном окружении, цитата: «В общем, будет интересно, как говорится, оставайтесь с нами». Выполняю своё обещание и представляю беспрецедентное решение для рынка IoT за $2 на ESP8266.
Читать дальше →
Total votes 20: ↑11 and ↓9+2
Comments56

Как сделать кроссплатформенное десктопное приложение на базе веб-технологий

Reading time15 min
Views43K


Дмитрий Дудин (xbSoftware)


Сегодня я вам расскажу про технологию nw.js, большинство слайдов моей презентации будет посвящено ей. Это технология позволяет разрабатывать десктопные приложения и писать их на html, javascript и css. Причем приложение будет кроссплатформенное — под Windows, Linux и Mac. Можно их сбилдить и они будут иметь доступ к графическому интерфейсу системы, т.е. смогут еще работать с менюшками и т.д.
Total votes 58: ↑47 and ↓11+36
Comments119

Excel «Всемогущий» и Redmine: как генерировать задачи прямо в Excel

Reading time9 min
Views22K

В далёких от IT проектных организациях Excel часто используется в качестве инструмента обработки бог весть каких данных.

Передо мной встала задача в очень сжатые сроки наладить в Excel мониторинг весьма специфичного проекта с попутной выдачей заданий в проектные отделы. Касательно мониторинга ТЗ было более-менее определено и весь функционал был реализован средствами VBA самого Excel.

С выдачей заданий всё было не так однозначно. Поскрипев креслом, я решил попробовать отправлять задачи в Redmine прямо из Excel, получая обратно гиперссылку и номер задачи.

Статья написана инженером-проектировщиком для таких же новичков в программировании, автоматизирующих подручными средствами рутинную работу. Буду рад любым замечаниям!
Читать дальше →
Total votes 26: ↑25 and ↓1+24
Comments14

Коротко об архитектуре компонента Symfony Config

Reading time6 min
Views7.9K


Компонент Symfony 2 Config предназначен для работы с конфигурационными файлами и предоставляет следующие возможности:

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

Официальная документация по этому компоненту содержит подробную информацию по его использованию. А мы давайте посмотрим на то, как устроен этот компонент внутри.
Читать дальше →
Total votes 25: ↑23 and ↓2+21
Comments6

Покрываем проект smoke-тестами, пока он не сгорел

Reading time9 min
Views47K

Привет, Хабр! Как-то раз на нашем внутреннем семинаре мой руководитель – глава отдела тестирования – начал свою речь со слов «тестирование не нужно». В зале все притихли, некоторые даже пытались упасть со стульев. Он продолжил свою мысль: без тестирования вполне возможно создать сложный и дорогостоящий проект. И, скорее всего, он будет работать. Но представьте, насколько увереннее вы будете себя ощущать, зная, что продукт работает как надо.

В Badoo релизы происходят довольно часто. Например, серверная часть наравне с desktop web релизится дважды в день. Так что мы не понаслышке знаем, что сложное и медленное тестирование – камень преткновения разработки. Быстрое же тестирование – это счастье. Итак, сегодня я расскажу о том, как в компании Badoo устроено smoke-тестирование.
Читать дальше →
Total votes 49: ↑47 and ↓2+45
Comments16

Удачная модель ветвления для Git

Reading time10 min
Views978K
Перевод статьи Vincent Driessen: A successful Git branching model

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



В качестве инструмента управления версиями всего исходного кода она использует Git.

Читать дальше →
Total votes 180: ↑171 and ↓9+162
Comments105

Ловим уведомления с помощью маячков

Reading time11 min
Views8K
Привет, меня зовут Илья Гарах, у меня есть собственная студия, где я руковожу мобильной и веб-разработкой, параллельно развиваю и продвигаю несколько стартапов. Про Bluetooth-маячки впервые я услышал из очередной презентации Apple, и на тот момент вся идея показалась сомнительной и запутанной. Позже мы с коллегами вернулись к теме маячков: интерактивная реакция на передвижения и высокая точность позиционирования в помещениях выглядели очень заманчиво.


Статья автора Ильи Гараха, в рамках конкурса «Device Lab от Google».

Но налёт радости был омрачен ограничениями устройств, ведь с BLE (Bluetooth с низким энергопотреблением) на тот момент умели работать только новые Айфоны и последние версии устройств на Android, поэтому данное решение сложно было продвинуть как рабочее для широкой аудитории. Со временем процент устройств поддерживающих BLE существенно вырос, поэтому в начале 2016 мы закупили ibeacon-маяки для тестирования. С этого все и началось.
Подробнее
Total votes 9: ↑7 and ↓2+5
Comments13

Как pdf (изображения) преобразовать в текстовый txt-файл

Reading time4 min
Views45K
Вы скажете, что самый простой способ — выделить весь текст в pdf, скопировать его в буфер обмена и вставить из буфера обмена в текстовый файл. И будете правы. Но это не наш случай. Файл pdf — результат сканирования многостраничного документа. Т.е. содержимое pdf — это изображения текста.

image


Предлагаемый вариант решения реализован под Windows-8, но с небольшими корректировками, думаю, вполне может быть использован для Linux и OS X.
С задачей преобразования изображения в текст справляются Abbyy FineReader, MS Word, MS OneNote. Существуют также сайты, на которых изображение можно преобразовать в online: http://www.ocrconvert.com
Предлагаемое решение использует бесплатные утилиты. В приоритете также была работа в командной строке.
Читать дальше →
Total votes 29: ↑26 and ↓3+23
Comments60

Google Диск в качестве резервного хранилища для VPS сервера на базе Linux

Reading time2 min
Views29K
Пришла идея делать backup сервера VPS на CentOS 7 в Google drive, не пропадать же зря 15 гигам халявного места. Немного поискал и нашел пару статей на эту тему, тема оказалась не нова, и сначала поставил утилиту от самой корпорации добра, вот статья на эту тему Backing up a Directory to Google Drive on CentOS 7.

Но мне это не подходит, так как есть скрипт, который выполняется по расписанию, и в нем я решил проверять файлы по дате создания и не плодить миллион архивов, а для этого нужно смонтировать Google Drive в папку.

Утилита от Google умеет только закачивать и скачивать файлы, проверить по дате и удалить все старше 3х дней не получилось.

Спасение нашлось в google-drive-ocamlfuse, статей на эту тему не мало, но есть одно, но, утилита требует GUI интерфейс, а в частности любой браузер. В браузер передается с генерированная ссылка.

Google как известно авторизует пользователей по OAuth. В моем VPS естественно не о каком GUI речь не идет, только консоль.

На помощь пришла статья с github Headless Usage & Authorization. Предлагаю вам мой вольный перевод.
Читать дальше →
Total votes 22: ↑19 and ↓3+16
Comments8

IPv6 теория и практика: введение в IPv6

Reading time7 min
Views136K
Этой статьёй я хочу начать цикл, посвященный IPv6. Я являюсь инструктором академии Cisco, поэтому, если вы в совершенстве знаете материал нового CCNA Routing & Switching, то скорее всего, не найдёте в цикле ничего нового. Речь пойдёт о структуре и особенностях протокола IPv6, а также, применении его на маршрутизаторах Cisco (маршрутизация RIP, OSPF, EIGRP, списки контроля доступа, и др. – как пойдёт). В первой статье мы поговорим о структуре IPv6 пакета, записи адресов, префиксе. Вторая статья цикла доступна здесь. Информация подойдёт для новичков, имеющих, тем не менее, некоторые знания по IPv4 и модели OSI.
Цикл статей основан на материалах моего блога, которые, в свою очередь, основаны на опыте преподавания, работы с оборудованием и вольном переводе и обдумывании официального курса CCNA Routing & Switching.
Итак, начнём. Не буду останавливаться на стандартных рассуждениях о том, что IPv4 адресов мало, о том, что NAT и прокси – это костыли, о том, что костыли пока работают, и никто не хочет переходить на IPv6, вместо этого – сразу к сути.
Читать дальше →
Total votes 39: ↑35 and ↓4+31
Comments42
1
23 ...

Information

Rating
Does not participate
Registered
Activity