Обновить
1376.88

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

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

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

Рекурсивный фильтр скользящего среднего

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


Да, дорогой читатель, такое тоже бывает, и может быть вкусно и полезно!

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

Автоматизация печати в корпоративных системах или как подружить свой «велосипед» с принтером

Время на прочтение6 мин
Охват и читатели10K
Привет, хабражитель! Хочу поделиться с тобой наболевшим опытом, надеюсь, будет полезен. Сегодня расскажу о том, как разрабатывали систему печати документов в корпоративной системе.

С чего все начиналось


А началось все с разработки ERP-платформы в одной торговой компании примерно 2 года назад. Был выбран Linux, стек С++/Qt, PostgreSql и фронт под web. На C++/Qt был реализован сервер приложений и там же, через прослойку JS интерпретатора писалась бизнес логика. Почему так — это отдельная история, здесь рассмотрим, как разрабатывалась система печати.
Читать дальше →

Как мы делали безопасную телефонию для Wheely, мирового сервиса личных водителей

Время на прочтение3 мин
Охват и читатели7.9K
Добрый день, уважаемые читатели. Мы тут недавно осознали простую вещь – наш блог так долго рассказывал о том, как реализовать ту или иную фичу, что мы совершенно упустили из виду зачем. Другими словами, когда есть конкретная задача, найти под нее инструмент бывает несложно. Тем более, что со своей стороны мы сделали максимум для того, чтобы это было просто и недорого.

Однако нам часто встречается ситуация, когда клиент просто не знает, что именно он может сделать. Не «как», а именно «зачем». В результате ты где-нибудь на конференции, мельком, рассказываешь простой случай, а из рядов доносится: «O, а это мысль!»

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

Разработка WebRTC видеочата между iOS, Android и браузером

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

В предыдущей статье мы описывали принципы разработки видеочата между браузером и Android — устройством. Теперь же попробуем усложнить задачу и заимплементить трехсторонний видеочат на следующих платформах: Google Chrome на десктопе, Android приложение на планшете, и iOS приложение для Apple iPhone.
Читать дальше →

Композиция или наследование: как выбрать?

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

В начале...


… не было ни композиции, ни наследования, только код.


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


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


Мрачные были времена.


Но вот лучик ООП воссиял над миром… Правда, несколько десятилетий1 никто этого не замечал. Покуда не появился графический интерфейс2, которому, как выяснилось, очень-очень не хватало ООП. Когда нажимаешь на кнопку в окне, что может быть проще, чем отправить кнопке (или ее представителю) сообщение "Нажатие"3 и получить результат?


И вот тут ООП взлетел. Было написано множество4 книг, расплодились бесчисленные5 статьи. Так что сегодня-то каждый может в объектно-ориентированное программирование, так?


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

Обработка ошибок в C

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


Введение


Ошибки, увы, неизбежны, поэтому их обработка занимает очень важное место в программировании. И если алгоритмические ошибки можно выявить и исправить во время написания и тестирования программы, то ошибок времени выполнения избежать нельзя в принципе. Сегодня мы рассмотрим функции стандартной библиотеки (C Standard Library) и POSIX, используемые в обработке ошибок.
Читать дальше →

Процессоры Intel станут троичными

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


В течение долгих десятилетий рост производительности процессоров, понукаемый законом Мура, достигался за счет улучшения технологического процесса. Однако конец этой гонки уже не за горами: мы вплотную подошли к пределу, диктуемому законами физики. Каким образом мы будем «взбадривать» процессоры дальше? Стратеги Intel два года назад пришли к заключению, что одним из решений данной проблемы может быть переход от двоичной к троичной системе счисления. Ряд шагов в этом направлении уже сделан, и теперь можно с определенностью заявить: уже следующее поколение процессоров Intel Core, а за ними и Intel Xeon, будет троичным.
Читать дальше →

Несколько аргументов против Dependency Injection и Inversion of Control

Время на прочтение9 мин
Охват и читатели22K
Помнится, во времена .NET 1.1 и 2.0 можно было часто увидеть пророчества майкрософтовских евангелистов, мол, скоро любая домохозяйка сможет создавать сайты и писать программы. Большинство программистов посмеялось, но, как выяснилось, кто-то отнёсся к этому серьёзно. Во всяком случае, это объясняет, почему шаблоны проектирования IoC/DI получили второе дыхание в 2000-х, причём даже внутри самой MS (желаю Вам никогда в жизни не столкнуться с SCSF).


С точки зрения теории разработки ПО лично мне гораздо чаще приходилось читать или слышать хвалебные статьи и отзывы об IoC/DI, но, как всегда, критика тоже есть. Можно ознакомиться, например, здесь (англ.), здесь (англ.), тут (Хабр), ещё (англ.). В частности в вину ставится нарушение принципа инкапсуляции в ООП.
Читать дальше →

