Code Monkey home page Code Monkey logo

bbcp's Introduction

BlackBox Component Builder cross-platform

Supported operating systems

List of supported operating systems:

  • Windows
  • GNU/Linux (amd64, i386)
  • OpenBSD (i386)
  • FreeBSD (i386)

Tested on:

  • Windows XP, 7, 10, 11
  • GNU/Linux:
    • Ubuntu 16.04/18.04/20.04 LTS
    • Debian 9.3, 9.4, 10.4 (Xfce/Mate/GNOME/Cinnamon)
    • Linux Mint 19.1/19.2/19.3/20 (Cinnamon)
    • Fedora 31
    • Red Hat Enterprise Linux Server 6.3
    • CentOS 8
    • Arch Linux 4.9.6
    • Manjaro Linux 18.0.4, 21.2.0
    • Alt Education 9.1
  • OpenBSD 7.2 (i386)
  • FreeBSD 12.1, 13.0, 13.2 (i386)

Packages

Packages available here

Build

Install dependencies

Ubuntu 20/22 LTS, Mint 20/22 (amd64)

sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libgtk2.0-0:i386 gtk2-engines:i386 gtk2-engines-murrine:i386 libcanberra-gtk-module:i386

Debian 9/10 (amd64)

sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libgtk2.0-0:i386 gtk2-engines:i386 gtk2-engines-murrine:i386 libcanberra-gtk-module:i386 gtk2-engines-pixbuf:i386 libatk-adaptor:i386 libgail-common:i386 gnome-themes-standard:i386

Arch-based systems (amd64)

sudo pacman -S multilib/lib32-gtk2
sudo pacman -Rc lib32-librsvg

Fedora (amd64)

sudo dnf install gtk2.i686 gtk2-devel.i686

Alt Education 9.1 (amd64)

apt-get install i586-libgtk+2-devel.32bit

OpenBSD (i386)

Use 'wxallowed' flag in mount options for the partition to build or start BlackBox from.

Build

Build GNU/Linux version

./build-linux

Build OpenBSD version

./build-openbsd

Build FreeBSD version

./build-freebsd

Build Windows version

./build-windows

On Windows, these commands can be run from MSYS2

There is also a build-windows.bat script that can be used to build the Windows version from Windows or Wine

Install

./export <outputDirectory>

Run

BlackBox Component Builder (GUI)

On Windows

Run tiled version:

BlackBox.exe

Run MDI version:

BlackBoxMDI.exe

On other operating systems

./run-BlackBox

Symbolic link to this script can be created to run from any directory:

ln -s `readlink -f run-BlackBox` ~/bin/blackbox

And then BlackBox Component Builder (GUI) can be run with blackbox command from anywhere. The current directory will be used as a BlackBox secondary directory.

BlackBox Component Builder (command line interpreter)

On Windows

BlackBoxInterp.exe

On other operating systems

./run-BlackBoxInterp

Symbolic link to this script can be created to run from any directory:

ln -s `readlink -f run-BlackBox` ~/bin/blackbox-cli

And then BlackBox Component Builder (command line interpreter) can be run with blackbox-cli command from anywhere. The current directory will be used as a BlackBox secondary directory.

Authors

  • Oberon microsystems AG
  • BlackBox Framework Center
  • OberonCore
  • Ivan Denisov
  • Igor Dehtyarenko
  • Anton Dmitriev
  • Alexander Shiryaev
  • Ketmar Dark

bbcp's People

Contributors

adimetrius avatar aixp avatar hodzanassredin avatar iadenisov avatar temirgaleevee 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bbcp's Issues

/PAR and Dialog.commandLinePars

Is there a recommended way to get a command-line argument into BlackBox on Linux? On Windows, we can use BlackBox.exe /PAR blah, but this isn't implemented on Linux as far as I can see. Is using environment variables the suggested replacement?

Some problems with selection

Steps to reproduce:

  1. Open some file which is big enough to show scroll bars.
  2. Start selection of text and move cursor below bottom of the window to select and scroll at the same time.

