Обновить
1289.78

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

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

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

Приглашаем на встречу ThinkJava #5 в Харькове

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


Приглашаем всех желающих на встречу ThinkJava #5! Мы будем обсуждать актуальные темы из мира Java, рассматривать с разных точек зрения тенденции индустрии, делиться опытом, задавать вопросы и получать на них ответы — и всё это в традиционно уютной атмосфере встреч ThinkJava.
Читать дальше →

А пусть тесты сами себя и поддерживают

Время на прочтение4 мин
Охват и читатели10K
Сегодня я хочу рассказать о необычном подходе к написанию тестов, к которому я как-то незаметно пришел в ходе работы над несколькими проектами разной величины, и который я почему-то не встречал в чистом виде у других, хотя он, в общем-то, лежит на поверхности. С недавних пор я начал писать кое-какой код на Go, и как только встал вопрос о написании тестов, я опять вспомнил об этом подходе.

Как обычно выглядят тесты?


Очень схематично, каждый юнит-тест обычно состоит из следующих шагов:

  1. Инициализации входных данных;
  2. Выполнения бизнес-логики и получения результата;
  3. Сравнения результата с эталоном.

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

Но ведь все это можно унифицировать!

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

ArcaOS 5.0 — новая версия OS/2 стала доступна широкой публике

Время на прочтение2 мин
Охват и читатели21K
15 мая, спустя многие годы, вышло новое воплощение операционной системы IBM OS/2 от Arca Noae под названием ArcaOS 5.0. Сейчас ОС доступна в двух версиях: для личного и коммерческого использования. Последняя включает в себя приоритетную поддержку и более долгий срок обслуживания.

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

Избегание ада с помощью монад

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

Мы как программисты иногда попадаем в "программистский ад", место где наши обычные абстракции не справляются с решением ряда повторяющихся проблем.


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


Ад проверки на null


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


Такие функции обычно приводят в глубоко вложенному и сложно читаемому коду с чрезмерным количеством синтаксического шума.


var a = getData();
if (a != null) {
  var b = getMoreData(a);
  if (b != null) {
     var c = getMoreData(b);
     if (c != null) {
        var d = getEvenMoreData(a, c)
        if (d != null) {
          print(d);
        }
     }
  }
}
Читать дальше →

Выпуск#2: ITренировка — актуальные вопросы и задачи от ведущих компаний

Время на прочтение2 мин
Охват и читатели5.8K
На этой неделе мы публикуем подборку из задач и вопросов, которые даёт на собеседованиях Uber. Задачи подобрали различного уровня сложности от «Easy» до «Hard», чтобы всем было интересно. Условие дано на английском языке.

Ответы, как и прошлый раз, опубликуем в течение недели. Круто, если вы будете писать в комментариях свои варианты решений )

Вопросы:

1. Какие KPI вы бы использовали, если бы запустили новый сервис Uber в определенной части мира и хотели знать, насколько он успешен?

2. Какой проект, над которым вы работали, провалился? Могли бы вы сделать что-нибудь, чтобы предотвратить его провал?
Читать дальше →

Pygest #9. Релизы, статьи, интересные проекты из мира Python [8 мая 2017 — 22 мая 2017]

Время на прочтение2 мин
Охват и читатели9.8K
image Всем привет! Это уже девятый выпуск дайджеста на Хабрахабр о новостях из мира Python.

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

А теперь к делу!
Перейти к дайджесту

[Санкт-Петербург] Андрей Ершов — CRDT. Бесконфликтная синхронизация данных

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


Уже в этот вторник, 23 мая, после долгого перерыва, в офисе DINO Systems состоится встреча CodeFreeze с Андреем Ершовым, специалистом по распределенным системам. Тема встречи — CRDT. Бесконфликтная синхронизация данных.
Читать дальше →

Зло живёт в функциях сравнения

Время на прочтение27 мин
Охват и читатели32K
Зло в функциях сравнения

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

Как ошибся Белл (если статья привела правильный пример)

Время на прочтение3 мин
Охват и читатели7.5K
Не так давно, на этой неделе, я наткнулся на пост трехлетней давности. Вот он. Если вы будете его внимательно читать, то наткнетесь на то, что возмутит вас до глубины души. Если, конечно, вы понимаете что такое теория вероятностей. Речь об этом отрывке:
«55.55% — вероятность того, что ящики зажгутся одним и тем же цветом, когда мы выбираем две двери наугад, в соответствии с теорией скрытых параметров».

Все мое знакомство с теорвером буквально заорало об ошибке. Но есть нюанс… Я тоже могу ошибаться. Так давайте проверим!
Читать дальше →

Как правильно писать логи (?)

Время на прочтение4 мин
Охват и читатели70K
Тема может и банальная, но когда программа начинает работать как то не так, и вообще вести себя очень странно, часто приходится читать логи. И много логов, особенно если нет возможности отлаживать программу и не получается воспроизвести ошибку. Наверно каждый выработал для себя какие то правила, что, как и когда логировать. Ниже я хочу рассмотреть несколько правил записи сообщений в лог, а также будет небольшое сравнение библиотек логирования для языков php, ruby и go. Сборщики логов и системы доставки не будут рассматриваться сознательно (их обсуждали уже много раз).
Читать дальше →

Все образовательные проекты Mail.Ru Group

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

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

Разбиение слов на элементы таблицы Менделеева

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


(Полный исходный код лежит тут)


Сидя на пятичасовом занятии по химии, я часто скользил взглядом по таблице Менделеева, висящей на стене. Чтобы скоротать время, я начал искать слова, которые мог бы написать, используя лишь обозначения элементов из таблицы. Например: ScAlEs, FeArS, ErAsURe, WAsTe, PoInTlEsSnEsS, MoISTeN, SAlMoN, PuFFInEsS.


