Как стать автором
Обновить
58.66
Рейтинг
Typeable
Functional programming, High assurance, Consulting
Сначала показывать
  • Новые
  • Лучшие

7 ложных предположений о том, как устроены строки

Блог компании Typeable Информационная безопасность *Программирование *
Перевод

Как Unicode уничтожает большинство ваших предположений о том, как на самом деле работают строки



Когда речь идет о написании чего-то простого, мы, программисты, обычно действуем интуитивно. В случае с простыми вещами мы полагаемся на четкий набор предположений вместо конкретных знаний о том, как эти вещи работают. Например, мы предполагаем, что если b = a + 1, то b больше a, или что если мы применим функцию malloc для какого-то буфера, то получим необходимое количество памяти для записи. Мы не заглядываем в документацию всякий раз, когда имеем дело с мелочами.


Мы делаем так, потому что тотальная проверка замедлит работу. Однако если бы мы все-таки провели проверку, мы бы обнаружили, что обычно ошибаемся в своих предположениях. Существует арифметическое переполнение, в результате которого a + 1 может быть значительно меньше, чем a. Иногда malloc дает нам null вместо буфера и мы оказываемся в пролете.


Нам обычно приходится обжечься на таких вещах, чтобы хотя бы немного изменить свои предположения. И даже тогда мы обычно исправляем их весьма условно.
Столкнувшись с досадной ошибкой переполнения, мы можем скорректировать свое предположение о целых числах в виде «a + 1 больше a, если отсутствует вероятность, при которой a представляет собой очень большое число». И мы действуем исходя из этого, вместо того, чтобы обдумать четкие правила, по которым работает переполнение.


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

Читать дальше →
Всего голосов 84: ↑82 и ↓2 +80
Просмотры 19K
Комментарии 39

В чем польза формальных спецификаций вроде OpenAPI?

Блог компании Typeable Open source *Программирование *API *


В этой статье хочу рассказать, что такое OpenAPI и зачем он может быть нужен.

Читать дальше →
Всего голосов 17: ↑10 и ↓7 +3
Просмотры 4.2K
Комментарии 1

Property-based тестирование с QuickCheck

Блог компании Typeable Тестирование IT-систем *Программирование *Haskell *Функциональное программирование *
Tutorial

Автор статьи: klntsky



Что такое Property-Based Testing?


Property-based testing (PBT) — подход к тестированию ПО, подразумевающий автоматическую проверку свойств функций (предикатов), специфицируемых программистом-тестировщиком. Для проверки, т.е. поиска контрпримеров, используются автоматически сгенерированные входные данные. PBT позвляет разработчикам значительно увеличить тестовое покрытие и эффективно расходовать своё время, не придумывая входные данные для тестов самостоятельно. В общем случае данные, генерируемые во время property-based тестирования, ничем не ограничены, поэтому проверка может быть произведена на тех значениях, про которые разработчик мог забыть или для которых не счёл нужным написать юнит-тесты (действительно, не перебирать же все значения входных параметров вручную).


PBT-подход был популяризован библиотекой QuickCheck, написанной на Haskell, и в этой статье будет показано, как пользоваться этим инструментом эффективно.

Читать дальше →
Всего голосов 6: ↑6 и ↓0 +6
Просмотры 880
Комментарии 0

Когда стоит выбирать микросервисы

Блог компании Typeable Анализ и проектирование систем *Микросервисы *

Всем привет! Меня зовут Виктория, в Typeable я занимаюсь вопросами архитектуры приложений и не могла пройти мимо вечного вопроса: быть или не быть? Точнее переводить нам наши решения на микросервисы или нет. И с целью это понять я провела небольшое исследование возможных причин и анти-причин, выводы по которому и привожу здесь.

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

Сам подход оформился на стыке технологий из конкурентной необходимости мгновенно вывести бизнес на новый уровень, и поэтому решения развивались лавинообразно и быстро обзаводились надстройками, паттернами и CI/CD обвеской. Для бизнеса причины не теряют актуальности и интерес к микросервисам также не угасает последние десять лет. При этом сделать решение на микросервисах для ИТ команды – задача творческая, интеллектуальная, позволяющая опробовать современные подходы и уложить на лопатки драконов консерватизма предыдущих решений. То есть, вполне благородный вызов. 

Но вот стоит ли поддаваться этой магии — большой вопрос. 

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

Впрочем, давайте разбираться.

Читать далее
Всего голосов 16: ↑15 и ↓1 +14
Просмотры 4.3K
Комментарии 4

Создаем веб-приложение на Haskell с использованием Reflex. Часть 4

