Обновить
1376.39

Программирование *

Искусство создания компьютерных программ

Сначала показывать
Порог рейтинга
Уровень сложности

Онлайн-квест от MBLTdev: призы и ответы

Время на прочтение2 мин
Охват и читатели6K
Привет, Хабр! В среду мы запилили квест, и судя по потоку комментариев и сообщений, квест вам понравился и заставил поломать голову. Мы рады! В этом посте подведём итоги: раскроем правильные ответы и вручим призы.

Статистика




Призы


Сегодня призы отправились победителям, проверяйте почту.

  • Годовые подписки на продукты JetBrains получили Инсаф, Михаил и Даниил.
  • Билеты на конференцию мобильных разработчиков MBLTdev 2017 — Алексей Лагута, Михаил и Артём.
  • Футболки MBLTdev 2017 — Устинов Валерий, Руслан Ахтямов и Павел Камаев.
  • Скидка 20% на билеты на MBLTdev 2017 — наш подарок всем кто прошёл квест до конца.

Теперь расскажем, как надо было решать задания. Под катом — ответы.
Читать дальше →

Встречаем PostgreSQL 10. Перевод Release Notes

Время на прочтение25 мин
Охват и читатели20K

Вышел релиз PostgreSQL 10. Мы долго ждали появления новых фич. Мои коллеги ещё весной тестировали новую версию и отправляли баг-репорты: раз, два. А я был очень рад обновлению и подготовил перевод Release Notes на русский язык. Давайте обсуждать.


Читать дальше →

Поиск файлов по тэгам в XMP / IPTC и операции с найденным

Время на прочтение5 мин
Охват и читатели4.1K
Сначала может показаться, что пост о «ещё одном медиаплеере», и вот уже паникующий хабровчанин бежит с выпученными глазами прочь, кидаясь минусами в людей, животных и программистов. Ну, в общем и целом, да, пост примерно об этом. Но. Есть, на мой взгляд, одно весомое Но, о котором ниже.

Поиск файлов по тэгам в XMP / IPTC и операции с найденным
Читать дальше →

Железнодорожно-ориентированное программирование. Обработка ошибок в функциональном стиле

Время на прочтение11 мин
Охват и читатели24K

Как пользователь я хочу изменить ФИО и email в системе.

Для реализации этой простой пользовательской истории мы должны получить запрос, провести валидацию, обновить существующую запись в БД, отправить подтверждение на email пользователю и вернуть ответ браузеру. Код будет выглядеть примерно одинаково на C#:

string ExecuteUseCase() 
{ 
  var request = receiveRequest();
  validateRequest(request);
  canonicalizeEmail(request);
  db.updateDbFromRequest(request);
  smtpServer.sendEmail(request.Email);
  return "Success";
}

и F#:

let executeUseCase = 
  receiveRequest
  >> validateRequest
  >> canonicalizeEmail
  >> updateDbFromRequest
  >> sendEmail
  >> returnMessage
Читать дальше →

Игрушечный фронтенд для LLVM, написанный на Rust: Руководство для начинающих

Время на прочтение12 мин
Охват и читатели14K
Примечание переводчика
Приведённый в статье код скомпилирован с достаточно старыми версиями крейтов peg и peg_syntax_ext. Для текущих версий в исходники нужно внести минимальные изменения. Я вставил изменённые участки в спойлеры по тексту статьи. Для сборки кода установите компилятор nightly Rust.
Полный исходник с моими правками можно скачать здесь: https://github.com/arktur04/rust-llvm-toy-frontend


В настоящее время я работаю над компилятором, который написан на Rust, и порождает LLVM IR. LLVM API выглядит немного пугающе для новичков, и по нему не так много руководств (и все они на C++, поэтому не вполне очевидно, как сделать то же самое на Rust). Я бы хотел, чтобы кто-то протянул мне руку помощи, когда я начинал всё это, и эта статья является тем, что я хотел бы показать самому себе в то время.



В Rust наилучшая возможность взаимодействия с LLVM — через крейт llvm-sys. Один добрый человек разместил документацию к нему здесь. Конечно, вам следует также изучить руководство по LLVM, так как оно поможет вам понять, как LLVM “думает”. Этот пост, в основном, является переводом на Rust подмножества из этого руководства.

Полный исходный код для этого руководства находится здесь.
Читать дальше →

Принцип единственной ответственности: фундамент декомпозиции

Время на прочтение4 мин
Охват и читатели16K


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


Определение


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


Пример


Lazy<T> — обертка для объекта, чье создание откладывается до первого обращения к нему.


Антипример


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


Еще антипример


Локатор сервисов — позволяет получить доступ к любому сервису приложения. Это описание без исчерпывающего списка сервисов заведомо неполное.


Назначение


Упрощение создания, анализа и модификации программных систем.

Читать дальше →

Вышел PostgreSQL 10

Время на прочтение2 мин
Охват и читатели52K

На самом деле прошло уже два дня, но статью на Хабр никто до сих пор не написал, так что придется мне устранять это упущение, что и делаю с удовольствием.