Релиз CLion 2017.1: C++14, C++17, код на дизассемблере в отладчике, Catch, MSVC и многое другое

Время на прочтение6 мин
Охват и читатели18K
Привет, Хабр! Спешим поделиться радостной новостью – мы выпустили первый в этом году релиз нашей кросс-платформенной IDE для C и C++, CLion 2017.1!

image


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

  • Поддержка C++14 (всё кроме constexpr)
  • Начальная поддержка C++17 (мы начали с самой востребованной возможности – nested namespaces)
  • Возможность конвертировать тип переменной в auto
  • Во время отладки программы, при отсутствии файлов с исходным кодом можно переходить на код на дизассемблере (disassembly view)
  • Поддержка фреймворка для юнит-тестирования Catch
  • Значительное ускорение отклика редактора при печати кода (Zero Latency Typing)
  • И, наконец, экспериментальная поддержка компилятора Microsoft Visual C++!

И это еще не все! Читайте подробности ниже.

Кстати, попробовать все новые возможности можно на небольшом демо-проекте, который мы специально подготовили для этих целей.
Читать дальше →

Самоидентификация программиста

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


uses

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

Мифы о Spark, или Может ли пользоваться Spark обычный Java-разработчик

Время на прочтение31 мин
Охват и читатели46K
Продолжаем расшифровывать и местами облагораживать хардкорные доклады спикеров JPoint 2016. Сегодня доклад поменьше, всего час с копейками, соответственно, концентрация пользы и отжига на одну минуту зашкаливает.

Итак, Евгений EvgenyBorisov Борисов о Spark, мифах и немного о том, дествительно ли тексты Pink Floyd адекватнее, чем у Кэти Пэрри.





Это будет необычный доклад о Spark.

Обычно много рассказывают про Spark, какой он крутой, показывают код на Scala. Но у меня немного другая цель. Во-первых, я поговорю о том, что такое Spark и зачем он нужен. Но основная цель — показать, что вы, как Java-девелоперы, можете прекрасно им пользоваться. В этом докладе мы развеем несколько мифов о Spark.

Как мы портировали программно-аппаратное решение из SPARC Solaris в AMD64 Linux и виртуализировали все это

Время на прочтение5 мин
Охват и читатели7.9K
Эта статья для тех, кто все еще сильно любит древние Unix, но уже понимает, что срочно нужно мигрировать на Linux...
image

Началась эта история с того, что наш уважаемый заказчик решил уменьшить риски эксплуатации оборудования 10-ти летнего возраста, сэкономить на лицензиях и перейти с Unix на Linux, а заодно и виртуализировать это программно-аппаратное решение. Не то, чтобы заказчик не любил Solaris и Unix, просто сама возможность виртуализировать серверное приложение, жестко привязанное к специфической на сегодняшний день архитектуре SPARC и «седеющей» операционной системе Solaris, выглядела для заказчика очень привлекательной. Отдельным пунктом стоял вопрос замены специализированной карты с PCI интерфейсом на доступное «виртуализированное» решение. Мы решили взяться за такую интересную задачу.
Читать дальше →

Приглашаем на Go meetup 14 апреля

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


В пятницу 14 апреля мы приглашаем вас в наш московский офис на Go meetup. Мы послушаем доклады экспертов и пообщаемся на профессиональные темы. В программе встречи пять докладов.

— Go Template Toolkit
Сергей Свистунов, Lazada