Блог компании Typeable Разработка веб-сайтов *Программирование *Haskell *Функциональное программирование *
Tutorial

Часть 1


Часть 2


Часть 3


Всем привет! В новой части мы рассмотрим использование JSFFI.


intro

Читать дальше →
Всего голосов 8: ↑8 и ↓0 +8
Просмотры 2K
Комментарии 0

Почему я считаю Haskell хорошим выбором с точки зрения безопасности ПО?

Блог компании Typeable Информационная безопасность *Программирование *Haskell *Функциональное программирование *
Перевод


Команда Typeable понимает ценность безопасности. Мы любим Haskell, но стоит ли его выбирать, если ваша цель – создание защищенного программного обеспечения? Хотелось бы сказать «да», но как и для большинства эмпирических вопросов о разработке ПО, здесь просто нет объективного доказательства, подтверждающего, что Haskell – или ещё какой-нибудь язык программирования – обеспечивает большую безопасность, чем любой другой. Нельзя сказать, что выбор языка в Typeable не имеет значения для безопасности, но какое именно значение он имеет, еще нужно подумать.


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

Читать дальше →
Всего голосов 23: ↑23 и ↓0 +23
Просмотры 5.5K
Комментарии 60

Создаем веб-приложение на Haskell с использованием Reflex. Часть 3

Блог компании Typeable Разработка веб-сайтов *Программирование *Haskell *Функциональное программирование *
Tutorial

Часть 1.


Часть 2.


Всем привет! В этой части мы рассмотрим использование класса EventWriter и библиотеки ghcjs-dom.


Читать дальше →
Всего голосов 12: ↑12 и ↓0 +12
Просмотры 1.8K
Комментарии 0

Nix: воспроизводимая сборка

Блог компании Typeable Программирование *Разработка под Linux *


Привет, Хаброюзеры!


Сегодня мы продолжим наш цикл статей о Nix и как мы в Typeable его используем.


Первый пост из серии, рассказывающий об основах языка Nix, можно прочитать здесь.


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


Весь код для этой статьи можно найти в репозитарии на Github.

Читать дальше →
Всего голосов 9: ↑9 и ↓0 +9
Просмотры 2.3K
Комментарии 10

Как мы выбираем языки программирования в Typeable

Блог компании Typeable Программирование *Haskell *Функциональное программирование *Rust *

Неоднократно меня спрашивали, почему я предпочитаю использовать такие языки программирования как Haskell и Rust, т.к. они не являются самыми широко используемыми и популярными инструментами. Этот пост написан с целью демистифицировать то, что происходит у меня в голове, когда я думаю о выборе технологии.
Читать дальше →
Всего голосов 21: ↑21 и ↓0 +21
Просмотры 4.5K
Комментарии 12

Восемь «забавных» вещей, которые могут с вами произойти, если у вас нет защиты от CSRF-атак

Блог компании Typeable Информационная безопасность *Разработка веб-сайтов *
Перевод


Введение


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

Читать дальше →
Всего голосов 9: ↑8 и ↓1 +7
Просмотры 4.9K
Комментарии 3

Nix: Что это и с чем это употреблять?

Блог компании Typeable Программирование *Разработка под Linux *
Tutorial


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


Мы в Typeable хотели опубликовать небольшой цикл статей о том, как Nix нам помогает (и немного мешает) в разработке. Но, проведя немножко времени в поисках похожего материала здесь, с удивлением обнаружили, что на Хабре нет толкового введения в Nix, на которое можно было бы сослаться.


Статья от @snizovtsev подойдёт как хорошее введение при разработке на C++, но это не совсем то введение, которое мне хотелось бы видеть. Поэтому я решил написать его сам :)


Файлы к этой статье можно найти здесь.

Читать дальше →
Всего голосов 8: ↑8 и ↓0 +8
Просмотры 3.4K
Комментарии 0

Создаем веб-приложение на Haskell с использованием Reflex. Часть 2

Блог компании Typeable Разработка веб-сайтов *Программирование *Haskell *Функциональное программирование *
Tutorial

Часть 1.


Часть 3.


Всем привет! Продолжаем серию туториалов по разработке веб-приложения на Reflex.
В этой части мы добавим возможность выполнять различные манипуляции со списком задач.


intro

Читать дальше →
Всего голосов 9: ↑9 и ↓0 +9
Просмотры 1.9K
Комментарии 2

Зачем мы транспилируем Haskell в JavaScript

Блог компании Typeable Ненормальное программирование *Разработка веб-сайтов *Программирование *Haskell *

Привет, Хабр! Сегодня мы расскажем, почему мы пишем фронтенд на Haskell и компилируем его в JavaScript. Вообще говоря, подобный процесс называется транспиляцией:


Транспиляция — это процесс преобразования программы на языке X в эквивалентную программу на языке Y. В отличие от компиляции, языки X и Y находятся примерно на одном и том же уровне абстракции.

Читать дальше →
Всего голосов 24: ↑19 и ↓5 +14
Просмотры 4.2K
Комментарии 13

Язык моделирования Alloy и приключения с параллельными запросами к базе данных

Блог компании Typeable Тестирование IT-систем *Анализ и проектирование систем *Отладка *
Перевод

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



О качестве программного обеспечения и инструментарии


В Typeable мы придаем огромное значение качеству программного обеспечения и прикладываем все усилия, чтобы обеспечить это качество. В настоящее время мы искореняем ошибки следующими способами:


  1. Анализ и создание спецификаций
  2. Устранение простых ошибок с использованием системы типов Haskell
  3. Стандартные юнит-тесты и интеграционные тесты
  4. Непрерывная интеграция
  5. Обязательные ревью кода
  6. Тестирование на стендах, проводимое QA инженерами
    (мы используем Octopod для оптимизации процесса разработки и QA)
  7. Тестирование в pre-production среде
  8. Ведение логов и контроль ошибок на этапе эксплуатации

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

Читать дальше →
Всего голосов 11: ↑11 и ↓0 +11
Просмотры 1.7K
Комментарии 0

Сравнение Elm и Reflex

Блог компании Typeable Программирование *Haskell *Функциональное программирование *Elm *

Введение


В этой статье мы поговорим о двух принципиально разных подходах к реактивному программированию.


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

Читать дальше →
Всего голосов 17: ↑17 и ↓0 +17
Просмотры 2.4K
Комментарии 2

Создаем веб-приложение на Haskell с использованием Reflex. Часть 1

Блог компании Typeable Разработка веб-сайтов *Программирование *Haskell *Функциональное программирование *
Tutorial

Часть 2.


Часть 3.


Введение


Всем привет! Меня зовут Никита, и мы в Typeable для разработки фронтенда для части проектов используем FRP-подход, а конкретно его реализацию на Haskell – веб-фреймоворк reflex. На русскоязычных ресурсах отсутствуют какие-либо руководства по данному фреймворку (да и в англоязычном интернете их не так много), и мы решили это немного исправить.


В этой серии статей будет рассмотрено создание веб-приложения на Haskell с использованием платформы reflex-platform. reflex-platform предоставляет пакеты reflex и reflex-dom. Пакет reflex является реализацией Functional reactive programming (FRP) на языке Haskell. В библиотеке reflex-dom содержится большое число функций, классов и типов для работы с DOM. Эти пакеты разделены, т.к. FRP-подход можно использовать не только в веб-разработке. Разрабатывать мы будем приложение Todo List, которое позволяет выполнять различные манипуляции со списком задач.


Читать дальше →
Всего голосов 15: ↑15 и ↓0 +15
Просмотры 5.6K
Комментарии 2

Сильные стороны функционального программирования

Блог компании Typeable Программирование *Функциональное программирование *
image

Привет! Меня зовут Катерина, и я испытываю самые тёплые чувства к функциональному программированию, использую функциональный язык на постоянной основе и даже немного преподаю.

Основной язык разработки у нас в Typeable — Haskell, и, пока все спорили о том, готов ли Haskell для продакшена, мы просто его использовали и считали конкурентным преимуществом. Нам хотелось бы поделиться своим мнением, основанным на этом опыте.
Читать дальше →
Всего голосов 34: ↑28 и ↓6 +22
Просмотры 11K
Комментарии 50

Как мы строили параллельные вселенные для нашего (и вашего) CI/CD пайплайна в Octopod

Блог компании Typeable Open source *Тестирование IT-систем *Управление разработкой *DevOps *

Как мы строили параллельные вселенные для нашего (и вашего) CI/CD пайплайна в Octopod



Привет, Хабр! Меня зовут Денис и я вам расскажу как нас надоумило сделать техническое решение для оптимизации процесса разработки и QA у себя в Typeable. Началось с общего ощущения, что вроде делаем все правильно, но все равно можно было бы двигаться быстрее и эффективнее — принимать новые задачки, тестировать, меньше синхронизироваться. Это все нас привело к дискуссиям и экспериментам, результатом которых стало наше open-source решение, которое я опишу ниже и которое теперь доступно и вам.
Читать дальше →
Всего голосов 14: ↑14 и ↓0 +14
Просмотры 2K
Комментарии 6

Информация

Дата основания
Местоположение
Россия
Сайт
typeable.io
Численность
11–30 человек
Дата регистрации