Как стать автором
Обновить
18
0
Вадим Вележенко @velezh

Пользователь

Отправить сообщение

Эффективный поиск XSS-уязвимостей

Время на прочтение21 мин
Количество просмотров39K


Про XSS-уязвимости известно давным-давно — казалось бы, нужен ли миру ещё один материал о них? Но когда Иван Румак, занимающийся тестированием безопасности, поделился методологией их поиска на нашей конференции Heisenbug, реакция зрителей оказалась очень положительной.


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


Под катом — и текст, и видео. Далее повествование идет от лица Ивана.

Всего голосов 23: ↑23 и ↓0+23
Комментарии4

Поддержание аккуратной истории в Git с помощью интерактивного rebase

Время на прочтение5 мин
Количество просмотров42K

Interactive rebase — один из самых универсальных инструментов Git'а. В этой статье от автора Git-клиента Tower рассказывается, как корректировать сообщения при коммитах и исправлять свои ошибки.

Читать далее
Всего голосов 55: ↑54 и ↓1+53
Комментарии44

20 библиотек для эффектного iOS-приложения

Время на прочтение6 мин
Количество просмотров15K


Из огромного количества iOS-библиотек нет особого смысла составлять какие-то рейтинги. Поэтому просто представляем двадцатку эффектных/полезных инструментов для тех, кто пишет приложения под гаджеты Apple.

Все анимации являются ссылками на свои полноразмерные версии.
Большой траффик - много гиф-анимации
Всего голосов 23: ↑22 и ↓1+21
Комментарии13

Современный код для выполнения HTTP запросов в Swift 5 с помощью Combine и применение их в SwiftUI. Часть 1

Время на прочтение27 мин
Количество просмотров19K


Выполнение HTTP запросов — это один из самых важных навыков, которые необходимо получить при разработке iOS приложений. В более ранних версиях Swift (до версии 5) вне зависимости от того, формировали ли вы эти запросы «с нуля» или с использование известного фреймворка Alamofire,  вы в конечном итоге получали сложный и запутанный код с callback типа completionHandler: @escaping(Result<T, APIError>) -> Void.

Появление в Swift 5 нового фреймворка функционального реактивного программирования Combine в сочетании с уже существующими URLSession и Codable предоставляет вам все необходимые инструменты для самостоятельного написания очень компактного кода для выборки данных из интернета.

В этой статье в соответствии с концепцией Combine мы будем создавать «издателей» Publisher для выборки данных из интернета, на которые в дальнейшем сможем легко «подписаться» и использовать при проектировании UI как с помощью UIKit, так и с помощью SwiftUI.

В SwiftUI это выглядит более лаконично и более эффектно, так как действие «издателей» Publisher не ограничивается просто выборкой данных, а простирается дальше, вплоть до управления пользовательским интерфейсом (UI). Дело в том, что в SwiftUI разделение данных и View осуществляется с помощью ObservableObject классов с @Published свойствами, изменения которых SwiftUI АВТОМАТИЧЕСКИ отслеживает и полностью «перерисовывает» свои View.

В эти ObservableObject классы можно очень просто заложить определенную бизнес-логику приложения, если некоторые из этих @Published свойств являются результатом синхронных и/ или асинхронных преобразований других @Published  свойств, которые можно напрямую менять такими «активными» элементами пользовательского интерфейса (UI) как текстовые поля TextField, Picker, Stepper, Toggle и т.д.
Читать дальше →
Всего голосов 5: ↑5 и ↓0+5
Комментарии1

Современный код для выполнения HTTP запросов в Swift 5 с помощью Combine и применение их в SwiftUI. Часть 2. Hacker News

Время на прочтение15 мин
Количество просмотров5.8K


Hacker News, чей API мы собираемся использовать в этой статье, является социальным сайтом, сфокусированным на компьютерах и предпринимательстве. Если вы с ним ещё не знакомы, вы найдёте там много интересного.



В предыдущих статьях  на примере базы данных фильмов TMDb и агрегатора новостей NewsAPI.org была представлена стратегия применения Combine для формирования HTTP запросов и использования их во View Model для управления UI, спроектированного с помощью SwiftUI. В этой статье мы в точности воспроизведем ту же самую стратегию для разработки приложения, взаимодействующего с агрегатором новостей Hacker News, но добавим работу с «внешним» издателем Timer и для простоты исключим обработку ошибок.

