GithubHelp home page GithubHelp logo

monero-project / kovri Goto Github PK

View Code? Open in Web Editor NEW
565.0 565.0 113.0 9.39 MB

The Kovri I2P Router Project

License: Other

CMake 6.51% C++ 89.96% C 0.24% Python 0.21% Shell 2.24% Makefile 0.44% Inno Setup 0.25% HTML 0.03% Dockerfile 0.13%

kovri's People

Contributors

94b1 avatar anonimal avatar brbzull0 avatar btolfa avatar cameronnemo avatar chertov avatar chris-barry avatar coneiric avatar einmbyte avatar fluffypony avatar guzzijones avatar klondi avatar kytvi2p avatar majestrate avatar meeh420 avatar mikalv avatar mikhail4021 avatar mlt avatar moroccanmalinois avatar multikatt avatar noloader avatar olarks avatar orignal avatar rakhimov avatar rbrunner7 avatar selsta avatar tmoravec avatar torbjo avatar wooky avatar ygrishin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

kovri's Issues

Double free or corruption

First appeared after f2eab64.

*** Error in `./kovri': double free or corruption (out): 0x00007fcb7c054eb0 ***
======= Backtrace: =========
/usr/lib/libc.so.6(+0x72055)[0x7fcb97f48055]
/usr/lib/libc.so.6(+0x779a6)[0x7fcb97f4d9a6]
/usr/lib/libc.so.6(+0x7818e)[0x7fcb97f4e18e]
/usr/lib/libstdc++.so.6(_ZNSsD2Ev+0x64)[0x7fcb98a854e4]
./kovri(_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED1Ev+0x2e)[0xbd261c]
./kovri(_ZN5kovri3log13LogStreamImpl5FlushEv+0x146)[0xbc1d30]
./kovri(_ZN5kovri3log9LogStream5FlushEv+0x1c)[0xbc1da4]
./kovri(_ZN5kovri3log10LoggerImpl4InfoEv+0x1e)[0xbc4a62]
./kovri(_ZN5kovri3log6Logger4InfoEv+0x1b)[0xbc187d]
./kovri(_Z18DeprecatedLogPrintIJPKcEEvN5kovri3log8LogLevelEDpT_+0xff)[0xa15fcb]
./kovri(_Z18DeprecatedLogPrintIIPKcEEvDpT_+0x1d)[0xa142fe]
./kovri(_ZN3i2p6tunnel10TunnelPool20CreateOutboundTunnelEv+0xb2)[0xb3296c]
./kovri(_ZN3i2p6tunnel10TunnelPool13CreateTunnelsEv+0x205)[0xb31391]
./kovri(_ZN3i2p6tunnel7Tunnels17ManageTunnelPoolsEv+0xed)[0xb1204b]
./kovri(_ZN3i2p6tunnel7Tunnels13ManageTunnelsEv+0x48)[0xb110a4]
./kovri(_ZN3i2p6tunnel7Tunnels3RunEv+0x37a)[0xb10dd0]
./kovri(_ZNKSt12_Mem_fn_baseIMN3i2p6tunnel7TunnelsEFvvELb1EEclIIEvEEvPS2_DpOT_+0x65)[0xb29f83]
./kovri(_ZNSt5_BindIFSt7_Mem_fnIMN3i2p6tunnel7TunnelsEFvvEEPS3_EE6__callIvIEILm0EEEET_OSt5tupleIIDpT0_EESt12_Index_tupleIIXspT1_EEE+0x48)[0xb29eec]
./kovri(_ZNSt5_BindIFSt7_Mem_fnIMN3i2p6tunnel7TunnelsEFvvEEPS3_EEclIIEvEET0_DpOT_+0x2a)[0xb29e66]
./kovri(_ZNSt12_Bind_simpleIFSt5_BindIFSt7_Mem_fnIMN3i2p6tunnel7TunnelsEFvvEEPS4_EEvEE9_M_invokeIJEEEvSt12_Index_tupleIJXspT_EEE+0x28)[0xb29d20]
./kovri(_ZNSt12_Bind_simpleIFSt5_BindIFSt7_Mem_fnIMN3i2p6tunnel7TunnelsEFvvEEPS4_EEvEEclEv+0x1d)[0xb29909]
./kovri(_ZNSt6thread5_ImplISt12_Bind_simpleIFSt5_BindIFSt7_Mem_fnIMN3i2p6tunnel7TunnelsEFvvEEPS6_EEvEEE6_M_runEv+0x1c)[0xb28d70]
/usr/lib/libstdc++.so.6(+0xb9350)[0x7fcb98a6f350]
/usr/lib/libpthread.so.0(+0x74a4)[0x7fcb982854a4]
/usr/lib/libc.so.6(clone+0x6d)[0x7fcb97fbf13d]
======= Memory map: ========
00400000-00daf000 r-xp 00000000 fe:01 536451                             /srv/git/push/kovri/build/kovri
00fae000-00fcf000 rw-p 009ae000 fe:01 536451                             /srv/git/push/kovri/build/kovri
00fcf000-00fd1000 rw-p 00000000 00:00 0
02d59000-02ddd000 rw-p 00000000 00:00 0                                  [heap]
7fcb68000000-7fcb6806d000 rw-p 00000000 00:00 0
7fcb6806d000-7fcb6c000000 ---p 00000000 00:00 0
7fcb6c000000-7fcb6c021000 rw-p 00000000 00:00 0
7fcb6c021000-7fcb70000000 ---p 00000000 00:00 0
7fcb70000000-7fcb70049000 rw-p 00000000 00:00 0
7fcb70049000-7fcb74000000 ---p 00000000 00:00 0
7fcb74000000-7fcb74021000 rw-p 00000000 00:00 0
7fcb74021000-7fcb78000000 ---p 00000000 00:00 0
7fcb78000000-7fcb78091000 rw-p 00000000 00:00 0
7fcb78091000-7fcb7c000000 ---p 00000000 00:00 0
7fcb7c000000-7fcb7c056000 rw-p 00000000 00:00 0
7fcb7c056000-7fcb80000000 ---p 00000000 00:00 0
7fcb80000000-7fcb80021000 rw-p 00000000 00:00 0
7fcb80021000-7fcb84000000 ---p 00000000 00:00 0
7fcb85ffc000-7fcb85ffd000 ---p 00000000 00:00 0
7fcb85ffd000-7fcb867fd000 rw-p 00000000 00:00 0                          [stack:8222]
7fcb877ff000-7fcb87800000 ---p 00000000 00:00 0
7fcb87800000-7fcb88000000 rw-p 00000000 00:00 0                          [stack:8252]
7fcb88000000-7fcb88021000 rw-p 00000000 00:00 0
7fcb88021000-7fcb8c000000 ---p 00000000 00:00 0
7fcb8c7f9000-7fcb8c7fa000 ---p 00000000 00:00 0
7fcb8c7fa000-7fcb8cffa000 rw-p 00000000 00:00 0                          [stack:8226]
7fcb8cffa000-7fcb8cffb000 ---p 00000000 00:00 0
7fcb8cffb000-7fcb8d7fb000 rw-p 00000000 00:00 0                          [stack:8225]
7fcb8d7fb000-7fcb8d7fc000 ---p 00000000 00:00 0
7fcb8d7fc000-7fcb8dffc000 rw-p 00000000 00:00 0                          [stack:8224]
7fcb8dffc000-7fcb8dffd000 ---p 00000000 00:00 0
7fcb8dffd000-7fcb8e7fd000 rw-p 00000000 00:00 0                          [stack:8223]
7fcb8e7fd000-7fcb8e7fe000 ---p 00000000 00:00 0
7fcb8e7fe000-7fcb8effe000 rw-p 00000000 00:00 0                          [stack:8221]
7fcb8effe000-7fcb8efff000 ---p 00000000 00:00 0
7fcb8efff000-7fcb8f7ff000 rw-p 00000000 00:00 0                          [stack:8220]
7fcb8f7ff000-7fcb8f800000 ---p 00000000 00:00 0
7fcb8f800000-7fcb90000000 rw-p 00000000 00:00 0                          [stack:8219]
7fcb90000000-7fcb90021000 rw-p 00000000 00:00 0
7fcb90021000-7fcb94000000 ---p 00000000 00:00 0
7fcb9428e000-7fcb942a2000 r-xp 00000000 fe:01 789727                     /usr/lib/libresolv-2.22.so
7fcb942a2000-7fcb944a1000 ---p 00014000 fe:01 789727                     /usr/lib/libresolv-2.22.so
7fcb944a1000-7fcb944a2000 r--p 00013000 fe:01 789727                     /usr/lib/libresolv-2.22.so
7fcb944a2000-7fcb944a3000 rw-p 00014000 fe:01 789727                     /usr/lib/libresolv-2.22.so
7fcb944a3000-7fcb944a5000 rw-p 00000000 00:00 0
7fcb944a6000-7fcb944ab000 r-xp 00000000 fe:01 789719                     /usr/lib/libnss_dns-2.22.so
7fcb944ab000-7fcb946aa000 ---p 00005000 fe:01 789719                     /usr/lib/libnss_dns-2.22.so
7fcb946aa000-7fcb946ab000 r--p 00004000 fe:01 789719                     /usr/lib/libnss_dns-2.22.so
7fcb946ab000-7fcb946ac000 rw-p 00005000 fe:01 789719                     /usr/lib/libnss_dns-2.22.so
7fcb946ae000-7fcb946b9000 r-xp 00000000 fe:01 789720                     /usr/lib/libnss_files-2.22.so
7fcb946b9000-7fcb948b8000 ---p 0000b000 fe:01 789720                     /usr/lib/libnss_files-2.22.so
7fcb948b8000-7fcb948b9000 r--p 0000a000 fe:01 789720                     /usr/lib/libnss_files-2.22.so
7fcb948b9000-7fcb948ba000 rw-p 0000b000 fe:01 789720                     /usr/lib/libnss_files-2.22.so
7fcb948ba000-7fcb948c0000 rw-p 00000000 00:00 0
7fcb948c4000-7fcb948c5000 ---p 00000000 00:00 0
7fcb948c5000-7fcb950c5000 rw-p 00000000 00:00 0                          [stack:8218]
7fcb950c5000-7fcb950c6000 ---p 00000000 00:00 0
7fcb950c6000-7fcb958c6000 rw-p 00000000 00:00 0                          [stack:8217]
7fcb958c6000-7fcb958c9000 r-xp 00000000 fe:01 789724                     /usr/lib/libdl-2.22.so
7fcb958c9000-7fcb95ac8000 ---p 00003000 fe:01 789724                     /usr/lib/libdl-2.22.so
7fcb95ac8000-7fcb95ac9000 r--p 00002000 fe:01 789724                     /usr/lib/libdl-2.22.so
7fcb95ac9000-7fcb95aca000 rw-p 00003000 fe:01 789724                     /usr/lib/libdl-2.22.so
7fcb95ace000-7fcb95c52000 r-xp 00000000 fe:01 817106                     /usr/lib/libicuuc.so.56.1
7fcb95c52000-7fcb95e52000 ---p 00184000 fe:01 817106                     /usr/lib/libicuuc.so.56.1
7fcb95e52000-7fcb95e62000 r--p 00184000 fe:01 817106                     /usr/lib/libicuuc.so.56.1
7fcb95e62000-7fcb95e63000 rw-p 00194000 fe:01 817106                     /usr/lib/libicuuc.so.56.1
7fcb95e63000-7fcb95e65000 rw-p 00000000 00:00 0
7fcb95e66000-7fcb960d2000 r-xp 00000000 fe:01 817103                     /usr/lib/libicui18n.so.56.1
7fcb960d2000-7fcb962d1000 ---p 0026c000 fe:01 817103                     /usr/lib/libicui18n.so.56.1
7fcb962d1000-7fcb962df000 r--p 0026b000 fe:01 817103                     /usr/lib/libicui18n.so.56.1
7fcb962df000-7fcb962e1000 rw-p 00279000 fe:01 817103                     /usr/lib/libicui18n.so.56.1
7fcb962e1000-7fcb962e2000 rw-p 00000000 00:00 0
7fcb962e6000-7fcb97ac9000 r--p 00000000 fe:01 817112                     /usr/lib/libicudata.so.56.1
7fcb97ac9000-7fcb97cc8000 ---p 017e3000 fe:01 817112                     /usr/lib/libicudata.so.56.1
7fcb97cc8000-7fcb97cc9000 r--p 017e2000 fe:01 817112                     /usr/lib/libicudata.so.56.1
7fcb97cce000-7fcb97cd5000 r-xp 00000000 fe:01 789728                     /usr/lib/librt-2.22.so
7fcb97cd5000-7fcb97ed4000 ---p 00007000 fe:01 789728                     /usr/lib/librt-2.22.so
7fcb97ed4000-7fcb97ed5000 r--p 00006000 fe:01 789728                     /usr/lib/librt-2.22.so
7fcb97ed5000-7fcb97ed6000 rw-p 00007000 fe:01 789728                     /usr/lib/librt-2.22.so
7fcb97ed6000-7fcb98071000 r-xp 00000000 fe:01 789674                     /usr/lib/libc-2.22.so
7fcb98071000-7fcb98270000 ---p 0019b000 fe:01 789674                     /usr/lib/libc-2.22.so
7fcb98270000-7fcb98274000 r--p 0019a000 fe:01 789674                     /usr/lib/libc-2.22.so
7fcb98274000-7fcb98276000 rw-p 0019e000 fe:01 789674                     /usr/lib/libc-2.22.so
7fcb98276000-7fcb9827a000 rw-p 00000000 00:00 0
7fcb9827e000-7fcb98296000 r-xp 00000000 fe:01 789632                     /usr/lib/libpthread-2.22.so
7fcb98296000-7fcb98495000 ---p 00018000 fe:01 789632                     /usr/lib/libpthread-2.22.so
7fcb98495000-7fcb98496000 r--p 00017000 fe:01 789632                     /usr/lib/libpthread-2.22.so
7fcb98496000-7fcb98497000 rw-p 00018000 fe:01 789632                     /usr/lib/libpthread-2.22.so
7fcb98497000-7fcb9849b000 rw-p 00000000 00:00 0
7fcb9849e000-7fcb984b4000 r-xp 00000000 fe:01 789945                     /usr/lib/libgcc_s.so.1
7fcb984b4000-7fcb986b3000 ---p 00016000 fe:01 789945                     /usr/lib/libgcc_s.so.1
7fcb986b3000-7fcb986b4000 rw-p 00015000 fe:01 789945                     /usr/lib/libgcc_s.so.1
7fcb986b6000-7fcb987b3000 r-xp 00000000 fe:01 789725                     /usr/lib/libm-2.22.so
7fcb987b3000-7fcb989b2000 ---p 000fd000 fe:01 789725                     /usr/lib/libm-2.22.so
7fcb989b2000-7fcb989b3000 r--p 000fc000 fe:01 789725                     /usr/lib/libm-2.22.so
7fcb989b3000-7fcb989b4000 rw-p 000fd000 fe:01 789725                     /usr/lib/libm-2.22.so
7fcb989b6000-7fcb98b28000 r-xp 00000000 fe:01 796393                     /usr/lib/libstdc++.so.6.0.21
7fcb98b28000-7fcb98d28000 ---p 00172000 fe:01 796393                     /usr/lib/libstdc++.so.6.0.21
7fcb98d28000-7fcb98d32000 r--p 00172000 fe:01 796393                     /usr/lib/libstdc++.so.6.0.21
7fcb98d32000-7fcb98d34000 rw-p 0017c000 fe:01 796393                     /usr/lib/libstdc++.so.6.0.21
7fcb98d34000-7fcb98d38000 rw-p 00000000 00:00 0
7fcb98d3e000-7fcb9910b000 r-xp 00000000 fe:01 824932                     /usr/lib/libcryptopp.so
7fcb9910b000-7fcb9930b000 ---p 003cd000 fe:01 824932                     /usr/lib/libcryptopp.so
7fcb9930b000-7fcb99354000 rw-p 003cd000 fe:01 824932                     /usr/lib/libcryptopp.so
7fcb99354000-7fcb99358000 rw-p 00000000 00:00 0
7fcb9935e000-7fcb99408000 r-xp 00000000 fe:01 818971                     /usr/lib/libboost_log.so.1.59.0
7fcb99408000-7fcb99608000 ---p 000aa000 fe:01 818971                     /usr/lib/libboost_log.so.1.59.0
7fcb99608000-7fcb9960d000 r--p 000aa000 fe:01 818971                     /usr/lib/libboost_log.so.1.59.0
7fcb9960d000-7fcb9960e000 rw-p 000af000 fe:01 818971                     /usr/lib/libboost_log.so.1.59.0
7fcb9960e000-7fcb9960f000 rw-p 00000000 00:00 0
7fcb99616000-7fcb9961c000 r-xp 00000000 fe:01 818957                     /usr/lib/libboost_chrono.so.1.59.0
7fcb9961c000-7fcb9981c000 ---p 00006000 fe:01 818957                     /usr/lib/libboost_chrono.so.1.59.0
7fcb9981c000-7fcb9981d000 r--p 00006000 fe:01 818957                     /usr/lib/libboost_chrono.so.1.59.0
7fcb9981d000-7fcb9981e000 rw-p 00007000 fe:01 818957                     /usr/lib/libboost_chrono.so.1.59.0
7fcb9981e000-7fcb99843000 r-xp 00000000 fe:01 818959                     /usr/lib/libboost_thread.so.1.59.0
7fcb99843000-7fcb99a42000 ---p 00025000 fe:01 818959                     /usr/lib/libboost_thread.so.1.59.0
7fcb99a42000-7fcb99a44000 r--p 00024000 fe:01 818959                     /usr/lib/libboost_thread.so.1.59.0
7fcb99a44000-7fcb99a45000 rw-p 00026000 fe:01 818959                     /usr/lib/libboost_thread.so.1.59.0
7fcb99a46000-7fcb99a57000 r-xp 00000000 fe:01 818963                     /usr/lib/libboost_date_time.so.1.59.0
7fcb99a57000-7fcb99c56000 ---p 00011000 fe:01 818963                     /usr/lib/libboost_date_time.so.1.59.0
7fcb99c56000-7fcb99c57000 r--p 00010000 fe:01 818963                     /usr/lib/libboost_date_time.so.1.59.0
7fcb99c57000-7fcb99c58000 rw-p 00011000 fe:01 818963                     /usr/lib/libboost_date_time.so.1.59.0
7fcb99c5e000-7fcb99cd9000 r-xp 00000000 fe:01 818983                     /usr/lib/libboost_program_options.so.1.59.0
7fcb99cd9000-7fcb99ed8000 ---p 0007b000 fe:01 818983                     /usr/lib/libboost_program_options.so.1.59.0
7fcb99ed8000-7fcb99edb000 r--p 0007a000 fe:01 818983                     /usr/lib/libboost_program_options.so.1.59.0
7fcb99edb000-7fcb99edc000 rw-p 0007d000 fe:01 818983                     /usr/lib/libboost_program_options.so.1.59.0
7fcb99ede000-7fcb99fe9000 r-xp 00000000 fe:01 818968                     /usr/lib/libboost_regex.so.1.59.0
7fcb99fe9000-7fcb9a1e9000 ---p 0010b000 fe:01 818968                     /usr/lib/libboost_regex.so.1.59.0
7fcb9a1e9000-7fcb9a1ed000 r--p 0010b000 fe:01 818968                     /usr/lib/libboost_regex.so.1.59.0
7fcb9a1ed000-7fcb9a1ef000 rw-p 0010f000 fe:01 818968                     /usr/lib/libboost_regex.so.1.59.0
7fcb9a1f6000-7fcb9a20d000 r-xp 00000000 fe:01 818962                     /usr/lib/libboost_filesystem.so.1.59.0
7fcb9a20d000-7fcb9a40c000 ---p 00017000 fe:01 818962                     /usr/lib/libboost_filesystem.so.1.59.0
7fcb9a40c000-7fcb9a40d000 r--p 00016000 fe:01 818962                     /usr/lib/libboost_filesystem.so.1.59.0
7fcb9a40d000-7fcb9a40e000 rw-p 00017000 fe:01 818962                     /usr/lib/libboost_filesystem.so.1.59.0
7fcb9a40e000-7fcb9a411000 r-xp 00000000 fe:01 818956                     /usr/lib/libboost_system.so.1.59.0
7fcb9a411000-7fcb9a610000 ---p 00003000 fe:01 818956                     /usr/lib/libboost_system.so.1.59.0
7fcb9a610000-7fcb9a611000 r--p 00002000 fe:01 818956                     /usr/lib/libboost_system.so.1.59.0
7fcb9a611000-7fcb9a612000 rw-p 00003000 fe:01 818956                     /usr/lib/libboost_system.so.1.59.0
7fcb9a616000-7fcb9a638000 r-xp 00000000 fe:01 789673                     /usr/lib/ld-2.22.so
7fcb9a80d000-7fcb9a816000 rw-p 00000000 00:00 0
7fcb9a834000-7fcb9a837000 rw-p 00000000 00:00 0
7fcb9a837000-7fcb9a838000 r--p 00021000 fe:01 789673                     /usr/lib/ld-2.22.so
7fcb9a838000-7fcb9a839000 rw-p 00022000 fe:01 789673                     /usr/lib/ld-2.22.so
7fcb9a839000-7fcb9a83b000 rw-p 00000000 00:00 0
7fcb9a83b000-7fcb9a841000 rw-p 00000000 00:00 0
7ffdb32b5000-7ffdb32d6000 rw-p 00000000 00:00 0                          [stack]
7ffdb334e000-7ffdb3350000 r--p 00000000 00:00 0                          [vvar]
7ffdb3350000-7ffdb3352000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
Aborted (core dumped)

Build fails on Debian 8

$ sudo apt-get install g++ cmake libboost-all-dev libcrypto++-dev libssl-dev libssl1.0.0
$ git clone https://github.com/monero-project/kovri && cd kovri/build && cmake ../ && make
...
/kovri/src/core/util/BoostLog.cpp:9:40: fatal error: boost/core/empty_deleter.hpp: No such file or directory
 #include <boost/core/empty_deleter.hpp>
                                        ^
compilation terminated.
$ sed -i "s:boost/core/empty_deleter.hpp:boost/utility/empty_deleter.hpp:" ../src/core/util/BoostLog.cpp && make
...
In file included from /kovri/src/core/util/BoostLog.cpp:4:0:
/kovri/src/core/util/BoostLog.h: In member function โ€˜virtual kovri::log::EventStream& kovri::log::BoostEventStream::Flush() constโ€™:
/kovri/src/core/util/BoostLog.h:57:46: warning: no return statement in function returning non-void [-Wreturn-type]
         virtual EventStream & Flush() const {};
                                              ^
/kovri/src/core/util/BoostLog.h: In member function โ€˜virtual kovri::log::EventStream& kovri::log::BoostEventStream::operator<<(const std::vector<std::basic_string<char> >&) constโ€™:
/kovri/src/core/util/BoostLog.h:58:91: warning: no return statement in function returning non-void [-Wreturn-type]
         virtual EventStream & operator << (const std::vector<std::string> & strs ) const {};
                                                                                           ^
/kovri/src/core/util/BoostLog.h: At global scope:
/kovri/src/core/util/BoostLog.h:58:77: warning: unused parameter โ€˜strsโ€™ [-Wunused-parameter]
         virtual EventStream & operator << (const std::vector<std::string> & strs ) const {};
                                                                             ^
/kovri/src/core/util/BoostLog.cpp:111:53: warning: unused parameter โ€˜keyโ€™ [-Wunused-parameter]
     LogStream & LogStream::Meta(const std::string & key, std::string value)
                                                     ^
/kovri/src/core/util/BoostLog.cpp:111:70: warning: unused parameter โ€˜valueโ€™ [-Wunused-parameter]
     LogStream & LogStream::Meta(const std::string & key, std::string value)
                                                                      ^
/kovri/src/core/util/BoostLog.cpp: In member function โ€˜void kovri::log::LogStreamImpl::Flush()โ€™:
/kovri/src/core/util/BoostLog.cpp:175:15: error: use of deleted function โ€˜std::basic_stringbuf<char>& std::basic_stringbuf<char>::operator=(std::basic_stringbuf<char>&&)โ€™
         m_Str = std::stringbuf();
               ^
In file included from /kovri/src/core/util/OldLog.h:8:0,
                 from /kovri/src/core/util/Log.h:151,
                 from /kovri/src/core/util/BoostLog.h:3,
                 from /kovri/src/core/util/BoostLog.cpp:4:
/usr/include/c++/4.9/sstream:64:11: note: โ€˜std::basic_stringbuf<char>& std::basic_stringbuf<char>::operator=(std::basic_stringbuf<char>&&)โ€™ is implicitly deleted because the default definition would be ill-formed:
     class basic_stringbuf : public basic_streambuf<_CharT, _Traits>
           ^
In file included from /usr/include/c++/4.9/ios:43:0,
                 from /usr/include/c++/4.9/ostream:38,
                 from /usr/include/c++/4.9/iostream:39,
                 from /kovri/src/core/util/Log.h:4,
                 from /kovri/src/core/util/BoostLog.h:3,
                 from /kovri/src/core/util/BoostLog.cpp:4:
/usr/include/c++/4.9/streambuf:810:7: error: โ€˜std::basic_streambuf<_CharT, _Traits>& std::basic_streambuf<_CharT, _Traits>::operator=(const std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char; _Traits = std::char_traits<char>]โ€™ is private
       operator=(const basic_streambuf&) { return *this; };
       ^
In file included from /kovri/src/core/util/OldLog.h:8:0,
                 from /kovri/src/core/util/Log.h:151,
                 from /kovri/src/core/util/BoostLog.h:3,
                 from /kovri/src/core/util/BoostLog.cpp:4:
/usr/include/c++/4.9/sstream:64:11: error: within this context
     class basic_stringbuf : public basic_streambuf<_CharT, _Traits>
           ^
src/core/CMakeFiles/kovri-core.dir/build.make:836: recipe for target 'src/core/CMakeFiles/kovri-core.dir/util/BoostLog.cpp.o' failed

@majestrate: ^
Referencing #33.

Bump to 0.9.23

When java i2p is officially released on their website, bump to .23. zzz confirmed that there's nothing else keeping us from bumping (spec-wise).

Implement I2CP server

From the Java I2P Docs

The I2P Client Protocol (I2CP) exposes a strong separation of concerns between the router and any client that wishes to communicate over the network. It enables secure and asynchronous messaging by sending and receiving messages over a single TCP socket. With I2CP, a client application tells the router who they are (their "destination"), what anonymity, reliability, and latency tradeoffs to make, and where to send messages. In turn the router uses I2CP to tell the client when any messages have arrived, and to request authorization for some tunnels to be used.

If kovri implemented an i2cp server then every application that I know of that uses i2p could be used with kovri as well with 0 changes to their code. I think that this is the API that @fluffypony is searching for / trying to (re)create. Unless I am misunderstanding ( last time I checked he wants to find a router or spawn a new one if not found )

Build Fails with Boost 1.55 - 1.58

Just realised that you won't see this, as the relay is down and I can't connect to I2P:

[20:23:54]  <fluffypony>    so been fighting with boost the last few days
[20:24:56]  <fluffypony>    looks like there's a bug in boost
[20:25:01]  <fluffypony>    that's fixed in a more recent version
[20:25:35]  <fluffypony>    [  4%] Building CXX object src/api/CMakeFiles/kovri-api.dir/I2PTunnel/HTTPProxy.cpp.o
[20:25:35]  <fluffypony>    In file included from /usr/include/boost/asio/ssl/context.hpp:786:0,
[20:25:35]  <fluffypony>                     from /usr/include/boost/asio/ssl.hpp:19,
[20:25:35]  <fluffypony>                     from /root/kovri/src/api/../core/util/HTTP.h:13,
[20:25:35]  <fluffypony>                     from /root/kovri/src/api/I2PTunnel/HTTPProxy.cpp:15:
[20:25:35]  <fluffypony>    /usr/include/boost/asio/ssl/impl/context.ipp: In constructor 'boost::asio::ssl::context::context(boost::asio::ssl::context_base::method)':
[20:25:35]  <fluffypony>    /usr/include/boost/asio/ssl/impl/context.ipp:93:29: error: '::SSLv3_method' has not been declared
[20:25:35]  <fluffypony>         handle_ = ::SSL_CTX_new(::SSLv3_method());
[20:25:35]  <fluffypony>                                 ^
[20:25:35]  <fluffypony>    /usr/include/boost/asio/ssl/impl/context.ipp:96:29: error: '::SSLv3_client_method' has not been declared
[20:25:35]  <fluffypony>         handle_ = ::SSL_CTX_new(::SSLv3_client_method());
[20:25:35]  <fluffypony>                                 ^
[20:25:35]  <fluffypony>    /usr/include/boost/asio/ssl/impl/context.ipp:99:29: error: '::SSLv3_server_method' has not been declared
[20:25:35]  <fluffypony>         handle_ = ::SSL_CTX_new(::SSLv3_server_method());
[20:25:35]  <fluffypony>                                 ^
[20:25:47]  <fluffypony>    this is with boost 1.58
[20:26:19]  <othe>  osx?
[20:26:49]  <fluffypony>    no Ubuntu
[20:27:01]  <fluffypony>    and 1.58 is the latest boost I can get without building from scratch
[20:27:12]  <othe>  i see, because i think it works fine here on osx with 1.56
[20:27:14]  <fluffypony>    so if it's fixed in 1.59 or 1.60 I'm going to have to build from scratch
[20:38:38]  <othe>  oh
[20:38:42]  <othe>  i have 1.59 running
[20:38:49]  <othe>  not 1.58 anymore
[20:38:58]  <othe>  with 1.59 it works on osx at least

Malformed certificate file

Blocker. Bails when parsing j_at_torontocrypto.org.crt. I thought x509v3 extensions were to blame but parg_at_mail.i2p.crt works fine. Most likely yet another implementation issue.

Build fails on OSX

$ uname -a
Darwin 12.6.0 Darwin Kernel Version 12.6.0: root:xnu-2050.48.19~1/RELEASE_X86_64 x86_64
$ brew --version
0.9.5 (git revision ad9cd4; last commit 2015-11-22)
$ cmake --version
cmake version 3.4.0
$ brew install boost && brew install cryptopp
$ brew link boost && brew link cryptopp
$ cd build && rm -f CMakeCache.txt && cmake ../ && make                                                                                                                                                       
-- Performing Test CXX11_SUPPORTED
-- Performing Test CXX11_SUPPORTED - Success
-- Performing Test CXX0X_SUPPORTED
-- Performing Test CXX0X_SUPPORTED - Success
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - found
-- Found Threads: TRUE  
-- Boost version: 1.59.0
-- Found the following Boost libraries:
--   system
--   filesystem
--   regex
--   program_options
--   date_time
--   thread
--   chrono
-- Found Crypto++: /usr/local/include, /usr/local/lib/libcryptopp.a
-- Found MiniUPnP headers: /usr/local/include/miniupnpc
-- ---------------------------------------
-- Build type         : Debug
-- Compiler vendor    : Clang
-- Compiler version   : 5.1.0.5030040
-- Compiler path      : /usr/bin/c++
-- Install prefix:    : /usr/local
-- Kovri data directory: /Users/administrator/Library/Application Support/kovri
-- Options:
--   AESNI            : OFF
--   HARDENING        : OFF
--   LIBRARY          : ON
--   BINARY           : ON
--   STATIC BUILD     : OFF
--   UPnP             : OFF
--   TESTS            : OFF
--   BENCHMARKING     : OFF
--   OPTIMIZATION     : OFF
-- ---------------------------------------
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/administrator/kovri/build
[  1%] Building CXX object core/CMakeFiles/kovri-core.dir/transport/NTCPSession.cpp.o
In file included from /Users/administrator/kovri/core/transport/NTCPSession.cpp:7:
/Users/administrator/kovri/core/util/Log.h:9:10: fatal error: 'chrono' file not found
#include <chrono>
         ^
1 error generated.
make[2]: *** [core/CMakeFiles/kovri-core.dir/transport/NTCPSession.cpp.o] Error 1
make[1]: *** [core/CMakeFiles/kovri-core.dir/all] Error 2
make: *** [all] Error 2
$ rm -f CMakeCache.txt && cmake -DBoost_INCLUDE_DIR=/usr/local/include/ ../ && make                                                                                                               
-- Performing Test CXX11_SUPPORTED
-- Performing Test CXX11_SUPPORTED - Success
-- Performing Test CXX0X_SUPPORTED
-- Performing Test CXX0X_SUPPORTED - Success
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - found
-- Found Threads: TRUE  
-- Boost version: 1.59.0
-- Found the following Boost libraries:
--   system
--   filesystem
--   regex
--   program_options
--   date_time
--   thread
--   chrono
-- Found Crypto++: /usr/local/include, /usr/local/lib/libcryptopp.a
-- Found MiniUPnP headers: /usr/local/include/miniupnpc
-- ---------------------------------------
-- Build type         : Debug
-- Compiler vendor    : Clang
-- Compiler version   : 5.1.0.5030040
-- Compiler path      : /usr/bin/c++
-- Install prefix:    : /usr/local
-- Kovri data directory: /Users/administrator/Library/Application Support/kovri
-- Options:
--   AESNI            : OFF
--   HARDENING        : OFF
--   LIBRARY          : ON
--   BINARY           : ON
--   STATIC BUILD     : OFF
--   UPnP             : OFF
--   TESTS            : OFF
--   BENCHMARKING     : OFF
--   OPTIMIZATION     : OFF
-- ---------------------------------------
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/administrator/kovri/build
Scanning dependencies of target kovri-core
[  1%] Building CXX object core/CMakeFiles/kovri-core.dir/transport/NTCPSession.cpp.o
In file included from /Users/administrator/kovri/core/transport/NTCPSession.cpp:7:
/Users/administrator/kovri/core/util/Log.h:9:10: fatal error: 'chrono' file not found
#include <chrono>
         ^
1 error generated.
make[2]: *** [core/CMakeFiles/kovri-core.dir/transport/NTCPSession.cpp.o] Error 1
make[1]: *** [core/CMakeFiles/kovri-core.dir/all] Error 2
make: *** [all] Error 2

Rewrite arg parser

Tied in heavily with #4 and not as simple as it seems. Our arg parser is split across six (yes ...six) files.

I propose we use boost::program_options and parse everything before the fork and router initialization. Sound sane, right?

Find a new Debian maintainer

hagen is MIA so we're leaving ./debian/ alone until we can find a new maintainer. zzz suggested contacting kytv a week before our next release.

Windows: MinGW64/MSYS2 build errors

Even with dependencies installed, doesn't build. Errors similar to here. Passing the appropriate -DCMAKE_C_COMPILER= and -DCMAKE_CXX_COMPILER= has no effect.

This could be a cmake issue or an improperly setup mingw64 (specific for Kovri) because we haven't provided the correct installation criteria or mingw-friendly dependencies.

Question the singleton design

Do we needs this? If so, why? Is it worth keeping? I think it causes more problems than solves. Apparently it is helpful for Windows.

2015-11-15 21:31:20     mlt-    btw
2015-11-15 21:31:26     mlt-    not that it might be relevant
2015-11-15 21:31:52     mlt-    but when I attempted to use orignal's libi2pd as dll, there was an issue with exported variables
2015-11-15 21:32:00     mlt-    across DLL /shared object boundary
2015-11-15 21:32:06     mlt-    it is tricky on Windows
2015-11-15 21:32:22     mlt-    and it is easier to export a function, read singleton,
2015-11-15 21:33:13     mlt-    bottom line, on some platforms, it might be a PITA to export gloval variable across shared object

Crypto refactor

Ticketing for housekeeping. @majestrate is currently was working on this. See branch crypto_refactor.

Our objective: pimpl all crypto implementations so we can switch libraries if needed.

Meeting Logs

Move resource copying out of CMake

Currently our cmake copies resources to a user's data directory. This will completely override a user's configuration files with every update. A better strategy should be in place, or at least consider creating a better make install .

Migrate to HTTPS reseed only.

To prevent MiTM, we need to switch to HTTPS immediately. Java I2P shut down http roughly a year ago and i2pd 0.10.0 never caught up. This is a priority ticket. Related to #18.

Create "What Kovri Does For You" blurb

~fluffypon      I also think we have to consider putting together an implementation comparison page (something like https://geti2p.net/en/comparison/tor) 
~fluffypon      but not just yet 
~fluffypon      then
&anonimal       And the comparisons will be between kovri and every other i2p router?
~fluffypon      anonimal: yes

Establish definitive Kovri design and use-case.

Tl;dr: "eliminate sam/bob/http router console/and more in order to become a easily maintainable, more-likely-to-be-easily-reviewed smaller router that is geared toward a hosting a single i2cp server (API accessible)".

This will provide a greater likelihood of maintaining a very secured router; far greater than what i2pd can currently offer. Also, think 'OpenBSD-rigorousness' in terms of design and decision.

2015-12-02  zzz [14:53:35] anonimal, only guessing, but TLS is probably only used for reseed now
2015-12-02  zzz [14:53:57] near future: use it for i2pcontrol (orignal has recently done this in his branch)
2015-12-02  zzz [14:54:30] longer term: optional for i2ptunnel clients and servers, SAM, BOB, ...
2015-12-02  +psi [14:59:43] and i2cp
2015-12-02  zzz [15:15:33] yup
2015-12-02  zzz [15:16:26] on the java side, it isn't always pretty, and it's taken several years, but we finally have utility classes to easily use SSL/TLS securely, and create/manage keys, certs, and passwords for server and client side
2015-12-02  zzz [15:21:22] stuff like disabling the old protocols and ciphers, and doing hostname verification, isn't at all easy or obvious in Java, but it's important. Only got all that right in the last year or so.
2015-12-02  zzz [15:22:27] and bad CAs like eDellRoot... just did that the other day. It never stops.
2015-12-02  +psi [15:23:46] tls and the CAs suck, it's the real house of cards
2015-12-02  zzz [15:25:41] one thing we don't do yet that you might consider is cert pinning for the reseeds
2015-12-02  zzz [15:27:40] but that makes management harder due to renewals and the chance of 'pinning suicide'
2015-12-02  anonimal Yes, only used for reseed.
2015-12-02  anonimal And when I said in the ticket "after that, any use of TLS would be an added bonus and not critical nor a core function of I2P", I included SSL for i2pc*, sam/bob
2015-12-02  anonimal Because frankly, I don't see a need for that.
2015-12-02  anonimal Even though it is implemented elsewhere.
2015-12-02  anonimal Why ssl when an ssh tunnel would suffice
2015-12-02  anonimal And how many app developers really use ssl over those protocols?
2015-12-02  anonimal I can think of setups where it would be useful, but don't forget http://www.danielsen.com/jokes/objecttoaster.txt
2015-12-02  anonimal I need more information though instead of a "just do it". If anyone could help with some perspective, that would be great.
2015-12-02  anonimal What I will do since psi appears to not want to respond to #3 is make a move with openssl and just get this reseed business finished.
2015-12-02  +psi huh?
2015-12-02  * psi reads
2015-12-02  +psi re: reseed str4d suggested that reseed could be done via tor's PT
2015-12-02  str4d anonimal, ssh is only "easy" for more technically-minded people
2015-12-02  str4d whereas ssl is just a checkbox
2015-12-02  anonimal zzz: I forgot to ping you re: perspective
2015-12-03  str4d (although its UX is also not simple right now, but it is much easier to make it so)
2015-12-03  anonimal But can someone give me an example of an app that actually uses ssl?
2015-12-03  anonimal Story of my life http://www.danielsen.com/jokes/objecttoaster.txt
2015-12-03  str4d anonimal_, there's no "app" that uses SSL, because it's not a feature of an app. It's a feature of the library and/or API
2015-12-03  str4d As currently set up, it's up to the user to choose to enable it, because SSL is enabled without changing the port, ie. either all clients use it or none, not both
2015-12-03  &anonimal Yes, SSL incumbent upon the API, but what I'm asking is when is it actually needed outside of reseed.
2015-12-03  &anonimal And the only answers I'm seeing are "user optional".
2015-12-03  &anonimal Its safer to keep everything loopback but yes, at a flexibility cost.
2015-12-03  &anonimal But I'm questioning the tradeoff, and that's why I'd like to see more use cases.
2015-12-03  &anonimal My point: if one is technically minded enough to need to SSL for non-reseed, then they are a stones-throw away from other safer methods.
2015-12-03  &anonimal But if this feature is in huge demand, then I'll proceed in that direction.
2015-12-03  &anonimal (ssl for all)
2015-12-03  zzz anonimal, what str4d said, and also it's not used that often, but perhaps the most likely would be an HTTPS router console, and i2ptunnel server forwarding to a remote web server over SSL
2015-12-03  str4d anonimal, my point is that yes it may be optional, but cutting it out because "you can do ssh" is not IMHO a good answer.
2015-12-03  str4d I don't think SSL for non-reseed mandates being technically minded. It could easily be "The guide I was following recommended it", or just "SSL is enabled by default" in future perhaps
2015-12-03  &anonimal I'm sold on i2ptunnel server forwarding. Everything else had a good point but that was the straw that broke the camel's back.
2015-12-03  &anonimal More importantly, this brings up core kovri questions like: what is kovri's intent and do all of the aforementioned APIs and complexies fit into this router's role?
2015-12-03  &anonimal i2pd is obviously an attempt to clone java i2p, but how is kovri evolving?
2015-12-03  * anonimal open-ended questions
2015-12-03  &anonimal Will kovri eliminate sam/bob/http router console/and more in order to become a easily maintainable, more-likely-to-be-easily-reviewed smaller router that is geared toward a hosting a single i2cp server?
2015-12-03  &anonimal The more I live with this code, the more I realize that most of these kinds of questions were never asked in the first place.
2015-12-03  &anonimal And I don't even think that Linus Torvalds would have been foolish enough to think that a single person could adequately cover so many bases in the earliest version of linux.
2015-12-03  &anonimal And he's linus.
2015-12-03  &anonimal fluffypon: ^
2015-12-03  str4d Thing to remember: SAM and BOB are on the client side of I2CP
2015-12-03  str4d ie the libi2p / libkovri side
2015-12-03  str4d So the kovri router itself could easily just be a small router hosting an I2CP server
2015-12-03  str4d In Java I2P'
2015-12-03  str4d s case, the routerconsole does get access to the router side via RouterContext, but everything else could in theory be run separately
2015-12-03  str4d and the idea of I2PControl is to provide some (if not all) of the functionality that the routerconsole currently gets via RouterContext, so it *could* be implemented separately
2015-12-03  str4d anonimal, this partly falls into the code reorganization stuff
2015-12-03  &anonimal Thanks str4d for the affirmation. I'll need more time to think, but I like this direction.
2015-12-03  str4d It's the reason I2CP was put into the Java router - to create a definite separation of concerns
2015-12-03  str4d And you get the benefit of being able to immediately use any Java I2P app with kovri. Even non-Java apps could be used by running a standalone Java SAM API connecting to the kovri router via I2CP.
2015-12-03  &anonimal Oh, good point, lol. My mistake ;)
2015-12-03  &anonimal Wow, great points to re: apps.
2015-12-03  &anonimal s/to/too/

Note: we would replace router console with an ncurses UI (as proposed pre-Kovri) similar to Tor's arm. Something that can interpret the TMI of our current logger into user-friendly reading.

Related to #5, #6, #9, #12, #33, #34.

Rethink UI + messaging abstraction

Brought in up today's meeting (#47), Monero's use of ZeroMQ and Qt.

In #49 I proposed an ncurses GUI. With ZMQ, I believe we could still do that while maintaining a method to interface with Monero's GUI (please correct me if I'm wrong). @majestrate also points out that ZMQ over I2CP is doable (and I think it's interesting).

For all of these issues, I think that a solid abstraction layer to interface with for messaging could be a great solution and we should look into ZMQ (or alternative).

If we ZMQ, how could we integrate #33?

Write better documentation.

Summaries, lengthy prose, visual ASCII examples, diagrams - anything, and as much as possible. Moved here from TODO.

Fails miserably with self-signed certificates

Related to #3.

21:11:20  &anonimal | zzz2: certificates/{router,ssl} are included in our base but are *never* used. What purpose do they have in java i2p?
21:19:38       zzz2 | you don't need router. Those are signing keys for the java update files
21:20:30       zzz2 | the ssl certs are for the reseeds that are self-signed, i.e. don't chain up to a standard CA
21:21:05       zzz2 | either you're wrong about the ssl certs not being used, or you aren't doing any SSL cert checking
21:21:30       zzz2 | or you're failing on all the selfsigned reseed hosts
21:24:39  &anonimal | We only ever use certs in ./reseed.
21:28:36       zzz2 | that would imply that your ssl is fundamentally broken
21:29:01  &anonimal | Abso-fucking-lutely
21:29:19          * | anonimal getting tired of it
21:29:32  &anonimal | As a test: moved ssl certs to reseed, rm -fr netDb,
21:29:40  &anonimal | started kovri: BER decode error
21:29:45  &anonimal | Never makes it to reseed.
21:30:13       zzz2 | you can test by going to a selfsigned reseed site with your browser, you will see the cert error
21:31:02       zzz2 | compared to e.g. the toronotcrypto site, which uses a 'real' cert from a CA
21:31:36       zzz2 | which is why there's no cert for torontocrypto in ssl/
21:31:47  &anonimal | I understand.
21:33:46       zzz2 | more clues why orignal is moving to openssl, I guess

Write better tests.

We need better tests - for everything.

  • Crypto unit tests that cover all crypto used: 2dc4d74 // In Progress
  • More, TODO

Move /contrib/certificates to /certificates

Certs are essential, they are not optional nor are they "./contrib" worthy (there is nothing else in there anyway). This and many other directory design decisions are currently more confusing than helpful.

We should also do a full review of directory layout.

Create Kovri email addresses + PGP keys

Hi @fluffypony, I'm proposing at least two points of contact:

  1. A general purpose contact

Edit: Per zzz's advice, I'll be on the mailing list since some of the messages sent are sensitive

  • Media inquires and anything under "general purpose"
  • Helpline if people can't use IRC
  1. A security contact
  • For vulnerability reports/response

Edit: I am currently the point of contact for VRP and we will be working on HackerOne in addition to implementing an official VRP so, once we finalize our stance, this point can be resolved. I'm not against having Monero be the point of contact so long as, within our VRP, we establish mandates for internal correspondence between Monero and VRP team (see https://trac.i2p2.de/ticket/1119).

Create Monero donation address

When we get closer to a release, if/when people wish to donate, perhaps we should consider creating a Monero donation address or at least a writeup directing people to donate to Monero. In the future, I also think we should consider allowing personal donations to developers (if that helps to speed up development).

Bump I2P_VERSION to 0.9.22

Needs review before bumping. Check for any I2NP/SSU/NTCP implementation discrepancies between Kovri and i2pd-bb and check if anything needs to be implemented if it has not already been done.

Note: I2NP/SSU/NTCP specs have not changed since 0.9.20, so this is all about implementation.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.