Pull to refresh
38
0
Danov @Danov

Dev UWP/Mobile, Data Scientist, EduTech

Send message

Что такое логическое программирование и зачем оно нам нужно

Reading time17 min
Views46K

У того, кто в детстве не писал на Прологе — нет сердца, а у того, кто пишет на нём сегодня — нет мозгов. (оригинал)

Если вас всегда терзали мучительные сомнения — что за фигня это Логическое Программирование (ЛП) и вообще зачем оно нужно? То это статья для вас.


Можно по-разному разделить языки программирования на группы (часто их называют парадигмами программирования), например, вот так:


  • структурное: программа разбивается на блоки — подпрограммы (изолированные друг от друга), а основными элементами управления являются последовательность команд, ветвление и цикл.
  • объектно-ориентированное: задача моделируется в виде объектов, которые отправляют друг другу сообщения. Объекты обладают свойствами и методами. Абстракция. Инкапсуляция. Полиморфизм. Ну в общем, все в курсе.
  • функциональное: базовым элементом является функция и сама задача моделируется в виде функции, а, точнее, чаще всего в виде их композиции, если f(.) и g(.) — это функции, то f(g(.)) — это их композиция.
  • логическое: вот тут, как правило, начинается феерия — если про первые три написаны сотни статей, книг, обзоров, презентаций и учебников, то здесь мы в лучшем случае видим что-то про Prolog и разработки времён Pink Floyd и Procol Harum (ну хоть с музыкой им тогда повезло) и на этом история заканчивается.

Вот эту оплошность я и собираюсь сегодня исправить.


Важнейший тезис этой статьи:


Логическое программирование != Prolog.

И вообще последний вам скорее всего не нужен. А вот первое вполне может быть.


Структура статьи:


  • Что такое Пролог и почему он вам скорее всего не нужен
  • Зачем оно надо, или краткое введение в Answer Set Programming
  • Решаем задачи на ASP
  • Комбинаторная оптимизация
  • Вероятностное ЛП: ProbLog
  • ЛП на классической логике FO(.) и IDP
  • Sketched Answer Set Programming
  • Экспериментальный анализ
  • Тестирование и корректность программ
  • Заключение
Читать дальше →
Total votes 30: ↑29 and ↓1+28
Comments22

Эксперименты с тиграми и другие способы преподавать программирование студентам, которым скучно

Reading time16 min
Views14K
image

Привет, Хабр! Я Маша, старший инженер-разработчик iOS в КРОК и аспирант на кафедре Прикладной математики и Искусственного интеллекта в московском вузе. А еще я уже четыре года преподаю. Два года назад мы с коллегами с кафедры, преимущественно аспирантами, основали кружок спортивного программирования, который вырос в большое IT-коммьюнити в стенах универа, где мы делимся разного рода знаниями со студентами.

В рамках этой затеи мы решили улучшить процессы обучения дисциплинам Computer Science (до чего дотянулись). К нему у всех уже было много вопросов.

Первый ужас я испытала на первом же занятии со студентами. Одна группа не могла привести ДНФ в КНФ, другая — не смогла даже общим усилием воли вспомнить таблицу истинности для конъюнкции и дизъюнкции. Третья — не понимала как программно устроены списки (это у нас проходят годом ранее). А потом я вспомнила себя — про мой курс преподы говорили то же самое. И про курсы до нас, и про курсы после меня. И школьную учительницу Ольгу Николаевну вспомнила: «В этом году класс еще слабее, чем в прошлом — если так пойдет и дальше, вернемся к жизни на деревьях!». В школе мне казалось, что это такой изощренный педагогический прием, который должен подхлестнуть нас учиться усерднее чтобы «доказать, что мы лучше чем кажется». Ошибалась.

Решили мы с коллегами порефлексировать — а почему так происходит? Результаты, наши грабли и опасные эксперименты с тигром под катом!
Читать дальше →
Total votes 62: ↑56 and ↓6+65
Comments126

ALBERT — облегченный BERT для самообучения языковым представлениям

Reading time4 min
Views4.8K

С тех пор как в 2018 году был представлен BERT, исследования в области обработки естественного языка охвачены новой парадигмой: использованием больших объемов существующего текста для предварительного обучения параметров модели на основе самообучения (self-supervision), не требующего разметки данных. Таким образом, вместо того, чтобы обучать модель для обработки естественного языка (NLP) с нуля, можно взять предобученную модель, уже имеющую некоторое знание о языке. Однако, для успешного применения этого нового подхода в NLP исследователю необходимо иметь некоторое представление о том, что же именно способствует языковому обучению модели: высота нейронной сети (т.е. количество слоев), ее ширина (размер представлений скрытых слоев), критерий обученности для самообучения или что-то совсем иное?

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

