Giter Club home page Giter Club logo

omnios-build's Introduction

Build System for OmniOS

These scripts and tools are used to build new versions of OmniOS.

Please see the build instructions for details on how to use these tools.

omnios-build's People

Contributors

andy-js avatar cstrahan avatar dankimmel avatar danmcd avatar esproul avatar jeffpc avatar jwk404 avatar lotheac avatar mamurphy avatar nshalman avatar postwait avatar prakashsurya avatar richlowe avatar takashiary avatar thurloat 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

Watchers

 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

omnios-build's Issues

gcc doesn't cope with newly built openssl on r151014

% cpp -include openssl/opensslconf.h -xc <<EOF
#ifndef OPENSSL_NO_MD2
#include <openssl/md2.h>
#endif
EOF
#1 "<stdin>"
#1 "<command-line>"
#1 "/opt/gcc-4.8.1/lib/gcc/i386-pc-solaris2.11/4.8.1/include-fixed/openssl/opensslconf.h" 1 3 4
#1 "<command-line>" 2
#1 "<stdin>"
<stdin>:2:25: fatal error: openssl/md2.h: No such file or directory
compilation terminated.

OPENSSL_NO_MD2 is defined in openssl/opensslconf.h, but gcc "fixes" that
header at build time by copying it to its 'include-fixed' directory (shown in
cpp output above).

% diff /opt/gcc-4.8.1/lib/gcc/i386-pc-solaris2.11/4.8.1/include-fixed/openssl/opensslconf.h /usr/include/openssl/opensslconf.h
1,9d0
< /*  DO NOT EDIT THIS FILE.
< 
<     It has been auto-edited by fixincludes from:
< 
<       "/usr/include/openssl/opensslconf.h"
< 
<     This had to be done to correct non-standard usages in the
<     original, manufacturer supplied header file.  */
< 
34a26,28
> #ifndef OPENSSL_NO_MD2
> # define OPENSSL_NO_MD2
> #endif
52a47,49
> #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
> # define OPENSSL_NO_WEAK_SSL_CIPHERS
> #endif
82a80,82
> # if defined(OPENSSL_NO_MD2) && !defined(NO_MD2)
> #  define NO_MD2
> # endif
100a101,103
> # if defined(OPENSSL_NO_WEAK_SSL_CIPHERS) && !defined(NO_WEAK_SSL_CIPHERS)
> #  define NO_WEAK_SSL_CIPHERS
> # endif
208c211
< YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!

---
> #error YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!
227c230
< #if defined( __sun__ )                /* Newer Sparc's */

---
> #if defined( __sun ) || defined ( sun )               /* Newer Sparc's */

So effectively this means that gcc needs to be rebuilt if openssl configuration
changes. Although you could probably patch opensslconf.h instead to make gcc's
fixincludes not fix it.

In any case, this means that a fully updated 151014 box cannot build eg. perl
Net::SSLeay. A republished gcc package is required to fix that (either to
update the include-fixed header or to make it not end up there in the first
place).

Also interesting to note that there are 18 header files in that include-fixed
path on my 151014 box, whereas gcc-4.4.4's path only contains two...

Build fails if DEPENDS_IPS are not installed!

Hey All,

I've been adding some dependencies to a package using DEPENDS_IPS.
However the package fails to build due to missing dependencies!

This should not happen! We have a BUILD_DEPENDS_IPS for this.
For now I have fixed this by inserting a empty verify_depends() in my build script so the step in init() does nothing.

But I still think that requiring to have DEPENDS_IPS to be installed during build is wrong. I can build the package fine without. It will not run however, but that is not an issue as long as the proper dependencies are added to the manifest. (which still happens in the make_package step with verify_depends set to an empty function)

Regards

caiman cannot handle vioblk disks

Install crashes, dropping to shell, format shows the disk.
zpool create <disk_found_by_format> works fine.

Had no success with kayak under qemu -_-

So YAY vioblk is actually working, booo the install is crap.

new install installs mailwrapper, but not sendmail

