Git Product home page Git Product logo

sharerenamer's Introduction

Github All Releases AGPL-3.0 Stand With Ukraine

ShareRenamer

This Nextcloud app allows you to customize your share tokens, so your links can be like https://your-nextcloud.com/s/mysharedlink instead of https://your-nextcloud.com/s/qPv1SwbU5M2YEoJZ. Just share a file or folder normally and customize the link in the sharerenamer tab in the sidebar.

A simple Nextcloud app that lets you customize file/folder share links

Requirements

  • Nextcloud 29

Installation

Nextcloud app store (recommended)

Just install the app from the Nextcloud app store. It can be found under the 'tools' category.

Manual installation

  • Download the latest version from the release page.
  • Extract the archive to your Nextcloud's app folder, e.g. tar xvf sharerenamer-x.x.x.tar.gz -C /path/to/nextcloud/apps
  • Enable the app in the Apps section of your Nextcloud.

Install from git

  • Simply clone the repo to your apps folder and build the frontend:
cd /path/to/nextcloud/apps/
git clone https://github.com/JonathanTreffler/sharerenamer.git
cd sharerenamer/
make composer
make npm-init
make build-js-production
  • Enable the app in the Apps section of your Nextcloud.

Security

  • Share Tokens can currently not be set to the same string as any registered username, so do not use this app if users are not supposed to be able to find out any other registered usernames.
  • Links could be guessed! We discourage using this app on large instances that host sensitive data! We also encourage you to password protect such shared links.

Known Issues:

  • Changes to the link shares only show up in the Sharerenamer Tab after the sidebar has been closed and opened again
  • The copy button of the Shares tab only copies the new link after the sidebar has been closed and opened again