Про новинки в .NET 5 и C# 9.0

Reading time21 min
Views86K
Добрый день.

В нашей компании .NET используется с самого его рождения. У нас в продуктиве работают решения, написанные на всех версиях фреймворка: от самой первой и до последней на сегодняшний день .NET Core 3.1.

История .NET, за которой мы пристально следим всё это время, творится на глазах: версия .NET 5, которую планируют релизить в ноябре, только что вышла в виде Release Candidate 2. Нас давно предупреждали, что пятая версия будет эпохальной: с нею закончится .NET-шизофрения, когда существовали две ветки фреймворка: классический и Core. Теперь они сольются в экстазе, и будет один сплошной .NET.

Вышедший RC2 уже можно начинать полноценно использовать – никаких новых изменений перед релизом больше не ожидается, будет только фикс найденных багов. Более того: на RC2 уже работает официальный сайт, посвящённый .NET.

А мы представляем вам обзор новшеств в .NET 5 и C# 9. Вся информация с примерами кода взята из официального блога разработчиков платформы .NET (а также ещё из массы источников) и проверена лично.
Читать дальше →
Total votes 131: ↑131 and ↓0+131
Comments152

В пещерах этого не было

Reading time7 min
Views92K
Есть такой момент в человеческой психологии, что многие вещи, услышанные в течение жизни, начинают восприниматься как нечто само собой разумеющееся — как гравитация или магнетизм, хотя их просто кто-то когда-то придумал. От этой напасти в мозгу есть лайфхак – «В пещерах такого не было», об этом я сегодня выскажусь в плане IT.

image

Глава 0. Base-1


Когда я учился в школе (199x) все сидели на Pascal – язык чёткий, мудрый, на нём даже Dos Navigator был написан c VESA скринсейверами, а позже The Bat!, и олимпиадники ACM ICPC в 2000-е годы были в основном паскалистами. Мне из-за любви к играм и графике в то время зашёл C/C++, и сразу же в глаза бросилось фундаментальное различие – от ноля или единицы индексируются массивы, это до сих пор приходится уточнять на том же hackerrank.com.
Читать дальше →
Total votes 125: ↑119 and ↓6+157
Comments227

Пишем изящный парсер на Питоне

Reading time11 min
Views204K
В C++17 (нет-нет, Питон скоро будет, вы правильно зашли!) появляется новый синтаксис для оператора if, позволяющий объявлять переменные прямо в заголовке блока. Это довольно удобно, поскольку конструкции вида

Foo foo = make_foo();
if(foo.is_nice()) {
    // do work with foo
}
// never use foo again
// foo gets deleted

довольно общеупотребительны. Код выше лёгким движением руки программиста (и тяжёлым движением руки комитета по стандартизации) превращается в:

if(Foo foo = make_foo(); foo.is_nice()) {
    // do work with foo
}  // foo gets deleted
// never use foo again (well, you can't anyway)

Стало чуть-чуть лучше, хотя всё ещё не выглядит идеально. В Python нет и такого, но если вы ненавидите if в Python-коде так же сильно, как я, и хотите научиться быстро писать простые парсеры, то добро пожаловать под кат. В этой статье мы попытаемся написать короткий и изящный парсер для JSON на Python 2 (без каких-либо дополнительных модулей, конечно же).
Читать дальше →
Total votes 57: ↑54 and ↓3+51
Comments39

Как выбрать красивые цвета для вашей инфографики

Reading time10 min
Views40K


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

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

Статья не поможет найти хорошие градиенты или оттенки. Она предназначена для подбора красивых, чётких цветов для различных категорий информации (например, континентов, отраслей промышленности, видов птиц) в линейных, круговых, полосковых диаграммах и так далее.
Total votes 34: ↑33 and ↓1+44
Comments6

Генератор музыки. Web Audio API. Опыт новичка

Reading time12 min
Views12K

Контекст и предыстория


Мне 62. Года три назад решил попробовать написать достаточно сложную систему, до этого было только 20 строк на бэйсике в 1981 г., когда нам на 5 курсе радио-факультета (НГТУ, ранее НЭТИ) воткнули 3 месяца информатики. Профессионалом принято считать того, кто предметом владеет и на нем зарабатывает, так что по факту я — новичок.

