Pull to refresh

Разработчик опубликовал DOS Subsystem for Linux

Reading time2 min
Views13K


Разработчик из Австралии Чарли Сомервилл (Charlie Somerville) опубликовал на GitHub альтернативу WSL (подсистема Windows для Linux) для тех компьютерных энтузиастов, кто предпочитает среду MS-DOS. Проект DOS Subsystem for Linux (DSL) доступен для всех пользователей под свободной лицензией GNU AGPL.
Читать дальше →
Total votes 27: ↑23 and ↓4+19
Comments23

Насколько Swift удобен для DSL?

Level of difficultyMedium
Reading time5 min
Views2.4K

SE-0195 Dynamic Member Lookup
SE-0216 Dynamic callable
SE-0253 CallAsFunction
Исходя из мотивационной секции proposal, @dynamicCallable и @dynamicMemberLookupбыли добавлены для интеропа с динамическими языками, такими как Python, JavaScript. Но их использование этим не ограничивается.

Читать далее
Total votes 6: ↑4 and ↓2+2
Comments2

Маленький dsl

Reading time4 min
Views2.2K

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

Читать далее
Total votes 7: ↑4 and ↓3+1
Comments5

Магия размерностей и магия Котлина. Часть третья: Смешение магий

Reading time10 min
Views2.5K

Это третья, заключительная статья серии, посвящённой библиотеке по манипулировали физическими величинами системы СИ, а также другими величинами, в Котлин. В ней мы рассмотрим, как фундаментальные математические структуры, которые природа “заложила” в систему СИ, предопределяют дизайн библиотеки и как возможности и ограничения Котлина были использованы при разработке библиотеки KotUniL.

Читать далее
Total votes 11: ↑10 and ↓1+9
Comments14

Как выглядит стажировка в ИТМО

Reading time8 min
Views2.1K

Обсуждая IT-образование, представители компаний часто жалуются на отсутствие у вчерашних студентов навыков работы в команде и понимания, как в принципе функционирует бизнес в этой сфере. Но мы уверены ― многое зависит  как от самого студента, так и среды, в которой он проводит время, учится. На некоторых факультетах ИТМО стажировка в магистратуре обязательна. После нее на рынок труда выходит готовый джун или мидл, зачастую с предложением о работе в той самой компании, где он стажировался. 

В этой статье мы покажем, как стажировка проходит на практике и что она приносит самим IT-компаниям. В фокусе истории двух магистрантов института прикладных компьютерных наук ИТМОФедора Золотухина и Андрея Стояна.

Читать далее
Total votes 10: ↑10 and ↓0+10
Comments0

Время переходить на open-source

Reading time8 min
Views5.3K

В последнее время большое количество крупных мировых поставщиков бизнес-приложений ушли с российского рынка. Например, SAP, Microsoft и Oracle. Однако, много их решений все еще используются в российских компаниях. За время их работы накопилась значительная экспертиза по их доработке и поддержке как внутри компаний, так и в ИТ-интеграторах. Можно продолжать их использовать их еще определенное время, но никто не защищен от внезапных проблем, которые, например, случились с Meraki.

К сожалению, основная проблема в том, что для многих узкоспециализированных решений от крупных мировых поставщиков не существует готовых российских аналогов. И одним из немногих выходов в таком случае является создание нового решения “с нуля”. Однако, разработка с использованием классических языков программирования занимает много времени и человеческих ресурсов, что в условиях значительного оттока ИТ-специалистов в РФ является существенной проблемой. 

Одним из решений этих проблем является использование платформ для быстрой разработки приложений (RAD). В этой статье сделан краткий обзор современной открытой и бесплатной платформы lsFusion, которая очень хорошо подходит для решения вышеописанных задач. При этом платформа может быть запущена с использованием исключительно программ из Единого реестра российского ПО (Astra Linux, Liberica JDK, Postgres Pro). При этом лицензия платформы позволяет создавать собственные решения на ее основе и вносить их в реестр.

Читать далее
Total votes 23: ↑20 and ↓3+17
Comments30

Зачем ЯОП? Зачем Racket?

Reading time15 min
Views14K
Это продолжение статьи «Зачем Racket? Зачем Lisp?», которую я написал примерно через год после того, как открыл для себя Racket. Будучи новичком, я не мог понять дифирамбов, которые со всех сторон сыпались в адрес Lisp. Я не знал, что и думать. Как понимать, что Lisp в конце концов вызовет «глубокое просветление». Окей, как скажешь, бро.

