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

Delphi *

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

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

Input lag во время рендеринга и как его побеждать

Время на прочтение6 мин
Количество просмотров34K
Привет всем. Многие из вас знакомы с лагом ввода. Это бывает, когда вас в очередной раз убивают в компьютерной игре, и вы кричите: «Ну я же нажал блок/атаку/уворот». Ну а затем джойстик летит в стену. Знакомо? Происходит это потому, что между нажатием клавиш и появлением результата на экране проходит значительное время. Фактически, когда вы смотрите в экран — вы видите прошлое состояние, которое может абсолютно не отражать действительность.

Если вы разрабатываете собственную игру, или вообще занимаетесь рендером, и хотите уменьшить задержки ввода, то крайне советую заглянуть под кат.
Поехали
Всего голосов 65: ↑64 и ↓1+63
Комментарии37

Часть 1. Платформа СППР Универсальные алгоритмы

Время на прочтение8 мин
Количество просмотров17K
Приветствую, уважаемое сообщество!
Забегая вперед прошу прощения у тех, кто ожидает новизны или революционных идей. Их тут нет. Но есть вполне хорошая прикладная система.

Системы поддержки принятия решений сейчас набирают обороты. Причем я не буду особо останавливаться на перечислении способов реализации. Оговорюсь только об основных свойствах. Я бы очень упрощенно и обобщенно назвал эти системы вероятностными. То есть они выдают рекомендации с известной долей вероятности используя накопленную и проанализированную статистику. Не скажу что это плохо. Тема BigData и Machine learning нынче в тренде. Так же эти системы работают по принципу черного ящика. Поэтому проверить достоверность работы заложенной модели не всегда можно выявить.
Читать дальше →
Всего голосов 15: ↑13 и ↓2+11
Комментарии4

Часть 2. СППР Универсальные алгоритмы – Алгоритм для службы поддержки

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

Исходное состояние – я руководил службой внедрения и сопровождения в частной медицинской компании. Филиальная сеть отделений в регионах, которая работает под управлением единой системы. Так же используется схожее оборудование на всех объектах. Фактически все оборудование подключено в систему и отдает данные (диализные аппараты, лабораторные анализаторы, аппараты УЗИ и кардиографы, измерители веса и давления, водоподготовка, система вентиляции, датчики температуры и влажности).

Сеть отделений постоянно расширяется. В каждом отделении есть ИТ-специалист. Далеко не всегда этот специалист компетентен в различных областях. Задача стояла достаточно масштабная по обеспечению работоспособности довольно сложной с точки реализации системы.
Читать дальше →
Всего голосов 11: ↑11 и ↓0+11
Комментарии6

Стандартизация записей

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

Я волком бы выгрыз бюрократизм!
Владимир Маяковский


Рассмотрим в этой статье проблему стандартизации записей. Стандартизация, прежде всего, нужна при импорте миллионов записей, накопившихся за десятилетия. Данные, имеющие разную кодировку страниц из разных автоматизированных систем, собираются в единую базу информационной системы. В таком случае, обращение к функциям чтения строк по ascii, типа QRchar себя не оправдывает, поскольку формат Юникода от записи к записи отличается. К тому же кириллица в словах часто бывает перемешана с цифрами и латиницей (например, когда вместо 'ч' пишется '4'). При этом прямая циклическая замена цифр и латиницы на кириллицу в строке невозможна, так как цифры с латиницей встречаются в и обозначениях.

Пользовательские справочники позволяют отслеживать и фиксировать закономерности неправильного написания тех или иных фрагментов, указывая, на что их менять в общем цикле. По справочнику окончаний можно распознать часть речи, а по части речи определить алгоритм передвижения слова в строке для приведения к шаблонному виду.
Читать дальше →
Всего голосов 9: ↑7 и ↓2+5
Комментарии9

Истории

Delphi. Что таит в себе TDictionary

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

