Обновить
1392.05

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

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

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

Извините, мы запускаем новый продукт

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

Иногда приходит время остановиться и взглянуть по-новому на то, что ты делаешь. Что если прежние решения когда-то казались верными, а теперь создают проблемы? Наберитесь храбрости и начните с чистого листа. А я тем временем расскажу, как 8 лет назад компания QIWI сделала коммерчески правильный выбор при запуске продукта, но в 2015 пришлось многое переделать.



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

Табы или пробелы? Анализ 400 тысяч репозиториев GitHub, миллиарда файлов, 14 ТБ кода

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


Для пытливых разработчиков до сих пор остается актуальным вопрос использования табуляции и пробелов для форматирования кода. Могут ли они быть взаимозаменяемы: например, 2 пробела на табуляцию или 4? Но единого стандарта нет, поэтому иногда между разработчиками возникает непонимание. Кроме того, различные IDE и их компиляторы обрабатывают табуляцию также по-своему.

Решением вопроса обычно становится соглашение о правилах форматирования в рамках проекта или языка программирования в целом.

Команда разработчиков из Google исследовала проекты в репозитории Github. Они проанализировали код, написанный на 14 языках программирования. Целью исследования было выявить соотношение табуляций и пробелов — то есть, наиболее популярный способ форматирования текста для каждого из языков.

Сортировка огромного файла с массивом при известном словаре данных

Время на прочтение2 мин
Охват и читатели16K
Привет Хабр! Недавно пришло интересное задание:
Имеется многогигабайтный файл, содержащий массив целых чисел от 1 до 10000. Элементы расположены хаотично с повторениями. Необходимо его отсортировать. Принять во внимание ограниченность в ресурсах.

Самым ленивым способом отсортировать можно используя «внешнюю сортировку со слиянием», но это весьма тяжёлый и долгий метод. В этой публикации я расскажу, какой метод пришёл мне в голову — я не смог не поделиться им.
Читать дальше →

iKnow Review Analyzer (iKRA)

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

Intro


С помощью технологии InterSystems iKnow мы сделали систему оценки отзывов под названием iKnow Reviews Analyzer (iKRA). О прототипе проекта можно прочитать здесь. iKRA анализирует текстовые отзывы пользователей, автоматически выставляя численную оценку предмету исследования. Эти функции могут быть очень кстати, например, на сайтах онлайн-продаж, тематических форумах или сборниках медиа контента. Другими словами, везде, где идет обсуждение сообществом каких-либо вещей.
Читать дальше →

Логика сознания. Часть 2. Дендритные волны

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

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

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

Let the Holy War begin: Java vs С++

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


В преддверии Joker 2016 мы накатали пост про Java Performance, который вызвал бурю эмоций у читателей. Дабы вбросить топлива в вентилятор и попытаться все-таки прийти к какому-то единому решению, мы решили привлечь экспертов из разных «лагерей»:

  • Дмитрий Нестерук. Эксперт по .NET, С++ и инструментам разработки, автор курсов по технологиям и математике, квант.
  • Андрей Паньгин. Ведущий программист компании Одноклассники, специализирующийся на высоконагруженных бэкендах. Знает JVM как свои пять пальцев, поскольку ранее на протяжении нескольких лет разрабатывал виртуальную машину HotSpot в Sun Microsystems и Oracle. Любит ассемблер и низкоуровневое системное программирование.
  • Владимир Ситников. Десять лет работает над производительностью и масштабируемостью NetCracker OSS — ПО, используемого операторами связи для автоматизации процессов управления сетью и сетевым оборудованием. Увлекается вопросами производительности Java и Oracle Database.
  • Олег Краснов. CTO компании SEMrush и адепт ANSI C.

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

Лекции Техносферы. Программирование на Perl (осень 2015)

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


