Все потоки
Поиск
Написать публикацию
Обновить
-2.1

Delphi *

Объектно-ориентированный язык программирования

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

Как я SCADA-систему на Linux переводил

Время на прочтение3 мин
Количество просмотров6.6K

В этой статье я бы хотел рассказать о том, что Windows проекты на Delphi возможно перевести на Linux в разумные сроки и с разумными трудозатратами. Что такое SCADA-система, рассказывать не буду, а перейду сразу к делу.

Runtime ядро SCADA работает под Windows в качестве сервиса. Функции стандартные «как у всех»: сбор, обработка, архивирование данных, передача данных в другие SCADA-системы по стандартным протоколам обмена. Визуализация только через Web. Runtime ядро SCADA написано на Delphi. Решено было адаптировать исходный код под  FreePascal/Lazarus, так чтобы код под Windows компилировался и в FreePascal и в Delphi, вторым этапом было допиливание проекта непосредственно на Linux машине и переделка его в демон. В FreePascal привлекала возможность компиляции как для x64, так и для плат Raspberry pi (архитектуры ARMv7, ARM64 (aarch64)).

Конфигуратор работает под Windows в виде графического приложения. Пока решено не переводить его на Linux, в крайнем случае можно запустить под Wine.

Теперь перейдем к Runtime и будем говорить о нём. В нём применяются разнообразные компоненты:

Читать далее

Склонение слов и инициалов в Delphi/Freepascal

Время на прочтение7 мин
Количество просмотров4.6K

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

В прошлый раз я объяснял, что не являюсь программистом по роду профессиональной деятельности, но использую любимое хобби для автоматизации всего, что попадается под руку в работе юриста. Я уверен, что 90% всей юридической волокиты может быть успешно автоматизировано: ведение разнообразных баз и карточек, составление документов по шаблонам, контроль сроков выполнения задач, использование любых вспомогательных сервисов, уже имеющих свои api, для прикручивания автоматизации на конкретном рабочем месте и т.д. К этому нужно стремиться, чтобы по заветам Айзека Азимова высвободить время юриста для реализации основной задачи - размышлять над условиями договора и разводить демагогию в суде.

Читать далее

Особенности портирования сложного модульного ПО написанного на Delphi под ОС Linux

Время на прочтение34 мин
Количество просмотров42K

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

Меня зовут Тимофеев Константин, мне 40 лет и я являюсь ведущим программистом компании 3В Сервис в подразделении, занимающемся системами автоматизации динамических расчётов (САДР).

Данная статья посвящена разбору подводных камней при портировании разрабатываемого нами программного комплекса на операционные системы семейства Linux.

Читать далее

Radix sort — выжать всё

Время на прочтение19 мин
Количество просмотров26K


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

Math Invasion. Мой долгострой

Время на прочтение2 мин
Количество просмотров3.2K
Привет, народ!

Расскажу я вам свою историю о том, как я разрабатывал игру. Идея о том, чтобы скрестить shoot em up с математикой, мне пришла ещё в студенческие годы (Где-то в 2008 году).

Автоматы и разумное поведение. Основные положения концепции (подхода) Н.М. Амосова

Время на прочтение121 мин
Количество просмотров7.3K



В продолжении одной из тем, поднятых в публикации Александра Ершова (Ustas) «Нейросетевой визуальный поиск», предлагаю читателям Хабра погрузиться в мир концепции Н.М. Амосова, ее $i$-моделей, М-сетей и автоматов. Как я надеюсь, именно они — наиболее вероятные кандидаты на роль «серебряной пули», которая позволит энтузиастам «сильного интеллекта» или, в другой терминологии, «искусственного разума» приблизиться к пониманию путей его реализации.


В данной статье автор попытался предельно сжато (конспективно) изложить основные положения концепции Николая Михайловича Амосова. Этот подход достаточно детально изложен в коллективной монографии «Автоматы и разумное поведение. Опыт моделирования», авторами которой был Н.М. Амосов и его соратники: A.M. Касаткин, Л.М. Касаткина и С.А. Талаев. Могу сказать, что это единственная монография, из всех работ по теме «искусственного разума», с которыми я смог познакомиться до сегодняшнего дня, содержащая ясное, обстоятельное, всестороннее, систематическое и в тоже время убедительное, а, в отдельных местах — даже высокохудожественное (говорю это без малейшей доли иронии) — изложение теоретических основ авторской концепции «искусственного разума», а также полученных на ее основе экспериментальных результатов.


