Как стать автором
Обновить
0

Delphi *

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

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

Lisp со вкусом Pascal или 8501-й язык программирования

Время на прочтение9 мин
Количество просмотров16K
Некоторое время назад (года три) решил почитать учебник по Лиспу. Без всякой конкретной цели, просто ради общего развития и возможности шокировать собеседников экзотикой (один раз кажется, даже получилось).

Но при ближайшем рассмотрении Лисп оказался действительно мощным, гибким и как, ни странно, полезным в «быту». Все мелкие задачи автоматизации быстро перекочевали в скрипты на Лиспе, а так же появились возможности для автоматизации более сложной.

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

Пол Грэм написал не одну статью и даже книгу о преимуществах Лиспа. На момент написания этой статьи Lisp занимает 33-е место в рейтинге TOIBE (в три раза мертвее мёртвого Delphi). Возникает вопрос: почему язык так мало распространён если он так удобен? Приблизительно два года использования дали несколько намёков на причины.
Читать дальше →
Всего голосов 40: ↑39 и ↓1+38
Комментарии35

Как сделать автоматическое обновление клиента онлайн-игры

Время на прочтение5 мин
Количество просмотров12K
В этой статье я расскажу о том, как я сделал систему автообновления клиентской онлайн-игры. Ссылка на исходники (Delphi) в конце статьи. На самом деле такую фичу я реализовал в двух своих играх, и если первый блин вышел немного комом (в игре Spectromancer), то вторая реализация получилась весьма удобной и эффективной. Это моя первая статья на Хабре, так что сильно не бейте, а лучше укажите на недостатки в комментариях :)

Алгоритм обновления игры


  • Проверка версии на необходимость обновления.
  • Скачивание списка файлов актуальной версии.
  • Скачивание новых или изменённых файлов во временную папку.
  • Установка обновления — приведение файлов установленного клиента в соответствие со списком.
  • Запуск обновлённого клиента.
Читать дальше →
Всего голосов 18: ↑17 и ↓1+16
Комментарии30

Deprecated! Автоматизация получения сведений из ЕГРЮЛ с помощью Freepascal

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


В своей работе (юридической) я готов автоматизировать всё, что только поддаётся этому. Но пока прокачанные нейросетями роботы из утопии Германа Грефа не появились и не отняли всю работу у рядовых юристов, рутина надолго останется нашим главным спутником. Автоматизация этой рутины — то, чем я периодически занимаюсь на протяжении последних лет, будь то многочисленные таблицы в excel с кучей формул, позволяющих быстро распечатать сотню однотипных документов-рассылок в word'е, ну или автоматически генерируемые отчеты. Но есть и такие вещи, которые простыми формулами и подстановками не сделаешь. Здесь на помощь приходит программирование, которым я увлекаюсь с детства, и так уж вышло, что началось это с delphi. Сейчас мне проще, чем в C# или python, осваивать которые начал недавно, сделать быстро какой-то проект в среде Lazarus, используя freepascal. И да, я на полном серьёзе считаю, что возможностей этой среды более, чем достаточно. Поэтому автоматизировать ЕГРЮЛ, как вы догадались, предстоит с помощью паскаля.

Читать дальше →
Всего голосов 25: ↑23 и ↓2+21
Комментарии15

ScadaPy: добавляем протокол IEC 60870-5-104

Время на прочтение5 мин
Количество просмотров19K
Добавление протокола iec-104 в scadapy, предоставляет дополнительные возможности для расширения системы, как в домашней автоматизации, так и для локального применения на малых предприятиях.

Данный протокол довольно сложный в освоении, но в настоящий момент в интернете можно найти достаточно документации для ознакомления.
Читать дальше →
Всего голосов 6: ↑6 и ↓0+6
Комментарии1

Delphi и C++Builder Community Edition

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

Случилось то, чего мы все так долго ждали. Embarcadero представила новую редакцию Delphi и C++ Builder: Delphi Community Edition и C++ Builder Community Edition. Новая редакция предназначена для индивидуальных разработчиков, студентов, стартапов и некоммерческих организаций.
Читать дальше →
Всего голосов 66: ↑62 и ↓4+58
Комментарии262

