Giter Site home page Giter Site logo

decryptr's Introduction

decryptr

R build status Coverage Status CRAN_Status_Badge

Overview

decryptr is an R package to break captchas. It is also an extensible tool built in a way that enables anyone to contribute with their own captcha-breaking code.

To install decryptr, simply run the code below:

if (!require(devtools)) install.packages("devtools")
devtools::install_github("decryptr/decryptr")

Basic usage

decryptr has functions for downloading and breaking captchas from multiple known sources. If you wanted to use this package with, let’s say, RFB (Receita Federal), you could go by the following steps:

# Download captcha from RFB
file <- download_captcha("rfb", path = "./img")

# Break captcha
decrypt(file, model = "rfb")
## [1] "hqj3wa"

Simple, right? The decrypt() funcion is this package’s workhorse: it is able to take a captcha (either the path to a captcha file or a captcha object read with read_captcha()) and break it with a model (either the name of a known model, the path to a model file or a model object created with train_model()).

If you’d like to visualize a captcha and make sure the decryption is working, you can use the plot() funcion to draw out the captcha image:

# Read captcha
captcha <- read_captcha(file)

# Plot captcha
plot(captcha[[1]])

If you want to learn more about the models that already come packaged with decryptr, check out load_model()’s documentation (and all of these models also have a corresponding download_captcha() method so you’re always good to go).

Advanced usage

If you’re willing to create your own custom captcha-breaking models, there are some other functions you might want to know about. classify() allows the user to manually answer a list of captchas, while train_model() takes a bunch of classified captchas and trains a keras model on them.

classify() has two modes: static and interactive. If you already know the answers to all captchas, simply turn them into a string vector and pass it onto the answers argument; on the other hand, if you’re going to manually classify the captchas, classify() will plot every captcha and prompt you in the console for their answers. In the snippet below, I use static classification to label a set of 10 captchas:

# URL of a captcha (for illustrative purposes I'll be using
# RFB's URL, but you can use whichever URL you want)
url <- paste0(
  "http://www.receita.fazenda.gov.br/pessoajuridica/",
  "cnpj/cnpjreva/captcha/gerarCaptcha.asp")

# Download captcha from URL
files <- download_captcha(url, n = 10, path = "./img")

# Answers to downloaded captchas
answers <- c(
  "fvhca9", "cyz4vl", "luzdve", "lb9mnq", "9bquah",
  "d1zwau", "mlvk1t", "g6zbyf", "17xauo", "bo6cdg")

# Classify captchas (if answers weren't supplied,
# I'd be promped for interactive classification)
new_files <- classify(files, answers, path = "./img")

Now that we have a set of classified captchas, we can use them to train a captcha-breaking model. classify() used our answers to create a new version of each file, one with the answer at the end of the filename separated by an underscore; read_captcha() has the ans_in_path argument that tells it to look for the answers in the filenames and create the captcha objects accordingly.

With this list of labeled captcha objects, we can call train_model() to generate a model. The model gets automatically saved to disk so that we can load it later with load_model().

# Read answered captchas
captchas <- read_captcha(new_files, ans_in_path = TRUE)

# Use captchas to train a model
model <- train_model(captchas, verbose = FALSE)

# Use our new model for decryption
decrypt(file, model = model)
## [1] "uq2lnr"
# We could also have loaded the model from disk
model <- load_model("./model.hdf5")

Performance

Once loaded to memory, keras models run very quickly Also, we don’t run any pre-processing on the image, so decryption is blazing fast.

microbenchmark::microbenchmark(decrypt = decrypt(captcha, model))
## Unit: milliseconds
##     expr      min       lq     mean   median       uq      max neval
##  decrypt 42.44801 46.52944 49.62947 48.48889 51.27224 109.3463   100

decryptr's People

Contributors

athospd avatar clente avatar dfalbel avatar jtrecenti avatar mifarhat 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

decryptr's Issues

Pass devtools::check() without warnings

Currently decryptr raises a warning and a note when checking with devtools. We should fix this.

> checking for executable files ... WARNING
  Found the following executable file:
    tests/testthat/sample-model.tf/saved_model.pb
  Source packages should not contain undeclared executable files.
  See section ‘Package structure’ in the ‘Writing R Extensions’ manual.

> checking dependencies in R code ... WARNING
  '::' or ':::' import not declared from: ‘plyr’
  Unexported object imported by a ':::' call: ‘plyr:::list_to_array’
    See the note in ?`:::` about the use of this operator.

