SysDE @ AWS
Создаем веб-приложение на Haskell с использованием Reflex. Часть 1
Введение
Всем привет! Меня зовут Никита, и мы в Typeable для разработки фронтенда для части проектов используем FRP-подход, а конкретно его реализацию на Haskell – веб-фреймоворк reflex
. На русскоязычных ресурсах отсутствуют какие-либо руководства по данному фреймворку (да и в англоязычном интернете их не так много), и мы решили это немного исправить.
В этой серии статей будет рассмотрено создание веб-приложения на Haskell с использованием платформы reflex-platform
. reflex-platform
предоставляет пакеты reflex
и reflex-dom
. Пакет reflex
является реализацией Functional reactive programming (FRP) на языке Haskell. В библиотеке reflex-dom
содержится большое число функций, классов и типов для работы с DOM
. Эти пакеты разделены, т.к. FRP-подход можно использовать не только в веб-разработке. Разрабатывать мы будем приложение Todo List
, которое позволяет выполнять различные манипуляции со списком задач.
Кому на Руси жить хорошо? (комфортно/безопасно в климатическом смысле)
Немного ответов на набивший оскомину вопрос "В каких частях России изменение климата наиболее опасно".
От авторов "не все города одинаково комфортны".
После публикации новости о статье, в которой мы рассмотрели тенденции изменения термического комфорта в летний период для российских городов, пришло много вопросов из разряда: "а что для зимы?", "а почему только для крупных городов?", " а в целом для России как дела?" и прочих.
Где жить-то безопаснее зимой? А где летом?
Градиентный спуск в Python
Рабочая область функции (заданный интервал) разбита на несколько точек. Выбраны точки локальных минимумов. После этого все координаты передаются функции в качестве аргументов и выбирается аргумент, дающий наименьшее значение. Затем применяется метод градиентного спуска.
Введение в неблокирующие алгоритмы
Неблокирующие алгоритмы широко применяются в ядре Linux когда традиционные примитивы блокировки либо не могут быть использованы, либо недостаточно быстры. Эта тема многим интересна и время от времени всплывает на LWN. Из недавнего — вот эта июльская статья, которая собственно и сподвигла меня написать свою серию. Ещё чаще разговор заходит про механизм read-copy-update (RCU — руководство 2007 года всё ещё актуально), подсчёт ссылок, и способы сделать более понятные, высокоуровные API ко всему этому разнообразию. Ну а сейчас вас ждёт погружение в идеи, стоящие за неблокирующими алгоритмами, а также их использованием в ядре.
Знание низкоуровневой модели памяти в целом считается продвинутым уровнем понимания, которого страшатся даже опытные программисты-ядерщики. Словами нашего редактора (из его июльской статьи): «Понять модель памяти можно лишь правильно повёрнутым мозгом». Говорят, что моделью памяти Linux (и файлом memory-barriers.txt в частности) можно пугать детей. Порой для достижения эффекта достаточно всего лишь рявкнуть “acquire” или “release”.
И в то же время, механизмы вроде RCU и seqlocks так широко применяются в ядре, что практически каждый разработчик рано или поздно сталкивается с фундаментально неблокирующими интерфейсами. Поэтому многим будет полезно иметь хотя бы базовое представление о неблокирующей синхронизации. В этой серии статей я расскажу, что же на самом деле означает acquire и release-семантика, а также приведу пять сравнительно простых паттернов, которые покрывают большинство вариантов использования неблокирующих примитивов.
Семинары лаборатории языковых инструментов JetBrains Research
Сотрудники лаборатории исследуют:
- формализацию и верификацию семантики языков программирования в контексте слабых моделей памяти;
- логическое и реляционное программирование;
- теорию формальных языков и ее применения;
- метапрограммирование, специализацию и частичные вычисления;
- формальную верификацию и применение SMT-решателей.
На еженедельных семинарах выступают как наши сотрудники и студенты, так и приглашенные докладчики. С недавних пор семинары записываются, их можно посмотреть на Youtube. В этом посте мы поделимся ссылками и описаниями прошедших встреч, а также расскажем, как не пропустить анонсы будущих мероприятий.
Создай мозг с нуля: математические модели в нейробиологии
На протяжении тысячелетий человечество волновали вопросы функционирования нервной системы: предпринимались попытки понять, как происходит восприятие и обучение, что такое эмоции и сознание, какую роль они играют, как они появились в ходе эволюции, каково влияние различных внешних и внутренних факторов на развитие и становление нервной системы человека и других животных. Все эти захватывающие темы так или иначе затронуты в нейробиологии и смежных с ней дисциплинах.
Нейробиология — это наука, изучающая структуру, функционирование и развитие нервной системы человека и животных. Brain science — более узкая дисциплина, посвященная головному мозгу человека. Нейробиология охватывает разные уровни организации — от молекулярного до системного, плавно переходя в молекулярную биологию и биохимию с одной стороны и в нейропсихологию (наука на стыке с психологией) с другой.Некоторые люди, как и в незапамятные времена, продолжают утверждать, что понять работу мозга невозможно, или же отрицают, что мозг порождает наш разум и сознание и т. д. Несмотря на все это, …
Распределенное обучение и вычисления в сети. Доклад Яндекса
— Меня зовут Дмитрий Афанасьев, я сетевой архитектор Яндекса. И я сегодня расскажу про достаточно экзотические — по крайней мере пока — технологии. Но думаю, что они будут становиться менее экзотическими, и шансы с ними встретиться возрастают.
JWT аутентификация в CLI приложении на Linux
Когда речь идёт о хранении sensitive data в браузере, достаточно воспользоваться одним из двух доступных вариантов: cookies или localStorage. Тут каждый выбирает по вкусу. Однако я посветил эту статью Secret Service – службе, которая работает через D-Bus и предназначена для хранения «секретов» в Linux.
У службы есть API, которым пользуется GNOME Keyring для хранения аутентификационных данных пользовательских приложений.
Чистая архитектура с Go
«Мой» сервис — это proxy между определенными модулями большого проекта. На первый взгляд изучить его можно за один вечер и браться за дела поважнее. Но приступив к работе я понял, что ошибся. Сервис был написан полгода назад за пару недель с задачей протестировать MVP. Всё это время он отказывался работать: терял события и данные, или переписывал их. Проект перекидывали из команды в команду, потому что никто не хотел им заниматься, даже его создатели. Теперь стало ясно почему под него искали отдельного программиста.
«Мой» сервис — это пример плохой архитектуры и изначально неправильного проектирования. Все мы понимаем, что так делать нельзя. Но почему нельзя, к каким последствиям это приводит и как попытаться все исправить, я и расскажу.
Flutter + чистая архитектура: разбираем на примере
На определенном этапе изучения новой технологии начинаешь задаваться вопросом, как правильно организовать архитектуру проекта. Мне в свое время повезло - попались опытные наставники, которые дали мудрые советы. Однако я считаю, что знания не должны лежать мертвым грузом, поэтому пишу эту статью в помощь начинающим (и не только) flutter-разработчикам.
Чистая архитектура - это концепция построения архитектуры систем, предложенная Робертом Мартином - в миру "дядюшка Боб". Концепция предполагает построение приложения в виде набора независимых слоёв, что облегчает тестирование, уменьшает связность и делает приложение более простым для понимания.
Flutter - стремительно набирающий популярность фреймворк для разработки кроссплатформенных приложений. В списке поддерживаемых платформ - iOS, Android, web, в бете находится поддержка десктопа.
Под катом - рассказ о том, как построить flutter-приложение с использованием идей чистой архитектуры.
Нам нужно поговорить про Linux IIO
IIO (промышленный ввод / вывод) — это подсистема ядра Linux для аналого-цифровых преобразователей (АЦП), цифро-аналоговых преобразователей (ЦАП) и различных типов датчиков. Может использоваться на высокоскоростных промышленных устройствах. Она, также, включает встроенный API для других драйверов.
Трюки с SQL от DBA. Небанальные советы для разработчиков БД
Когда я начинал свою карьеру разработчика, моей первой работой стала DBA (администратор базы данных, АБД). В те годы, ещё до AWS RDS, Azure, Google Cloud и других облачных сервисов, существовало два типа АБД:
- АБД инфраструктуры отвечали за настройку базы данных, конфигурирование хранилища и заботу о резервных копиях и репликации. После настройки БД инфраструктурный администратор время от времени «настраивал экземпляры», например, уточнял размеры кэшей.
- АБД приложения получал от АБД инфраструктуры чистую базу и отвечал за её архитектуру: создание таблиц, индексов, ограничений и настройку SQL. АБД приложения также реализовывал ETL-процессы и миграцию данных. Если команды использовали хранимые процедуры, то АБД приложения поддерживал и их.
АБД приложений обычно были частью команд разработки. Они обладали глубокими познаниями по конкретной теме, поэтому обычно работали только над одним-двумя проектами. Инфраструктурные администраторы баз данных обычно входили в ИТ-команду и могли одновременно работать над несколькими проектами.
Встраивание Haskell: компиляторы и компиляция компиляторов
Эта статья является переводом поста Chris Hodapp Embedding Haskell: Compilers, and compiling compilers В своём посте автор рассматривает различные подходы к использованию Haskell для написания кода для встраиваемых систем. Предоставим слово автору.
В моем последнем посте упоминалось, что некоторые вещи требуют лучшего объяснения, потому что я всегда пытаюсь объяснить и уточнить.
Этот блог посвящен использованию Haskell со встраиваемыми системами. Что это хотя бы значит? Мы видим пару широких категорий (которые отражают слайды на последней странице, а также наша страница ссылок):
- Полная компиляция: компиляция кода на Haskell для встраиваемого назначения.
- Ограниченная компиляция: компиляция некоторого ограниченного подмножества кода на Haskell для встраиваемого назначения.
- Хостинг EDSL и компилятора: хостинг в Haskell, EDSL и компилятор для встраиваемого назначения.
Мастер-курсы по Istio и Kafka, книга про Python и немного про навыки веб-разработки
Полезные ссылки на живые мероприятия, видео, митапы, техтолки и книги – ниже в нашем еженедельном посте.
Разработка критически важных алгоритмов: Реализация
- Проектирование
- Реализация
- Интеграция
Когда я только начинал свой путь в профессиональной разработке, я не понимал зачем нужен open source. Я не понимал и сайд-проектов, если уж на то пошло. В конце концов, зачем отдавать ценную работу бесплатно? За прошедшие годы, поработав над проектами с открытым исходным кодом, а также благодаря работе с Apex.AI, ROS 2 и Autoware.Auto, я пришел к некоторому пониманию open-source.
Инженеры любят творить. Люди хотят признания и благодарности.
Когда вы соединяете эти факторы вместе, вы получаете путь к open source. Если я что-то строю для удовлетворения своих творческих потребностей, то почему бы не позволить всем остальным оценивать мою работу и находить в ней практическую пользу и ценность? В конце концов, я делаю это не ради денег.
Что касается сайд-проектов, то их очарование я понял только после того, как начал профессионально развиваться и более тщательно подходить к различным аспектам своей работы. Чтобы создать надежный продукт, за который люди будут платить, часто приходится искусственно ограничивать рабочие процессы. Анализ дизайна. Код-ревью. Стандарты написания кода, стайлгайды, метрики тестового покрытия, и так далее и так далее. Не поймите меня неправильно – все это хорошие вещи, которые, скорее всего, необходимы для разработки качественного продукта. Просто иногда разработчик хочет немного свободы. Разработчик может хотеть создавать то, что он хочет, как он хочет и когда он хочет. Никаких встреч, ревью или бизнес-кейсов.
Наши уникальные бесплатные мастер-курсы Kubernetes, CLI tool для разработчиков Odo, Java в контейнерах и много книг
А еще они проводят live streaming, и все вместе это называется DevNation.
Как синхронизация времени стала безопасной
Как сделать так, чтобы время per se не врало, если у вас есть миллион больших и малых устройств, взаимодействующих по TCP/IP? Ведь на каждом из них есть часы, а время должно быть верным на всех. Эту проблему без ntp невозможно обойти.
Представим себе на одну минуту, что в одном сегменте промышленной ИТ инфраструктуры возникли трудности с синхронизацией сервисов по времени. Немедленно начинает сбоить кластерный стек Enterprise ПО, распадаются домены, мастера и Standby узлы безуспешно стремятся восстановить status quo.
Возможна также ситуация, когда злоумышленник намеренно старается сбить время через MiTM, или DDOS атаку. В такой ситуации может произойти все что угодно:
- истечет срок действия паролей учетных записей пользователей;
- истечет срок действия X.509 сертификатов;
- двухфакторная аутентификация TOTP перестанет работать;
- бэкапы «устареют» и система удалит их;
- сломается DNSSec.
Понятно, что каждый первый департамент ИТ заинтересован в надежной работе служб синхронизации времени, и хорошо бы они были надежны и безопасны в промышленной эксплуатации.
Аллокаторы памяти
Information
- Rating
- Does not participate
- Location
- Ирландия
- Registered
- Activity