В докладе речь пойдет о трансляторе шаблонов в Go-код (https://github.com/go-qbit/template). Получаемый шаблонизатор работает в более чем 10 раз быстрее html/template из стандартной библиотеки. Будет сделан краткий обзор синтаксиса шаблонов, сходства и различия с Perl Template Toolkit. Также спикер расскажет, как Go YACC помог описать грамматику для построения AST, и как из AST получается Go-код. Продемонстрирует, как go tool pprof помог найти неочевидные места, требующие оптимизации.
Читать дальше →

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

Подводные камни для самодельной распределенности «из коробки» в С++ном акторном фреймворке

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

В комментариях к последней статье про шишки, которые нам довелось набить за 15 лет использования акторов в C++, вновь всплыла тема отсутствия в SObjectizer-5 распределенности «из коробки». Мы уже отвечали на эти вопросы множество раз, но очевидно, что этого недостаточно.


В SObjectizer-5 нет распределенности потому, что в SObjectizer-4 поддержка распределенности была, но по мере того, как расширялся спектр решаемых на SObjectizer задач и росли нагрузки на SObjectizer-приложения, нам пришлось выучить несколько уроков:


  • Под каждый тип задачи желательно иметь свой специализированный протокол. Потому что обмен большим количеством мелких сообщений, потеря части которых не страшна, сильно отличается от обмена большими бинарными файлами;
  • Реализация back-pressure для асинхронных агентов — это сама по себе непростая штука. А когда сюда еще и примешивается общение по сети, ситуация становится гораздо хуже;
  • Сегодня какие-то куски распределенного приложения обязательно будут написаны на других языках программирования, а не на C++. Поэтому требуется интероперабильность и наш собственный протокол, заточенный под C++ и SObjectizer, мешает разработке распределенных приложений.

Далее в статье попробуем раскрыть тему подробнее.

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

Технокубок: итоги финального раунда и разбор задач

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

image


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


A. Андрюша и носки
B. Место встречи изменить нельзя
C. Андрюша и разноцветные шарики
D. Иннокентий и футбольная лига
E. Подземная лаборатория
F. Аксель и Марстон в Битландии
G. Андрюша и живые барьеры
H. Автобусы и интранет


Что такое Технокубок? Это олимпиада по программированию для учащихся 8-11 классов, организуемая Mail.Ru Group совместно с МГТУ им. Баумана и МФТИ. Она состоит из трех этапов: ознакомительного (онлайн), отборочного (онлайн) и заключительного (очно).

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

Кто-то пытается взломать пользователей GitHub, которые работают под Windows

Время на прочтение5 мин
Охват и читатели15K
С января 2017 года владельцы репозиториев GitHub и другие разработчики свободного программного обеспечения начали получать письма с вредоносным вложением. В письме некто говорит, что якобы заинтересовался репозиторием и может предложить работу над другим программным проектом: условия и расценки во вложении.

В одном из образцов вредоносной рассылки в клуджах зафиксированы российские почтовые серверы:

Return-Path: <ludv.jani-2015@vrg.se>
Received: from unknown (HELO mail.bsme-mos.ru) (95.163.65.54)
by ariel.informaction.com with SMTP; 27 Jan 2017 11:25:22 -0000
Received: from unknown (HELO o) (zayavka@bsme-mos.ru@94.23.58.202)
by mail.bsme-mos.ru with SMTP; 27 Jan 2017 14:25:17 +0300
Subject: question
Date: Fri, 27 Jan 2017 12:25:26 +0100
X-MSMail-Priority: Normal
X-Mailer: Microsoft Windows Live Mail 16.4.3528.331
X-MimeOLE: Produced By Microsoft MimeOLE V16.4.3528.331
This is a multi-part message in MIME format.
Читать дальше →

Конференция разработчиков DUMP: последние новости и финальная программа

Время на прочтение13 мин
Охват и читатели2.1K
Привет! Осталось две недели до конференции DUMP, которая пройдет 14 апреля в Екатеринбурге. Программа готова. Вас ждёт 61 доклад в секциях FrontTalks, Serverside, Mobile, Design, DevOps, Тестирование, Management, Science.

Этот пост будет полезен для тех, кто до сих пор думает, ехать ему на конференцию или нет.


В этом году выступят докладчики из Dropbox, JetBrains, Mozilla, Mail.Ru, Яндекса, Rambler&Co
Читать дальше →

Релевантное соединение — атрибуты конкретные и универсальные

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

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



Здесь же более подробно остановимся на самой операции выборки (не будет ни одной формулы!). В общем случае в данной операции могут участвовать (соединяться) не только вектор с таблицей, но и две таблицы. Операцию над таблицами, в которой используется проверка на принадлежность элемента множеству, назовем релевантным соединением. Далее рассмотрим, в чем его особенности.

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

Мобильная платформа. Архитектура гибридных приложений на ReactNative

Время на прочтение12 мин
Охват и читатели13K
Наверное, вы уже не раз слышали о мобильной разработке на ReactNative в Единой Фронтальной Системе (ЕФС) Сбербанка. Мы уже писали для чего мы используем саму технологию ReactNative в своих разработках, а также рассказывали как не бояться это делать.



Сегодня мы взглянем с высоты птичьего полета на построение архитектуры мобильных приложений с использованием ReactNative, Objective-C, Typhoon, VIP, SOA, TypeScript, React и Redux.
Читать дальше →

Институт программной инженерии открыл доступ к стандарту оформления кода C++

Время на прочтение2 мин
Охват и читатели6.4K
Институт программной инженерии (SEI) — федеральный исследовательский центр США, занимающийся формализацией лучших практик разработки программного обеспечения — выпустил в 2016 году стандарт программирования на C++. В нем описаны правила оформления кода на языке C++, которые должны помочь разработчикам создавать безопасные, надежные и защищенные системы без уязвимостей.

Сам стандарт являлся дополнением к стандарту оформления кода C, выпущенным немного ранее. И на прошлой неделе Институт программной инженерии открыл бесплатный доступ к ценным экспертным знаниям по разработке защищенных систем на C и C++.

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

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