Giter Site home page Giter Site logo

nexoid-nexui-flask's Introduction

StandWithUkraine

Hi, I am a programmer.

Current (but not active) project is an implementation of a core of NEXO standards. It's a major evolving specificaiton for payment terminals. I've released it as a free (like in "freedom") and opensource software.

Live demo.

If your interested please contact me using an email from the profile.

nexoid-nexui-flask's People

Watchers

 avatar  avatar

nexoid-nexui-flask's Issues

Crash caused by message id overflow

Relevant logs:

2021-03-13 17:23:25.097 D nexoid-fat    dec: <ScapiNngNotification xmlns=""><ntf><events><languageSelection><language>fr</language></languageSelection><serviceSelection><serviceId><payment/></serviceId></serviceSelection><manualEntry><pan>4485936516057131</pan><expirationDate><year>22</year><month>11</month></expirationDate><cvdData><cvd>111</cvd></cvdData></manualEntry><amountEntry><totalAmount>1111111</totalAmount><supplementaryAmount><amount>0</amount></supplementaryAmount><cashbackAmount>0</cashbackAmount></amountEntry></events></ntf><id>0</id></ScapiNngNotification>
2021-03-13 17:23:25,097 D Thread-39     Sent SCAP notification b'<ScapiNngNotification xmlns=""><ntf><events><languageSelection><language>fr</language></languageSelection><serviceSelection><serviceId><payment/></serviceId></serviceSelection><manualEntry><pan>4485936516057131</pan><expirationDate><year>22</year><month>11</month></expirationDate><cvdData><cvd>111</cvd></cvdData></manualEntry><amountEntry><totalAmount>1111111</totalAmount><supplementaryAmount><amount>0</amount></supplementaryAmount><cashbackAmount>0</cashbackAmount></amountEntry></events></ntf><id>0</id></ScapiNngNotification>'
2021-03-13 17:23:25.097 D nexoid-fat    enc: <ScapiNngRequest><req><output><language>fr</language><what><msg><crdhldrMsgWelcome/></msg></what></output></req><id>3</id></ScapiNngRequest>
2021-03-13 17:23:25,099 D scap4nexui    Received SCAPI request b'<ScapiNngRequest><req><output><language>fr</language><what><msg><crdhldrMsgWelcome/></msg></what></output></req><id>3</id></ScapiNngRequest>'
2021-03-13 17:23:25,101 D reqfrwdr      Received UI request b'{"source":{"type":"scap"},"payload":[{"api":"output","line":["Bienvenue"]}]}'
2021-03-13 17:23:25,113 D reqfrwdr      UI response b'{"ack":null}'
2021-03-13 17:23:25.115 D nexoid-fat    dec: <ScapiNngResponse><rsp><ack /></rsp><id>524287</id></ScapiNngResponse>
2021-03-13 17:23:25.116 D nexoid-fat    enc: <ScapiNngRequest><req><output><language>fr</language><what><msg><crdhldrMsgWelcome/></msg></what></output></req><id>4</id></ScapiNngRequest>
2021-03-13 17:23:25,115 D scap4nexui    SCAPI response b'<ScapiNngResponse><rsp><ack /></rsp><id>524287</id></ScapiNngResponse>'
2021-03-13 17:23:25,118 D scap4nexui    Received SCAPI request b'<ScapiNngRequest><req><output><language>fr</language><what><msg><crdhldrMsgWelcome/></msg></what></output></req><id>4</id></ScapiNngRequest>'
2021-03-13 17:23:25,119 D reqfrwdr      Received UI request b'{"source":{"type":"scap"},"payload":[{"api":"output","line":["Bienvenue"]}]}'
2021-03-13 17:23:25,220 D reqfrwdr      UI response b'{"ack":null}'
2021-03-13 17:23:25,221 D scap4nexui    SCAPI response b'<ScapiNngResponse><rsp><ack /></rsp><id>1048575</id></ScapiNngResponse>'
2021-03-13 17:23:25.222 D nexoid-fat    dec: <ScapiNngResponse><rsp><ack /></rsp><id>1048575</id></ScapiNngResponse>
2021-03-13 17:23:25.222 D nexoid-fat    enc: <ScapiNngRequest><req><updateInterfaces><interfaceStatus>00010111</interfaceStatus></updateInterfaces></req><id>5</id></ScapiNngRequest>
2021-03-13 17:23:25,223 D scap4nexui    Received SCAPI request b'<ScapiNngRequest><req><updateInterfaces><interfaceStatus>00010111</interfaceStatus></updateInterfaces></req><id>5</id></ScapiNngRequest>'
2021-03-13 17:23:25,227 D reqfrwdr      Received UI request b'{"source":{"type":"scap"},"payload":[{"api":"interface","line":["00010111"]}]}'
2021-03-13 17:23:25,322 D reqfrwdr      UI response b'{"ack":null}'
2021-03-13 17:23:25,324 D scap4nexui    SCAPI response b'<ScapiNngResponse><rsp><ack /></rsp><id>2097151</id></ScapiNngResponse>'
2021-03-13 17:23:25.324 D nexoid-fat    dec: <ScapiNngResponse><rsp><ack /></rsp><id>2097151</id></ScapiNngResponse>
2021-03-13 17:23:25.324 D nexoid-fat    enc: <ScapiNngRequest><req><output><language>fr</language><what><trxAmount>1111111</trxAmount><trxCurrencyAlpha3>PLN</trxCurrencyAlpha3></what></output></req><id>6</id></ScapiNngRequest>
2021-03-13 17:23:25,325 D scap4nexui    Received SCAPI request b'<ScapiNngRequest><req><output><language>fr</language><what><trxAmount>1111111</trxAmount><trxCurrencyAlpha3>PLN</trxCurrencyAlpha3></what></output></req><id>6</id></ScapiNngRequest>'
2021-03-13 17:23:25,326 D reqfrwdr      Received UI request b'{"source":{"type":"scap"},"payload":[{"api":"output","line":["11111.11","PLN"]}]}'
2021-03-13 17:23:25,493 D reqfrwdr      UI response b'{"ack":null}'
2021-03-13 17:23:25.494 D nexoid-fat    dec: <ScapiNngResponse><rsp><ack /></rsp><id>4194303</id></ScapiNngResponse>
2021-03-13 17:23:25.494 D nexoid-fat    enc: <ScapiNngRequest><req><updateInterfaces><interfaceStatus>00000000</interfaceStatus></updateInterfaces></req><id>7</id></ScapiNngRequest>
2021-03-13 17:23:25,494 D scap4nexui    SCAPI response b'<ScapiNngResponse><rsp><ack /></rsp><id>4194303</id></ScapiNngResponse>'
2021-03-13 17:23:25,499 D scap4nexui    Received SCAPI request b'<ScapiNngRequest><req><updateInterfaces><interfaceStatus>00000000</interfaceStatus></updateInterfaces></req><id>7</id></ScapiNngRequest>'
2021-03-13 17:23:25,500 D reqfrwdr      Received UI request b'{"source":{"type":"scap"},"payload":[{"api":"interface","line":["00000000"]}]}'
2021-03-13 17:23:25,728 D reqfrwdr      UI response b'{"ack":null}'
2021-03-13 17:23:25.729 D nexoid-fat    dec: <ScapiNngResponse><rsp><ack /></rsp><id>8388607</id></ScapiNngResponse>
2021-03-13 17:23:25.729 D nexoid-fat    enc: <ScapiNngRequest><req><output><language>fr</language><what><msg><crdhldrEmvPleaseWait/></msg></what></output></req><id>8</id></ScapiNngRequest>
2021-03-13 17:23:25,729 D scap4nexui    SCAPI response b'<ScapiNngResponse><rsp><ack /></rsp><id>8388607</id></ScapiNngResponse>'
2021-03-13 17:23:25,730 D scap4nexui    Received SCAPI request b'<ScapiNngRequest><req><output><language>fr</language><what><msg><crdhldrEmvPleaseWait/></msg></what></output></req><id>8</id></ScapiNngRequest>'
2021-03-13 17:23:25,731 D reqfrwdr      Received UI request b'{"source":{"type":"scap"},"payload":[{"api":"output","line":["\\u23f3\\tS\'il vous pla\\u00eet, attendez..."]}]}'
2021-03-13 17:23:25,913 D reqfrwdr      UI response b'{"ack":null}'
2021-03-13 17:23:25.914 D nexoid-fat    dec: <ScapiNngResponse><rsp><ack /></rsp><id>16777215</id></ScapiNngResponse>
2021-03-13 17:23:25.915 D nexoid-fat    enc: <ScapiNngRequest><req><output><language>fr</language><what><msg><crdhldrEmvApproved/></msg><selectedService><payment/></selectedService></what></output></req><id>9</id></ScapiNngRequest>
2021-03-13 17:23:25,914 D scap4nexui    SCAPI response b'<ScapiNngResponse><rsp><ack /></rsp><id>16777215</id></ScapiNngResponse>'
2021-03-13 17:23:25,918 D scap4nexui    Received SCAPI request b'<ScapiNngRequest><req><output><language>fr</language><what><msg><crdhldrEmvApproved/></msg><selectedService><payment/></selectedService></what></output></req><id>9</id></ScapiNngRequest>'
2021-03-13 17:23:25,920 D reqfrwdr      Received UI request b'{"source":{"type":"scap"},"payload":[{"api":"output","line":["\\u2714\\ufe0f\\tApprouv\\u00e9e","Vente"]}]}'
2021-03-13 17:23:26,123 D reqfrwdr      UI response b'{"ack":null}'
2021-03-13 17:23:26,124 D scap4nexui    SCAPI response b'<ScapiNngResponse><rsp><ack /></rsp><id>33554431</id></ScapiNngResponse>'
2021-03-13 17:23:26.125 D nexoid-fat    dec: <ScapiNngResponse><rsp><ack /></rsp><id>33554431</id></ScapiNngResponse>
2021-03-13 17:23:26.125 D nexoid-fat    enc: <ScapiNngRequest><req><output><language>fr</language><what><ssn><crdhldrSsnCardRemoved/></ssn></what></output></req><id>10</id></ScapiNngRequest>
2021-03-13 17:23:26,126 D scap4nexui    Received SCAPI request b'<ScapiNngRequest><req><output><language>fr</language><what><ssn><crdhldrSsnCardRemoved/></ssn></what></output></req><id>10</id></ScapiNngRequest>'
2021-03-13 17:23:26,127 D reqfrwdr      Received UI request b'{"source":{"type":"scap"},"payload":[{"api":"ssn","line":["Carte supprim\\u00e9e"]}]}'
2021-03-13 17:23:26,287 D reqfrwdr      UI response b'{"ack":null}'
2021-03-13 17:23:26,289 D scap4nexui    SCAPI response b'<ScapiNngResponse><rsp><ack /></rsp><id>67108863</id></ScapiNngResponse>'
2021-03-13 17:23:26.289 D nexoid-fat    dec: <ScapiNngResponse><rsp><ack /></rsp><id>67108863</id></ScapiNngResponse>
2021-03-13 17:23:26.290 D nexoid-fat    enc: <ScapiNngRequest><req><print><type><merchantReceipt/></type></print></req><id>11</id></ScapiNngRequest>
2021-03-13 17:23:26,290 D scap4nexui    Received SCAPI request b'<ScapiNngRequest><req><print><type><merchantReceipt/></type></print></req><id>11</id></ScapiNngRequest>'
2021-03-13 17:23:26,291 D reqfrwdr      Received UI request b'{"source":{"type":"scap"},"payload":[{"api":"print","line":["merchantReceipt"]}]}'
2021-03-13 17:23:26,404 D reqfrwdr      UI response b'{"ack":null}'
Exception in thread scap4nexui:
Traceback (most recent call last):
  File "/usr/lib/python3.9/threading.py", line 954, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.9/threading.py", line 892, in run
    self._target(*self._args, **self._kwargs)
  File "/home/hurufu/nexo/nexoid/nexui-flask/nexui/__init__.py", line 125, in run_scap4nexui
    return scap4nexui.main()
  File "/home/hurufu/nexo/nexoid/nexui-flask/nexui/scap4nexui/__init__.py", line 43, in main
    exchange_messages()
  File "/home/hurufu/nexo/nexoid/nexui-flask/nexui/scap4nexui/__init__.py", line 38, in exchange_messages
    rsp = sm.fromnexui(nexui.recv())
  File "/home/hurufu/nexo/nexoid/nexui-flask/nexui/scap4nexui/scapi_message.py", line 427, in fromnexui
    return asn.encode('ScapiNngResponse', nng_msg, check_constraints=True)
  File "/usr/lib/python3.9/site-packages/asn1tools/compiler.py", line 136, in encode
    type_.check_constraints(data)
  File "/usr/lib/python3.9/site-packages/asn1tools/codecs/compiler.py", line 99, in check_constraints
    return self.constraints_checker.encode(data)
  File "/usr/lib/python3.9/site-packages/asn1tools/codecs/constraints_checker.py", line 331, in encode
    self._type.encode(data)
  File "/usr/lib/python3.9/site-packages/asn1tools/codecs/constraints_checker.py", line 218, in encode
    member.encode(data[name])
  File "/usr/lib/python3.9/site-packages/asn1tools/codecs/constraints_checker.py", line 147, in encode
    raise ConstraintsError(
asn1tools.codecs.ConstraintsError: id: Expected an integer between 0 and 99999999, but got 134217727.
2021-03-13 17:23:29.290 E nexoid-fat    scapi_Data_Print_Interaction: Messaging error (5) at 'nng_recv': Timed out
2021-03-13 17:23:29.290 D nexoid-fat    enc: <ScapiNngRequest><req><output><language>fr</language><what><msg><crdhldrMsgReceiptPrintingFailed/></msg><ssn><crdhldrSsnReceiptPrintingFailed/></ssn></what></output></req><id>12</id></ScapiNngRequest>
2021-03-13 17:23:32.290 E nexoid-fat    scapi_Data_Output_Interaction: Messaging error (5) at 'nng_recv': Timed out
2021-03-13 17:23:32.290 D nexoid-fat    enc: <ScapiNngRequest><req><print><type><cardholderReceipt/></type></print></req><id>13</id></ScapiNngRequest>
2021-03-13 17:23:35.290 E nexoid-fat    scapi_Data_Print_Interaction: Messaging error (5) at 'nng_recv': Timed out
2021-03-13 17:23:35.290 D nexoid-fat    enc: <ScapiNngRequest><req><output><language>fr</language><what><msg><crdhldrMsgReceiptPrintingFailed/></msg><ssn><crdhldrSsnReceiptPrintingFailed/></ssn></what></output></req><id>14</id></ScapiNngRequest>
2021-03-13 17:23:38.290 E nexoid-fat    scapi_Data_Output_Interaction: Messaging error (5) at 'nng_recv': Timed out
2021-03-13 17:23:38.290 W nexoid-fat    papi_Diagnostics_Maintenance_Recovery: TER_TIMEOUT N_TECHNICAL_ERROR
2021-03-13 17:23:38.290 D nexoid-fat    t:16917 n:papi_ui prot:req {"source": {"type": "pap"}, "payload": [{"api": "output", "line": [ "Diagnostics", "Terminal Error: TER_TIMEOUT", "Nok: N_TECHNICAL_ERROR" ]}]}
2021-03-13 17:23:38,290 D reqfrwdr      Received UI request b'{"source": {"type": "pap"}, "payload": [{"api": "output", "line": [ "Diagnostics", "Terminal Error: TER_TIMEOUT", "Nok: N_TECHNICAL_ERROR" ]}]}'
2021-03-13 17:23:38,299 D reqfrwdr      UI response b'{"ack":null}'
2021-03-13 17:23:38.299 D nexoid-fat    t:16917 n:papi_ui peer:rep {"ack":null}
2021-03-13 17:23:38.299 D nexoid-fat    t:16917 n:papi_ui prot:req {"source": {"type": "pap"}, "payload": [{"api": "output", "line": [ "Application restart requested" ]}]}
2021-03-13 17:23:38,300 D reqfrwdr      Received UI request b'{"source": {"type": "pap"}, "payload": [{"api": "output", "line": [ "Application restart requested" ]}]}'
2021-03-13 17:23:38,398 D reqfrwdr      UI response b'{"ack":null}'
2021-03-13 17:23:38.399 D nexoid-fat    t:16917 n:papi_ui peer:rep {"ack":null}
2021-03-13 17:23:38.408 D nexoid-fat    t:16917 n:papi_ui prot:req {"source": {"type": "pap"}, "payload": [{"api": "output", "line": [ "Startup" ]}]}
2021-03-13 17:23:38,409 D reqfrwdr      Received UI request b'{"source": {"type": "pap"}, "payload": [{"api": "output", "line": [ "Startup" ]}]}'
2021-03-13 17:23:38,486 D reqfrwdr      UI response b'{"ack":null}'
2021-03-13 17:23:38.486 D nexoid-fat    t:16917 n:papi_ui peer:rep {"ack":null}
2021-03-13 17:23:38.489 D nexoid-cpp    scapi_Authorise_Service
2021-03-13 17:23:38.489 D nexoid-fat    enc: <ScapiNngRequest><req><output><language>pl</language><what><msg><crdhldrMsgWelcome/></msg></what></output></req><id>1</id></ScapiNngRequest>
2021-03-13 17:23:41.490 E nexoid-fat    scapi_Data_Output_Interaction: Messaging error (5) at 'nng_recv': Timed out
2021-03-13 17:23:41.490 W nexoid-fat    papi_Diagnostics_Maintenance_Recovery: TER_TIMEOUT N_TECHNICAL_ERROR
2021-03-13 17:23:41.490 D nexoid-fat    t:16917 n:papi_ui prot:req {"source": {"type": "pap"}, "payload": [{"api": "output", "line": [ "Diagnostics", "Terminal Error: TER_TIMEOUT", "Nok: N_TECHNICAL_ERROR" ]}]}
2021-03-13 17:23:41,490 D reqfrwdr      Received UI request b'{"source": {"type": "pap"}, "payload": [{"api": "output", "line": [ "Diagnostics", "Terminal Error: TER_TIMEOUT", "Nok: N_TECHNICAL_ERROR" ]}]}'
2021-03-13 17:23:41,496 D reqfrwdr      UI response b'{"ack":null}'
2021-03-13 17:23:41.497 D nexoid-fat    t:16917 n:papi_ui peer:rep {"ack":null}
2021-03-13 17:23:41.498 D nexoid-fat    t:16917 n:papi_ui prot:req {"source": {"type": "pap"}, "payload": [{"api": "output", "line": [ "Application restart requested" ]}]}
2021-03-13 17:23:41,499 D reqfrwdr      Received UI request b'{"source": {"type": "pap"}, "payload": [{"api": "output", "line": [ "Application restart requested" ]}]}'
2021-03-13 17:23:41,646 D reqfrwdr      UI response b'{"ack":null}'
2021-03-13 17:23:41.647 D nexoid-fat    t:16917 n:papi_ui peer:rep {"ack":null}

SoftPoS demo

Came up with a SoftPoS concept using my architecture.

Add card reader support using PC/SC API

in order to deliver SoftPoS demo at least some sort of card reading has to be supported.

  • Decide on architecture for the demo
  • Implement Card_Inserted event

Crash during amount entry

2021-03-15 20:02:16.013 D nexoid-cpp    scapi_Wait_For_Event ...
Exception in thread reqfrwdr:
Traceback (most recent call last):
  File "/usr/lib/python3.9/threading.py", line 954, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.9/threading.py", line 892, in run
    self._target(*self._args, **self._kwargs)
  File "/home/hurufu/nexo/nexoid/nexui-flask/nexui/__init__.py", line 104, in forward_ui_requests
panic: pthread_mutex_lock: Invalid argument
This message is indicative of a BUG.
Report this at https://github.com/nanomsg/nng/issues
    req = nexui.recv()
  File "/usr/lib/python3.9/site-packages/pynng/nng.py", line 454, in recv
/usr/lib/python3.9/site-packages/pynng/_nng.abi3.so(nni_panic+0x114) [0x7f553c1f7864]
/usr/lib/python3.9/site-packages/pynng/_nng.abi3.so(nni_aio_fini+0x1d) [0x7f553c1f111d]
/usr/lib/python3.9/site-packages/pynng/_nng.abi3.so(nni_aio_free+0x18) [0x7f553c1f1258]
/usr/lib/python3.9/site-packages/pynng/_nng.abi3.so(nng_recvmsg+0x92) [0x7f553c1e0632]
/usr/lib/python3.9/site-packages/pynng/_nng.abi3.so(nng_recv+0x37) [0x7f553c1e06b7]
/usr/lib/python3.9/site-packages/pynng/_nng.abi3.so(+0x66bd7) [0x7f553c1d7bd7]
/usr/lib/libpython3.9.so.1.0(+0x14cc12) [0x7f553ee70c12]
/usr/lib/libpython3.9.so.1.0(_PyObject_MakeTpCall+0x30d) [0x7f553ee56f6d]
/usr/lib/libpython3.9.so.1.0(_PyEval_EvalFrameDefault+0x507a) [0x7f553ee52cea]
/usr/lib/libpython3.9.so.1.0(+0x128b0d) [0x7f553ee4cb0d]
/usr/lib/libpython3.9.so.1.0(_PyFunction_Vectorcall+0x34e) [0x7f553ee5ec4e]
/usr/lib/libpython3.9.so.1.0(_PyEval_EvalFrameDefault+0x602) [0x7f553ee4e272]
/usr/lib/libpython3.9.so.1.0(+0x12932f) [0x7f553ee4d32f]
/usr/lib/libpython3.9.so.1.0(_PyFunction_Vectorcall+0x34e) [0x7f553ee5ec4e]
/usr/lib/libpython3.9.so.1.0(_PyEval_EvalFrameDefault+0x3ca) [0x7f553ee4e03a]
/usr/lib/libpython3.9.so.1.0(+0x12932f) [0x7f553ee4d32f]
/usr/lib/libpython3.9.so.1.0(_PyFunction_Vectorcall+0x34e) [0x7f553ee5ec4e]
/usr/lib/libpython3.9.so.1.0(_PyEval_EvalFrameDefault+0x4a11) [0x7f553ee52681]
/usr/lib/libpython3.9.so.1.0(+0x128b0d) [0x7f553ee4cb0d]
/usr/lib/libpython3.9.so.1.0(_PyFunction_Vectorcall+0x34e) [0x7f553ee5ec4e]
/usr/lib/libpython3.9.so.1.0(_PyEval_EvalFrameDefault+0x2ca9) [0x7f553ee50919]
/usr/lib/libpython3.9.so.1.0(_PyFunction_Vectorcall+0x1aa) [0x7f553ee5eaaa]
/usr/lib/libpython3.9.so.1.0(_PyEval_EvalFrameDefault+0x602) [0x7f553ee4e272]
/usr/lib/libpython3.9.so.1.0(_PyFunction_Vectorcall+0x1aa) [0x7f553ee5eaaa]
/usr/lib/libpython3.9.so.1.0(_PyEval_EvalFrameDefault+0x602) [0x7f553ee4e272]
/usr/lib/libpython3.9.so.1.0(_PyFunction_Vectorcall+0x1aa) [0x7f553ee5eaaa]
/usr/lib/libpython3.9.so.1.0(+0x14b334) [0x7f553ee6f334]
/usr/lib/libpython3.9.so.1.0(+0x239006) [0x7f553ef5d006]
/usr/lib/libpython3.9.so.1.0(+0x214a64) [0x7f553ef38a64]
/usr/lib/libpthread.so.0(+0x9299) [0x7f553eb3f299]
/usr/lib/libc.so.6(clone+0x43) [0x7f553ec56053]

Nicer UI with clear indication what is beeing demoed

UI should be nice in the sense it should look like real eCommerce application, with nice card data entry page. There are no strict requirements, because it's only a demo and I'm not an UI designer. Right now it's too technical.

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.