Result: selected text during scrolling is not correct

BB version: 2.0-a1
Build number: 116
OS: Windows 10

Slow heap memory allocation on Linux

We've noticed that on Linux bbcb can be slow to build the complex graph/tree structures used internally in MultiBUGS (https://github.com/MultiBUGS/MultiBUGS). We think that the problem is that these data structures request small amounts of additional heap memory many thousands or millions of times - requesting small chunks of heap memory seems to be very slow on Linux bbcb.

We have managed to isolate the problem in the attached module (zipped Allocate.odc attached - also code below): it simply builds a long linked list.

PrivAllocate.Do builds a list with 1 million elements. Note the first run is very slow (~12000ms on our machine), and then subsequent runs are much faster (~100ms)

PrivAllocate.Do1 builds a list with 1 million elements, then one with 0.5 million elements, then one with 2 million elements. Note that the 1 million element list is built slowly (~12000ms); the 0.5 million element list is built very fast (~50ms); and the 2 million element list is build very slowly (44000ms - more than twice as slow as 1 million). We infer that the second run is fast because the memory for the first list is being reused.

Finally if you run PrivAllocate.NewReals first (~20ms), then run PrivAllocate.Do (~80ms) then it is fast at first run. Thus allocating a big array first, and then reusing that memory is much, much faster.

To us, this suggests that maybe bigger batching of memory allocation in the Kernel would be much faster? Might that be feasible to do?

MODULE PrivAllocate;

	IMPORT Services, StdLog;

	TYPE
		List = POINTER TO RECORD 
						x: INTEGER;
						next: List
					END;
	
	VAR
			list: List; 
			reals: POINTER TO ARRAY OF REAL;

	PROCEDURE Do*;
		VAR
			i: INTEGER;
			time: LONGINT;
			element: List;
	BEGIN
		i := 0;
		list := NIL; reals := NIL;
		time := Services.Ticks();
		WHILE i < 1000000 DO
			NEW(element);
			element.x := i;
			element.next := list;
			list := element;
			INC(i)
		END;
		StdLog.String("time taken: "); StdLog.Int(Services.Ticks() - time); 
		StdLog.String(" ms"); StdLog.Ln
	END Do;

	PROCEDURE Do1*;
		VAR
			i: INTEGER;
			time: LONGINT;
			element: List;
	BEGIN
		i := 0;
		list := NIL;
		time := Services.Ticks();
		WHILE i < 1000000 DO
			NEW(element);
			element.x := i;
			element.next := list;
			list := element;
			INC(i)
		END;
		StdLog.String("time taken: "); StdLog.Int(Services.Ticks() - time); 
		StdLog.String(" ms"); StdLog.Ln;
		
		i := 0;
		list := NIL;
		time := Services.Ticks();
		WHILE i < 500000 DO
			NEW(element);
			element.x := i;
			element.next := list;
			list := element;
			INC(i)
		END;
		StdLog.String("time taken: "); StdLog.Int(Services.Ticks() - time); 
		StdLog.String(" ms"); StdLog.Ln;
		
		i := 0;
		list := NIL;
		time := Services.Ticks();
		WHILE i < 2000000 DO
			NEW(element);
			element.x := i;
			element.next := list;
			list := element;
			INC(i)
		END;
		StdLog.String("time taken: "); StdLog.Int(Services.Ticks() - time); 
		StdLog.String(" ms"); StdLog.Ln
	END Do1;
	
	PROCEDURE NewReals*;
			VAR
			time: LONGINT;
	BEGIN
		time := Services.Ticks();
		NEW(reals, 2000000);
		StdLog.String("time taken: "); StdLog.Int(Services.Ticks() - time); 
		StdLog.String(" ms"); StdLog.Ln
	END NewReals;

END PrivAllocate.

Allocate.odc.zip

2.0 Regression: broken images in help texts

Several images are broken in help texts in BlackBox 2.0 (BlackBoxMDI-2.0-a1.098.zip on Windows 11), which has no problem in v1.8.

