Redis
Redis (Remote Dictionary Server) is a fast database used for in-memory caching to reduce server load by reducing disk and/or network read and write operations.
Uses of Redis are:
Caching frequently accessed data to improve access time.
Session storage for web applications
Real-time analytics and leader boards.
Managing queues or task lists in background job systems.
How Redis Work?
Redis acts as a caching layer between the database and the client to speed up data access and reduce the load on the main database. When a client asks for data, the API Gateway forwards the request to Redis.
![]() |
Working of Redis |
If Redis has the data (cache hit), it returns it quickly through the API Gateway to the client. If the data is missing (cache miss), Redis retrieves it from the database, stores it in the cache for future requests, and then passes it back through the API Gateway to the client. This flow speeds up response times and reduces the database load.
Source : https://www.geeksforgeeks.org/system-design/introduction-to-redis-server/
FastReport get the current paper size from the printer and use it for the report
FastReport
can be configured to get the current paper size from the printer and use it for
the report. However, it requires some manual steps in your Delphi code to
correctly read the printer's settings and then apply them to the FastReport
report object.
Here's a
breakdown of how it works and a Delphi script to accomplish this.
Understanding the Process
- FastReport's Default Behavior: By default, FastReport uses
the TfrxReportPage.PaperSize property to determine the page
dimensions. This is often set to a standard size like DMPAPER_A4 at design time.
- Getting Printer Information: The key is to use the Windows
API and the Delphi Printers unit to access the TPrinter object. This object holds all
the configuration for the currently selected printer, including its DM_PAPERSIZE, DM_PAPERWIDTH, and DM_PAPERLENGTH properties.
- Applying to FastReport: Once you have the custom
dimensions, you can programmatically set the TfrxReportPage.PaperWidth and TfrxReportPage.PaperHeight properties. It's important to
set the PaperSize property to DMPAPER_USER (which has a value of 256) to signal that you are using
custom dimensions.
Delphi Script to Dynamically Set Paper Size
This script
demonstrates a function that can be called before a report is prepared or
printed. It gets the current printer's paper size and applies it to a
FastReport page.
http://googleusercontent.com/immersive_entry_chip/0
unit frxUtils;
interface
uses
Windows, Messages, SysUtils, Classes, frxClass, Printers, frxPrinters,
frxCustomDB,
frxDSys, frxDesign, frxGDIplus;
// This procedure gets the current
printer's paper dimensions and applies them
// to the specified FastReport page.
procedure SetReportPaperSizeFromPrinter(aReport:
TfrxReport);
implementation
procedure
SetReportPaperSizeFromPrinter(aReport: TfrxReport);
var
Device, Driver, Port: array[0..255] of Char;
hDeviceMode: THandle;
pDeviceMode: PDeviceMode;
frxPage: TfrxReportPage;
PaperWidth, PaperHeight: Integer;
begin
//
Ensure the printer is initialized and there is a report to work with
if
(aReport = nil) or (aReport.Pages[0] = nil) then
Exit;
//
Get the current printer's device mode information
Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
pDeviceMode := GlobalLock(hDeviceMode);
try
// Check if the DeviceMode is valid
if (pDeviceMode <> nil) and (pDeviceMode.dmSize >=
SizeOf(TDeviceMode)) then
begin
// Read the paper dimensions from the device mode.
// dmPaperWidth and dmPaperLength are in 0.1mm units.
PaperWidth := pDeviceMode.dmPaperWidth;
PaperHeight := pDeviceMode.dmPaperLength;
// Find the first report page
frxPage := aReport.Pages[0] as TfrxReportPage;
// Apply the custom paper size to the FastReport page
// It's crucial to set PaperSize to DMPAPER_USER to enable custom
dimensions
frxPage.PaperSize := DMPAPER_USER;
// FastReport's PaperWidth and PaperHeight properties are in
millimeters.
// So, we divide the DM values (in 0.1mm) by 10.
frxPage.PaperWidth := PaperWidth / 10;
frxPage.PaperHeight := PaperHeight / 10;
end;
finally
// Unlock and free the handle
if hDeviceMode <> 0 then
begin
GlobalUnlock(hDeviceMode);
GlobalFree(hDeviceMode);
end;
end;
end;
end.
### How to Use the Script
1.
**Save the Unit:** Save the code above as `frxUtils.pas` and add it to
your project.
2.
**Call the Procedure:** Before showing the report preview or printing,
call the `SetReportPaperSizeFromPrinter` procedure. This ensures the report is
sized correctly for the currently selected printer.
Here's an example of how you might call it
from a button click event:
```delphi
procedure TForm1.Button1Click(Sender:
TObject);
begin
//
Set the printer before preparing the report
//
This is an optional step if you want to use a specific printer instead of the
default
frxReport1.SelectPrinter;
//
Get the printer's custom size and apply it to the report page
SetReportPaperSizeFromPrinter(frxReport1);
//
Prepare and show the report
frxReport1.ShowPreparedReport;
end;
Untuk Cetak di Printer Epson Dot Matrix dan Agar Ukurannya bisa 1/4 Letter atau 1/2 Letter Menggunakan Bahasa Pemrograman Apapun
Gunakan fungsi page break di fast-report atau gunakan Character khusus untuk mengirim command ke printer seperti #12 untuk page break
Code Snippet : CommandString = 'Hello, this is a test page!' + #10#12;
Specifically, the #12 character constant is the control character for a Form Feed, which is the command that an Epson dot-matrix printer like the LX-310 understands as a page break. The #10 character is a Line Feed, which moves the print head to the next line.
Contoh Untuk Delphi memakai di bawah ini untuk Cetak Draft
procedure PrintMe(Content: TStringList);
var
sPrinter, sDriver, sPort, sTitle: array[0..255] of Char;
hPrinter, hDevMode: THandle;
DocInfo1: TDocInfo1;
W: DWORD;
S: String;
C: Char;
I: Integer;
begin
// page-break
C := #12;
// initialize the document structure
with DocInfo1 do begin
pDocName := StrPCopy(sTitle, 'Your Title Here');
pOutputFile := nil;
pDatatype := 'RAW';
end;
// get the current printer (sPrinter)
Printer.GetPrinter(sPrinter, sDriver, sPort, hDevMode);
// open the printer
OpenPrinter(sPrinter, hPrinter, nil);
try
try
// start document to spooler
StartDocPrinter(hPrinter, 1, @DocInfo1);
StartPagePrinter(hPrinter);
// send the 'Source' to the printer
for I := 0 to Source.Count - 1 do begin
S := Source.Strings;
if not WritePrinter(hPrinter, PChar(S), Length(S), W) then
Break;
end;
// send a page-break to the printer (optional)
if not WritePrinter(hPrinter, @C, 1, W) then
Break;
// end the page
EndPagePrinter(hPrinter);
// end the document
EndDocPrinter(hPrinter);
finally
// close the printer
ClosePrinter(hPrinter);
end;
except
// abort the job
AbortPrinter(hPrinter);
raise;
end;
end;
https://www.tek-tips.com/threads/printing-text-on-dotmatrix-printer.921897/
Setting Printer Epson Dot Matrix Agar Urutannya Sesuai Meskipun Dokumen Sangat Banyak
Best FTP and File Sharing Apps Windows - Total Commander
Mematikan Windows 10/11 Dengan Registry Tanpa Tool
Copy Script dibawah ini lalu save as reg dan jalankan lalu akan pause sampai 2033, atau bisa di ganti sendiri ke tahun kapanpun
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UpdatePolicy\Settings]
"PausedFeatureStatus"=dword:00000000
"PausedQualityStatus"=dword:00000000
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings]
"FlightSettingsMaxPauseDays"=dword:00000e42
"PauseFeatureUpdatesStartTime"="2023-11-06T14:03:37Z"
"PauseFeatureUpdatesEndTime"="2033-10-31T14:03:37Z"
"PauseQualityUpdatesStartTime"="2023-11-06T14:03:37Z"
"PauseQualityUpdatesEndTime"="2033-10-31T14:03:37Z"
"PauseUpdatesStartTime"="2023-11-06T14:03:37Z"
"PauseUpdatesExpiryTime"="2033-10-31T14:03:37Z"
Windows 10 |
Mematikan Windows Update 10/11 Kill Services (Hard Block) - Menunda Windows Update untuk Windows 10/11 (Soft Block)
Tool ini untuk menunda update sampai ke tanggal tertentu (soft block), atau bisa untuk hard block update Jalankan saja tool dibawah ini
https://greatis.com/stopupdates10/
atau bisa pakai WUB jika memang benar2 mau kill tasknya (tapi biasanya ini ngefek ke aplikasi yang butuh update)
link Windows Update Blocker sordum.org/downloads/?st-windows-update-blocker
Membuat Windows Menjadi Lebih Cepat Dengan Sekali Klik (NTLite)
Langsung saja download toolnya dan jalankan https://www.ntlite.com/download/
ada tool lain juga seperti https://msmgtoolkit.in/
ada tool lain seperti https://github.com/LeDragoX/Win-Debloat-Tools
berfungsi menghilangkan bloatware dan sejenisnya
Install Windows 11 Tanpa Login Microsoft Account (Windows 11 24H2 Builds 26120 dan lebih baru)
Windows 11 Versi 24H2 mewajibkan untuk login ke Microsft Account, ini jadi menyusahkan para teknisi, ada 2 cara untuk bypass loginnnya
Gunakan RUFUS v4.4 atau lebih baru lalu jalankan seperti biasa, pilih usb drive yang mau dijadikan installer
Pilih ISO yang akan dijadikan installer
lalu tutup command prompt dan pilih I don't have Internet
Pilih Continue With Limited Setup seperti dibawah
muncul command prompt ketikkan OOBE\BYPASSNRO
Close command prompt dan lanjut ke step selanjutnya pilih region, keyboard, dll seperti biasa
Lalu akan masuk ke window seperti dibawah maka langkahnya berhasil, tinggal di isi seperti biasa dan selesai
Jika perlu membuat windows 11 ringan anda bisa memakai tools ntlite.com/download/
Jika masih tidak bisa silahkan komen dibawah, saya akan berikan solusi yang lain.