Giter VIP home page Giter VIP logo

filemanager's Introduction

File Manager

Backers on Open Collective Sponsors on Open Collective

OpenIntents file manager, see the website

Requires distribution library to build (available through jitpack).

License

Copyright (C) 2007-2014 OpenIntents.org

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Download

Contributors

This project exists thanks to all the people who contribute. [Contribute].

Backers

Thank you to all our backers! ๐Ÿ™ [Become a backer]

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

filemanager's People

Contributors

andrew659 avatar dexteroo7 avatar friedger avatar joriswit avatar k3b avatar monkeywithacupcake avatar peli0101 avatar rmceoin avatar vaibhav3011 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  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

filemanager's Issues

Add MIME Types for Book Formats

Some book files are not opening with "Application not available" toast even though they have correct file extension. Adding following lines have solved the problem:

/res/xml/mimetypes.xml

<!-- Books -->
<type extension=".epub" mimetype="application/epub+zip" icon="@drawable/ic_launcher_text_plain" />
<type extension=".chm" mimetype="application/vnd.ms-htmlhelp" icon="@drawable/ic_launcher_text_plain" />
<type extension=".pdf" mimetype="application/pdf" icon="@drawable/ic_launcher_text_plain" />
<type extension=".mobi" mimetype="application/x-mobipocket-ebook" icon="@drawable/ic_launcher_text_plain" />

I don't like the icons but I didn't see any other icons fit for books. Please add these lines for release.

Won't open files with an unknown extension

File Manager has a hard-coded list of file extensions; it will only open (via ACTION_VIEW) files with a recognised extension. Unfortunately this means that files belonging to an application which has registered a intent filter for a particular filename pattern will never get opened.

The culprit is these four lines from FileUtils.openFile:

if ("*/*".equals(type)){
    Toast.makeText(c, R.string.application_not_available, Toast.LENGTH_SHORT).show();
    return;
}

Without these, then unrecognised files are still offered to the system, which means that applications (including ours!) get a chance to open them.

Thumbnails are too small

While navigating in DCIM/Camera, the thumbnails are about 1/9 of the size they could occupy without changing the layout.

image

Doubled Fields in string.xml-Files

Hello everybody,

i just checked out your code and i got errors in almoste every string.xml that there are doubled value names. Maybe there wend something wrong.

The doubled fields are:

menu_send
menu_delete
menu_move
menu_copy
menu_compress
menu_rename
menu_extract
menu_details

Hope this helps.

Btw, Great work ๐Ÿ‘

Allow sorting/reordering of bookmarks

Currently, there is no way to change the order of the bookmarked items: they appear in the order they were added.
Users should be able to sort them by name, or to move them around (e.g. to keep the most used on top).

Rotation Problem in Async Tasks

-----------------------------------(During Compression)-------------------------------------

---This Error message is shown when I rotate the screen during compression---

