Рубрика «Программирование» - 878

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

WebSCADA системы давно разрабатываются компаниями разработчиками программного обеспечения систем автоматизации. Каждая из этих систем имеет недостатки, связанные со сложностью защиты передаваемой информации и своевременностью получения данных. Эти недостатки всегда сильно ограничивали промышленное внедрение таких систем. WebSCADA приложение вряд ли может конкурировать по безопасности с десктопным, а проблема своевременного получения информации в нем при использовании сети Интернет всегда существовала ввиду отсутствия полнодуплексных соединений (сервер не может отправить информацию клиенту по своей инициативе). Но последние разработки в области ПО автоматизации и веб-технологий позволяют вплотную приблизится к возможностям настольных SCADA систем.

Итак, что-же такого было разработано что мне захотелось создать собственную мини WebSCADA:

1. Корпорация OPC Foundation выпустила новый протокол OPC UA (ОРС Unified Architecture) взамен устаревшего OPC DA.
2. Появился протокол полнодуплесных соединений в Интернет — WebSocket.
Читать полностью »

Реализация алгоритма Саймона на языке HaskellВ 1994 году Даниэль Саймон опубликовал статью «О мощи квантовых вычислений», в которой описал алгоритм, позже названный его именем, имеющий экспоненциальное превосходство над имеющимися алгоритмами в рамках классической вычислительной модели. Задача, которую решает этот алгоритм, является не такой оторванной от реальности, как задача Дойча, хотя и ещё несколько абстрактной. Тем не менее, эта задача и представленный алгоритм вызвали огромный интерес у исследователей, и в дальнейшем алгоритм Саймона стал основой ряда квантовых алгоритмов, в том числе и для алгоритмов Шора факторизации целых чисел и вычисления дискретного логарифма.

Эта статья является продолжением в цикле статей по модели квантовых вычислений, поэтому если начать читать её без ознакомления с предыдущими статьями цикла, что-то может показаться непонятным. Так что читателя, который впервые набрёл на эти мои заметки, я отправляю к первым статьям: 1, 2, 3, 4, 5.

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

Читать полностью »

В соответствии со стандартами C и C++, если выполнение программы приводит к переполнению знаковой целой переменной, или к любому из сотен других «неопределённых действий» (undefined behaviour, UB), то результат выполнения программы может быть любым: она может запостить на Твиттер непристойности, может отформатировать вам диск…
Увы, в действительности «пасхальные яйца», которые бы заставляли программу в случае UB делать что-то из ряда вон выходящее, не встречались со времён GCC 1.17 — та запускала nethack, когда встречала в коде программы неизвестные #pragma. Обычно же результат UB намного скучнее: компилятор просто оптимизирует код для тех случаев, когда UB не происходит, не придавая ни малейшего значения тому, что этот код будет делать в случае UB — ведь стандарт разрешает сделать в этом случае что угодно!
В качестве иллюстрации того, как изобилие UB в стандарте позволяет компилятору выполнять неочевидные оптимизации, Реймонд Чен приводит такой пример кода:

int table[4];
bool exists_in_table(int v)
{
    for (int i = 0; i <= 4; i++) {
        if (table[i] == v) return true;
    }
    return false;
}

В условии цикла мы ошиблись на единицу, поставив <= вместо <. В итоге exists_in_table() либо должна вернуть true на одной из первых четырёх итераций, либо она прочтёт table[4], что является UB, и в этом случае exists_in_table() может сделать всё что угодно — в том числе, вернуть true! В полном соответствии со стандартом, компилятор может соптимизировать код exists_in_table() до

int table[4];
bool exists_in_table(int v)
{
    return true;
}

Такие оптимизации иногда застают программистов врасплох. Читать полностью »

