Giter Club home page Giter Club logo

optolith-client's Introduction

Optolith Character Generator and Manager Build Status

Welcome to the repository for Optolith, a desktop application for The Dark Eye 5th Edition. Nice to see you here! 👋🏻

Install

You can download the app here (German page) or here here (English page) (same app on both pages). You'll get an installer for Windows with Auto Update support and a DMG for Mac. For Linux, you get an AppImage, which should support Auto Update but it doesnt seem to work currently. You also get a tar.gz if you don't like AppImage.

It is available for Windows 7+ as well as for Linux (Ubuntu 12.04+, Fedora 21, Debian 8) and macOS 10.9+ x64.

Goal

Optolith was built and is developed based on a few key criteria:

  • A player should be able to create characters without additional cost.
  • A player should take care of the more important parts of a character – the personality and background – instead of keeping track of prerequisites and AP.
  • Creating a character should be as easy and as intuitive as possible to focus on the actual stats.

With those criteria in mind, we further enhance the app.

Contributing

Info on reporting bugs, getting help, contributing code and more can be found in the Contributing Guide!

License

MPL 2.0

optolith-client's People

Contributors

dependabot[bot] avatar elyukai avatar flying-sheep avatar johannes avatar jovetoo avatar lector avatar llmichi1 avatar lorenzck avatar medsmiley avatar pepelios avatar rahjenaos avatar zakant avatar ziermach 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

optolith-client's Issues

Custom Entries

You can create custom rules pretty easily for TDE5. It would be great if you could add custom spells, special abilities etc. inside the app.

InGame Screen

Keep track of everyone's LP/AE/KP, conditions and states, INI, etc.. Requires #29.

French language

Is there anyone who backed the French kickstarter and would like to provide the French translations once the books have been shipped? I am not able to speak French at all, but I would like to provide a French version of my app.

Print wiki entries for used abilities

This feature could include the following:

  • Advantages/Disadvantages
  • Special Abilities
  • Spells
  • Liturgical Chants

Also, make it possible to choose which exact entries should be printed (cleaner, no obvious entries).

Dutch localization

  • UI
  • Experience Levels
  • Races
  • Cultures
  • Professions
  • Attributes
  • Advantages
  • Disadvantages
  • Skills
  • Combat Techniques
  • Spells/Rituals
  • Cantrips
  • Liturgical Chants/Ceremonies
  • Blessings
  • Special Abilities
  • Equipment

Data validation

Due to several issues with the data from the tables, I want to create a data validator, based on the files under /wiki. This validator has to check all entries after building either the data table or the locales.

Build Character Sheet PDF generator

On mobile, using React Native, I can't use the printToPDF method provided by Chromium and thus Electron. Also, the current PDFs look blurry and the sizes are not always how I want them to be. That's why a new way of generating the character sheet is required. But before this can be done, I want to do the redesign of the character sheet, so that work doesn't need to be done twice. I'll keep this issue updated, though.

I plan to use pdfMake as thats the only library that supports a declarative creation of PDFs.

Add option to archive characters

The feature would remove them from the default list of heroes, which would also disable editing. They could still be shown in list using specific view options and they could also return to normal list.

Skill limits break profession costs for high starting skills

When choosing a profession with high starting skill values (e.g. Adersin with Swords and 2h-Swords at 12) at a low starting AP level (e.g. "average" at 1000 AP), the maximum skill values (in this case 10) will be in effect for the profession-based skill values (in our example the character will have 10 in both Sword skills), but the profession cost remains the same. Either package deals need to break skill limits or the package costs need to be reduced when limits are in effect.

Calculate Adv/Disadv/SA name and cost based on ActiveObjectWithId

Given the interface

interface ActiveObject { // from data.d.ts
    sid?: string | number;
    sid2?: string | number;
    tier?: number;
}

interface ActiveObjectWithId extends ActiveObject {
    id: string;
}

, which is used by RCP for setting advantages/disadvantages/special abilities, the new function needs to create a new object based on ActiveObjectWithId, implementing the interface

interface RequiredActivatableViewObject {
    id: string;
    name: string;
    add?: string; // addition to the name, such as 'Church of Praios' in 'Tradition (Church of Praios)'
    tier?: number;
    cost: number;
}

This will be used for calculating culture and profession costs and displaying the names (and costs) in the wiki.

Groups

Group several characters, so that you can see them all at once.

This feature will enable a separate tab aside Heroes, Wiki, FAQ, and About. You'll then be able to create a "group" and assign characters to it, both heroes and NPCs.