Использование FPC-библиотеки «InternetTools» в Delphi

Время на прочтение12 мин
Количество просмотров4.5K
На самом деле, статья несколько шире – она описывает способ, позволяющий прозрачно задействовать и многие другие библиотеки (причём не только из мира Free Pascal), а InternetTools выбрана из-за своего замечательного свойства – это тот случай, когда (как ни удивительно) отсутствует Delphi-вариант с такими же широкими возможностями и удобством использования.

Эта библиотека предназначена для извлечения информации (парсинга) из веб-документов (XML и HTML), позволяя использовать для указания нужных данных как языки запросов высокого уровня, такие как XPath и XQuery, так и, в качестве одного из вариантов, предоставляя прямой доступ к элементам дерева, построенного по документу.
Читать дальше →
Всего голосов 17: ↑17 и ↓0+17
Комментарии8

Регулярные выражения + логическое программирование. Что в результате?

Время на прочтение4 мин
Количество просмотров7.5K
Здравствуйте, уважаемые читатели.

Регулярные выражения — хорошо известная вещь, которая используется в разнообразных проектах, чаще всего, для не очень сложных случаев разбора структурированных текстов. Занимаясь, на первый взгляд, такой несколько иной задачей, как обратный синтез моделей программ (когда есть код программы, порожденный автоматически некоторой системой по некоторой блочной модели решаемой задачи, и необходимо по этому коду воссоздать исходную модель), а также синтезом моделей программ по текстовому описанию задачи, я столкнулся с проблемой анализа текстов, а точнее — идентификации фрагментов текста некоторым настраиваемым шаблонам. Хотелось получить достаточно простое и гибкое (настраиваемое) решение. Регулярные выражения, с ходу, такими не казались, поскольку даже в такой простой задаче, как проверка слова по словарю, требовала, к сожалению, тщательного перечисления всех вариантов в этом выражении. Да и дерево синтаксического разбора они не строили. Однако, их явно можно было улучшить. Об этом и пойдет речь.
Читать дальше →
Всего голосов 15: ↑12 и ↓3+9
Комментарии3

Создание сайта на Delphi, или Как использовать uniGUI по-минимуму

Время на прочтение7 мин
Количество просмотров42K
uniGUI – это библиотека, позволяющая создавать веб-приложения в классической Delphi-манере, посредством визуальных компонентов, причём, что является немаловажным, в большинстве случаев она полностью скрывает от разработчика всю клиентскую (браузерную) «кухню»: не требуется знать ни HTML, ни CSS, ни JavaScript, а вся разработка ведётся лишь на одном языке – Delphi.

Если смотреть на картину издалека, то вырисовываются 3 сценария использования библиотеки:

  1. Наиболее благоприятный, для которого она в целом и создавалась, когда описанная сильная, радужная сторона uniGUI проявляет себя в полной мере – перенос (полный или частичный – неважно) настольных приложений в веб, что возможно проделать быстро, привычным способом и с высоким качеством только в случаях, когда поставляемые с библиотекой компоненты сразу обеспечивают требуемый функционал – к примеру, фильтрацию и сортировку по столбцам таблицы.
  2. Очень похож на первый и в какой-то мере вытекает из него, с тем лишь отличием, что штатный набор компонентов не покрывает все необходимые по ТЗ возможности; если снова взять для примера таблицу, то таким требованием может стать многоуровневая группировка строк по произвольным столбцам. Если удастся найти сторонние решения с нужными возможностями, то сценарий сводится к первому, а если нет, то потребуется самостоятельная доработка, что уже весьма нетривиально, т. к. здесь не обойтись не просто без знаний JavaScript, а ещё и глубокого владения фреймворком Ext JS, на основе которого работает браузерная сторона uniGUI.
  3. Последний сценарий может показаться странным и даже чужеродным для тех, кто применял на практике в основном первый, – речь об отказе от всей богатой палитры визуальных компонентов и разработке клиентской части веб-приложения исключительно с использованием родной для неё триады – HTML, CSS и JavaScript. Данная статья покажет, в каких случаях подобное допустимо, а также продемонстрирует способ реализовать задуманное.