Как известно, в Spring нельзя сделать бины для перечисляемых типов без «костылей» — у этого типа «нет» конструктора.

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'demoEnum0' defined in file [...DemoEnum0.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [ru.itbasis.demo.spring.enums.DemoEnum0]: No default constructor found; nested exception is java.lang.NoSuchMethodException: ru.itbasis.demo.spring.enums.DemoEnum0.<init>()

(коммит)

В данном посте я попробую обойти это ограничение.
Читать полностью »

В издательстве «Питер» прорабатывается идея издать не совсем обычную книгу. Это будет сборник неформальных интервью с известными (и не очень) ИТ-специалистами об их работе, жизни и взглядах. Пожалуй, на русском языке это первая попытка исследовать архетип компьютерщика с разных углов зрения.
Мы не делали ставку исключительно на очень известных людей (хотя несколько героев, безусловно, всемирно известны), а прежде всего, нас интересовала яркость каждой отдельной личности, их взаимное разнообразие.

Логически вся книга планируется из трех разделов-частей:
1) Интервью с программистами, админами, т.д. – прямая речь;
2) Интервью об информационных технологиях и интернете, их влиянии на общество – профессионалы, не являющиеся непосредственно разработчиками, но которые «варятся» в этой кухне, расскажут об их, подчас, странной субкультуре и технологиях;
3) Случаи из жизни программистов и айтишников – несколько ярких и живых примеров, полуюмористических (или поучительных) историй, основанных на реальных фактах и событиях (в стиле Веллера и его «Легенд Невского проспекта»).

На Западе книги подобного плана весьма популярны: достаточно вспомнить «Coders at Work» Сейбела, у нас подобный жанр пока ещё только приживается.
В связи с этим хочется установить предварительную обратную связь с будущими читателями. Любопытна ли будет вам такая книга? Какие вопросы и темы было бы интересно затронуть? Может быть, вы захотите предложить нам ещё каких-то интересных собеседников?

Ниже под катом можно посмотреть список интервьюируемых и краткую аннотацию по теме беседы.
Читать полностью »

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

Привет!

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

Читать полностью »

image

Всем привет! В нашем издательстве только что вышла книжка «Разработка игр под Android» авторства Дж Ди Марцио (J. F. DiMarzio), она же — «Android Game Recipes». Как видно из названия — данное компактное издание представляет собой не только пошаговое руководство для тех, кто только собирается начать писать игры под Android, но и полноценный cookbook, с решениями проблем и ответами на распространенные вопросы. Стоит отметить, что книга написана как помощник в решении конкретных вопросов и сценариев в процессе разработки игры, и подразумевает знакомство читателя с Java.
Читать полностью »

YaLinqo (LINQ to Objects для PHP) — версия 2.0Что-что?

LINQ — это штука, которая позволяет писать запросы, чем-то похожие на SQL, прямо в коде. LINQ to Objects, собственно, позволяет писать запросы к объектам, массивам и всему тому, чем вы оперируете в коде.

Это ещё зачем?

Если у вас есть база, то у вас есть любимый ORM (или любимый голый SQL — кому как по вкусу). Но иногда объекты приходят из веб-сервисов, из файлов, да и вообще тьма тьмущая объектов может требовать нетривиальной обработки: преобразование, фильтрация, сортировка, группировка, агрегация… Применить бы привычный ORM или SQL — но базы-то нет. Тут на помощь приходит LINQ to Objects, в данном случае YaLinqo.

Что умеет?

  • Самый полный порт .NET LINQ на PHP, со многими дополнительными методами. Всего реализовано более 70 методов.
  • Ленивые вычисления, текст исключений и многое другое, как в оригинальном LINQ.
  • Детальная документация PHPDoc к каждому методу. Текст статей адаптирован из MSDN.
  • 100% покрытие юнит-тестами.
  • Коллбэки можно задавать замыканиями, «указателями на функцию» в виде строк и массивов, строковыми «лямбдами» с поддержкой нескольких синтаксисов.
  • Ключам уделяется столько же внимания, сколько значениям: преобразования можно применять и к тем, и к другим; большинство коллбэков принимает на вход и то, и другое; ключи по возможности не теряются при преобразованиях.
  • Минимальное изобретение велосипедов: для итерации используются Iterator, IteratorAggregate и др. (и их можно использовать наравне с Enumerable); исключения по возможности используются родные похапэшные и т.п.
  • Поддерживается Composer, есть пакет на Packagist.
  • Никаких внешних зависимостей.

Что случилось?

Прошёл год, как вышел PHP 5.5 со всякими вкусностями типа генераторов и исправленных итераторов. Так как на моей совести самый полноценный порт LINQ на PHP, то я решил, что настало время его обновить и воспользоваться новыми фичами языка.

Читать полностью »

Всем доброго времени суток!

В этом небольшом посте я продолжу тему, которую поднимал в своих старых двух постах
Часть 1
Часть 2

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

Так что добро пожаловать под хабракат
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js