Giter VIP home page Giter VIP logo

fennec-profile-manager's People

Contributors

johanlorenzo avatar mugurell avatar sparky93 avatar st3fan avatar vladgheorghe avatar vmbaicu avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fennec-profile-manager's Issues

The imported backups size are not aligned with the existing ones

Precondition

Have backups created on FPM.

Steps to reproduce

  1. Launch Firefox Profile Manager;
  2. Tap the Import button;
  3. Select a .fpm file from a different version of Fennec;
  4. Observe the UI for the imported backup;

Expected behavior

The imported backup size is aligned with the existing backup size.

Actual behavior

The imported backups size are not aligned with the existing ones.

Notes:

Screenshot

Device information

  • Android device: Samsung Galaxy S8 (Android 9); Huawei Honor 8 (Android 7.0), Motorola Moto G6 (Android 8.0), Pixel 3 (Android Q);
  • Build Firefox Profile Manager v1.0 Build 6 for Fennec Release, Beta and Nightly.

Backup not applied back on Fennec

Preconditions

  • Firefox Profile Manager is installed.

Steps to reproduce

  1. Open FPM.
  2. Create a backup for Fennec Nightly.
  3. On Fennec go to Settings -> General -> Hide topsites and close Fennec.
  4. Open FPM and apply the backup created at step 2.
  5. Open Fennec again.

Expected behavior

The backup is applied and topsites are not hidden.

Actual behavior

The backup is not applied and the topsites are not displayed.

Device information

  • Android device: Google Pixel (Android Q).
  • Build Firefox Profile Manager v1.0 for Fennec Release, Beta and Nightly.

FPM crashes with OutOfMemoryError when applying backups

Preconditions:

Have backups from Fennec Beta/Nightly saved on Drive.

Steps to reproduce

  1. Launch Firefox Profile Manager for Release;
  2. Tap the "Import" button and choose from Drive the backups from Fennec Beta/Nightly;
  3. Tap the "Apply" button for one of the imported backup from step 2;

Expected behavior

The backup is applied on Release.

Actual behavior

FPM crashes.

Logcat:
2020-01-28 14:20:40.933 22867-22867/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: org.mozilla.fpm, PID: 22867
java.lang.OutOfMemoryError: Failed to allocate a 37775104 byte allocation with 9431432 free bytes and 9210KB until OOM, target footprint 201326592, growth limit 201326592
at kotlin.collections.CollectionsKt___CollectionsKt.toByteArray(_Collections.kt:969)
at org.mozilla.fpm.data.BackupRepositoryImpl.deploy(BackupRepositoryImpl.kt:116)
at org.mozilla.fpm.presentation.mvp.MainPresenter$applyBackup$1$1.invokeSuspend(MainPresenter.kt:45)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(Dispatched.kt:241)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:594)
at kotlinx.coroutines.scheduling.CoroutineScheduler.access$runSafely(CoroutineScheduler.kt:60)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:740)

Device information

  • Android device: Google Pixel 3 (Android Q);
  • Build Firefox Profile Manager v1.0 Build 5 for Fennec Release, Beta and Nightly.

FPM closes if we want to apply the backup on Android 5.1.1

Preconditions

  • Firefox Profile Manager is installed.
  • Backup1 is created.

Steps to reproduce

  1. Open FPM.
  2. Swipe from left to right for Backup1.
  3. Tap on the "Apply" button.
  4. Tap on "Yes".

Expected behavior

"The backup has been applied successfully, please check the app." message is displayed.

Actual behavior

FPM Nightly closes, and the following message is displayed on the device homepage: "Unfortunately, FPM Nightly has stopped."

Device information

  • Android device: Samsung Galaxy Tab A 6 (Android 5.1.1).
  • Build Firefox Profile Manager v1.0 for Fennec Release, Beta and Nightly.

FPM crashes when the backup created is applied

Preconditions

  • Firefox Profile Manager is installed.
  • Firefox is installed.