Затем я подумал, какое самое длинное слово можно составить (мне удалось подобрать TiNTiNNaBULaTiONS), поэтому я решил написать программу на Python, которая искала бы слова, состоящие из обозначений химических элементов. Она должна была получать слово и возвращать все его возможные варианты преобразования в наборы химических элементов:


  • Вход: Amputations
  • Выход: AmPuTaTiONS, AmPUTaTiONS
Читать дальше →

Нестандартный способ обучения новому языку программирования (перевод статьи Sahil Dua)

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

cover


На данный момент существует более 500 различных языков программирования. Следовательно, вполне нормально взять и начать учить новый язык прямо сейчас. Например, вы знаете C++ и Java, но на работе требуется Python, или наоборот. А может быть, вы просто хотите выучить какой-нибудь модный язык, чтобы повысить свою конкурентоспособность?..

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

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

Gorilla: быстрая, масштабируемая in-memory time-series база данных

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

Это перевод обзора статьи «Gorilla: A fast, scalable, in-memory time series database» Pelkonen et al. VLDB 2015


Чуваки из фейсбука сделали высокопроизводительный движок для мониторинговых данных. Мне понравился обзор этой статьи в блоге "The morning paper" — особенно про алгоритмы сжатия, и вот перевод.


Стиль — авторский.


Количество ошибок на одном из серверов Facebook зашкаливало.
Читать дальше →

Как и зачем создавать NginX-модуль — теория, практика, профит

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


Василий Сошников (Mail.Ru)


Сегодня я вам расскажу о том, как создавать nginx-модули и, что самое главное, попытаюсь ответить, зачем это надо делать. Это надо далеко не всегда, но есть определенный круг задач, который можно решить на стороне nginx.

Построение модульной архитектуры приложения на Forwarding-декораторах (авторский перевод)

Время на прочтение7 мин
Охват и читатели15K
Когда разработчик планирует архитектуру своего будущего веб-приложения, полезно подумать о его расширяемости заранее. Модульная архитектура приложения может обеспечить хорошую степень расширяемости. Существует довольно много способов, как такую архитектуру реализовать, но все они сходны в своих фундаментальных принципах: разделение понятий, самодостаточность, взаимная сочетаемость всех компонентов.

Однако есть один подход, который именно в PHP можно встретить довольно редко. Он включает использование нативного наследования и позволяет патчить код «более лучше»(с). Мы называем этот способ “Forwarding Decorator”. Нам он представляется достаточно эффективным, и, кстати, эффектным тоже, хотя последнее не так важно в продакшене.

Как автор оригинальной англоязычной статьи "Achieving Modular Architecture with Forwarding Decorators", опубликованной на SitePoint, я представляю вам авторскую версию перевода.
Читать дальше →

Создание Web API приложения с использованием .NET Core + MongoDB .NET Driver

Время на прочтение16 мин
Охват и читатели33K
Как вы уже знаете, MongoDB — это одно из наиболее развитых, open-source NoSQL решений, которое представляет собой документо-ориентированную базу данных, является кросс-платформенным, а также обеспечивает высокую производительность, доступность и простоту масштабирования.

В современных open-source веб-приложениях использование NoSQL решений получило свою популярность в связи с их нереляционным поведением. В данной статье шаг за шагом мы реализуем простое ASP.NET Core Web API приложение «записной книжки», которое будет поддерживать операции CRUD применимо к коллекции в MongoDB.
Читать дальше →

Кто вы? Как научились программировать? К чему стремитесь? 20000 ответов

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


Проект freeCodeCamp провёл опрос 2017 New Coder Survey, в котором приняли участие более 20000 человек со всего мира. Эти данные, содержащие ответы респондентов на примерно 50 вопросов, выложены в открытый доступ на GitHub (Open Data Common License).

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

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

Добавление to_string упрощает разработку и дебаг кода на Elixir'е

Время на прочтение2 мин
Охват и читатели2.7K
Проверим на примере: пишем сервис с аэропортами и направлениями.

defmodule Airport do
  defstruct [:id, :name]
end

defmodule Direction do
  defstruct [:origin, :destination]

  def example do
    madrid = %Airport{id: "MAD", name: "Madrid"}
    riga = %Airport{id: "RIX", name: "Riga"}
    %Direction{origin: riga, destination: madrid}
  end
end

Пока что всё в порядке. Отлично, съели печеньку, смотрим, что дальше в джире. Список самых популярных направлений?

Hackerman берётся за дело

Подробнее об одном новшестве в свежей версии SObjectizer

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

Когда мы начали рассказывать про свой OpenSource акторный фреймворк для C++ на Хабре, мы пообещали описывать некоторые особенности деталей реализации SObjectizer-а. Одна из новых фич, которая была реализована в недавно вышедшей версии 5.5.19, отлично подходит для такого рассказа. Кроме того, она интересна еще и тем, что нам пришлось взглянуть на сценарии использования SObjectizer с совершенно другой стороны. Можно даже сказать, что один из наших шаблонов оказался разорванным.


Речь идет о возможности SObjectizer-а выполнять все свои действия на одной единственной рабочей нити. Начиная с версии 5.5.19 использовать Actor- и Publish/Subscribe модели можно даже в однопоточном приложении. Понятное дело, что акторы должны будут работать в режиме кооперативной многозадачности, но в каких-то случаях именно это и требуется.


А где может потребоваться использовать акторов в однопоточном приложении?

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

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