It will then provide a list just like in the Heroes tab, with only the characters visible that you selected. You'll also be able to edit the list after you created a group.

This is only the basic functionality. There are several additions planned:

  • Compare characters #31
  • In-Game view with LP/AE/KP etc storage #30

Bei Zonenrüstungserschaffung nur RS anzeigen

Related #1121

Bei der Erstellung von Zonenrüstung muss man für jede Zone eine eigene Teilrüstung auswählen, da dabei aber nicht die tatsächliche RS angezeigt wird, muss man immer nachsehen. Deswegen wäre es besser direkt die RS auszuwählen. Eventuelle Rüstungsvor- bzw. -nachteile sollten ebenso irgendwie als Anmerkung auf dem Heldenbogen vorhanden sein, zumindest die Sonderrüstung, von der der Effekt abgeleitet ist.

Aventurische Magie II

Database done:

  • Advantages
  • Disadvantages
  • Special Abilities
  • Spells + "Magische Handlungen"
  • Cantrips
  • Spell Extensions
  • Cultures
  • Professions
  • Items

Implementation done:

  • Advantages
  • Disadvantages
  • Special Abilities
  • Spells + "Magische Handlungen"
  • Cantrips
  • Spell Extensions
  • Cultures
  • Professions
  • Items

Item Sets

Related #1121

You will be able to put melee weapons, ranged weapons, armor and shields/partying weapons into one set and it will calculate the PRO, ENC and all that stuff completely automatically. You will only have to take care of „buffs“/„debuffs“ when playing (e.g. states). You can also create multiple sets then.

Calculate cultural package and profession costs

Given #3 is done, implement a full calculating function for the step from phase 1 (RCP selection) to 2 (general character creation). I'd say it should be added to the ASSIGN_RCP_OPTIONS case in currentHeroPost.ts.

Build error auf master und develop branch

Toolversionen

npm -v: 5.6.0
node -v: v8.11.2

Steps

1.

npm i ist erfolgreich durchgelaufen.

2.

Jedoch läuft der nachfolgende Befehl anschließend auf einen Fehler.

PS D:\git\private\tdeheroes-code> npm run-script build

> [email protected] build D:\git\private\tdeheroes-code
> electron-builder --config -lw

electron-builder 19.46.6
Using electron-builder.json configuration file
No native production dependencies
Packaging for linux x64 using electron 2.0.2 to dist\linux-unpacked
Error: Application entry file "app\main.js" in the "D:\git\private\tdeheroes-code\dist\linux-unpacked\resources\app.asar" does not exist. Seems like a wrong configuration.
    at error (D:\git\private\tdeheroes-code\node_modules\electron-builder-lib\src\asar\asarFileChecker.ts:7:12)
    at D:\git\private\tdeheroes-code\node_modules\electron-builder-lib\src\asar\asarFileChecker.ts:33:11
    at Generator.next (<anonymous>)
    at D:\git\private\tdeheroes-code\node_modules\graceful-fs\polyfills.js:287:18
    at FSReqWrap.oncomplete (fs.js:153:5)
From previous event:
    at checkFileInArchive (D:\git\private\tdeheroes-code\node_modules\electron-builder-lib\out\asar\asarFileChecker.js:46:21)
    at D:\git\private\tdeheroes-code\node_modules\electron-builder-lib\src\platformPackager.ts:316:13
    at Generator.next (<anonymous>)
From previous event:
    at LinuxPackager.checkFileInPackage (D:\git\private\tdeheroes-code\node_modules\electron-builder-lib\out\platformPackager.js:389:11)
    at D:\git\private\tdeheroes-code\node_modules\electron-builder-lib\src\platformPackager.ts:364:16
    at Generator.next (<anonymous>)
    at D:\git\private\tdeheroes-code\node_modules\graceful-fs\polyfills.js:287:18
    at FSReqWrap.oncomplete (fs.js:153:5)
From previous event:
    at LinuxPackager.sanityCheckPackage (D:\git\private\tdeheroes-code\node_modules\electron-builder-lib\out\platformPackager.js:407:11)
    at D:\git\private\tdeheroes-code\node_modules\electron-builder-lib\src\platformPackager.ts:208:16
    at Generator.next (<anonymous>)
    at runCallback (timers.js:810:20)
    at tryOnImmediate (timers.js:768:5)
    at processImmediate [as _immediateCallback] (timers.js:745:5)
From previous event:
    at LinuxPackager.doPack (D:\git\private\tdeheroes-code\node_modules\electron-builder-lib\out\platformPackager.js:267:11)
    at D:\git\private\tdeheroes-code\node_modules\electron-builder-lib\src\platformPackager.ts:115:16
    at Generator.next (<anonymous>)