Steps to reproduce

  1. Open FPM and create a new backup.
  2. Go to Firefox and change the settings -> close the browser.
  3. Go to FPM and swipe from left to right for the backup added at step 1.
  4. Tap on "Apply".

Expected behavior

The backup is applied.

Actual behavior

The FPM crashes.

  • Logcat:
    01-13 11:42:51.889 870-870/? D/BatteryMeterView: ACTION_BATTERY_CHANGED : level:100 status:3 health:2
    01-13 11:42:52.019 16948-16962/? I/art: Background sticky concurrent mark sweep GC freed 323(37KB) AllocSpace objects, 0(0B) LOS objects, 0% free, 71MB/71MB, paused 2.685ms total 113.922ms
    01-13 11:42:52.169 16948-16948/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: org.mozilla.fpm_nightly, PID: 16948
    java.lang.ArrayIndexOutOfBoundsException: length=8; index=-13
    at org.mozilla.fpm.data.BackupRepositoryImpl.getFileSignature(BackupRepositoryImpl.kt:75)
    at org.mozilla.fpm.data.BackupRepositoryImpl.getAll(BackupRepositoryImpl.kt:167)
    at org.mozilla.fpm.presentation.mvp.MainPresenter$getBackups$1$backups$1.invokeSuspend(MainPresenter.kt:26)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    at kotlinx.coroutines.DispatchedTask.run(Dispatched.kt:241)
    at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:594)
    at kotlinx.coroutines.scheduling.CoroutineScheduler.access$runSafely(CoroutineScheduler.kt:60)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:740)

Note:

  • On devices with android >5, the backup is duplicated with "-temp" extension added to the name.

Device information

  • Android device: Samsung Galaxy Tab A 6(Android 5.1.1), Huawei Honor 8 (Android 7.0), Sony Xperia Z5 Premium (Android 7.1.1) .
  • Build Firefox Profile Manager v1.0 for Fennec Release, Beta and Nightly.

FPM crashes when applying an imported and new backups file

Preconditions:

Have Fennec and Firefox Profile Manager installed.

Steps to reproduce

  1. Launch Firefox Profile Manager;
  2. Tap the Import button;
  3. Select any file available;
  4. Go to the imported backup and select Apply;

Expected behavior

Only the Fennec apk's can be selected with Import.

Actual behavior

Any available file can be imported and when the Apply button is tapped, the app crahes.

Notes:

crash.txt

Device information

  • Android device: Samsung Galaxy S8 (Android 9); Pixel (Android Q); Huawei Honor 8 (Android 7.0)
  • Build Firefox Profile Manager v1.0 Build 2 for Fennec Release, Beta and Nightly.

The backups list UI is different for imported backups

Preconditions:

Have backups on Firefox Profile Manager.

Steps to reproduce

  1. Launch Firefox Profile Manager;
  2. Tap the Import button;
  3. Select a .zip file;
  4. Observe the UI for the imported backup;

Expected behavior

The imported backups UI is the same with the existing backups.

Actual behavior

The imported backups UI is different.

Notes:

Screenshot

Device information

  • Android device: Samsung Galaxy S8 (Android 9); Huawei Honor 8 (Android 7.0), Motorola Moto G6 (Android 8.0).
  • Build Firefox Profile Manager v1.0 Build 3 for Fennec Release, Beta and Nightly.

Ensure support for all Fennec variants

Sebastian: "We are now confident to migrate beta and nightly too. So it would be great if we can create build variants that work with beta/nightly".

For FPM this would mean different build configurations with different packageIds and different sharedUserIds.
As sharedUserId Fennec Release and Beta use the same org.mozilla.firefox.sharedID
While Fennec Nightly uses org.mozilla.fennec.sharedID.

POC for accessing the internal storage of Fennec