E/WindowManager(16356): Activity org.openintents.filemanager.FileManagerActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@413fba08 that was originally added here
E/WindowManager(16356): android.view.WindowLeaked: Activity org.openintents.filemanager.FileManagerActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@413fba08 that was originally added here
E/WindowManager(16356): at android.view.ViewRootImpl.(ViewRootImpl.java:345)
E/WindowManager(16356): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:268)
E/WindowManager(16356): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:216)
E/WindowManager(16356): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:141)
E/WindowManager(16356): at android.view.Window$LocalWindowManager.addView(Window.java:537)
E/WindowManager(16356): at android.app.Dialog.show(Dialog.java:278)
E/WindowManager(16356): at org.openintents.filemanager.util.CompressManager$CompressTask.onPreExecute(CompressManager.java:133)
E/WindowManager(16356): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:561)
E/WindowManager(16356): at android.os.AsyncTask.execute(AsyncTask.java:511)
E/WindowManager(16356): at org.openintents.filemanager.util.CompressManager.compress(CompressManager.java:58)
E/WindowManager(16356): at org.openintents.filemanager.util.CompressManager.compress(CompressManager.java:45)
E/WindowManager(16356): at org.openintents.filemanager.dialogs.SingleCompressDialog.compress(SingleCompressDialog.java:76)
E/WindowManager(16356): at org.openintents.filemanager.dialogs.SingleCompressDialog.access$0(SingleCompressDialog.java:68)
E/WindowManager(16356): at org.openintents.filemanager.dialogs.SingleCompressDialog$3.onClick(SingleCompressDialog.java:63)
E/WindowManager(16356): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:172)
E/WindowManager(16356): at android.os.Handler.dispatchMessage(Handler.java:99)
E/WindowManager(16356): at android.os.Looper.loop(Looper.java:137)
E/WindowManager(16356): at android.app.ActivityThread.main(ActivityThread.java:4424)
E/WindowManager(16356): at java.lang.reflect.Method.invokeNative(Native Method)
E/WindowManager(16356): at java.lang.reflect.Method.invoke(Method.java:511)
E/WindowManager(16356): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:817)
E/WindowManager(16356): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
E/WindowManager(16356): at dalvik.system.NativeStart.main(Native Method)

---This Error message is shown after sometime and then the application crashes---

E/AndroidRuntime(16356): FATAL EXCEPTION: main
E/AndroidRuntime(16356): java.lang.IllegalArgumentException: View not attached to window manager
E/AndroidRuntime(16356): at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:594)
E/AndroidRuntime(16356): at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:331)
E/AndroidRuntime(16356): at android.view.WindowManagerImpl$CompatModeWrapper.removeView(WindowManagerImpl.java:152)
E/AndroidRuntime(16356): at android.app.Dialog.dismissDialog(Dialog.java:321)
E/AndroidRuntime(16356): at android.app.Dialog$1.run(Dialog.java:119)
E/AndroidRuntime(16356): at android.app.Dialog.dismiss(Dialog.java:306)
E/AndroidRuntime(16356): at android.app.Dialog.cancel(Dialog.java:1106)
E/AndroidRuntime(16356): at org.openintents.filemanager.util.CompressManager$CompressTask.onPostExecute(CompressManager.java:192)
E/AndroidRuntime(16356): at org.openintents.filemanager.util.CompressManager$CompressTask.onPostExecute(CompressManager.java:1)
E/AndroidRuntime(16356): at android.os.AsyncTask.finish(AsyncTask.java:602)
E/AndroidRuntime(16356): at android.os.AsyncTask.access$600(AsyncTask.java:156)
E/AndroidRuntime(16356): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
E/AndroidRuntime(16356): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(16356): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(16356): at android.app.ActivityThread.main(ActivityThread.java:4424)
E/AndroidRuntime(16356): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(16356): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(16356): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:817)
E/AndroidRuntime(16356): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
E/AndroidRuntime(16356): at dalvik.system.NativeStart.main(Native Method)

-----------------------------------(During Copying)-------------------------------------

---This Error message is shown after sometime when I rotate the screen during copying and then the application crashes.---

E/AndroidRuntime(16537): FATAL EXCEPTION: main
E/AndroidRuntime(16537): java.lang.NullPointerException
E/AndroidRuntime(16537): at org.openintents.filemanager.util.MimeTypes.newInstance(MimeTypes.java:43)
E/AndroidRuntime(16537): at org.openintents.filemanager.lists.FileListFragment.renewScanner(FileListFragment.java:198)
E/AndroidRuntime(16537): at org.openintents.filemanager.lists.FileListFragment.refresh(FileListFragment.java:156)
E/AndroidRuntime(16537): at org.openintents.filemanager.lists.SimpleFileListFragment$2.operationFinished(SimpleFileListFragment.java:234)
E/AndroidRuntime(16537): at org.openintents.filemanager.util.CopyHelper$CopyAsync.onPostExecute(CopyHelper.java:209)
E/AndroidRuntime(16537): at org.openintents.filemanager.util.CopyHelper$CopyAsync.onPostExecute(CopyHelper.java:1)
E/AndroidRuntime(16537): at android.os.AsyncTask.finish(AsyncTask.java:602)
E/AndroidRuntime(16537): at android.os.AsyncTask.access$600(AsyncTask.java:156)
E/AndroidRuntime(16537): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
E/AndroidRuntime(16537): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(16537): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(16537): at android.app.ActivityThread.main(ActivityThread.java:4424)
E/AndroidRuntime(16537): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(16537): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(16537): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:817)
E/AndroidRuntime(16537): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
E/AndroidRuntime(16537): at dalvik.system.NativeStart.main(Native Method)

