GithubHelp home page GithubHelp logo

geoip-api-perl's Introduction

NAME

Geo::IP - Look up location and network information by IP Address

END OF LIFE

MaxMind will be retiring the GeoIP Legacy databases at the end of May 2022. Until then, this library will only receive critical security and bug fixes. Support for this library will end completely with the last release of the legacy GeoIP databases.

We recommend that you upgrade to our GeoIP2 databases. You can read these from Perl using our GeoIP2 Perl API.

See our blog post for more information.

VERSION

version 1.50

SYNOPSIS

use Geo::IP;
my $gi = Geo::IP->new(GEOIP_MEMORY_CACHE);
# look up IP address '24.24.24.24'
# returns undef if country is unallocated, or not defined in our database
my $country = $gi->country_code_by_addr('24.24.24.24');
$country = $gi->country_code_by_name('yahoo.com');
# $country is equal to "US"


use Geo::IP;
my $gi = Geo::IP->open("/usr/local/share/GeoIP/GeoIPCity.dat", GEOIP_STANDARD);
my $record = $gi->record_by_addr('24.24.24.24');
print $record->country_code,
      $record->country_code3,
      $record->country_name,
      $record->region,
      $record->region_name,
      $record->city,
      $record->postal_code,
      $record->latitude,
      $record->longitude,
      $record->time_zone,
      $record->area_code,
      $record->continent_code,
      $record->metro_code;


# the IPv6 support is currently only avail if you use the CAPI which is much
# faster anyway. ie: print Geo::IP->api equals to 'CAPI'
use Socket;
use Socket6;
use Geo::IP;
my $g = Geo::IP->open('/usr/local/share/GeoIP/GeoIPv6.dat') or die;
print $g->country_code_by_ipnum_v6(inet_pton AF_INET6, '::24.24.24.24');
print $g->country_code_by_addr_v6('2a02:e88::');

DESCRIPTION

This module uses the GeoIP Legacy file based database. This database simply contains IP blocks as keys, and countries as values. This database should be more complete and accurate than reverse DNS lookups.

This module can be used to automatically select the geographically closest mirror, to analyze your web server logs to determine the countries of your visitors, for credit card fraud detection, and for software export controls.

IP GEOLOCATION USAGE

IP geolocation is inherently imprecise. Locations are often near the center of the population. Any location provided by a GeoIP database or web service should not be used to identify a particular address or household.

IP ADDRESS TO COUNTRY DATABASES

Free monthly updates to the database are available from

http://dev.maxmind.com/geoip/geolite

This free database is similar to the database contained in IP::Country, as well as many paid databases. It uses ARIN, RIPE, APNIC, and LACNIC whois to obtain the IP->Country mappings.

If you require greater accuracy, MaxMind offers a database on a paid subscription basis. Also included with this is a service that updates your database automatically each month, by running a program called geoipupdate included with the C API from a cronjob. For more details on the differences between the free and paid databases, see:

http://www.maxmind.com/en/geolocation\_landing

Do not miss the city database, described in Geo::IP::Record

Make sure to use the geolite-mirror-simple.pl script from the example directory to stay current with the databases.

BENCHMARK the lookups are fast. This is my laptop ( examples/benchmark.pl ):

Benchmark: running city_mem, city_std, country_mem, country_std, country_v6_mem, country_v6_std, isp_mem, isp_std for at least 10 CPU seconds...
  city_mem: 10.3121 wallclock secs (10.30 usr +  0.01 sys = 10.31 CPU) @ 387271.48/s (n=3992769)
  city_std: 10.0658 wallclock secs ( 2.86 usr +  7.17 sys = 10.03 CPU) @ 54392.62/s (n=545558)