У меня был простой вопрос: какая польза? В прошлой статье я попытался ответить на него и обобщил причины, почему кто-то захочет изучить Lisp или, в частности, Racket.

Я составил список из девяти особенностей языка, наиболее ценных для меня как новичка в Racket. Например, особенность № 5 — «создание новых языков программирования». Этот метод также называется языково-ориентированным программированием, или ЯОП.
Читать дальше →
Total votes 15: ↑14 and ↓1+13
Comments6

Превращая FunC в FunCtional с помощью Haskell: как Serokell победили в Telegram Blockchain Competition

Reading time9 min
Views5.6K

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


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


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

Читать дальше →
Total votes 15: ↑15 and ↓0+15
Comments6

MPS 2019.2: перечисляемые типы данных, настройка сообщений об ошибках, переход на JDK 11 и многое другое

Reading time5 min
Views2.1K
В MPS 2019.2 мы подготовили для вас много новых функций в различных подсистемах и исправили ряд ошибок.

image

Скачать MPS 2019.2

Перечисляемые типы данных


Новый способ объявления перечисляемых типов данных позволяет определить список вариантов в компактной форме, указав для каждого варианта именованное значение. При необходимости вы можете настроить способ отображения некоторых значений или выбрать значение по умолчанию, которое будет использоваться, если свойству не было явно задано какое-либо значение.
Читать дальше →
Total votes 11: ↑9 and ↓2+7
Comments1

Универсальный DSL. Возможно ли это?

Reading time25 min
Views7.8K

Язык предметной области. Не перегружен конструкциями языка общего назначения. При этом позволяет всего несколькими строчками реализовать весьма сложную логику. Все это — DSL.

Однако создание DSL требует от разработчика соответствующей квалификации. Регулярное использование этого подхода превращается в рутину разработки очередного языка. Решением может стать создание универсального инструмента — движка, который будет применим к совершенно разным задачам и прост в модификации. В этой статье мы на C# разработаем простейший с точки зрения реализации, но при этом достаточно мощный языковой движок, при помощи которого можно решить достаточно широкий круг задач.
Читать дальше →
Total votes 13: ↑12 and ↓1+11
Comments48

Еще один DSL для валидаций

Reading time5 min
Views1.7K

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


Идеи, которые преследовались при создании библиотеки:


  • Простота
  • Отсутствие магии
  • Легкость в освоении
  • Возможность кастомизации и минимум ограничений.

Почти все эти пункты завязаны на первом — простоте. Итоговая реализация невероятно маленькая, поэтому я не отниму у вас много времени.


С исходным кодом можно ознакомиться здесь.

Читать дальше →
Total votes 6: ↑6 and ↓0+6
Comments0

Создание DSL для генерации изображений

Reading time7 min
Views1.9K
Привет, Хабр! Считанные дни остаются до запуска нового курса от OTUS «Backend-разработка на Kotlin». В преддверии старта курса мы подготовили для вас перевод еще одного интересного материала.






Часто при решении задач, связанных с компьютерным зрением, недостаток данных становится большой проблемой. Это особенно актуально при работе с нейронными сетями.
Читать дальше →
Total votes 10: ↑7 and ↓3+4
Comments1

Прощай, Grails. Привет, Micronaut. Продолжение

Reading time9 min
Views1.4K

Это вторая статья из цикла о миграции из Grails в Micronaut. Обратите внимание: ваше приложение должно быть создано в Grails 4.x или более поздней версии.

Всего в цикле публикаций о миграции из Grails в Micronaut 10 частей:

Многомодульный проект
Конфигурация
Статическая компиляция
Датасеты
Маршалинг
Классы предметной области
Сервисы
Контроллеры
Приложение Micronaut
Micronaut Data

В этой статье поговорим о датасетах, маршалинге и классах предметной области.

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

Читать далее
Total votes 7: ↑4 and ↓3+1
Comments0

Высокопроизводительные микросервисы на Kotlin с использованием gRPC. Долгий путь к DSL

Reading time10 min
Views9.4K

Очень часто при проектировании высоконагруженных систем, основанных на микросервисной архитектуре, обнаруживается что «узким» местом, ограничивающим производительность системы и возможности ее масштабирования, становится передача сообщений и временные затраты на сериализацию-десериализацию сообщений и дополнительные расходы на установку соединения и начальные согласования. Решением может стать использование протокола gRPC с кодированием сообщений с применением Protocol Buffers (protobuf).

В этой статье рассмотрены подходы к реализации gRPC клиента и сервера для бэкэнда на Kotlin, разобран пример создания проекта для взаимодействия микросервисов через протокол gRPC с использованием возможностей Kotlin DSL и корутин.