-----------------------------------(Helpful Suggestions)-------------------------------------

http://stackoverflow.com/questions/7128670/best-practice-asynctask-during-orientation-change
http://stackoverflow.com/questions/3821423/background-task-progress-dialog-orientation-change-is-there-any-100-working/3821998#3821998

PS. I am sorry for the hasty post.
But I will look into this problem in-depth once I am done with my exams :)

Race Condition in DirectoryScanner

Description

It is possible for a FileListMessageHandler.handleMessage to be called even after the corresponding DirectoryScanner was cancelled (by calling it's cancel method).

Steps to reproduce the issue

  1. Open the directory B (the loading progress bar is shown)
  2. Press back button (previous directory A starts loading)
  3. (In case of bad execution) Contents of A are shown
  4. Contents of B are shown

To easily reproduce the bad execution add Thread.sleep(2000) before posting a MESSAGE_SHOW_DIRECTORY_CONTENTS message.

https://github.com/openintents/filemanager/blob/master/FileManager/src/org/openintents/filemanager/files/DirectoryScanner.java#L179

Possible Fix

In handleMessage check that the directory about to be shown is the same as the one currently loading.

Grid Display

The default listing of directory contents is a list, it wastes a lot of real estate in landscape mode on a tablet, maybe if it could be changed to a grid view, somehow more utilization of real estate can take place

DistributionLibrary missing

As the title shows, where could I find the library of DistributionLibrary?
I am importing source codes of project filemanager into my Eclipse, but some libraries are missing.

MediaScanner implementation issues

Some issues I have seen on Nexus 4 with the current media scanner implementation:

  1. Folder specific add/delete. Not sure how to remedy this, but we can see it by renaming a folder that contains images and launching the default gallery app. The new folder is not present and the old one contains corrupted items
  2. File deletion does not work by using the ACTION_MEDIA_SCANNER_SCAN_FILE broadcast. Implementation for this should go into MediaScannerUtils.informFileDeleted() as it already gets called on the appropriate places.

"Couldn't create folder" on extSdCard on Samsung Galaxy S5 Android 5.0

  1. Go into folder on external card
  2. Create new folder

Expected: folder created

Actual: error with message "Couldn't create folder"

Notes:

  1. Build in "My Files" file manager created folder in same situation
  2. File Manager Pro failed to create folder either
  3. Card is visible under "storage/extSdCard" name
  4. Folder is created well on build in memory card
  5. SD card worked well on other phones with Androids 4.X

Crash when rotating screen

I've just got a crash on my pad, with these in logcat:

E/AndroidRuntime( 8273): FATAL EXCEPTION: main
E/AndroidRuntime( 8273): java.lang.IllegalStateException: Content view not yet created
E/AndroidRuntime( 8273): at android.support.v4.app.ListFragment.ensureList(ListFragment.java:328)
E/AndroidRuntime( 8273): at android.support.v4.app.ListFragment.getListView(ListFragment.java:222)
E/AndroidRuntime( 8273): at org.openintents.filemanager.lists.FileListFragment$FileListMessageHandler.handleMessage(FileListFragment.java:225)
E/AndroidRuntime( 8273): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 8273): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime( 8273): at android.app.ActivityThread.main(ActivityThread.java:4424)
E/AndroidRuntime( 8273): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 8273): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime( 8273): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
E/AndroidRuntime( 8273): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
E/AndroidRuntime( 8273): at dalvik.system.NativeStart.main(Native Method)