Надо сказать, что выборка статей на ресурсе Hacker News имеет совершенно другую логику, чем в новостном агрегаторе NewsAPI.org, но технология, основанная на выполнении HTTP запросов с помощью Combine, прекрасно показывает свою гибкость и в этой ситуации. Кроме того, информация на сайте Hacker News очень часто обновляется и использование внешнего «издателя» Timer позволит автоматически отслеживать поступающие на сайт новые истории (Story), именно так их называют на этом ресурсе.

API агрегатора новостей Hacker News можно использовать совершенно свободно и не требуется никакой регистрации для аккаунта разработчика. Это здорово, потому что вы можете сразу начать работать над кодом без длительной регистрации, как мы делали это с другими public APIs.
Читать дальше →
Всего голосов 4: ↑4 и ↓0+4
Комментарии0

Ищем баги в PHP коде без статических анализаторов

Время на прочтение10 мин
Количество просмотров12K

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


Пример гипотезы:


Функции strpos легко передать аргументы в неправильном порядке. 

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


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



Под катом:


  • Поиск и разбор багов в open source проектах.
  • Quick start по phpgrep.
  • Принцип работы синтаксического поиска.



Читать дальше →
Всего голосов 44: ↑41 и ↓3+38
Комментарии23

Ссылки в Windows, символьные и не только

Время на прочтение3 мин
Количество просмотров390K

Предыстория


В своём топике "Впечатления от Яндекс.Субботника" хабрачеловек absolvo высказал удивление, что один из докладчиков не знал о том, что символьные ссылки есть и в Windows. Честно говоря, не знал этого и я, поэтому поинтересовался об этих ссылках в комментариях.

Думаю, то, что удалось выяснить, может показаться кому-нибудь полезным.
Читать дальше →
Всего голосов 57: ↑52 и ↓5+47
Комментарии108

Резистор в цепи затвора или как делать правильно

Время на прочтение4 мин
Количество просмотров79K


Всем доброго времени суток!

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

Любому из этих случаев я буду очень рад.
Читать дальше →
Всего голосов 51: ↑48 и ↓3+45
Комментарии70

Максимальный постоянный ток через полевой транзистор

Время на прочтение6 мин
Количество просмотров50K
На просторах интернета достаточно много информации о полевых транзисторах (далее ПТ) и их параметрах, но один из довольно простых, на первый взгляд, параметров, а именно – максимальный постоянный ток, который транзистор может через себя пропустить в ключевом режиме, и не сгореть – приводится в даташитах как-то размыто и неочевидно.

В статье будет рассмотрен пример расчёта максимального тока через MOSFET SQM50P03-07 (взял первый попавшийся из своей схемы), работающий в ключевом режиме, или на участке насыщения.
Читать дальше →
Всего голосов 56: ↑55 и ↓1+54
Комментарии45

Как реализовать язык программирования на JavaScript. Часть 2: Интерпретатор

Время на прочтение15 мин
Количество просмотров8.9K

Здравствуйте! Представляю вам вторую часть моего перевода руководства реализации своего языка программирования на JavaScript — PL Tutorial.


От переводчика


Мы создадим свой язык программирования — λзык (в оригинале — λanguage). В процессе создания мы будем использовать достаточно много интересных техник, таких как рекурсивный спуск, стиль передачи управления, базовые техники оптимизации. Будет создано две версии интерпретатора — обычный и CPS-интерпретатор, транс-компилятор в JavaScript.


Автор оригинала — Mihai Bazon, автор известной библиотеки UglifyJS (инструмент для минимизации и форматирования JS-кода).

Читать дальше →
Всего голосов 13: ↑12 и ↓1+11
Комментарии8

Расширяем функционал штатной аудиосистемы

Время на прочтение3 мин
Количество просмотров38K
Всем привет. Являюсь обладателем десятилетнего японца, в котором меня все устраивало, за исключением штатной аудиосистемы — в ней отсутствовал Bluetooth. Способов решения этой проблемы целых три:

1. Купить затычку в прикуриватель и не выпендриваться.

Минусы:

  • Качество звука
  • Управление отсутствует
  • Вывод названия песен также отсутствует

Плюсов нет.

2. Купить на разборках за немалые деньги штатный блок Bluetooth + голову поновее.

Минусы:

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

Плюсы:

  • Штатное оборудование

3. Сделать что-либо самому, но так, чтобы не урезать имеющийся функционал.

