stumpwm / stumpwm-contrib Goto Github PK
View Code? Open in Web Editor NEWExtension Modules for StumpWM
License: Other
Extension Modules for StumpWM
License: Other
fails to compile unless i comment out the defun tray-icon-height
;;(defun tray-icon-height (tray)
;; "Returns the height of the icons embedded in the TRAY."
;; (screen-tray-icon-height (tray-screen tray)))
Line 11 of stumpwm-contrib/utils/swm-emacs/stumpwm-utils.el reads:
(mapcar #'buffer-name (buffer-list))
Not only does this cause a warning "stumpwm-utils.el:11:2:Warning: mapcar' called for effect; use
mapc' or `dolist' instead", but this line appears to serve no purpose. Should it simply be deleted?
I created this module but did not test it on multi-monitors setup, and later found a bug where going from one monitor to the other crash the on-focus-hook. It happens when the destination head has only one frame in it, and I have found where the exception come from:
(defun balance-current-group ()
(stumpwm::balance-frames-internal (stumpwm:current-group)
(list (stumpwm::tile-group-frame-head
(stumpwm:current-group)
(stumpwm:current-head)))))
And im trying to fix it with something like:
(defun balance-current-group ()
(if (not stumpwm::single-frame-p)
(stumpwm::balance-frames-internal (stumpwm:current-group)
(list (stumpwm::tile-group-frame-head
(stumpwm:current-group)
(stumpwm:current-head))))))
But I can't get it to work properly. Any idea on how to fix this?
Hi all!
What's wrong with app-menu
pull request (#92)?
Can I improve it?
I put following in my config:
(add-to-load-path "~/.stumpwm.d/contrib/util/productivity")
(load-module "productivity")
(define-key *top-map* (kbd "S-Menu") "productivity-mode-toggle")
(setf *productivity-keys*
'(("C-Menu" *root-map*)
("Menu" "app-send-key-menu")
))
the problem is when I press S-Menu it says correctly "Break time" or "Get to Work" but it changes nothing. My Menu + y command (Menu is my prefix key) always calls always "window-list" I thought in Workmode that should not happen.
here the setup of the window list and prefix key:
(set-prefix-key (kbd "Menu"))
(define-key *root-map* (kbd "y") "windowlist")
Am I understanding it wrong how to set it up or what it should do? ignore basicly everything till I press S-Menu again?
Long notification strings crash stumpwm because the message is drawn too far off screen. This can be either too long in the x direction or the y direction. The crash, unfortunately, does not just kill stumpwm, but locks it up so that the leader can no longer be pressed and focus can't be switched. The only way to fix it is to get into another TTY and kill it.
I have a fix (that also adds some formatting options) in pull request #168
I'm trying to do something like the following in my config
(if (not swm-gaps:*gaps-on*)
(swm-gaps:toggle-gaps))
to avoid toggling gaps when reloading my config. But it doesn't work because *gaps-on*
isn't exported.
Both command use "S"...
<978> (kbd "S") "mpd-current-song"
<993> (kbd "S") '*mpd-search-map*
...so please change one it, eg.:
<978> (kbd "i") "mpd-current-song" ;like info
We should make some new subdirs to better organize the modules. Utils should be split:
media
minor-mode
keyboard-tools
desktop-tools
interface-tools (stumpish, stumpwm.el, debian)
stumpwm-extensions
misc
Hello there!
I am currently using the 0.9.8
of stumpwm
. I packaged it for NixOS
(not yet commited). I tried to package current master
, too, but failed to do it. stumpwm
works, but fails to load modules. The *contrib-dir*
is set properly, but that ain't enough/the right thing to do anymore, apparently.
The error message I get as soon as I am trying to load a module via (load-module ...)
tells me something about a missing package.lisp
and TRUENAME
in a path in tmp
.
I am not familiar enough with Common Lisp to help myself. Especially, asdf
is completely unknown to me. Maybe a guide on how to work with the contrib modules after the split would help a lot.
I've been using stumpwm + cpu module for many years with no problems, but since I started using libvirt (virt-manager + KVM/QEMU) the other day, I get about 3 crashes in three hours, plus same thing on another computer.
Both running Arch Linux, one with fairly recent stump 1db36707e67c0e729f6203cfd5712dac6aebb109 and stump-contrib 86b5ebd, the other computer is a fresh install, with current master of both.
I can't get at the error message other than taking a picture. Looks like something where the cpu module divides by zero?
This could be a potentially large project, but also fairly easy for someone new to Common Lisp. We should all the modules and remove the non-functional ones. Here's a check list:
Delete module-name-src.lisp from each module
After upgrading my archlinux
system with:
sudo pacman -Syyu
and re-installing the StumpWM
from AUR
, the stumptray
no longer works. In my ~/.stumpwm.d/init.lisp
file, I have the following lines:
(load-module "stumptray")
(stumptray::stumptray)
If I remove the line:
(stumptray::stumptray)
The entire init.lisp
file would be evaluated successfully, but with no system tray, of course. Then if I manually evaluate the above line, I got the following errors:
The value
NIL
is not of type
(UNSIGNED-BYTE 32)
[Condition of type TYPE-ERROR]
Restarts:
0: [RETRY] Retry SLIME interactive evaluation request.
1: [*ABORT] Return to SLIME's top level.
2: [ABORT] abort thread (#<THREAD "worker" RUNNING {1005FDF353}>)
Backtrace:
0: (XLIB::WRITE-VECTOR-CARD32 #<XLIB:DISPLAY :0 (The X.Org Foundation R12005000)> 24 #(NIL 502 8389191 0 0) 0 5)
1: ((FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK :IN XLIB:SEND-EVENT))
2: ((FLET "WITHOUT-INTERRUPTS-BODY-29" :IN SB-THREAD::CALL-WITH-RECURSIVE-LOCK))
3: (SB-THREAD::CALL-WITH-RECURSIVE-LOCK #<CLOSURE (FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK :IN XLIB:SEND-EVENT) {7F0AA63BDDFB}> #<SB-THREAD:MUTEX "CLX Buffer Lock" owner: #<SB-THREAD:THREAD "worker" RU..
4: (XLIB:SEND-EVENT #<XLIB:WINDOW :0 6FA> :CLIENT-MESSAGE 131072 :WINDOW #<XLIB:WINDOW :0 6FA> :TYPE :MANAGER :FORMAT 32 :DATA #(NIL 502 8389191 0 0) :PROPAGATE-P NIL)
5: (XLIB:SEND-EVENT #<XLIB:WINDOW :0 6FA> :CLIENT-MESSAGE 131072 :WINDOW #<XLIB:WINDOW :0 6FA> :TYPE :MANAGER :FORMAT 32 :DATA #(NIL 502 8389191 0 0) :PROPAGATE-P NIL) [more]
6: (STUMPTRAY::TRAY-INIT #S(STUMPTRAY::TRAY :WIN #<XLIB:WINDOW stumpwm/stumpwm#1=:0 800245> :SOWIN #<XLIB:WINDOW stumpwm/stumpwm#1#:0 800247> :FPWIN #<XLIB:WINDOW stumpwm/stumpwm#1#:0 800246> :VIWIN #<XLIB:WINDOW stumpwm/stumpwm#1#:0 800248> :HIWIN #<XLIB:WINDOW ..
7: (STUMPTRAY:STUMPTRAY)
8: (SB-INT:SIMPLE-EVAL-IN-LEXENV (STUMPTRAY:STUMPTRAY) #<NULL-LEXENV>)
9: (EVAL (STUMPTRAY:STUMPTRAY))
10: ((LAMBDA NIL :IN SWANK:INTERACTIVE-EVAL))
11: (SWANK::CALL-WITH-RETRY-RESTART "Retry SLIME interactive evaluation request." #<CLOSURE (LAMBDA NIL :IN SWANK:INTERACTIVE-EVAL) {10074C788B}>)
12: (SWANK::CALL-WITH-BUFFER-SYNTAX NIL #<CLOSURE (LAMBDA NIL :IN SWANK:INTERACTIVE-EVAL) {10074C786B}>)
13: (SB-INT:SIMPLE-EVAL-IN-LEXENV (SWANK:INTERACTIVE-EVAL "(stumptray::stumptray)") #<NULL-LEXENV>)
14: (EVAL (SWANK:INTERACTIVE-EVAL "(stumptray::stumptray)"))
15: (SWANK:EVAL-FOR-EMACS (SWANK:INTERACTIVE-EVAL "(stumptray::stumptray)") ":stumpwm" 11)
16: ((LAMBDA NIL :IN SWANK::SPAWN-WORKER-THREAD))
17: (SWANK/SBCL::CALL-WITH-BREAK-HOOK #<FUNCTION SWANK:SWANK-DEBUGGER-HOOK> #<FUNCTION (LAMBDA NIL :IN SWANK::SPAWN-WORKER-THREAD) {5363983B}>)
18: ((FLET SWANK/BACKEND:CALL-WITH-DEBUGGER-HOOK :IN "/home/yzhao/quicklisp/local-projects/slime/swank/sbcl.lisp") #<FUNCTION SWANK:SWANK-DEBUGGER-HOOK> #<FUNCTION (LAMBDA NIL :IN SWANK::SPAWN-WORKER-THRE..
19: (SWANK::CALL-WITH-BINDINGS ((*STANDARD-INPUT* . stumpwm/stumpwm#1=#<SWANK/GRAY::SLIME-INPUT-STREAM {10040E81A3}>) (*STANDARD-OUTPUT* . stumpwm/stumpwm#2=#<SWANK/GRAY::SLIME-OUTPUT-STREAM {10040E8233}>) (*TRACE-OUTPUT* . stumpwm/stumpwm#2#) (*ERR..
20: ((LAMBDA NIL :IN SWANK::SPAWN-WORKER-THREAD))
21: ((FLET SB-UNIX::BODY :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE))
22: ((FLET "WITHOUT-INTERRUPTS-BODY-4" :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE))
23: ((FLET SB-THREAD::WITH-MUTEX-THUNK :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE))
24: ((FLET "WITHOUT-INTERRUPTS-BODY-1" :IN SB-THREAD::CALL-WITH-MUTEX))
25: (SB-THREAD::CALL-WITH-MUTEX #<CLOSURE (FLET SB-THREAD::WITH-MUTEX-THUNK :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE) {7F0AA63BED7B}> #<SB-THREAD:MUTEX "thread result lock" owner: #<SB-THREAD:THR..
26: (SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE #<SB-THREAD:THREAD "worker" RUNNING {1005FDF353}> NIL #<CLOSURE (LAMBDA NIL :IN SWANK::SPAWN-WORKER-THREAD) {1005FDF2FB}> NIL)
27: ("foreign function: call_into_lisp")
28: ("foreign function: new_thread_trampoline")
Please help, thanks in advance!
P.S. stumpwm was upgraded from 18.11.61.g4653857-1 to 18.11.81.gf6966ca-1
If you try to copy Tolstoy's fantastic War and Peace into ram, and do it repeatedly, it can crash clipboard-history
. I propose fixing this with some kind of continuation. This way, a user can choose to interactively:
Hi,
I made a small command that I deem useful enough to be part of stumpwm-contrib, but am not sure if that's the opinion of maintainers. (It is pretty small, after all.)
The "alert-me-at" command will give you a remainder of something at some point in time. This is useful if you have a meeting at 3pm, it's 11am and you don't want to forget about it.
Future improvements could be adding "in 10 minutes" options, better handling errors, refactoring the repetitions in the code, etc.
Basically, the function is here: https://gist.github.com/ralt/a1c41a4a56399897a63c
Would stumpwm-contrib be open for a PR including this new module?
Cheers,
Florian
This makes it impossible to continue using StumpWM, because pinentry captures all the keybindings and declares them "not bound".
Reproduction:
Setup the pinentry and pass contribs.
(pass-copy)
and select a password.
When pinentry comes up, hold DEL (ie. backspace).
The message DEL is not bound.
is shown. The window is out of focus but it still captures all keysyms, making it impossible to use StumpWM.
StumpWM 19.11 release breaks swm-gaps on loading of the module indicating that it does not know how to reference the HEAD for manipulation.
very easy to repro:
;; asdf system loads perfectly fine
(ql:quickload "stumptray")
;; stumpwm doesn't know about that module
(load-module "stumptray")
I followed the instructions, and yet there is nothing happening. There is no gaps even if i evaluate something like :
(setf swm-gaps:*outer-gaps-size* 200)
Thanx in advance
When I enable wifi in mode-line by "%I", I got "The value NIL is not of type VECTOR" in the mode line.
Diving into the code, I found the following code cause the bug:
(qual (multiple-value-bind (match? sub)
(cl-ppcre:scan-to-strings "Link Quality=(\\d+)/(\\d+)" iwconfig)
(truncate (float (* (/ (parse-integer (aref sub 0))
(parse-integer (aref sub 1)))
100)))))
The cause is iwconfig
does not report "Link Quality" unless run as root.
I'm using a macbook, thus not sure if this is the case for other hardware, but I guess so. The fix might be:
Option 1. remove the Link Quality
Option 2. run the command iwconfig
in root priviliage
Some modules don't load and yield and error, specifically battery
and battery-portable
(so far i only tried to use those), amixer
does load without any error tho.
I realize this is an Arch Linux problem, i'm trying to find a variable pointing to the file but the debugger gave no info
(find-module "amixer") -> "amixer"
(load-module "amixer") -> #<ASDF/LISP-ACTION:LOAD-OP >
#<ASDF/PLAN:SEQUENTIAL-PLAN {1006967AF3}>
(find-module "battery") -> "battery"
(load-module "battery") -> Failed to find the TRUENAME of /tmp/yaourt-tmp-hao/aur-stumpwm-git/src/stumpwm/package.lisp:
No existe el fichero o el directorioBacktrace for: #<SB-THREAD:THREAD "main thread" RUNNING {10039EE3C3}>
0: (STUMPWM::BACKTRACE-STRING)
1: (ERR "~A" #<SB-INT:SIMPLE-FILE-ERROR "~@<~?: ~2I~_~A~:>" {100644C203}>)
2: (EVAL-LINE "(load-module \"battery\")")
3: (STUMPWM::CALL-INTERACTIVELY "eval" #S(STUMPWM::ARGUMENT-LINE :STRING "eval (load-module \"battery\")" :START 28))
4: (STUMPWM::EVAL-COMMAND "eval (load-module \"battery\")" NIL)
5: (STUMPWM::HANDLE-STUMPWM-COMMANDS #<XLIB:WINDOW :0 D3>)
6: (STUMPWM::HANDLE-EVENT :DISPLAY #<XLIB:DISPLAY :0 (The X.Org Foundation R11803000)> :EVENT-KEY :PROPERTY-NOTIFY :EVENT-CODE 28 :SEND-EVENT-P NIL :SEQUENCE 15214 :WINDOW #<XLIB:WINDOW :0 D3> :EVENT-WINDOW #<XLIB:WINDOW :0 D3> :ATOM :STUMPWM_COMMAND :TIME 462695454 :STATE :NEW-VALUE)
7: ((FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK :IN XLIB:PROCESS-EVENT))
8: ((FLET #:WITHOUT-INTERRUPTS-BODY-387 :IN SB-THREAD::CALL-WITH-RECURSIVE-LOCK))
9: (SB-THREAD::CALL-WITH-RECURSIVE-LOCK #<CLOSURE (FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK :IN XLIB:PROCESS-EVENT) {7FFFF2D1767B}> #<SB-THREAD:MUTEX "CLX Event Lock" owner: #<SB-THREAD:THREAD "main thread" RUNNING {10039EE3C3}>> T NIL)
10: ((FLET SB-IMPL::TIMEOUT-BODY :IN XLIB:PROCESS-EVENT))
11: (XLIB:PROCESS-EVENT #<XLIB:DISPLAY :0 (The X.Org Foundation R11803000)> :HANDLER #<FUNCTION STUMPWM::HANDLE-EVENT> :TIMEOUT 0 :PEEK-P NIL :DISCARD-P NIL :FORCE-OUTPUT-P T)
12: ((FLET #:WITHOUT-INTERRUPTS-BODY-387 :IN SB-THREAD::CALL-WITH-RECURSIVE-LOCK))
13: (SB-THREAD::CALL-WITH-RECURSIVE-LOCK #<CLOSURE (FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK :IN STUMPWM::STUMPWM-INTERNAL-LOOP) {7FFFF2D17AEB}> #<SB-THREAD:MUTEX "CLX Event Lock" owner: #<SB-THREAD:THREAD "main thread" RUNNING {10039EE3C3}>> T NIL)
14: (STUMPWM::STUMPWM-INTERNAL-LOOP)
15: (STUMPWM::STUMPWM-INTERNAL ":0")
16: (STUMPWM ":0")
17: ((LAMBDA NIL :IN "/tmp/yaourt-tmp-hao/aur-stumpwm-git/src/stumpwm/make-image.lisp"))
18: ((FLET #:WITHOUT-INTERRUPTS-BODY-86 :IN SB-EXT:SAVE-LISP-AND-DIE))
19: ((LABELS SB-IMPL::RESTART-LISP :IN SB-EXT:SAVE-LISP-AND-DIE))
I saw a package.lisp
file in amixer
folder but i didnt see that file on battery
or battery-portable
folders, i tried to recreate the file but still got the error.
Hello
Unfortunately i discovered a bug in cl-mount-info
that can make stumpwm (and probably the whole system) unstable.
I have fixed the issue in the git repository of the library (https://notabug.org/cage/cl-mount-info) but the version shipped with quicklisp has the bug and won't be updated until the next release.
The solution is to get the library from the above repository until quicklisp is updated.
Sorry for the inconvenience.
C.
I see at least alert-me and winner-mode that are missing in the README (I probably should've added them when I made the PR to add them), but there are probably others missing?
That is, a list of functions to call instead a function to call.
Add suspend-computer
command to end-session
.
Ok, i know. But i share the same config between my desktop pc and notebook. current-battery-charge
was signalling an error.
For it to behave properly i had to make some minor changes. A trivial fix would be:
--- battery.lisp.orig 2015-01-09 13:44:51.903697887 -0300
+++ battery.lisp 2014-12-30 10:01:10.207440102 -0300
@@ -33,7 +33,7 @@
(let ((split (cl-ppcre:split ":\\s*" line)))
(setf (gethash (string-trim '(#\Space) (car split)) fields)
(string-trim '(#\Space) (cadr split)))))
- ""))))
+ (make-hash-table)))))
(defun current-battery-charge ()
"Calculate remaining battery charge. Don't make calculation more than once in 15 seconds."
@@ -45,11 +45,11 @@
(if (string= "no" (gethash "present" battery-state))
(setf *bat-state* nil)
(let ((charge-state (gethash "charging state" battery-state))
- (remain (parse-integer (gethash "remaining capacity" battery-state)
+ (remain (parse-integer (gethash "remaining capacity" battery-state "0")
:junk-allowed t))
- (rate (/ (or (parse-integer (gethash "present rate" battery-state)
+ (rate (/ (or (parse-integer (gethash "present rate" battery-state "0")
:junk-allowed t) 0) 60))
- (full (parse-integer (gethash "last full capacity" battery-info)
+ (full (parse-integer (gethash "last full capacity" battery-info "100")
:junk-allowed t)))
(setf *bat-remain* (round (/ (* 100 remain) full))
*bat-state* charge-state
Another possible solution would be to test the presence of a battery in fmt-bat-charge
(maybe probing the file "/proc/acpi/battery/BAT0", the one the module uses), and then return an empty string (as to avoid the 'no battery' message on desktops modeline).
It references functions that have have been removed in favor the SBCL specific version
An Additional complication is that the removed functions weren't as strict as the SBCL version about the type of the arguments received. SBCL insists in received a VECTOR of (UNSIGNED-BYTE 8)s.
Also it needs to import STUMPWM:FIND-GROUP
It simply would be nice if toggling did not have other side effects.
The side effect was introduced in 10d5221 as a workaround. Is it still needed?
I am running amixer version 1.0.29
and toggling here works perfectly.
I think battery-portable can be more robust to different kinds of monitoring support via sysfs. Some files are not available on some machines, but there is more than one way to skin a cat. In my case, capacity
holds the percent charge in that file, and should be used.
On my machine:
$ ls /path/to/battery
alarm
capacity
capacity_level
charge_full
charge_full_design
charge_now
current_now
cycle_count
device
hwmon2
manufacturer
model_name
power
present
serial_number
status
subsystem
technology
type
uevent
voltage_min_design
voltage_now
Which fails because there is no power_now
file.
Also, there is this comment in the lisp file:
;; energy_* seems not to be there on
;; some boxes. Strange...
If I'm not mistaken this is due to the relevant sysfs interface being deprecated (WIRELESS_EXT_SYSFS)
Someone should complete/update/fix the port from deep space window manager. If this module doesn't have a shepherd by the next release it will be removed.
$ cat /etc/sbclrc
(load "/usr/lib/quicklisp/setup")
$ cat ~/.config/common-lisp/source-registry.conf.d/10-stumpwm.conf
(:tree "/home/username/tmp/stumpwm-contrib/")
$ sbcl --eval "(ql:quickload :notify)"
<...truncated output...>
debugger invoked on a NAME-CONFLICT in thread
#<THREAD "main thread" RUNNING {1001BB64B3}>:
USE-PACKAGE #<PACKAGE "DBUS/ALL"> causes name-conflicts in
#<PACKAGE "NOTIFY"> between the following symbols:
DBUS/MESSAGES:MESSAGE, STUMPWM:MESSAGE
<...truncated output...>
I wish I knew enough lisp to fix it, probably something really trivial, like moving a variable into different namespace or similar stuff.
Could someone take a look at it please?
I'm not sure what happened, I suspect that I had some symbol collision, but mpd won't load properly on sbcl.
I would like to have an indication that the volume is 0 when it is muted. I have written code to indicate this for the amixer module, would a pull request for this be appreciated?
Aumix is a rather old program and the module doesn't appear to work as advertised. I will remove in preparation from the next release at the end of May.
I just discovered the stumptray module, yet unable to get it to run.
The above error is reported whenever I run the command "stumptray".
Any ideas?
I get stumptray started then execute nm-applet it just flickers endlessly after doing that.
StumpWM issue/pull #577 broke the maildir modeline module. Stump effectively freezes as soon as the modeline loads.
If you remove the timer code (maildir.lisp lines 83-85 plus the earlier definitions), it works fine but of course then the maildir recounts need to be triggered manually. That's fine for me because that's already what I was doing in my own customization of the code. However I'm not sure what would be the best way to properly fix it for everyone, hence just a simple bug report and not a full pull request.
Write a "How to write a new module" tutorial
I would like the README's (currently pulled from the commentary in the contrib files) to be written in markdown (either md or org-mode)
This project doesn't have a COPYING file or any license notification, so I'm really not sure what license things are under... remember that the default copyright status is "all rights reserved", which is surely not what stumpwm contributors want!
When right-aligning some text in the stumpwm mode-line and enabling stumptray the text will not be pushed to the left but instead is covered by the tray. It should be enough to have this in your .stumpwmrc
for example:
(setf *screen-mode-line-format* "foo^>bar")
(stumptray:stumptray)
Here's a screenshot with vlc running:
I'm looking at a way to fix this, but I haven't found a good solution yet. I've looked at changing render-string
in color.lisp
, but it seems strange to check for something in a contrib module in a core file. Any pointers or help would be greatly appreciated.
From @jakecoble on July 14, 2017 14:44
Transient windows should not have gaps applied to them. This often causes them to shrink unusably small.
Copied from original issue: lepisma/swm-gaps#3
Passwd needs documentation and testing to show that it actually works.
The current one is shelling out to use df
, while cl-diskspace (available on quicklisp) is using the proper statvfs
syscall to retrieve the information.
Given how performance sensitive the mode-line is, avoiding the shelling out makes sense.
When I turn on swm-gaps it moves my modeline and adds gaps to it.
I presume this should not be the default behavior and maybe it was only tested using Polybar instead of the Stump modeline?
Here is my .stumpwmrc.
Removing defun add-outer-gaps
function seems to fix the problem but the outergaps feature is lost.
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.