2023年10月26日 星期四

mass spectrometer measures potassium DIY mass spectrometer measures potassium in dietary salt substitute

 https://youtu.be/nIKhUizkXxA?si=tmYzMywXETWHOeDm

button doorbell ESD Protection Circuits protection zener TVS uClamp3301D BAT54S BAV99 1N4148W AN015 - Input Protection Circuits

 https://electronics.stackexchange.com/questions/663623/mcu-input-pin-protection

button ESD Protection Circuits doorbell protection

 zener TVS uClamp3301D BAT54S BAV99  1N4148W 

https://resources.altium.com/p/beginners-guide-esd-protection-circuit-design-pcbs

https://circuitcellar.com/resources/ee-tips/active-esd-protection-for-microcontrollers-ee-tip/

Active ESD Protection for Microcontrollers (EE Tip #129) - Circuit Cellar

https://uk.rs-online.com/web/content/discovery/ideas-and-advice/push-button-switches-guide

https://www.electroschematics.com/musical-doorbell/

Schematic of the musical doorbell circuit

button  doorbell protection  Input Protection Circuits diode Isolated

interference - Microcontroller with a long wire for digital input - Electrical Engineering Stack Exchange
https://electronics.stackexchange.com/questions/49824/microcontroller-with-a-long-wire-for-digital-input
protection Protecting MCU digital input with 300m wires - Electrical Engineering Stack Exchange https://electronics.stackexchange.com/questions/607286/protecting-mcu-digital-input-with-300m-wires


https://en.wikipedia.org/wiki/Voltage_spike
SPD Switch  charge over switch EMC Filters  Surge Protection spikes Electromagnetic pulses
Inductor kickback
Voltage spike ELECTRICAL switch
Resistor-capacitor snubber configuration.
Resistor-capacitor snubber
Resistor-Capacitor (RC) Snubber Design for Power Switches | DigiKey
https://www.digikey.tw/en/articles/resistor-capacitor-rc-snubber-design-for-power-switches
https://www.quora.com/How-does-an-RC-Snubber-circuit-work
https://eepower.com/technical-articles/snubber-network-choices-design-and-evaluation/


delphi iocp socket tcpip network

     
https://sourceforge.net/p/synalist/code/HEAD/tree/trunk/
http://www.ararat.cz/synapse/doku.php/download
         Ararat Synapse Code  SynaSer serial library Synapse TCP/IP and serial library Winsock
http://visualsynapse.sourceforge.net/  
         VisualSynapse TCP/IP Delphi components based on Synapse.
http://synapse.ararat.cz/files/contrib/  
         Contributed Download Area - various samples and others.
http://synapse.ararat.cz/files/crypt/  
         Crypting libraries for SSL/TLS/SSH in Synapse
http://synapse.ararat.cz/files/W95ws2setup.exe  
         Winsock2 support for Windows95
http://www.wireshark.org/  
         Wireshark excellent tool for analyse and debugging of network communication.
https://www.nsoftware.com
https://www.nsoftware.com/products/
         Internet Communications and Security

voipobjects delphi-iocp-library voipobjects delphi-iocp-library  http://voipobjects.com/

https://github.com/tondrej/iocp-delphi
         Windows IO Completion Port wrapper class for Delphi and Free Pascal
          compilers: Delphi 7 or higher, Free Pascal 3.0.4 or higher
          targets: Windows XP/Windows Server 2003 or higher, both 32 and 64-bit

Fiber and IOCP API siqiyi/libfiber The high performance coroutine library
GitHub iqiyi libfiber OS platfroms including Linux, FreeBSD, MacOS, and Windows, which supports
 select, poll, epoll, kqueue, iocp, and even Windows GUI messages

Using beamer overlays with forest generated trees

HPScktSrvr at http://www.torry.net/ with the code pages.php?id= and a number sequence of 220#939383

Indy, ICS, Synapse, and Clever InetSuite,
ICS - The Internet Component Suite

iocpengine iocpengine - I/O Completion Port Engine for Delphi

TISAPIThreadPool; TIstringHelper; TIWPaintHandler. TIWPaintHandlerDsn. TIWPaintHandlerButton; TIWPaintHandlerCheckBox; TIWPaintHandlerComboBox ...

HttpSys2WebServer from DWScript use an IOCP-based server.

https://torry.net/components/internet/sockets/#939383

https://habr.com/ru/articles/145140/
Windows Sockets, IOCP и Delphi



//////////////////////////////////////////////////////////////////////////////////////////////////////
 Создание списков сокетов разных типов.
Инициализация подсистемы сокетов.
Создание очереди сообщений.
Создание пула для обработки очереди.
Создание событий для сокетов.
Создание потоков отслеживающих сокетные события( например подключение нового клиента)
procedure Init;
var
  WSAData: TWsaData;
  i: Integer;
begin
  gClients := TProtoStore.Create;
  gListeners := TProtoStore.Create;
  gServerClients := TProtoStore.Create;
  if WSAStartup(MAKEWORD(2, 2), WSAData) <> 0 then
    raise IOCPClientException.Create(sErrorInit_WSAtartup);
  gIOCP := CreateIoCompletionPort(INVALID_HANDLE_VALUE, 0, 0, CPUCount * 2);
  if gIOCP = INVALID_HANDLE_VALUE then
    raise IOCPClientException.Create(sErrorInit_CreateIoCompletionPort);
  for i := 1 to CPUCount * 2 do
 begin
    SetLength(gWorkers, Length(gWorkers) + 1);
    gWorkers[Length(gWorkers) - 1] := TWorkerThread.Create();
  end;
  gListenerAcceptEvent := WSACreateEvent;
  if gListenerAcceptEvent = WSA_INVALID_EVENT then
    raise IOCPClientException.Create(sErrorInit_WSACreateEvent);
  gServerClientsCloseEvent := WSACreateEvent;
  if gServerClientsCloseEvent = WSA_INVALID_EVENT then
    raise IOCPClientException.Create(sErrorInit_WSACreateEvent);
  gClisentsConnectAndCloseEvents := WSACreateEvent;
  if gClisentsConnectAndCloseEvents = WSA_INVALID_EVENT then
    raise IOCPClientException.Create(sErrorInit_WSACreateEvent);
  gClientSocketEventThread := TSocketEventThread.Create
    (gClisentsConnectAndCloseEvents, gClients, ET_EVENT_SIGNALED);
  gClientSocketEventThread.Start;
  gServerClientsSocketEventThread := TSocketEventThread.Create
    (gServerClientsCloseEvent, gServerClients, ET_EVENT_SIGNALED);
  gServerClientsSocketEventThread.Start;
  gServerSocketEventThread := TSocketEventThread.Create(gListenerAcceptEvent,
    gListeners, ET_EVENT_SIGNALED);
  gServerSocketEventThread.Start;
end;

diocp DIOCP 无锁队列 ZeroMQ QWorkers uJobPusher RabbitMQ websocket network

 https://www.opensourceagenda.com/projects/zserver4d
内置抗量子密码支持 https://en.wikipedia.org/wiki/SHA-3  支持了5大美国国家标准技术研究所(NIST)高级加密标准算法      rc6加密,通讯协议支持 https://en.wikipedia.org/wiki/RC6     Twofish加密,通讯协议支持 https://en.wikipedia.org/wiki/Twofish     Serpent加密,通讯协议支持 https://en.wikipedia.org/wiki/Serpent_(cipher)     Mars加密,通讯协议支持 https://en.wikipedia.org/wiki/MARS_(cipher)     Rijndael加密,通讯协议支持 https://en.wikipedia.org/wiki/Advanced_Encryption_Standard

 https://www.nuget.org/packages/SimpleMsgPack
 https://www.twblogs.net/a/5ef0629c33cbe858769e7fee
zmq_strerror - 台部落

 https://www.oschina.net/project/widgets/_project_list?company=0&tag=12&lang=0&os=156&sort=favorite&recommend=false&cn=false&weekly=false&p=150&type=ajax

 http://m.mamicode.com/info-detail-1515096.html
DIOCP之DEMO-登陆验证设计(二)-码迷移动版-m.mamicode.com

http://bbs.2ccc.com/topic.asp?topicid=460182
DIOCP开源项目-DIOCP3
http://www.cnblogs.com/DKSoft/p/3889125.html
目前diocp3的开源地址 https://github.com/ymofen/diocp3
https://code.google.com/archive/p/diocp/source/default/source?page=33
Google Code Archive - Long-term storage for Google Code Project Hosting.

https://www.cnblogs.com/hnxxcxg/category/1168706.html
DIOCP TDiocpCoderTcpServer异步任务投递队列TDiocpCoderTcpServer异步任务投递队列 
 delphi中间件  TDiocpCoderTcpServer数据序列和还原 TDiocpCoderTcpServer数据序列和还原 

 http://wedelphi.com/f/4/
DIOCP | WeDelphi Forum

 https://gitee.com/ymofen/diocp-v5
diocp-v5: iocp, websocket, delphi,http

https://github.com/yangyxd/YxdIOCP
yangyxd/YxdIOCP: Delphi Windows IOCP 通讯模型封装,基于DIOCP。YxdIocp包含有支持大并发的TCP服务组件、HTTP服务组件、UDP服务组件、WebSocket服务组件,和TCP、UDP等基础客户端组件。

https://github.com/ymofen/diocp-v5

diocp DIOCP  无锁队列 ZeroMQ QWorkers
uJobPusher RabbitMQ websocket

  diocp  websocket DIOCP 开源地址 DIOCP-v5开源项目地址https://github.com ... WebSocket + Spring Security + SpringData-Jpa + MySql工程结构说明java .

webflux · GitHub Topics

flex开源项目地址   https://github.com/flex-users/flexlib

 

 

Awesome Delphi

 Awesome Delphi
https://www.ancii.com/ayb3e4z7x/
Delphi编程技巧大全     http://www.delphitop.com/
Delphi盒子 www.2ccc.com
2Pascal-新时代的Pascal http://www.2pascal.com
WeDelphi http://www.WeDelphi.com
新大富翁论坛 http://www.dfwlt.com/forum.php
万一的博客:http://www.cnblogs.com/del/
原Delphi窖洞洞主博客:http://www.cnblogs.com/xalion
CnPack:http://www.cnpack.org/
       https://github.com/cnpack/cnvcl
QDAC(QQ官方群 250530692):http://blog.qdac.cc/
OrangeUI-Delphi移动开发利器(OrangeUI技术支持QQ群:10900297)
RPMP-Restful Plugin Midware for Pascal(QQ 群: 289501953): https://github.com/ZYHPRO/RPMP
MyBean轻量级配置框架,插件交流群: 205486036: https://github.com/ymofen/delphi-framework-MyBean
ABFrameWork(Delphi 框架) QQ交流群: 307455944 (非开源)
开源网络库之Delphi Cross Socket,由WiNDDRiVER()开发的跨平台网络库,代码风格优美,注释详细,唯一不足的是Demo略少,在Github上开源:https://github.com/winddriver/Delphi-Cross-SocketQQ交流群:152678031
开源网络库之DIOCP,由天地弦(www.diocp.org)开发的网络并发框架,多线程管理库diocp,经过长时间的测试,运行极为稳定,在Github上开源:https://github.com/ymofen/diocp-v5QQ交流群:638127021
ZServer4D,细雨老仙从商业项目(游戏类)剥离而出的云服务器中间件,可以承载百万级在线的分布式长连接负载,在Github上开源:https://github.com/PassByYou888/ZServer4DQQ交流群:490269542
FMXUI 跨平台UI组件库 https://github.com/yangyxd/FMXUI
YxdJSON Delphi 高性能 JSON 库(支持RTTI和序列化操作)支持平台: Windows, Android, iOS, Mac OS https://github.com/yangyxd/YxdJson
YxdIocp Delphi 高性能 IOCP 通讯模型组件包 (包括TCP、UDP、HTTP、WebSocket等服务器组件和客户端组件)支持平台: Windows https://github.com/yangyxd/YxdIOCP
YxdWorker Delphi 多线程高并发作务引擎 支持平台: Windows, Android, iOS, Mac OS https://github.com/yangyxd/YxdWorker
YxdGameFrame Unity 轻量级游戏开发消息引擎框架 支持平台: Windows, Android, iOS, Mac OS 等 https://github.com/yangyxd/YxdGameFrame
Wke (miniblink) For Delphi 对Wke,miniblink的封装。实现支持html5 的 WebUI(相对于dcef来说,它只需要一个dll,更加轻量),也可以用来制作内嵌的小型浏览器。支持平台: Windows (WinXP 及以上)https://github.com/yangyxd/wke-for-delphi
mOrMot: https://github.com/synopse/mORMot

https://github.com/Fr0sT-Brutal/awesome-delphi

Delphi IDE Theme Editor(DITE)是一个工具,用于自定义像Delphi(RAD Studio)这样的几个Object Pascal IDE的IDE颜色突出显示。
https://github.com/RRUZ/delphi-ide-theme-editor

DMVCFramework(简称)是一个流行的,功能强大的Delphi网页解决方案框架
https://github.com/danieleteti/delphimvcframework

Delphi REST Client API
使用Delphi REST客户端API来使用以任何编程语言编写的REST服务。
https://github.com/fabriciocolombo/delphi-rest-client-api

Virtual-TreeView
虚拟树视图是从底层构建的Delphi树视图控件。多年的发展使其成为当今最灵活和先进的树形控制系统之一。虚拟树视图开始提出改进现有解决方案的许多方面,并引入了一些前所未有的新技术和原理。
https://github.com/Virtual-TreeView/Virtual-TreeView

Delphi-OpenCV是Delphi中OpenCV库头文件的翻译。
https://github.com/Laex/Delphi-OpenCV

DUnitX是一个新的测试框架,从DUnit,NUnit和其他测试框架中提出了一些想法。它被设计为与Delphi 2010或更高版本一起使用,它使用了旧版Delphi中没有的语言/ RTL功能。
https://github.com/VSoftTechnologies/DUnitX

Delphi IDE Colorizer(DIC)是一个插件,它可以使RAD Studio IDE的工作空间
https://github.com/RRUZ/Delphi-IDE-Colorizer

CEF4Delphi是由SalvadorDíazFau创建的一个开源项目,用于在基于Delphi的应用程序中嵌入基于Chromium的浏览器。
https://github.com/salvadordf/CEF4Delphi

OmniThreadLibrary是一个简单易用的Delphi线程库。OTL的主要“卖点”(除了价格之外)是力量,简单和开放。只需要几行代码,就可以设置多个线程,在它们之间发送消息,处理Windows消息等等。
https://github.com/gabr42/OmniThreadLibrary

Power Supply current consumption consumption Reducing Relay Power Consumption Circuit Diagram Power-Saving Relay Driver | Full Electronics Project with Source Code

 Power Supply current consumption consumption   

Reducing Relay Power Consumption Circuit Diagram  

Power-Saving Relay Driver | Full Electronics Project with Source Code   

logic threshold  analogue switch  MAX4624 reaches  threshold
Reducing Relay Power Consumption Circuit Diagram

https://www.electroschematics.com/low-current-relay/

Power Supply current consumption consumption Reducing Relay Power Consumption Circuit Diagram
https://www.eeweb.com/reducing-relay-power-consumption/

https://www.eeweb.com/dual-relay-driver-board-circuit-schematic/
https://subscription.packtpub.com/book/iot-and-hardware/9781838982461/10/ch10lvl1sec14/exploring-a-relay-driver-circuit
Infrared Sensor Based Power Saver | Circuit Diagram Available
https://www.electronicsforu.com/electronics-projects/power-saving-relay-driver

https://www.homemade-circuits.com/how-to-make-relay-driver-stage-in/
Transistor Relay Driver Circuit with Formula and Calculations | Homemade Circuit Projects In this article we will comprehensively study a transistor relay driver circuit and learn how to design its configuration by calculating the parameters through formulas. Importance of Relay Relays are 











2023年10月25日 星期三

delphi ping scanner исходник интернет icmp. dll delphi ping интернет icmp. dll Русское программирование на Delphi. network

 https://delphisources.ru/forum/showthread.php?t=29617
http://www.delphimaster.ru/articles/icmp.html
https://www.thoughtco.com/implementing-ping-without-using-raw-sockets-4068869
http://www.codenet.ru/progr/delphi/stat/ping.php
http://forum.delphimaster.net/cgi-bin/forum.pl?id=1530002471&n=4&toprint=1
http://forum.delphimaster.net/cgi-bin/forum.pl?id=1530002471&n=4
https://kursovik.com/programming.html?lang=delphi


Вернуться           Форум по Delphi программированию > Все о Delphi > Интернет и сети
Перезагрузить страницу Нужно сделать ping на Delphi

Всем доброго времени суток! Задача избитая, но полноценного решения не нашел. Нужно сделать ping на Delphi. Нашел вроде хороший пример http://www.delphimaster.ru/articles/icmp.html , но не хватает мозгов как сделать, что бы размер буффера можно бло указывать произвольно? Не хватает мозгов переделать на динамический массив буффера данных. Кроме того хотелось бы услышать мнение по правильности этого кода, есть мнение, что этот код может вызывать утечки памяти... И еще интересно - в Delphi XE случайно не сделали "обертку" под использование функций из ICMP.DLL?





unit PingUnits;
 
interface
 
function Ping(Address:RawByteString):Boolean;
 
implementation
 
uses
  Windows, Winsock, SysUtils;
 
const
  IP_STATUS_BASE=11000;
  IP_SUCCESS=0;
  IP_BUF_TOO_SMALL=11001;
  IP_DEST_NET_UNREACHABLE=11002;
  IP_DEST_HOST_UNREACHABLE=11003;
  IP_DEST_PROT_UNREACHABLE=11004;
  IP_DEST_PORT_UNREACHABLE=11005;
  IP_NO_RESOURCES=11006;
  IP_BAD_OPTION=11007;
  IP_HW_ERROR=11008;
  IP_PACKET_TOO_BIG=11009;
  IP_REQ_TIMED_OUT=11010;
  IP_BAD_REQ=11011;
  IP_BAD_ROUTE=11012;
  IP_TTL_EXPIRED_TRANSIT=11013;
  IP_TTL_EXPIRED_REASSEM=11014;
  IP_PARAM_PROBLEM=11015;
  IP_SOURCE_QUENCH=11016;
  IP_OPTION_TOO_BIG=11017;
  IP_BAD_DESTINATION=11018;
  IP_ADDR_DELETED=11019;
  IP_SPEC_MTU_CHANGE=11020;
  IP_MTU_CHANGE=11021;
  IP_UNLOAD=11022;
  IP_GENERAL_FAILURE=11050;
  IP_PENDING=11255;
 
  MAX_IP_STATUS=IP_GENERAL_FAILURE;
 
type
  ip_option_information = packed record       // Информация заголовка IP (Наполнение
                                              // этой структуры и формат полей описан в RFC791.
      Ttl : byte;                                   // Время жизни (используется traceroute-ом)
      Tos : byte;                                   // Тип обслуживания, обычно 0
      Flags : byte;                             // Флаги заголовка IP, обычно 0
      OptionsSize : byte;                         // Размер данных в заголовке, обычно 0, максимум 40
      OptionsData : Pointer;                    // Указатель на данные
  end;
 
 icmp_echo_reply = packed record
      Address : u_long;                            // Адрес отвечающего
      Status : u_long;                           // IP_STATUS (см. ниже)
      RTTime : u_long;                           // Время между эхо-запросом и эхо-ответом
                                               // в миллисекундах
      DataSize : u_short;                        // Размер возвращенных данных
      Reserved : u_short;                        // Зарезервировано
      Data : Pointer;                            // Указатель на возвращенные данные
      Options : ip_option_information;         // Информация из заголовка IP
  end;
 
  PIPINFO = ^ip_option_information;
  PVOID = Pointer;
 
  function IcmpCreateFile() : THandle; stdcall; external 'ICMP.DLL' name 'IcmpCreateFile';
  function IcmpCloseHandle(IcmpHandle : THandle) : BOOL; stdcall; external 'ICMP.DLL'  name 'IcmpCloseHandle';
  function IcmpSendEcho(
                    IcmpHandle : THandle;    // handle, возвращенный IcmpCreateFile()
                    DestAddress : u_long;    // Адрес получателя (в сетевом порядке)
                    RequestData : PVOID;     // Указатель на посылаемые данные
                    RequestSize : Word;      // Размер посылаемых данных
                    RequestOptns : PIPINFO;  // Указатель на посылаемую структуру
                                             // ip_option_information (может быть nil)
                    ReplyBuffer : PVOID;     // Указатель на буфер, содержащий ответы.
                    ReplySize : DWORD;       // Размер буфера ответов
                    Timeout : DWORD          // Время ожидания ответа в миллисекундах
                   ) : DWORD; stdcall; external 'ICMP.DLL' name 'IcmpSendEcho';
 
 
 
function PingIp(Address:RawByteString):Boolean;
var
  hIP : THandle;
  pingBuffer : array [0..31] of Char;
  pIpe : ^icmp_echo_reply;
  wVersionRequested : WORD;
  lwsaData : WSAData;
  error : DWORD;
  destAddress : In_Addr;
begin
  Result:=False;
  hIP := IcmpCreateFile();
  GetMem( pIpe,
          sizeof(icmp_echo_reply) + sizeof(pingBuffer));
  try
    pIpe.Data := @pingBuffer;
    pIpe.DataSize := sizeof(pingBuffer);
 
    wVersionRequested := MakeWord(1,1);
    error := WSAStartup(wVersionRequested,lwsaData);
    if (error <> 0) then
    begin
      Exit;
    end;
    destAddress.S_addr:=inet_addr(PAnsiChar(Address));
    IcmpSendEcho(hIP,
                 destAddress.S_addr,
                 @pingBuffer,
                 sizeof(pingBuffer),
                 Nil,
                 pIpe,
                 sizeof(icmp_echo_reply) + sizeof(pingBuffer),
                 5000);
 
    error := GetLastError();
    if (error <> 0) then
    begin
      Exit;
    end;
    Result:=pIpe.Status=IP_SUCCESS;
  finally
    IcmpCloseHandle(hIP);
    WSACleanup();
    FreeMem(pIpe);
  end;
end;
 
function HostToIP(name: RawByteString; var Ip: RawByteString): Boolean;
var
  wsdata : TWSAData;
  hostName : array [0..255] of ansichar;
  hostEnt : PHostEnt;
  addr : PAnsiChar;
begin
  WSAStartup ($0101, wsdata);
  try
    gethostname (@hostName[0], sizeof (hostName));
    StrPCopy(hostName, name);
    hostEnt := gethostbyname (hostName);
    if Assigned (hostEnt) then
      if Assigned (hostEnt^.h_addr_list) then begin
        addr := hostEnt^.h_addr_list^;
        if Assigned (addr) then begin
          IP := Format ('%d.%d.%d.%d', [byte (addr [0]),
          byte (addr [1]), byte (addr [2]), byte (addr [3])]);
          Result := True;
        end
        else
          Result := False;
      end
      else
        Result := False
    else begin
      Result := False;
    end;
  finally
    WSACleanup;
  end
end;
 
function Ping(Address:RawByteString):Boolean;
var
  s:RawByteString;
 
begin
  Result:=HostToIP(Address,s);
  if Result then
    Result:=PingIp(s);
end;
 
 
end.




////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
unit PingUnits;
 
interface
 
function Ping(Address:RawByteString):Boolean;
 
implementation
 
uses
  Windows, Winsock, SysUtils;
 
const
  IP_STATUS_BASE=11000;
  IP_SUCCESS=0;
  IP_BUF_TOO_SMALL=11001;
  IP_DEST_NET_UNREACHABLE=11002;
  IP_DEST_HOST_UNREACHABLE=11003;
  IP_DEST_PROT_UNREACHABLE=11004;
  IP_DEST_PORT_UNREACHABLE=11005;
  IP_NO_RESOURCES=11006;
  IP_BAD_OPTION=11007;
  IP_HW_ERROR=11008;
  IP_PACKET_TOO_BIG=11009;
  IP_REQ_TIMED_OUT=11010;
  IP_BAD_REQ=11011;
  IP_BAD_ROUTE=11012;
  IP_TTL_EXPIRED_TRANSIT=11013;
  IP_TTL_EXPIRED_REASSEM=11014;
  IP_PARAM_PROBLEM=11015;
  IP_SOURCE_QUENCH=11016;
  IP_OPTION_TOO_BIG=11017;
  IP_BAD_DESTINATION=11018;
  IP_ADDR_DELETED=11019;
  IP_SPEC_MTU_CHANGE=11020;
  IP_MTU_CHANGE=11021;
  IP_UNLOAD=11022;
  IP_GENERAL_FAILURE=11050;
  IP_PENDING=11255;
 
  MAX_IP_STATUS=IP_GENERAL_FAILURE;
 
type
  ip_option_information = packed record       // Информация заголовка IP (Наполнение
                                              // этой структуры и формат полей описан в RFC791.
      Ttl : byte;                                   // Время жизни (используется traceroute-ом)
      Tos : byte;                                   // Тип обслуживания, обычно 0
      Flags : byte;                             // Флаги заголовка IP, обычно 0
      OptionsSize : byte;                         // Размер данных в заголовке, обычно 0, максимум 40
      OptionsData : Pointer;                    // Указатель на данные
  end;
 
 icmp_echo_reply = packed record
      Address : u_long;                            // Адрес отвечающего
      Status : u_long;                           // IP_STATUS (см. ниже)
      RTTime : u_long;                           // Время между эхо-запросом и эхо-ответом
                                               // в миллисекундах
      DataSize : u_short;                        // Размер возвращенных данных
      Reserved : u_short;                        // Зарезервировано
      Data : Pointer;                            // Указатель на возвращенные данные
      Options : ip_option_information;         // Информация из заголовка IP
  end;
 
  PIPINFO = ^ip_option_information;
  PVOID = Pointer;
 
  function IcmpCreateFile() : THandle; stdcall; external 'ICMP.DLL' name 'IcmpCreateFile';
  function IcmpCloseHandle(IcmpHandle : THandle) : BOOL; stdcall; external 'ICMP.DLL'  name 'IcmpCloseHandle';
  function IcmpSendEcho(
                    IcmpHandle : THandle;    // handle, возвращенный IcmpCreateFile()
                    DestAddress : u_long;    // Адрес получателя (в сетевом порядке)
                    RequestData : PVOID;     // Указатель на посылаемые данные
                    RequestSize : Word;      // Размер посылаемых данных
                    RequestOptns : PIPINFO;  // Указатель на посылаемую структуру
                                             // ip_option_information (может быть nil)
                    ReplyBuffer : PVOID;     // Указатель на буфер, содержащий ответы.
                    ReplySize : DWORD;       // Размер буфера ответов
                    Timeout : DWORD          // Время ожидания ответа в миллисекундах
                   ) : DWORD; stdcall; external 'ICMP.DLL' name 'IcmpSendEcho';
 
 
 
function PingIp(Address:RawByteString):Boolean;
var
  hIP : THandle;
  pingBuffer : array [0..31] of Char;
  pIpe : ^icmp_echo_reply;
  wVersionRequested : WORD;
  lwsaData : WSAData;
  error : DWORD;
  destAddress : In_Addr;
begin
  Result:=False;
  hIP := IcmpCreateFile();
  GetMem( pIpe,
          sizeof(icmp_echo_reply) + sizeof(pingBuffer));
  try
    pIpe.Data := @pingBuffer;
    pIpe.DataSize := sizeof(pingBuffer);
 
    wVersionRequested := MakeWord(1,1);
    error := WSAStartup(wVersionRequested,lwsaData);
    if (error <> 0) then
    begin
      Exit;
    end;
    destAddress.S_addr:=inet_addr(PAnsiChar(Address));
    IcmpSendEcho(hIP,
                 destAddress.S_addr,
                 @pingBuffer,
                 sizeof(pingBuffer),
                 Nil,
                 pIpe,
                 sizeof(icmp_echo_reply) + sizeof(pingBuffer),
                 5000);
 
    error := GetLastError();
    if (error <> 0) then
    begin
      Exit;
    end;
    Result:=pIpe.Status=IP_SUCCESS;
  finally
    IcmpCloseHandle(hIP);
    WSACleanup();
    FreeMem(pIpe);
  end;
end;
 
function HostToIP(name: RawByteString; var Ip: RawByteString): Boolean;
var
  wsdata : TWSAData;
  hostName : array [0..255] of ansichar;
  hostEnt : PHostEnt;
  addr : PAnsiChar;
begin
  WSAStartup ($0101, wsdata);
  try
    gethostname (@hostName[0], sizeof (hostName));
    StrPCopy(hostName, name);
    hostEnt := gethostbyname (hostName);
    if Assigned (hostEnt) then
      if Assigned (hostEnt^.h_addr_list) then begin
        addr := hostEnt^.h_addr_list^;
        if Assigned (addr) then begin
          IP := Format ('%d.%d.%d.%d', [byte (addr [0]),
          byte (addr [1]), byte (addr [2]), byte (addr [3])]);
          Result := True;
        end
        else
          Result := False;
      end
      else
        Result := False
    else begin
      Result := False;
    end;
  finally
    WSACleanup;
  end
end;
 
function Ping(Address:RawByteString):Boolean;
var
  s:RawByteString;
 
begin
  Result:=HostToIP(Address,s);
  if Result then
    Result:=PingIp(s);
end;
 
 
end.



В общем вместо
Код:
1
    
pingBuffer : array [0..31] of AnsiChar;
я написал
Код:
1
    
pingBuffer : array of AnsiChar;
Потом инициализирую переменную
Код:
1
    
SetLength(pingBuffer, 1452);
и заменил везде
Код:
1
    
sizeof(pingBuffer)
на
Код:
1
    
Length(pingBuffer)
Адрес массива передаю также:
Код:
1
    
pIpe.Data := @pingBuffer;
Вроде все работает, но вопрос - правильно ли я все сделал? Больше всего волнует вопрос: передача адреса на статический и динамический массив одинаково выполняется в Делфи? Я имею ввиду синтаксически...

Да, на счет 64 байт я тоже заметил, поэтому явно везде указал AnsiChar. А за @pingBuffer[0] спасибо, ошибок при работе не вызвало, остается только креститься и молиться, что бы работало



 Note that the Winsock 1.1 WSAStartup function must be called prior to using the functions exposed by ICMP.DLL. If you do not do this, the first call to IcmpSendEcho will fail with error 10091 (WSASYSNOTREADY).

Below you can find the Ping unit's source code. Here are two examples of usage.
Example 1: Code Snippet

uses Ping;...​
const ADP_IP = '208.185.127.40'; (* http://delphi.about.com *)
beginIf  Ping.Ping(ADP_IP) then ShowMessage('About Delphi Programming reachable!');
end;

Example 2: Console Mode Delphi Program

Our next example is a console mode Delphi program that uses the Ping unit: . Here's the Ping unit's source:

unit Ping;​
interfaceuses
Windows, SysUtils, Classes;
type
TSunB = packed record
s_b1, s_b2, s_b3, s_b4: byte;
end;
TSunW = packed record
s_w1, s_w2: word;
end;
PIPAddr = ^TIPAddr;
TIPAddr = record
case integer of
0: (S_un_b: TSunB);1: (S_un_w: TSunW);2: (S_addr: longword);
end;IPAddr = TIPAddr;
function IcmpCreateFile : THandle; stdcall; external 'icmp.dll';
function IcmpCloseHandle (icmpHandle : THandle) : boolean;
stdcall; external 'icmp.dll'
function IcmpSendEcho
(IcmpHandle : THandle; DestinationAddress : IPAddr;
RequestData : Pointer; RequestSize : Smallint;
RequestOptions : pointer;
ReplyBuffer : Pointer;
ReplySize : DWORD;
Timeout : DWORD) : DWORD; stdcall; external 'icmp.dll';
function Ping(InetAddress : string) : boolean;
implementationuses
WinSock;
function Fetch(var AInput: string;
const ADelim: string = ' ';
const ADelete: Boolean = true)
: string;
var
iPos: Integer;
begin
if ADelim = #0 then begin
// AnsiPos does not work with #0
iPos := Pos(ADelim, AInput);
end else begin
iPos := Pos(ADelim, AInput);
end;
if iPos = 0 then begin
Result := AInput;
if ADelete then begin
AInput := '';
end;
end else begin
result := Copy(AInput, 1, iPos - 1);
if ADelete then begin
Delete(AInput, 1, iPos + Length(ADelim) - 1);
end;
end;
end;
procedure TranslateStringToTInAddr(AIP: string; var AInAddr);
var
phe: PHostEnt;pac: PChar;GInitData: TWSAData;
begin
WSAStartup($101, GInitData);
try
phe := GetHostByName(PChar(AIP));
if Assigned(phe) thenbegin
pac := phe^.h_addr_list^;
if Assigned(pac) then
begin
with TIPAddr(AInAddr).S_un_b do begin
s_b1 := Byte(pac[0]);s_b2 := Byte(pac[1]);s_b3 := Byte(pac[2]);s_b4 := Byte(pac[3]);
end;
end
else
begin
raise Exception.Create('Error getting IP from HostName');
end;
end
else
begin
raise Exception.Create('Error getting HostName');
end;
except
FillChar(AInAddr, SizeOf(AInAddr), #0);
end;WSACleanup;
end;
function Ping(InetAddress : string) : boolean;
var
Handle : THandle;
InAddr : IPAddr;
DW : DWORD;
rep : array[1..128] of byte;
begin
result := false;Handle := IcmpCreateFile;
if Handle = INVALID_HANDLE_VALUE then
Exit;
TranslateStringToTInAddr(InetAddress, InAddr);
DW := IcmpSendEcho(Handle, InAddr, nil, 0, nil, @rep, 128, 0);Result := (DW 0);IcmpCloseHandle(Handle);
end;​
end.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////




Пингуем (Ping) под Delphi
1
Пингуем (Ping) под Delphi

Протокол Ping предназначен для тестирования компьютерных соединений в Интернете путём посылки через протокол Internet Protocol (IP) по обределённому адресу сообщения и ожидания от него ответа.

ICMP - Internet Control Message Protocol. ICMP служит для передачи сообщений об ошибках а так же управляющих сообщений . ICMP-тест может показать насколько быстро проходит информация между двумя узлами в Интернете.

    Запускаем Delphi;
    В Новом проекте добавляем в форму Tbutton, Tedit и Tmemo;
    Вставляем “winsock”;
    объявляем структурку для IP-заголовка:

type IPINFO = record
  Ttl     : char;
  Tos     : char;
  IPFlags : char;
  OptSize : char;
  Options : ^char;
end;

5. объявляем структурку для хранения ICMP пакета:

type  ICMPECHO = record
  Source   : longint;
  Status   : longint;
  RTTime   : longint;
  DataSize : Shortint;
  Reserved : Shortint;
  pData    : ^variant;
  i_ipinfo : IPINFO;
end;

6. Объявляем функции и процедуры, которые мы будем вызывать из ICMP.DLL

TIcmpCreateFile =
  function():integer;{$IFDEF WIN32} stdcall; {$ENDIF}
TIcmpCloseHandle =
  procedure(var handle:integer);{$IFDEF WIN32} stdcall;{$ENDIF}
TIcmpSendEcho =
  function(var handle:integer; endereco:DWORD; buffer:variant;
  tam:WORD; IP:IPINFO; ICMP:ICMPECHO; tamicmp:DWORD;
  tempo:DWORD):DWORD;{$IFDEF WIN32} stdcall; {$ENDIF}

7. В Tbutton в событие Onclick вставляем следующий код:

procedure TForm1.Button1Click(Sender: TObject);
var
wsadt : wsadata;
icmp :icmpecho;
HNDicmp : integer;
hndFile :integer;
Host :PHostEnt;
Destino :in_addr;
Endereco :^DWORD;
IP : ipinfo;
Retorno :integer;
dwRetorno :DWORD;
x :integer;

IcmpCreateFile : TIcmpCreateFile;
IcmpCloseHandle : TIcmpCloseHandle;
IcmpSendEcho : TIcmpSendEcho;

begin
if (edit1.Text = '') then begin
Application.MessageBox('Enter a HostName ro a IP Adress',
'Error', MB_OK);
exit;
end;
HNDicmp := LoadLibrary('ICMP.DLL');
if (HNDicmp  0) then begin
@IcmpCreateFile := GetProcAddress(HNDicmp,'IcmpCreateFile');
@IcmpCloseHandle := GetProcAddress(HNDicmp,'IcmpCloseHandle');
@IcmpSendEcho := GetProcAddress(HNDicmp,'IcmpSendEcho');
if (@IcmpCreateFile=nil) or (@IcmpCloseHandle=nil) or
   (@IcmpSendEcho=nil) then begin
Application.MessageBox('Error getting ICMP Adress','Error', MB_OK);
FreeLibrary(HNDicmp);
end;
end;
Retorno := WSAStartup($0101,wsadt);

if (Retorno  0) then begin
Application.MessageBox('Can?t Load WinSockets','WSAStartup', MB_OK);
WSACleanup();
FreeLibrary(HNDicmp);
end;

Destino.S_addr := inet_addr(Pchar(Edit1.text));
if (Destino.S_addr = 0) then begin
Host := GetHostbyName(PChar(Edit1.text));
end
else begin
Host := GetHostbyAddr(@Destino,sizeof(in_addr), AF_INET);
end;

if (host = nil) then begin
Application.MessageBox('Host not found','Error', MB_OK);
WSACleanup();
FreeLibrary(HNDicmp);
exit;
end;
memo1.Lines.Add('Pinging ' + Edit1.text);

Endereco := @Host.h_addr_list;

HNDFile := IcmpCreateFile();
for x:= 0 to 4 do begin
Ip.Ttl := char(255);
Ip.Tos := char(0);
Ip.IPFlags := char(0);
Ip.OptSize := char(0);
Ip.Options := nil;

dwRetorno := IcmpSendEcho(
HNDFile,
Endereco^,
null,
0,
Ip,
Icmp,
sizeof(Icmp),
DWORD(5000));
Destino.S_addr := icmp.source;
Memo1.Lines.Add('Ping ' + Edit1.text);
end;


IcmpCLoseHandle(HNDFile);
FreeLibrary(HNDicmp);
WSACleanup();
end;

У данного примера есть один недостаток - программа не воспримет доменное имя, только IP-адресс. Для пользователей NT не используйте функцию IcmpCloseHandle. Это всё.....

Ну и в конце полный исходный код примера:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
winsock, StdCtrls;

type
IPINFO = record
Ttl :char;
Tos :char;
IPFlags :char;
OptSize :char;
Options :^char;
end;

type
ICMPECHO = record
Source :longint;
Status :longint;
RTTime :longint;
DataSize:Shortint;
Reserved:Shortint;
pData :^variant;
i_ipinfo:IPINFO;
end;

TIcmpCreateFile =
  function():integer; {$IFDEF WIN32} stdcall; {$ENDIF}
TIcmpCloseHandle =
  procedure(var handle:integer);{$IFDEF WIN32} stdcall; {$ENDIF}
TIcmpSendEcho =
  function(var handle:integer; endereco:DWORD; buffer:variant;
  tam:WORD; IP:IPINFO; ICMP:ICMPECHO; tamicmp:DWORD;
  tempo:DWORD):DWORD;{$IFDEF WIN32} stdcall; {$ENDIF}

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public

end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
wsadt : wsadata;
icmp :icmpecho;
HNDicmp : integer;
hndFile :integer;
Host :PHostEnt;
Destino :in_addr;
Endereco :^DWORD;
IP : ipinfo;
Retorno :integer;
dwRetorno :DWORD;
x :integer;

IcmpCreateFile : TIcmpCreateFile;
IcmpCloseHandle : TIcmpCloseHandle;
IcmpSendEcho : TIcmpSendEcho;

begin
if (edit1.Text = '') then begin
Application.MessageBox('Digite um HostName ou um End. IP',
'Error', MB_OK);
exit;
end;
HNDicmp := LoadLibrary('ICMP.DLL');
if (HNDicmp  0) then begin
@IcmpCreateFile := GetProcAddress(HNDicmp,'IcmpCreateFile');
@IcmpCloseHandle := GetProcAddress(HNDicmp,'IcmpCloseHandle');
@IcmpSendEcho := GetProcAddress(HNDicmp,'IcmpSendEcho');
if (@IcmpCreateFile=nil) or (@IcmpCloseHandle=nil) or
   (@IcmpSendEcho=nil) then begin
Application.MessageBox('Erro pegando endereзos ICMP','Error', MB_OK);
FreeLibrary(HNDicmp);
end;
end;
Retorno := WSAStartup($0101,wsadt);

if (Retorno  0) then begin
Application.MessageBox('Nгo foi possнvel carregar WinSockets',
    'WSAStartup',MB_OK);
WSACleanup();
FreeLibrary(HNDicmp);
end;

Destino.S_addr := inet_addr(Pchar(Edit1.text));
if (Destino.S_addr = 0) then begin
Host := GetHostbyName(PChar(Edit1.text));
end
else begin
Host := GetHostbyAddr(@Destino,sizeof(in_addr), AF_INET);
end;

if (host = nil) then begin
Application.MessageBox('Host nгo encontrado','Error', MB_OK);
WSACleanup();
FreeLibrary(HNDicmp);
exit;
end;
memo1.Lines.Add('Pinging ' + Edit1.text);

Endereco := @Host.h_addr_list;

HNDFile := IcmpCreateFile();
for x:= 0 to 4 do begin
Ip.Ttl := char(255);
Ip.Tos := char(0);
Ip.IPFlags := char(0);
Ip.OptSize := char(0);
Ip.Options := nil;

dwRetorno := IcmpSendEcho(
HNDFile,
Endereco^,
null,
0,
Ip,
Icmp,
sizeof(Icmp),
DWORD(5000));
Destino.S_addr := icmp.source;
Memo1.Lines.Add('Pingou ' + Edit1.text);
end;


IcmpCLoseHandle(HNDFile);
FreeLibrary(HNDicmp);
WSACleanup();
end;

end.

home automation distribution Electrical Distribution Board Wiring Diagram Aruduno Based Industrial PLC

Electrical Distribution Board    Wiring Diagram

 https://www.unipi.technology/products/family-house-automation-system-166

Family house automation system | Unipi

UniPi Axon Raspberry PI Based PLC

Aruduno Based Industrial PLC

ESP32 Industrial Controller with WIFI Digital 24V from NORVI Controllers on Tindie

IEC 61131-3: IL, FBD, LD, SFC, ST, CFC, powerful library management

home automation HACKDAY IO

Nextech | PLC- programovanie riadiacej jednotky UniPi Neuron v grafickom prostredí Node

https://www.kincony.com/2021/07/12

07/12/2021 - Smart Home Automation | KinCony
https://www.kincony.com/product/power-distribution-box
KC868-A8S ESP32 Ethernet RS485 Relay 4G GSM Development Board Switch MQTT HTTP ESPhome Home Assistant Tasmota DIY
KC868-AIO ESP32 All In One Board 58CH DI 32CH DO 16CH AO 19CH AI For Home Assistant By ESPHome
Smart Home Automation Module Controller System Switch Remote Power Circuit Breaker Distribution Box Board   phase Cabinet

https://www.kincony.com/smart-electrical-distribution-panel-tuya-home-assistant-8ch.html
Home Automation Kits Electricity meter Distribution board Electrical Wires & Cable, electronics, electrical Wires Cable png
DIY home automation system: main controller board. Autonomous controller and a bridge between my other DIY
home automation  controller relay

https://store.ncd.io/product/industrial-relay-controller-16-channel-spdt-uxp-expansion-port/
Industrial Relay Controller 16-Channel SPDT + UXP Expansion Port
smartDEN IP 16 Relay Web enabled Module with DIN Rail BOX

relay PID PRO DIN Rail Mount  Relay DIN Rail Mounted Slim Relay Module SPDT
industrial  relay PID PRO DIN Rail Mount  Relay  Module SPDT


The Basics of Control Relays | Relay Control Systems | Textbook
high quality Single Pole Double Throw Relay(SPDT).
DPDT stands for double-pole double-throw relay
din rail mount
GEYA 4 Channel Relay Module 1 SPDT DIN Rail Mount 5V 12V 24V DC/AC Interface Relay Module for PLC GEYA 4 Channel Relay Module 1 SPDT DIN Rail Mount 12V 24V DC/AC Interface Relay Module
industrial relay controller din rail mount Industrial Controller surge protection
PHOENIX CONTACT TT-ST-M-EX(I)-24DC  Surge Protector, Mains Surge Protector, 2 Pole, 10 kA, 30 VDC, DIN Rail
https://de.farnell.com/en-DE/phoenix-contact/tt-st-m-ex-i-24dc/surge-protect-10ka-30vdc-din-rail/dp/3285615

industrial vision systems framework Vision image processing software

 https://www.opto-e.com/en/products/fabimage-lib-suite

https://www.adaptive-vision.com/en/software/library/ 

https://forums.ni.com/t5/Machine-Vision/IMAQ-imgPlotDC2/td-p/2142020

https://github.com/topics/machine-vision

https://www.svs-vistek.com/en/imaging-components/svs-machine-vision.php?t=software

https://www.advantech.com/en/products/intelligent-vision-camera-software/sub_video_acquisition_and_encoding

https://www.pepperl-fuchs.com/global/en/classid_1928.htm

Vision System | Industrial Vision Systems, Image Processing | See Overview

https://www.teledynedalsa.com/en/products/imaging/vision-software/

https://en.wikipedia.org/wiki/Industrial_process_imaging

https://www.vision-systems.com/

http://net.bangong.cn:8806/content/details67_628.html

https://www.mdpi.com/2076-3417/12/22/11565/html

Applied Sciences | Free Full-Text | A Machine Vision Development Framework for Product Appearance Quality Inspection

https://viso.ai/computer-vision/the-most-popular-computer-vision-tools/

2023年10月24日 星期二

blender3d geometrynodes b3d now animate logos images Reaction Diffusion with Simulation Nodes Reaction Diffusion Resources 3D models Materials Dev Tools Blender

https://blendermarket.com/products/ird-gn

Instant Reaction Diffusion - Geometry Nodes Procedural Organic patterns generator - Blender Market

blender3d geometrynodes b3d now animate logos images Reaction Diffusion with Simulation Nodes mesh with the Reaction diffusion generator in real-time! Control sim details  keyframe everything easily. More demo scenes soon. Gumroad & Blendermarket will be updated tomorrow

 Reaction Diffusion with Simulation Nodes - Blender 3.6 

Reaction Diffusion with Simulation Nodes  Blender 3.6+ Geometry Nodes Reaction Diffusion Solver 

https://blender.stackexchange.com/questions/220498/how-to-generate-reaction-diffusion-animation

Seven Experiments in Procedural Animation

https://www.karlsims.com/seven.html

Experiments in Procedural Animation Seven Experiments in Procedural Animation

Zephyr www.zephyr-soft.net Zephyr is a small real-time operating system RTOS

 https://en.wikipedia.org/wiki/Zephyr_%28operating_system%29

https://github.com/d-mozulyov/Tiny.Library 

https://se.ewi.tudelft.nl/desosa2019/chapters/zephyr/

https://slowbootkernelhacks.blogspot.com/2020/11/zephyr-rtos-project.html

 Python 3: Script interpreter and packages
 CMake/Ninja/Make: Build system
 Device Tree Compiler: Compiles device tree hardware descriptions
 Toolchain: gcc for Arm, RISC-V, x86, etc.
 Debug/Flash Tools: J-Link, pyOCD, OpenOCD, etc.
 West: Custom tool for repository management, build/flash/debug assistance, and image signing
 Zephyr Git repositories: The source code!

github data structure and algorithm pascal generic algorithms and data structures for lazarus/free pascal

 https://github.com/avk959/LGenerics

https://github.com/topics/multiset

https://github.com/topics/priority-queue?o=desc&s=updated&utf8=%E2%9C%93

https://github.com/topics/multimap?o=desc&s=forks

https://github.com/topics/pascal-library

https://github.com/Fr0sT-Brutal/awesome-pascal/blob/master/README.md

Collection of generic algorithms language:Pascal 

https://github.com/search?q=delphi+algorithms++language%3AMarkdown&type=code&l=Markdown

Small-C is both a subset of the C programming language, suitable for resource-limited microcomputers and embedded systems, Cross Small-C implementation based microcomputers

 https://en.wikipedia.org/wiki/Small-C

https://godbolt.org/

 

https://forum.community.tw/t/topic/65

 https://www.renesas.com/us/en/software-tool/cc-compiler-package-superh-family#additional_details
"C/C++ Compiler Package for SuperH Family Software Component List (PDF | English, 日本語)".

 

https://dansanderson.com/mega65/
https://dansanderson.com/mega65/cross-development/
https://dansanderson.com/mega65/cross-development-2/
          https://m65digest.substack.com/
          https://m65digest.substack.com/p/cross-development-for-fun-and-profit                              https://files.mega65.org/html/main.php?id=4fc0ab25-e381-4a64-a43c-d1d338166a7c
          https://files.mega65.org/html/main.php?id=8b189d0b-ea1e-45a7-a4de-87bcb0b11696
          https://files.mega65.org/html/main.php?id=3ef45802-446a-4325-bcc2-b387f818b33c https://www.forth.com/forth/
https://github.com/ptorric/figforth
https://github.com/timmoorhouse/mega65-forth
https://github.com/timmoorhouse/mega65-forth/wiki/Getting-Started

Python: The Best Image Processing Libraries OpenCV. Source OpenCV Scikit-Image. Source: sci-kit image SciPy. Source Scipy Pillow/PIL. PIL (Python Imaging Library NumPy Mahotas SimpleITK Pgmagick

 https://en.wikipedia.org/wiki/Digital_image_processing
OpenCV. Source OpenCV
 Scikit-Image. Source: sci-kit image
 SciPy. Source Scipy
 Pillow/PIL. PIL (Python Imaging Library
 NumPy Mahotas  SimpleITK Pgmagick
10-best-image-processing-libraries-in-python

 neural-enhance pillow Tech Vetting skill assessments in seconds! thumbor python-qrcode
scikit-image OpenCV MATLAB SciPy Cloudinary FFMPEG
https://python.libhunt.com/compare-thumbor-vs-neural-enhance
https://python.libhunt.com/neural-enhance-alternatives
https://github.com/alexjc/neural-enhance
neural-enhance pillow   thumbor python-qrcode scikit-image OpenCV MATLAB SciPy Cloudinary FFMPEG

https://scikit-image.org/
https://sharky93.github.io/docs/gallery/auto_examples/plot_canny.html
https://en.wikipedia.org/wiki/Scikit-image
Image Processing Libraries scikit-image github awesome
https://github.com/vinta/awesome-python
https://github.com/krzjoa/awesome-python-data-science

https://github.com/vinta/awesome  image processing

image measurement Bias Ratio opencv vision measurement Otsu GaussianBlur threshold matplotlib pyplot subplot imshow threshold Canny Edge Detection

image  measurement Bias Ratio opencv vision measurement
Otsu GaussianBlur threshold matplotlib pyplot subplot imshow threshold
Canny Edge Detection

OpenCV Otsu’s Binarization thresholding bias  evaluated  carrying opencv  Otsu’s binarization bimodal Thresholding  algorithm Otsu’s binarization

https://stackoverflow.com/questions/68177046/opencv-threshold-otsu-with-threshold-binary-logic
https://docs.opencv.org/4.x/d7/d4d/tutorial_py_thresholding.html
https://stackoverflow.com/questions/36172913/opencv-depth-map-from-uncalibrated-stereo-system
http://aishelf.org/yolo-opencv/
YOLO Darknet OpenCV Non Maxima Suppression (NMS) Reduce detected classes
http://aishelf.org/yolo/
YOLO (Part 1) Introduction with Darknet
Object detection principle YOLO preparation
https://github.com/AlexeyAB/darknet
http://aishelf.org/tag/colaboratory/

https://pyimagesearch.com/2016/03/28/measuring-size-of-objects-in-an-image-with-opencv/
https://roboflow.com/?ref=pyimagesearch
https://universe.roboflow.com/pyimagesearch?ref=pyimagesearch
https://pyimagesearch.com/2016/03/21/ordering-coordinates-clockwise-with-python-and-opencv/
https://pyimagesearch.com/2015/05/04/target-acquired-finding-targets-in-drone-and-quadcopter-video-streams-using-python-and-opencv/
https://pyimagesearch.com/2021/05/12/opencv-edge-detection-cv2-canny/
https://pyimagesearch.com/2016/03/28/measuring-size-of-objects-in-an-image-with-opencv/
https://pysource.com/2021/05/28/measure-size-of-an-object-with-opencv-aruco-marker-and-python/
https://forum.opencv.org/t/getoptimalnewcameramatrix-aspect-ratio-distortion/10258
calibration binocular vision measurement OpenCV center Principal Point calibration matrix
https://stackoverflow.com/questions/65583554/python-opencv-calibratecamera-returning-camera-matrix-but-it-is-nonsensical
https://docs.opencv.org/3.4/d9/d0c/group__calib3d.html

https://www.edge-ai-vision.com/2012/08/building-machines-that-see-finding-edges-in-images/
https://docs.opencv.org/4.x/da/d5c/tutorial_canny_detector.html
https://www.semanticscholar.org/paper/A-stereo-vision-measurement-system-Based-on-OpenCV-Lu-Wang/a160652b7365e8b74735e98a9fef094f318f52fe

https://www.mdpi.com/2313-433X/4/6/74
J. Imaging | Free Full-Text | A Review of Supervised Edge Detection Evaluation Methods and an Objective Comparison of Filtering Gradient Computations Using Hysteresis Thresholds
https://www.researchgate.net/publication/339551773_A_Performance_Comparison_of_Edge_Detection_Techniques_for_Printed_and_Handwritten_Document_Images
https://www.mdpi.com/1424-8220/20/13/3649
Sensors | Free Full-Text | Design of an Edge-Detection CMOS Image Sensor with Built-in Mask Circuits
https://www.researchgate.net/figure/Figure-1-Canny-edge-detection-process_fig1_220753963

https://en.wikipedia.org/wiki/Edge_detection
[PDF] Lecture 5: Gradients and Edge Detection What Are Edges? Boundaries of objects Boundaries of Lighting Types of Edges (1D Profiles
Gradients and Edge Detection Boundaries of objects Boundaries
Transform Ridge detection
Hough transform
Hough transform Generalized Hough transform
Phase Stretch Transform (PST)
http://what-when-how.com/biomedical-image-analysis/detection-of-circles-and-ellipses-with-the-hough-transform-biomedical-image-analysis/
Line Detection with Hough Transform

    Convolution § Applications
    Edge-preserving filtering
    Feature detection (computer vision) for other low-level feature detectors
    Image derivative
    Gabor filter
    Image noise reduction
    Kirsch operator for edge detection in the compass directions
    Ridge detection for relations between edge detectors and ridge detectors
    Log Gabor filter
    Phase stretch transform
https://en.wikipedia.org/wiki/Category:Image_processing
https://en.wikipedia.org/wiki/Category:Edge_detection
https://en.wikipedia.org/wiki/Edge_detection
 https://en.m.wikipedia.org/wiki/corner_detection
industrial Bias Ratio vision measurement Canny Edge Detection Edge-Detection Filters
industrial Ratio Canny Edge measurement
https://ietresearch.onlinelibrary.wiley.com/doi/full/10.1049/ipr2.12764
Geo‐information mapping improves Canny edge detection method - Lijun - 2023 - IET Image Processing - Wiley Online Library
https://link.springer.com/chapter/10.1007/978-3-031-23504-7_7
SATMeas - Object Detection and Measurement: Canny Edge Detection Algorithm | SpringerLink
https://consultglp.com/2019/10/19/what-is-bias-in-measurement/

bias  evaluated  carrying  repeat analysis suitable containing amount analyte reference value calculated  difference between  average  results  reference value
https://towardsdatascience.com/overfitting-in-deep-learning-what-is-it-and-how-to-combat-it-9760d25ad05b
https://www.frontiersin.org/articles/10.3389/fnins.2021.676220/full
Frontiers | PupilEXT: Flexible Open-Source Platform for High-Resolution Pupillometry in Vision Research
https://www.meccanismocomplesso.org/en/opencv-python-the-otsus-binarization-for-thresholding/
OpenCV & Python – The Otsu’s Binarization for thresholding – Meccanismo Complesso
bias  evaluated  carrying opencv  Otsu’s binarization bimodal Thresholding  algorithm Otsu’s binarization

OpenCV 3 Image Thresholding and Segmentation
https://www.bogotobogo.com/python/OpenCV_Python/python_opencv3_Image_Global_Thresholding_Adaptive_Thresholding_Otsus_Binarization_Segmentations.php

corner detection discrete cosine transform improved canny edge detection algorithm dct deutsche nationalbibliothek canny-edge detection algorithm
https://www.codeproject.com/Articles/93642/Canny-Edge-Detection-in-C
Canny Edge Detection in C# - CodeProject
https://www.mdpi.com/2073-8994/12/11/1749
Symmetry | Free Full-Text | Adaptive Image Edge Extraction Based on Discrete Algorithm and Classical Canny Operator

2023年10月23日 星期一

gutenberg 古騰堡計畫 「古騰堡計畫」利用文字轉語音技術發布5000本免費有聲讀物 Microsoft的AI為古騰堡計畫錄製 5,000 本有聲書!書籍是免費的,程式是開源的

https://gutenberg.org/

 

https://techcrunch.com/2023/09/19/project-gutenberg-puts-5000-audiobooks-online-for-free-using-synthetic-speech/

 https://microsoft.github.io/SynapseML/docs/Explore%20Algorithms/AI%20Services/Quickstart%20-%20Create%20Audiobooks/

 https://zh.wikipedia.org/wiki/%E5%8F%A4%E8%85%BE%E5%A0%A1%E8%AE%A1%E5%88%92

 https://drs.ksml.edu.tw/digital.aspx?id=363

 https://search.tphcc.gov.tw/ERS/db_details.cfm?OPTION=language&NLANGUAGEID=2&rscID=187

https://www.techbang.com/posts/110509-microsoft-ai-project-gutenberg

https://www.techbang.com/posts/109776-gutenberg-text-to-speech-audiobooks

SMALL C is a "C" language compiler that is available with source code. It is very easy to port to another CPU, and this has been done many times.

 http://www.cpm.z80.de/small_c.html

This is a cross-reference of the ReactOS source code produced using the excellent Doxygen package. It is refreshed on a daily basis.

https://doxygen.reactos.org/index.html

https://github.com/exajobs/os-collection

handwriting writing blurry fuzzy jagged algorithm Polynomial Bezier fuzzy curve tracing Defuzzify offline handwriting signature

 Off-line signature verification using elementary combinations of directional codes from boundary pixels
Off-line handwritten signature verification with inflections feature
    Xiufen Ye, Weiping Hou, Weixing Feng
    Published in IEEE International Conference… 29 July 2005
    Computer Science    IEEE International Conference Mechatronics and Automation, 2005
The training algorithm of the signature verification system and the verification method of the signatures are introduced and Experimental results verify the effectiveness of this method.

handwriting writing jagged algorithm Polynomial Bezier fuzzy cursive tracing transforms over

transforms

https://www.sciencedirect.com/science/article/abs/pii/S0031320311003943
Binary segmentation algorithm for English cursive handwriting recognition

Cursive Overlapped Character Segmentation: An Enhanced Approach
https://arxiv.org/ftp/arxiv/papers/1904/1904.00792.pdf

handwriting algorithm cursive tracing transforms Vector graphics path simplification algorithm

[PDF] Complex Handwriting Trajectory Recovery: Evaluation Metrics and Algorithm

Complex Handwriting Trajectory Recovery: Evaluation Metrics and Algorithm | SpringerLink
https://link.springer.com/chapter/10.1007/978-3-031-26284-5_4

handwriting-trajectory-recovery

https://github.com/skryzhanovskaya/pen_trace_reconstruction
Pen Trace Reconstruction with Skeleton Representation of a Handwritten Text Image?

A biologically inspired approach for recovering the trajectory of offline handwriting | SpringerLink

handwriting-trajectory-recovery simplify moving average A biologically inspired approach for recovering the trajectory of offline handwriting

(PDF) Stroke extraction and stroke sequence estimation for off-line signature verification

 vector path simplify algorithm  Paths transforms Average stroke algorithm

 vector path simplify Optimize Simplify Path transforms  algorithm

https://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm
Ramer–Douglas–Peucker algorithm - Wikipedia

[PDF] Handwriting Trajectory Recovery using End-to-End Deep Encoder-Decoder Network

handwriting trajectory Relative  simplify moving  Transform approach trajectory

https://wicg.github.io/handwriting-recognition/

Handwriting Trajectory 

Handwriting Trajectory path algorithm Polynomial  cursive  transforms

Handwriting Trajectory path algorithm Polynomial  cursive  transforms stroke skeleton line.

Complex Handwriting Trajectory Recovery: Evaluation Metrics and Algorithm | SpringerLink

github Handwriting Trajectory path algorithm Polynomial cursive  Stroke  transforms stroke skeleton line.

http://tavmjong.free.fr/INKSCAPE/MANUAL/html/Paths-LivePathEffects.html


Trajectory path skeleton line algorithm Polynomial 

  Stroke  predigest transforms

https://github.com/LingDong-/skeleton-tracing

https://www.semanticscholar.org/paper/Transcription-Methods-for-Trajectory-Optimization%3A-Kelly/0e36e16a09ede112a99370e8d669eb066a631bdc

[PDF] Polar Stroking: New Theory and Methods for Stroking Paths
Ramer–Douglas–Peucker algorithm Bézier curve
https://www.codeproject.com/Articles/1711/A-C-implementation-of-Douglas-Peucker-Line-Approxi
https://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm
https://ilya.puchka.me/douglas-peucker-algorithm/
https://github.com/Ignotus-mago/DrawCurveByHand
Ramer-Douglas-Peucker and Reumann-Witkam line-simplification algorithms on C#

https://www.grasshopper3d.com/m/discussion?id=2985220%3ATopic%3A1454406

Ramer-Douglas-Peucker and Reumann-Witkam line-simplification algorithms on C# – Grasshopper

https://www.codeproject.com/Articles/114797/Polyline-Simplification
Table of Contents

    Introduction
    Similar Articles
    Simplification algorithms
        Nth Point
        Radial distance
        Perpendicular Distance
        Reumann-Witkam
        Opheim
        Lang
        Douglas-Peucker
        Douglas-Peucker (Variant)
    Error algorithms
        Positional Errors
    About the Code
    About the Demo Application
    Upcoming Versions
    History


https://psimpl.sourceforge.net/douglas-peucker.html
The Douglas-Peucker Algorithm: Sufficiency Conditions for Non-Self-Intersections1
Polyline Variant of Douglas–Peucker Algorithm
https://github.com/AnnaMag/Line-simplification

https://www.codeproject.com/Articles/5306595/Smart-Decimation-Polyline-Simplification-and-Smoot
    Douglas-Peucker algorithm
    Visvalingam-Whyatt algorithm
    Curvature-based simplification algorithm
    Maximum Squared Distance algorithm
    Reumann-Witkam algorithm
    Opheim algorithm
    Lang algorithm
    Nth point
    Distance between points
    Perpendicular distance

https://algorithm-wiki.csail.mit.edu/wiki/Line_Simplification
https://algorithm-wiki.csail.mit.edu/wiki/Zhao-Saalfeld_(_Line_Simplification)
Ramer–Douglas–Peucker algorithm
Visvalingam–Whyatt
Reumann–Witkam
Opheim simplification
Lang simplification
Zhao-Saalfeld

Introduction - Projectbook General Graphical Apps

 https://projectbook.code.brettchalupa.com/
Introduction - Projectbook
The Great Big List of Software Project Ideas

Projectbook is a collection of over 100 software project ideas for people looking to learn a given language or technology but short on inspiration for what to build. The projects vary in complexity and what they exercise. Find inspiration for your next project.
Dig In!

View the projects in the sidebar or browse through the sections below to find a project that catches your interest. Then hack away and make some cool things! Learn a lot. And share what you make.

    CLIs
    Libraries
    Websites
    Web Components
    Web Apps
    GUIs (platform agnostic, apps

https://m.prestwood.com/aspsuite/kb/crossref.asp?langid=2&tolangid=6&catid=&syntaxid=19
Code Blocks (Delphi and C# Cross Reference Guide)

objective reference guide libraries programming
https://dl.acm.org/doi/10.5555/2559601
Objective-C Programmer's Reference
https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html

 https://projectbook.code.brettchalupa.com/general-graphical-apps/_introduction.html#general-graphical-apps
General Graphical Apps
    Swift UI — for building apps for Apple devices
    gtk — cross-platform desktop app toolkit with support for many language bindings
        gtk-rs — Rust library for building cross-platform desktop GUIs with GTK4
        Vala — a newer language for building apps with GTK
    Flutter — cross-platform app building library in Dart from Google
    React Native — build mobile apps using React components
    Ionic — a mobile SDK that uses web components
    Electron — build desktop apps using web technologies
    Xamarin — cross-platform apps built with .NET and C#
    Kotlin — Android development
    Qt — cross-platform app toolkit, seems a bit enterprise-y