Сегодня мы предлагаем вам ознакомиться с одним из курсов Техносферы, который посвящён программированию на Perl. Этот курс открытый — на него может записаться любой студент или аспирант МГУ имени М.В. Ломоносова. Также в Техносфере есть еще несколько открытых курсов, 1 сентября на них открывается запись. В этом семестре вас ждет приятное дополнение: они будут подкреплены методическим материалом, который будет содержать достаточно информации, чтобы по нему можно было вспомнить материал любой лекции и при необходимости более глубоко её изучить.

Цель курса «Программирование на Perl» — узнать возможности языка (его сильные и слабые стороны), научиться писать программные продукты на этом языке, научится быстро ориентироваться в чужом коде. Под катом находятся все лекции в формате видео и краткое описание к ним.
Читать дальше →

Когда «О» большое подводит

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


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


Память, медленная-медленная память


В начале 1980-х время, необходимое для получения данных из ОЗУ и время, необходимое для произведения вычислений с этими данными, были примерно одинаковым. Можно было использовать алгоритм, который случайно двигался по динамической памяти, собирая и обрабатывая данные. С тех пор процессоры стали производить вычисления в разы быстрее, от 100 до 1000 раз, чем получать данные из ОЗУ. Это значит, что пока процессор ждет данных из памяти, он простаивает сотни циклов, ничего не делая. Конечно, это было бы совсем глупо, поэтому современные процессоры содержат несколько уровней встроенного кэша. Каждый раз когда вы запрашиваете один фрагмент данных из памяти, дополнительные прилегающие фрагменты памяти будут записаны в кэш процессора. В итоге, при последовательном проходе по памяти можно получать к ней доступ почти настолько же быстро, насколько процессор может обрабатывать информацию, потому что куски памяти будут постоянно записываться в кэш L1. Если же двигаться по случайным адресам памяти, то зачастую кэш использовать не получится, и производительность может сильно пострадать. Если хотите узнать больше, то доклад Майка Актона на CppCon — это отличная отправная точка (и отлично проведенное время).

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

Интервью с первым спикером Moscow Python

Время на прочтение3 мин
Охват и читатели5.7K
Организаторы Moscow Python Conf доверили мне поиск докладчиков и составление программы конференции. А программу я обычно составляю так, чтобы самому было интересно сходить. Подготовка конференции – дело интересное. Когда еще представится возможность взять интервью у других интеровертов-разработчиков? Наш первый герой Иван Цыганов из Positive Technologies. На конференции он выступит с провокационным докладом, в котором расскажет, почему 100% покрытии тестами – это плохо. Интригу, конечно, никто раскрывать не будет. Но ведь опытного разработчика, который выступает на конференциях, много о чем можно спросить, не так ли? Например, зачем он вообще выступает на конференциях и почему ему спокойно на диване не лежится.
Получить ответ на этот и другие провокационные вопросы

«Моя жизнь сквозь призму технологий...» — Стивен Вольфрам

Время на прочтение25 мин
Охват и читатели8.6K
Сегодня День рождения создателя систем Mathematica и Wolfram|Alpha, а также языка Wolfram Language — Стивена Вольфрама. Мы надеемся, что перевод его речи в Музее компьютерной истории (Маунтин-Вью, Калифорния) будет интересным и полезным для вас. Вы узнаете множество неожиданных, удивительных фактов из долгой профессиональной и личной биографии Стивена.


Перевод поста Стивен Вольфрам (Stephen Wolfram) "My Life in Technology—As Told at the Computer History Museum".
Выражаю огромную благодарность Полине Сологуб за помощь в переводе и подготовке публикации




Обычно меня интересует будущее. Однако и история, на мой взгляд, интересна и познавательна, и я много изучаю и ее тоже. Чаще всего это истории жизни других людей. Но Музей компьютерной истории просил меня рассказать сегодня о моей собственной жизни и о технологиях, которые я создал. Именно это я и собираюсь сделать.

Сейчас для меня наступило уникальное время — множество вещей, над которыми я работал на протяжении более чем 30 лет, начали приносить плоды.

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