When a directory is being loaded while I rotated the screen.
It seems like that after rotation, handleMessage() may happen before the creation of the list view, so getListView() may fail.

This may be hard to fix, but you can simply catch the exception, since this would not cause problem in this case...

Question: Settings?

Hello,

Great file manager, I hope this will always stay small and light weight!

I noticed on GooglePlay it shows it with a light colored theme, but I don't see any settings?

Are there suppose to be settings/preferences?

thanks

Ukrainian translation

Issue: OI File Manager interface language is in English (2.0.5 version) despite that the android device (Android version 4.1.2) interface language is Ukrainian.

Expected behaviour: OI File Manager interface is expected to be Ukrainian. The respective launchpad translation project is shown as finished in 2012 (https://translations.launchpad.net/openintents/trunk/+lang/uk).

Way to recreate: Change an android device interface language to Ukrainian. Open OI File Manager.

Incorrect file name resolution when URI escapes present

If the filename contains "%40" (for example), the resolved file name contains a "@" instead of "%40". This makes opening the file impossible.

For example, the URI returned from the ACTION_GET_CONTENT intent:

content://org.openintents.filemanager/mnt/sdcard/a%40b.txt

and the file name returned from the provider in the _data column:

/mnt/sdcard/[email protected]

The correct file name would have been:

/mnt/sdcard/a%40b.txt

Fix typos in README

Requires requires distribution repositiory to build

Maybe add a link to the distribution repo too?

Select All option disappeared in Android 4.+ devices

Few days ago i send more than 500 files from one device to another via Bluetooth.

On both devises version 2.0.5 installed.
Sending device run by android 2.3.4
On this device "OI FM" have button "multiselect"
After press it i can select all 500+ files via one touch.

So, i select all files in folder and sent it via BT to another device.

The device receiver run under android 4.0.4
But the same "OI FM" 2.0.5 not allow me to select all files in folder.
This is very bad, because i must to manually select all 500+ files to move it to another folder.

NullPointerException at MultiCompressDialog.java:44

java.lang.NullPointerException
at com.filemanager.dialogs.MultiCompressDialog$1.compressFinished(MultiCompressDialog.java:44)
at com.filemanager.util.CompressManager$CompressTask.onCancelled(CompressManager.java:187)
at com.filemanager.util.CompressManager$CompressTask.onCancelled(CompressManager.java:1)
at android.os.AsyncTask.finish(AsyncTask.java:629)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:4787)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
at dalvik.system.NativeStart.main(Native Method)

CompressManager creates zip files of size 0 Bytes

After downloading the zipped project, unzipping it and importing it into Android Studio, I encountered this problem:
For a file that is not a directory, CompressManager creates 0 Byte zip files. Numerous file types (txt, xml, html) were tested all yielding same 0 Byte results. Yes, the original files were more than 0 bytes.

latest code cannot be built

$ cd FileManager
$ ant debug
Buildfile: /path/to/src/filemanager/FileManager/build.xml

BUILD FAILED
/path/to/src/filemanager/FileManager/build.xml:35: Cannot find /path/to/src/distribution/ant/build_common.xml imported from /path/to/src/filemanager/FileManager/build.xml

Total time: 0 seconds

Renaming/deleting in Download folder - Android 6

  1. Download a file to the Download directory (perhaps "Apples123456789.jpg")
  2. Open OI Filemanager and go to the Download directory.
  3. Select the downloaded file and rename it. (perhaps rename to "WilliamTell.jpg")
  4. The Download folder will now show: "WilliamTell.jpg"
  5. The "Apples123456789.jpg" file will continue to show using the Downloads app. This file will show "Couldn't load photo" message if I try to open it. This file can be deleted from the Downloads app window. The renamed file will still be present in the Download folder.
  6. There have been other cases where two files will appear, the renamed file and the original file.
  7. Saving this OI Notepad text file to the Download folder will cause it to appear in the Download folder using OI Filemanager to view it. However, the Downloads app will never show the presence of this file.