Минусы:

  • Нужно время
  • Денег было потрачено больше, чем если выбрать первые два варианта вместе

Плюсы:

  • Удовлетворение от проделанной работы
  • Поддержка lossless аудио
  • Поддержка кириллицы, хоть и транслитом, т.к. экран не умеет.

Как вы поняли из названия, я выбрал путь номер 3.
Всего голосов 57: ↑56 и ↓1+55
Комментарии94

История советских кассетников: эволюция “Десны”, MK-60 made in USA и народные магнитофоны 70-х

Время на прочтение9 мин
Количество просмотров61K
Продолжая наш цикл о советском аудио, захотелось рассказать о кассетных магнитофонах в СССР. Известно, что в Стране Советов эти устройства стали появляться несколько позже, чем на западе, а исчезли наоборот раньше (производство их было свернуто почти сразу после распада Союза).



Мне было интересно проанализировать насколько наши разработчики приблизились к коллегам из Японии, Западной Европы и США, удалось ли им догнать и перегнать, а также понять, почему советские разработки в этой области порой пользовались редким или т. н.”вынужденным” спросом, а большинство их современников стремились приобрести зарубежные образцы.

Ввиду того, что тема достаточно обширна, я разделю материал на четыре части, в первых двух я расскажу об эволюции портативных устройств, а в остальных — рассмотрю развитие и упадок стационарных дек.
Читать дальше →
Всего голосов 74: ↑71 и ↓3+68
Комментарии156

Самогонный аппарат — полный автомат. Часть 2. Сепаратор. Холодильник. Куб. Алгоритмы

Время на прочтение18 мин
Количество просмотров48K
Прошло 4 года с тех пор, как я опубликовал статью «Концепт: самогонный аппарат — полный автомат». 4 года, Карл!

Идея не была заброшена. Мало того, она — как заноза в мозгу не давала покоя. И за 4 года было кое-что сделано. Методом проб и ошибок я постепенно вышел на реализацию этого проекта. По крайней мере — уже виден свет в конце тоннеля.

Красивый самогонный аппарат
КДПВ. Красивый рабочий аламбик. «Montanya distillers Co», Crested Butte, Colorado, USA.

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

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

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

4. От жидкостного охлаждения холодильника в силу объективных причин (подводка, замерзание в случае двухконтурности и тому подобных проблем).

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

Много тяжеловесных изображений и спойлеров.
Да, я же ждал эту статью!
Всего голосов 58: ↑56 и ↓2+54
Комментарии101

Вредные советы: как правильно писать техническую документацию?

Время на прочтение7 мин
Количество просмотров11K

Советы по грамотному написанию технической документации для пользователей.
Часть 1


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

На этот раз под катом – руководство нашего технического писателя Андрея Старовойтова, которое поможет сделать вашу документацию для пользователей проще и понятнее (описанные приемы применяют при документировании своих продуктов Apple, Microsoft и другие компании).
Читать дальше →
Всего голосов 24: ↑22 и ↓2+20
Комментарии4

Конференция DEFCON 19. Взламываем MMORPG ради веселья и прибыли. Часть 1

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



Я слышал, что всем сегодняшним докладчикам не везло, потому что у них возникали проблемы с показом слайдов, но надеюсь, что у нас с всё получится. Итак, в реальной жизни я исследую вредоносное программное обеспечение в лаборатории Касперского. Я также работал аналитиком вредоносного ПО в компании Microsoft и вопреки расхожему мнению или тому, что можно найти в Википедии, название вируса Conficker не является немецким или датским эквивалентом английского слова «assfucker», это всего лишь придумана мной игра слов. Так что придумывание названия для этого компьютерного червя можно считать самым большим достижением в моей жизни. Я являюсь «золотым фармером» и в качестве хобби я написал несколько ботов для компьютерных игр, попробуйте догадаться, для каких именно. Теперь я предоставлю слово Майку, чтобы он рассказал о себе.

Майк Доннелли: я Майк Доннели, известный под ником Mercury, создавший интернет-бота Glider для игры World of Warcraft. Установлением прав собственности на этого бота, 100000 копий которого были распроданы третьей стороной за 4 миллиона долларов, занимался суд. Мне удалось обжаловать решение суда первой инстанции, и апелляционный суд постановил возместить мне, как истинному владельцу, ущерб в размере 6,5 миллионов долларов, однако в любом случае судебное дело не доставило мне особого удовольствия.