Читать дальше →
Всего голосов 23: ↑21 и ↓2+19
Комментарии210

Что не так с 3D PDF и eDrawings. Как мы заменили просмотрщик 3D-моделей в своем приложении

Время на прочтение6 мин
Количество просмотров10K
Это рассказ о том, как мы встроили новый просмотрщик C3D Viewer в систему управления жизненным циклом изделия ЛОЦМАН:PLM, почему мы это сделали, и что у нас получилось.

image
Читать дальше →
Всего голосов 7: ↑7 и ↓0+7
Комментарии4

Плавное масштабирование текста

Время на прочтение25 мин
Количество просмотров9K
Масштабирование текста – задача не столь тривиальная, как может показаться с первого взгляда. При простом изменении размера шрифта мы не можем получить плавного и пропорционального изменения ширины текста. Изменения происходят «скачкообразно», что сильно мешает в разработке разного рода редакторов, графиков, диаграмм, везде, где используется масштабирование.

image
Читать дальше →
Всего голосов 5: ↑5 и ↓0+5
Комментарии12

Как я писал собственную ERP систему, ver. 2.0

Время на прочтение10 мин
Количество просмотров8.1K
Прошлая моя статья вызвала много вопросов и замечаний у читателей. Действительно получилась достаточно скомкана, не описывала всего. Хочу попробовать ещё раз изложить этот кейс, описав его отталкиваясь от вопросов, полученных в комментариях.

Итак, дано: филиал крупной сети ресторанного бизнеса, специализирующейся на доставке заказов на дом.
Читать дальше →
Всего голосов 10: ↑6 и ↓4+2
Комментарии26

Как в TMemo сделать вертикальное выравнивание, отступы и TextHint

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

Пролог


Итак, из-за чего все собственно и стряслось. Я пишу плагины для LedearTask. Также, в 2017 году, написал векторный редактор для турецкой фирмы станков по производству печатей MATUYA. Что LeaderTask, что MATUYA, выставили интересные требования – вертикальное выравнивание в многострочном редакторе, отступы и TextHint. TextHint имеется ввиду — такое серое приглашение ввести хоть что-нибудь, когда элемент ввода пуст.

image
LeaderTask: плагин «Лестница Целей» (ввод и хинт по центру в многострочном редакторе)

image
Matuya Stamp Systems (ввод текста выровнен по правому и нижнему краю)
Читать дальше →
Всего голосов 19: ↑18 и ↓1+17
Комментарии12

Как я писал собственную ERP систему и что из этого получилось

Время на прочтение7 мин
Количество просмотров22K
Некоторое время назад ко мне обратился знакомый, хозяин одного из филиалов крупной сети по доставке суши и пицц. Их нынешняя ERP его вообще не устраивала, так как не было контроля за кухней и доставщиками, а так как кухонь по городу у него 5, то это была серьёзная проблема. Он предложил мне написать под него новую систему.
Читать дальше →
Всего голосов 37: ↑20 и ↓17+3
Комментарии139

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

Индексация глобальная и не очень

Время на прочтение4 мин
Количество просмотров2.8K
Сразу оговорюсь, статья не имеет ничего общего с индексацией сайтов и т.п. Речь пойдет о вещах куда более простых, но, тем не менее, нужных. Иногда надо проиндексировать сущности, так чтобы индексы были уникальны в рамках программы и компактно упакованы в промежуток [0..N]. Причем заводить для этого отдельные механизмы совершенно не хочется.

Примером может послужить такая задача:

Всем, думаю, известно, что class var в Delphi есть не что иное, как обычная глобальная переменная, единая для класса и всех его потомков. А иногда нужно, чтобы потомки использовали свои собственные, например, для подсчета экземпляров класса. Я знаю как минимум одно решение этой проблемы, но это хак. Кроме того он требует от пользователя дополнительных действий — выделения памяти в блоке initialization и, по-хорошему, освобождения ее в finalization.

Но можно сделать и проще — завести глобальный (class var) массив, и сделать так, чтобы каждый потомок ссылался на свою ячейку. Единственная проблема в том, что для этого требуется проиндексировать потомков, причем сделать это автоматически.
Читать дальше →
Всего голосов 13: ↑9 и ↓4+5
Комментарии2