С другой стороны, я почти всю жизнь занимался относящимися к музыке алгоритмами, застал процесс развития и железа, и ПО и по мере сил участвовал в нем. В 1978 разработал и собрал синтезатор а-ля Mini-Moog (полагаю, 1-й за Уралом), разработал и выпускал 1-ю в СССР звуковую карту с синтезатором для Агат7(9) — советский аналог Apple II, проектировал модуль FM-синтеза для одного из заводов, сотрудничал с Cakewalk (США), PGMusic (Канада), PowerFX (Швеция) — чаще по схеме: «идеи и воплощение от нас, бюджет — от них», участвовал в международных музыкальных выставках MusikMesse (Германия), NAMM (США) и пр.
Читать дальше →
Total votes 25: ↑25 and ↓0+25
Comments7

Взять и влиться в музыкальное программирование — языки, которые помогут это сделать

Reading time4 min
Views11K
В одном из предыдущих материалов мы писали о ЯП Sporth, разработанном для проведения музыкальных live-сессий. Сегодня расскажем еще об одном инструменте для «музыкального программирования» — языке Csound. И поговорим о его аналогах — SuperCollider и Pure Data.

Total votes 14: ↑12 and ↓2+16
Comments1

Запись видео с автоматическим выкидыванием пауз свободным ПО с велосипедостроением

Reading time10 min
Views8.6K
Велосипед на таймлайне

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


Под катом рассказал о своем непростом пути к записи и редактированию видео с помощью свободного ПО, скриптинга на Ruby и подручных средств.

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

Как я учу детей Питону

Reading time7 min
Views36K
image

Моя основная работа связана с данными и программированием на R, но в этой статье я хочу рассказать про своё увлечение, которое даже приносит некий доход. Мне всегда было интересно рассказывать и объяснять что-то друзьям, одноклассникам и однокурсникам. Ещё мне всегда просто было находить общий язык с детьми, не знаю, почему. Вообще, я считаю, что воспитание и обучение детей это одно из важнейших занятий из всех, да и жена у меня педагог. В общем, примерно год назад я дал объявление в местной группе на фейсбуке, набрал группу и стал преподавать скратч и питон раз в неделю. Сейчас у меня пять групп, свой класс в доме и индивидуальные занятия. Как я дошёл до жизни такой и как именно я учу детей, я раскажу в этой статье.
Читать дальше →
Total votes 66: ↑65 and ↓1+84
Comments91

Проект Natasha. Набор качественных открытых инструментов для обработки естественного русского языка (NLP)

Reading time34 min
Views97K
Два года назад я писал на Хабр статью про Yargy-парсер и библиотеку Natasha, рассказывал про решение задачи NER для русского языка, построенное на правилах. Проект хорошо приняли. Yargy-парсер заменил яндексовый Томита-парсер в крупных проектах внутри Сбера, Интерфакса и РИА Новостей. Библиотека Natasha сейчас встроена в образовательные программы ВШЭ, МФТИ и МГУ.

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

Для новостных статей качество на всех задачах сравнимо или превосходит существующие решения. Например с задачей NER Natasha справляется на 1 процентный пункт хуже, чем Deeppavlov BERT NER (F1 PER 0.97, LOC 0.91, ORG 0.85), модель весит в 75 раз меньше (27МБ), работает на CPU в 2 раза быстрее (25 статей/сек), чем BERT NER на GPU.

В проекте 9 репозиториев, библиотека Natasha объединяет их под одним интерфейсом. В статье поговорим про новые инструменты, сравним их с существующими решениями: Deeppavlov, SpaCy, UDPipe.

Total votes 44: ↑42 and ↓2+53
Comments25

Полный перевод книги про построение сообществ: «Социальная архитектура»

Reading time2 min
Views16K
«Это эссенция тридцатилетнего опыты разработки программного обеспечения.»
Приветствую, Хабр.

Хочу представить лучшую (единственную) книгу по построению сообществ, написанную тру ИТишником.

Для себя я нашел применимые инструменты для анализа сообщества/организованности «на лету»(я и еще более 100 человек провели «аудит» Хабра), а так же подсказки, какой "генотип" закладывать при разработке нового продукта/брэнда/движухи. Читайте, сохраняйте, расшаривайте и пишите свой отзыв.

Об авторе


«К сожалению, мы не выбираем себе смерть, но мы можем встретить ее достойно, чтобы нас запомнили, как мужчин.»
— к/ф «Гладиатор»