Обращаюсь ко всем, у кого есть задор, жгучий интерес к теме «искусственного разума», а также желание поближе познакомиться с подходом Н.М. Амосова — читайте дальше...

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

Масштабирование, поворот и сдвиг растра методом суперсемплинга

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

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

Утилита и исходные коды размещены в архиве здесь.

Среда разработки: Delphi/Object Pascal.

Свободное использование и распространение приветствуются.

Ниже мы рассмотрим теорию и практику.


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

BroKB Emulz — русскоязычная клавиатура для эмуляторов DosBox/Bochs/LBochs на Android-телефоне

Время на прочтение3 мин
Количество просмотров5.7K

При программировании на телефоне программ под DOS или под Windows в эмуляторах существует проблема ввода русского текста - клавиатура, которой вы только что набирали русский текст в обычных андроид программах, не будет вводить никакой текст в эмуляторы. Эмуляторы, как правило, принимают на вход только обычные англоязычные коды и код других клавиш английской раскладки. А уже поставленный в DOS русификатор или настроенная языковая панель Windows на лету превратят эти англоязычные коды в русские символы при вводе (если вы предварительно переключитесь на RU язык).

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

BroKB Emulz - именно такая клавиатура!

Какая такая?

Как я сделал электронную очередь за 0 рублей на чистом энтузиазме, чего это стоило и что из этого вышло

Время на прочтение5 мин
Количество просмотров41K


Добрый день, дорогие мастера своего дела!


Это моя первая статья, постараюсь быть интересным. Много лет назад (о ужас) когда я был супер энергичен, молод и глаза горели я хотел автоматизировать все что движется и не движется. Я чувствовал бескрайние свои возможности и был уверен в себе на 100% и более, передо мной не было не одной не решаемой задачи и все горело в руках. Однако с годами трэкбар от молодости к мудрости все двигался в сторону второго. Так со временем приходил опыт, который сын ошибок трудных и увы, там же гений парадоксов друг.

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

На дворе был 2012 год…
Читать дальше →

JNI и Delphi. Использование Java методов при помощи JNI

Время на прочтение3 мин
Количество просмотров3.4K
Всем доброго времени суток!

Сегодня мы рассмотрим такую тему, как использовать Java методы при помощи JNI.
На самом деле все очень просто. Давайте сразу начнем с примера:

Допустим у нас есть некое Java приложение на котором есть простая кнопка и при нажатии на эту кнопку будет исполняться некий код.
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        File MyFile = new File("D:\\Sample\\text.txt");
        MyFile.delete();
    }                        


Как мы видим в событии клика на кнопку будет исполняться просто код для удаления файла.
На Java все выглядит ясно и просто, но как же это будет выглядеть на Delphi с использованием JNI. На самом деле все проще чем кажется.
Для этого нам нужно разобрать заглянуть и в класс File, который находится по адресу java.io.File. Из этого класса нам нужно:
Читать дальше →

Пишем видеочат для локальной сети, или осваиваем WebRTC в 2020 году

Время на прочтение6 мин
Количество просмотров9K
На фоне известных событий делать было нечего в рамках профессионального роста пытаюсь освоить WebRTC. Как известно, лучший способ освоения – сделать что-нибудь хотя бы потенциально полезное. А заодно и поделиться-обменяться опытом создания и набивания шишек.

В качестве задачи было решено сделать простое приложение, позволяющее проводить аудиовидеозвонки между двумя (пока что) стационарными или мобильными устройствами в локальной сети без необходимости подключаться к Интернету. Установка и первоначальная настройка такого приложения должны быть простыми настолько, чтобы сколь-нибудь продвинутый эникей без проблем с этим справился и показал пользователям, как делать звонки, а при наличии соответствующих навыков мог бы сделать небольшие доработки в части дизайна и возможностей. Клиентом должно выступать любое устройство, оснащённое устройствами ввода-вывода мультимедиа и позволяющее запустить подходящий браузер (Firefox или Chrome – тестил на майских, кажется, версиях).
Читать дальше →