From previous event:
    at LinuxPackager.pack (D:\git\private\tdeheroes-code\node_modules\electron-builder-lib\out\platformPackager.js:190:11)
    at D:\git\private\tdeheroes-code\node_modules\electron-builder-lib\src\packager.ts:330:24
    at Generator.next (<anonymous>)
    at xfs.stat (D:\git\private\tdeheroes-code\node_modules\fs-extra\lib\mkdirs\mkdirs.js:56:16)
    at D:\git\private\tdeheroes-code\node_modules\graceful-fs\polyfills.js:287:18
    at FSReqWrap.oncomplete (fs.js:153:5)
From previous event:
    at Packager.doBuild (D:\git\private\tdeheroes-code\node_modules\electron-builder-lib\out\packager.js:396:11)
    at D:\git\private\tdeheroes-code\node_modules\electron-builder-lib\src\packager.ts:274:52
From previous event:
    at Packager._build (D:\git\private\tdeheroes-code\node_modules\electron-builder-lib\out\packager.js:340:11)
    at D:\git\private\tdeheroes-code\node_modules\electron-builder-lib\src\packager.ts:244:23
    at Generator.next (<anonymous>)
    at runCallback (timers.js:810:20)
    at tryOnImmediate (timers.js:768:5)
    at processImmediate [as _immediateCallback] (timers.js:745:5)
From previous event:
    at Packager.build (D:\git\private\tdeheroes-code\node_modules\electron-builder-lib\out\packager.js:300:11)
    at D:\git\private\tdeheroes-code\node_modules\electron-builder\src\builder.ts:287:40
    at Generator.next (<anonymous>)
From previous event:
    at _build (D:\git\private\tdeheroes-code\node_modules\electron-builder\out\builder.js:61:21)
    at build (D:\git\private\tdeheroes-code\node_modules\electron-builder\src\builder.ts:257:10)
    at then (D:\git\private\tdeheroes-code\node_modules\electron-builder\src\cli\cli.ts:49:4)
    at runCallback (timers.js:810:20)
    at tryOnImmediate (timers.js:768:5)
    at processImmediate [as _immediateCallback] (timers.js:745:5)
From previous event:
    at Object.args [as handler] (D:\git\private\tdeheroes-code\node_modules\electron-builder\src\cli\cli.ts:49:4)
    at Object.runCommand (D:\git\private\tdeheroes-code\node_modules\yargs\lib\command.js:235:44)
    at Object.parseArgs [as _parseArgs] (D:\git\private\tdeheroes-code\node_modules\yargs\yargs.js:1041:24)
    at Object.get [as argv] (D:\git\private\tdeheroes-code\node_modules\yargs\yargs.js:957:21)
    at Object.<anonymous> (D:\git\private\tdeheroes-code\node_modules\electron-builder\src\cli\cli.ts:43:15)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Function.Module.runMain (module.js:693:10)
    at startup (bootstrap_node.js:191:16)
    at bootstrap_node.js:612:3
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] build: `electron-builder --config -lw`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

Next errors ;-)

  • Branch: feature/jaxt0r_up_and_running
  • Info: Build comes further this time but stucks again. Maybe you have a few minutes to reproduce the error locally.

I started with

  1. npm i - all ok
  2. npm run bundle - unused imports errors etc.

Now the error:

D:\_\git\private\tdeheroes-code>npm run build

> [email protected] build D:\_\git\private\tdeheroes-code
> electron-builder --config -lw

electron-builder 19.46.6
Using electron-builder.json configuration file
No native production dependencies
Packaging for linux x64 using electron 2.0.2 to dist\linux-unpacked
Building tar.gz
No native production dependencies
Packaging for linux ia32 using electron 2.0.2 to dist\linux-ia32-unpacked
Building tar.gz
No native production dependencies
Packaging for win32 x64 using electron 2.0.2 to dist\win-unpacked
No native production dependencies
Packaging for win32 ia32 using electron 2.0.2 to dist\win-ia32-unpacked
Building nsis installer (x64 and ia32)
TypeError: "size" argument must be a number
    at Function.Buffer.allocUnsafe (buffer.js:253:3)
    at D:\_\git\private\tdeheroes-code\node_modules\app-package-builder\src\SevenZFile.ts:49:23
    at Generator.next (<anonymous>)
From previous event:
    at SevenZFile.readHeaders (D:\_\git\private\tdeheroes-code\node_modules\app-package-builder\out\SevenZFile.js:132:11)
    at D:\_\git\private\tdeheroes-code\node_modules\app-package-builder\src\SevenZFile.ts:45:31
    at Generator.next (<anonymous>)