e.g.:

  1. Click "Help" > "Contents" to open "Help Contents" window
  2. Click "1 User Interaction"
  3. Scroll down

Following is a screenshot, with v1.8 on the left, v2.0 on the right:

image

Combo Box

Combo Boxes do not seem to function on Linux. We use them in a few dialog boxes in MultiBUGS. Do you have any idea whether it might be straightforward to fix this, or will it be very tricky?

2.0 Regression: wrong cursor position after clicking right half of characters

Both in BlackBox-2.0-a1.098 and BlackBoxMDI-2.0-a1.098, if right half of a character is clicked, the cursor with be positioned left side of that character, which I think should be right side.

In bbcb-1.8-b1.166, it works properly.

Steps to reproduce:

  1. Open BlackBox-2.0-a1.098 under Windows 11
  2. Type aWa in Log window
  3. Click right half of W

GTK libraries not found for FreeBSD 13.2 build

When built on the latest FreeBSD [0] with GUI support, some gtk
libraries seem not to be linked correctly [1].

The library object files reported missing – libgtk-x11-2.0.so and
libglib-2.0.so – are present on the filesystem under
/usr/local/lib [2].

Has anyone tried troubleshooting this? (build dump [3])

[0] system details
$ uname -mrs
FreeBSD 13.2-RELEASE amd64

[1] exec error (after ./switch-target FreeBSD GUI && ./build)
$ ./run-BlackBox

****
* BlackBox
* HostGui: can not load libgtk-x11-2.0.so
****
 
****
* Error 01
* libglib-2.0.so: code file not found
****

[2] libraries available
$ find /usr/local/lib ( -type f -o -type l ) -a \
( -name 'libglib-2.0.so' -o -name 'libgtk-x11-2.0.so' )

/usr/local/lib/libglib-2.0.so
/usr/local/lib/libgtk-x11-2.0.so

[3] build log
https://zerobin.net/?523a20b374dcd98d#Jm44lm9+r2qi/4yjSKgHlHIR8LSIw9HIAxdcLm6s4V0=

Error during attempt to close bbcb2

Steps to reproduce:

  1. start bbcb2
  2. click File->New
  3. enter some text
  4. try to close bbcb2 window

Expected result: bbcb2 closed
Result: bbcb2 shows NIL dereference error and hangs

Environment:
bbcb2 2.0-a1 build 150
OS ubuntu 22.04

Зараженные бинарные дистрибутивы на Обертоне

На https://blackbox.obertone.ru/download все бинарные дистрибутивы BlackBox (и Setup- и Zip-версия) определяются Avast как зараженные вирусом Win32:MalOb-IP [Cryp]

PS: не нашел больше средства связаться с разработчиками данной ветки BB - на форуме OberonCore регистрация закрыта, а на самом Обертоне нет форума вообще. Откройте jabber-конференцию или IRC-канал, что ли...

Segmentation fault on run after build (first time)

Hello, first timer here. I just cloned the repo and do as instructed to build the whole system. I'm on 64-bit Manjaro and I believe I have installed its Ubuntu counterpart of the library requirements:

$ pacman -Qs 'lib32-gtk2|lib32-gtk-engines|lib32-gtk-engine-murrine|lib32-libcanberra|lib32-gnome-themes-extra'
local/lib32-gnome-themes-extra 3.28-1 (gnome)
    Extra Themes for GNOME Applications (32-bit)
local/lib32-gtk-engine-murrine 0.98.2-2
    GTK2 engine to make your desktop look like the art glass works done by Venicians glass blowers (32 bit)
local/lib32-gtk-engines 2.21.0-3
    Theme engines for GTK+ 2 (32 bit)
local/lib32-gtk2 2.24.32-1
    GObject-based multi-platform GUI toolkit (legacy) (32-bit)
local/lib32-libcanberra 0.30+2+gc0620e4-1
    A small and lightweight implementation of the XDG Sound Theme Specification (32-bit)