'nightly' on my newish bloody box failed:

mailwrapper: cannot exec /usr/lib/smtp/sendmail/sendmail: No such file or directory

This is because sendmail isn't installed at all. I get that mailwrapper and the mediated links allow for different MTA implementations (actually in two different ways), but it would be sensible to install an actual MTA by default, not just mailwrapper. Though to be fair, I only noticed this one because this particular box is not under configuration management.

tmux server crash on 151014, bloody

I was attempting to copy the entire scrollback buffer from tmux somewhere else,
and using tmux 'copy mode' for this, but the whole tmux server crashed taking
all my sessions with it.

Repro:

# this is probably not be necessary, but I have no idea how to move around in copy mode without it :)
echo 'set-window-option -g mode-keys vi' > ~/.tmux.conf
# start tmux
tmux

fill scrollback buffer. one character per line wasn't enough to crash it, but 20 is

yes $(python -c 'print "a"*20)

hit ^C after a while. once the scrollback buffer is full of lines, enter copy
mode, move to the beginning of history, drop a marker there, move to the end of
history and copy the selection by the following key combination:

^B [ g space G return

observe 'server lost' message and that all your tmux sessions died.

stack from the core:

core 'core' of 26626:   tmux
 fed43218 memcpy   (8047248, 8047218, 80471f0, 0, 7fffffff, feefe386) + 168
 fed9ce34 sprintf  (feefe386, 8047248, 81c4770, fee4d3c0) + 47
 feeda209 tparm    (810f6b0, 80ca40e, 81c4770, 0, 0, 0) + 1a8
 08099d06 tty_term_ptr2 (8110838, 86, 80ca40e, 81c4770, 8047424, 810eb6c) + 76
 0809a64b tty_putcode_ptr2 (810eb6c, 86, 80ca40e, 81c4770, a051, a050) + 3b
 0809b0bc tty_cmd_setselection (810eb6c, 8047424, 8047448, 0, 80e4758, 804740c) + 8c
 0809b022 tty_write (809b030, 8047424, 0, a04d, fee497e4, 8113bd8) + d2
 0808ce1d screen_write_setselection (8047498, 81ba718, a04d, 0, 1, 0) + 3d
 080a0f30 window_copy_copy_buffer (8113bd8, ffffffff, 81ba718, a04d, fee497e4, 0) + a0
 080a14f7 window_copy_copy_selection (8113bd8, ffffffff, 804751c, 80fca48, 8113bd8, d) + 37
 080a2ecd window_copy_key (8113bd8, 8111318, d, ffffffff, d, 0) + 46d
 0808e2af server_client_handle_key (80fead0, d, 81ae340, d, 8111060, 80475e0) + 1cf
 08098ec9 tty_keys_next (810eb6c, 1000, 8047608, 80b2891, 80cbde1, 80e12c8) + 259
 08099de8 tty_read_callback (8110f48, 810eb6c, 75636f66, 80e12c8) + 18
 080b71cf _bufferevent_run_readcb (8110f48, 1, 4000, 1, 80cc16a, 80f5ca0) + 4f
 080b87da bufferevent_readcb (9, 2, 8110f48, 809ab94, 8113bd8, 0) + 13a
 080ad249 event_base_loop (80f9cd0, 1, 0, 8047748, 80ae039) + 6b9
 080ae059 event_loop (1, 0, 0, 0, 8047748, 1) + 29
 08091074 server_loop (8091d20, 8047748, 0, 8091eb0, 0, 4) + 14
 0809178f server_start (4, 80f6840, 80f4ac0, 4, 80f9cd0, 80f9ce8) + 3af
 0806a7b3 client_connect (80f4ac0, 1, 80e275c, 80e2840, 4e455645, 4f4e5f54) + 1b3
 0806ac11 client_main (0, 8047e2c, 10000, 0, 1, 0) + 31
 080c1ba2 main     (1, 8047e28, 8047e30, feffb0a8, 8047e1c, 8068c52) + 472
 08068cb3 _start   (1, 8047ee4, 0, 8047ee9, 8047eed, 8047f01) + 83

This is on pkg://omnios/terminal/[email protected]:20150402T192031Z, but
happens on bloodytoo (1.9.0-0.151015:20150914T052043Z). I didn't check earlier
releases.

filebench is not installable

I was not able to install packages with filebench:

root@testzone:/root# pkg list filebench
pkg list: No packages matching 'filebench' installed
root@testzone:/root# pkg publisher
PUBLISHER                   TYPE     STATUS P LOCATION
omnios                      origin   online F http://pkg.omniti.com/omnios/r151014/
ms.omniti.com               origin   online F http://pkg.omniti.com/omniti-ms/
perl.omniti.com              origin   online F http://pkg.omniti.com/omniti-perl/

root@testzone:/root# pkg install SUNWfilebench
Creating Plan (Solver setup): \
pkg install: No matching version of SUNWfilebench can be installed:
  Reject:  pkg://omnios/[email protected],5.11-0.133:20150402T175121Z
           pkg://omnios/[email protected],5.11-0.133:20150417T182316Z
           pkg://omnios/[email protected],5.11-0.133:20150727T054626Z
  Reason:  All acceptable versions of 'require' dependency on pkg:/benchmark/filebench are obsolete
root@testzone:/root# pkg install pkg:/benchmark/filebench
No updates necessary for this image.

As a workaround I've built our own filebench in https://github.com/seriv/omnios-build/commits/cs.umd.edu

python curses library broken

It seem that python's curses library is broken.
A simple hello world type app makes the ssh session crash (or if in screen, screen crash).

I used the following simple example:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import curses

screen = curses.initscr()
curses.noecho()
curses.curs_set(0)
screen.keypad(1)

screen.addstr("This is a Sample Curses Script\n\n")
while True:
   event = screen.getch()
   if event == ord("q"): break

curses.endwin() setupterm()

Although just ''curses.initscr()'' is sufficient.
I have not been able to find out why it crashes unfortunatly.

Regards

Add missing proc_priocntl privilege in NTP SMF manifest

NTP in OmniOS is missing proc_priocntl in its method_credential tag in ntp.xml. Thus, at start NTP is complaining that it can't raise its scheduling priority (which is normal), and thus can only run in regular user scheduling. Adding "proc_priocntl" to the "privileges" attribute of "method_credential" in /lib/svc/manifest/network/ntp.xml fixes this (and NTP now correctly jumps to real-time scheduling to give maximum clock sync accuracy).

Set -R/-L in the LDFLAGS variable by default.

Hey,

I think it would be a sane idea to set the -L AND -R flag by default so that libraries in $PREFIX/lib and $PREFIX/lib/$ISAPART64 are picked up by there respective linking stages. (and removing the need for LD_LIBRARY_RUN to be set)

I think this is what most people would expect to happen, build a library in the prefix, make prog or other library that depends (build and/or runtime wise) on the same library that it would sort of... you know just work instead of needing LD_LIBRARY_RUN or manual injection of the -L and -R flags.

`$TMPDIR` should be honoured

Not all of us can put arbitrary build trees in /tmp successfully due to memory constraints. The build should honour $TMPDIR so that we can use /var/tmp or wherever else.

Unfortunately the obvious diff

diff --git a/lib/config.sh b/lib/config.sh
index e1715d8..4caf138 100644
--- a/lib/config.sh
+++ b/lib/config.sh
@@ -43,7 +43,7 @@ PREFIX=/usr
 #    to avoid collision on shared build systems,
 #    TMPDIR includes a username
 # DTMPDIR is used for constructing the DESTDIR path
-TMPDIR=/tmp/build_$USER
+TMPDIR=${TMPDIR:-/tmp}/build_$USER
 DTMPDIR=$TMPDIR

 # Log file for all output

Doesn't work flawlessly, because config.sh is evaluated twice, so we end up with /foo/build_richlowe/build_richlowe.

nss should ship certutil

The nss packages don't include certutil, which is needed eg. for configuring ldapclient certificates.

RUN_DEPENDS_IPS packages with regex special characters in their names can break package build

Ran into this while looking into #50.

pkgmogrify: File /tmp/build_lotheac/network_openssh.deps.mog, line 6: transform (<transform depend fmri=(.+/)?system/library/g++-4-runtime -> set fmri system/library/[email protected]>) has regexp error (multiple repeat) in matching clause

This is caused by my pkgdepend changes; the build script in question
explicitly specifies the system/library/g++-4-runtime dependency, and since it
is thrown into the transform clause as-is, the + signs are misinterpreted.

Not sure what to do with this yet.

Update ruby-19 version to 1.9.3-p448

The latest 1.9.3 release, p448, brings in backported fixes for performance, as well as other improvements in the 1.9.3 series. It would be nice for this to be the default version in OmniOS.

apeiron requested an issue for this :-)

Consistant naming of variables

Hey All,

Variable naming is not very consistant.
ISAPART and ISAPART64 vs LDFLAGS32 and LDFLAGS64. vs CONFIGURE_OPTS_32 and CONFIGURE_OPTS_64.

  1. setting ISAPART32 and setting ISAPART=${ISAPART32} for compatiblity
  2. not sure how to deal with the others.

I guess If you agree this is an issue I could look into doing a PR atleast for 1. But not 100% sure how that works.

ntp wait_for_sync should be more configurable

The wait_for_sync option is implemented using the ntp-wait command which by default retires 1000 times and sleeps for 6 seconds in between. This seems a bit high, it would be good if there was a way to set lower values for these.

make_isa_stub and hardlines

Hey make_isa_stub does not detect hardlinks, maybe it should to save on package size.

Example Manifest that is generated:
http://omnios.blackdot.be/manifest/0/obd%2Farchiver%2Fpar2cmdline%400.4%2C5.11-0.151006%3A20130716T133242Z

As you can see the make install creates some hardlinks for par2. make_isa_stub creates small stubs for them too, everything works as expected however a hardlink to the stub of par2 would work just as well.

I think this would be a nice feature to have, depending on the amount of work it would be to implement. If it is a whole lot of work, it's probably not worth the effort.

No pod2man in runtime/perl-5142?

Timsu on #omnios pointed out that there's no pod2man in /usr/bin where rsnapshot expects it. Why don't we ship pod2man with our runtime/perl-5142 (or, presumably, later versions) package?

shared-mime-info

It would be nice to have shared-mime-info which is required by glib for some of the mime type functions to work.

r151020 openJDK's patch is out of sync

Checking for patches in patches/ (in order to apply them)
Applying patches
Running: gpatch -p1 -t -N -p0
patching file hotspot/make/solaris/makefiles/sparcWorks.make
--- Applied patch hotspot-ccsbins.patch
Running: gpatch -p1 -t -N -p0
patching file jdk/make/common/shared/Defs-solaris.gmk
patching file jdk/make/sun/awt/Makefile
Hunk #1 succeeded at 655 (offset 106 lines).
patching file jdk/make/sun/awt/mawt.gmk
patching file jdk/make/sun/font/Makefile
Hunk #1 succeeded at 205 with fuzz 1 (offset 16 lines).
patching file jdk/make/sun/jawt/Makefile
Hunk #1 succeeded at 123 (offset 5 lines).
patching file jdk/src/share/native/sun/java2d/cmm/lcms/cmsopt.c
Hunk #1 FAILED at 1535.
1 out of 1 hunk FAILED -- saving rejects to file jdk/src/share/native/sun/java2d/cmm/lcms/cmsopt.c.rej
patching file jdk/src/share/native/sun/java2d/cmm/lcms/cmstypes.c
Hunk #1 FAILED at 961.
Hunk #2 FAILED at 2946.
Hunk #3 FAILED at 3665.
Hunk #4 FAILED at 3752.
Hunk #5 FAILED at 4027.
Hunk #6 FAILED at 4519.
6 out of 6 hunks FAILED -- saving rejects to file jdk/src/share/native/sun/java2d/cmm/lcms/cmstypes.c.rej
patching file jdk/src/solaris/native/sun/awt/jawt.c
patching file jdk/src/share/native/sun/java2d/cmm/lcms/cmsxform.c
Hunk #1 FAILED at 204.
Hunk #2 FAILED at 272.
Hunk #3 FAILED at 296.
Hunk #4 FAILED at 521.
Hunk #5 FAILED at 558.
5 out of 5 hunks FAILED -- saving rejects to file jdk/src/share/native/sun/java2d/cmm/lcms/cmsxform.c.rej
--- Patch jdk-fixes.patch failed
===== Build aborted =====

OmniOS ships a junk libpython2.6_db

You build libpython2.6_db like this (from Python26-20-py_db.patch)

SHLIB_FLAGS = -shared -fpic -M $(srcdir)/py_db/mapfile-vers

libpython2.6_db.so.1.0: $(srcdir)/py_db/libpython26_db.c
    $(CC) -o $@ $(CFLAGS) $(CPPFLAGS) $(SHLIB_FLAGS) $<

This pass -M to $(CC) expecting to specify a mapfile, as you would with Studio. Unfortunately, -M means something else to GCC. The output of dependencies for make (in a manner similar to our state keeping).

This means that the python debugger support shipped by OmniOS is trash and pstack and mdb can't show python frames.

file /usr/lib/libpython2.6_db.so.1.0 will show what I mean, as will:

curl omnios.omniti.com/omnios/release/file/0/15fb42db15bee294189caad3cdf9c45ef31a803d | gzip -dc Which fetches that path from the latest release. It should be an ELF shared object. Clearly it isn't.

You can fix it by

  $(LIBRARY_OBJS) $(MODOBJS) Modules/python.o: $(PYTHON_HEADERS)

-+SHLIB_FLAGS = -shared -fpic -M $(srcdir)/py_db/mapfile-vers
++SHLIB_FLAGS = -shared -fpic -Wl,-M,$(srcdir)/py_db/mapfile-vers
 +
 +libpython2.6_db.so.1.0:   $(srcdir)/py_db/libpython26_db.c
 +  $(CC) -o $@ $(CFLAGS) $(CPPFLAGS) $(SHLIB_FLAGS) $<

zsh signals (trap) broken when built with gcc51

bash# zsh -l
/etc/zprofile:trap:27: undefined signal: 3
/etc/zprofile:trap:67: undefined signal: 3
zsh# trap 'echo FOO' INT
trap: undefined signal: INT

This is due to the fact that gcc -E output has changed (more linemarkers in
5.1). 4.8.1:

% echo 'sigint=SIGINT' | /opt/gcc-4.8.1/bin/gcc -include signal.h -E -| tail -5 
#165 "/usr/include/signal.h" 3 4
extern int sigwait(sigset_t *);
#1 "<command-line>" 2
#1 "<stdin>"
sigint=2

vs. gcc 5.1.0:

% echo 'sigint=SIGINT' | /opt/gcc-5.1.0/bin/gcc -include signal.h -E -| tail -5

#1 "<stdin>"
sigint=
#1 "<stdin>" 3 4
      2

and zsh does some awk magic with cpp output. This has been fixed in zsh-5.0.8
(34287 in zsh ChangeLog), so you should probably update all gcc51-built
releases to at least that version or newer, or apply zsh.git commits
c7aa6443907ddd97b6b1e8729ce9c897de0d244c and
9f9a16f43c5c66d3a764ef2abaacca6a3d91f89c.

Two packages need things outside omnios-build to build

iso-codes requires Python3, which is not in omnios-build.

openjdk7 requires ant and freetype2, which are not in omnios-build.

OmniTI has used ms.omniti.com to work around these problems. Ideally one shouldn't have to work around them.

onu'd illumos-gate cannot build another illumos-gate

I've onu'd a build of illumos-gate that was built on OmniOS bloody, but apparently due to some perl packaging quirks that onu'd build fails to build another illumos-gate. illumos-omnios works fine.

The error is:

/ws/illumos-gate/usr/src/cmd/auditrecord
/usr/bin/rm -f mkmsg;
/usr/bin/sed -e "s@TEXT_DOMAIN@\"SUNW_OST_OSCMD\"@" mkmsg.pl > mkmsg;
/usr/bin/chmod +x mkmsg
export PERL5LIB; PERL5LIB=../perl/contrib; \
./mkmsg SUNW_OST_OSCMD auditrecord.po; \
/usr/bin/xgettext -d auditrecord -j auditrecord
Can't locate Sun/Solaris/Utils.pm in @INC (@INC contains: ../perl/contrib /usr/perl5/site_perl/5.16.1/i86pc-solaris-thread-multi-64 /usr/perl5/site_perl/5.16.1 /usr/perl5/vendor_perl/5.16.1/i86pc-solaris-thread-multi-64 /usr/perl5/vendor_perl/5.16.1 /usr/perl5/5.16.1/lib/i86pc-solaris-thread-multi-64 /usr/perl5/5.16.1/lib .) at ./mkmsg line 42.
BEGIN failed--compilation aborted at ./mkmsg line 42.
*** Error code 2
install -s -d -m 755 /ws/illumos-gate/proto/root_i386/catalog/SUNW_OST_OSCMD
dmake: Warning: Target `_msg' not remade because of errors
Current working directory /ws/illumos-gate/usr/src/cmd/auditrecord
*** Error code 1
dmake: Warning: Command failed for target `auditrecord'

OpenSSH issues in r151014

I briefly looked at OpenSSH as it is packaged for OmniOS while working on a
related problem, intending to evaluate whether we could replace SunSSH with it
in our environment. I ran into a few issues (some of which you may be aware of,
but I'll document them here nonetheless). These apply to r151014 (and possibly
earlier releases).

  • network/openssh and network/openssh-server conflict with the SunSSH packages,
    obviously. However, entire has require dependencies on the SunSSH packages:
    network/ssh/ssh-key, network/ssh and service/network/ssh [0]. Perhaps this
    could be solved with a mediation like sendmail was? (I uninstalled entire as
    a workaround for testing)
  • network/openssh-server does not depend on network/openssh; however, using
    SunSSH ssh-keygen the start method for the openssh service fails, because it
    attempts to generate ECDSA host keys, which SunSSH ssh-keygen cannot do
    ("unknown key type ecdsa")
  • openssh-server is by default configured to use DSA, RSA, ECDSA and Ed25519
    host keys. Ed25519 keys are not generated by the shipped startup script, and
    a warning is logged.
  • SunSSH cannot connect to an OmniOS box which is running OpenSSH :) (perhaps
    the default openssh sshd_config needs to be tuned wrt. KexAlgorithms)

I might be able to work on a fix for some of these in the near future, just
thought I'd document them for now.

[0]: as is documented at http://omnios.omniti.com/ticket.php/63, but the fact
that openssh was updated for 151014 suggests that it might be intended for use.
Maybe I'm missing something.

add more targets for gobjcopy

OI has oi-userland/components/developer/binutils/patches/bfd_config.patch which adds more targets for gobjcopy. Without it it's impossible to build illumos loader project components.

Rebuild ruby-19 with gcc 4.7.2

Capturing an issue based on #omnios IRC discussion.

TL;DR: the ruby config hardcodes location to gcc, meaning gems with native extensions will attempt to use /opt/gcc-4.6.3/bin/gcc to compile.

23:09 <apeiron> so we upgraded our compiler for r151006 to 4.7
23:09 <apeiron> it seems that perhaps the ruby that you're installing wasn't rebuilt for that
23:09 <jtimberman> omniti/runtime/ruby-19 (ms.omniti.com)            1.9.3.194-0.151002         i--
23:10 <jtimberman> indeed.
23:10 <apeiron> looks like the latest is 1.9.3.194,5.11-0.151002:20120501T202116Z
23:11 <apeiron> So it could use a respin for the new compiler

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.