Coder Social home page Coder Social logo

sqlighter's People

Contributors

confile avatar mycaddev avatar sashafirsov avatar treitter avatar vals-productions 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

Watchers

 avatar  avatar  avatar  avatar  avatar

sqlighter's Issues

A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.

I get the following error in my release build:

10-11 03:06:28.766 1346-1357/? E/StrictMode: A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
10-11 03:06:28.766 1346-1357/? E/StrictMode: java.lang.Throwable: Explicit termination method 'close' not called
10-11 03:06:28.766 1346-1357/? E/StrictMode:     at dalvik.system.CloseGuard.open(CloseGuard.java:184)
10-11 03:06:28.766 1346-1357/? E/StrictMode:     at android.database.sqlite.SQLiteConnection.<init>(SQLiteConnection.java:170)
10-11 03:06:28.766 1346-1357/? E/StrictMode:     at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:190)
10-11 03:06:28.766 1346-1357/? E/StrictMode:     at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
10-11 03:06:28.766 1346-1357/? E/StrictMode:     at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
10-11 03:06:28.766 1346-1357/? E/StrictMode:     at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
10-11 03:06:28.766 1346-1357/? E/StrictMode:     at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:806)
10-11 03:06:28.766 1346-1357/? E/StrictMode:     at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:791)
10-11 03:06:28.766 1346-1357/? E/StrictMode:     at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)
10-11 03:06:28.766 1346-1357/? E/StrictMode:     at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:1148)
10-11 03:06:28.766 1346-1357/? E/StrictMode:     at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:268)
10-11 03:06:28.766 1346-1357/? E/StrictMode:     at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223)
10-11 03:06:28.766 1346-1357/? E/StrictMode:     at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187)
10-11 03:06:28.766 1346-1357/? E/StrictMode:     at com.google.android.gms.googlehelp.search.a.a(SourceFile:55)
10-11 03:06:28.766 1346-1357/? E/StrictMode:     at com.google.android.gms.googlehelp.d.a.b(SourceFile:49)
10-11 03:06:28.766 1346-1357/? E/StrictMode:     at com.google.android.gms.googlehelp.search.a.e(SourceFile:113)
10-11 03:06:28.766 1346-1357/? E/StrictMode:     at com.google.android.gms.googlehelp.service.ClearHelpHistoryIntentService.onHandleIntent(SourceFile:49)
10-11 03:06:28.766 1346-1357/? E/StrictMode:     at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
10-11 03:06:28.766 1346-1357/? E/StrictMode:     at android.os.Handler.dispatchMessage(Handler.java:102)
10-11 03:06:28.766 1346-1357/? E/StrictMode:     at android.os.Looper.loop(Looper.java:135)
10-11 03:06:28.766 1346-1357/? E/StrictMode:     at android.os.HandlerThread.run(HandlerThread.java:61)

IOS SQLite database could not be initialized

When running the following code:

    println("DatabaseAdapterImpl - setDatabaseWithSQLighterDb()")
    let dbImpl: SQLighterDbImpl = SQLighterDbImpl()
    dbImpl.setDbNameWithNSString(MMDatabase.databaseName)

    let isDbFileDeployed: Bool = dbImpl.isDbFileDeployed()
    if !isDbFileDeployed {
      println("DatabaseAdapterImpl - setDatabaseWithSQLighterDb(): database not deployed")
    }
    else {
      println("DatabaseAdapterImpl - setDatabaseWithSQLighterDb(): database deployed")
    }

    dbImpl.setOverwriteDbWithBoolean(false)
    dbImpl.copyDbOnce()
    dbImpl.openIfClosed()

I get the following output:

DatabaseAdapterImpl - setDatabaseWithSQLighterDb()
DatabaseAdapterImpl - setDatabaseWithSQLighterDb(): database not deployed
2015-09-21 19:44:21.126 TestApp[62389:994686] 
Source db path: 
/Users/mg/Library/Developer/CoreSimulator/Devices/AE4833C1-296D-41C4-A587-131C9940F3FB/data/Containers/Bundle/Application/44814519-3190-4FC7-A385-3E8F17C21716/TestApp.app/buddyisDB.sqlite3
Dest db path: 
/Users/mg/Library/Developer/CoreSimulator/Devices/AE4833C1-296D-41C4-A587-131C9940F3FB/data/Containers/Data/Application/0630F3FA-A019-4DE5-B4EC-A67F76CFCA87/Documents/buddyisDB.sqlite3
2015-09-21 19:44:21.126 TestApp[62389:994686] Could not copy database

It seems that the database could not be created. Could you please fix that?

not able to access my sqlite.db in assets folder (Android)

hi,

i can't seems to access my sqlite.db in the assets folder for my android application. It always throw me "DB file is not deployed" whereby it is not able to access to my sqlite.db resided in my assets folder. Any help is greatly appreciated..thanks very much :)

   SQLighterDbImpl db = new SQLighterDbImpl();
    String dbPath =
            this.getApplication().getApplicationContext().getFilesDir()
                    .getParentFile().getPath() + "/databases/";
    db.setDbPath(dbPath);
    db.setDbName("sqlite.sqlite");
    boolean isDbFileDeployed = db.isDbFileDeployed();
    if(!isDbFileDeployed) {
        System.out.println("DB file is not deployed");
    } else {
        System.out.println("DB file is deployed");
    }

Cannot compile the code

When compiling I get the following error:

:sqlighter:ios_arm64DebugSqlighterlibSharedLibrary SKIPPED
:sqlighter:compileIos_arm64DebugSqlighterlibStaticLibrarySqlighterlibObjcpp
/Users/mg/Downloads/Majestella/sqlighter/src/sqlighterlib/objc/SQLighterRsImpl.m:76:54: error: cannot initialize a parameter of type 'const jbyte *' (aka 'const signed char *') with an rvalue of type 'const void *'
    IOSByteArray *ba = [IOSByteArray arrayWithBytes: [ d bytes] count:(int)[d length]];
                                                     ^~~~~~~~~~
/Applications/J2Objc/j2objc-0.9.8b/include/IOSPrimitiveArray.h:152:1: note: passing argument to parameter 'buf' here
PRIMITIVE_ARRAY_INTERFACE(byte, Byte, jbyte)
^
/Applications/J2Objc/j2objc-0.9.8b/include/IOSPrimitiveArray.h:61:54: note: expanded from macro 'PRIMITIVE_ARRAY_INTERFACE'
+ (instancetype)arrayWith##U_NAME##s:(const C_TYPE *)buf count:(NSUInteger)count; \
                                                     ^
1 error generated.

:sqlighter:compileIos_arm64DebugSqlighterlibStaticLibrarySqlighterlibObjcpp FAILED

FAILURE: Build failed with an exception.

Android Demo Project Error

The first time I start the Android demo project I get the following error:

09-18 17:08:14.663 3336-3336/com.prod.vals.andr_demo_prj D/dalvikvm: Late-enabling CheckJNI
09-18 17:08:14.903 3336-3336/com.prod.vals.andr_demo_prj I/dalvikvm: Could not find method android.view.ViewGroup.onRtlPropertiesChanged, referenced from method android.support.v7.widget.Toolbar.onRtlPropertiesChanged
09-18 17:08:14.903 3336-3336/com.prod.vals.andr_demo_prj W/dalvikvm: VFY: unable to resolve virtual method 13345: Landroid/view/ViewGroup;.onRtlPropertiesChanged (I)V
09-18 17:08:14.903 3336-3336/com.prod.vals.andr_demo_prj D/dalvikvm: VFY: replacing opcode 0x6f at 0x0007
09-18 17:08:14.913 3336-3336/com.prod.vals.andr_demo_prj I/dalvikvm: Could not find method android.content.res.TypedArray.getChangingConfigurations, referenced from method android.support.v7.internal.widget.TintTypedArray.getChangingConfigurations
09-18 17:08:14.913 3336-3336/com.prod.vals.andr_demo_prj W/dalvikvm: VFY: unable to resolve virtual method 411: Landroid/content/res/TypedArray;.getChangingConfigurations ()I
09-18 17:08:14.913 3336-3336/com.prod.vals.andr_demo_prj D/dalvikvm: VFY: replacing opcode 0x6e at 0x0002
09-18 17:08:14.913 3336-3336/com.prod.vals.andr_demo_prj I/dalvikvm: Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.internal.widget.TintTypedArray.getType
09-18 17:08:14.913 3336-3336/com.prod.vals.andr_demo_prj W/dalvikvm: VFY: unable to resolve virtual method 433: Landroid/content/res/TypedArray;.getType (I)I
09-18 17:08:14.913 3336-3336/com.prod.vals.andr_demo_prj D/dalvikvm: VFY: replacing opcode 0x6e at 0x0002
09-18 17:08:15.003 3336-3336/com.prod.vals.andr_demo_prj W/System.err: java.io.FileNotFoundException: /data/data/com.prod.vals.andr_demo_prj/databases/sqlite.sqlite: open failed: ENOENT (No such file or directory)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at libcore.io.IoBridge.open(IoBridge.java:416)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at java.io.FileOutputStream.<init>(FileOutputStream.java:128)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at java.io.FileOutputStream.<init>(FileOutputStream.java:117)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at com.vals.a2ios.sqlighter.impl.SQLighterDbImpl.copyDbOnce(SQLighterDbImpl.java:140)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at com.prod.vals.andr_demo_prj.MainActivity.onCreate(MainActivity.java:26)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at android.app.Activity.performCreate(Activity.java:5047)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2056)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at android.app.ActivityThread.access$700(ActivityThread.java:134)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:99)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at android.os.Looper.loop(Looper.java:137)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:4867)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at java.lang.reflect.Method.invokeNative(Native Method)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at java.lang.reflect.Method.invoke(Method.java:511)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at dalvik.system.NativeStart.main(Native Method)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err: Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at libcore.io.Posix.open(Native Method)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at libcore.io.IoBridge.open(IoBridge.java:400)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err:  ... 19 more
09-18 17:08:15.154 3336-3339/com.prod.vals.andr_demo_prj D/dalvikvm: GC_CONCURRENT freed 195K, 11% free 9533K/10695K, paused 19ms+2ms, total 94ms
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj E/SQLiteLog: (1) no such table: user
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: android.database.sqlite.SQLiteException: no such table: user (code 1): , while compiling: select id, email, name, data, height from user
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1013)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:624)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1253)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at com.vals.a2ios.sqlighter.impl.SQLighterDbImpl.executeSelect(SQLighterDbImpl.java:179)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at com.prod.vals.andr_demo_prj.Demo.dbOperations(Demo.java:42)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at com.prod.vals.andr_demo_prj.MainActivity.onCreate(MainActivity.java:36)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at android.app.Activity.performCreate(Activity.java:5047)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2056)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at android.app.ActivityThread.access$700(ActivityThread.java:134)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:99)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at android.os.Looper.loop(Looper.java:137)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:4867)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at java.lang.reflect.Method.invokeNative(Native Method)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at java.lang.reflect.Method.invoke(Method.java:511)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err:     at dalvik.system.NativeStart.main(Native Method)
09-18 17:08:15.304 3336-3336/com.prod.vals.andr_demo_prj D/libEGL: loaded /system/lib/egl/libEGL_mali.so
09-18 17:08:15.314 3336-3336/com.prod.vals.andr_demo_prj D/libEGL: loaded /system/lib/egl/libGLESv1_CM_mali.so
09-18 17:08:15.324 3336-3336/com.prod.vals.andr_demo_prj D/libEGL: loaded /system/lib/egl/libGLESv2_mali.so
09-18 17:08:15.474 3336-3336/com.prod.vals.andr_demo_prj D/OpenGLRenderer: Enabling debug mode 0
09-18 17:08:43.021 3336-3341/com.prod.vals.andr_demo_prj D/dalvikvm: Debugger has detached; object registry had 1 entries