To access the internal storage of another app the new one should

  • use the same sharedUserId
    (otherwise the new app will not be able to access another one's resources)
  • be signed with the same key
    (otherwise the new app cannot be installed)

Find out how after this 2 conditions are met can we access Fennec's internal storage.

The backups with edited name are saved without the .fpm extension

Preconditions:

Have backups on Firefox Profile Manager.

Steps to reproduce

  1. Launch Firefox Profile Manager;
  2. Tap the Edit button for one backup;
  3. Edit the name and tap the "OK" button;
  4. Go to the same backup and tap the "Share" button and save it on Drive;
  5. Go to Import and from Drive select the previous saved backup;

Expected behavior

The backup is imported.

Actual behavior

The edited backup can not be imported because the .fpm extension is missing.

Notes:

Video

Device information

  • Android device: Samsung Galaxy S8 (Android 9);
  • Build Firefox Profile Manager v1.0 Build 5 for Fennec Release, Beta and Nightly.

[regression] The permission storage pop-up is not displayed

Preconditions:

Have Fennec and Firefox Profile Manager installed.
Have Permission storage disabled in FPM Android settings.

Steps to reproduce

  1. Launch Firefox Profile Manager;
  2. Observe the behavior.

Expected behavior

The permission storage pop-up is displayed with the Deny/Allow options.

Actual behavior

The permission storage pop-up is not displayed.

Notes:

This is also reproducible for fresh install or clear data.

Device information

  • Android device: Samsung Galaxy S8 (Android 9); Huawei Honor 8 (Android 7.0), Motorola Moto G6 (Android 8.0).
  • Build Firefox Profile Manager v1.0 Build 3 for Fennec Release, Beta and Nightly.

App unresponsive if the device orientation is changed & permissions denied

Preconditions

Firefox Profile Manager is installed.

Steps to reproduce

  1. Open FPM.
  2. Deny permissions.
  3. Switch the device orientation from portrait to landscape.

Expected behavior

The app is displayed in landscape mode correctly.

Actual behavior

A blank screen is displayed and the app is unresponsive.

Device information

  • Android device: Google Pixel (Android Q); Samsung Galaxy S8 (Android 9).
  • Build Firefox Profile Manager v1.0 for Fennec Release, Beta and Nightly.

UI

Create a simple and intuitive UI.

Fennec Profile Backup Helper App

For testing the migration from Fennec to Fenix we need a helper app to make this process repeatable for testing and debugging purposes.

The helper app should allow to take a snapshot of the app data directory of Fennec. After that a tester can test the migration by updating Fennec to Fenix. To repeat the process the tester can uninstall Fenix, reinstall Fennec and then restore the previous app data into Fennec by using the helper app. In addition to that the helper app should allow to share a saved backup (e.g. to send it to the development team for debugging purposes).

Creating a snapshot

The helper tool should allow to create a snapshot by:

  • Killing Fennec if it is running (to avoid the data changing while the backup is saved)
  • Copying the app data from Fennec into a directory in the helper app's app data directory
  • Naming the snapshot to distinguish it from other snapshot

Restoring a snapshot

The helper tool should allow to restore a snapshot by:

  • Killing Fennec if it is running (to avoid the app reading/using/changing the data while restoring the backup)
  • Removing all existing data in the Fennec app directory
  • Copying the data of the snapshot into the Fennec app directory

Sharing a snapshot

In order to allow a tester to hand a snapshot to a developer for debugging the helper app should make it possible to share a snapshot by:

  • Zipping up all the data in the snapshot
  • Invoking and Intent to share data zip file with any app (e.g. to send it via email)

Technical details

Normally an app can't read the application data of an other app. However Fennec defines a sharedUserId in its manifest that makes this possible as long as we sign the helper app with the same signing key.

Setup release automation (build + signing)

To use the app together with a Fennec production installation we need to sign the application with the Fennec production signing key.

I talked to @JohanLorenzo yesterday and the recommendation was to setup a "release automation" process like we did for RB and Fenix. Right now we should estimate at least one week to set this up.

[Bug] Set backup name pop-up is dismissed when rotating the device

Preconditions:

Have Fennec and Firefox Profile Manager installed.

Steps to reproduce

  1. Launch Firefox Profile Manager with a fresh install or after clear data;
  2. Tap the Create button;
  3. With the Set backup name pop-up displayed, rotate the device in landscape mode;
  4. Observe the behavior.

Expected behavior

The Set backup name pop-up is displayed.

Actual behavior

The Set backup name pop-up is dismissed.

Notes:

This is also reproducible for the Edit backup name, Apply pop-ups.

Device information

  • Android device: Samsung Galaxy S8 (Android 9); Pixel (Android Q); Motorola Nexus 6 (Android 7.1.1)
  • Build Firefox Profile Manager v1.0 for Fennec Release, Beta and Nightly.

Add confirmation step for "Delete" button

Preconditions

  • Firefox Profile Manager is installed.
  • Backup1 is created.

Steps to reproduce

  1. Open FPM.
  2. Swipe from left to right for Backup1.
  3. Tap on the "Delete" button.

Expected behavior

"Yes" and "Cancel" options are displayed.
Note that for Apply, Edit, the options are displayed and we consider that "Delete" is important also.

Actual behavior

No confirmation step is displayed.

Device information

  • Android device: Google Pixel (Android Q); Samsung Galaxy S8 (Android 9), Samsung Galaxy Tab A 6 (Android 5.1.1).l
  • Build Firefox Profile Manager v1.0 for Fennec Release, Beta and Nightly.

Visual issues when adding long name for backup

Preconditions

  • Firefox Profile Manager is installed.

Steps to reproduce

  1. Open FPM and tap on "+".
  2. Add a long name (>50 characters).
  3. Tap on "OK".

Expected behavior

The name of the backup is displayed with no issues, the date of creation is displayed.

Actual behavior

Screenshot_20191206-150857

Device information

  • Android device: Google Pixel (Android Q).
  • Build Firefox Profile Manager v1.0 for Fennec Release, Beta and Nightly.

[Regression] Crash when apply backup on certain devices

Preconditions

  • Firefox Profile Manager is installed.
  • Firefox is installed.

Steps to reproduce

  1. Open FPM and create a new backup.
  2. Go to Firefox and change the settings -> close the browser.
  3. Go to FPM and swipe from left to right for the backup added at step 1.
  4. Tap on "Apply".

Expected behavior

The backup is applied.

Actual behavior

The FPM crashes.

Logcat1:
2020-01-27 11:01:50.699 24286-24286/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: org.mozilla.fpm, PID: 24286
java.io.FileNotFoundException: /data/user/0/org.mozilla.firefox/lib/libplugin-container.so (Permission denied)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.(FileOutputStream.java:221)
at java.io.FileOutputStream.(FileOutputStream.java:169)
at org.mozilla.fpm.utils.ZipUtils.extract(ZipUtils.java:92)
at org.mozilla.fpm.data.BackupRepositoryImpl.deploy(BackupRepositoryImpl.kt:124)
at org.mozilla.fpm.presentation.mvp.MainPresenter$applyBackup$1$1.invokeSuspend(MainPresenter.kt:45)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(Dispatched.kt:241)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:594)
at kotlinx.coroutines.scheduling.CoroutineScheduler.access$runSafely(CoroutineScheduler.kt:60)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:740)