Доброго времени суток.
А знаете ли вы, что не все хеш таблицы одинаково полезны? Сейчас я расскажу вам историю, как одна плохая хеш таблица скушала всю производительность, и не поморщилась. И как исправление этой хеш таблицы ускорило код почти в 10 раз.
Конечно, согласно теме — в статье речь пойдет о Delphi, но даже если вы не Delphi разработчик, то все равно советую заглянуть под кат, а после прочтения статьи в исходный код хеш таблиц, которые вы используете. А Delphi разработчикам я советую вообще отказаться от стандартного TDictionary.
Итак, поехали
Всего голосов 25: ↑21 и ↓4+17
Комментарии40

Слабые[weak] ссылки в новой версии Delphi

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

Компания Embarcadero вчера объявила о выходе новой версии Delphi RAD studio XE 10.1,
Весь список изменений можно посмотреть тут, я же хочу рассказать о наиболее ценном(для нашей компании) улучшении, а именно о внедрение слабых [weak] ссылок в классический компилятор (Win32/Win64).

Выше в статье даны подробности проблемы, так что тем кто желает посмотреть что сделали в делфи прошу под кат.
Читать дальше →
Всего голосов 7: ↑5 и ↓2+3
Комментарии7

RSA шифрование через библиотеку OpenSSL в Delphi

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


По долгу службы в разработчиках повстречалась задача шифровать текстовые строки алгоритмом RSA, используя публичный и секретный ключи в PEM формате. При изучении данного вопроса выбор пал на использование библиотеки OpenSSL. Хочу поделиться примерами реализации функциональности шифрования на Delphi. Действия выполнялись в ОС Windows, среда разработки Borland Delphi 7.
Читать дальше →
Всего голосов 31: ↑18 и ↓13+5
Комментарии27

ARM: GNU AS: Проект: Среда для программирования на ассемблере (Самодел на Delphi)

Время на прочтение6 мин
Количество просмотров9.6K
Начиная программировать на языке ассемблера для микроконтроллеров ARM первое, с чем вы столкнетесь — это отсутствие какой либо среды для программирования (c первым проектом, программами для компиляции и сборки я уже разбирался). Причем бытует мнение, что для ассемблера ничего кроме блокнота и не нужно (максимум, «для гурманов» сообщество предложит использовать редактор с подсветкой кода). И этот подход в принципе имеет место быть — ровно на столько, на сколько удобно писать программы на С++ в блокноте — то есть до того момента, как вы перейдете от программ «Hello, Word» к чему то более сложному.

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

Если вам нужно тоже самое и нужно именно «ехать, а не шашечки» — тогда добро пожаловать под кат.
Читать дальше →
Всего голосов 27: ↑25 и ↓2+23
Комментарии62

Delphi: Простая задачка RichEdit которую нужно решить до того как вы решите его использовать

Время на прочтение3 мин
Количество просмотров16K
Потихоньку начал писать собственный редактор для написания программ под ARM на языке ассемблера, и решил начать с самого простого: сделать разбор текста при редактировании.
И тут я нашел небольшие такие грабельки :-)

Итак вопрос:
Есть редактор RichEdit в который мы ввели текст:

Курсор стоит вначале строки перед "9", RichText.SelStart := 12

Как в программе узнать символ на котором стоит курсор?

Если ваш опыт подсказывает конструкцию наподобие:
   with RichEdit do
        textChar:=Text [SelStart]; 

— то ваш опыт не верен!

И если вам интересно — то правильный ответ можно увидеть под катом…

Читать дальше →
Всего голосов 34: ↑20 и ↓14+6
Комментарии25

Как не стать программистом или… тебе здесь не место

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

ПРОЛОГ


Это статья для того, кто решил стать кулхацкером программистом, для того, кто еще не понимает, куда он может вляпаться и кто думает, что это не будет стоить ему больших усилий.

Статья не рекомендована к прочтению опытными программерами. Ведь как ни крути, но взгляды на программинг могут расходиться.
Посему прошу сильно не минусовать. Если у опытных программистов есть что сказать новичкам — пишите тоже свою статью.

Ну а если ты в процессе самоопределения по данной профессии — you are welcome!
Читать дальше →
Всего голосов 109: ↑27 и ↓82-55
Комментарии285

Релиз компонентов DevExpress .NET, HTML5/JS и VCL v2015.2

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

