elchs / letodbf Goto Github PK
View Code? Open in Web Editor NEWLetoDB fork - database server with RDD for Harbour client
LetoDB fork - database server with RDD for Harbour client
XCC: can't compile 3rd party 'lz4.c', compile it with PellesC >= 4.5 manually,
and replace it in list of files for xBuilder with resulting 'lz4.obj':
pocc.exe -Fo"obj\lz4.obj" -Ot -I"include" -I"source\3rd\lz4\lib" -I%PATH_XHB%"\include"
-I%PATH_POCC%"\Include" -I%PATH_POCC%"\include\Win" "source\3rd\lz4\lib\lz4.c"
C:\PROGRAMAS\LetoDBf>pocc.exe -Fo"obj\lz4.obj" -Ot -I"include" -I"source\3rd\lz4\lib" -I"C:\XHB123\include" -I"C:\PellesC\Include" -I"C:\PellesC\Include\Win" "source\3rd\lz4\lib\lz4.c"
WARNING: You need to implement LZ4_DEPRECATED for this compiler
I have PellesC v11.0 stable version.
How can I compile it with PellesC? It´s not working.
root@Debian:/home/anderson/LetoDBf/tests# hbmk2 excltest.prg
root@Debian:/home/anderson/LetoDBf/tests# hbmk2 excltest.prg
hbmk2: Processing local make script: hbmk.hbm
Harbour 3.2.0dev (r2305191429)
Copyright (c) 1999-2021, https://harbour.github.io/
Compiling 'excltest.prg'...
Lines 82, Functions/Procedures 2
Generating C source output to '/tmp/hbmk_pxtdin.dir/excltest.c'... Done.
/usr/bin/ld: cannot find -lgtxwc: No such file or directory
/usr/bin/ld: cannot find -lX11: No such file or directory
collect2: error: ld returned 1 exit status
hbmk2: Error: Running linker. 1
gcc '/tmp/hbmk_pxtdin.dir/excltest.o' '/tmp/hbmk_pxtdin.dir/hbmk_1jhq2u.o' -Wl,--start-group -lgtxwc -lrddleto -lhbcplr -lhbdebug -lX11 -lharbour -Wl,--end-group -oexcltest -L/usr/local/lib/harbour -L../lib -L/usr/X11R6/lib
root@Debian:/home/anderson/LetoDBf/tests#
I need help to compile excltest.prg on Linux.
I´m using Debian 12. I installed gcc and build-essential, am I missing something?
As suggested to me by Viktor, I open topic here.
Details is here: https://groups.google.com/forum/#!topic/harbour-users/iuptZoeca0k
Strange, unpredictable "Unrecoverable errors 9023" in client app.
2019-05-09 15:25 UTC+0100 Rolf 'elch' Beckmann (elchs users.noreply.github.com)
; changes relate to the C-API and should not disturb the RDD activity,
except a serious change of record lock registration moved into letocl.c
Warnings:
../../../../source/client/letocl.c: In function 'LetoDbOrdFocus':
../../../../source/client/letocl.c:5975:19: warning: potential null pointer dereference [-Wnull-dereference]
*iListLen = eprintf( ptr, "%u;%s;%c;%s", iCurrent, pTag->TagName, pTag->cKeyType, pTag->KeyExpr );
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../source/client/letocl.c:5975:77: warning: potential null pointer dereference [-Wnull-dereference]
*iListLen = eprintf( ptr, "%u;%s;%c;%s", iCurrent, pTag->TagName, pTag->cKeyType, pTag->KeyExpr );
~~~~^~~~~~~~~~
../../../../source/client/letocl.c:5975:19: warning: potential null pointer dereference [-Wnull-dereference]
*iListLen = eprintf( ptr, "%u;%s;%c;%s", iCurrent, pTag->TagName, pTag->cKeyType, pTag->KeyExpr );
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../source/client/letocl.c:5975:19: warning: potential null pointer dereference [-Wnull-dereference]
../../../../source/client/letocl.c:5975:77: warning: potential null pointer dereference [-Wnull-dereference]
*iListLen = eprintf( ptr, "%u;%s;%c;%s", iCurrent, pTag->TagName, pTag->cKeyType, pTag->KeyExpr );
~~~~^~~~~~~~~~
../../../../source/client/letocl.c:5975:19: warning: potential null pointer dereference [-Wnull-dereference]
*iListLen = eprintf( ptr, "%u;%s;%c;%s", iCurrent, pTag->TagName, pTag->cKeyType, pTag->KeyExpr );
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\PROGRAMAS\LetoDBf>hbmk2 letodb.hbp
hbmk2: Processando opções do ambiente: -comp=mingw
source\server\server.prg(348) Warning W0001 Ambiguous reference 'LETOOPT_UDFENABLED'
source\server\server.prg(349) Warning W0001 Ambiguous reference 'LETOOPT_DEBUGLEVEL'
source\server\server.prg(393) Warning W0001 Ambiguous reference 'LETOOPT_UDFENABLED'
There was these errors. But then I downloaded again newest HB32 and then HOORAY!!! You can mark this done.
https://github.com/elchs/LetoDBf/blob/master/source/client/leto1.c#L561
If i'm not mistaken it is unsafe method to cast. You can point to memory where the other "half" of the number is not zeroed, which will result in unsuprisingly large value as uiKeyLen. Got problems with this when was testing something with DBF codepage different than in Harbour VM.
I've fixed it like this here, but you may prefer some other method.
--- a/source/client/leto1.c
+++ b/source/client/leto1.c
@@ -558,9 +558,10 @@ static HB_USHORT leto_KeyToStr( LETOAREAP pArea, char * szKey, char cType, PHB_I
#else
if( pArea->area.cdPage != HB_CDP_PAGE() )
{
- char * pBuff = hb_cdpnDup( hb_itemGetCPtr( pKey ), ( HB_SIZE * ) &uiKeyLen, HB_CDP_PAGE(), pArea->area.cdPage );
+ HB_SIZE nCdpLen = ( HB_SIZE ) uiKeyLen;
+ char * pBuff = hb_cdpnDup( hb_itemGetCPtr( pKey ), &nCdpLen, HB_CDP_PAGE(), pArea->area.cdPage );
- memcpy( szKey, pBuff, uiKeyLen );
+ memcpy( szKey, pBuff, nCdpLen );
hb_xfree( pBuff );
}
else
#endif
Hey Rolf,
Do you have a build script for xHarbour Builder for LetoDBf?
Thanks!
Patrick
Hi, Elchs
I use SET DEFAULT TO point my databases so instead I set to localhost but the command USE is not working.
Example:
xPath := "//127.0.0.1:2812/"
SET DEFAULT TO (xPATH)
leto_Connect( xPath, , , 6000, 100)
USE CADASTRO ALIAS CAD SHARED New
SET INDEX TO ("CADASTRO"+INDEXEXT())
This should work but in the example above Leto can´t find the database.
So I made this test below that works:
xPath := "//127.0.0.1:2812/"
SET DEFAULT TO (xPATH)
leto_Connect( xPath, , , 6000, 100)
USE (xPATH+"CADASTRO") ALIAS CAD SHARED New
SET INDEX TO (xPATH+"CADASTRO"+INDEXEXT())
The problem is SET DEFAULT TO is not working as expected and I would have to change several lines of my program to work out the problem.
Why SET DEFAULT TO is not working with Leto? Am I missing something? Is there something that could be done?
Hi!
../../../../source/client/leto1.c:1204:12: warning: this statement may fall thro
ugh [-Wimplicit-fallthrough=]
if( pField->uiLen == 4 )
^
../../../../source/client/leto1.c:1210:7: note: here
case HB_FT_MODTIME:
^~~~
Best regards,
Itamar M. Lins Jr.
I updated letodbf yesterday and compiled letodb.exe
the compilation presented these warnings
hbmk2: Harbour: Compilando módulos...
hbmk2: Compilando recursos...
hbmk2: Compilando...
../../../../source/server/letofunc.c: In function 'leto_dbEvalJoinAdd':
../../../../source/server/letofunc.c:7445:39: warning: ?: using integer constants in boolean context [-Wint-in-bool-context]
if( s_iDebugMode > ! bValid ? 0 : 20 )
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
../../../../source/server/letofunc.c: In function 'HB_FUN_LETO_DBEVAL':
../../../../source/server/letofunc.c:8230:37: warning: ?: using integer constants in boolean context, the expression will always evaluate to 'true' [-Wint-in-bool-context]
if( s_iDebugMode > bValid ? 1 : 20 )
~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
Error LETO/1003 : Variable does not exist XANO
This error came out with LETO_DBF.
xANO is a public variable and it is seen (exist) in debug runtime normally. It is used in a temp index with a for condition.
The code is:
SELECT EMP
cRANDOM1 := ALLTRIM(STR(RAN(9999)))
fINDEX1 := xTEMP+"TEMP" + cRANDOM1 + INDEXEXT()
INDEX ON CNPJ+ANO TAG TEMP TO (fINDEX1) ;
FOR ANO=xANO ;
ADDITIVE TEMPORARY
That error alert gives me 2 options: QUIT or RETRY.
If I RETRY it works ok...
How can I stop this alert?
The FOR expression cannot exceed 250 characters in length. RDDs that do not support a FOR condition when creating indexes generate a runtime error when this option is used.
Anyway it creates the index correctly if I RETRY so maybe it could be fixed or I could make an error handler to make this RETRY automatically but I don´t know how.
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
IF EXIST "obj\api\letocl.obj" del obj\api\letocl.obj
bcc32 -c -Iinclude;I:\XHARBOUR\include -d -tWM -D__WIN32__ -D__CONSOLE__ -DUSE_PMURHASH=1 -D__LETO_C_API__=1 -DLETO_NO_MT=1 -DLETO_NO_THREAD=1 -oobj\api\letocl.obj source\client\letocl.c
Borland C++ 5.82 for Win32 Copyright (c) 1993, 2005 Borland
source\client\letocl.c:
Error E2209 I:\XHARBOUR\include\hbzlib.h 41: Unable to open include file '../source/rtl/zlib/zlib.h'
Warning W8017 I:\XHARBOUR\include\hbapirdd.h 125: Redefinition of 'HB_FT_TIME' is not identical
Error E2139 include\letocl.h 235: Declaration missing ;
Error E2139 include\letocl.h 286: Declaration missing ;
Error E2139 include\letocl.h 287: Declaration missing ;
Warning W8017 include\rddleto.ch 111: Redefinition of 'DBOI_TEMPORARY' is not identical
Warning W8072 source\client\letocl.c 1190: Suspicious pointer arithmetic in function leto_RecvFirst
Warning W8072 source\client\letocl.c 1418: Suspicious pointer arithmetic in function leto_Recv
Error E2451 source\client\letocl.c 1444: Undefined symbol 'zstream' in function leto_Recv
Warning W8072 source\client\letocl.c 1470: Suspicious pointer arithmetic in function leto_Recv
Warning W8072 source\client\letocl.c 1497: Suspicious pointer arithmetic in function leto_Recv
Error E2451 source\client\letocl.c 1504: Undefined symbol 'PHB_LZ4NET' in function leto_Recv
Error E2121 source\client\letocl.c 1504: Function call missing ) in function leto_Recv
Warning W8065 source\client\letocl.c 1544: Call to function 'LZ4_COMPRESSBOUND' with no prototype in function leto_Send
Error E2451 source\client\letocl.c 1594: Undefined symbol 'PHB_LZ4NET' in function leto_Send
Error E2121 source\client\letocl.c 1594: Function call missing ) in function leto_Send
Error E2121 source\client\letocl.c 1607: Function call missing ) in function leto_Send
Warning W8072 source\client\letocl.c 1630: Suspicious pointer arithmetic in function leto_Send
Warning W8065 source\client\letocl.c 2111: Call to function 'LZ4_decompress_safe' with no prototype in function leto_lz4Uncompress
Warning W8065 source\client\letocl.c 2117: Call to function 'LZ4_compress_fast' with no prototype in function leto_lz4Compress
Warning W8065 source\client\letocl.c 2167: Call to function 'LZ4_COMPRESSBOUND' with no prototype in function leto_CryptText
Warning W8072 source\client\letocl.c 2206: Suspicious pointer arithmetic in function leto_CryptText
Warning W8072 source\client\letocl.c 2212: Suspicious pointer arithmetic in function leto_CryptText
Warning W8072 source\client\letocl.c 2213: Suspicious pointer arithmetic in function leto_CryptText
Warning W8072 source\client\letocl.c 2215: Suspicious pointer arithmetic in function leto_CryptText
Warning W8072 source\client\letocl.c 2219: Suspicious pointer arithmetic in function leto_CryptText
Warning W8072 source\client\letocl.c 2220: Suspicious pointer arithmetic in function leto_CryptText
Warning W8072 source\client\letocl.c 2224: Suspicious pointer arithmetic in function leto_CryptText
Warning W8072 source\client\letocl.c 2227: Suspicious pointer arithmetic in function leto_CryptText
Warning W8072 source\client\letocl.c 2354: Suspicious pointer arithmetic in function leto_replSkipBuf
Warning W8072 source\client\letocl.c 2368: Suspicious pointer arithmetic in function leto_replSkipBuf
Warning W8072 source\client\letocl.c 2374: Suspicious pointer arithmetic in function leto_replSkipBuf
Warning W8072 source\client\letocl.c 2409: Suspicious pointer arithmetic in function leto_AddTransBuffer
Warning W8072 source\client\letocl.c 2424: Suspicious pointer arithmetic in function leto_SearchTransList
Warning W8072 source\client\letocl.c 2425: Suspicious pointer arithmetic in function leto_SearchTransList
Warning W8072 source\client\letocl.c 2456: Suspicious pointer arithmetic in function leto_AddTransList
Warning W8072 source\client\letocl.c 2457: Suspicious pointer arithmetic in function leto_AddTransList
Warning W8072 source\client\letocl.c 3076: Suspicious pointer arithmetic in function leto_ParseRecord
Warning W8072 source\client\letocl.c 3467: Suspicious pointer arithmetic in function LetoConnectionOpen
Warning W8072 source\client\letocl.c 3481: Suspicious pointer arithmetic in function LetoConnectionOpen
Error E2451 source\client\letocl.c 3774: Undefined symbol 'zstream' in function LetoConnectionClose
Error E2451 source\client\letocl.c 3777: Undefined symbol 'PHB_LZ4NET' in function LetoConnectionClose
Error E2121 source\client\letocl.c 3777: Function call missing ) in function LetoConnectionClose
Error E2451 source\client\letocl.c 3781: Undefined symbol 'zstream' in function LetoConnectionClose
Warning W8075 source\client\letocl.c 4690: Suspicious pointer conversion in function LetoDbGetField
Warning W8072 source\client\letocl.c 4700: Suspicious pointer arithmetic in function LetoDbGetField
Warning W8072 source\client\letocl.c 4720: Suspicious pointer arithmetic in function LetoDbGetField
Warning W8012 source\client\letocl.c 4896: Comparing signed and unsigned values in function LetoDbPutField
Warning W8072 source\client\letocl.c 5088: Suspicious pointer arithmetic in function LetoDbGoTo
Error E2356 source\client\letocl.c 5329: Type mismatch in redeclaration of 'LetoDbSetRelation'
Error E2344 include\letocl.h 351: Earlier declaration of 'LetoDbSetRelation'
Error E2356 source\client\letocl.c 5367: Type mismatch in redeclaration of 'LetoDbCommit'
Error E2344 include\letocl.h 338: Earlier declaration of 'LetoDbCommit'
Warning W8072 source\client\letocl.c 5669: Suspicious pointer arithmetic in function leto_AddRecLock
Warning W8072 source\client\letocl.c 5684: Suspicious pointer arithmetic in function leto_DelRecLock
Warning W8072 source\client\letocl.c 5689: Suspicious pointer arithmetic in function leto_DelRecLock
Warning W8072 source\client\letocl.c 5751: Suspicious pointer arithmetic in function LetoDbEval
Warning W8072 source\client\letocl.c 5753: Suspicious pointer arithmetic in function LetoDbEval
Warning W8072 source\client\letocl.c 5754: Suspicious pointer arithmetic in function LetoDbEval
Warning W8072 source\client\letocl.c 5756: Suspicious pointer arithmetic in function LetoDbEval
Warning W8072 source\client\letocl.c 5757: Suspicious pointer arithmetic in function LetoDbEval
Warning W8072 source\client\letocl.c 5759: Suspicious pointer arithmetic in function LetoDbEval
Warning W8072 source\client\letocl.c 5760: Suspicious pointer arithmetic in function LetoDbEval
Warning W8072 source\client\letocl.c 6395: Suspicious pointer arithmetic in function LetoVarSet
Warning W8072 source\client\letocl.c 7119: Suspicious pointer arithmetic in function LetoToggleZip
Error E2451 source\client\letocl.c 7134: Undefined symbol 'zstream' in function LetoToggleZip
Error E2451 source\client\letocl.c 7137: Undefined symbol 'PHB_LZ4NET' in function LetoToggleZip
Error E2121 source\client\letocl.c 7137: Function call missing ) in function LetoToggleZip
Error E2451 source\client\letocl.c 7141: Undefined symbol 'zstream' in function LetoToggleZip
Error E2451 source\client\letocl.c 7147: Undefined symbol 'zstream' in function LetoToggleZip
Error E2451 source\client\letocl.c 7148: Undefined symbol 'zstream' in function LetoToggleZip
Warning W8065 source\client\letocl.c 7148: Call to function 'hb_lz4netOpen' with no prototype in function LetoToggleZip
Error E2451 source\client\letocl.c 7153: Undefined symbol 'zstream' in function LetoToggleZip
Error E2228 source\client\letocl.c 7153: Too many error or warning messages in function LetoToggleZip
*** 26 errors in Compile ***
** error 1 ** deleting obj\api\letocl.obj
Hi!
Update of GIT, 2017-07-11 12:08
~\Documents\GitHub\letodbf\LetoDBf [master = +3 ~0 -0 !]> hbmk2 .\rddleto.hbp -r
ebuildall
hbmk2: Harbour: Compilando módulos...
hbmk2: Compilando...
../../../../source/client/leto1.c: In function 'letoPutValue':
../../../../source/client/leto1.c:1594:7: warning: this statement may fall throu
gh [-Wimplicit-fallthrough=]
{
^
../../../../source/client/leto1.c:1624:7: note: here
case HB_FT_TIMESTAMP:
^~~~
../../../../source/client/leto1.c: In function 'letoGetValue':
../../../../source/client/leto1.c:1179:12: warning: this statement may fall thro
ugh [-Wimplicit-fallthrough=]
if( pField->uiLen == 4 )
^
../../../../source/client/leto1.c:1189:7: note: here
case HB_FT_MODTIME:
^~~~
hbmk2: Criando biblioteca estática... lib\librddleto.a
~\Documents\GitHub\letodbf\LetoDBf [master = +3 ~0 -0 !]>
Best regards,
Itamar M. Lins Jr.
Hi
i try to compile with make_b32.bat
I've this errors
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
bcc32 -c -Iinclude;c:\hal\harbour.320\include -d -tWM -D__WIN32__ -D__CONSOLE__ -DUSE_PMURHASH=1 -oobj\b32\letocl.obj source\client\letocl.c
Borland C++ 5.82 for Win32 Copyright (c) 1993, 2005 Borland
source\client\letocl.c:
Error E2227 source\client\letocl.c 1276: Extra parameter in call to hb_znetFlush in function leto_Send
Warning W8065 source\client\letocl.c 1291: Call to function 'hb_socketSetError' with no prototype in function leto_Send
Warning W8065 source\client\letocl.c 1319: Call to function 'hb_socketSetError' with no prototype in function leto_DataSendRecv
Warning W8065 source\client\letocl.c 1335: Call to function 'hb_socketSetError' with no prototype in function leto_DataSendRecv
Warning W8065 source\client\letocl.c 3270: Call to function 'hb_fsPipeWrite' with no prototype in function LetoConnectionClose
*** 1 errors in Compile ***** error 1 ** deleting obj\b32\letocl.obj
Hi Elchs,
In leto_std.ch there is only one:
#command APPEND [FROM <(f)>] [FIELDS <fields,...>] ;
[FOR <for>] [WHILE <while>] [NEXT <next>] ;
[RECORD <rec>] [<rest:REST>] [ALL] [VIA <rdd>] ;
[CODEPAGE <cp>] => ;
Leto_dbApp( <(f)>, { <(fields)> }, ;
{ <{for}>, <"for"> }, { <{while}>, <"while"> }, <next>, <rec>, <.rest.>, <rdd>,, <cp> )
There is no APPEND FROM SDF? I found the only one command above for APPEND.
In std.ch there is:
#command APPEND [FROM <(f)>] [FIELDS <fields,...>] ;
[FOR <for>] [WHILE <while>] [NEXT <next>] ;
[RECORD <rec>] [<rest:REST>] [ALL] [VIA <rdd>] ;
[CODEPAGE <cp>] [CONNECTION <conn>] => ;
__dbApp( <(f)>, { <(fields)> }, ;
<{for}>, <{while}>, <next>, <rec>, <.rest.>, <rdd>, <conn>, <cp> )
But there is also:
#command APPEND [FROM <(f)>] [SDF] [FIELDS <fields,...>] ;
[FOR <for>] [WHILE <while>] [NEXT <next>] ;
[RECORD <rec>] [<rest:REST>] [ALL] [CODEPAGE <cp>] => ;
__dbSDF( .F., <(f)>, { <(fields)> }, ;
<{for}>, <{while}>, <next>, <rec>, <.rest.>, <cp> )
...for APPEND FROM SDF
I am getting an open error
I am getting this error randomly running Letodbf server in a Windows Server 2019:
Unrecoverable error 9201: hb_cdxPageSeekKey: wrong parent key.
In a simple seek
command.
Letodbf server and client app crash.
I have to re-create the index file in order to be back in business.
In a Windows Server 2008 environment, it used to occur once a week or less, but in W2019 it occurs almost every day, sometimes twice a day...
I found very few references about this error and none of them helped.
The last one
Tables are shared between Letodbf and other exes executed via RDP Terminal services (so, local access), but all of them are part of the same (big) system.
A whole message sample in :
Breakdown at: 2022.05.20 10:37:28.712
Unrecoverable error 9201: hb_cdxPageSeekKey: wrong parent key.
------------------------------------------------------------------------
User: 10.5.2.109 SVLABTS balan.exe connection 14
Command: seek <e;24;A;�640557 20220583>
Table: ACE354.001
Almost all the time its in the same table named ACE354.001 ( its extension is 001 but this is a regular DBF created and used only from Harbour ) with only C, N, and L fields, no memos.
From time to time it affects ( rarely ) another table.
A thing that is interesting is that it crashs when the system is working when many people is working on it, near the pike of users.
When fewer users are in it never goes down.
Taking this in mind, the reference I found in the internet that was closely related with the issue was harbour/core#60.
I tried to change Windows System Memory parameters listed in quoted article, MS KB article with no success.
The Letodbf INI is:
Server = 127.0.0.1
Port = 2812
DataPath = C:\Folder
LogPath = C:\Folder\LetoLogs
Default_Driver = CDX
Lock_Scheme = 3
Memo_Type = FPT
Share_Tables = 1
No_Save_WA = 1
Lower_Path = 0
EnableFileFunc = 1
EnableAnyExt = 1
Allow_UDF = 1
Pass_for_Login = 0
Pass_for_Manage = 0
Pass_for_Data = 0
;Pass_File = "leto_users"
Cache_Records = 21
;Max_Vars_Number = 1000
;Max_Var_Size = 67108864
Tables_Max = 2999
;Users_Max = 99
Debug = 2
Optimize = 1
;AutOrder = 0
;ForceOpt = 0
;TimeOut = 360
;Zombie_Check = 0
;Server_User = advantage
;Server_UID = 1000
;Server_GID = 4
DataBase = /
;Backup = /tmp/backup
Mask = *.dbf,*.dbt,*.ntx
Lock = 1
Seconds = 30
Wait = 1
;ArcCmd = tar -cvzf /tmp/backup/leto.tar.gz /tmp/backup/*
I am stucked and out of options and any help will be appreciated.
I had these 2 issues:
IF oFTP:DOWNLOADFILE("controli.txt", cFTPFILE)
If I download a file it will be in aplication side (It won´t be in letodb.ini DATAPATH) .
I need to download and memoread it:
cLICENCAS := MEMOREAD(cAMBI+"controli.txt") // return ""
cLICENCAS := MEMOREAD("controli.txt") // return ""
and
SET PRINTER TO (ARQUIVO)
If I save a report to a file it will be in aplication side too.
cAMBI := CURDRIVE()+":\"+CURDIR()+"\"
SET DEFAULT TO .
SET PATH TO (cAMBI)
I tryed that above but didn´t work.
I am using:
#include "rddleto.ch" // defines do RDD
#include "dbinfo.ch" // Header file for the RDD API Index OrderInfo and DBInfo support
#include "leto_std.ch" // traduz os comandos para o LETO
#define __LETO_TRANSLATE_FILE_ALL
#include "letofile.ch" // traduz todas as funções para o LETO
REQUEST RDDLETO
REQUEST RDDInfo
I expected to find the local files using application path in SET PATH but not.
'''
hbmk2: Compilando...
../../../../source/server/letovars.c: In function 'HB_FUN_LETO_VARGETLIST':
../../../../source/server/letovars.c:390:17: warning: null pointer dereference [
-Wnull-dereference]
if( *pVar )
^~~~~
'''
Best regards,
Itamar M. Lins Jr.
Hello,
Initially, congratulate him for contributions in the community.
When using SET (_SET_PRINTFILE, cPath + "TEST.TXT", .F.), In the LetoDbf environment, I get a
Error TERM / 2014 Create error: //127.0.0.1:2812/TESTE.TXT
(DOS Error 53)
Quit Retry Default
Is this a real mistake?
greetings
This little snippet causes GPF in Leto_Connect():
FUNC Main()
? 'Leto_Connect("192.168.1.120:2812") =',Leto_Connect("192.168.1.120:2812")
INKEY(0)
? "Leto_Disconnect() =",Leto_Disconnect()
INKEY(0)
? "Leto_Connect() =",Leto_Connect() // there is the GPF
INKEY(0)
RETURN
I'm using LetoDbf with timestamp in changelog.txt: 2017-12-30 12:30 UTC+0100
hb_out.log:
Application Internal Error - D:\Z_Test\Leto\test.exe
Terminated at: 2018-01-07 18:07:37
Unrecoverable error 6005: Exception error:
Exception Code:C0000005 ACCESS_VIOLATION
Exception Address:00DECD36
EAX:00000000 EBX:000A5FE4 ECX:00000005 EDX:00000000
ESI:0037F5AC EDI:00000005 EBP:000923E4
CS:EIP:0023:00DECD36 SS:ESP:002B:0037F4AC
DS:002B ES:002B FS:0053 GS:002B
Flags:00010246
Exception Parameters: 00000001 00000000
CS:EIP: 89 38 8B 83 B0 00 00 00 89 74 24 04 89 7C 24 08
SS:ESP: 00000000 00000005 00000000 00E1B31C 00F14253 00091EB4 0037F518 00F1550A 00E7E061 000923E4 00E5D2E3 0037F5AC 000A5FE4 00000000 000923E4 00DEE668
C stack:
EIP: EBP: Frame: OldEBP, RetAddr, Params...
Modules:
00DD0000 001E9000 D:\Z_Test\Leto\test.exe
77970000 00180000 C:\Windows\SysWOW64\ntdll.dll
77010000 00110000 C:\Windows\syswow64\kernel32.dll
75280000 00047000 C:\Windows\syswow64\KERNELBASE.dll
76BB0000 000A1000 C:\Windows\syswow64\ADVAPI32.dll
76630000 000AC000 C:\Windows\syswow64\msvcrt.dll
76A30000 00019000 C:\Windows\SysWOW64\sechost.dll
76EA0000 000F0000 C:\Windows\syswow64\RPCRT4.dll
75220000 00060000 C:\Windows\syswow64\SspiCli.dll
75210000 0000C000 C:\Windows\syswow64\CRYPTBASE.dll
6FFC0000 0001C000 C:\Windows\system32\IPHLPAPI.DLL
76050000 00006000 C:\Windows\syswow64\NSI.dll
6FFB0000 00007000 C:\Windows\system32\WINNSI.DLL
76430000 00100000 C:\Windows\syswow64\USER32.dll
76B10000 00090000 C:\Windows\syswow64\GDI32.dll
76720000 0000A000 C:\Windows\syswow64\LPK.dll
76390000 0009D000 C:\Windows\syswow64\USP10.dll
70460000 00032000 C:\Windows\system32\WINMM.DLL
752F0000 00035000 C:\Windows\syswow64\WS2_32.dll
774A0000 00060000 C:\Windows\system32\IMM32.DLL
77250000 000CD000 C:\Windows\syswow64\MSCTF.dll
700F0000 0003C000 C:\Windows\system32\mswsock.dll
700E0000 00005000 C:\Windows\System32\wshtcpip.dll
Called from LETO_CONNECT(0)
Called from MAIN(7)
A compound expression as the grouping parameter to leto_groupby crashes the server. Logs show (for simple test program groupby):
01.16.2019 17:07:07 INFO: connected 127.0.0.1:58563 groupby CP: EN DF: dd.mm.yyyy conn-ID 0
01.16.2019 17:07:07 !!!!! leto_errInternal !!!!!
Request was:
aResult := cst->(leto_groupby("currency+payterms","#,crlimit,duerem","inv1line"))
where cst is the dbf alias, currency,payterms,crlimit,duerem & invline are valid fields. This actually produces what appears to be correct output before the server dies. Simplifying the group expression to a single field produces correct output and avoids the server crash.
Perhaps compound expressions for the grouping field are not supported by design. But I'd rather the call failed than crashed the server! It would be very cool to support compound expressions, because then I could group by any combination of fields.
Note that leto_dbeval can be forced to do the same job correctly, using a rather ugly long codeblock:
cExec := "{|n,x| if(n==1,x:={},nil),n:=ascan(x,{|v|v[1]==currency+'|'+payterms}), if(n==0,aadd(x,{currency+'|'+payterms,1,crlimit}),x[n][2]++),if(n==0,nil,x[n][3]+=crlimit),x}"
aResult := cst->(leto_dbeval(cExec,"inv1line"))
Before function MAIN() I put this:
#IFDEF __LETODBF
// servidor LETODBF
#include "rddleto.ch" // defines do RDD
#include "dbinfo.ch" // Header file for the RDD API Index OrderInfo and DBInfo support
#include "leto_std.ch" // traduz os comandos para o LETO
#define __LETO_TRANSLATE_FILE_ALL
#include "letofile.ch" // traduz todas as funções para o LETO
REQUEST LETO
REQUEST RDDLETO
REQUEST RDDInfo
#ENDIF
I defined __LETO_TRANSLATE_FILE_ALL before the header letofile.ch, is that ok?
So there was this code:
IF oFTP:DOWNLOADFILE("controli.txt", cFTPFILE)
cLICENCAS := MEMOREAD("controli.txt") // RETURNS ""
cLICENCAS returns an empty string intead text content of the file.
So I did this for a test:
IF oFTP:DOWNLOADFILE("controli.txt", cFTPFILE)
cLICENCAS := MEMOREAD("controli.txt") // RETURNS ""
#IFDEF __LETODBF
// COPY LOCAL FILE TO SERVER
Leto_FCopyToSrv( "controli.txt", "controli.txt")
cLICENCAS := LETO_MEMOREAD("controli.txt") // RETURNS ""
#ENDIF
In both cases it also returns an empty string yet.
Isn´t it a LETODBf issue?
I´m running letodb at a Linux server, Debian 12.
My application is on Windows. It connects, find it (leto_file() return true), but return an error when opening the table.
Dir is 0777 and files 0666, all files are lowercase.
My letodb.ini:
Server = 10.100.0.151
;IP = 127.0.0.1
Port = 2812
DataPath = /databases/controli
LogPath = /tmp
DataBase = /
Mask = *.dbf,*.fpt,*.cdx
Backup = /tmp/backup
ArcCmd = tar -cvzf /tmp/backup/leto.tar.gz /tmp/backup/*
;Server_User = root
;Server_UID = 0
;Server_GID = 0
Pass_for_Login = 0
Pass_for_Manage = 0
Pass_for_Data = 0
Share_Tables = 1
No_Save_WA = 1
Lower_Path = 1
Default_Driver = CDX
Memo_Type = FPT
EnableFileFunc = 1
EnableAnyExt = 1
Lock_Scheme = 2
Debug = 0
Allow_UDF = 1
Cache_Records = 21
Optimize = 1
Crypt_Traffic = 0
Lock = 1
Seconds = 30
Wait = 1
;SMB_SERVER = 1
;SMB_PATH = /mnt/samba
;Pass_File = leto_users
;Max_Vars_Number = 1000
;Max_Var_Size = 67108864
;Tables_Max = 999
;Users_Max = 99
;AutOrder = 0
;ForceOpt = 0
;TimeOut = 360
;Zombie_Check = 0
;BC_Services = letodb;
;BC_Interface = eth2
;BC_Port = 2812
Is it possible to make LETO_FERASE use file mask?
DELETEFILE can use file mask but FERASE not.
LETO_FERASE can´t use file mask...
LETO_DIRECTORY seems not be working to me so I got stuck with that.
Hi!
Is there happening here errors when I am opening dbf with fields memo FPT.
It is difficult to isolate the problem.
The error occurs in specific records.
Best regards,
Itamar M. Lins Jr.
Hi,
using harbour lastest version and Letodbf lastest version, with the use of a filter, dbUsearea generates an error before opening the file again witout using dbclearfilter() before dbclosearea().
With previous versions there were no error.
Best regards,
Edmond
// -> error += DBUSEAREA(0) LETO error = 21: EG_OPEN No 1000
// letodbf.log -> ERROR leto_ParseCommand()
private Mydbf:="//127.0.0.1:2812/\Testdbf.dbf"
private cfilter:='FIELD1="ABC"'
dbCreate( Mydbf , { {"FIELD1","C",3,0} } , "LETO" )
dbUsearea( .F. , "LETO" , Mydbf , NIL , .T. , .F. )
dbSetfilter( {|| &cfilter } , cfilter ) // or dbSetfilter( &( "{|| "+cfilter+" }" ) , cfilter )
// bug without dbclearfilter()
dbclosearea()
Hi;
I'm attempting to compile letodbf on FreeBSD. I have harbour installed and working.
Here is my system:
Output of letodbf compilation:
[/Dbase/Leto/letodbf]>hbmk2 rddleto.hbp letodb.hbp
hbmk2: Compiling Harbour sources...
hbmk2: Compiling...
hbmk2: Creating static library... /usr/local/sbin/harbour/lib/librddleto.a
My letodb.ini:
Server = 10.3.51.45
IP = 10.3.51.45
Port = 2812
DataPath = /home/lap/DBF
Logpath = /var/log
Default_Driver = NTX
;Lock_Scheme = 6
;Memo_Type = FPT
Share_Tables = 0
No_Save_WA = 1
Lower_Path = 0
EnableFileFunc = 1
EnableAnyExt = 1
Allow_UDF = 1
Pass_for_Login = 0
Pass_for_Manage = 0
Pass_for_Data = 0
;Pass_File = "leto_users"
Cache_Records = 21
;Max_Vars_Number = 1000
;Max_Var_Size = 67108864
;Tables_Max = 999
;Users_Max = 99
Debug = 25
Optimize = 1
;AutOrder = 0
;ForceOpt = 0
;TimeOut = 360
;Zombie_Check = 0
;Server_User = advantage
;Server_UID = 1000
;Server_GID = 4
;BC_Services = letodb;
;BC_Interface = eth2
;BC_Port = 2812
DataBase = /
Backup = /tmp/backup
Mask = .dbf,.dbt,.ntx
Lock = 1
Seconds = 30
Wait = 1
ArcCmd = tar -cvzf /tmp/backup/leto.tar.gz /tmp/backup/
My active sockets:
[/Dbase/Leto/letodbf]>netstat -an | grep LIST
tcp4 0 0 127.0.0.1.6010 . LISTEN
tcp4 0 0 127.0.0.1.25 . LISTEN
tcp4 0 0 *.22 . LISTEN
tcp4 0 0 *.139 . LISTEN
tcp4 0 0 *.445 . LISTEN
/var/log/letodbf.log:
10.09.2017 14:40:06 LetoDBf Server try to start ...
10.09.2017 14:40:06 UDF file: /usr/local/sbin/harbour/bin/letoudf.hrb not present.
10.09.2017 14:40:06 INFO: LetoDBf Server 3.00, will run at IP 10.3.51.45:2812 ( internal also used :2813 )
10.09.2017 14:40:06 INFO: DataPath=/home/lap/DBF, ShareTables=0, NoSaveWA=1, max database=999
10.09.2017 14:40:06 INFO: LoginPassword=0, CacheRecords=21, LockExtended=0
10.09.2017 14:40:06 DEBUG second socket: 3 for errors established
10.09.2017 14:40:06 DEBUG thread3() with pipe handle: 4 started ..
10.09.2017 14:40:06 DEBUG thread3() ending ..
10.09.2017 14:40:07 Server has been closed.
letodbf starts but exits a second later.
The original letodb runs fine.
Any ideas?
Hi, Elchs
I am trying to adapt my backup procedure with LETODBF.
I have to copy files from server to local to zip files, am I right? That´s what I understood from letobackup.prg
I got an error saying there is no LETO_DIRECTORY()
C:\BCC58\BIN\ilink32 @makefile.lnk
Turbo Incremental Link 5.69 Copyright (c) 1997-2005 Borland
Error: Unresolved external '_HB_FUN_LETO_DIRECTORY' referenced from C:\PROGRAMAS\CONTROLI\OBJ\GERENTE.OBJ
***I´m using xHarbour v1.2.3 + BCC 5.8
Unpredictable server crashes.
Two stations had LETO/1000 Syntax error, but connections logs are empty at this time
Info attached: info.zip
Warnings, compiling with harbor 3.4 / LLVM/CLANG 8.0
../../../../source/client/letomgmn.c: In function 'HB_FUN_LETO_LOGREPLAY':
../../../../source/client/letomgmn.c:1859:32: warning: format '%ld' expects argument of type 'long int', but argument 7 has type 'HB_MAXINT {aka long long int}' [-Wformat=]
hb_snprintf( szData, 36, "%c;replay;%s;%s;%" HB_PFS "d;%" HB_PFS "d;%d;", LETOCMD_admin, szFile, szActions, iUp, iTo, iEx );
^~~~~~~~~~~~~~~~~~~
../../../../source/client/letomgmn.c:1859:60: note: format string is defined here
hb_snprintf( szData, 36, "%c;replay;%s;%s;%" HB_PFS "d;%" HB_PFS "d;%d;", LETOCMD_admin, szFile, szActions, iUp, iTo, iEx );
~~~~~~~~~~~^
../../../../source/client/letomgmn.c:1859:32: warning: format '%ld' expects argument of type 'long int', but argument 8 has type 'HB_MAXINT {aka long long int}' [-Wformat=]
hb_snprintf( szData, 36, "%c;replay;%s;%s;%" HB_PFS "d;%" HB_PFS "d;%d;", LETOCMD_admin, szFile, szActions, iUp, iTo, iEx );
^~~~~~~~~~~~~~~~~~~
../../../../source/client/letomgmn.c:1859:73: note: format string is defined here
hb_snprintf( szData, 36, "%c;replay;%s;%s;%" HB_PFS "d;%" HB_PFS "d;%d;", LETOCMD_admin, szFile, szActions, iUp, iTo, iEx );
~~~~~~~~~~~^
Make letodb.exe
../../../../source/server/letoacc.c: In function 'leto_acc_setPath':
../../../../source/server/letoacc.c:309:14: warning: potential null pointer dereference [-Wnull-dereference]
309 | while( *ptr )
| ^~~~
../../../../source/server/letoacc.c:326:14: warning: potential null pointer dereference [-Wnull-dereference]
326 | while( ptr )
| ^~~~
../../../../source/server/letofunc.c: In function 'leto_Mgmt':
../../../../source/server/letofunc.c:11820:36: warning: ';' directive writing 1 byte into a region of size between 0 and 10 [-Wformat-overflow=]
11820 | sprintf( szMyId, "%s;%d;", szOk, pUStru->iUserStru - 1 );
| ^
../../../../source/server/letofunc.c:11820:13: note: 'sprintf' output between 8 and 18 bytes into a destination of size 16
11820 | sprintf( szMyId, "%s;%d;", szOk, pUStru->iUserStru - 1 );
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from C:/harbour32_clang/include/hbrdddbf.h:50,
from ../../../../include/srvleto.h:54,
from ../../../../source/server/letofunc.c:49:
../../../../source/server/letofunc.c: In function 'HB_FUN_LETO_DBUPDATE':
C:/harbour32_clang/include/hbapirdd.h:859:47: warning: potential null pointer dereference [-Wnull-dereference]
859 | #define SELF_ALIAS(w, bp) (((w)->lprfsHost->alias)(w, bp))
| ~~~^~~~~~~~~~~
../../../../source/server/letofunc.c:9768:10: note: in expansion of macro 'SELF_ALIAS'
9768 | SELF_ALIAS( pSArea, szAlias );
| ^~~~~~~~~~
../../../../source/server/leto_2.c: In function 'udpsvc':
../../../../source/server/leto_2.c:1009:13: warning: 'strncpy' output may be truncated copying between 0 and 127 bytes from a string of length 263 [-Wstringop-truncation]
1009 | strncpy( szServiceName, ptr, iLenCmp );
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../source/server/leto_2.c:1044:19: warning: 'strncpy' output truncated before terminating nul copying as many bytes from a string as its length [-Wstringop-truncation]
1044 | strncpy( szTmp + iLenCmp, s_UDPServer, iLenAddr );
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../source/server/leto_2.c:1043:30: note: length computed here
1043 | iLenAddr = strlen( s_UDPServer );
| ^~~~~~~~~~~~~~~~~~~~~
Make Lib
../../../../source/client/letocl.c: In function 'LetoDbOrdFocus':
../../../../source/client/letocl.c:5975:19: warning: potential null pointer dereference [-Wnull-dereference]
*iListLen = eprintf( ptr, "%u;%s;%c;%s", iCurrent, pTag->TagName, pTag->cKeyType, pTag->KeyExpr );
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../source/client/letocl.c:5975:77: warning: potential null pointer dereference [-Wnull-dereference]
*iListLen = eprintf( ptr, "%u;%s;%c;%s", iCurrent, pTag->TagName, pTag->cKeyType, pTag->KeyExpr );
~~~~^~~~~~~~~~
../../../../source/client/letocl.c:5975:19: warning: potential null pointer dereference [-Wnull-dereference]
*iListLen = eprintf( ptr, "%u;%s;%c;%s", iCurrent, pTag->TagName, pTag->cKeyType, pTag->KeyExpr );
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../source/client/letocl.c:5975:19: warning: potential null pointer dereference [-Wnull-dereference]
../../../../source/client/letocl.c:5975:77: warning: potential null pointer dereference [-Wnull-dereference]
*iListLen = eprintf( ptr, "%u;%s;%c;%s", iCurrent, pTag->TagName, pTag->cKeyType, pTag->KeyExpr );
~~~~^~~~~~~~~~
../../../../source/client/letocl.c:5975:19: warning: potential null pointer dereference [-Wnull-dereference]
*iListLen = eprintf( ptr, "%u;%s;%c;%s", iCurrent, pTag->TagName, pTag->cKeyType, pTag->KeyExpr );
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Hi,
please try this
go top
saverec := recn()
skip -1
? bof()
goto saverec
? bof()
Hi!
RddSetDefault("LETO")
Locate FOR cCriptSenha=us->senha .and. cCriptApelido=us->apelido
This up command not working with atual version of letodbf
Works fine with rddsetdefault("DBFCDX")
Best regards,
Itamar M. Lins Jr.
Hi!
index on xyz tag temp for date<... temporary
Do While !eof() //letodbf fail it enter in "DO WHILE" pointer fail return eof() = .F.
...
and now I "add" modify my line this with "gotop"
index on xyz tag temp for date<... temporary
dbgotop() //Here now I am put this.
Do While !eof() //letodbf ok skip do while pointer return eof() = .T.
Best regards,
Itamar M. Lins Jr.
make_b32 full
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
bcc32 -c -Iinclude;C:\XHB123\include;C:\PellesC\Include -d -tWM -D__WIN32__ -D__CONSOLE__ -DUSE_PMURHASH=1 -oobj\b32\letocl.obj source\client\letocl.c
Borland C++ 5.82 for Win32 Copyright (c) 1993, 2005 Borland
source\client\letocl.c:
Fatal F1003 C:\PellesC\Include\stdarg.h 9: Error directive: <stdarg.h> need POCC version 10.0 or higher
*** 1 errors in Compile ***** error 1 ** deleting obj\b32\letocl.obj
I have installed PellesC v11.0 but it seems it´s telling I have v9 in this error
In make_b32.bat I changed: SET HB_PATH=C:\XHB123
In makefile.bc I only uncommented:
# uncomment next line if you want to build letodb with xharbour
XHARBOUR = yes
What should I do now? Nobody is talking about LetoDBF with xHarbour
I am using xHarbour v1.2.3, BCC58 and PellesC v11.0
Hi Numerabilis,
xHarbour 'downward' compatibility have got lost over the time,
No wonder, as there wasn't any feedback from them since Patrick Mast asked me years ago.
it caused me significant work to restore it ...
But now again i can produce a rddleto.lib with 'no real warnings' ... ;-)
#) As there is no 'hb_znet' for z-lib compressed network traffic in xHarbour,
they * must * use my LZ4 implementation for that.
Network encrypted traffic is bound in LetoDBf to traffic compression,
as else you can easyily live without compression for that.
Data compression is else applied at some very specific points in LetoDBf, so in the end you will want to have that.
**
Until now LZ4 is NOT working for xHarbour - it works absolutely great for Harbour,
even for BCC 5.8.2.
In xHarbour it leads to a GPF crash of the app when activated.
I still haven't found the origin cause for that - sadly there is no Valgrind for Windows.
The problem could be bound to specific C-compilers for xHarbour,
or more propably the problem is inside LetoDBf/ LZ4.
Could be even an easy silly bug, and i just don't recognize it -- need more time to find the bug, tips extremely welcome.
**
So for testing purpose, to let us go on, i created dummy LZ4 functions so that the app can build.
This is done by setting the 'LZ4_DUMMY' flag for c-source and leaving away the lz4.c so far.
I uploaded a new xBuilder rddleto.lib.xbp definition for xHB,
as also a new make_b32.bat for BCC >= 5.8.2 for xharbour -- use it without any argument to get a rddleto.lib.
PellesC makes me headaches, even newest Harbour itself can not be build from source with it out the box.
The C-compiler have some serious problems, at very least about complex 'pre-processor directives',
[ that are e.g. these '#if defined ( xxx ) && ( xxx > y ) .. and more complex ones ]
Older versions of PellesC just produce garbage from lz4.c.
By the way, you are using xHB or xharbour ?
best regards
elch
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.