Облом, или как провалился любимый ИТ-проект

Время на прочтение34 мин
Количество просмотров29K
“Его пример другим наука”

Предисловие


Это грустная история о неуспехе проекта, который я считал потенциально успешным на все 100 процентов. И почему все кончилось обломом, я до сих пор толком не понимаю.
Читать дальше →

Передача файлов с помощью pipes и другие мелочи на Delphi

Время на прочтение3 мин
Количество просмотров7.5K
Поставили как-то передо мной задачу написать несколько юнитов на Delphi, обеспечивающих доступ к следующим возможностям Windows:

  1. Shared memory.
  2. Pipes.
Читать дальше →

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

Vassbotn H. Виртуальные переменные класса

Время на прочтение40 мин
Количество просмотров4.1K

Приветствую всех, кто начал читать эту заметку! Хочу предложить вам (а в большей степени фанатам Object Pascal, любителям программистских трюков, технических приемов и синтаксических изысков) ознакомиться с переводом довольно старого (2007 года) поста "Hack#17: Virtual class variables, Part I" и "Hack#17: Virtual class variables, Part II" известного разработчика и автора многочисленных технических приемов, ориентированных на применение в Delphi, Халлварда Вассботна (Hallvard Vassbotn).


Сообщение Халлварда посвящено одной из интереснейших тем – возможности размещения и использования данных, связанных с конкретным классом прикладных объектов. Если вы подумали о константах или переменных класса, то вы окажетесь правы, но только частично.
Речь в этой заметке пойдет о class virtual var, по-русски это словосочетание звучит как виртуальная переменная класса (именно оно и вынесено в название данного перевода). Вы скажете, что такой синтаксической конструкции в Object Pascal’е нет, и окажетесь абсолютно правыми. Более того, я уверен, что знатоки и разработчики на других ОО-языках программирования заявят: в своей практике я не слышал, не сталкивался и не использовал ничего подобного. Как и все я «суслика не вижу…», но буду утверждать, что он может существовать. И об этом пойдет в речь в тексте предлагаемого вам перевода.

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

Утилита для человеческого shadow подключения неадмина к RDP сессиям пользователей в WinServer 2012R2

Время на прочтение4 мин
Количество просмотров54K
Проблема в период карантинной работы предприятия стала следующей: действительно нужно минимизировать количество посещений кабинетов специалистами, обслуживающими и консультирующими по прикладному ПО, да и сказать откровенно, пользователи частенько злоупотребляют помощью специалистов не желая вникать в сам вопрос, мол «придут — помогут — сделают, а я пока покурю/попью кофе и т.п.». Консультация по телефону при совместном доступе к серверу эффективнее, если просматривать удаленный экран.


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

Самодельный компилятор и игровая библиотека Raylib. Опыт стыковки

Время на прочтение4 мин
Количество просмотров6.6K
image

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

О моём компиляторе XD Pascal уже было несколько постов на Хабре. Компилятор написан предельно просто и целиком вручную, при этом язык имеет весьма нетипичные расширения — методы и интерфейсы, позаимствованные из Go. На сегодняшний день базовый язык реализован полностью, работает самокомпиляция, введены простейшие оптимизации. Тут и возникло естественное желание наладить взаимодействие компилятора с какой-нибудь несложной игровой библиотекой. Выбор пал на Raylib — но никогда бы он на неё не пал, если бы я сразу предвидел её подводные камни. Невинная затея превратилась в борьбу с соглашениями о вызове.
Читать дальше →

Разработка веб-сайта на паскале (backend)

Время на прочтение7 мин
Количество просмотров39K
В этой статье я расскажу о том, зачем, почему и как я начал делать сайты на паскале: Delphi / FPC.
Вероятно, «сайт на паскале» ассоццируется с чем-то вроде:

writeln('Content-type: text/html');

Но нет, всё гораздо интереснее! Впрочем, исходный код реального сайта (почти весь) доступен на GitHub.
Читать дальше →

Как найти зловреда (нет) с WinDbg

Время на прочтение6 мин
Количество просмотров3.4K

Как найти зловреда (нет) с WinDbg


Вступление