From previous event:
    at SevenZFile.read (D:\_\git\private\tdeheroes-code\node_modules\app-package-builder\out\SevenZFile.js:92:11)
    at D:\_\git\private\tdeheroes-code\node_modules\app-package-builder\src\blockMap.ts:43:22
    at Generator.next (<anonymous>)
    at D:\_\git\private\tdeheroes-code\node_modules\graceful-fs\graceful-fs.js:241:16
    at FSReqWrap.oncomplete (fs.js:135:15)
From previous event:
    at createDifferentialPackage (D:\_\git\private\tdeheroes-code\node_modules\app-package-builder\out\blockMap.js:61:21)
    at D:\_\git\private\tdeheroes-code\node_modules\electron-builder-lib\src\targets\nsis\NsisTarget.ts:91:20
    at Generator.next (<anonymous>)
    at runCallback (timers.js:789:20)
    at tryOnImmediate (timers.js:751:5)
    at processImmediate [as _immediateCallback] (timers.js:722:5)
From previous event:
    at NsisTarget.buildAppPackage (D:\_\git\private\tdeheroes-code\node_modules\electron-builder-lib\out\targets\nsis\NsisTarget.js:190:11)
    at D:\_\git\private\tdeheroes-code\node_modules\electron-builder-lib\src\targets\nsis\nsisUtil.ts:32:28
    at FSReqWrap.oncomplete (fs.js:135:15)
From previous event:
    at D:\_\git\private\tdeheroes-code\node_modules\electron-builder-lib\src\targets\nsis\nsisUtil.ts:32:10
    at Generator.next (<anonymous>)
From previous event:
    at AppPackageHelper.packArch (D:\_\git\private\tdeheroes-code\node_modules\electron-builder-lib\out\targets\nsis\nsisUtil.js:92:11)
    at D:\_\git\private\tdeheroes-code\node_modules\electron-builder-lib\src\targets\nsis\NsisTarget.ts:177:51
    at Generator.next (<anonymous>)
From previous event:
    at default.map (D:\_\git\private\tdeheroes-code\node_modules\electron-builder-lib\out\targets\nsis\NsisTarget.js:287:37)
From previous event:
    at D:\_\git\private\tdeheroes-code\node_modules\electron-builder-lib\src\targets\nsis\NsisTarget.ts:176:29
    at Generator.next (<anonymous>)
    at runCallback (timers.js:789:20)
    at tryOnImmediate (timers.js:751:5)
    at processImmediate [as _immediateCallback] (timers.js:722:5)
From previous event:
    at NsisTarget.buildInstaller (D:\_\git\private\tdeheroes-code\node_modules\electron-builder-lib\out\targets\nsis\NsisTarget.js:337:11)
    at D:\_\git\private\tdeheroes-code\node_modules\electron-builder-lib\src\targets\nsis\NsisTarget.ts:102:18
    at Generator.next (<anonymous>)
From previous event:
    at NsisTarget.finishBuild (D:\_\git\private\tdeheroes-code\node_modules\electron-builder-lib\out\targets\nsis\NsisTarget.js:205:11)
    at D:\_\git\private\tdeheroes-code\node_modules\electron-builder-lib\src\packager.ts:338:36
From previous event:
    at Packager.doBuild (D:\_\git\private\tdeheroes-code\node_modules\electron-builder-lib\out\packager.js:396:11)
    at D:\_\git\private\tdeheroes-code\node_modules\electron-builder-lib\src\packager.ts:274:52
From previous event:
    at Packager._build (D:\_\git\private\tdeheroes-code\node_modules\electron-builder-lib\out\packager.js:340:11)
    at D:\_\git\private\tdeheroes-code\node_modules\electron-builder-lib\src\packager.ts:244:23
    at Generator.next (<anonymous>)
    at runCallback (timers.js:789:20)
    at tryOnImmediate (timers.js:751:5)
    at processImmediate [as _immediateCallback] (timers.js:722:5)
From previous event:
    at Packager.build (D:\_\git\private\tdeheroes-code\node_modules\electron-builder-lib\out\packager.js:300:11)
    at D:\_\git\private\tdeheroes-code\node_modules\electron-builder\src\builder.ts:287:40
    at Generator.next (<anonymous>)