After ./build, executing blackbox results in immediate segementation fault. Checking run-BlackBox, it seems to have debug option so I try to uncomment it and here's what I got that makes it crash:

      5985:	/usr/lib32/gtk-2.0/2.10.0/engines/libadwaita.so: error: symbol lookup error: undefined symbol: g_module_unload (fatal)
      5985:	symbol=theme_init;  lookup in file=/usr/lib32/gtk-2.0/2.10.0/engines/libadwaita.so [0]
      5985:	binding file /usr/lib32/gtk-2.0/2.10.0/engines/libadwaita.so [0] to /usr/lib32/gtk-2.0/2.10.0/engines/libadwaita.so [0]: normal symbol `theme_init'
      5985:	symbol=theme_exit;  lookup in file=/usr/lib32/gtk-2.0/2.10.0/engines/libadwaita.so [0]
      5985:	binding file /usr/lib32/gtk-2.0/2.10.0/engines/libadwaita.so [0] to /usr/lib32/gtk-2.0/2.10.0/engines/libadwaita.so [0]: normal symbol `theme_exit'
      5985:	symbol=theme_create_rc_style;  lookup in file=/usr/lib32/gtk-2.0/2.10.0/engines/libadwaita.so [0]
      5985:	binding file /usr/lib32/gtk-2.0/2.10.0/engines/libadwaita.so [0] to /usr/lib32/gtk-2.0/2.10.0/engines/libadwaita.so [0]: normal symbol `theme_create_rc_style'

I did notice some converter failed during build if that matters:

compiling
ok
compiling Lin/Mod Dl.txt
converter failed
compiling "LinDl"
  new symbol file   0   0
compiling
ok
compiling Lin/Mod Libc.txt
converter failed
compiling "LinLibc"
  new symbol file   0   4
compiling
ok
compiling Lin/Mod LibW.txt
converter failed
compiling "LinLibW"
  new symbol file   0   0
compiling
ok
compiling Lin/Mod Iconv.txt
converter failed
compiling "LinIconv"
  new symbol file   0   0
compiling
ok
compiling Lin/Mod Termios.txt
converter failed
compiling "LinTermios"
  new symbol file   0   0
compiling
ok
compiling Lin/Mod Ioctl.txt
converter failed
compiling "LinIoctl"
  new symbol file   0   0
compiling
ok
compiling Lin/Mod Net.txt
converter failed
compiling "LinNet"
  new symbol file   0   0
compiling
ok
compiling Lin/Mod Rt.txt
converter failed

Sub Windows title

open a sub window by pressing F2, but the new sub window title without"<>" wrapper, if continue press F2, the new sub window will have "<>" wrapper, that is: open sub window on sub window will work well, but open sub window on normal window will not;

Dimension of SName in (Dev2)LnkBase

Would it be possible to increase the dimension of SName in (Dev2)LnkBase to, say, ARRAY 64 OF SHORTCHAR rather than ARRAY 40 OF SHORTCHAR? In MultiBUGS (https://github.com/MultiBUGS/MultiBUGS) we have some dynamically-created modules that have timestamped module names, which can be quite long, so we sometimes exceed ceiling with the current dimension.

Thanks for the great work with cross-platform BlackBox - it is really helpful for our software and research.

FYI - not an issue: works nicely in Q4OS/XP4Q

the build process worked flawlessly on q4os, which is a Debian 9.5 with Trinity Desktop and the XP look and feel from XPQ4 installed.

BTW: Is there a easy/quick way to switch from the default multiple windows (single document interface) to a multiple document interface?

Does IDE Tools BlackBox generate an executable program or not?

Hello! I had this doubt or lack of knowledge. But I didn't find an option anywhere to compile the program and generate an .exe for Windows.
The question is whether it allows you to create executable files to be used on Windows? like hello.exe or MyProg.exe

Can not insert ° character

"string too long" Trap occured in LinClipboard.AtoD

And can not save Trap to file. BlackBox hangs on "Save" button press in "Save Copy As..." dialog.

Incorrect data read in by Files64 on Linux

We've spotted a problem with Files64. It seems to read the wrong data in sometimes, possibly due to a problem with the way data are buffered.

We've isolated the problem in the attached simple 2 modules (text versions below; odc versions attached as a zip). The module PrivFile64 uses Files64 and Stores64 whereas PrivFile32 uses Files and Stores. Each contain two procedures Do and DoBroken.

Do writes out integers 0 to 2047, then reads back the first 513 of these values, so should print 0 to 512.

DoBroken writes out integers 0 to 2048 (not 2047), then reads back the first 513 of these values, so should print 0 to 512.

On Windows, using BlackBox 1.7.1, both procedures in both 64 and standard version do what is expected.

On Linux, the non-64 versions work as expected. PrivFile64.Do works as expected. However, PrivFile64.DoBroken prints out 0 to 511 then 1024, rather than 0 to 512. It seems like it is reading the wrong value in. This occurs on both CentOS Linux 7 (Core) and Ubuntu 16.04.6 LTS.

MODULE PrivFile64;

	IMPORT Files64, Stores64, StdLog;
	
	VAR
		file: Files64.File;
		wr: Stores64.Writer;
		
		
		PROCEDURE Do*;
			VAR
				loc: Files64.Locator;
				wr: Stores64.Writer;
				rd: Stores64.Reader;
				i, j: INTEGER;
		BEGIN
			loc := Files64.dir.This("");
			file := Files64.dir.New(loc, Files64.dontAsk);
			wr.ConnectTo(file);
			wr.SetPos(0);
			i := 0;
			WHILE i < (4 * 512)  DO
				wr.WriteInt(i); INC(i)
			END;
			rd.ConnectTo(file);
			rd.SetPos(0);
			i := 0;
			WHILE i < (512 + 1) DO
				rd.ReadInt(j);
				StdLog.Int(j); StdLog.Ln;
				INC(i)
			END;
		END Do;
		
		PROCEDURE DoBroken*;
			VAR
				loc: Files64.Locator;
				wr: Stores64.Writer;
				rd: Stores64.Reader;
				i, j: INTEGER;
		BEGIN
			loc := Files64.dir.This("");
			file := Files64.dir.New(loc, Files64.dontAsk);
			wr.ConnectTo(file);
			wr.SetPos(0);
			i := 0;
			WHILE i < (4 * 512) + 1  DO
				wr.WriteInt(i); INC(i)
			END;
			rd.ConnectTo(file);
			rd.SetPos(0);
			i := 0;
			WHILE i < (512 + 1) DO
				rd.ReadInt(j);
				StdLog.Int(j); StdLog.Ln;
				INC(i)
			END;
		END DoBroken;
		
END PrivFile64.
MODULE PrivFile32;

	IMPORT Files, Stores, StdLog;
	
	VAR
		file: Files.File;
		wr: Stores.Writer;
		
		
		PROCEDURE Do*;
			VAR
				loc: Files.Locator;
				wr: Stores.Writer;
				rd: Stores.Reader;
				i, j: INTEGER;
		BEGIN
			loc := Files.dir.This("");
			file := Files.dir.New(loc, Files.dontAsk);
			wr.ConnectTo(file);
			wr.SetPos(0);
			i := 0;
			WHILE i < (4 * 512)  DO
				wr.WriteInt(i); INC(i)
			END;
			rd.ConnectTo(file);
			rd.SetPos(0);
			i := 0;
			WHILE i < (512 + 1) DO
				rd.ReadInt(j);
				StdLog.Int(j); StdLog.Ln;
				INC(i)
			END;
		END Do;
		
		PROCEDURE DoBroken*;
			VAR
				loc: Files.Locator;
				wr: Stores.Writer;
				rd: Stores.Reader;
				i, j: INTEGER;
		BEGIN
			loc := Files.dir.This("");
			file := Files.dir.New(loc, Files.dontAsk);
			wr.ConnectTo(file);
			wr.SetPos(0);
			i := 0;
			WHILE i < (4 * 512) + 1  DO
				wr.WriteInt(i); INC(i)
			END;
			rd.ConnectTo(file);
			rd.SetPos(0);
			i := 0;
			WHILE i < (512 + 1) DO
				rd.ReadInt(j);
				StdLog.Int(j); StdLog.Ln;
				INC(i)
			END;
		END DoBroken;
		
END PrivFile32.

HostFileProblem.zip

Possible SetPos problem with Files64

Thanks to @aixp for fixing Issue #8. I agree the case in Issue #8 is fixed is by 29e9b58, but unfortunately there seem to be other similar problems. Here is another example that I think is broken on Linux under Files64.

This example writes out 0 to 4095, then reads in starting from a few points.

PrivFiles64.Do on Windows, and PrivFiles.Do on all platforms prints 3072 to 3583
PriveFiles64.Do on Linux prints 2560 to 3071

MODULE PrivFile64;

	IMPORT Files64, Stores64, StdLog;
	
	VAR
		file: Files64.File;
		wr: Stores64.Writer;
		
		
		PROCEDURE Do*;
			VAR
				loc: Files64.Locator;
				wr: Stores64.Writer;
				rd: Stores64.Reader;
				i, j: INTEGER;
		BEGIN
			loc := Files64.dir.This("");
			file := Files64.dir.New(loc, Files64.dontAsk);
			wr.ConnectTo(file);
			wr.SetPos(0);
			i := 0;
			WHILE i < 8*512 DO
				wr.WriteInt(i); INC(i)
			END;
			rd.ConnectTo(file);
			rd.SetPos(0);
			i := 0;
			WHILE i < 2 * 512 DO
				rd.ReadInt(j);
				(*StdLog.Int(j); StdLog.Ln;*)
				INC(i)
			END;
			rd.SetPos(2 * 512 * SIZE(INTEGER));
			i := 0;
			WHILE i < 512 DO
				rd.ReadInt(j);
				(*StdLog.Int(j); StdLog.Ln;*)
				INC(i)
			END;
			
			rd.SetPos(4 * 512 * SIZE(INTEGER));
			i := 0;
			WHILE i < 512 DO
				rd.ReadInt(j);
				(*StdLog.Int(j); StdLog.Ln;*)
				INC(i)
			END;
			
			rd.SetPos(6 * 512 * SIZE(INTEGER));
			i := 0;
			WHILE i < 512 DO
				rd.ReadInt(j);
				StdLog.Int(j); StdLog.Ln;
				INC(i)
			END
		END Do;
		
END PrivFile64.
MODULE PrivFile;

	IMPORT Files, Stores, StdLog;
	
	VAR
		file: Files.File;
		wr: Stores.Writer;
		
		
		PROCEDURE Do*;
			VAR
				loc: Files.Locator;
				wr: Stores.Writer;
				rd: Stores.Reader;
				i, j: INTEGER;
		BEGIN
			loc := Files.dir.This("");
			file := Files.dir.New(loc, Files.dontAsk);
			wr.ConnectTo(file);
			wr.SetPos(0);
			i := 0;
			WHILE i < 8*512 DO
				wr.WriteInt(i); INC(i)
			END;
			rd.ConnectTo(file);
			rd.SetPos(0);
			i := 0;
			WHILE i < 2 * 512 DO
				rd.ReadInt(j);
				(*StdLog.Int(j); StdLog.Ln;*)
				INC(i)
			END;
			rd.SetPos(2 * 512 * SIZE(INTEGER));
			i := 0;
			WHILE i < 512 DO
				rd.ReadInt(j);
				(*StdLog.Int(j); StdLog.Ln;*)
				INC(i)
			END;
			
			rd.SetPos(4 * 512 * SIZE(INTEGER));
			i := 0;
			WHILE i < 512 DO
				rd.ReadInt(j);
				(*StdLog.Int(j); StdLog.Ln;*)
				INC(i)
			END;
			
			rd.SetPos(6 * 512 * SIZE(INTEGER));
			i := 0;
			WHILE i < 512 DO
				rd.ReadInt(j);
				StdLog.Int(j); StdLog.Ln;
				INC(i)
			END
		END Do;
		
END PrivFile.

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.