nafiesl / dompet Goto Github PK
View Code? Open in Web Editor NEWA personal bookkeeping web application, built with Laravel.
License: MIT License
A personal bookkeeping web application, built with Laravel.
License: MIT License
In current search feature, in transaction list, we only can search in selected year and month. In category detail page, we can search only for selected category, swith given date range. Same behaviour with partner detail page.
We need to create ability to search all transactions in all time, all category and all partner.
The first approach is to add all_months
option on month filter and all_years
option on year filter in transaction listing page.
all_months
and all_years
filter only applied on query if search query keyword exists.
Want to allow users to login with more than 1 account.
I usually create a new account for a certain need, eg:
I need to logout and login from one account to another if I want to use them
If this feature is available, I just need to login to multiple accounts once. Then I will switch between them as I needed.
This is a similar feature we have on Twitter. Where we can login to another account and switch between them.
Halo mas @nafiesl , apakah saat membuat suatu kategori yang sudah terisi transaksinya tidak bisa dihapus ya dari sistem? Karena ada kategori yang ingin saya hapus. Trims.
Halaman laporan transaksi tahunan yang terdiri dari :
Bikin API nya kang sapa tau ada yg mau bikin client app nya..
Halo mas @nafiesl , saat saya membuka transaksi berdasarkan kategori dengan url dompet.test/categories/1
di PRODUCTION mode hasilnya 500 server error code. Hal ini dikarenakan variable editableTransaction
tidak terdefinisikan. Berikut kepingan error lognya:
[2019-03-22 18:22:27] production.ERROR: compact(): Undefined variable: editableTransaction {"userId":1,"exception":"[object] (ErrorException(code: 0): compact(): Undefined variable: editableTransaction at /var/www/dompet/releases/release_2019032209201553246413/app/Http/Controllers/CategoriesController.php:74)
[stacktrace]
#0 [internal function]: Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError(8, 'compact(): Unde...', '/var/www/dompet...', 74, Array)
#1 /var/www/dompet/releases/release_2019032209201553246413/app/Http/Controllers/CategoriesController.php(74): compact('category', 'transactions', 'year', 'incomeTotal', 'spendingTotal', 'startDate', 'endDate', 'partners', 'editableTransac...', 'categories')
#2 [internal function]: App\\Http\\Controllers\\CategoriesController->show(Object(App\\Category))
#3 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): call_user_func_array(Array, Array)
#4 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\\Routing\\Controller->callAction('show', Array)
#5 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Routing/Route.php(219): Illuminate\\Routing\\ControllerDispatcher->dispatch(Object(Illuminate\\Routing\\Route), Object(App\\Http\\Controllers\\CategoriesController), 'show')
#6 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Routing/Route.php(176): Illuminate\\Routing\\Route->runController()
#7 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Routing/Router.php(680): Illuminate\\Routing\\Route->run()
#8 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#9 /var/www/dompet/releases/release_2019032209201553246413/app/Http/Middleware/Lang.php(20): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#10 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): App\\Http\\Middleware\\Lang->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#11 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#12 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#13 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#14 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#15 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(43): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#16 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Auth\\Middleware\\Authenticate->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#17 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#18 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(75): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#19 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#20 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#21 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#22 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#23 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#24 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(56): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#25 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Session\\Middleware\\StartSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#26 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#27 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#28 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#29 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#30 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(66): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#31 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#32 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#33 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#34 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Routing/Router.php(682): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#35 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Routing/Router.php(657): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#36 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Routing/Router.php(623): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#37 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Routing/Router.php(612): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#38 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#39 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#40 /var/www/dompet/releases/release_2019032209201553246413/app/Http/Middleware/PreventBackHistory.php(18): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#41 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): App\\Http\\Middleware\\PreventBackHistory->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#42 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#43 /var/www/dompet/releases/release_2019032209201553246413/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#44 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Fideloper\\Proxy\\TrustProxies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#45 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#46 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#47 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#48 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#49 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#50 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#51 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#52 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#53 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#54 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#55 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(62): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#56 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#57 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#58 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#59 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(151): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#60 /var/www/dompet/releases/release_2019032209201553246413/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#61 /var/www/dompet/releases/release_2019032209201553246413/public/index.php(53): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#62 {main}
"}
Currently, we are only using Rp
as a default currency label on this project. It only fits Indonesian users. We want to make a dynamic currency code label based on user settings (eg. User Profile) so can be fit for other countries as well.
Here is an example of the part where the currency label is being used.
We can find it using the Github search:
https://github.com/nafiesl/dompet/search?q=Rp&type=code
Here is the implementation proposal:
Currency Code
field on the user profile page (currency_code
column on the users
table).Currency Code
to replace the Rp
labels on the views.Currency Code
is a string with 3 characters maximum (ref: https://www.iban.com/currency-codes).IDR
as the default currency_code
value of the users
table.We want to have a new menu named "Settings" which contains:
Those menu items will be transformed into tab menus inside the Settings page. Something like this:
Image description:
It does not have to be a vertical menu items, a horizontal menu will work as well.
Halo mas @nafiesl , saya cek di API nya tidak ada route untuk logout. Saya pikir kalau untuk urusan autentikasi bisa menggunakan Laravel passport di mode grant type password. Mengapa saya mengusulkan ini? Ini bertujuan utk memisahkan back-end dan front-end. Saya ingin mencoba membuat web apps untuk dompet dan autentikasinya bersifat stateless.
Btw, saya terinspirasi usul ini setelah mencoba tutorial yang disediakan oleh Andre Madarang di Youtube. Ia membuat semacam todo web apps dengan Vue (front-end) dengan menggunakan Laravel Passport sebagai autentikasinya. Mungkin bisa disimak di daftar putar ini mulai dari daftar ke 9 - 11.
In current condition, we can browse transaction filtering with category and partner. If we are not giving any category or partner, we will shown all transactions.
We want to browse transactions, with filter no_category and no_partner. Then we will get transaction list with category_id and partner_id is null.
Akan sangat membantu sekali kita ada fitur management utang/piutang
Halo mas @nafiesl, pada saat saya mencoba menjalankan perintah php artisan optimize
, route change-password tidak bisa digunakan. Kalau saya lihat dari error log nya saya menduga bahwa route change-password sudah hanya bisa di pakai satu kali saja.
Berikut gambar pesan error nya:
Sepertinya penyebabnya ada di routes/web.php
:
// Change Password Routes
Route::get('change-password', 'Auth\ChangePasswordController@show')->name('password.change');
Route::patch('change-password', 'Auth\ChangePasswordController@update')->name('password.change');
Halo mas @nafiesl , makasih banyak sudah membuat repository ini. Saya sudah memakainya sejak bulan Februari dan sangat memuaskan serta menghemat waktu saya membuat sistem seperti ini. Ada yang ingin saya tanyakan tentang saldo akhir saat melakukan filter kategori. Jadi, saya melakukan filter kategori dompet dan saat di filter nilai saldo akhir rancu dengan nilai di selisih.
Kalau saya sebagai user akan condong memilih nilai di selisih karena valid dibandingkan saldo akhir saat di filter.
Halo mas @nafiesl , saya ada umpan balik tentang menginputkan jumlah nominal pengeluaran dan transaksi. Sebaiknya menggunakan input type=number
karena sudah pasti berkaitan dengan angka. Saya melihat mas menggunakan Laravel form collective buatan sendiri yang sintaks terkaitnya seperti ini: {!! FormField::price('amount', ['required' => true, 'label' => __('transaction.amount')]) !!}
. Tetapi, saat dirender di browser hasilnya malah input type text.
Kalau saya menggunakan laptop mungkin tidak ada masalah. Tetapi, kalau menggunakan mobile akan terasa merepotkan karena harus mengubah opsi dari alphabet ke angka seperti di screenshot.
Halo mas @nafiesl , saya ada kesulitan ketika saldo pemasukan saya dari bulan Februari (gabungan kategori dompet, Jenius, dan Saldo bank BNI) malah direset dari nol di bulan Maret. Jadi, saya kesulitan untuk memastikan saldo saya per hari ini berdasarkan kategori dompet (dengan bantuan filter) lagi berapa.
Some deprecation/abandonment warnings when installing with Composer
$ php composer.phar update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 106 installs, 0 updates, 0 removals
...
...(omitted for readability)...
...
Package zendframework/zend-diactoros is abandoned, you should avoid using it. Use laminas/laminas-diactoros instead.
Package jakub-onderka/php-console-color is abandoned, you should avoid using it. Use php-parallel-lint/php-console-color instead.
Package jakub-onderka/php-console-highlighter is abandoned, you should avoid using it. Use php-parallel-lint/php-console-highlighter instead.
Next, to check which dependencies are causing these warnings.
$ php composer.phar why zendframework/zend-diactoros
laravel/passport v7.5.1 requires zendframework/zend-diactoros (~1.0|~2.0)
Referring to: laravel/passport#1167
Checking the history of their dependencies, it seems they've replaced zendframework/zend-diactoros with laminas/laminas-diactoros at this commit here: laravel/passport@7ec6e58#diff-b5d0ee8c97c7abd7e3fa29b9a27d1780R30-R33
So, updating dompet's laravel/passport dependency from ^7.3 to at least 8.2.0 or newer should resolve the warning for that dependency.
$ php composer.phar why jakub-onderka/php-console-highlighter
psy/psysh v0.9.12 requires jakub-onderka/php-console-highlighter (0.3.*|0.4.*)
$ php composer.phar why jakub-onderka/php-console-color
jakub-onderka/php-console-highlighter v0.4 requires jakub-onderka/php-console-color (~0.2)
Referring to: bobthecow/psysh#624
Checking the history of their dependencies, it seems they've fixed the problem at this commit here (>= v0.10.3): bobthecow/psysh@2a75895#diff-b5d0ee8c97c7abd7e3fa29b9a27d1780
But.. dompet doesn't directly list psy/psysh as a dependency anyway, so we'll need to dig a little further:
$ php composer.phar why psy/psysh
laravel/tinker v1.0.10 requires psy/psysh (0.7.*|0.8.*|0.9.*)
Checking the history of their dependencies, it seems they've fixed the problem at this commit here: laravel/tinker@db9a3ec#diff-b5d0ee8c97c7abd7e3fa29b9a27d1780L17-R22
So, updating dompet's laravel/passport dependency from ^1.0 to at least v2.4.0 or newer should resolve the warning for that dependency.
Note: I haven't checked compatibility between dompet and these newer dependencies, so that should be confirmed before changing anything.
I hope this information helps. :-)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.