Всего голосов 16: ↑15 и ↓1+14
Комментарии9

Introscope: ну очень ленивое unit-тестирование

Время на прочтение2 мин
Количество просмотров3.3K

Мы на работе пишем много часто меняющейся бизнес-логики на JS (стартап же). Даже слишком много. И всё это хочется по старой привычке тестировать, но как-нибудь побыстрее, чтобы тесты особо не мешали говнокодить, когда это нужно, и не подгонять под тесты особенно сильно структуру модулей. В какой-то момент пришла мысль, что можно это еще и автоматизировать как-то с помощью простенького babel-плагина, чтобы он для начала все приватные переменные и методы выворачивал в тестовой среде, а в продакшене не трогал. Это оказалось довольно просто и увлекательно. Так появился Introscope, которым мы теперь тестируем всё более-менее сложное.

Читать дальше →
Всего голосов 18: ↑17 и ↓1+16
Комментарии2

Как работать с async/await в циклах JavaScript

Время на прочтение3 мин
Количество просмотров148K

Как запустить асинхронные циклы по порядку или параллельно в JavaScript?


Перед тем, как делать асинхронную магию, я хочу напомнить как выглядят классические синхронные циклы.

Читать дальше →
Всего голосов 31: ↑24 и ↓7+17
Комментарии33

Рендеринг шрифтов с помощью масок покрытия, часть 1

Время на прочтение12 мин
Количество просмотров5.2K
image

Когда мы приступали к разработке нашего профилировщика производительности, то знали, что будем выполнять почти весь рендеринг UI самостоятельно. Вскоре нам пришлось решать, какой подход выбрать для рендеринга шрифтов. У нас были следующие требования:

  1. Мы должны иметь возможность рендерить любой шрифт любого размера в реальном времени, чтобы адаптироваться к системным шрифтам и их размерам, выбранным пользователями Windows.
  2. Рендеринг шрифтов должен быть очень быстрым, никаких торможений при рендеринге шрифтов не допускается.
  3. В нашем UI куча плавных анимаций, поэтому текст должен иметь возможность плавно перемещаться по экрану.
  4. Он должен быть читаемым при малых размерах шрифтов.

Не будучи в то время большим специалистом в этом вопросе, я поискал информацию в Интернете и нашёл множество техник, используемых для рендеринга шрифтов. Также я пообщался с техническим директором Guerrilla Games Михилем ван дер Леу. Эта компания экспериментировала со множеством способов рендеринга шрифтов и их движок рендеринга был одним из лучших в мире. Михиль вкратце изложил мне свою идею новой техники рендеринга шрифтов. Хотя нам вполне было бы достаточно уже имевшихся техник, меня эта идея заинтриговала и я приступил к её реализации, не обращая внимания на открывшийся мне чудесный мир рендеринга шрифтов.
Читать дальше →
Всего голосов 12: ↑10 и ↓2+8
Комментарии4

Как усилить защищенность веб-приложений при помощи HTTP заголовков

Время на прочтение18 мин
Количество просмотров32K
image

Это третья часть серии по веб-безопасности: вторая часть была «Web Security: введение в HTTP», первая "Как работают браузеры — введение в безопасность веб-приложений".

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

В настоящее время браузеры внедрили очень широкий спектр заголовков, связанных с безопасностью, чтобы злоумышленникам было труднее использовать уязвимости. В этой статье мы попытаемся обсудить каждый из них, объясняя, как они используются, какие атаки они предотвращают, и немного истории по каждому заголовку.
Читать дальше →
Всего голосов 35: ↑34 и ↓1+33
Комментарии9

Высокая доступность MySQL в GitHub

Время на прочтение14 мин
Количество просмотров9.9K

GitHub использует MySQL в качестве основного хранилища данных для всего, что не связано с git, поэтому доступность MySQL имеет ключевое значение для нормальной работы GitHub. Сам сайт, интерфейс API на GitHub, система аутентификации и многие другие функции требуют доступа к базам данных. Мы используем несколько кластеров MySQL для обработки различных служб и задач. Они настроены по классической схеме с одним главным узлом, доступным для записи, и его репликами. Реплики (остальные узлы кластера) асинхронно воспроизводят изменения главного узла и обеспечивают доступ для чтения.


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


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


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


Читать дальше →
Всего голосов 25: ↑23 и ↓2+21
Комментарии4
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Украина
Зарегистрирован
Активность