Giter Club home page Giter Club logo

technicsolder's Introduction

Technic Solder

License Latest Stable Version Build Status Latest Unstable Version Build Status

Join us on Discord!

What is Solder?

Technic Solder is an API that sits between a modpack repository and the launcher. It allows you to easily manage multiple modpacks in one single location. It's the same API we use to distribute our modpacks!

Using Solder also means your packs will download each mod individually. This means the launcher can check MD5's against each version of a mod and if it hasn't changed, use the cached version of the mod instead. What does this mean? Small incremental updates to your modpack doesn't mean redownloading the whole thing every time!

Solder also interfaces with the Technic Platform using an API key you can generate through your account there. When Solder has this key it can directly interact with your Platform account. When creating new modpacks you will be able to import any packs you have registered in your Solder install. It will also create detailed mod lists on your Platform page! (assuming you have the respective data filled out in Solder). Neat huh?

Requirements

  • PHP 8.1 or higher
  • Composer 2.2 or higher
  • unzip package
  • BCMath PHP Extension
  • Ctype PHP Extension
  • Fileinfo PHP extension
  • JSON PHP Extension
  • Mbstring PHP Extension
  • OpenSSL PHP Extension
  • PDO PHP Extension
  • Tokenizer PHP Extension
  • XML PHP Extension
  • A MySQL or PostgreSQL database

You can find commands for this in the getting started page.

Installation/Updating Solder

Refer to our documentation here: https://docs.solder.io/

If there is any missing/incorrect info, please post an issue on our issue tracker

Using Docker

Docker can make managing your instance of Solder easier. To get started, you will need to install Docker and Docker Compose to your host system. You will also need to have this repo cloned. Here's an example for Ubuntu 22.04. Follow the instructions below from the cloned directory:

Build the Solder Docker image.

docker build --no-cache -t solder -f ./docker/Dockerfile .

Run the setup to prepare your instance. You might need to modify start.sh to disable setting a new app key if you already have one. Make sure not to run this more than once unless you want a new app key.

docker-compose -f compose-setup.yml up setup

Finally, you can turn on your instance of Solder.

docker-compose up -d --remove-orphans

(The --remove-orphans flag is necessary to remove the container used in the setup.)

Refer to the Docker docs for more information about how to use it.

Troubleshooting

If you are having issues and can't seem to figure out what's going on, join our development Discord server.

technicsolder's People

Contributors

aschmois avatar dark-arcana avatar dependabot-preview[bot] avatar entrancejew avatar forresthopkinsa avatar fwb avatar genpage avatar heddendorp avatar indemnity83 avatar koesie10 avatar laravel-shift avatar lilyinstarlight avatar pyker avatar rtm516 avatar sct avatar skwerlman avatar zlepper 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

technicsolder's Issues

mcmod.info

I guess this might already be in the plan, but is it possible to use the mcmod.info that many mods have in their archive when you add mods. For the moment i copy and paste the information into solder when adding mods. It should be possible to automate quite easy. Maybe even to automate the import of several mods at once.

Thank you!

Cache Folder

The cache folder is missing so i can't Update it. i have everything else done but when i get to this part

Finally, you will need to just run your cache update script. This can take awhile on its first run depending on the size of your mod repository. Adjust the URL below to reflect your own install and enter it into your browser. Let it do its thing!

http://yoursolderinstall/cache/update


Theres no folder called cache

Sorry bout the double post it didn't show for me before

MD5 Hash does not Rehash.

Hello in the last 3 or 4 days the md5 rehash will not rehash, now I had this issue plenty of times before so like normal I re-added the repo url, and messed with the config a little and it always used to work but this time I didn't so I took it a step up and reinstalled it and still does not work.

So after almost a few hours of messing around I finally decided enough is enough and I now need some help, so please could you help.

Both my repo url and mirror urls are the same there are.
'repo_location' => 'http://downloads.******.com
'mirror_location' => 'http://downloads.*****.com