Сегодня я хочу поговорить о том, как я шел к созданию системы Mathematica и Wolfram|Alpha.

Мне придется много говорить о моей собственной истории: в основном о том, как я провел большую часть своей жизни, занимаясь наукой и технологией. Когда я оглядываюсь назад, многое из того, что случилось, кажется неизбежным и неумолимым. А кое-чего я и не ожидал.
Читать дальше...

OpenCV и обработка изображений

Время на прочтение7 мин
Охват и читатели41K
Доброе утро, дамы и господа. Внимательные читатели заметили, что на российском рынке вновь проклюнулись переводные книги на тему компьютерного зрения. Нас также не могла не заинтересовать следующая книга:


Поскольку технологии компьютерного зрения в значительной степени завязаны и на Python, и на C++, мы подобрали статью с разбором задачи и кодом на обоих языках. Кроме того, искренне надеемся, что девушка под катом вам понравится.
Читать дальше →

Почему компании так упорно хотят иметь Fullstack разработчиков?

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

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

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

Как мы делали мониторинг запросов mongodb

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

Использование монги в production — достаточно спорная тема.
С одной стороны все просто и удобно: положили данные, настроили репликацию, понимаем как шардировать базу при росте объема данных. С другой стороны существует достаточно много страшилок, Aphyr в своем последнем jepsen тесте сделал не очень позитивные выводы.


По факту оказывается, что есть достаточно много проектов, где mongo является основным хранилищем данных, и нас часто спрашивали про поддержку mongodb в окметр. Мы долго тянули с этой задачей, потому что сделать "осмысленный" мониторинг на порядок сложнее, чем просто собрать какие-то метрики и настроить какие-нибудь алерты. Нужно сначала разобраться в особенностях поведения софта, чтобы понять, какие именно показатели отслеживать.


Как раз про сложности и проблемы я и хочу рассказать на примере реализации мониторинга запросов к mongodb.

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

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

О фреймворках

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

Роман Ивлиев


В сегодняшней статье поговорим о неотъемлемой составляющей большого числа современных веб-проектов — о фреймворках.


Роман Ивлиев на примере множества проектов портала banki.ru, а также заказной разработки в студии крупных проектов Онтико. Рассмотрим следующие темы и поищем ответы на вопросы:


  1. Что такое фреймворк, и зачем их пишут.
  2. Почему для некоторых языков их десятки, а для некоторых — единицы.
  3. В чём плюсы и минусы применения.
  4. Наиболее распространённые мифы.
  5. Использовать или нет — примеры из жизни.
  6. Как выбрать из множества доступных вариантов, на что стоит обратить внимание.
Читать дальше →

Всему своё время

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

Банки.ру — проект с 10-летней историей. В разные времена banki.ru испытывали разные нагрузки. Портал перестраивался под новые требования как логически, так и технологически, что-то мы меняли в авральном режиме, что-то — эволюционным путём. Сейчас средняя посещаемость примерно 2 миллиона просмотра страниц, т.е. проект уже не маленький, но ещё и не совсем большой.


Эта статья — расшифровка доклада Романа Ивлиева (CIO Banki.ru) на обучающей конференции HighLoad++ Junior, которая прошла пару месяцев назад в Москве в рамках фестиваля “Российские интернет-технологии”.
В этой статье мы хотим поговорить об оптимизации, её своевременности, и о субоптимизации, о том, что далеко не всегда лучшие практики разработки нагруженных систем идут на пользу бизнесу.


Посмотрим примеры и поищем ответы на вопросы:


  1. Настолько ли ваш highload — highload?
  2. Считать ли хабрэффект поводом для внедрения высоких технологий?
  3. «Костыль» или «высокотехнологичное решение» — что выбрать? Плюсы и минусы.
  4. Как выбрать момент для начала новой эры? Есть ли критерии, когда имеет смысл начинать оптимизировать ваше приложение и внедрять крутые штуки «по-взрослому».
  5. Как можно использовать «список Бунина» для достижения очень неплохих показателей, и все ли пункты реально нужны вам?
  6. Как работать с техническим долгом, чтобы он не зарастал мхом?