Питер Хинченс (Pieter Hintjens) — бельгийский разработчик, писатель. Занимал должность CEO и chief software designer в iMatix, компании, производящей free software, такие как библиотека ZeroMQ (библиотека берет на себя часть забот о буферизации данных, обслуживанию очередей, установлению и восстановлению соединений и прочие), OpenAMQ, Libero, GSL code generator, и веб-сервиса Xitami.

  • Автор более 30 протоколов и распределенных систем.
  • Основатель проекта Edgenet по созданию полностью безопасной, анонимной глобальной P2P-сети.
  • Президент ассоциации Foundation for a Free Information Infrastructure (FFII), которая воевала с патентным правом.
  • CEO сервиса по созданию собственных вики-проектов Wikidot.
  • Он был активистом open standards и основателем Digital Standards Organization.
  • Питер в 2007-м был назван одним из 50 самых влиятельных людей в области «Интеллектуальная собственность».

Читать и добавить в избранное
Total votes 11: ↑11 and ↓0+11
Comments6

9 ключевых алгоритмов машинного обучения простым языком

Reading time15 min
Views87K
Привет, Хабр! Представляю вашему вниманию перевод статьи «9 Key Machine Learning Algorithms Explained in Plain English» автора Nick McCullum.

Машинное обучение (МО) уже меняет мир. Google использует МО предлагая и показывая ответы на поисковые запросы пользователей. Netflix использует его, чтобы рекомендовать вам фильмы на вечер. А Facebook использует его, чтобы предложить вам новых друзей, которых вы можете знать.

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

Эта статья познакомит вас с фундаментальными концепциями в области машинного обучения. А конкретнее, мы обсудим основные концепции 9ти самых важных алгоритмов МО на сегодняшний день.
Читать дальше →
Total votes 16: ↑12 and ↓4+12
Comments5

Просто о списках, словарях и множествах или ТОП 5 структур данных

Reading time9 min
Views117K


Привет. Ей! Не говорите “Да блин! Я знаю, чем отличается список от вектора, мне не нужна эта статья”. Прошу, загляните под кат и освежите свои знания. Я надеюсь, однако, что вы сможете почерпнуть из этой статьи намного больше и, некоторые, возможно, наконец-то разберутся, почему существует так много типов данных для коллекций объектов.
Читать дальше →
Total votes 124: ↑74 and ↓50+24
Comments20

Слушаю и повинуюсь: рыночная экономика как фактор выгорания педагога

Reading time29 min
Views24K


Сегодня мы коснемся еще одной болезненной для отечественного образования темы: рыночной парадигмы в вопросах воспитания и обучения детей.

Начиная с девяностых годов прошлого века, мы применяем к деятельности учителя понятие «образовательная услуга». Современный педагог выступает как представитель сферы услуг, и эта социальная роль накладывает определенный отпечаток и на поведение самого педагога, и на отношение к нему других участников образовательного процесса. Ниже мы попытаемся разобраться, как это происходит (и чем педагог отличается от парикмахера).
Читать дальше →
Total votes 63: ↑61 and ↓2+84
Comments251

Почему функциональное программирование такое сложное

Reading time15 min
Views91K

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


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


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

Читать дальше →
Total votes 142: ↑123 and ↓19+138
Comments715

ObjectRepository — .NET in-memory repository pattern для ваших домашних проектов

Reading time6 min
Views7.4K

Зачем хранить все данные в памяти?


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


Но иногда в голову приходит мысль что модель данных не подходит для SQL: например, при построении поиска или социального графа нужен поиск по сложным связям между объектами. 


Хуже всего ситуация, когда работаете в команде, и коллега не умеет строить быстрые запросы. Сколько времени вы потратили на решение проблем N+1 и на построение дополнительных индексов, чтобы SELECT на главной странице отрабатывал за разумное время?


Другим популярным подходом является NoSQL. Несколько лет назад был большой хайп вокруг этой темы — для любого удобного случая разворачивали MongoDB и радовались ответам в виде json-документов (кстати, сколько костылей пришлось вставить из-за циклических ссылок в документах?).


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

Читать дальше →
Total votes 21: ↑20 and ↓1+19
Comments16

Как создать мультиагентную транспортную модель

Reading time5 min
Views11K
Привет, Хабр!

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


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

Как я стримил семинар и при этом со мной даже разговаривали студенты

Reading time6 min
Views15K

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

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

Information

Rating
Does not participate
Location
Россия
Registered
Activity