I have always used them and I am quite confused why there are not working though I am not sure if the repo_location should have the /mods/ at the end as that is where all the mods the Technic Launcher downloads are kept.

Thanks, Liam

Ability to sort the mod list alphabetically instead of by the order you added them?

Ability to sort the mod list alphabetically instead of by the order you added them?

This would be useful both in the 'mod library page' and in the 'modpack mod lists'

But I suppose it might be more useful to just be able to edit the list and move a mod up or down after they are added. We could do the organizing instead of programming it to do it for us though.

Wrong MD5 Hash

The MD5 Hash, which was generated from the API is wrong.
The Launcher means: Expected MD5: 47d62a17da1e405ff87812723598b6ac Calculated MD5: 1bdf716f35847e2de6780c7c97c8a3fd
I checked the Hash of this file and the Calculated MD5 is right.
Please fix this issue.

Problems with Laravel

Hi, I'm running Windows 8, and was having trouble configuring Laravel for a PC. Any help would be appreciated. Thanks.

Server side plans?

I apologize if this isn't the best place to ask a question, or suggest something... not sure the best place to get ideas seen though.

I'm loving the Solder API, it works great with the launcher - but I'd really love to see some form of server side deployment as well. Maybe just a place we can specify FTP information, or where the files are locally, or even just package a zip for me.

While it seems simple enough to take the modpack and throw it on the server, I have client mods that don't need to be on the server, so I can envision a checkbox for each mod asking whether it's client only or not. Then when you deploy to your server (or package a zip, etc) it would not pull in those mods.

I'm just tossing out what's on my mind here, I'm sure there's a thousand better ways to do it. Have you guys had any similar discussion about this?

MySQL Migration Error

Fresh installation, empty database, and all that jazz. Apache 2.4.4, MySQL 5.6.12, and PHP 5.3.22 & 5.4.16, both I tried.

After migrate:install, I get this error when I use migrate:

SQLSTATE[HY000]: General error: 1364 Field 'created_ip' doesn't have a default value

SQL: INSERT INTO `users` (`username`, `email`, `password`, `updated_at`, `created_at`) VALUES (?, ?, ?, ?, ?)

Bindings: array (
  0 => 'admin',
  1 => '[email protected]',
  2 => '$2a$08$UHNGV0FPUW8xc09SUDd6QO0dMq8xgroa8M1EXaY3W/.Cc3WKg6bAS',
  3 => '2013-06-16 02:50:23',
  4 => '2013-06-16 02:50:23',
)

I'm using sqlite, so this isn't a problem that affects my ability to use Solder. I'll try other configurations and try to trace the code to troubleshoot. I'm happy to help if I can.

Missing Post Data

I have TechnicSolder running... sort of.

After strugging to get Nginx to rewrite properly, I finally managed to figure out the login username and password and then tried to run /cache/update, which resulted in a 404. No matter what I try, I keep getting a 404.

I can add mods, but as soon as I try to add a version I get a popup saying "Missing Post Data."

Any help?

Can't find http://yoursolderinstall/cache/update

I can't find the folder cache/update located in public or in any folder for that matter, I followed to instructions and the migrate script appeared to run without issue so I'm wondering if it's just that it failed to create the script or the script just isn't in it yet.

Modpack create new build

i have created a new modpack but win i click create new build i get this error

Unhandled Exception

Message:

Error rendering view: [modpack.build.create]

Invalid argument supplied for foreach()
Location:

/srv/TechnicSolder/storage/views/09005e5c2e6b4bb2b6c955ed40d54c34 on line 24
Stack Trace:

#0 /srv/TechnicSolder/laravel/laravel.php(42): Laravel\Error::native(2, 'Invalid argumen...', '/srv/TechnicSol...', 24)
#1 /srv/TechnicSolder/laravel/view.php(386) : eval()'d code(24): Laravel\{closure}(2, 'Invalid argumen...', '/srv/TechnicSol...', 24, Array)
#2 /srv/TechnicSolder/laravel/view.php(386): eval()
#3 /srv/TechnicSolder/laravel/blade.php(71): Laravel\View->get()
#4 [internal function]: Laravel\Blade::Laravel\{closure}(Object(Laravel\View))
#5 /srv/TechnicSolder/laravel/event.php(199): call_user_func_array(Object(Closure), Array)
#6 /srv/TechnicSolder/laravel/event.php(138): Laravel\Event::fire('laravel.view.en...', Array, true)
#7 /srv/TechnicSolder/laravel/view.php(348): Laravel\Event::until('laravel.view.en...', Array)
#8 /srv/TechnicSolder/laravel/view.php(590): Laravel\View->render()
#9 /srv/TechnicSolder/laravel/response.php(268): Laravel\View->__toString()
#10 /srv/TechnicSolder/laravel/laravel.php(180): Laravel\Response->render()
#11 /srv/TechnicSolder/public/index.php(34): require('/srv/TechnicSol...')
#12 {main}

please let me know if i can provide any more information

Issue: Can't create modpack

I'm having trouble creating a modpack. I was successfully able to add mods to the mod library.

From what I can tell, the mod path should be the repo path you entered in solider.php plus the name of the mod, and then resources (along with the png files).

I've tried to create several different folders under my repo path with the resources and files, but I keep getting the same error message.

"Make sure all the resources required exist before submitting a pack!"

Create Pack Not Listing Modpack

Hi,

I have done this before but I had to move to a new server, and for some reason my packs are not being show on the "Create a Modpack" page. The API link is correct and the API keys are correct. I can't work out what is causing it.

Could it need some time to purge/update before showing?

Any help would be most appreciated.

Thanks,
artdude543

There was a problem validating your Solder URL

I've installed solder on a root server, its running fine but i cant connect it with my account.

i've installed it twice, ive generated a couple of APi keys, none worked

i HAVE the correct URL with index.php/api/

it displays {"api":"TechnicSolder","version":"0.3","stream":"DEV"}

how to get it running?

Project appears to rely on Apache

This is more of asking for confirmation than anything; but the inclusion of an Apache .htaccess that's required seems to imply that this project is designed specifically for Apache servers (I use nginx, which doesn't use .htaccess files).

Can anyone confirm/deny this, and perhaps attach a config that would work for nginx?

Add ability to sort various lists by mod name/etc