Итак, что же нового в этой версии PostgreSQL?


Во-первых, изменилось само версионирование. До "десятки" мы наблюдали множество минорных версий 9.x, которые выходили примерно раз в год и при этом вносили серьезные, далеко не минорные изменения. Поэтому с версии 10 было принято решение сделать нумерацию 10, 11, 12 и т.д. Кстати, MySQL, похоже пошел по тому же пути, прыгнул с 5.7 на 8.0


Ладно, это всё мелочи, перейдем к существу вопроса

Читать дальше →

Часть 2: MVVM: полное понимание (+WPF)

Время на прочтение22 мин
Охват и читатели95K
image

В этой статье в качестве примера у нас будет программа чуть посложнее, а именно — торговый автомат, реализация которого часто встречается в качестве тестового задания до собеседования. Будут рассмотрены взаимодействие нескольких View с одним VM и наоборот, будет показан подход «View first» и будет показан не итоговый код, с рассказом какая часть для чего нужна (ссылка для скачивания кстати Vending Machine (программный код), а будет продемонстрирован весь процесс создания и, самое главное, последовательный ход мысли.

Но перед этим я постараюсь еще раз ответить на вопрос, который обычно не задают люди, имеющие опыт отладки неструктурированных проектов, а именно: «Так зачем все-таки нужен паттерн MVVM?»

Если формально и коротко, то паттерн MVVM используется в первую очередь для разделения ответственности, для повышения читабельности, управляемости, поддерживаемости и тестируемости кода. Программный продукт состоит из модели (доменной модели и бизнес-логики) и инфраструктурного кода в соотношении, допустим, 20% на 80%. Инфраструктурный код должен быть простым, понятным, чуть ли не автоматным — как Scaffolding. А вот модель…
Читать дальше →

Multimodal Emotion Recognition Challenge by Neurodata Lab

Время на прочтение2 мин
Охват и читатели1.9K
Всем привет! Наша лаборатория Neurodata Lab запускает в октябре-ноябре 2017 года собственный ML-конкурс по распознаванию эмоций.

Конкурсная площадка

image
Читать дальше →

Классический 2д квест или как прошли наши два года разработки. Часть финальная

Время на прочтение7 мин
Охват и читатели11K
Заключительная часть истории создания игры «Swordbreaker The Game», в этой части — про раскрутку после релиза, и результаты к которым мы пришли.

image
Читать дальше →

Топливо для ИИ: подборка открытых датасетов для машинного обучения

Время на прочтение6 мин
Охват и читатели88K


Связанные проекты сообщества Open Data (проект Linked Open Data Cloud). Многие датасеты на этой диаграмме могут включать в себя данные, защищенные авторским правом, и они не упоминаются в данной статье


Если вы прямо сейчас не делаете свой ИИ, то другие будут делать его вместо вас для себя. Ничто более не мешает вам создать систему на основе машинного обучения. Есть открытая библиотека глубинного обучения TensorFlow, большое количество алгоритмов для обучения в библиотеке Torch, фреймворк для реализации распределенной обработки неструктурированных и слабоструктурированных данных Spark и множество других инструментов, облегчающих работу.


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


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

Читать дальше →

Когда Феникс успел убить Рейлс?

Время на прочтение10 мин
Охват и читатели11K


Случается, что некоторые задачи не удаётся решить на привычном для вас языке программирования. Предположим, перед нами встала задача реализовать обмен сообщениями в реальном времени при больших объёмах трафика. Как сделать это оптимально? По понятным причинам, Руби – не лучший для этого вариант, поэтому придётся начинать поиски альтернатив. Перед вами появится множество путей, и как для рубиста, самым оптимальным выбором будет использование Эликсира.


Эликсир – функциональный язык программирования с синтаксисом Руби, работающий на виртуальной машине Эрланга. Следовательно, для человека из мира Руби знакомство с языком пройдёт очень легко. Хотя для того, чтобы понять его полностью, придётся постараться, не раз перечитывая документацию.


Ответ на вопрос из заголовка и масса интересного об Эликсире сразу же под катом.

Читать дальше →

Пишем свою книгу заново

Время на прочтение4 мин
Охват и читатели8K
Прошло 4 года с публикации «Пишем свою книгу» и вышло второе издание книги про Boost и C++. Настало время выпустить второе издание публикации!

В данной статье я поделюсь информацией о том, что осталось за бортом предыдущей статьи:



  • Можно ли прожить на гонорары от книги
  • Как заинтересовать людей в вашей книге
  • Как сделать примеры нагляднее и интерактивнее
  • Чем отличается выпуск второго издания, от написания первого
  • Пара простых советов для продвижения
  • Перевод книги на другие языки
Читать дальше →

Ближайшие события

Монады для Go-программистов

Время на прочтение12 мин
Охват и читатели24K

Монады используются для компоновки функции (function composition) и избавления от связанного с этим утомительного однообразия. После семи лет программирования на Go необходимость повторять if err != nil превращается в рутину. Каждый раз, когда я пишу эту строку, я благодарю Gopher’ов за читабельный язык с прекрасным инструментарием, но в то же время проклинаю за то, что чувствую себя наказанным Бартом Симпсоном.


Читать дальше →

9 советов по увеличению эффективности парного программирования

Время на прочтение4 мин
Охват и читатели11K
Привет, Хабр! В своей работе мы используем парное программирование и сегодня хотим поделиться с сообществом советами, которые помогают нам повысить эффективность этого метода.

image

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

Чему я научился, написав чат-бота за 2 часа

Время на прочтение6 мин
Охват и читатели13K

Новая парадигма уже на пороге — или нет?




Согласно исследованию компании Flurry, житель США в среднем проводит за смартфоном около пяти часов в день. Эта цифра удивительна сама по себе, но, кроме того, около 65% этого времени идет на разного рода общение — социальные сети, текстовые сообщения, электронную почту и телефонные звонки. То есть, 3 часа 15 минут — каждый день.

А это значит, что все очень и очень изменилось. Хотели сделать мобильное приложение для своего крутого проекта? Ему придется конкурировать с миллионами других приложений за оставшиеся 35% времени, ежедневно уделяемого пользователями смартфону. И не забывайте сопутствующие затраты на поиски стоящей идеи.

Если не делать приложение, то какие остаются варианты? Нужно как-то строить бизнес, верно? Большинство специалистов полагают, что следующий шаг развития технологий — это чат-боты, живущие в приложениях: они расширяют функциональность более крупных платформ, таких как Facebook или Telegram, и пользователю не нужно ставить на телефон еще одно приложение. Получается взаимная выгода — если не считать разработчика, наверное. Мои сомнения насчет новомодной технологии можно было обобщить двумя пунктами:

  • Написание бота бесполезно с точки зрения бизнеса.
  • Написание ботов — невероятно сложная техническая задача.

Чтобы разобраться в этом вопросе, пришлось кое-что изучить. Около месяца я просто читал литературу по теме, беседовал со специалистами, игрался с инструментарием и не решался взяться за дело — но в конце концов написал работающего бота примерно за 2 часа. Все это было для того, чтобы понять, имеют ли мои сомнения под собой почву, — ну и ради удовольствия, конечно.

Переведено в Alconost
Читать дальше →

Самое сложное в программировании это…

Время на прочтение7 мин
Охват и читатели137K


Мне очень понравилась ветка обсуждений на Quora.com: What is the hardest part about learning to program? Все 87 ответов я так и не прочитал, но понравившиеся, выделил в отдельную статью из 10 пунктов. Это вольный пересказ мнений многих разных людей. Если читателям будет интересно, я продолжу.

1. Разница между высокими стандартами и своими низкими умениями


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

Что касается необычайных преимуществ программирования, то вот они:
Читать дальше →

Онлайн-квест от MBLTdev. Призы от JetBrains

Время на прочтение1 мин
Охват и читатели17K
Я хочу сыграть с тобой в одну игру…Твоё первое задание — найти вход в квест. Ищи подсказку в видео.


Самые быстрые получат призы:

— годовые подписки на любой продукт от JetBrains,
— классные футболки,
— билеты и скидки на конференцию мобильных разработчиков MBLTdev 2017.

UPD: Подведём итоги и раздадим призы в понедельник 9-го октября.

Оцифровка и аппроксимация графиков функций при помощи Wolfram Mathematica и Graph Digitizer

Время на прочтение9 мин
Охват и читатели51K
С задачей оцифровки графиков функций и кривых приходится сталкиваться почти каждому инженеру и студенту. Традиционный «ручной» метод очень неудобен и к тому же вносит большие погрешности в данные. Для единоразовой задачи этот метод не так плох, но если графиков больше чем один и на каждом изображена не одна кривая, а семейство кривых?

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

image
Читать дальше →

INTERCOM'17. Конференция о коммуникациях для бизнеса

Время на прочтение2 мин
Охват и читатели2.3K

Раз в год мы устраиваем в Москве конференцию INTERCOM, чтобы пообщаться с коллегами и обсудить, что нового в области автоматики коммуникаций. В этом году мы помогали заменять роботами колл-центры, нанимать сотрудников, связывать докторов с пациентами, вызывать такси, доставлять посылки и много чего еще, о технической стороне вопросов часто рассказывали на Хабре. А на конференции мы это все обсудим с коллегами из Яндекс, Atlassian, Битрикс24 и других компаний. Нейросети, погоня по мессенджерам, гадание на кофейных бизнес-процессах, карманные сети сотовой связи и много всего интересного, о чем я немного расскажу под катом. Еще под катом у меня телефонный робот-ящер, у которого можно нечестным образом получить бесплатный билет и другие фишки для Хабрапользователей. Так что если вопрос «кто виноват в том, что мне позвонил робот» вас интересует — присоединяйтесь!

Кто будет?

Вклад авторов