country_mem: 10.1772 wallclock secs (10.16 usr +  0.00 sys = 10.16 CPU) @ 1077507.97/s (n=10947481)
country_std: 10.1432 wallclock secs ( 2.30 usr +  7.85 sys = 10.15 CPU) @ 83629.56/s (n=848840)
country_v6_mem: 10.2579 wallclock secs (10.25 usr + -0.00 sys = 10.25 CPU) @ 365997.37/s (n=3751473)
country_v6_std: 10.8541 wallclock secs ( 1.77 usr +  9.07 sys = 10.84 CPU) @ 10110.42/s (n=109597)
   isp_mem: 10.147 wallclock secs (10.13 usr +  0.01 sys = 10.14 CPU) @ 590109.66/s (n=5983712)
   isp_std: 10.0484 wallclock secs ( 2.71 usr +  7.33 sys = 10.04 CPU) @ 73186.35/s (n=734791)

CLASS METHODS

  • $gi = Geo::IP->new( $flags );

    Constructs a new Geo::IP object with the default database located inside your system's datadir, typically /usr/local/share/GeoIP/GeoIP.dat.

    Flags can be set to either GEOIP_STANDARD, or for faster performance (at a cost of using more memory), GEOIP_MEMORY_CACHE. When using memory cache you can force a reload if the file is updated by setting GEOIP_CHECK_CACHE. GEOIP_INDEX_CACHE caches the most frequently accessed index portion of the database, resulting in faster lookups than GEOIP_STANDARD, but less memory usage than GEOIP_MEMORY_CACHE - useful for larger databases such as GeoIP Legacy Organization and GeoIP City. Note, for GeoIP Country, Region and Netspeed databases, GEOIP_INDEX_CACHE is equivalent to GEOIP_MEMORY_CACHE.

    Prior to geoip-api version 1.6.3, the C API would leak diagnostic messages onto stderr unconditionally. From Geo::IP v1.44 onwards, the flag squelching this behavior (GEOIP_SILENCE) is implicitly added to the flags passed in new(), open(), and open_type().

    To combine flags, use the bitwise OR operator, |. For example, to cache the database in memory, but check for an updated GeoIP.dat file, use: Geo::IP->new( GEOIP_MEMORY_CACHE | GEOIP_CHECK_CACHE );

  • $gi = Geo::IP->open( $database_filename, $flags );

    Constructs a new Geo::IP object with the database located at $database_filename.

  • $gi = Geo::IP->open_type( $database_type, $flags );

    Constructs a new Geo::IP object with the $database_type database located in the standard location. For example

      $gi = Geo::IP->open_type( GEOIP_CITY_EDITION_REV1 , GEOIP_STANDARD );
    

    opens the database file in the standard location for GeoIP Legacy City, typically /usr/local/share/GeoIP/GeoIPCity.dat.