Logcat2:
BetaCrashApply.txt

Note

On devices with android >5, the backup is duplicated with "-temp" extension added to the name.

Device information

  • Android device: Huawei Honor 8 (Android 7.0), Sony Xperia Z5 Premium (Android 7.1.1), Nokia 6 (Android 7.1.1), Motorola Moto G6 (Android 8).
  • Build Firefox Profile Manager v1.0 for Fennec Release, Beta and Nightly.

Add detekt and ktlint as static analysis tools

Detekt alongside ktlint helps to enforce the official Android Kotlin style and ensure the code follows Kotlin best practices.
For our project we will need:

[regression] FPM crashes when tapping on Share button

Preconditions:

Have backups on Firefox Profile Manager.

Steps to reproduce

  1. Launch Firefox Profile Manager;
  2. Tap the Share button from the backup menu;
  3. Observe the behavior.

Expected behavior

The share options are displayed.

Actual behavior

FPM crashes.

Notes:

crash

Device information

  • Android device: Samsung Galaxy S8 (Android 9); Huawei Honor 8 (Android 7.0); Motorola Moto G6 (Android 8.0).
  • Build Firefox Profile Manager v1.0 Build 3 for Fennec Release, Beta and Nightly.

Remove the "Share" functionality

Stefan informed us there are still some concerns related to security for exported fpm backups.
Even though we tried to address these by encrypting the backups and use our own custom filetype, for a better peace of mind we should
[ ] remove the "Share" functionality
Removing this means "Import" is redundant so we should also
[ ] remove the "Import" functionality

