Giter Club home page Giter Club logo

mooncake's People

Contributors

dependabot[bot] avatar kwunyeung avatar riccardom avatar ryuash 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mooncake's Issues

Implement the mnemonic phrase backup curtain page

We need to implement the full UX to ask users to backup their mnemonic phrase at a certain condition. It will be like this.

User flow

  1. At a certain condition, a curtain page will be displayed
  2. The curtain page requires the user to complete the backup process before allowing him/her to continue using the app.
  3. If the curtain page is passed, the user will be able to continue using the app. Optionally getting some rewards as finishing a quest.

Conditions on triggering the curtain page

  1. The user has made a certain number of transactions, e.g. after 5 posts or reactions
  2. The user account has a certain value of assets
  3. The user is going to operate some asset related operations, e.g. staking, which will be directed to Telescope in the future.

Rewards

  1. Drop a certain number of DSM to the account
  2. Get a Badge

@RiccardoM @bragaz Let's discuss. We will also need @Rooty2020 to help prepare the design.

Implement the automatic publishing of new app versions

Currently when a new version is ready to be published, we have to compile it and publish it by hand every time. What it would be ideal to have is an automatic system that when needed publishes both the Android and iOS versions to the respective beta testing programs automatically.

I think that this can be achieved pretty easily by:

  1. Switching the CI system to GitHub actions.
  2. Creating proper workflows for the two platforms.

Point 1 is tracked inside #41.

About point 2, I've found the following resources that might be interested to check out:

Let me know what you think @ryuash

Post messages not displaying new lines properly

Generic information

  • OS name and version: Android 10
  • Application build code: 4018
  • Network type (mobile/Wi-Fi): Both

Bug description

Currently the posts are not displaying newline characters (\n, \r) properly. All messages are shown as one-liners.

Steps to reproduce

  1. Create a post with multiple lines.
  2. Look at the post message.

Expected behavior

The post message should be viewed as a multi-lines message, instead of a single liner.

Messages can't be synced from a new account after several posts

Generic information

  • OS name and version: iOS 13.6
  • Application build code: 4012
  • Network type (mobile/Wi-Fi): WiFi

Bug description

Can't post new messages from a new account after posting several messags.

The last message sent from this account is

https://morpheus.desmos.network/transactions/3ECC1061CEE22924E2205D1F8F9ECFE8844DC28F0ECAA125CCDBBAB69DF8C328

which is the poll I have tested at #33

After that the posts can't be synced
IMG_5056

Steps to reproduce

Expected behavior

Markdown not rendered in comments

Generic information

  • OS name and version: N.A
  • Application build code: 4016
  • Network type (mobile/Wi-Fi): Both

Bug description

Inside the comments items, the Markdown is not loaded properly.

Steps to reproduce

Visualize the detail of a post

Expected behavior

The Markdown should be loaded properly

CC @kwunyeung

Loading post is very slow

Loading list of posts and content of the posts are very slow. This will discourage users to use the application.

Login screen small device overflow and ui enhancements

Generic information

  • OS name and version: iOS 13.5.1
  • Application build code: 4015
  • Network type (mobile/Wi-Fi): mobile and Wi-Fi

Bug description

Login screen on smaller devices are overflowing at the bottom.

Enhancements:

  • Turn login options in to columns
  • Change background color for both light and dark mode to match wireframe

Steps to reproduce

  1. Open the app
    image

Expected behavior

The T&C should be responsive at the bottom.

  • Background color should follow more closely with wireframe
    image

Encrypt content before sending transactions

Feature description

Currently all content in the transactions are not encrypted and public. Although the system is censorship resistance, it still enable trace of content delivery which link back to a certain user. As Mooncake holds the private key of the user, the content can be first encrypted and then put inside the tx message before broadcasting. The user sign the encrypted message rather than the original content. The content in the tx can be decrypted by Mooncake using the corresponding users's public key when the users load the data. The content being encrypted should be a salted string instead of the plain content so that other users can't decrypt it using users public key as they don't know the secret salt.