Especially the dropdowns when selecting which mods to add to a modpack build (although with those it's more "make them sort like this" than "add an option" since uh, not really sure how you'd sort them otherwise since it only displays their name) and, well, the list of already added mods too (once the page is refreshed; trying to do it dynamically while you're adding mods would probably be too much of a hassle (for the user and the devs trying to implement it), I suspect). If you only have one modpack it's just a minor annoyance, but I can see it becoming an issue for anyone who has 2+ modpacks.

Port forward solder login page?

Solder is now fully interfaced! You no longer need to use the cache/update method. In fact, it's been completely removed. Once you have Solder configured, just access it at the url you set it up on and log in.

Okay so for that link ^ is there a way to set a port that i can port forward to let it through? I am running on a free vps.me server and have to portforward my ip. its not just open. unless I use ipv6 But I doubt that will work..

I can explain this in better detail if you like but right now I don't see a way to do this. If I could log in at my ip:1234 in the browser that would be great!

Documentation on how to use Solder?

I set it up and got everything working on my dedicated linux box. I'm not really sure what to do next now. I have it linked to my technic account via the API. I setup a modpack and created a version.

Question 1
How do I add forge or some sort of base client jar?

Question 2
Adding mods does not seem to work properly I followed the syntax "[modslug]-[version].zip" however the mod does not show up under versions when I try to add it to the pack.

Question 3
Is my modpack supposed to show up that I created on my solder server here?http://www.technicpack.net/dashboard/modpacks

I know this project is new but a basic FAQ and some BASIC information would be seriously appreciated. Maybe I am a noob and missing something? /confused/. I was super excited about this still am just need to figure out how to get a basic pack rolling.

Thanks

Class 'Autoloader' not found when using 'php artisan migrate:install'

root@vps:~# cd /var/www
root@vps:/var/www# php artisan migrate:install
PHP Fatal error: Class 'Autoloader' not found in /var/www/application/start.php on line 61

Fatal error: Class 'Autoloader' not found in /var/www/application/start.php on line 61


This is what what I get when i use that line ^

(I thought id start a different issue after posting commenting here: #30)

ps. I am following this guide: http://forums.technicpack.net/threads/lamp-solder-installation.43471/

to install solder. The steps are really quite easy to follow, Im not sure if they are up to date since it has been posted. Would it be hard to make a similar install guide like this one but from you guys?

Edit: I just noticed a more general guide in github. It seems more vague but it might work for me better now since ive installed it 3 times.

Base new modpack on existing pack

Just like you can base a new build on a previous build, it would be nice to be able to create a new pack based on an existing one. In my case I have my normal pack and I'd like to create a "plus" pack that is exactly the same, but with a few extra client side mods.

As long as I'm blue sky dreaming, it would be VERY cool if you could not just build the new pack based on an existing one, but keep it linked so that updating the main pack modified any linked packs as well. So for example, if I update BuildCraft in the main pack, the linked pack would be updated automatically.

I am having some trouble when using this on a shared host

I ran solder on by centos machine at home, and it worked fine, but when i put it on my shared online host, i got a strange error. I am using php 5.4 and mysql 5.1.
My error is as follows...

Unhandled Exception

Message:

Undefined offset: 6
Location:

/usr/local/lib/php/head.php on line 90

User Specific Mods

Another idea I had while commented on another enhancement is for user specific mods. This enhancement (if you like it) would have to work within Solder as well as the Launcher.

Since the launcher knows the user that's connecting, you could have it detect a username slug in the mod's file name, or check the API for user specific mod... I'm sure there are a lot of ways this could be handled.

This kind of ties into the other enhancement about creating a base modpack and packs that inherit from that one. I'm thinking about the server operator who might need a few extra mods than everyone else logging in. Rather than create a whole new "Admin" pack, it may be beneficial to just be able to mark a mod to be used only by a specific person (or if reading from the Solder API, could get into a full blown groups/users system).

This may be more than you want to take on, but thought I'd post the idea anyway. :)

Add Server distribution support

My suggestion is to add some stuff to the api to make Solder have a behaviour similar to the current but for servers! The server binary could also come with some sort of maintenance script for updating the modpack (and it would backup the current installation of the server...)

For example: (modlibrary.yml)

mods:
    modx-that-has-no-universal-jar:
        name: "this is a mod, stupid but a mod"
        installtype: "zip"
        versions:
            1.0:
                server: 

In the "server:" you could just leave it that way and it will search for [modslug]/[modslug]-[version]-server.zip

And the server would have a separate "modpack-server.yml" file (because mods like "Custom LAN Ports" are made just for the minecraft client).

I'm a Web Developer but:

  1. This would need to be implemented deeply in the Technic Platform (website, not the launcher)
  2. I'm not familiar with Laravel

In the future I might make the API and some sort of "ServerInstaller.jar" but I have some projects going on and I don't have time :(

Class Symfony\Component\HttpFoundation\Cookie does not exist

Happens when I try to go to a page that needs list (e.g. Manage Users, Mod Library, ...)

Unhandled Exception
Message:

Class Symfony\Component\HttpFoundation\Cookie does not exist

Location:

/var/www/vhosts/myDomain/httpdocs/solder/laravel/response.php on line 302

Stack Trace:

#0 /var/www/vhosts/myDomain/httpdocs/solder/laravel/response.php(302): ReflectionClass->__construct('Symfony\Compone...')
#1 /var/www/vhosts/myDomain/httpdocs/solder/laravel/response.php(249): Laravel\Response->cookies()
#2 /var/www/vhosts/myDomain/httpdocs/solder/laravel/error.php(63): Laravel\Response->send()
#3 /var/www/vhosts/myDomain/httpdocs/solder/laravel/error.php(92): Laravel\Error::exception(Object(ErrorException))
#4 /var/www/vhosts/myDomain/httpdocs/solder/laravel/laravel.php(42): Laravel\Error::native(2048, 'Redefining alre...', '/var/www/vhosts...', 177)
#5 /var/www/vhosts/myDomain/httpdocs/solder/laravel/autoloader.php(124): Laravel\{closure}(2048, 'Redefining alre...', '/var/www/vhosts...', 177, Array)
#6 /var/www/vhosts/myDomain/httpdocs/solder/laravel/autoloader.php(124): Laravel\Autoloader::load_psr()
#7 /var/www/vhosts/myDomain/httpdocs/solder/laravel/autoloader.php(92): Laravel\Autoloader::load_psr('Table', '/var/www/vhosts...')
#8 /var/www/vhosts/myDomain/httpdocs/solder/laravel/autoloader.php(75): Laravel\Autoloader::load_namespaced('Bootstrapper\Ta...', 'Bootstrapper\', '/var/www/vhosts...')
#9 [internal function]: Laravel\Autoloader::load('Bootstrapper\Ta...')
#10 [internal function]: spl_autoload_call('Bootstrapper\Ta...')
#11 /var/www/vhosts/myDomain/httpdocs/solder/laravel/autoloader.php(55): class_alias('Bootstrapper\Ta...', 'Table')
#12 [internal function]: Laravel\Autoloader::load('Table')
#13 /var/www/vhosts/myDomain/httpdocs/solder/laravel/view.php(386) : eval()'d code(20): spl_autoload_call('Table')
#14 /var/www/vhosts/myDomain/httpdocs/solder/laravel/view.php(386): eval()
#15 /var/www/vhosts/myDomain/httpdocs/solder/laravel/blade.php(71): Laravel\View->get()
#16 [internal function]: Laravel\{closure}(Object(Laravel\View))
#17 /var/www/vhosts/myDomain/httpdocs/solder/laravel/event.php(199): call_user_func_array(Object(Closure), Array)
#18 /var/www/vhosts/myDomain/httpdocs/solder/laravel/event.php(138): Laravel\Event::fire('laravel.view.en...', Array, true)
#19 /var/www/vhosts/myDomain/httpdocs/solder/laravel/view.php(348): Laravel\Event::until('laravel.view.en...', Array)
#20 /var/www/vhosts/myDomain/httpdocs/solder/laravel/view.php(590): Laravel\View->render()
#21 /var/www/vhosts/myDomain/httpdocs/solder/laravel/response.php(268): Laravel\View->__toString()
#22 /var/www/vhosts/myDomain/httpdocs/solder/laravel/laravel.php(180): Laravel\Response->render()
#23 /var/www/vhosts/myDomain/httpdocs/solder/public/index.php(34): require('/var/www/vhosts...')
#24 {main}

Unable to change mod version

In the dev branch of the git, I can't change the version of a mod that a build is using, it just doesn't change (including if I click the change button) and deleting the mod and readding it with a new version will still use the first version available; the only way I've found to solve this is to go into the table using MySQL and edit it there.

No CLI requirement for setup

I'm using a shared webhosting plan, is it possible to remove the need for a CLI setup? Since I obviously cannot run CLI commands on the webhost.

Help: Error while using "php artisan migrate:install"

While using the above command in my TechnicSolder directory of my webserver, i always get "could not find driver" i have installed Mcrypt multiple times and Curl, but it still returns "could not find driver" any ideas?

Feature Request: UI Modpack Edit/Remove

This might be on its way, but the web UI could use tools for editing/removing existing modpacks. Until then, you can remove builds and use a SQLite browser to remove the modpacks.

Modpack building problem

A couple of questions, I added my solder api to the platform but my pack doesnt show up on the platform, what can I do?
How cann i add coremods, configs and a modpack.jar to my modpack?

Easier mod packaging

A problem that I faced when creating my modpack was mod packaging. Over 30 times repeating the task of placing the mod into a folder, zipping that folder, renaming and uploading!

To avoid that and publish mods easily:

  • Add a path option to set where to extract/copy the file to
  • Option to extract or copy the zip file

And maybe in future: separate mod repos from modpacks! Even the own mod developers can grant access to Solder themselves with their own repo... Something like apt-get for mods.

Modpack has Invalid Solder Link

I Have Setup Solder and Made A Modpack But When I try to add it to the launcher it says 'Modpack has Invalid Solder Link.Please Contact Modpack Author'

P.S.Sorry For The Spam!

Generate mod version lists from filesystem

Since we already have to have the zip archives in a specific format ("[modslug]-[version].zip"), it should be possible to generate the list of mod versions automatically per mod (such as when a mod is added to the list, check if there are proper files and populate the list if so) or to regenerate multiple lists at once. I made a quick mockup here:

solder mockup 1

Problem when attempting to use online login

Unhandled Exception

Message:

file_put_contents(/var/www/storage/views/2ac7d21c23e689de7d45fb23e5e45c2a): failed to open stream: Permission denied
Location:

/var/www/laravel/blade.php on line 63
Stack Trace:

.0 /var/www/laravel/laravel.php(42): Laravel\Error::native(2, 'file_put_conten...', '/var/www/larave...', 63)

.1 [internal function]: Laravel{closure}(2, 'file_put_conten...', '/var/www/larave...', 63, Array)

.2 /var/www/laravel/blade.php(63): file_put_contents('/var/www/storag...', '...')

.3 [internal function]: Laravel{closure}(Object(Laravel\View))

.4 /var/www/laravel/event.php(199): call_user_func_array(Object(Closure), Array)

.5 /var/www/laravel/event.php(138): Laravel\Event::fire('laravel.view.en...', Array, true)

.6 /var/www/laravel/view.php(348): Laravel\Event::until('laravel.view.en...', Array)

.7 /var/www/laravel/view.php(590): Laravel\View->render()

.8 /var/www/laravel/response.php(268): Laravel\View->__toString()

.9 /var/www/laravel/laravel.php(180): Laravel\Response->render()

.10 /var/www/public/index.php(34): require('/var/www/larave...')

.11 {main}

Edit: added Period between the # sign and number to stop the referencing.

Adding mod version doesn't do nothing

Hello, I'm from that host that doesn't accepts http:// , so, when I press the add version button on the mods tab, nothing happens, no error log, no error page, nothing. I think that it is the curl thing again.

HTML Link Improvements

Instead of writing hrefs into the code, why not use laravel's built in link generation feature? It avoids messing about with the URL class.
HTML::link

Problem with allow_url_fopen

Hello, my hosting have disabled "allow_url_fopen" for security reasons, and they say that the thing that requests it, needs to use curl instead.

API returns "modpacks":[]

TL;DR Details

  • No Solder mod packs appear on Platform 'create mod pack' page despite successfully linking
  • Clients do not download pack image resources from repo

These features used to work--I cannot identify what change broke them. All other features appear fine: Platform will link after I have created a pack and it sees my Solder has identically named pack. I have rebuilt my set up from scratch to no avail. I have infinite patience, and time is not an issue.

  • Apache 2.4.4 || PHP 5.4.16 || PDO SQLite for database
  • Using most recent (6/14) master branch zip download of Solder

I read on another issue that SQLite might be broken--I will try implementing MySQL. Any addition information can be provided gladly. I'll try asking the IRC channel.

build_modversion

I'm creating a version of this API/frontend using express.js and I was wondering what the purpose of the build_modversion table was.

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.