Error: number of items to replace is not a multiple of replacement length

Hi again,

I ran following code:

# URL of a captcha (for illustrative purposes I'll be using
# TRT's URL, but you can use whichever URL you want)
url <- "http://pdv-reg.porezna-uprava.hr/RpoProvjeriObveznikaPdvWeb/stickyImg"

# Download captcha from URL
files <- download_captcha(url, n = 1000, path = "./img")

# Classify captchas (if answers weren't supplied,
# I'd be promped for interactive classification)
new_files <- classify(files, answers = NULL, path = ./img", rm_old = TRUE)

# Read answered captchas
captchas <- read_captcha(new_files, ans_in_path = TRUE)

# Use captchas to train a model
model <- train_model(captchas, verbose = FALSE, path = "./model.hdf5")

and got an error:

Error in m[, what] <- y : 
  number of items to replace is not a multiple of replacement length

Not sure what's happening here.

get_answers with vocabulary argument

@ctlente Qual sua opinião sobre adicionar um parâmetro de vocabulário nessa função e consequentemente no read_captcha?

A matriz que ele retorna de resposta p/ um captcha não faz muito sentido pq as colunas não representam sempre os mesmos elementos do vocabulário. Além de que dependendo da quantidade de captchas que vc carrega o join_captchas pode retornar arrays de tamanhos diferentes.

Se vc estiver de acordo eu implemento aqui!

In data("tjmg", package = "decryptr") : data set ‘tjmg’ not found

I am using R 3.4.2. on windows 7.

I am following your readme file and got stack at:
data('tjmg', package = 'decryptr')

It returns an warning:

Warning message:
In data("tjmg", package = "decryptr") : data set ‘tjmg’ not found

It cant find data set.

I also got warning in line:
keras_tjmg <- decryptrModels::read_model('tjmg')

It returns:

C:\ANACON~1\lib\site-packages\keras\models.py:287: UserWarning: Error in loading the saved optimizer state. As a result, your model is starting with a freshly initialized optimizer.
  warnings.warn('Error in loading the saved optimizer '

P. S. I have to admit I cant really follow in which way the package works. What is the most straightforward way to use your package? Should I run the model first?

Problem with download_captcha function

The download_captcha function doesn't download caprcha from the site. If I run following code:

url <- "http://pdv-reg.porezna-uprava.hr/RpoProvjeriObveznikaPdvWeb/upit"
files <- download_captcha(url, n = 5, path = "./img")

it doesn't download captcha picture, but all HTML code of the site.
This is how the files names look like:
captcha209c7fe60cb.html; charset=UTF-8
captcha209c12a77ae1.html; charset=UTF-8
captcha209c780443ab.html; charset=UTF-8
....

Problems with using predict after training model

Hi all,
I think I need your help with one thing. After training the model, I want it to predict a new captcha, and I am having some problems with your code (I looked at your vignettes to reach this point). This is what I tried with the error messages:

a<-prepare(read_captcha("./Captchas_test/captcha.png"))
predict(modelo,arq=a)
Error in keras_array(x) : argument "x" is missing, with no default

Do you have some ideas on why this might be happening?

Vazamento de memoria

Após muitos testes, e ao observar uma api que temos em produção utilizando o decryptr
verificamos que tem um vazamento de memoria.

Ao fazer muitas requisições a memoria consumida pelo processo vai aumentando exponencialmente.

Aparentemete acontece quando executa : decrypt(filecaptcha, modelo)
a princípio achei que o problema estava em outra parte do meu codigo, como no tratamento da imagem, ou algo do tipo.

Mas se comento esta linha do codigo a memoria fica estável mesmo após muitas requisições.

Alguem notou isso? Se sim, como posso estar resolvendo isso?

Aparentemente sobe 0.8MB ~ 1.2MB por requisição na API, porém após alguns dias ou meses o processo chega a utilizar toda a memoria disponivel na maquina.
Já coloquei um GC para limpar o que não esta sendo utilizado da memoria mas não resolveu.

Conversão para Java

Olá, tudo bem?

Tenho interesse em utilizar sua biblioteca em meus projetos, mas como não conheço nem trabalho com a linguagem R estou considerando converter sua biblioteca para a linguagem Java.

Por isso, pergunto:

  • Você acha que é viável a realização dessa conversão? A não utilização da linguagem R inviabilizaria o funcionamento da biblioteca por possuir recursos próprios que facilitam o desenvolvimento do algoritmo de quebra de captcha?

  • Você autorizaria a realização dessa conversão?

  • Se sim, você acha que somente o conhecimento da linguagem R é suficiente para a realização da conversão, ou seria necessário mais conhecimentos (processamento de imagens, etc.)?

Obrigado.

Erros na instalação - CentOs 7

Estou com erros ao instalar este pacote em um servidor CentOs 7.

Tudo mais está instalado, porém quando faço a instalação do decryptr ele me retorna simplesmente:

Error: (converted from warning) Setting LC_CTYPE failed, using "C" Execution halted Error: Failed to install 'decryptr' from GitHub: Failed to install 'decryptrModels' from GitHub: (converted from warning) installation of package 'tidyselect' had non-zero exit status

Já fiz a reinstalação do openssl e vários pacotes.

Este repositório ainda é mantido?

Someone has any idea how to manage it when it came to has different number of characters in captcha from the same website?

When I try to train a model using captchas from this site bellow I'm bumping up with this message:

http://consultacadastral.inss.gov.br/Esocial/api/imagem?d=I_009d15c0-a586-423b-b10e-36521bc5ae9a_1FF85DE2D634E9EC1DEFBB94B88BDBD5.lbroute_v131p040_internet&amp;uId=1604083697154

Error in join_answers(ys) : Answers to all captchas must have the same length

There's a way to fix it?

Dificuldades para treinar um modelo novo

Estou tentando treinar um modelo para o TJRJ. Apliquei alguns filtros para limpar a imagem da captcha e facilitar a assertividade, ficando com uma imagem assim:

image

Renomeei 1000 captchas nesse estilo pra treinar um modelo, porém quando vou testar, não chega nem próximo da resposta correta. Estou fazendo alguma coisa errada no treinamento do modelo? Segue abaixo o script que usei:

captchasToTrain <- read_captcha(captchasInFolder, ans_in_path = TRUE)
model <- train_model(captchasToTrain, verbose = TRUE)

Não tenho muito conhecimento de ml, então tentei alterar o n_epochs aleatoriamente. Tentei com o padrão de 30, 10 e com 100. Ambos não acertaram nenhum caractere.
@edit
Segue o plot dos gráficos de 10 e de 100

image

image

Unable to install the package in R

Hi,

Please kindly, if possible help me about the following error.

First, I run:

if (!require(devtools)) install.packages("devtools")
devtools::install_github("decryptr/decryptr")

Then, the console shows this up:

package ‘glue’ successfully unpacked and MD5 sums checked
Error: Failed to install 'decryptr' from GitHub:
Failed to install 'decryptrModels' from GitHub:
Failed to install 'keras' from GitHub:
(converted from warning) cannot remove prior installation of package ‘glue’

Thank you in advance.

Training - Classify test - Generate from mac use on Linux

I need some help with the hdf5 generated by classify / train_model.

I am new to R, I cannot tell what is different from both setups.

When I use on RStudio and bring my hdf5 from mac to Linux (described bellow) it does generates some errors.
When I traing from ec2 it does works, although accuracy is low 'cause I am training with only 10 examples, because I have to generate all images, get all answers and set the arrays. It's not possible to answer from console in linux, correct me if I am wrong.

packageVersion("magrittr")
[1] ‘2.0.1’ (‘1.5’ on MAC)
packageVersion("grDevices")
[1] ‘3.6.0’ (‘4.0.3’ on MAC)

That's the only difference from what I can see.

Why does my hdf5 generated by mac it's not working on Linux?

*AWS Linux configuration
Operating System: Amazon Linux 2 Kernel: Linux 4.14.203-156.332.amzn2.x86_64 Architecture: x86-64

Problemas instalação

Ao tentar:



> if (!require(devtools)) install.packages("devtools")
Loading required package: devtools
Installing package into ‘/usr/local/lib/R/site-library’
(as ‘lib’ is unspecified)
--- Please select a CRAN mirror for use in this session ---
Secure CRAN mirrors

 1: 0-Cloud [https]                   2: Algeria [https]
 3: Australia (Canberra) [https]      4: Australia (Melbourne 1) [https]
 5: Australia (Melbourne 2) [https]   6: Australia (Perth) [https]
 7: Austria [https]                   8: Belgium (Ghent) [https]
 9: Brazil (PR) [https]              10: Brazil (RJ) [https]
11: Brazil (SP 1) [https]            12: Brazil (SP 2) [https]
13: Bulgaria [https]                 14: Chile 1 [https]
15: Chile 2 [https]                  16: China (Guangzhou) [https]
17: China (Lanzhou) [https]          18: China (Shanghai) [https]
19: Colombia (Cali) [https]          20: Czech Republic [https]
21: Denmark [https]                  22: East Asia [https]
23: Ecuador (Cuenca) [https]         24: Estonia [https]
25: France (Lyon 1) [https]          26: France (Lyon 2) [https]
27: France (Marseille) [https]       28: France (Montpellier) [https]
29: France (Paris 2) [https]         30: Germany (Göttingen) [https]
31: Germany (Münster) [https]        32: Greece [https]
33: Iceland [https]                  34: Indonesia (Jakarta) [https]
35: Ireland [https]                  36: Italy (Padua) [https]
37: Japan (Tokyo) [https]            38: Japan (Yonezawa) [https]
39: Malaysia [https]                 40: Mexico (Mexico City) [https]
41: Norway [https]                   42: Philippines [https]
43: Serbia [https]                   44: Spain (A Coruña) [https]
45: Spain (Madrid) [https]           46: Sweden [https]
47: Switzerland [https]              48: Turkey (Denizli) [https]
49: Turkey (Mersin) [https]          50: UK (Bristol) [https]
51: UK (Cambridge) [https]           52: UK (London 1) [https]
53: USA (CA 1) [https]               54: USA (IA) [https]
55: USA (KS) [https]                 56: USA (MI 1) [https]
57: USA (NY) [https]                 58: USA (OR) [https]
59: USA (TN) [https]                 60: USA (TX 1) [https]
61: Vietnam [https]                  62: (other mirrors)


Selection: 9
also installing the dependencies ‘openssl’, ‘httr’, ‘git2r’

trying URL 'https://cran-r.c3sl.ufpr.br/src/contrib/openssl_0.9.9.tar.gz'
Content type 'application/x-gzip' length 1112927 bytes (1.1 MB)
==================================================
downloaded 1.1 MB

trying URL 'https://cran-r.c3sl.ufpr.br/src/contrib/httr_1.3.1.tar.gz'
Content type 'application/x-gzip' length 147593 bytes (144 KB)
==================================================
downloaded 144 KB

trying URL 'https://cran-r.c3sl.ufpr.br/src/contrib/git2r_0.21.0.tar.gz'
Content type 'application/x-gzip' length 1155512 bytes (1.1 MB)
==================================================
downloaded 1.1 MB

trying URL 'https://cran-r.c3sl.ufpr.br/src/contrib/devtools_1.13.4.tar.gz'
Content type 'application/x-gzip' length 486348 bytes (474 KB)
==================================================
downloaded 474 KB

* installing *source* package ‘openssl’ ...
** package ‘openssl’ successfully unpacked and MD5 sums checked
Using PKG_CFLAGS=
------------------------- ANTICONF ERROR ---------------------------
Configuration failed because openssl was not found. Try installing:
 * deb: libssl-dev (Debian, Ubuntu, etc)
 * rpm: openssl-devel (Fedora, CentOS, RHEL)
 * csw: libssl_dev (Solaris)
 * brew: [email protected] (Mac OSX)
If openssl is already installed, check that 'pkg-config' is in your
PATH and PKG_CONFIG_PATH contains a openssl.pc file. If pkg-config
is unavailable you can set INCLUDE_DIR and LIB_DIR manually via:
R CMD INSTALL --configure-vars='INCLUDE_DIR=... LIB_DIR=...'
--------------------------------------------------------------------
ERROR: configuration failed for package ‘openssl’
* removing ‘/usr/local/lib/R/site-library/openssl’
* installing *source* package ‘git2r’ ...
** package ‘git2r’ successfully unpacked and MD5 sums checked
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking how to run the C preprocessor... gcc -std=gnu99 -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking size of void*... 8
checking for library containing inflate... -lz
checking for library containing EVP_EncryptInit... no
checking for openssl... no
configure: error: in `/tmp/RtmpFbDSLp/R.INSTALL1093c698cfecb/git2r':
configure: error:
  ---------------------------------------------
   The OpenSSL library that is required to
   build git2r was not found.

   Please install:
     libssl-dev    (package on e.g. Debian and Ubuntu)
     openssl-devel (package on e.g. Fedora, CentOS and RHEL)
     openssl       (Homebrew package on OS X)
   and try again.

   If the OpenSSL library is installed on
   your system but the git2r configuration
   is unable to find it, you can specify
   the include and lib path to OpenSSL with:
   R CMD INSTALL --configure-args='--with-libssl-include=INCLUDE_PATH --with-libssl-lib=LIB_PATH' git2r
  ---------------------------------------------
See `config.log' for more details
ERROR: configuration failed for package ‘git2r’
* removing ‘/usr/local/lib/R/site-library/git2r’
ERROR: dependency ‘openssl’ is not available for package ‘httr’
* removing ‘/usr/local/lib/R/site-library/httr’
ERROR: dependencies ‘httr’, ‘git2r’ are not available for package ‘devtools’
* removing ‘/usr/local/lib/R/site-library/devtools’

The downloaded source packages are in
        ‘/tmp/RtmpAIvp0v/downloaded_packages’
Warning messages:
1: In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE,  :
  there is no package called ‘devtools’
2: In install.packages("devtools") :
  installation of package ‘openssl’ had non-zero exit status
3: In install.packages("devtools") :
  installation of package ‘git2r’ had non-zero exit status
4: In install.packages("devtools") :
  installation of package ‘httr’ had non-zero exit status
5: In install.packages("devtools") :
  installation of package ‘devtools’ had non-zero exit status

Consequentemente:

> devtools::install_github("decryptr/decryptr")
Error in loadNamespace(name) : there is no package called ‘devtools’

Installation failed

:~$ sudo apt install libmagick++* -y
:~$ sudo su - -c "R -e \"devtools::install_github('decryptr/decryptr')\""

installed decryptr upon installed libmagick++*

How use predict for rfb

How use the code below wit rfb model?
`# Load model (install decryptrModels package first)
keras_tjmg <- decryptrModels::read_model('tjmg')
data('tjmg', package = 'decryptr')
tjmg$model <- keras_tjmg

captcha %>%
read_captcha() %>%
predict(tjmg, arq = .)`

How use model method

Hello, I am trying to use the model functionality of the package.

I can perform all the features including prepare, but when I try to run the model, it informs that the method can not be found.

What is the correct syntax for direct use?

Tnkz

Erro carregar models

keras_tjmg <- decryptrModels::read_model('tjmg')

/usr/local/lib/python2.7/dist-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
  from ._conv import register_converters as _register_converters
Using TensorFlow backend.
Error: ImportError: No module named tensorflow

Detailed traceback:
  File "/home/ighort/.local/lib/python2.7/site-packages/keras/__init__.py", line 3, in <module>
    from . import utils
  File "/home/ighort/.local/lib/python2.7/site-packages/keras/utils/__init__.py", line 6, in <module>
    from . import conv_utils
  File "/home/ighort/.local/lib/python2.7/site-packages/keras/utils/conv_utils.py", line 9, in <module>
    from .. import backend as K
  File "/home/ighort/.local/lib/python2.7/site-packages/keras/backend/__init__.py", line 83, in <module>
    from .tensorflow_backend import *
  File "/home/ighort/.local/lib/python2.7/site-packages/keras/backend/tensorflow_backend.py", line 5, in <module>
    import tensorflow as tf

Receita

Olá. Este projeto funciona para o captcha da Receita Federal?

Outdated README

The README is outdated with a mention to v0.1 and a badge pointing to Travis.

package ‘h5py’ is not available (for R version 3.4.3)

install.packages("h5py")
Warning message:
package ‘h5py’ is not available (for R version 3.4.3)
keras_rfb <- decryptrModels::read_model('rfb')
Error in keras::load_model_hdf5(file_path) :
The h5py Python package is required to save and load models

Problema com modelo TJRS.

O download "tjrs" funciona, porém o decrypt não. Não existe o modelo para TJRS, e ao tentar um dos modelos preditivos, não consegue quebrar o captcha corretamente.

image

Problema utilizando scripts do repositório do decrypt

Olá! Tudo bem?

Eu estou treinando o modelo para um tipo específico de CAPTCHA e o meu modelo funcionou bem (+- 93%) quanto utilizei as funções read_captcha e train_model da própria biblioteca do decryptr.

Eu gostaria de melhorar o meu modelo e, para isso, gostaria de verificar o que acontece quando modifico alguns parâmetros das funções layer.dropout e layer_cond_2d. Como não dá pra mudar estes parâmetros na biblioteca, eu estou tentando usar os scripts originais.

Porém, quando utilizo os arquivos model.R e read.R do repositório https://github.com/decryptr/decryptr/releases, eu não consigo obter um resultado razoável. O novo modelo não chega nem a 10% de eficácia.

Dessa maneira, gostaria de confirmar se o repositório https://github.com/decryptr/decryptr/releases está atualizado.

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.