One scenario this feature can benefit is as below.

  1. User posted a post
  2. User regrets and deletes it
  3. User's post and deletion are all hidden in the txs where you can't trace from the Mooncake or on chain.

Implementation proposal

  1. Mooncake holds a secret salt. This can be the original value of the hashed subspace or another piece of random string. It acts like the app_id and secret of a Facebook app.
  2. Every time a user posts a content, the content is salted with the secret and encrypted. Then the post message holds this encryptedSaltedContent and broadcast.
saltedContent = secret + content
encryptedSaltedContent = encrypt(saltedContent, privKey)
  1. djuno should still store the encryptedSaltedContent to keep itself as the chain parser.
  2. When Mooncake displays the content, it decrypts with poster's pubkey and remove the secret
content = remove( secret, decrypt( encryptedSaltedContent, pubkey ) )

The secret should only be available in the binary build of the Mooncake, it should not be stored on GitHub. This should be purely done during build time.

Improve recover account wrong password feedback

Generic information

  • OS name and version: iOS
  • Application build code: 4018
  • Network type (mobile/Wi-Fi): Both

Bug description

When recovering an account from a mnemonic backup, if the user inputs the wrong password while recovering it the screen does not tell anything to the user itself.

Steps to reproduce

  1. Export the account as a mnemonic backup
  2. Try recovering it with a wrong password.

Expected behavior

An alert should be seen telling the password or input text is incorrect.

Emoji keyboard is not user friendly

Is it possible to use the native OS emoji keyboard instead of Flutter package? I am trying to adapt the emoji keyboard but I find it really hard to get a comfortable experience with it.

Edit or remove the messages not committed

When there is one failed message, all messages be trying to broadcast after it will not be committed. It is because all the messages will be grouped together and sent as a single transaction. The ValidateBasic will already blocked the tx being delivered. This can be solved if we can remove any failed messages or edit the message to become the correct format.

Implement the polls

Starting from Desmos v0.3.0, the users are able to create polls withing messages and answer existing polls. We should definitely implement this feature inside Mooncake as well. The UI for the posts have been already defined as follows:

View mnemonic read check

Feature description

From @kwunyeung

When the user wants to view the mnemonic, currently it has to go through the following warning screen. The problem is that he can tap on the "View mnemonic" button without reading the warning text.

Implementation proposal

We should also ask him to check a checkbox to make sure he's read it.

Strange response when answering poll

Generic information

  • OS name and version: iOS 13.6
  • Application build code: 4012
  • Network type (mobile/Wi-Fi): WiFi

Bug description

When I tap the poll answer, it keeps flashing back to the choices.

ezgif-5-14bc154cf260

Steps to reproduce

Tap the poll answers

Expected behavior

Profile fields editor not trimming the values