(please don't create issue for these)

Development

Open in Gitpod

It will automatically spin up and configure a full Nextcloud, MariaDB and PhpMyAdmin server.

Nextcloud Login:

Username: dev

Password: t2qQ1C6ktYUv7

PhpMyAdmin Login:

Username: nextcloud

Password: wdGq73jQB0p373gLdf6yLRj5

OCC

docker exec -it -u 33 gitpod_app_1 php occ

(It is fine to have these static logins, because gitpod has acess control built in and no sensitive data is stored in these dev servers)

Creating a new Release

Steps:

  1. Place appstore private key at $HOME/.nextcloud/certificates/sharerenamer.key (/home/gitpod/.nextcloud/certificates/sharerenamer.key for gitpod)
  2. krankerl login --appstore <appstore api key>
  3. Bump app version using krankerl version (major|minor|patch)
  4. Add app update information to CHANGELOG.md
  5. Commit app version bump (git commit -m "Bumped app version to <version>")
  6. Push commit to Github (git push)
  7. krankerl package
  8. krankerl sign --package
  9. Create a new Github release and attach the build/artifacts/sharerenamer.tar.gz file
  10. krankerl publish <github release attached file public url>

sharerenamer's People

Contributors

carlschwan avatar decatec avatar dependabot[bot] avatar fcturner avatar joachimtingvold avatar jonathantreffler avatar lazyshpee avatar morrisjobke avatar nextcloud-bot 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

Watchers

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

sharerenamer's Issues

becoming official - despite possible security risk

The off topic guessable security topic has become a request as suggested by DecaTec !!! Justed need to wait for NC18 fix first !!! Off course.

You want security over "guesslinks", add f2a, or yubikey or password... no random odd policy from the past like the laughable "guesslink" reason...

humour mode on: in case of extra security needed against "guesslink", use a scissor... cut down the link.

Unable to set the same name of an archive we delete

Steps to follow to produce the problem:

  1. Create some file, for example file_1.txt"
  2. Share the file and change the name of the URL, for example "test1"
    2.1.- We can try if it's working.... https://myserver.com/s/test1 ....... YES
  3. Delete the file "file_1.txt"
    3.1.- We can try if it's working.... https://myserver.com/s/test1 ....... NO, of course, we delete the file.
  4. Create other new file, for example "file_2.txt"
  5. Share the file and change the name of the URL to "test1" again.

Problem: The web page notice that this name it's in use.

Suggestion of improvement:
A little box asking to overwrite the share link or overwrite directly

Rename Share Link in Gallery

It would be a great feature, if the share renamer would not only work in "file" mode, but also in "gallery" mode.

It does work with renaming it in "file" mode and using/copying the link in gallery mode. But you can't generate/rename the link directly in gallery mode.

For example:

name already exist

Hi,

Any chance to cleanup token id database ? every time I try to rename a link ti says: a link share with that token already exist

Nextcloud 26 compatibility

Thank you @JonathanTreffler for this great and useful app!

Would it be possible to make it compatible with the new Nextcloud 26 (Hub 4).

In my case, it is one of the apps that keeps me from upgrading.

Reuse of a Share Name

Hello,
many thanks for your great work with this tool.
Today we have an issue with the reuse of a share name. First, we had a group folder wich was shared like a simple dropit folder. We gave it a simple share name. Because we had some issues with the folder we decide to unshare and delete it. After that we created a new normal folder and shared as a dropit folder too. As we tryed to rename the share identically with the name of the deleted groupfolder share name before, we get the message that the share name is allready used.
How can we reuse a share name such as in our case after unshared an other share?

usernames errors

If a folder is shared and the link is named with the name of a user it does not work and the error is not notified.

Flag as incompatible with NC 18+

App should be flagged as incompatible with NC18+ seeing as it doesn't work there as referenced in #21.
Currently it's an available app to download with no warning message re: deprecation of function.

Delete links

Hey,

how can I delete used links?
deleted a link and now I cant use the same name again for a new folder.
thx

Multiple share links for a folder seemingly share the same link

Steps to reproduce

  1. Create an empty folder foo
  2. Create a new share link for foo
  3. Set that link's permissions to read only
  4. Rename that link to bar
  5. Add a second share link
  6. Set that second link's permissions to file-drop
  7. Rename the second link to rab
  8. Click the copy link button for both links and paste them somewhere

Expected behaviour

When I click the copy link button I want to have the corresponding link in my clipboard
When I click on the context menu button I want to see the permissions set for that link
Bonus: I want to see which link is which without clicking on rename to see the placeholder name

Actual behaviour

Both links end with rab
I only see the permissions for the rab-Link, the bar-Link has none of the radio-buttons marked

Server configuration

Operating system:
Debian 9
Linux 4.9.0-9-amd64 #1 SMP Debian 4.9.168-1 (2019-04-12) x86_64 GNU/Linux
running the dockerhub "nextcloud" image
Web server:
Nginx running in nextcloud image
Database:
Mariadb running in nextcloud image
PHP version:
PHP 7.3.8 (cli)
Nextcloud version: (see Nextcloud admin page)
Nextcloud 16.0.4
Updated from an older Nextcloud/ownCloud or fresh install:
N/A
Where did you install Nextcloud from:
using this docker-compose.yml file:

version: "3.6"

networks:
  databases:

volumes:
  nextcloud:
  mysql:

services:
  nextcloud:
    image: nextcloud
    container_name: nextcloud
    restart: always
    ports:
      - "9009:80"
    networks:
      - databases
    volumes:
      - nextcloud:/var/www/html
    environment:
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=***REMOVED SENSITIVE VALUE***
      - MYSQL_HOST=mariadb
      - REDIS_HOST=redis
  redis:
    image: redis
    restart: always
    networks:
      - databases

  mariadb:
    image: mariadb
    restart: always
    networks:
      - databases
    environment:
      - "MYSQL_ROOT_PASSWORD=***REMOVED SENSITIVE VALUE***"
      - "MYSQL_DATABASE=nextcloud"
      - "MYSQL_USER=nextcloud"
      - "MYSQL_PASSWORD=***REMOVED SENSITIVE VALUE***"
    volumes:
      - mysql:/var/lib/mysql

Signing status:

Signing status
No errors have been found.

List of activated apps:

App list
Enabled:                                    
  - accessibility: 1.2.0                    
  - activity: 2.9.1                         
  - bruteforcesettings: 1.4.0               
  - calendar: 1.7.0                         
  - checksum: 0.4.3                         
  - cloud_federation_api: 0.2.0             
  - comments: 1.6.0                         
  - dav: 1.9.2                              
  - deck: 0.6.6                             
  - drawio: 0.9.3                           
  - federatedfilesharing: 1.6.0             
  - federation: 1.6.0                       
  - files: 1.11.0                           
  - files_3d: 0.1.0                         
  - files_automatedtagging: 1.6.0           
  - files_fulltextsearch: 1.3.6             
  - files_markdown: 2.0.6                   
  - files_mindmap: 0.0.13                   
  - files_pdfviewer: 1.5.0                  
  - files_rightclick: 0.13.0                
  - files_sharing: 1.8.0                    
  - files_texteditor: 2.8.0                 
  - files_trashbin: 1.6.0                   
  - files_versions: 1.9.0                   
  - files_videoplayer: 1.5.0                
  - firstrunwizard: 2.5.0                   
  - flowupload: 0.1.2                       
  - fulltextsearch: 1.3.6                   
  - gallery: 18.3.0                         
  - impersonate: 1.3.0                      
  - logreader: 2.1.0                        
  - lookup_server_connector: 1.4.0          
  - mail: 0.15.2                            
  - nextcloud_announcements: 1.5.0          
  - notifications: 2.4.1                    
  - oauth2: 1.4.2                           
  - password_policy: 1.6.0                  
  - phonetrack: 0.5.2                       
  - privacy: 1.0.0                          
  - provisioning_api: 1.6.0                 
  - recommendations: 0.4.0                  
  - serverinfo: 1.6.0                       
  - sharebymail: 1.6.0                      
  - sharerenamer: 2.6.1                     
  - support: 1.0.0                          
  - survey_client: 1.4.0                    
  - systemtags: 1.6.0                       
  - theming: 1.7.0                          
  - twofactor_backupcodes: 1.5.0            
  - updatenotification: 1.6.0               
  - viewer: 1.1.0                           
  - workflowengine: 1.6.0                   
Disabled:                                   
  - admin_audit                             
  - encryption                              
  - files_external                          
  - user_ldap                               

Nextcloud configuration:

Config report
{                                                                           
    "system": {                                                             
        "memcache.local": "\\OC\\Memcache\\APCu",                           
        "apps_paths": [                                                     
            {                                                               
                "path": "\/var\/www\/html\/apps",                           
                "url": "\/apps",                                            
                "writable": false                                           
            },                                                              
            {                                                               
                "path": "\/var\/www\/html\/custom_apps",                    
                "url": "\/custom_apps",                                     
                "writable": true                                            
            }                                                               
        ],                                                                  
        "memcache.distributed": "\\OC\\Memcache\\Redis",                    
        "memcache.locking": "\\OC\\Memcache\\Redis",                        
        "redis": {                                                          
            "host": "***REMOVED SENSITIVE VALUE***",                        
            "port": 6379                                                    
        },                                                                  
        "instanceid": "***REMOVED SENSITIVE VALUE***",                      
        "overwritehost": "singinwhale.com",                                 
        "overwritewebroot": "\/cloud",                                      
        "overwriteprotocol": "https",                                       
        "passwordsalt": "***REMOVED SENSITIVE VALUE***",                    
        "secret": "***REMOVED SENSITIVE VALUE***",                          
        "trusted_domains": [                                                
            "singinwhale.com"                                               
        ],                                                                  
        "datadirectory": "***REMOVED SENSITIVE VALUE***",                   
        "dbtype": "mysql",                                                  
        "version": "16.0.4.1",                                              
        "overwrite.cli.url": "http:\/\/singinwhale.com",                    
        "dbname": "***REMOVED SENSITIVE VALUE***",                          
        "dbhost": "***REMOVED SENSITIVE VALUE***",                          
        "dbport": "",                                                       
        "dbtableprefix": "",                                                
        "mysql.utf8mb4": true,                                              
        "dbuser": "***REMOVED SENSITIVE VALUE***",                          
        "dbpassword": "***REMOVED SENSITIVE VALUE***",                      
        "installed": true,                                                  
        "loglevel": 2,                                                      
        "maintenance": false,                                               
        "mail_domain": "***REMOVED SENSITIVE VALUE***",                     
        "mail_smtpmode": "smtp",                                            
        "mail_sendmailmode": "smtp",                                        
        "mail_smtpauthtype": "LOGIN",                                       
        "mail_from_address": "***REMOVED SENSITIVE VALUE***",               
        "mail_smtphost": "***REMOVED SENSITIVE VALUE***",                   
        "mail_smtpauth": 1,                                                 
        "mail_smtpport": "465",                                             
        "mail_smtpname": "***REMOVED SENSITIVE VALUE***",                   
        "mail_smtppassword": "***REMOVED SENSITIVE VALUE***"                
    }                                                                       
}                                                                           

Are you using external storage, if yes which one: local/smb/sftp/...
No
Are you using encryption: yes/no
No
Are you using an external user-backend, if yes which one: LDAP/ActiveDirectory/Webdav/...
No

Client configuration

Browser:
Vivaldi 2.6.1566.44 (Stable channel) (32-bit)
Revision b104196d10e5b12a2690fe28e511909c2f4dcf4b
JavaScript V8 7.5.288.23
Flash (Disabled)
User Agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.102 Safari/537.36 Vivaldi/2.6.1566.44
Command Line "C:\Program Files (x86)\Vivaldi\Application\vivaldi.exe" --flag-switches-begin --flag-switches-end --save-page-as-mhtml
Executable Path C:\Program Files (x86)\Vivaldi\Application\vivaldi.exe
Profile Path C:\Users\Manuel\AppData\Local\Vivaldi\User Data\Default
Operating system:
Windows 10 OS Version 1809 (Build 17763.678)

Logs

Web server error log

N/A

Nextcloud log (data/nextcloud.log)

Nextcloud log
{"reqId":"UGa8yd07HPFfcrWBHBR5","level":3,"time":"2019-08-18T11:43:19+00:00","remoteAddr":"80.155.133.42","user":"singinwhale","app":"PHP","method":"POST","url":"\/cloud\/index.php\/apps\/sharerenamer\/rename","message":"Only variables should be passed by reference at \/var\/www\/html\/custom_apps\/sharerenamer\/db\/sharerenamermapper.php#30","userAgent":"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/77.0.3835.0 Safari\/537.36","version":"16.0.4.1"}

Browser log

N/A

sharing via email won't use the nuew changes document ID

I changed the share token to a human readable word. All works fine, exception one thing!

I'f I copy the new link the new human readable accesstoken/name ist copied, but If I klcik on share via eMail, the old share token will be used! :/

Not working in NC 18

Just installed sharerenamer on Nextcloud 18. I don't see the edit field where you would enter the share's name. Happy to provide more details on request.

Disabled automatically on Nextcloud 26.01

Nextcloud 26.01 installed on Ubuntu 22.04 LTS, full manual installation.

ShareRenamer was disabled after my upgrade from 25.06 to 26.01, and while I can enable it and it briefly appears in the active Apps list, it is almost immediately silently disabled again. I have tried uninstalling and reinstalling the app, and restarting the server, with no effect. No other apps show this behavior. I have installed ShareRenamer directly from the App Store.

Great project, and thank you for continuing it!

Search Links

Would be nice if it was possible to search links through the nextcloud search. Clicking a result would then lead directly to the shared folder. Is something like this planned?

Sometimes we only know the "public link" but forgot where the actual folder is on the server.

NextCloud v28

I just setup NextCloud for a new project. I always install Sharerenamer for all my NextCloud instances. However, in NC v28.0.2 when I enable the extension, go to a folder, share it, the Sharerenamer icon does not show. There is no way to create a new share link.

Are old renamed links still working after update?

Hello,

I know that sharerenamer does not work for new links with NC18+, but will updating NC17 retain current working/renamed links?

Not really an issue, but we have customers that fear that updating will break their current links.

Kind regards.

Php error

I see this in log:

Only variables should be passed by reference at /var/www/nextcloud/apps/sharerenamer/db/sharerenamermapper.php#30

Nextcloud 17rc1
Php7.3
Apache 2.4

Unable to delete shares or reuse renamed share names

I'm using Nextcloud 17.0.0 with ShareRenamer 2.7.3.

I've previously created some shares and renamed them with the app. These shares have since been removed as shares, reshared and the directories are deleted. I've also removed the from the "Deleted files", as it was the problem on other issues posted here.

Now if I create a new directory, with the same name as a previous share, it immediately shows up under "Shares" (Menu on the left) and I can not reuse any share names.

Link 'test' already exists. Please choose another link name.

How can I fix this behavior?

Rename shares in all apps

This is a great feature! It's just what I was looking for. It works great on files in the Files app:

2023-03-31-161344_357x454_scrot

But we use other share links too, like shared Forms (using the Forms app):

2023-03-31-160918_357x356_scrot

shared Polls (using the Polls app):

2023-03-31-161807_898x459_scrot

and shared Calendars:

2023-03-31-161020_601x335_scrot

(We also use Deck, but that doesn't support Share Links (only sharing with a Nextcloud group) so I won't ask about it)

None of these share links can be renamed by sharerenamer.

I suspect I might be asking for a painfully tall order here, but is there a way to make this work with all share links, not just Files? The generated share links all look similar, except where files are like https://example.org/s/DrKci3ampPZmcKj, Forms are like https://example.org/apps/forms/s/DrKci3ampPZmcKj.

Thanks a lot whether or not you have any insight here!

Using sharerenamer in NextCloud Mobile App

Hi,
No doubt it is a very useful app, thank you for that. ๐Ÿ‘:sparkles:
Is there a way to use this in NextCloud Mobile App ? I installed it today on my NextCloud server. On browser, I am getting the option to rename shared link but in NC Android App, if I click share, it doen't give me any option to rename the link.

Nextcloud 27

The current latest version of Nextcloud is 27.1.3 this app currently only supports version 26, an example error from the nextcloud.log (cat nextcloud.log | tail -n1 | jq):

  {
    "reqId": "XXX",
    "level": 4,
    "time": "2023-11-10T12:48:54+00:00",
    "remoteAddr": "XXX",
    "user": "XXX",
    "app": "sharerenamer",
    "method": "POST",
    "url": "/apps/text/session/push",
    "message": "Error during app loading: Autoload path not allowed: /nextcloud/apps/sharerenamer/appinfo/application.php",
    "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/119.0",
    "version": "27.1.3.2",
    "exception": {
      "Exception": "OCP\\AutoloadNotAllowedException",
      "Message": "Autoload path not allowed: /nextcloud/apps/sharerenamer/appinfo/application.php",
      "Code": 0,
      "Trace": [
        {
          "file": "/nextcloud/lib/autoloader.php",
          "line": 166,
          "function": "isValidPath",
          "class": "OC\\Autoloader",
          "type": "->"
        },
        {
          "function": "load",
          "class": "OC\\Autoloader",
          "type": "->"
        },
        {
          "file": "/nextcloud/lib/private/AppFramework/Bootstrap/Coordinator.php",
          "line": 217,
          "function": "class_exists"
        },
        {
          "file": "/nextcloud/lib/private/App/AppManager.php",
          "line": 400,
          "function": "isBootable",
          "class": "OC\\AppFramework\\Bootstrap\\Coordinator",
          "type": "->"
        },
        {
          "file": "/nextcloud/lib/private/App/AppManager.php",
          "line": 216,
          "function": "loadApp",
          "class": "OC\\App\\AppManager",
          "type": "->"
        },
        {
          "file": "/nextcloud/lib/private/legacy/OC_App.php",
          "line": 126,
          "function": "loadApps",
          "class": "OC\\App\\AppManager",
          "type": "->"
        },
        {
          "file": "/nextcloud/lib/base.php",
          "line": 1048,
          "function": "loadApps",
          "class": "OC_App",
          "type": "::"
        },
        {
          "file": "/nextcloud/index.php",
          "line": 36,
          "function": "handleRequest",
          "class": "OC",
          "type": "::"
        }
      ],
      "File": "/nextcloud/lib/autoloader.php",
      "Line": 141,
      "message": "Error during app loading: Autoload path not allowed: /nextcloud/apps/sharerenamer/appinfo/application.php",
      "exception": {},
      "CustomMessage": "Error during app loading: Autoload path not allowed: /nextcloud/apps/sharerenamer/appinfo/application.php"
    }
  }

After creating a share link, Share Renamer requires a refresh to recognize it for renaming

If you open the sidebar and share a file, and then switch to the Share Renamer tab of the sidebar, it'll show up as blank until you refresh the page. Or go to another file and come back. It should ideally refresh its "knowledge" of the file's sharing status when the Share Renamer tab is switched to, instead of upon sidebar opening (which I assume is what's happening now).

Long share Names

ShareRenamer lets me create a long share name (35 character places), and when I select copy link icon, it copies the entire long link which doesn't work. The original link will work however if I truncate the url to 32 character places, so the link that is created has actually already been truncated to 32 character places, but the copy link icon generates an incorrect url.

Delete Links

How can i delete a Link?

I deleted a folder that was still shared and now I cannot use the same link

Thank you

NextCloud (NC) 19

Does it work for you?
The ShareRenamer 2.7.3 is marked as installed and active on my NextCloud 19.0.0 but it doesn't show up in the detail view of a file.

Not longer maintained/looking for maintainers

Sadly, I cannot maintain this app any further.

The app is only compatible up to Nextcloud 17. It will probably need some changes in the Nextcloud core code in order to make it compatible to Nextloud 18+.

Because I don't have the time to maintain this project any further, I'm looking for a new maintainer. If you're interested, please reply on this issue or contact me.

ShareRenamer 3.0.0 does not work on NC 23.0.0

After renaming a Link neither the original Link nor the renamed one work. If I deactivate Shareramer the renamed Link is working.

That's a bit strange and it would be fine if you could have a look at it.

Nextcloud 20

On my share, there is no Rename Share or something...
grafik

Rename function should be in the 3-dot menu of the share link

Especially for Nextcloud 14 compatibility, the rename function should move into the 3-dot menu of the share link. If you check out Nextcloud 14 you will see the layout changed:
screenshot from 2018-08-14 15-59-06

So there should be an entry for "Change link" below "Copy link" which then opens the text field.

Able to rename "Share Link" itself to meaninful text

NextCloud supports to add multiple "Share Link"(s), imagining a user created several Share Link for the same resource, but having different permissions, they all displayed same. When this user wants to edit one of them, will have to click/and open them one by one to find out the link needed to edit.

If user can name those "Share Link"(s) to different meaningful text, will be a great improvement to the experiment.

It will be something like this:

  • Share link for Alice (drop folder)
  • Share link for Bob (read only)
  • Share link for John (full access)

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.