В этой статье я покажу, как, например, с помощью WinDbg найти, какой такой зловред (или нет) заменил адрес вызова системной функции в DLL, подгружаемым каким-нибудь приложением. Так я, к примеру, искал почему не загружается модуль защиты в конфигурацию 1С.
Для демонстрации нам понадобится приложение, которое загружает пару DLL: одну из них назовём victim (жертва), другую — хищник injector. Последнняя внедряется в жертву, заменяя вызов системной функции (для простоты возьмём Sleep), и будет вызывать AV при определённых условиях (что понадобится в следующей статье).


Т.к. приложения, написанные на Delphi, "не падают" в core-dump из-за необработаных исключений, то наше главное приложение (DLLInjectionDemo) написано на С, линковано ранним связыванием с DLL-жертвой, а для простоты воспроизведения ситуации, будет загружать DLL-injector, переданную в опциях при запуске, и вызывать в ней метод, который навредит жертве. Конкретно для этой статьи нам подошло бы приложение, написанное на любом языке программирования, но убьём двух зайцев сразу.


Исходные коды приложений написаны на C и Delphi 10.3 Rio Community Edition, и компилируются MinGW и Delphi, как для Win32, так и для Win64 (а также FPC в Lazarus-е).


Итак компилируем обе DLL и главное приложение

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

Автоматизированная сборка Delphi-приложения

Время на прочтение14 мин
Количество просмотров25K

Я довольно часто сталкивался с тем, что разработчики на Delphi (можно сказать традиционно) компилируют свои приложения "ручками", что далеко не production-решение, а со стороны выглядит кустарщиной и "делаем на-коленке", хотя продукты бывают весьма серьёзными и продаваемыми. Вероятно, это пошло ещё с тех пор, когда для автоматизации нужно было придумывать свои батнички, которые запускали компилятор командной строки dcc32 с нужными параметрами. Некоторые даже сделали свой "Публикатор" — Delphi-expert, который делает работу сервера сборок: компилирует (правда, открытый в IDE) проект, выставляя ему взятый из какой-то БД инкрементированный номер версии, записывает некий changelog и копирует это куда-то в сетевой каталог.


Я не буду вдаваться в исторический экскурс как было раньше. Я расскажу как есть/можно сейчас, и как это использовать для повышения эффективности своей работы.


Файл проекта современной версии Delphi — это .dproj-файл (здесь и далее я буду ориентироваться на Delphi 10 Rio, но с небольшими отличиями это верно для всех более ранних версий Delphi, начиная с 2007). В нём хранятся все настройки проекта, которые обычно изменяют в IDE (меню Project - Options (Ctrl+Shift+F11)). В рамках данной статьи я сконцентрируюсь на "основных", которые понадобятся для демонстрации общих принципов: это Config — конфигурация, Platform — платформа, OutputDirectory — путь выходного файла и ConditionalDefines (директивы условной компиляции). Остальные настройки, если таковые нужно менять при сборке, я предлагаю выявить самостоятельно. Этот же .dproj-файл, если в него заглянуть обычным текстовым редактором, является ничем иным как скриптом сборки MSBuild (давайте создадим простое консольное приложение и назовём его DelphiAutomatedBuild):

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

И мышонок, и лягушка. Универсальный Компилятор

Время на прочтение6 мин
Количество просмотров4.6K
В серии про надежное программирование [1], [2] остался незаслуженно забытым Swift. Я, честно говоря, просто не считал его кроссплатформенным, а работающим исключительно для macOS/iOS. Тут случайно выяснилось, что Swift также поддерживается такой средой разработки, как RemObjects Elements.

Оказалось, у неё Универсальный Компилятор. Умеет компилировать программы на C#, Go, Java, Oxygene Object Pascal, Swift для: Android, Cocoa (MacOS, iOS, tvOS), JVM, Linux (x64, armv6, aarch64), .NET/.NET Core/Mono, Native Windows(x86/x64), WebAssembly.

Причем делает это практически в любых комбинациях язык → целевая система! Например, можно написать программу на Java, которая будет использовать WPF для целевой платформы .NET, и это все есть в примерах, идущих в поставке.

Итак, представляю мини-заметку про RemObjects Elements, а заодно про надежность двух поддерживаемых в ней языков — Swift и Oxygene.

Рисунок с сайта radionetplus

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

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