Generic information

  • OS name and version: iOS/Android
  • Application build code: 4102`
  • Network type (mobile/Wi-Fi): Both

Bug description

When editing the profile info (DTag, Biograpgy, etc), the input fields do not properly validate the input. Currently, if the user enters a value ending with a space ( ), when saving the DTag an error will be returned.

Steps to reproduce

  1. Open the edit account screen.
  2. Input a DTag value ending with a space.
  3. Try saving the profile.

Expected behavior

The input fields should be validated properly following the parameters that are present on chain as well. The user should not be allowed to save the profile if the input fields do not pass the validation rules.

Implement the profiles

Starting from Desmos v0.4.0 users are able to create their own personal profile with a moniker, cover and profile picture and a set of other different data. What we should do is implement the profile visualization following the below defined UI:

Liker image appearing twice

Generic information

  • OS name and version: N.A
  • Application build code: 4016
  • Network type (mobile/Wi-Fi): Both

Bug description

Sometime, the liker profile picture is appearing twice.

Steps to reproduce

Like a post.

Expected behavior

The liker profile picture should appear only once.

CC @kwunyeung

Poll results not displayed properly

Generic information

  • OS name and version: Android 10
  • Application build code: 4018
  • Network type (mobile/Wi-Fi): Both

Bug description

While viewing a poll's results, the bars are not displayed properly.
Update: this only happens when poll answer it not added to chain yet
photo5791994588611851231

Steps to reproduce

  1. Find a poll.
  2. Answer to that poll.

Expected behavior

The poll bars width should be sized accordingly to the percentage of voting people.

Add the ability of showing the mnemonic phrase

Currently the users are able to create a new account upon opening the application. Although this is a nice feature to onboard new users, we should provide them the ability to later retrieve that mnemonic so that they can properly store it and use it later if needed (e.g. in the case where a backup is needed).

Firebase Cloud Messaging not working inside release applications

Generic information

  • OS name and version: Android 10.0
  • Application build code: 4004
  • Network type (mobile/Wi-Fi): Not related

Bug description

Inside release applications, Firebase Cloud Messaging is not working properly and the users are not receiving notifications when their posts are liked, commented or reacted to.

Steps to reproduce

  1. Run the app in release mode
  2. Get a user to react to your post.

Expected behavior

A notification should be received. Instead nothing happens.

Implement rich link preview inside posts

Feature description

Currently when the user creates a post containing one or more link(s), the link appear as a simple clickable text.
update: https://www.youtube.com/watch?v=sZQ4Ddtz2A4&feature=youtu.be another reference
photo5803408760553714271

I think that in order to give the users a better experience, we should implement links previews.

Implementation proposal

Navigating across pub.dev, I've found that it might be a good library to use to implement this: rich_link_preview.

The way we could handle this is by getting any URL present inside the message body and using that to generate the link preview.

Also, the following conditions should apply:

  • if the message has more than one link, take the last one;
  • if the message has one or more images, do not display the link preview;
  • if the message has a poll, do not display the link preview.

Display Posts not delivered to chain correctly

Generic information

  • OS name and version: N/A
  • Application build code: 4102
  • Network type (mobile/Wi-Fi): both

Bug description

Update: this is not a poll bug but a a post bug as a whole
User should not be able to vote again in post details

Steps to reproduce

  • Vote on poll
    image

  • Click in to poll details
    image

  • Poll is voteable again

Expected behavior

User vote once and it stays

Comments number not displayed correctly

Generic information

  • OS name and version: Android 10
  • Application build code: 4016
  • Network type (mobile/Wi-Fi): Wi-Fi

Bug description

The comments number is not displayed correctly on a post which I have commented.

List object

Details

Steps to reproduce

  1. Comment a post
  2. Refresh the posts list

Expected behavior

The correct number of comments should be visualized.

Block users from posting before the account is confirmed being created on chain

Feature description

It takes time when a new key is being created and receive tokens from the faucet. It will generate errors if the user quickly post message or like before the account not being created.

Implementation proposal

We should either

  1. Block the user from entering the main screen and show a progress animation (a running lion?) right after the key is being created. The app keeps making a query to the chain and see if the address exists. If so, display a button. The user tap on the button and jump to the main screen.

  2. Disable all the buttons by default. The app keeps making a query to the chain and see if the address exists. Enable the buttons if it exists.

It's safer to query the account every time when the app is being loaded. This can also be a local checking to block the users make any posts when the account balance is too low.

Post status is not updated if app is closed prematurely

Generic information

  • OS name and version: Android 9
  • Application build code: 4102
  • Network type (mobile/Wi-Fi): Both

Bug description

When a post is created, the following series of actions is performed:

  1. The post is created locally.
  2. The post is sent to the chain.
  3. If the transaction is successful or it fails, a push notification is sent to the device.
  4. The post status is updated based on the notification result.

Unluckily, if the application is closed in between 2 and 3, the post status never gets updated.

This is even more disturbing since refreshing the posts list does not update the post status even if it has already been sent to the chain.

Steps to reproduce

  1. Create a post.
  2. Wait for the sync to complete.
  3. Close the app
  4. Wait 15 seconds, then open again the app.

The post will be in the wrong state (its background is going to stay dimmed).
Even refreshing the posts list, the status is not updated.

Expected behavior

The post status should be updated and sent as being stored online if the remote contents are equals to the local ones.

Anticipating Desmos features

Context

Currently Mooncake is based on the data which is read directly from the chain, without any intermediary layer in between the application and the blockchain itself. This allows for very small operating room as we need to be 100% compliant to what the chain offers when reading data, without having the possibility of extending the current features.

With the creation of a middle layer (Djuno), we instead might be able to extend the chain features by anticipating the ones that will come in later updates.

Example

As an example, suppose we want to implement the account profile now (which will be shipped on the next Desmos version), what we could do is:

  1. Use the middle layer database to store the accounts data while the feature is being developed on Desmos.
  2. Once the feature is developed, ask the user to migrate all the data from the database to the chain.
    This can be done by a simple transaction from the user device itself.

Pros & Cons

Pros:

  • Separate Mooncake and Desmos developments
  • Allow for faster new features on Mooncake
  • Show other developers how to create a hybrid application

Cons:

  • Reduce the decentralization of Mooncake
  • Requires a custom login logic to authenticate requests properly

Conclusion

I'm just throwing this idea out there, as I want a place to discuss this. I'm still trying to figure out my opinion of whether this might be a good or bad idea. What do you guys think? @bragaz @kwunyeung

Implementing content language selection

Currently when a user opens Mooncake, he is prompted with the latest 50 messages that are present inside the chain. Such messages can be written in many different languages.

In order to make users more comfortable inside the application itself, we should provide them with the ability of selecting the language(s) they would want the content to be displayed on. A possible implementation of a system could be the following:

  1. When parsing a post using Djuno, we could determine the language of the post message itself by using a natural language detection library such as Whatlanggo.
  2. Once we have determined the language, we can store that data inside our local database.
  3. Upon starting the application (if he has not done so yet), the user will be asked to select the one or more language(s) he would like the contents to be showed in.
  4. When querying the GraphQL APIs, we can simply filter the posts that have contents in the languages selected by the user.

Allow the user to switch profile

Feature description

Currently any user can create one or more profiles very easily. In order to make sure he can uses them properly, we should allow any user to easily switch between previously added profiles.

Implementation proposal

We could implement a UX the same as Twitter does.

Post time not reported properly

Generic information

  • OS name and version: Both
  • Application build code: N.A.
  • Network type (mobile/Wi-Fi): Both

Bug description

Inside a single post item, the posting time does not appear correct. After a minute that a post has been created, the text displays "A couple of hours ago". This is due to the fact that the time is considered to be in UTC instead of the local user time zone.

Steps to reproduce

  1. Create a post
  2. Wait a few minutes
  3. Look at the posting time

Expected behavior

The posting time should be appropriately displayed based on the current timezone of the user, not UTC.

Add a reporting system

In order to have the iOS version published on the App Store publicly, we are required to implement a reporting system that allows users to:

  1. Report posts to us for containing harming material.
  2. Hide locally such posts

A possible solution to this since we have no on-chain reporting feature yet, could be the one of sending an email for each report to us.
Hiding the post locally should be trivial.

Automatic funding is not working properly

Generic information

  • OS name and version: iOS/Android
  • Application build code: 4102
  • Network type (mobile/Wi-Fi): Both

Bug description

Currently, the request for new funds is done only when the available amount inside the wallet is less than 1 token.

However, if the user has 0.10 daric in his wallet, he will not be able to create new posts (since it's less than 0.20 daric). This will put him in a state from which more funds will not be asked and from which he cannot create new posts.

Steps to reproduce

  1. Register an account
  2. Get down to 0.10 daric (edit your account, create 2 posts and add 3 likes).
  3. Try creating a post.

The post will never be created.

Expected behavior

The ask for funding should be proportional based on the number of actions that the user is doing per transaction, not based on a predefined value.

Implement mnemonic export and import

Context

Currently when logging in the user is only able to perform the mnemonic login by manually typing each and every word of the mnemonic itself. At the same time, once he has logged in, he can only see his mnemonic and manually write it down on a piece of paper.

Feature description

In order to facilitate the export and later login using the mnemonic, what we could do is allowing him to export it as a shielded file. The overall working could then be:

  1. The user logs in using an existing mnemonic or creates a new account.
  2. Once logged in, he exports his mnemonic by protecting it with a password.
  3. When he wants to log in again on another device, he can use a new option that requires him to input the file and the password to unlock it.

Allow to remove a poll from withing the post creation screen

Feature description

Currently it's not possible to delete a poll once it has been added to the post being created inside the proper screen. We should allow for that.

Implementation proposal

Add a button that allows to delete the entire post all together after having added it.

Refactor UI - Utils and Theme

Feature description

Move all util functions inside the ui folder in to its own utils folder and update theme export.

Refactor UI: Screens, Widgets, Blocs

Feature description

  • Breakdown screens in to small widgets
  • Breakdown widgets in to smaller reusable widgets
  • Move widgets in to corresponding screens
  • Move blocs into corresponding screens

Write UI tests

Context

Currently we have a test coverage of ~ 18% which in my opinion is very low compared to the 70-80% coverage that is recommended for most projects.

This is partly due to the fact that most of the code we currently have is UI-related, and I've personally tested only the non-UI code which makes up for quite a small part of the overall code lines.

In order to solve this problem, we should start implementing UI tests. Following, some references I've found that might be useful when writing such tests.

References

Bloc tests

In order to properly test blocs, we should use the concepts outlined inside the Testing section of the Bloc documentation, which highlights how Bloc should be tested independently from other components.

When testing Bloc what I suggest to do is not use the create method that they have. Instead, use the public constructor passing mocked arguments when needed. This should ensure that the BuildContext is never used (as it should).

Widget tests

The second type of tests that should be done are Widget tests. These allow to test single widgets independently and make sure they work properly. An introduction on these kind of tests can be found inside the official Flutter documentation.

Integration tests

Finally, integration tests should be created in order to test the integration between a lot of widgets and how they react. A nice guide on these kind of tests can be found inside Flutter docs.

Implementation roadmap

What I suggest we do is create multiple PRs that over time implement all these tests when different bugs are found. This should ensure we do not over-due something, and also that we build proper tests that we need.

What do you think @ryuash

Allow the edit of a profile biography

Generic information

  • OS name and version: iOS
  • Application build code: 4018
  • Network type (mobile/Wi-Fi): Both

Bug description

Currently the user is not able to edit the biography without re-writing everything.

Steps to reproduce

  1. Try editing your profile, saving a biography.
  2. Go back, enter the edit screen again and click on the bio field.

File-from-iOS-1

Expected behavior

The user should be able to edit the biography properly.

Sharing posts to other platforms

Feature description

Currently there is no other way to show people what is going on Mooncake. Mooncake should have the ability to share the posts to other platforms like how FB, Instagram, Twitter are doing.

Screenshot 2020-07-10 at 4 53 56 PM

The item being shared is a web link which the post will be displayed on a web interface. This is how Instagram shows the content https://www.instagram.com/p/CCc80DAjhIW/

Implementation proposal

To achieve this, we will need

  1. Generate individual mooncake.space web link on Mooncake
  2. A webapp displaying individual post with the post ID
  3. Each individual page should be SEO friendly
  4. The webapp will detect if a user is running on mobile browser, if so ask user to open Mooncake to continue or download Mooncake

Switch CI/CD systems to GitHub Actions

Currently our CI system relies on CircleCI to build and test the application, and Travis to build and publish the documentation.

I honestly think that we might be able to properly switch to the new GitHub Actions CI/CD system. This wold probably would bring some improvements such as:

  • all the CI/CD will be done in one place, making it easier to check for errors;
  • we would be able to run any kind of job on any OS we want for free;
  • we could be able to integrate new features easily thanks to the existence of many already setup actions inside the Marketplace.

Here are some resource I've found interesting and we might want to look at:

What do you think about this @ryuash?

Apple devices not receiving push notifications

Generic information

  • OS name and version: iOS
  • Application build code: 4102
  • Network type (mobile/Wi-Fi): Both

Bug description

While inside Android everything works properly, iOS devices do not receive the proper push notifications.

Steps to reproduce

  1. Create a post.
  2. Ask someone to like it.

Expected behavior

You should receive a push notifications telling someone has liked the post, but nothing happens.

Mnemonic stays in memory even after user logout if it's restored from backup

Generic information

  • OS name and version: iOS 13.6
  • Application build code: 4014
  • Network type (mobile/Wi-Fi): WiFi

Bug description

The mnemonic phrase was not cleared after restoring the key from backup. It stays in memory. After I logged out and tap "I have a written mnemonic", it will shows the exact same mnemonic of the account I restored from backup.

Steps to reproduce

  1. Export mnemonic with password
  2. Log out
  3. Login with "Use mnemonic backup"
  4. Paste the encrypted backup and input the password
  5. Log out again after login successful
  6. Login with "I have a written mnemonic"

The previous mnemoinc will be shown on the 24 blanks.

Expected behavior

The 24 blanks should be all clear in all situations.

Misleading poll creation UI

Generic information

  • OS name and version: iOS/Android
  • Application build code: 4102
  • Network type (mobile/Wi-Fi): Both

Bug description

From a @lauranori message on Slack.

If I’m writing a poll and I don’t pay much attention reading the ‘What do you want to ask?’ section, I won’t see any differences between that and the various answers of the poll. I think more than one person could get it wrong (as in the example)

Steps to reproduce

  1. Enter the post creation screen
  2. Add a poll to the post

Expected behavior

The UI should reflect better the meaning of each input field.

Profile saving loading bar never stops

Originally reported by @lauranori inside the internal Slack.

Generic information

  • OS name and version: iOS 13.5.1
  • Application build code: 4004
  • Network type (mobile/Wi-Fi): mobile and Wi-Fi

Bug description

After saving the profile, the loading bar never stops spinning.

Steps to reproduce

  1. Edit the profile information.
  2. Save the profile.

Expected behavior

The profile should be saved and the loading bar should stop spinning.

The post layout and detail are not following the design

Generic information

  • OS name and version: iOS 13.5
  • Application build code: 4004
  • Network type (mobile/Wi-Fi): Wi-Fi

Bug description

  • The post of margin on the 4 sides are equal. (8px) - 1
  • The profile icon should be bigger (40px) - 2
  • Change the font of the user name to SF Pro Text Medium, 16px #000000 - 3
  • Change the font of the time to SF Pro Text Regular, 12px #646464 - 4
  • Change the background colour of reactions to #F4F4FC - 5
  • Change the colour of the number next to the 3 icons to #6D4DDB - 6
  • Change the "dot" colour to #6D4DDB or #6D4DDB 15% transparency - 7
  • Change the "more icon" colour to #999999 - 8
  • The spacing between the 3 icons (like, comment, reaction) should be always equal (20 px), - 9
  • Change the order of icons - 10

Expected behavior

https://xd.adobe.com/view/a017302b-fd5d-4ad5-481b-19968582ae5f-d626/screen/f991f826-117b-4894-b5dd-080d0af9c23a/3-0-post/

post details

Mnemonic should be removed from the device when app delete

Currently the user mnemonic is securely stored using flutter_secure_storage which stores the value inside the device secured storage which is Keychain on iOS. The default behaviour of iOS is to not remove any data in Keychain even when the app is uninstalled. The mnemonic is securely stored this way as only the app with the specific provisional profile can access the specific key/value in the storage. However, users will feel uncomfortable if the value always stay on the device even if the app is removed and feel strange if the app sign in automatically when the app is reinstalled.

It is better to force the user sign out when the user remove the app or force the user sign in again when the app is reinstalled. The solution to this UX is to remove all the key/value in the secured storage on every app install. This can be achieved by detecting the First Run on iOS.

Here is a reference to the implementation in Flutter.

https://stackoverflow.com/questions/57933021/flutter-how-do-i-delete-fluttersecurestorage-items-during-install-uninstall

Update TextTheme to use englishLike2018

Feature description

Currently the appBar theme uses englishLike2018 but the body textTheme uses englishLike2014

Implementation proposal

Update body textTheme to use englishLike2018 while keeping the default merge theme as a fallback

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.