-
MY PROJECTS
-
Recent Posts
- Java.Servlet.What are the main features introduced in the Servlet 3 specification?
- Java.Servlet.Should i close connection in my code if i use connection pool ?
- Java.Servlet.If i created connection pool, when it should be destroyed ?
- Java.Servlet.How can we organize a database connection, provide logging in a servlet?
- Java.Servlet.How can we provide transport layer security for our web application?
- Java.Servlet.What is an effective way to ensure that all servlets are accessible only to a user with a valid session?
- Java.Servlet.How can we notify an object in a session that the session is invalid or expired?
- Java.Servlet.What is session ?
- Java.Servlet.What exactly encodeRedirectURL does ?
- Java.Servlets.What is the purpose and difference between encodeURL() and encodeRedirectURL()?
- Java.Servlet.What is URL Rewriting?
- Java.Servlet.Can i delete Cookie ?
- Java.Servlet.What are the methods for working with cookies provided in servlets?
- Java.Servlet.What are cookies?
- Java.Servlet.What are the different methods of session management in servlets?
- Java.Servlets.What happens to symbols when i don’t encode them in URL, give example ?
- Java.Servlets.What does URL encoding mean? How can it be implemented in Java?
- Java.Servlet.Explain the SingleThreadModel interface.
- Java.Servlet.Can PrintWriter and ServletOutputStream be used simultaneously in a servlet?
- Java.Servlet.What is the difference between PrintWriter and ServletOutputStream?
Categories
- Aptana
- Azure
- C#
- DataSnap
- DBExpress
- Delphi
- Delphi и сети
- Delphi. Язык программирования
- ExtJS
- FastReport
- FireDAC
- FireMonkey
- GIT
- ICS
- IDE
- IIS
- Indy
- InnoSetup
- javascript
- jQuery
- JSON
- LiveBindings
- MSHTML
- MySQL
- PHP
- REST
- Ribbons
- SMS
- SQL инструкции
- SVN
- TRichView
- UniGui
- WebBroker
- WinAPI
- Windows
- Алгоритмы
- Без рубрики
- Деревья
- Ищу ответ
- Компонентостроение
- Мои компоненты
- Начальный уровень
- Обработка исключений
- Парсинг
- Потоки(Threads)
- Регулярные выражения
- Тестирование приложений
Category Archives: Delphi
DesignPatterns. TemplateMethod
Шаблонный метод позволяет объявить в базовом классе некоторый метод, который может быть группой других методов и переопределить его в классах наследниках. Посмотрим на примере. Разработка ПО может быть разделена на несколько стадий. -Идея -Проектирование -Дизайн -Тестирование Вот как мы можем … Continue reading
Posted in Delphi
Comments Off on DesignPatterns. TemplateMethod
DesignPatterns. Strategy
Пример с отпуском Мы можем поехать в отпуск на самолете, поезде или машине. Это будут разные стратегии. Посмотрим, как это реализовать, с помощью соответствующего паттерна. Main
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
program Strategy; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, uStrategyVacation in 'uStrategyVacation.pas'; var v: TVacation; begin try v := TVacation.Create(); try v.Transport := TStrategyAirplane.Create(); v.Move(); // v.Transport := TStrategyTrain.Create(); v.Move(); // v.Transport := TStrategyCar.Create(); v.Move(); Readln; finally v.Free(); end; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. |
Интерфейсы и классы стратегий
Posted in Delphi
Comments Off on DesignPatterns. Strategy
DesignPatterns. Command
Когда использовать? Когда необходимо ответить действием на действие, callback Когда нужно вести очередь действий с возможностью Undo / Redo Когда нужно последовательное логгирование Про этот паттерн говорят следующее. Client – посетитель кафе, Invoker – официантка, Command – листочек с заказом … Continue reading
Posted in Delphi
Comments Off on DesignPatterns. Command
DesignPatterns. AbstractFactory
Абстрактная фабрика порождает абстрактные продукты. При применении, вызове клиентом, конкретная фабрика порождает конкретные продукты, опираясь на абстракцию. Канонический пример На примере супер героев Delphi Main
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
program AbstractFactory; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, uAbstractFactory in 'uAbstractFactory.pas'; var f: TAbstractSuperHeroesFactory; c: TClient; begin try f := TDisneyFactory.Create(); c := TClient.Create(f); c.SaveMePlease(); Readln; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. |
Фабрика и клиент
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
unit uAbstractFactory; interface uses System.SysUtils; type TAbstractFlyingSuperHero = class public procedure SaveTheWorld; virtual; abstract; end; TSuperMan = class(TAbstractFlyingSuperHero) public procedure SaveTheWorld; override; end; TAbstractSuperHeroesFactory = class public function CreateFlyingSuperHero: TAbstractFlyingSuperHero; virtual; abstract; end; TDisneyFactory = class(TAbstractSuperHeroesFactory) public function CreateFlyingSuperHero: TAbstractFlyingSuperHero; override; end; TClient = class private FAbstractFlyingSuperHero: TAbstractFlyingSuperHero; public constructor Create(aFactory: TAbstractSuperHeroesFactory); procedure SaveMePlease(); end; implementation { TDisneyFactory } function TDisneyFactory.CreateFlyingSuperHero: TAbstractFlyingSuperHero; begin Result := TSuperMan.Create(); end; { TClient } constructor TClient.Create(aFactory: TAbstractSuperHeroesFactory); begin FAbstractFlyingSuperHero := aFactory.CreateFlyingSuperHero(); end; procedure TClient.SaveMePlease; begin FAbstractFlyingSuperHero.SaveTheWorld(); Writeln('SuperMan saved me!'); end; { TSuperMan } procedure TSuperMan.SaveTheWorld; begin Writeln('I''m flying to save you... ! '); end; end. |
C#
Delphi. TStream. Сохранение строки в TStream и чтение строки из TStream
Пример
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
procedure SaveStringToStream(aStr: string; aStream: TStream); var l: integer; begin l := length(aStr); aStream.WriteBuffer(l, SizeOf(l)); if l > 0 then aStream.WriteBuffer(PChar(aStr)^, l); end; function LoadStringFromStream(aStream: TStream): string; var l: integer; begin aStream.ReadBuffer(l, SizeOf(l)); if l > 0 then begin SetLength(Result, l); aStream.ReadBuffer(PChar(Result)^, l) end else Result := ''; end; |
Posted in Delphi
Comments Off on Delphi. TStream. Сохранение строки в TStream и чтение строки из TStream
Delphi. Hex метаморфозы с байтовой строкой или функции для перевода в Hex и Hex представление и обратно
Вспомогательные функции, из проектов Пусть на входе есть строка
1 |
#50#54#51#171#56#53#173#65#55#52#172#64#57#58#59#60#61#62#63#175#176#177#178#179#180#165#166#167#168#169#170#181 |
Строка – > массив байт
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
type ArrayOfByte = array of byte; function Str2Hex(s: string): ArrayOfByte; var i: Integer; sLength: Integer; begin sLength := Length(s); if (sLength > 0) then begin SetLength(Result, sLength); for i := 0 to High(Result) do Result[i] := Ord(S[i + 1]); end; end; |
Получили массив байт
1 |
(50, 54, 51, 171, 56, 53, 173, 65, 55, 52, 172, 64, 57, 58, 59, 60, 61, 62, 63, 175, 176, 177, 178, 179, 180, 165, 166, 167, 168, 169, 170, 181) |
Байт -> StrHex (Шестнадцатеричное представление)
1 2 3 4 5 6 |
function ByteToHex(InByte: byte): shortstring; const Digits: array[0..15] of char = '0123456789ABCDEF'; begin result := digits[InByte shr 4] + digits[InByte and $0F]; end; |
1 2 3 4 5 6 7 8 |
function Hex2StrHex(aBuf: ArrayOfByte): string; var i: Integer; begin Result := ''; for i := Low(aBuf) to High(aBuf) do Result := Result + ByteToHex(aBuf[i]); // Format('%x', [aBuf[i]]) работает не совсем корректно в данном случае, 7 переводит в 7, а не 07 end; |
Шестнадцатеричное представление
1 |
'323633AB3835AD413734AC40393A3B3C3D3E3FAFB0B1B2B3B4A5A6A7A8A9AAB5' |
Или, расставив пробелы, получим
1 |
32 36 33 AB 38 35 AD 41 37 34 AC 40 39 3A 3B 3C 3D 3E 3F AF B0 B1 B2 B3 B4 A5 A6 A7 A8 A9 AA B5 |
Шестнадцатеричное представление -> байты
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
function StrHex2Hex(sHex: string): ArrayOfByte; var i: Integer; sHexLength: Integer; sHexWithoutSpaces: string; begin sHexWithoutSpaces := ''; for i := 1 to Length(SHex) do if SHex[i] <> ' ' then sHexWithoutSpaces := sHexWithoutSpaces + SHex[i]; sHexLength := Length(sHexWithoutSpaces); if (sHexLength > 0) and (sHexLength mod 2 = 0) then begin SetLength(Result, sHexLength div 2); for i := 0 to High(Result) do Result[i] := StrToInt('$' + Copy(sHexWithoutSpaces, i * 2 + 1, 2)); end; end; |
Posted in Delphi
Comments Off on Delphi. Hex метаморфозы с байтовой строкой или функции для перевода в Hex и Hex представление и обратно
Delphi. UniGUi. Синхронный и асинхронный режимы модальных окон
Все мы привыкли писать что-то такое для модальных окон
1 2 |
if LoginForm.ShowModal = mrOk then ShowMessage('authorized'); |
Но в UniGUI, для того, чтобы это срабатывало так как мы привыкли, надо подключать синхронный режим.
1 |
MainModule - > EnableSynchronousOperations |
По умолчанию эта галчонка отключена. Я сначала думал, что это баг, оказалось фича … Continue reading
Delphi. UniGUI. Веб / Мобильное приложение в стиле Hybrid
Продолжаем исследовать космический UniGUi. Оказывается, есть режим Hybrid, когда мы можем в одном проекте одновременно разрабатывать веб-десктоп и веб-мобильное приложение. Для этого, в проект нужно добавить мобильную форму, то есть так… Теперь, по одному адресу в сети, в зависимости от … Continue reading
Posted in Delphi
Comments Off on Delphi. UniGUI. Веб / Мобильное приложение в стиле Hybrid
Delphi.MD5
Через Indy
1 2 3 4 5 6 7 8 |
uses IdHashMessageDigest ... with TIdHashMessageDigest5.Create do try Result := AnsiLowerCase(HashStringAsHex(aString)); finally Free; end; |
Posted in Delphi
Comments Off on Delphi.MD5
Представление положительных и отрицательных чисел в памяти компьютера. Прямой и дополнительный код числа
Прямой код Прямой код – это представление числа в двоичной системе счисления, при котором первый (старший) разряд отводится под знак числа. Если число положительное, то в левый разряд записывается 0; если число отрицательное, то в левый разряд записывается 1. Таким образом, … Continue reading
Posted in Delphi
Comments Off on Представление положительных и отрицательных чисел в памяти компьютера. Прямой и дополнительный код числа