OBJECT METHODS

  • $code = $gi->country_code_by_addr( $ipaddr );

    Returns the ISO 3166 country code for an IP address.

  • $code = $gi->country_code_by_name( $hostname );

    Returns the ISO 3166 country code for a hostname.

  • $code = $gi->country_code3_by_addr( $ipaddr );

    Returns the 3 letter country code for an IP address.

  • $code = $gi->country_code3_by_name( $hostname );

    Returns the 3 letter country code for a hostname.

  • $name = $gi->country_name_by_addr( $ipaddr );

    Returns the full country name for an IP address.

  • $name = $gi->country_name_by_name( $hostname );

    Returns the full country name for a hostname.

  • $r = $gi->record_by_addr( $ipaddr );

    Returns a Geo::IP::Record object containing city location for an IP address.

  • $r = $gi->record_by_name( $hostname );

    Returns a Geo::IP::Record object containing city location for a hostname.

  • $org = $gi->org_by_addr( $ipaddr ); deprecated use name_by_addr instead.

    Returns the Organization, ISP name or Domain Name for an IP address.

  • $org = $gi->org_by_name( $hostname ); deprecated use name_by_name instead.

    Returns the Organization, ISP name or Domain Name for a hostname.

  • $info = $gi->database_info;

    Returns database string, includes version, date, build number and copyright notice.

  • $old_charset = $gi->set_charset( $charset );

    Set the charset for the city name - defaults to GEOIP_CHARSET_ISO_8859_1. To set UTF8, pass GEOIP_CHARSET_UTF8 to set_charset. For perl >= 5.008 the utf8 flag is honored.

  • $charset = $gi->charset;

    Gets the currently used charset.

  • ( $country, $region ) = $gi->region_by_addr('24.24.24.24');

    Returns a list containing country and region. If region and/or country is unknown, undef is returned. Sure this works only for region databases.

  • ( $country, $region ) = $gi->region_by_name('www.xyz.com');

    Returns a list containing country and region. If region and/or country is unknown, undef is returned. Sure this works only for region databases.

  • $netmask = $gi->last_netmask;

    Gets netmask of network block from last lookup.

  • $gi->netmask(12);

    Sets netmask for the last lookup

  • my ( $from, $to ) = $gi->range_by_ip('24.24.24.24');

    Returns the start and end of the current network block. The method tries to join several continuous netblocks.

  • $api = $gi->api or $api = Geo::IP->api

    Returns the currently used API.

      # prints either CAPI or PurePerl
      print Geo::IP->api;
    
  • $continent = $gi->continent_code_by_country_code('US');

    Returns the continent code by country code.

  • $dbe = $gi->database_edition

    Returns the database_edition of the currently opened database.

      if ( $gi->database_edition == GEOIP_COUNTRY_EDITION ){
        ...
      }
    
  • $isp = $gi->isp_by_addr('24.24.24.24');

    Returns the isp for 24.24.24.24

  • $isp = $gi->isp_by_name('www.maxmind.com');

    Returns the isp for www.something.de

  • my $time_zone = $gi->time_zone('US', 'AZ');

    Returns the time zone for country/region.

      # undef
      print  $gi->time_zone('US', '');
    
      # America/Phoenix
      print  $gi->time_zone('US', 'AZ');
    
      # Europe/Berlin
      print  $gi->time_zone('DE', '00');
    
      # Europe/Berlin
      print  $gi->time_zone('DE', '');
    
  • $id = $gi->id_by_addr('24.24.24.24');

    Returns the country_id for 24.24.24.24. The country_id might be useful as array index. 0 is unknown.

  • $id = $gi->id_by_name('www.maxmind.com');

    Returns the country_id for www.maxmind.com. The country_id might be useful as array index. 0 is unknown.

  • $cc = $gi->country_code3_by_addr_v6('::24.24.24.24');

  • $cc = $gi->country_code3_by_name_v6('ipv6.google.com');

  • $cc = $gi->country_code_by_addr_v6('2a02:ea0::');

  • $cc = $gi->country_code_by_ipnum_v6($ipnum);

      use Socket;
      use Socket6;
      use Geo::IP;
      my $g = Geo::IP->open('/usr/local/share/GeoIP/GeoIPv6.dat') or die;
      print $g->country_code_by_ipnum_v6(inet_pton AF_INET6, '::24.24.24.24');
    
  • $cc = $gi->country_code_by_name_v6('ipv6.google.com');

  • name_by_addr

    Returns the Organization, ISP name or Domain Name for a IP address.

  • name_by_addr_v6

    Returns the Organization, ISP name or Domain Name for an IPv6 address.

  • name_by_ipnum_v6

    Returns the Organization, ISP name or Domain Name for an ipnum.

  • name_by_name

    Returns the Organization, ISP name or Domain Name for a hostname.

  • name_by_name_v6

    Returns the Organization, ISP name or Domain Name for a hostname.

  • org_by_addr_v6 deprecated use name_by_addr_v6

    Returns the Organization, ISP name or Domain Name for an IPv6 address.

  • org_by_name_v6 deprecated use name_by_name_v6

    Returns the Organization, ISP name or Domain Name for a hostname.

  • teredo

    Returns the current setting for teredo.

  • enable_teredo

    Enable / disable teredo

      $gi->enable_teredo(1); # enable
      $gi->enable_teredo(0); # disable
    
  • lib_version

      if ( $gi->api eq 'CAPI' ){
          print $gi->lib_version;
      }
    