Читать далее
Total votes 22: ↑21 and ↓1+20
Comments0

Dashboard as code, или как мы создание дашбордов автоматизировали

Reading time4 min
Views8.6K

Привет! Мы в QIWI довольно давно применяем микросервисную архитектуру, но ее понимание не всегда было одинаковым: оно менялось со временем и эволюционировало. Наши первые микросервисы были достаточно большие по объему, но сейчас мы создаем сервисы гораздо меньшего размера с более узкой и ограниченной зоной ответственности. 

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

Сейчас будет «Но», правда?

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

Читать далее
Total votes 27: ↑26 and ↓1+25
Comments6

Как заставить интерпретатор Ruby выполнить программу, написанную на естественном языке

Reading time14 min
Views2.3K

Многие языки программирования позиционируют себя как почти естественные. Ruby не отстает: язык для людей и всё такое. Однако, первый же гайд по Rails (да, Ruby это всё еще Rails) предложит вам что–то такое:

class UserController < ApplicationController

end

То есть это вот абсолютно естественный английский текст, правда? Кажется, нас обманули: было бы здорово писать код на полностью естественном языке, например таком:

assign variable a value 1 assign variable b value 2 sum a with b

Давайте попробуем запустить эту программу!

Читать далее
Total votes 10: ↑9 and ↓1+8
Comments1

Какие у нас есть клавиши в клавиатуре или как непрограммист язык разрабатывал

Reading time11 min
Views5.2K

Несколько лет назад я решил под свои скромные производственные задачи сделать какую-то такую - не знаю какую - систему, но чтоб была похожа на таблички excel на стероидах.

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

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

Хочу рассказать про некоторые моменты, которые стали понятны в этом процессе — может, вы передумаете делать свой DSL 😅

Читать далее
Total votes 10: ↑9 and ↓1+8
Comments32

Визуальное программирование vs DSL

Level of difficultyEasy
Reading time4 min
Views3.4K

В последнее время набирают популярность low-code и no-code платформы. В них для разработки приложений предлагается использовать визуальное программирование. При таком подходе, разработчики, в качестве которых выступают обычные бизнес-пользователи, вместо написания программного кода создают приложение при помощи мыши в графическом интерфейсе. Также визуальное программирование в некотором виде используется, например, в Конфигураторе 1С.

Однако, возникает вопрос. Какие преимущества дает визуальное программирование по сравнению с Domain Specific Language ? Безусловно это зависит области применения. С одной стороны, в классических языках визуальное программирование практически не используется. В то же время при разработке графического интерфейса такой подход конечно же имеет много преимуществ. Однако, при создании интерфейсов, например, с помощью популярной библиотеки React все-таки больше используется плоский код.

Читать далее
Total votes 22: ↑19 and ↓3+16
Comments27

Создание DSL на Python с библиотекой textx

Level of difficultyEasy
Reading time6 min
Views4.4K

Для описания объектов и процессов в терминах бизнес-логики, конфигурирования и определения структуры и логики в сложных системах популярным подходом является использование предметно-специфических языков (Domain Specific Language - DSL), которые реализуются либо через синтаксические особенности языка программирования (например, с использованием средств метапрограммирования, аннотаций/декораторов, переопределения операторов и создания инфиксных операторов, как например в Kotlin DSL) или с помощью применения специализированных инструментов разработки и компиляторов (например, Jetbrains MPS или парсеров общего назначения, таких как ANTLR или Bison). Но существует также подход реализации DSL, основанный на синтаксическом разборе и одновременной кодогенерации для создания исполняемого кода по описанию и в этой статье мы рассмотрим некоторые примеры использования библиотеки textx для создания DSL на Python.

Читать далее
Total votes 13: ↑13 and ↓0+13
Comments1

lsFusion: Open-Source Rapid Application Development Platform

Reading time7 min
Views801

lsFusion platform is designed for rapid development of business applications. It is distributed under the terms of a Lesser General Public License (LGPLv3). The source code of the platform is available on Github.

lsFusion is best suited for creating complex systems with large numbers of entities and forms, where users need to input and process large amounts of data. However, the platform can also be used to quickly create simple applications instead of spreadsheets when Excel’s functionality is not enough.

At the same time the use of the platform will not give a great advantage when developing applications aimed at interaction with a large number of “external” users or without the need for any complex calculations. You should also take into account that the web interface is a single page application using JavaScript. Therefore, the lsFusion platform is not well-suited for creating websites, for example.

Read more
Total votes 7: ↑7 and ↓0+7
Comments1
1
23 ...