2015-й год близится к своему завершению и мы хотим пожелать всем разработчикам России (да и всего мира, чего уж!) весёлого новогоднего настроения, гармонии во всех ваших делах, ну и чтобы всё, что у вас ещё не получилось сделать до сих пор — обязательно получилось бы в следующем году!

А вот у нас, например, ещё в этом году получилось выпустить новую версию компонентов для .NET, HTML/JavaScript и VCL, и если вы используете наши продукты в своей работе и следите за их развитием, то добро пожаловать под кат.


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

Создание приложений для СУБД Firebird с использованием различных компонент и драйверов: FireDac

Время на прочтение29 мин
Количество просмотров71K
В данной статье будет описан процесс создания приложений для СУБД Firebird с использованием компонентов доступа FireDac и среды Delphi XE5. FireDac является стандартным набором компонентов доступа к различным базам данных начиная с Delphi XE3.

Наше приложение будет работать с базой данных модель, которой представлена на рисунке ниже.

diagramm


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

Эта модель является просто примером. Ваша предметная область может быть сложнее, или полностью другой. Модель, используемая в этой статье, максимально упрощена для того, чтобы не загромождать описание работы с компонентами описанием создания и модификации модели данных.
Читать дальше →
Всего голосов 15: ↑13 и ↓2+11
Комментарии9

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

Изменения в RAD Studio 10 Seattle Update 1

Время на прочтение2 мин
Количество просмотров11K
В декабре 2015 года вышло обновление RAD Studio 10 Seattle Update 1, которое включает ряд существенных изменений и улучшений среды разработки RAD Studio 10 Seattle, а также устраняет множество ошибок, которые были в предыдущих версиях.

В некоторых случаях исправление ошибок одновременно расширяет функциональные возможности тех или иных компонентов IDE. В данном обновлении произведено более 250 улучшений и исправлений, при этом более 70 были выявлены пользователями и сообщены через Quality Portal.
Читать дальше →
Всего голосов 10: ↑7 и ↓3+4
Комментарии5

Webmoney-бонусы в культурном русле

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

Лет 10-12 назад я все думал «где бы срубить денег на халяву».

В клиенте Webmoney тогда были на последней вкладке ссылки «Потратить» и «Заработать» с красивыми пиксель-артными значками (и сейчас есть, но значки не такие красивые).

При взгляде моими стеклянными глазами на эту ссылку «ЗАРАБОТАТЬ» одна только мысль что в инете можно не только потратить, но и заработать(!) трясла меня. И я, судорожно перебирая костлявыми высохшими пальцами кнопки на своей старой зажиренной клавиатуре, искал где же тут заработать-то можно.

Хотелось найти место в интернете, где просто выдаются деньги. Чтоб их забирать и складывать в WMR/WMZ-кошелек, следя расширенными зрачками за каждодневным ростом заветной цифры. Чтобы хранить их, копить их, чахнуть над ними.

Но все сайты, описанные в вебмани-клиенте, оказались заработком типа «просмотр сайта по таймеру с капчей в конце». И эти таймеры были так нудны, долги, с такими копейками на выходе — что я не захотел так мучаться. Я хотел жать простую кнопку и получать деньгу!

Но был еще один источник денег, тогда он только развивался — «бонусы вебмани». Владельцы некоторых сайтов делают где нибудь в уголке сайта поле типа «Введите номер WMR-кошелька», рядом поле «Введите эту капчу» и кнопку «Забрать бонус». Тогда, на заре бонусовыдавания, у некоторых сайтов даже капчи не было. Народ заходил на такой сайт, повышал посещаемость этого сайта, получал свой законный бонус, заодно прочитывал информацию на сайте.

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

Это был примерно третий курс института, 2004(-5) год
и я как раз начал недавно изучать Delphi 5
Всего голосов 27: ↑20 и ↓7+13
Комментарии31

Серия вебинаров по работе с данными

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


Друзья!

Мы запустили серию вебинаров, посвященную инновационным решениям, включенным в продукты Embarcadero для специалистов по работе с данными выпуска 2015-2016 года.