ISSUE TRACKER AND GIT repo

Is available from GitHub, see

https://github.com/maxmind/geoip-api-perl

SEE ALSO

GeoIP2 - database reader for the GeoIP2 format.

SUPPORT

Bugs may be submitted through https://github.com/maxmind/geoip-api-perl/issues.

AUTHORS

CONTRIBUTORS

COPYRIGHT AND LICENSE

This software is copyright (c) 2002 - 2017 by MaxMind, Inc.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.

geoip-api-perl's People

Contributors

borisz avatar genehack avatar horgh avatar nchelluri avatar oalders-mm avatar oschwald avatar perlpunk avatar pprindeville avatar shawniverson avatar tjmather avatar

Stargazers

 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

geoip-api-perl's Issues

Use of uninitialized value $hasStructureInfo in numeric eq (==) at (eval 34)...

Patch....

--- IP.pm.orig  2015-03-13 20:26:26.389514227 -0400
+++ IP.pm       2015-03-13 20:26:46.532377417 -0400
@@ -5540,7 +5540,7 @@
     my $i  = 0;
     my $buf;
     my $retval;
-    my $hasStructureInfo;
+    my $hasStructureInfo = 0;
     seek( $gi->{fh}, -3, 2 );
     for ( my $i = 0 ; $i < STRUCTURE_INFO_MAX_SIZE ; $i++ ) {
         read( $gi->{fh}, $buf, 3 );

how to use GeoIPASNum & GeoIPASNumv6

Is it possible to use these with the Geo::IP module?

I have tried loading it this way:

Geo::IP->open("$db_dir/GeoIPASNum.dat", GEOIP_ASNUM_EDITION);

which results in this error:

Invalid database type GeoIP ASNum Edition, expected GeoIP City Edition, Rev 1

sysinfo

libgeoip @1.6.2_0 (active)
p5-geo-ip @1.430.0_0 (active)

Installation instructions

It is probably just me not understanding them:

I tried to install Geo::IP using cpanm, but it complained that the library is too old so I visited http://dev.maxmind.com/geoip/downloadable/ that redirected me to:
http://dev.maxmind.com/geoip/legacy/downloadable/

It was unclear to me what to install from there so I went with the C library.
https://github.com/maxmind/geoip-api-c/releases

and got the following:

:~/GeoIP-1.6.0# make check
...
============================================================================
Testsuite summary for GeoIP 1.6.0
============================================================================
# TOTAL: 1
# PASS:  0
# SKIP:  0
# XFAIL: 0
# FAIL:  1
# XPASS: 0
# ERROR: 0
============================================================================
See test/test-suite.log
Please report to [email protected]
============================================================================

Nevertheless I installed it using "make install" and then tried cpanm Geo::IP again:
This time it compiled but then the tests failed:

t/0_base.t ............... ok
Error Opening file /usr/local/share/GeoIP/GeoIP.dat
Can't call method "country_code_by_addr" on an undefined value at t/1_lookup.t line 17, <DATA> line 1.
t/1_lookup.t ............. 
Dubious, test returned 2 (wstat 512, 0x200)
Failed 18/18 subtests 
t/20_min_capi_version.t .. ok
Error Opening file /usr/local/share/GeoIP/GeoIP.dat
Can't call method "country_code_by_name" on an undefined value at t/2_namelookup.t line 17, <DATA> line 1.
t/2_namelookup.t ......... 
Dubious, test returned 2 (wstat 512, 0x200)
Failed 11/11 subtests 
Error Opening file /usr/local/share/GeoIP/GeoIP.dat
Can't call method "country_code_by_addr" on an undefined value at /root/.cpanm/work/1390736230.30217/Geo-IP-1.43/blib/lib/Geo/Mirror.pm line 96.
t/3_mirror.t ............. 
Dubious, test returned 2 (wstat 512, 0x200)
Failed 1/2 subtests 

Test Summary Report
-------------------
t/1_lookup.t           (Wstat: 512 Tests: 0 Failed: 0)
  Non-zero exit status: 2
  Parse errors: Bad plan.  You planned 18 tests but ran 0.
t/2_namelookup.t       (Wstat: 512 Tests: 0 Failed: 0)
  Non-zero exit status: 2
  Parse errors: Bad plan.  You planned 11 tests but ran 0.
t/3_mirror.t           (Wstat: 512 Tests: 1 Failed: 0)
  Non-zero exit status: 2
  Parse errors: Bad plan.  You planned 2 tests but ran 1.
Files=5, Tests=3,  0 wallclock secs ( 0.03 usr  0.00 sys +  0.05 cusr  0.01 csys =  0.09 CPU)
Result: FAIL
Failed 3/5 test programs. 0/3 subtests failed.
make: *** [test_dynamic] Error 2
-> FAIL Installing Geo::IP failed. See /root/.cpanm/work/1390736230.30217/build.log for details. Retry with --force to force install it.

All this on 5.18.1 self-compiled on Debian 6.

Doesn't easily open GeoLite2 city database

I downloaded the GeoLite2 City database from:

http://dev.maxmind.com/geoip/geoip2/geolite2/

Then I tried to open it using:

!/usr/bin/perl

use Geo::IP;
$geoip = Geo::IP-&gt;open("/home/moise/Downloads/GeoLite2-City.mmdb") or die $!;
$result = $geoip->record_by_addr('8.8.8.8');

... and I got:

Invalid database type GeoIP Country Edition, expected GeoIP City Edition, Rev 1

This is with Geo::IP 1.43 from Debian testing. That doesn't seem like the right behavior -- it seems like I followed the example, and it seems from the example like reading the city database should be supported.

Geo::IP v1.42 produce error when trying use Geo::IP

Geo::IP v1.42 produce following error when trying use Geo::IP:

Can't load '/usr/local/perl-5.16.3/site/lib/auto/Geo/IP/IP.so' for module Geo::IP: /usr/local/perl-5.16.3/site/lib/auto/Geo/IP/IP.so: undefined symbol: GeoIP_country_continent at /usr/local/perl-5.16.3/lib/DynaLoader.pm line 191.


Geo::IP v1.42 used. Compiled with:

export LD_LIBRARY_PATH=/usr/local/lib;
cpan -fi Geo::IP


Latest geoip-api-c v1.5.1 used. Compiled with:

./configure
make
make install


Summary of my perl5 (revision 5 version 16 subversion 3) configuration:

Platform:
osname=linux, osvers=2.6.11-1.1369_fc4, archname=x86_64-linux-thread-multi
uname='linux perl-linux64-vm 2.6.11-1.1369_fc4 #1 thu jun 2 22:56:33 edt 2005 x86_64 x86_64 x86_64 gnulinux '
config_args='-ders -Dcc=gcc -Dusethreads -Duseithreads -Uinstallusrbinperl -Ulocincpth= -Uloclibpth= -Duse64bitall -Dlibpth=/lib64 /usr/lib64 /usr/local/lib64 -Accflags=-DUSE_SITECUSTOMIZE -Duselargefiles -Accflags=-DPERL_RELOCATABLE_INCPUSH -Accflags=-fno-merge-constants -Dprefix=/usr/local/perl-5.16.3 -Dprivlib=/usr/local/perl-5.16.3/lib -Darchlib=/usr/local/perl-5.16.3/lib -Dsiteprefix=/usr/local/perl-5.16.3/site -Dsitelib=/usr/local/perl-5.16.3/site/lib -Dsitearch=/usr/local/perl-5.16.3/site/lib -Dsed=/bin/sed -Duseshrplib -Dcf_by=ActiveState -Dcf_email=[email protected]'
hint=recommended, useposix=true, d_sigaction=define
useithreads=define, usemultiplicity=define
useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
use64bitint=define, use64bitall=define, uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='gcc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DUSE_SITECUSTOMIZE -DPERL_RELOCATABLE_INCPUSH -fno-merge-constants -fno-strict-aliasing -pipe -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
optimize='-O2',
cppflags='-D_REENTRANT -D_GNU_SOURCE -DUSE_SITECUSTOMIZE -DPERL_RELOCATABLE_INCPUSH -fno-merge-constants -fno-strict-aliasing -pipe'
ccversion='', gccversion='4.0.0 20050519 (Red Hat 4.0.0-8)', gccosandvers=''
intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
alignbytes=8, prototype=define
Linker and Libraries:
ld='gcc', ldflags =''
libpth=/lib64 /usr/lib64 /usr/local/lib64
libs=-lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lpthread -lc
perllibs=-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
libc=/lib/libc-2.3.5.so, so=so, useshrplib=true, libperl=libperl.so
gnulibc_version='2.3.5'
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E -Wl,-rpath,/usr/local/perl-5.16.3/lib/CORE'
cccdlflags='-fPIC', lddlflags='-shared -O2'

Characteristics of this binary (from libperl):
Compile-time options: HAS_TIMES MULTIPLICITY PERLIO_LAYERS
PERL_DONT_CREATE_GVSV PERL_IMPLICIT_CONTEXT
PERL_MALLOC_WRAP PERL_PRESERVE_IVUV
PERL_RELOCATABLE_INCPUSH USE_64_BIT_ALL
USE_64_BIT_INT USE_ITHREADS USE_LARGE_FILES
USE_LOCALE USE_LOCALE_COLLATE USE_LOCALE_CTYPE
USE_LOCALE_NUMERIC USE_PERLIO USE_PERL_ATOF
USE_REENTRANT_API USE_SITECUSTOMIZE
Locally applied patches:
ActivePerl Build 1603 [296746]
Built under linux
Compiled at Mar 13 2013 11:02:49
%ENV:
PERL5LIB="/var/www/p-core/lib:/var/www/p-core/lib:/var/www/p-core/lib:"
@inc:
/var/www/p-core/lib
/var/www/p-core/lib
/var/www/p-core/lib
/usr/local/perl-5.16.3/site/lib
/usr/local/perl-5.16.3/lib

install instructions

Hi I noticed there's no install instructions for Windows users.
Does geoip-api-perl support windows?

name_by_addr_v6

I am using Geo::IP 1.50 from CPAN. When I try to use name_by_addr_v6 I get
Can't locate object method "name_by_addr_v6" via package "Geo::IP" at ...
I looked at the source and I don't see any attempt to define the method. Am I missing something?

Module does not build for ActiveState Perl

Hi!

This module has a pure perl part, but it does not build for ActiveState Perl. Please find the Report here: http://ppm4.activestate.com/MSWin32-x86/5.16/1600/B/BO/BORISZ/Geo-IP-1.43.d/log-20131210T164827.txt
There is an overview here: http://code.activestate.com/ppm/Geo-IP/

If I get the error log correctly, it's currently not possible to build this module automatically, because it will only install "anyway" if you start with perl Makefile:PL PP=1.
Is there eventually a way to define this as fallback behavior if the CAPI is not found?

Best regards,
Alex

Deprecate argument to lib_version()

I'm looking at:

const char *
lib_version(CLASS)
char * CLASS

in IP.xs and it's unclear why this function takes an argument since it's unused. Indeed, it's highly likely that you'd want to check the version before instantiating an object, such as:

use version;

my $wanted = version->parse('v1.4.4');
my $have = version->parse(Geo::IP::lib_version());

my $gi;
if ($have >= $wanted) {
    $gi = Geo::IP::open_type(... opened the preferred way ...);
} else {
    $gi = Geo::IP::open_type(... opened the legacy way ...);

so it's not clear that the argument to lib_version() serves any purpose, and I think it can safely be deprecated.

Requiring the class for $gi->lib_version() seems to be putting the cart before the horse, as you'd have already instantiated $gi by then.

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.