Delphi. Первый опыт работы с библиотекой Marshmallow в реальном проекте

Как известно, Marshmallow это ORM библиотека для Delphi. Она входит в состав Spring4D – потрясающей библиотеки коллекций, Dependency Injection и др.

Решил поделиться первым опытом работы с библиотекой Marshmallow в своем проекте, который я делаю на основе своего RobustServer – моего open source шаблона высоко нагруженного сервера. Итак, решил я сделать CRUD таблицы users из БД при помощи Marshmallow. И вот, что у меня получилось.

Модель TUser была создана при помощи генератора классов

Сам серверный класс выглядит вот так

Методы выглядят довольно элегантно. Continue reading

Posted in Delphi | Leave a comment

Delphi.RobustServer.Работа с общими ресурсами

Здесь все обычно, то есть так, на примере критической секции.

Есть у нас в памяти некоторый общий ресурс, обратиться к нему могут 300 000 потоков, поэтому защищаем его критической секцией.

Posted in Delphi | Leave a comment

Delphi.RobustServer. Работа с длинными операциями

Короткие запросы хороши тем, что мы можем получить ответ сразу, а вот как обрабатывать длинные запросы? На StackOverflow Remy Lebeau советует дать ответ о старте работы клиенту сразу, и саму работу выносить в отдельный поток.  Я уже писал на эту тему. В данном посте, попробовал реализовать эту идею, в применении к моему RobustServer и вот что у меня получилось.

Для начала я написал класс TLongTaskThread

Он позволил мне создавать потоки, в которых выполнялась бы долгая работа. У каждого экземпляра такого класса есть Guid и Progress, которые бы  позволяли отслеживать прогресс выполнения работ. Continue reading

Posted in Delphi | Leave a comment

Delphi.Spring4D.Marshmallow

Открыл для себя потрясающий ORM framework Marshmallow, который является частью библиотеки Spring4D и работает с его коллекциями.

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

Я основывал данную статью на официальном wiki проекта. И вот, что интересного получилось.

Создание сущностей в коде из базы через CodeGenerator, выглядит он так, после компиляции

Подключение идет по ODBC, я экспериментировал с MySQL, соответственно скачал MySQL Connector/ ODBC. Continue reading

Posted in Delphi | Leave a comment

Delphi.IsSingleInstance

Проверка “а один ли экземпляр запущен ?”. Работает в мультипользовательском режиме, в отличие от “обычного” мьютекса.

 

Posted in Delphi | Leave a comment

Delphi. Работа с вариантными массивами

Каноничный пример одномерного массива

Далее пример двумерного массива

Довольно хорошая документация по вариантным массивам от Emba

Posted in Delphi | Leave a comment

Delphi.Linq или sugar Spring4D

Delphi Linq

Искал какое-то время аналог C# Linq в Delphi. Встретил много чего интересного, но когда наткнулся на openSource библиотеку Spring4D, понял, что это то, что нужно.  В чем профит ?

Дело в том, что в System.Generics.Collections нет,  как ни странно, TCollection, которая позволяла бы делать вот такие финты, аналогичные цепочкам в C# Linq

Объявление

Как видно, здесь объявляется интерфейс, который богат на разнообразные Linq методы и расширяет стандартный функционал System.Generics.Collections

Заполнение

Использование

Результат

Вау! И это работает. На мой взгляд довольно удобная вещь.  Continue reading

Posted in Delphi | Leave a comment

DelphiRobustServer. Autocollection of API. WindowsService or Desktop modes.

Added new features

Autocollection of API. Collects methods and its params and can be used as a draft. Works through Delphi RTTI methods.

Result looks like Continue reading

Posted in Delphi | Leave a comment

Delphi.Rtti.Overloaded methods

That is known that overloaded methods works not so well in Rtti Delphi by default. To fix this RRUZ created this method

So, you can use them like

 

Posted in Delphi | Leave a comment

Algos.Hackerrank.Birthday Cake Candles

You are in charge of the cake for your niece’s birthday and have decided the cake will have one candle for each year of her total age. When she blows out the candles, she’ll only be able to blow out the tallest ones. Your task is to find out how many candles she can successfully blow out.

For example, if your niece is turning  years old, and the cake will have  candles of height , she will be able to blow out  candles successfully, since the tallest candles are of height  and there are  such candles.

Function Description

Complete the function birthdayCakeCandles in the editor below. It must return an integer representing the number of candles she can blow out.

birthdayCakeCandles has the following parameter(s):

  • ar: an array of integers representing candle heights

Continue reading

Posted in C# | Leave a comment