Giter Club home page Giter Club logo

timetrackrs's Issues

Windows + MacOS service / autorun

Create a simple way to install timetrackrs as a service such that

  • it automatically starts on login
  • restarts when it crashes due to an error

Both are already implemented on Linux with the included systemd user service.

On Windows, the state of the art would probably be to create a MSIX package that installs timetrackrs as a system service (e.g. reference: https://docs.microsoft.com/en-us/windows/msix/packaging-tool/convert-an-installer-with-services) There's some rust crate that helps with this I think.

On MacOS, I have no idea how to do this properly.

compile error in hashbrown

With the latest stable Rust version, I get this compilation error (tested in Windows and Linux, both the same error) :

   Compiling hashbrown v0.11.2
error[E0554]: `#![feature]` may not be used on the stable release channel
  --> /home/frank/.cargo/registry/src/github.com-1ecc6299db9ec823/hashbrown-0.11.2/src/lib.rs:15:5
   |
15 | /     feature(
16 | |         test,
17 | |         core_intrinsics,
18 | |         dropck_eyepatch,
...  |
24 | |         maybe_uninit_array_assume_init
25 | |     )
   | |_____^

For more information about this error, try `rustc --explain E0554`.
error: could not compile `hashbrown` due to previous error
warning: build failed, waiting for other jobs to finish...
error: failed to compile `timetrackrs v0.1.0 (/home/frank/tmp/timetrackrs)`, intermediate artifacts can be found at `/home/frank/tmp/timetrackrs/target`

With the nightly Rust version, I get this error:

   Compiling timetrackrs v0.1.0 (C:\tmp\timetrackrs)
GOTOOO
error: proc-macro derive panicked
  --> src\server\server.rs:18:10
   |
18 | #[derive(RustEmbed)]
   |          ^^^^^^^^^
   |
   = help: message: #[derive(RustEmbed)] folder 'C:\tmp\timetrackrs\frontend/dist/' does not exist. cwd: 'C:\tmp\timetrackrs'

warning: unused imports: `ffi::OsString`, `slice`
 --> src\capture\windows\winwins.rs:1:33
  |
1 | use std::{collections::HashMap, ffi::OsString, slice};
  |                                 ^^^^^^^^^^^^^  ^^^^^
  |
  = note: `#[warn(unused_imports)]` on by default

error[E0599]: no function or associated item named `get` found for struct `FrontendDistAssets` in the current scope
  --> src\server\server.rs:24:37
   |
20 | struct FrontendDistAssets;
   | -------------------------- function or associated item `get` not found for this
...
24 |     let asset = FrontendDistAssets::get(path).ok_or_else(warp::reject::not_found)?;
   |                                     ^^^ function or associated item not found in `FrontendDistAssets`
   |
   = help: items from traits can only be used if the trait is implemented and in scope
   = note: the following traits define an item `get`, perhaps you need to implement one of them:
           candidate #1: `SliceIndex`
           candidate #2: `Row`
           candidate #3: `RustEmbed`

For more information about this error, try `rustc --explain E0599`.
warning: `timetrackrs` (lib) generated 1 warning
error: failed to compile `timetrackrs v0.1.0 (C:\tmp\timetrackrs)`, intermediate artifacts can be found at `C:\tmp\timetrackrs\target`

Caused by:
  could not compile `timetrackrs` due to 2 previous errors; 1 warning emitted

But would be nice anyway if it would compile with the latest stable version.

Broken on Firefox 96 beta

probably a firefox bug. Temporal.Now.zonedDateTimeISO() throws Uncaught TypeError: can't access property "split", time is undefined

normal (firefox 90, chrome,...):

 new Intl.DateTimeFormat('en-us', {
        timeZone: "UTC",
        hour12: false,
        era: 'short',
        year: 'numeric',
        month: 'numeric',
        day: 'numeric',
        hour: 'numeric',
        minute: 'numeric',
        second: 'numeric'
      }).format(new Date())`

normal output:

'12 10, 2021 AD, 19:37:23'

firefox 96 output:

"12/10/2021 A, 19:42:34"

[ERROR] esbuild error when trying to build on FreeBSD

OS: FreeBSD 13.2-STABLE

Hi, I get this error when trying to build on FreeBSD:

/usr/home/yaslam/Git/timetrackrs/frontend/.pnp.cjs:17895
  return Object.defineProperties(new Error(message), {
                                 ^

Error: Your application tried to access esbuild, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound.

Required package: esbuild (via "esbuild/package.json")
Required by: /usr/home/yaslam/Git/timetrackrs/frontend/.yarn/__virtual__/vite-virtual-ec6cd84b7e/4/.yarn/berry/cache/vite-npm-4.0.4-33a47fc7a2-9.zip/node_modules/vite/dist/node/cli.js

    at makeError (/usr/home/yaslam/Git/timetrackrs/frontend/.pnp.cjs:17895:34)
    at resolveToUnqualified (/usr/home/yaslam/Git/timetrackrs/frontend/.pnp.cjs:19313:21)
    at Object.resolveToUnqualified (/usr/home/yaslam/Git/timetrackrs/frontend/.pnp.cjs:19503:26)
    at resolve$1 (file:///usr/home/yaslam/Git/timetrackrs/frontend/.pnp.loader.mjs:2009:31)
    at nextResolve (node:internal/modules/esm/loader:163:28)
    at ESMLoader.resolve (node:internal/modules/esm/loader:835:30)
    at ESMLoader.getModuleJob (node:internal/modules/esm/loader:424:18)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:77:40)
    at link (node:internal/modules/esm/module_job:76:36)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

Node.js v18.17.1

Show a status tray icon

Show a icon in whatever the native system tray is on each platform, that at least shows that the program is running successfully, and allows opening the web UI with a click.

Later, further functionality could include:

  • a button to pause tracking for some duration for privacy
  • notifications / calls to action (e.g. detect uncategorized time, ask what the user was doing)

Windows build failed - openssl & vcpkg

So I tried to install, but I am getting this error, the same as in README.

error: failed to run custom build command for `openssl-sys v0.9.80`

However solutions from README doesn't work for me.

Not sure what info to provide.

Build instructions

Heya, this looks really cool and promissing for a time tracker app! :)
Can you tell me how to build it? I am not quite sure and didn't find any build instructions.

Thanks!

where is the data stored? in the .local/timetrackr/*.sqlite files?

Hi maybe it's just me, but where is the data stored? is there an easy way to convert it to csv? I know it's not an efficient format, but it's easier for me to grasp (and then get an idea of wether this tool is as useful as it looks! great job)

(if the question is too noob, just say so, I can accept that a tool requires a certain level of knowledge to even use :) )

Compile cross-platform binaries with GitHub Actions

Windows, Linux, and MacOS binaries should be built via GitHub Actions.

This should happen whenever a new tag is pushed (e.g. for releases with cargo release) and possibly also "nightly" (the newest commit on master, at most once per day)

'tokio-runtime-worker' panicked at 'not zero terminated'

Hi, I use Linux 5.4.0-94-generic #106-Ubuntu x86_64 GNU/Linux

after building I run RUST_BACKTRACE=1 ~/.cargo/bin/timetrackrs and have this output:

2022-01-20T18:34:44.713231Z  INFO timetrackrs::db: Running 6 migrations 
Configuration: TimetrackrsConfig {
    capturers: [
        CaptureConfig {
            interval: 30s,
            args: NativeDefault(
                NativeDefaultArgs,
            ),
        },
    ],
    server: Some(
        ServerConfig {
            listen: [
                "127.0.0.1:52714",
            ],
        },
    ),
}
starting server at http://127.0.0.1:52714
new id generated: c7kqmh04ooc839fc5gc0
2022-01-20T18:34:44.808347Z  INFO timetrackrs::capture: sleeping 30s
thread 'tokio-runtime-worker' panicked at 'not zero terminated', src/capture/linux/types.rs:121:9
stack backtrace:
reporting root done
   0: std::panicking::begin_panic
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/std/src/panicking.rs:604:12
   1: timetrackrs::capture::linux::types::split_zero
             at ./src/capture/linux/types.rs:121:9
   2: <timetrackrs::capture::linux::x11::X11Capturer<C> as timetrackrs::capture::Capturer>::capture
             at ./src/capture/linux/x11.rs:123:29
   3: timetrackrs::capture::capture_loop::{{closure}}
             at ./src/capture/mod.rs:67:20
   4: <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/core/src/future/mod.rs:84:19
   5: tokio::runtime::task::core::CoreStage<T>::poll::{{closure}}
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/runtime/task/core.rs:161:17
   6: tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/loom/std/unsafe_cell.rs:14:9
   7: tokio::runtime::task::core::CoreStage<T>::poll
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/runtime/task/core.rs:151:13
   8: tokio::runtime::task::harness::poll_future::{{closure}}
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/runtime/task/harness.rs:461:19
   9: <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/core/src/panic/unwind_safe.rs:271:9
  10: std::panicking::try::do_call
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/std/src/panicking.rs:485:40
  11: std::panicking::try
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/std/src/panicking.rs:449:19
  12: std::panic::catch_unwind
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/std/src/panic.rs:136:14
  13: tokio::runtime::task::harness::poll_future
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/runtime/task/harness.rs:449:18
  14: tokio::runtime::task::harness::Harness<T,S>::poll_inner
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/runtime/task/harness.rs:98:27
  15: tokio::runtime::task::harness::Harness<T,S>::poll
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/runtime/task/harness.rs:53:15
  16: tokio::runtime::task::raw::RawTask::poll
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/runtime/task/raw.rs:70:18
  17: tokio::runtime::task::LocalNotified<S>::run
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/runtime/task/mod.rs:343:9
  18: tokio::runtime::thread_pool::worker::Context::run_task::{{closure}}
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/runtime/thread_pool/worker.rs:420:13
  19: tokio::coop::with_budget::{{closure}}
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/coop.rs:102:9
  20: std::thread::local::LocalKey<T>::try_with
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/std/src/thread/local.rs:413:16
  21: std::thread::local::LocalKey<T>::with
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/std/src/thread/local.rs:389:9
  22: tokio::coop::with_budget
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/coop.rs:95:5
  23: tokio::coop::budget
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/coop.rs:72:5
  24: tokio::runtime::thread_pool::worker::Context::run_task
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/runtime/thread_pool/worker.rs:419:9
  25: tokio::runtime::thread_pool::worker::Context::run
  26: tokio::runtime::thread_pool::worker::run::{{closure}}
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/runtime/thread_pool/worker.rs:371:17
  27: tokio::macros::scoped_tls::ScopedKey<T>::set
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/macros/scoped_tls.rs:61:9
  28: tokio::runtime::thread_pool::worker::run
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/runtime/thread_pool/worker.rs:368:5
  29: tokio::runtime::thread_pool::worker::Launch::launch::{{closure}}
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/runtime/thread_pool/worker.rs:347:45
  30: <tokio::runtime::blocking::task::BlockingTask<T> as core::future::future::Future>::poll
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/runtime/blocking/task.rs:42:21
  31: tokio::runtime::task::core::CoreStage<T>::poll::{{closure}}
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/runtime/task/core.rs:161:17
  32: tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/loom/std/unsafe_cell.rs:14:9
  33: tokio::runtime::task::core::CoreStage<T>::poll
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/runtime/task/core.rs:151:13
  34: tokio::runtime::task::harness::poll_future::{{closure}}
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/runtime/task/harness.rs:461:19
  35: <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/core/src/panic/unwind_safe.rs:271:9
  36: std::panicking::try::do_call
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/std/src/panicking.rs:485:40
  37: std::panicking::try
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/std/src/panicking.rs:449:19
  38: std::panic::catch_unwind
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/std/src/panic.rs:136:14
  39: tokio::runtime::task::harness::poll_future
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/runtime/task/harness.rs:449:18
  40: tokio::runtime::task::harness::Harness<T,S>::poll_inner
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/runtime/task/harness.rs:98:27
  41: tokio::runtime::task::harness::Harness<T,S>::poll
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/runtime/task/harness.rs:53:15
  42: tokio::runtime::task::raw::RawTask::poll
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/runtime/task/raw.rs:70:18
  43: tokio::runtime::task::UnownedTask<S>::run
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/runtime/task/mod.rs:379:9
  44: tokio::runtime::blocking::pool::Inner::run
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/runtime/blocking/pool.rs:264:17
  45: tokio::runtime::blocking::pool::Spawner::spawn_thread::{{closure}}
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/runtime/blocking/pool.rs:244:17
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
Error: panic

Stack backtrace:
   0: anyhow::error::<impl core::convert::From<E> for anyhow::Error>::from
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/anyhow-1.0.52/src/error.rs:530:25
   1: <core::result::Result<T,F> as core::ops::try_trait::FromResidual<core::result::Result<core::convert::Infallible,E>>>::from_residual
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/core/src/result.rs:2052:27
   2: timetrackrs::main::{{closure}}
             at ./src/bin/timetrackrs.rs:86:9
   3: <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/core/src/future/mod.rs:84:19
   4: tokio::park::thread::CachedParkThread::block_on::{{closure}}
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/park/thread.rs:263:54
   5: tokio::coop::with_budget::{{closure}}
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/coop.rs:102:9
   6: std::thread::local::LocalKey<T>::try_with
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/std/src/thread/local.rs:413:16
   7: std::thread::local::LocalKey<T>::with
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/std/src/thread/local.rs:389:9
   8: tokio::coop::with_budget
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/coop.rs:95:5
   9: tokio::coop::budget
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/coop.rs:72:5
  10: tokio::park::thread::CachedParkThread::block_on
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/park/thread.rs:263:31
  11: tokio::runtime::enter::Enter::block_on
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/runtime/enter.rs:151:13
  12: tokio::runtime::thread_pool::ThreadPool::block_on
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/runtime/thread_pool/mod.rs:77:9
  13: tokio::runtime::Runtime::block_on
             at /home/i/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.15.0/src/runtime/mod.rs:463:43
  14: timetrackrs::main
             at ./src/bin/timetrackrs.rs:90:5
  15: core::ops::function::FnOnce::call_once
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/core/src/ops/function.rs:227:5
  16: std::sys_common::backtrace::__rust_begin_short_backtrace
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/std/src/sys_common/backtrace.rs:123:18
  17: std::rt::lang_start::{{closure}}
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/std/src/rt.rs:145:18
  18: core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/core/src/ops/function.rs:259:13
  19: std::panicking::try::do_call
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/std/src/panicking.rs:485:40
  20: std::panicking::try
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/std/src/panicking.rs:449:19
  21: std::panic::catch_unwind
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/std/src/panic.rs:136:14
  22: std::rt::lang_start_internal::{{closure}}
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/std/src/rt.rs:128:48
  23: std::panicking::try::do_call
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/std/src/panicking.rs:485:40
  24: std::panicking::try
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/std/src/panicking.rs:449:19
  25: std::panic::catch_unwind
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/std/src/panic.rs:136:14
  26: std::rt::lang_start_internal
             at /rustc/5e57faa78aa7661c6000204591558f6665f11abc/library/std/src/rt.rs:128:20
  27: main
  28: __libc_start_main
  29: _start

capturer tries to "catch up" on windows after standby

2021-12-08T08:22:54.729153Z  INFO timetrackrs::capture: sleeping 30s
2021-12-08T08:22:55.054840Z  INFO timetrackrs::capture: sleeping 30s
2021-12-08T08:22:55.376356Z  INFO timetrackrs::capture: sleeping 30s
2021-12-08T08:22:55.698564Z  INFO timetrackrs::capture: sleeping 30s
2021-12-08T08:22:56.023379Z  INFO timetrackrs::capture: sleeping 30s
2021-12-08T08:22:56.346919Z  INFO timetrackrs::capture: sleeping 30s
2021-12-08T08:22:56.674801Z  INFO timetrackrs::capture: sleeping 30s
2021-12-08T08:22:56.996284Z  INFO timetrackrs::capture: sleeping 30s
2021-12-08T08:22:57.321964Z  INFO timetrackrs::capture: sleeping 30s
2021-12-08T08:22:57.645941Z  INFO timetrackrs::capture: sleeping 30s
2021-12-08T08:22:57.969895Z  INFO timetrackrs::capture: sleeping 30s
2021-12-08T08:22:58.297271Z  INFO timetrackrs::capture: sleeping 30s
2021-12-08T08:22:58.627182Z  INFO timetrackrs::capture: sleeping 30s

Fix the single event viewer

The single-event viewer should show a single event plus the derivation chain for all the tags that were applied so you can visually debug your rules. It did this in the past but I think it's not in a working state.

You should be able to reach the single-event viewer with the API call that gets all the event ids in a specific time range / time chunk

build failed on Windows

I tried to install it on Windows, with a new node and yarn installation, and it fails:

error C:\tmp\timetrackrs\frontend\node_modules\husky: Command failed.
Exit code: 1
Command: node husky install
Arguments:
Directory: C:\tmp\timetrackrs\frontend\node_modules\husky
Output:
husky > Setting up git hooks
Cannot read properties of null (reading 'toString')



C:\tmp\timetrackrs\frontend>node --version
v16.13.0

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.