From previous event:
    at _build (D:\_\git\private\tdeheroes-code\node_modules\electron-builder\out\builder.js:61:21)
    at build (D:\_\git\private\tdeheroes-code\node_modules\electron-builder\src\builder.ts:257:10)
    at then (D:\_\git\private\tdeheroes-code\node_modules\electron-builder\src\cli\cli.ts:49:4)
    at runCallback (timers.js:789:20)
    at tryOnImmediate (timers.js:751:5)
    at processImmediate [as _immediateCallback] (timers.js:722:5)
From previous event:
    at Object.args [as handler] (D:\_\git\private\tdeheroes-code\node_modules\electron-builder\src\cli\cli.ts:49:4)
    at Object.runCommand (D:\_\git\private\tdeheroes-code\node_modules\yargs\lib\command.js:235:44)
    at Object.parseArgs [as _parseArgs] (D:\_\git\private\tdeheroes-code\node_modules\yargs\yargs.js:1041:24)
    at Object.get [as argv] (D:\_\git\private\tdeheroes-code\node_modules\yargs\yargs.js:957:21)
    at Object.<anonymous> (D:\_\git\private\tdeheroes-code\node_modules\electron-builder\src\cli\cli.ts:43:15)
    at Module._compile (module.js:643:30)
    at Object.Module._extensions..js (module.js:654:10)
    at Module.load (module.js:556:32)
    at tryModuleLoad (module.js:499:12)
    at Function.Module._load (module.js:491:3)
    at Function.Module.runMain (module.js:684:10)
    at startup (bootstrap_node.js:187:16)
    at bootstrap_node.js:608:3
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] build: `electron-builder --config -lw`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

Add option to add archetypes from rule books to herolist

This way the given archetypes could be played without the need to always insert the values on your own. If an archetype changes (e.g. errors in the book), the change won't affect already added archetypes – you'd have to readd them to the list then.

Concept for tier-based prerequisites

Currently, you have to implement special abilities with tiers and changing prerequisites per tier as different special ability entries. This leads to a way larger list of active special abilities and duplicate wiki data.

To accomplish that, I want/need to plan the whole feature before starting implementation.

Current progress:

  • SpecialAbilityInstance.ap has to be of type number[], SpecialAbilityInstance.req has to be of type ('RCP' | AllRequirementTypes)[]and the length of both properties equal SpecialAbilityInstance.tiers.
  • Obviously, there will be no need for requiring the previous tier in SpecialAbilityInstance.req.
  • If the current tier is higher than 1, the name must be displayed as {name} I-{currentTier}.
  • If a tier does not match the prerequisites, set the maximum tier for the dropdown.
  • If a tier is required by another active ability, set the minimum tier for the dropdown.

macOS - Menubar

Concerning the macOS platform

Correct menubar elements and add shortcuts from elyukai/tdeheroes#95 if necessary.

The entry to close is normally "Close AppName" or in German "AppName beenden"

Proposal:
Follow the macOS UX flow and place the other elements in the "Edit" category, if the should get included there.

More details on: Apple UX

Scrollbars missing on some devices

A few users reported issues with scrolling: There is no scrollbar and thus no scrolling available. I changed the plugin I am using for the customized scrollbars, but it did not change anything regarding the issue(s). I couldnt reproduce the issue so far.

Freies Eintragen bei Haar- bzw. Augenfarbe

Es wäre gut, wenn man die Haar- und Augenfarbe frei eintragen könnte, da z.B. das Stigma grüne Haare eingetragen werden könnte. Allgemein wäre es gut, ein freies Eintragen zu haben, da so auch Farben eintragbar wären, die nicht im kulturellen Fundus liegen.

Handle permanently spent AE automatically

This requires some special UI, as buying a ritual special ability (e.g. Binding of the Staff) where the ritual costs pAE does not imply the ritual is performed. Maybe it can be handled by providing a list of bought "pAE rituals" where you can select which you want to be performed. But I'm not sure if you always remember to fill out this form. I probably wouldn't xD Any thoughts on this? Or maybe other ideas how to handle it?

Create History of Changes

There should be three main "commit types":

  • RCP-Selection done. This way you can see what entries you had at which level at the very beginning, so you can also check what RCP select options you've chosen.
  • Character creation done. This way, you can see what changed between RCP values and final values for playing.
  • Getting new AP for an adventure (or just manually create a history save point). This way you can track changes between every adventure or other important events.

Each "commit" should contain the following information:

  • Title
  • Optional description
  • Date
  • Changes between the current hero and the hero at the last commit

I wouldn't create a detailed history of every single change, since you can go back and forth all the time, which would make it harder to read and also harder to maintain.

Add option to set default rule books

This setting would not be applied automatically to be predictable and to not have more work to do if you do not want to have those set books for a character.

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.