Будем говорить не только о решениях для проектирования и моделирования архитектуры корпоративных данных, но и о средствах построения серверных многозвенных систем со стандартным API. Отдельно обсудим обновленные средства управления мобильными данными и создание приложений на основе NoSQL баз данных. И во второй половине серии будем рассказывать про технологии нового поколения управления производительностью БД. Не пропустите.

На этой неделе поговорим о том, как использовать Rapid SQL для ускорения разработки SQL и другого кода для СУБД и обсудим вопросы оптимизации командной разработки.

Регистрация: goo.gl/GhDcIl
Всего голосов 12: ↑6 и ↓60
Комментарии1

Что не так с этим кодом?

Время на прочтение5 мин
Количество просмотров11K
image Привет всем.
По мере моей работы с Delphi я нахожу интересные подводные камни, приводящие к ошибкам. Парочкой из них я хочу поделиться с вами в форме задачек. Ответы на них я опубликую через пару дней, а пока вы можете попробовать разобраться в не очевидном поведении самостоятельно. Если интересно — добро пожаловать под кат.
Читать дальше →
Всего голосов 15: ↑4 и ↓11-7
Комментарии32

Мировой тур RAD Studio 10 в Санкт-Петербурге

Время на прочтение1 мин
Количество просмотров2K
Друзья!

У нас для Вас хорошие новости!

Мы продолжаем Мировой тур RAD Studio 10 и, в этот раз, 26 ноября ждите нас в Санкт-Петербурге.

Мы будем показывать новые возможности RAD Studio 10 Seattle.
Традиционно, в нашем мероприятии примут участие разработчики из Санкт-Петербургского центра разработки, соответственно, у Вас есть возможность узнать все «из первых рук».
Читать дальше →
Всего голосов 7: ↑3 и ↓4-1
Комментарии1

Серия вебинаров о новых возможностях RAD Studio 10 Seattle

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


Друзья!



Как вы, наверное, знаете мы запустили новую версию RAD Studio 10 Seattle в последний день лета. Чтобы более подробно рассказать Вам об особенностях новой версии мы запускаем серию вебинаров.

Итак, наша программа до конца года.



21 октября — Новые визуальные VCL-компоненты для Windows 10 в RAD Studio 10 Seattle
28 октября — Создание приложений в FireMonkey для Windows 10 в RAD Studio 10 Seattle
11 ноября — Использование UWP/WinRT Contracts и Notification (уведомления) в Windows 10
Читать дальше →
Всего голосов 5: ↑2 и ↓3-1
Комментарии0

Как организовать тестирование БД в dUnit

Время на прочтение7 мин
Количество просмотров7.6K
Как известно, в xUnit-фреймворках, простейший test-case состоит из последовательности вызовов SetUp, TestSomething, TearDown. И довольно часто в unit-тестировании требуется подготовить какие-то ресурсы перед основными тестами. Типичный пример этого — соединение с базой данных. И логика подсказывает нам, что было бы весьма затратно, запуская несколько тестов, перед каждым устанавливать соединение с БД в SetUp, и отключаться в TearDown.

Пример модуля
...
type
  TTestDB1 = class(TTestCase)
  protected
  public
    procedure SetUp; override;
    procedure TearDown; override;
  published
    procedure TestDB1_1;
    procedure TestDB1_2;
  end;
...
implementation
...
procedure TTestDB1.SetUp;
begin
  inherited;
  // connect to DB
end;

procedure TTestDB1.TearDown;
begin
  // disconnect from DB
  inherited;
end;
...
initialization
  RegisterTest(TTestDB1.Suite);
end.



Схема вызовов будет такая:

-- TTestDB1.SetUp
---- TTestDB1.TestDB1_1
-- TTestDB1.TearDown
-- TTestDB1.SetUp
---- TTestDB1.TestDB1_2
-- TTestDB1.TearDown

К тому же с БД может статься, что перед тем, как к БД подключиться, её нужно создать с требуемой структурой.

Для решения такой задачи в dUnit есть класс TTestSetup (описан в модуле TTestExtensions).
Читать дальше →
Всего голосов 8: ↑7 и ↓1+6
Комментарии2