On the second launch there is no error. Why is this so? Can I prevent this somehow?

Create jar and lib based distribution

Sqlighter installation would benefit if Android project could import the jar file and Xcode project could include the library and *.h files rather than working with source file inclusion.

display individual test status

On test UI there are only 2 groups with final pass/failure status. To check which exact test is failing it is required to open the debugger and dig over the code.

It would be handy to see the status of each test in UI, perhaps the failure of some features is not essential for particular application.

IOS: XCode Warnings

SQLighterDbImpl:

SQLighterDbImpl.m:26:1: Conflicting return type in implementation of 'isDbFileDeployed': 'jboolean' (aka 'bool') vs 'BOOL' (aka 'signed char')

Could you please fix that. Thanks.

No initial Database file needed

You wrote in the Readme:

In either way, both Android and iOS projects should contain your initial SQLite database file.

This is not true. I tested it. You can pretty well work without an initial database file and create the initial database in code.

Please document how this is meant to be used regarding shared code modules

I'm trying to make sense of how to work with sqlighter in our Android/iOS app and miss seeing what goes where.

We have the business logic in a shared module, with the UI in iOS and Android. I assume I would have a share sqlighter interface in the business logic, with the platforms telling it where and how to store the DB but else, the business logic should be able to use the DB, right? Could you please shed some light on how that is meant to look like?

Readme is missleading

Include contents of /ios/impl/ directory SQLighterDbImpl and SQLighterRsImpl .h and *.m files into your iOS project.

What does this mean all from /ios/impl/ or only the two files? Please clarify this.

How do insert more than one row at a time?

Is there a better way than doing the following? Is there something like a batch update?

db.executeChage("insert...")
db.executeChage("insert...")
db.executeChage("insert...")

Make accessing result parameters more position save

You can access result set params like this:

Number pk = rs.getLong(0);
String e = rs.getString(1);
String n = rs.getString(2);

This might lead to runtime errors when you mix the positions. This should be done differently to find error at compile time.

Here is what I suggest:

// define columns
SQLighterExp<String> nameExp = new SQLighterExp<String>();

// create a table

// create statement
// void executeChange(String query, SQLighterExp params...);

db.executeChange("insert into user( name) values (?)", nameExp);

// observe a result set (from a select)
// here I would use the Builder Pattern

SQLighterRs rs = db.select(nameExp)
   .from("tableName")
  .orderBy(nameExp.asc)
  .build();

while (rs.hasNext()) {
    SQLighterRow row = rs.next();
   String nameFromDb = row.get(nameExp);
}
rs.close();

This would be a much more typ save approach.

If you like this idea I will help you to change the api?

startSqlUpdate to support addInclAttribs

Hi,
I want to update multiple rows with same value. Is this possible to implement?
If not is there another way I can do it?

AnOrm<SomeData> someOrm = (AnOrm<SomeData>) dbInterface.getOrm(SomeData.class);

SomeData someData = new SomeData();
someData.setDetailsAvailable(1);
someOrm.startSqlUpdate(someData);
someOrm.addWhere("owner_id = ?", ownerId);

// Only use this information
someOrm.addInclAttribs("detailsAvailable");

long returnCode = someOrm.apply().longValue();

thanks
Harish

SQLighterRs should use concrete types

So far the interface SQLighterRs uses mostly Number as return type. This is not god because you have to cast the results all the time.

Could you please change the following interface methods like this:

public double getDouble(int index);
public long getLong(int index);
public int getInt(int index);

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.