[FPM] Space between characters can be added when editing backup names.

Preconditions

  • Firefox Profile Manager is installed.
  • "test" is saved.

Steps to reproduce

  1. Open FPM and swipe from left to right for the backup displayed.
  2. Choose "Edit".
  3. Change from "test" to "test 1".

Expected behavior

Space between characters can't be added. It should give an error or when is done editing, "test_1" should be displayed.

Actual behavior

Space between characters can be added.

Device information

  • Android device: Samsung Galaxy Tab A 6(Android 5.1.1), Samsung Galaxy S8 (Android 9); Huawei Honor 8 (Android 7.0), Motorola Moto G6 (Android 8.0).
  • Build Firefox Profile Manager v1.0 for Fennec Release, Beta and Nightly.

Throbber icon from creating/apply a backup is freezing

Preconditions:

Have Firefox Profile Manager installed.

Steps to reproduce

  1. Launch Firefox Profile Manager;
  2. Tap on the "+" button to create a new backup;
  3. Set a name and tap on "OK";

Expected behavior

A Throbber is presented on the screen notifying the user that the new backup is creating.

Actual behavior

The Throbber is freezing.

Notes:

  • This issue is reproducing also when you apply a backup;
  • This issue is not reproducible on Huawei Honor 8 (Android 7.0) and Samsung Galaxy Tab A6 (Android 5.1);
    20191212_113338

Device information

Android device: Samsung Galaxy S8 (Android 9); Google Pixel (Android Q).
Build Firefox Profile Manager v1.0 Build 2 for Fennec Release, Beta and Nightly.

Only the last backup is displayed if we add/import/edit multiple backups with the same name

Preconditions

  • Firefox Profile Manager is installed.
  • Firefox is installed.

Steps to reproduce

  1. Open FPM and create a backup "First run".
  2. Go to Firefox and change the settings -> close the browser.
  3. Open FPM again and create a backup "First run".
  4. Close FPM.
  5. Open FPM and pay attention to the backups created at step 1 and 3.

Expected behavior

A message should inform the user that the first backup will be replaced by the new one, with options to continue or cancel.

Actual behavior

Only the last backup is displayed, even if the browser settings were different (also the details: the size of the backup).

Note

This is also reproducible for the import/edit option after the app is closed and opened.

Device information

  • Android device:
  • Huawei Honor 8 (Android 7.0),
  • Motorola Moto G6 (Android 8.0)
  • Google Pixel 3 (Android Q)
  • Samsung S8 (Android 9.0)
  • HTC Desire 820 (Android 6.0.1)
  • Build Firefox Profile Manager v1.0 for Fennec Release, Beta and Nightly.

[Bug] The text cursor is missing when setting/editing a backup name

Preconditions:

Have Fennec and Firefox Profile Manager installed.