Add option to sort files by extension

As mentioned by Jayendran in a support email:

[...] why not provide an option to
sort by extension too? A lot of file managers offer this option. [...]

P.S.: I might as well add this today, it shouldn't be too difficult.

FileManager may crash when click "Compress"

On Nexus 4, Android 4.2.1:

  1. go to root dir
  2. select some file
  3. press menu, select 'Compress'
  4. enter filename and click 'OK'
    Then it crashes

The reason is that, in FileManager/src/org/openintents/filemanager/util/CompressManager.java:136, it calls zos.flush()
However, zos may be null, if it was failed to create at line 110. In this case, due to the permission, it failed to create. But it may fail to create in other cases.
In doInBackground() you checked for the null case. However, you failed to check this case in onPostExecute(). So it caused NullPointerException.

Since you checked it in doInBackground(), you should also check it in onPostExecute(). This would turn this from a crash into an error message, which should be better.

Performance improvement suggestion

Dear developers,

I am a fan of OI filemanager, and recently I am writing a static code analysis tool to conduct performance analysis for Android apps. I found a violation of "view holder" pattern in filemanager's code. This violation could affect the ListView scrolling performance.

Currently in org/openintents/filemanager/bookmarks/BookmarkListAdapter.java, the list adapter's getView() method works like this

public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
convertView = mInflater.inflate(R.layout.listItem, null);
}
((TextView) convertView.findViewById(R.id.text)).setText(DATA[position]);

return convertView;
}

When the users scroll a list view, this implementation avoids inflations for each view (by using the recycled convertView), which saves CPU cycles and RAM. However, the method still invokes findViewById() every time when it is called. Android documentation says that findViewById is an expensive call, it recursively traverses a view tree to find a view matching the give ID. Google developers actually suggested a better way to implement getView(). It works like this:

We define a ViewHolder class with the field: TextView text . Then the getView() can be implemented like this:

public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView == null){
//we have no recycled views to use, then build new one
convertView = mInflater.inflate(R.layout.listItem, null);
holder = new ViewHolder();
holder.text = (TextView) convertView.getViewById(R.id.text);
convertView.setTag(holder)
} else {
//use the recycled view to improve performance
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(DATA[position]);

return convertView;
}

This avoids calling findViewById frequently and will improve performance when the list contains many items or on low end devices.

you may find more useful information in thees references:
view holder pattern: http://lucasr.org/2012/04/05/performance-tips-for-androids-listview/
http://developer.android.com/training/improving-layouts/smooth-scrolling.html
http://www.youtube.com/watch?v=wDBM6wVEO70

In the last Google IO video, we find that the current implementation of getView() in filemanager is a right way, but not a fast way. The video actually provides three ways: a slow way, a right way and a fast way.

Looking forward to your reply and hope I can help improve filemanager :)

Add support for blind people

Blind people definitely have a bad time when it comes to using an app without text to speech feature.

It could be possible to add this?

I was thinking of the following:

  1. use volume up/down to navigate through each item inside a folder
  2. each time an item is selected read the name aloud
  3. open an item by a double tap or perhaps using power button

What do you think?

I'm interested on sending a PR a soon as i have something usable.
PS: the idea come from this reddit thread

Selecting a file and pressing cut displays a distorted error message

When I select a file and press the "cut" button it displays a distorted error message:

[indecipherable text] to move

Pasting the file still works though.

I'm running OI File Manager 2.0.5 on a Nook HD+ (software ver 2.2.0).

The previous version (I'm set to auto-update) didn't have this behavior.

screenshot_2014-02-19-22-56-06

P.S. Thank you for making OI File Manager; this bug reminded me of how extensively I use it.

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.