В заключение Роман Ивлиев расскажет про несколько примеров из жизни banki.ru в части замены технологических решений в области высоких нагрузок, и что из этого вышло.


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

О Legacy-коде без максимализма: что делать

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


Представьте, что вам дали задачу поправить часть кода. В голове возникнет много мыслей. Кто его написал? Когда? А может он — legacy? Где документация? Давайте попробуем разобраться с «наследием» основательно и со всех сторон. Поможет нам в этом вопросе Андрей Солнцев @asolntsev (http://asolntsev.github.io/), разработчик из таллинской компании Codeborne. Начнём.

— Андрей, вы знакомы с трудами Michael Feathers, например, «Working Effectively with Legacy Code»? В книге акцентируется внимание на важности тестирования и выделяется одно из ключевых отличий legacy от не legacy-кода — это наличие тестов. Вы согласны с этим мнением?

Абсолютно согласен! Скажу больше: юнит-тесты — необходимое, но недостаточное условие. И с юнит-тестами можно навалить так, что сам Геракл не разгребёт.
Что для настоящего джедая мастхав, так это:
  1. TDD — то есть тесты ДО кода.
  2. Чистый код (и чистые тесты).


Я очень люблю книгу Robert C. Martin «Clean Code» («Чистый код»). Это для меня настольная библия. Категорически всем советую. Кстати, его блог тоже великолепен.

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

Синий. Нет! Жёлтый! — или — Дают ли новые языки программирования прирост скорости разработки

Время на прочтение8 мин
Охват и читатели21K
Какой язык использовали для написания самых первых программ для самых первых компьютеров с хранимой программой?

Двоичный машинный язык, конечно.

Почему?

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

Насколько легче писать программы на ассемблере, чем на двоичном машинном языке?

Намного легче.

Можно цифру? Во сколько раз легче?

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

Экономия объёмов работы огромная.
Читать дальше →

Как эмодзи могут улучшить ваш код (на самом деле)

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

Примечание переводчика: в перерывах между холиварами про JS предлагаю обсудить несерьёзную, пятничную тему:


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


Мы, программисты, читаем много текста — будь то код, логи, комментарии к коммитам, документация или что-либо еще. Эмодзи бросаются в глаза, и их гораздо легче найти на простыне текста, чем обычную строку. Быстрее поиск — выше продуктивность. Хотя даже если на вашей продуктивности это никак не скажется, пользоваться эмодзи — весело! Вот некоторые вещи, которые я опробовал на практике:

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

Пример использования policy-based design в С++ вместо копипасты и создания ООП-шых иерархий

Время на прочтение9 мин
Охват и читатели17K
Язык C++ очень часто обвиняют в неоправданной сложности. Конечно же, язык C++ сложен. И с каждым новым стандартом становится все сложнее. Парадокс, однако, состоит в том, что постоянно усложняясь, C++ последовательно и поступательно упрощает жизнь разработчикам. В том числе и обычным программистам, которые пишут код попроще, чем разработчики Boost-а или Folly. Чтобы не быть голословным, попробую показать это на небольшом примере «из недавнего»: как в результате адаптации к различным условиям тривиальный класс превратился в легкий хардкор с использованием policy-based design.
Много примеров кода

Scala vs Kotlin (перевод)

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

Наша команда, аналогично с автором статьи, уже почти как год перешла со Scala на Kotlin в качестве основного языка. Мое мнение во многом совпадает с автором, поэтому предлагаю вам перевод его интересной статьи.


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


Ниже я хочу привести примеры, которые мне нравятся в Scala и Kotlin, а также их сравнение в том, как они реализованы в обоих языках.

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

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