Steps to reproduce

  1. Launch Firefox Profile Manager;
  2. Tap the Create button;
  3. Observe the Set backup name pop up;

Expected behavior

There is a text cursor indicating the insertion point.

Actual behavior

The text cursor is missing.

Notes:

Screenshot
Also reproducible for Edit backup name.

Device information

  • Android device: Samsung Galaxy S8 (Android 9); Pixel (Android Q); Motorola Nexus 6 (Android 7.1.1)
  • Build Firefox Profile Manager v1.0 for Fennec Release, Beta and Nightly.

Backup name is updated if the title is not changed and "OK" option is tapped

Preconditions

  • Firefox Profile Manager is installed.
  • Firefox is installed.

Steps to reproduce

  1. Open FPM and create a new backup "Test".
  2. Go to FPM and swipe from left to right for the backup "Test".
  3. Tap on "Edit" but don't change the name.
  4. Tap on "OK".

Expected behavior

The name of the backup is "Test".

Actual behavior

The backup name is updated to "Test(2)".

Device information

  • Android device: Huawei Honor 8 (Android 7.0), Samsung Galaxy s8 (Android 9.0), Motorola Moto G6 (Android 8), Pixel 3 (Android Q), HTC Desire (Android 6.0.1).
  • Build Firefox Profile Manager v1.0 Build 7 for Fennec Release, Beta and Nightly.

Error message displayed when dismissing Import with the device back button

Preconditions:

Have Fennec and Firefox Profile Manager installed.

Steps to reproduce

  1. Launch Firefox Profile Manager;
  2. Tap the Import button;
  3. Tap the device back button;

Expected behavior

The FPM page is displayed.

Actual behavior

The "Something went wrong, please try again later." pop-up message is displayed.

Notes:

Screenshot

Device information

  • Android device: Samsung Galaxy S8 (Android 9); Huawei Honor 8 (Android 7.0).
  • Build Firefox Profile Manager v1.0 Build 2 for Fennec Release, Beta and Nightly.

The imported backups are blank

Steps to reproduce

  1. Launch Firefox Profile Manager;
  2. Tap the Import button;
  3. Select a .fpm file;
  4. Observe the UI for the imported backup;

Expected behavior

The imported backup is displayed.

Actual behavior

The imported backups is blank.

Notes:

Screenshot
After restarting the app, the backups are displayed.

Device information

  • Android device: Samsung Galaxy S8 (Android 9); Huawei Honor 8 (Android 7.0), Motorola Moto G6 (Android 8.0).
  • Build Firefox Profile Manager v1.0 Build 4 for Fennec Release, Beta and Nightly.

[Bug] New backup can be created when permission to access storage is denied

Preconditions:

Have Fennec and Firefox Profile Manager installed.

Steps to reproduce

  1. Launch Firefox Profile Manager with a fresh install or after clear data;
  2. Tap Deny on permission storage;
  3. Tap the Create button.

Expected behavior

The Create button is not working.

Actual behavior

The Create button can be tapped and a new backup can be created.

Notes:

The create button is not actionable all the time.

Device information

  • Android device: Samsung Galaxy S8 (Android 9); Pixel (Android Q); Motorola Nexus 6 (Android 7.1.1)
  • Build Firefox Profile Manager v1.0 for Fennec Release, Beta and Nightly.

For more than 9 backups, the buttons "Import" and "Create" are overlapping the last entry

Preconditions

  • Firefox Profile Manager is installed.

Steps to reproduce

  1. Open FPM.
  2. Create more than one backup (more than 9), in order for the page to be scrollable.
  3. Pay attention to the last entry.

Expected behavior

There is no overlapping between backups and buttons.

Actual behavior

The buttons Import and Create are overlapping the last entry.

Device information

*Android device: Motorola Moto G6 (Android 8.0).
*Build Firefox Profile Manager v1.0 Build 3 for Fennec Release, Beta and Nightly.

Screenshot_20191220-120021

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.