Классы матриц и векторов в Delphi

Время на прочтение11 мин
Количество просмотров13K
В этой статье рассматривается проектирование типов для работы с объектами линейной алгебры: векторами, матрицами, кватернионами. Показано классическое применение механизма перегрузки стандартных операций, использование приёма «Copy On Write» и аннотаций.
Читать дальше →
Всего голосов 14: ↑12 и ↓2+10
Комментарии13

Графы большие и маленькие: интеллектуальное решение проблемы выбора представления

Время на прочтение14 мин
Количество просмотров9.6K
(Этюд для программистов или заявка на Интернет-поиск нового типа)



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

Start for word length 8
6016 words loaded from dictionary file: ..\Dictionary\ORF3.txt
Graph was made: edges number = 871


Пример 1. Характеристики графа существительных длиной 8 букв.
Читать дальше →
Всего голосов 5: ↑4 и ↓1+3
Комментарии0

Бот в муравейнике

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

Еще один игровой бот для «Космических рейнджеров HD» (издатель ) наводит на интересные мысли о путях развития искусственного интеллекта (ИИ).
Читать дальше →
Всего голосов 22: ↑22 и ↓0+22
Комментарии22

Борьба со сложностью в сетевом протоколе прикладного уровня

Время на прочтение20 мин
Количество просмотров4K
Доводилось ли Вам реализовывать объёмный сетевой обмен посредством TCP- или HTTP-протокола? Насколько, в случае такого опыта, Вы были удовлетворены сопровождаемостью конечного решения? Утвердительный ответ на первый вопрос (пусть даже и без «объёмистости» обмена) и недовольство гибкостью получившейся реализации позволяют рекомендовать эту статью как содержащую один из способов избавления от такого несчастья.

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

Нужно отметить, что в программном коде статьи используется Indy, однако, хотя это и может показаться странным в материале, посвящённом сетевому взаимодействию, как такового знания этой библиотеки от читателя не потребуется, ибо смысл – в знакомстве с более абстрактными, высокоуровневыми приёмами при реализации своего протокола – речь в большей степени о проектировании.
Читать дальше →
Всего голосов 5: ↑5 и ↓0+5
Комментарии5

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

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

Если вы много занимаетесь отладкой приложений под Windows — вы, возможно, слышали о таком замечательном механизме, как Image File Execution Options (IFEO). Одна из предоставляемых им возможностей позволяет отлаживать приложение в условиях, более приближенных к боевым. Записав в нужное место в реестре специальный ключик, мы можем вместо программы автоматически запускать её отладчик, позволяя ему делать свои отладочные дела. Однако кто сказал, что этот механизм (фактически — перехвата запуска чего угодно) можно использовать только в подобных целях? Эта статья вовсе не об использовании вещей по назначению.


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

Читать дальше →
Всего голосов 49: ↑48 и ↓1+47
Комментарии21

Тестирование БД мобильного Delphi-приложения

Время на прочтение10 мин
Количество просмотров8.9K
В предыдущем материале «Выбор СУБД для мобильного Delphi-приложения», как следует из его названия, был показан первый этап в разработке той подсистемы приложения, что отвечает за хранение и бо́льшую часть обработки его данных; уточнение про «бо́льшую часть» сделано неспроста, т. к. в итоге обозначенный выбор пал на СУБД Interbase именно из-за возможности применять хранимые процедуры (ХП), которые и стали сосредоточением основной логики по работе с данными, оставляя за Делфи-кодом несложную задачу по их вызову.

Для лучшего понимания необходимости тестирования в данном конкретном случае, нужно отметить, что в описанном проекте изначально была задана довольно высокая планка качества, поддержание которой в части функционала, реализованного в процедурах, достиглось, в том числе, за счёт автотестов, проверяющих ключевые ХП (они ответственны за критический для приложения функционал – систему рекомендаций). Именно один из способов организации такого тестирования – на основе DUnitX и XML – и является предметом статьи.
Читать дальше →
Всего голосов 16: ↑16 и ↓0+16
Комментарии1