GithubHelp home page GithubHelp logo

deater / linux_logo Goto Github PK

View Code? Open in Web Editor NEW
132.0 14.0 37.0 657 KB

Prints an ASCII logo and some system info

Home Page: http://www.deater.net/weave/vmwprod/linux_logo

License: GNU General Public License v2.0

Perl 0.26% C 86.88% Shell 8.11% Makefile 4.76%

linux_logo's Introduction

                                                                 #####         
                                                                #######        
                   @                                            ##O#O##        
  ######          @@#                                           #VVVVV#
    ##             #                                          ##  VVV  ##      
    ##         @@@   ### ####   ###    ###  ##### ######     #          ##     
    ##        @  @#   ###    ##  ##     ##    ###  ##       #            ##    
    ##       @   @#   ##     ##  ##     ##      ###         #            ###   
    ##          @@#   ##     ##  ##     ##      ###        QQ#           ##Q   
    ##       # @@#    ##     ##  ##     ##     ## ##     QQQQQQ#       #QQQQQQ 
    ##      ## @@# #  ##     ##  ###   ###    ##   ##    QQQQQQQ#     #QQQQQQQ 
  ############  ###  ####   ####   #### ### ##### ######   QQQQQ#######QQQQQ   

   Linux Version 5.5.0-1-amd64, Compiled #1 SMP Debian 5.5.13-2 (2020-03-30)
        Four 2.7GHz Intel i5 Processors, 3.8GB RAM, 12800 Bogomips Total
                                   orvavista
/*--------------------------------------------------------------------------*\
    LINUX_LOGO 6.01 -- Shows a Logo With some System Info - 22 July 2022
    by Vince Weaver ( <[email protected]> , http://www.deater.net/weave )
    SUPPORTS Linux (most architectures) and some non-Linux OSes
\*--------------------------------------------------------------------------*/

HISTORY: 
  
   Back in the summer of 1997 there was a recurring topic on the linux-kernel
   list about having a "boot-up" penguin on all architectures. There 
   were many arguments back and forth, but eventually the primary consensus 
   was that this would be better done in user-space.  [Eventually the fbcon 
   people snuck it in anyway].  In any case, those of us running on text
   consoles wanted a penguin too, and barring some attempts to use a vga-font 
   hack to get one displayed, the best way to get this was a user-space
   text-mode program.
   
   I used a ppm of the Linux penguin and a ppm2ansi converter from 
   Rasterman [www.rasterman.com], and then touched it up with a trial 
   version of THEDRAW under DosEmu.  Dredging up some talents left
   over from my Ansi-art BBS days I eventually hacked together a rough 
   likeness of Ewing's Linux Penguin.  I added some system info from 
   /proc, and linux_logo was born.
   
   The program itself has grown more "feature-full" as people around the
   world send in their patches.  The newer versions are primarily minor
   cosmetic fixes.  But I get a lot of positive feedback from this tiny
   little program I created one summer day........

-----------------------------------------------------------------------
CONFIG FILES
-----------------------------------------------------------------------

  As of 3.9b5 linux_logo now reads ~/.linux_logo [that is, the
     hidden file .linux_logo in your home directory] and
     /etc/linux_logo.conf before parsing the command line options.
     
  The format of the config files is a bit of a hack.  Just put in the
  file the command line options you want passed to linux_logo.
    
  Thus if you put in ~/.linux_logo
  
-a -c -F "Linux Logo on a #M Mhz Machine"

  Then when you run "linux_logo" it will automatically show an ASCII classic
  logo with the formatting command applied.
  
  This is a bit ugly, but is was simpler and [at the time] seemed more elegant
  than writing a separate dot file parser....
 
----------------------------------------------------------------------->
POTENTIAL USES FOR linux_logo
----------------------------------------------------------------------->

   There are so many uses, I split them off into a separate "USAGE" file.
   

 ----------------------------------------------------------------------->
 QUICKLY INSTALLING linux_logo
 ----------------------------------------------------------------------->
 
    untar and uncompress the file
        tar -xzvf linux_logo-6.01.tar.gz
	
    enter the directory
        cd linux_logo-6.01
	
    run "configure"
        ./configure
	
    compile the program
        make
	
    install (you'll probably want to do this as root) with
        make install
	

-------------------------------------------------------------------------->
ADVANCED LINUX_LOGO Installation
-------------------------------------------------------------------------->

   Destination directory:
     
      By default linux_logo is installed under /usr/local/
      
      To change this, run configure with
         "./configure --prefix=/usr"
      Where you can replace /usr with any location you want.

   Picking logos:

      You can choose which logos are compiled into linux_logo.  
      Many contributed logos can be found in the ./logos directory.
    
      By editing the file logo_config, you can pick which logos are included.
    
      You can create a linux_logo binary with ALL of them
      by doing
    
         make logos-all
       
      Note: this will overwrite the current logo_config, so be careful.
       
      Then use "linux_logo -L list" to see them, or 
      "linux_logo -L random" to randomly go through them
    
   Compile time changes:
   
      Edit the "defaults.h" file to change a lot of linux_logo's default
      behaviors.
    
   Translations:
   
      Initial internationalization support has been added.  If you are running
      with the LANGUAGE environmental variable set, and there is a translation
      for your language, then you should get linux_logo in your own tongue.
      
      This can be turned off by changing the USE_I18N option at the top
      of the defaults.h file.

   Cross compiling:

      If you are using linux_logo on an embedded system you might
      want to cross compile.  I tried to make this as easy as possible.
   
      For example, to cross-compile for avr32 on x86 (assuming you
      have all of the avr32 cross-compile tools installed) I do this:
   
         env CROSS=avr32-linux- ./configure
         make CROSS=avr32-linux- LDFLAGS=-static ARCH=avr32
       
      And the result is a working avr32 version of linux_logo

   On non-Linux architectures:
    
      You'll have to use GNU make.  This is often called "gmake".



--------------------------------------------------------------------------->
COMMAND LINE OPTIONS
--------------------------------------------------------------------------->

Usage:   linux_logo [-a] [-b] [-c] [-d] [-D file] [-e file] [-f] [-F] [-g]
                    [-h] [-i] [-k] [-l] [-n] [-o num] [-p] [-s] [-t str] [-u] [-v]
                    [-w Num] [-x] [-y] [-F format] [-L num | list | random_xx]
         [-a]     -- Display an ascii-only Logo
         [-b]     -- Display a Banner Logo!
         [-c]     -- Display a "Classic" type logo
         [-d]     -- disable "prettying" of output
         [-D file]-- use custom logo from "file"
         [-e file]-- Use "file" instead of /proc/cpuinfo [for debugging
         [-f]     -- force the screen clear before drawing
         [-F format] Format output.  See README.
      B  [-g]     -- give system info only
         [-h]     -- this help screen
	 [-i]     -- ignore the ~/.linux_logo and /etc/linux_logo.conf files
	 [-k]	  -- keep sysinfo flushed-left (non-centered)
      B  [-l]     -- display logo only
      C  [-o Num] -- offset output Num spaces to the right
         [-p]     -- preserve cursor location
         [-s]     -- skip Bogomips [speeds up on non-Linux platforms]
         [-t str] -- display user-supplied string
      *  [-u]     -- show uptime
         [-v]     -- version information
         [-w Num] -- set width of screen to Num [default 80]
      *  [-y]     -- show load average
         [-L ...] -- multiple Logo options.

 B=Banner mode only, C=Classic Mode Only  *=Works Only in Linux



More detailed explanations:

[-a]     : This option makes linux_logo output no fancy colors.  This is
           useful if you are viewing linux_logo over a black and white 
	   terminal, or a terminal that can't handle fancy escape sequences
	   well [like default win95 telnet].
	   
[-b]     : This option makes linux_logo display the first compiled-in "banner" 
           style logo.
	   
[-c]     : This option makes linux_logo display the first compiled-in 
           "classic" style logo.  Many people prefer this version of the
	   logo.  I made it myself using some complex manipulation of TheDraw 
	   and the 'official' logo.xpm that comes with the linux_sources.
	   
[-d]     : This option turns off Megahertz rounding and cpuinfo "prettying".
           That is, it prints your /proc/cpuinfo's "model name" verbatim,
	   instead of being clever and making it look nice.

[-D file]: Use an alternate logo on disk.  Just make sure 'file' points
           to a valid '.logo' file.  Read README.CUSTOM_LOGOS for more
	   info on how to make these.  Some can be found in the 
	   ./logos directory of the linux_logo distribution.

[-e file]: Specify an alternate cpuinfo file.  This is only really useful
           if you are debugging a /proc/cpuinfo file that is not from
	   your own computer.  Theoretically you could also use this to
	   make your old 386 appear to be a Pentium to users ;)

[-f]     : This option simply clears the screen before drawing the logo.

[-F format]: Use this to super-customize the output of the cpuinfo.  You 
           pass a string, for example "#V\n#U\n#L\n".  See the section
	   below entitled "THE NEAT NEW FORMAT COMMAND" for further info.

[-g]     : This option makes linux_logo display the system_info only.
           [Note.. this option only works in banner mode].  This is
	   useful if you have your own, better, ansi logo and you don't
	   want to mess with include files.  Just
	   "cat My_Logo >> out; linux_logo -g >> out" to get your logo with
	   my sysinfo.

[-h]     : This simply displays the help screen, which is much less verbose
           than this write-up.

[-i]     : linux_logo will look in ~/.linux_logo and /etc/linux_logo.conf
           for information on how to run linux_logo.  If the -i option
	   is passed, linux_logo will ignore those files

[-k]    :  keep sysinfo flushed-left (non-centered)

           In older versions of Linux_logo this modified how the logo
	   looked, I apologize for re-using the command-line option,
	   but there are only so many letters of the alphabet.

[-l]     : This option displays the logo only [Only works in banner mode].
           This is useful if for whatever reason you don't want to see the
	   system info.

[-L num | NAME | list | random_xy]:  This option is used to manipulate compiled-in
           custom logos.  As of linux_logo 3.9 you can compile in an
	   arbitrary amount of logos, although the default is to just have
	   the original and banner logos.
	   
	   "-L list" will list all of the logos available
	   "-L NAME" will display the logo with name NAME.
	       the names available can be seen with the "-L list" command
	   "-L num" will display logo number num, where the number is
	       obtained using the "-L list" command
	   "-L random_xy" will pick a logo at random, with criteria xy.
	       When you replace x with the letter:
	          b : pick a random banner mode logo
                  c : pick a random classic mode logo
                  e : pick a logo from either banner or classic
	       When you replace y with the letter:
	          a: pick a random ascii logo
		  n: pick a non-ascii logo
		  e: pick either type of logo
	       So to summarize "-L random_ba" picks a random ascii banner,
	                       "-L random_ce" picks a random classic logo
			       "-L random_ee" picks any logo, etc, etc
			       
	   See README.CUSTOM_LOGOS for more info
	   
[-n]     : This option has been removed from linux_logo 3.9 and above.
           If you want to create a logo that looks different than the
	   default, read README.CUSTOM_LOGOS.

[-o Num] : This option will offset the logo towards the right of the screen
           Num spaces.

[-p]     : This option preserves the position of the cursor on the screen
           while drawing the logo under it.
	   
[-rX]    : This option has been removed from linux_logo 3.9 and above.
           If you want to create a logo that looks different than the
	   default, read README.CUSTOM_LOGOS.

[-s]     : This option skips the bogomips test on non-linux ports.  On 
           platforms that don't have the bogomips value in a /proc file,
	   linux_logo calculates the value itself using a GPL'd routine.
	   This can take a while, especially on slower machines, so it can
	   be disabled.
	   
[-t str] : This option displays user-supplied string (for example,
           Red Hat release or welcome...')  in first line of system info.
           See the "Things to do" section for ways to use this.
	   
[-u]     : This option displays the uptime along with the other system
           information.  While useless when putting logos in issue or motd
	   files, this option comes in handy if you are using linux_logo
	   to impress your friends.  Also, when used in conjunction with
	   the -g option, you can use linux_logo in Server-Side includes
	   in web pages.
	   
[-v]     : This option displays the version of linux_logo you are using.

[-w Num] : Use this option to set the width of the screen.  It helps in trying
           to center the banner mode. Default is 80 columns.
	   
[-x]     : This option has been removed from linux_logo 3.9 and above.
           If you want to create a logo that is narrower than the
	   default, read README.CUSTOM_LOGOS.
	   
[-y]     : Display the load average.  [Yes I have just about run out of
           letters to use as command line options ;)]

--------------------------------------------------------------------------->
TROUBLESHOOTING
--------------------------------------------------------------------------->

Know bugs: 
  
      Different architectures have odd /proc files.  If you send me
      a copy of relevant files (/proc/cpuinfo and /proc/version usually)
      I can see about adding support.
      
      On non-Linux platforms the BogoMips check can be quite slow.  To skip
         it use "linux_logo -s"
      
      To make easy updates to ansi files with difficult editors, 
         the combination ^[ is read as the ESC code (#27 decimal)
	 so this combination cannot be used in a picture.
	 
------------------------------------------------------------------------>
THE NEAT FORMAT COMMAND
------------------------------------------------------------------------>
These are instructions on how to use the Format command added in Linux Logo 3.0

The command line argument is -F.  

Special sequences start with "#" use "##" to make the "#" sign.  All other
characters [except "\n", the carriage return] are printed as is.

Special      Stands For                          Example
________________________________________________________________
  #B     Bogomips                            "374.37"
  #C     Compiled Date                       "#47 Fri Jan 8 10:37:09 EST 1999"
  #E     User Text [given with the -t]       "Given with -t option"
  #H     Hostname                            "deranged"
  #L     Load average                        "Load average 0.04, 0.01, 0.01"
  #M     Megahertz [where supported]         "188Mhz "
  #N     Number of CPU's                     "Two"
  #O     Operating System Name               "Linux"
  #P     Singular or Plural of "Processor"   "Processor"
  #R     Ram [in Megabytes]                  "64M"
  #S     Plural                              "s"
  #T     Type of CPU                         "K6"
  #U     Uptime                              "Uptime 10 hours 59 minutes"
  #V     Version of OS                       "2.2.0-pre5"
  #X     CPU Vendor                          "AMD "
  \n     carriage return


Notes:
  + The letter after the # must be capitalized.
  + Options not available are silently ignored.
  + Megahertz only available on some platforms and newer kernels.
  + See "defaults.h" on how to have #N report in non-english numbers.
  + Plural [#S] gives nothing if there is 1 cpu, gives 's' otherwise.
  + Processor [#P] gives "Processor" [or i18n equiv] when 1 cpu,
    "Processors" if more than 1.
  + The "-y" and "-u" [display uptime and load average] command line options
    don't affect the output if a custom format is used.
      
      
For example the default banner format is
"#O Version #V, Compiled #C\n#N #M#X#T #P, #R RAM, #B Bogomips Total\n#H\n"

which on my computer gives an output of:
       
      Linux Version 2.2.0-pre5, Compiled #47 Fri Jan 8 10:37:09 EST 1999
         One 188MHz AMD K6 Processor, 64M RAM, 374.37 Bogomips Total
		                    deranged
					
Another example would be
  linux_logo -F "Redhat Linux 5.2\nKernel Version #V\n#U\n#L\n"
which would give
                                Redhat Linux 5.2
			    Kernel Version 2.2.0-pre5
                            Uptime 11 hours 4 minutes
                          Load average 0.00, 0.00, 0.00
			
As you can see, the possibilities are endless.


------------------------------------------------------------------------>
CREATING/USING CUSTOM LOGOS
------------------------------------------------------------------------>
  See the file README.CUSTOM_LOGOS for more than you ever wanted to know
  about making and using your own logo files.
     
------------------------------------------------------------------------->
WHERE TO GET LINUX_LOGO:
------------------------------------------------------------------------->
  http://www.deater.net/weave/vmwprod/linux_logo
  http://sunsite.unc.edu/pub/Linux/logos/penguin/
  
Check out other programs by me at http://www.deater.net/weave/vmwprod

-------------------------------------------------------------------------->
THANKS FOR 25 YEARS OF LINUX_LOGO
-------------------------------------------------------------------------->

   Many thanks to the people sending in patches and /proc/cpuinfo entries.
   Without you linux_logo wouldn't work on so many machines.
   
   Special thanks to Kristina (KRG) and my friends John Clemens and Marie
   Prosser.
   
-----------------
Vince `deater` Weaver
[email protected]

linux_logo's People

Contributors

atoz-chevara avatar bmwiedemann avatar danielinux avatar deater avatar dereckson avatar tdi avatar thevilledev avatar thias 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  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

linux_logo's Issues

RAM size shown is incorrect (Debian 9.2)

Linux Version 4.9.0-4-amd64, Compiled #1 SMP Debian 4.9.51-1 (2017-09-28)
Four 2.13GHz Intel Atom Processors, 128TB RAM, 17068 Bogomips Total

The display above is from a machine with only 3GB RAM,

Linux Version 4.9.0-4-amd64, Compiled #1 SMP Debian 4.9.51-1 (2017-09-28)
Eight 800MHz Intel i7 Processors, 128TB RAM, 67207 Bogomips Total

And this one has 32GB RAM.

Thank you. :)

Doesn't work on my 1930 Model 15 Teletype

Attachments: see video at https://youtu.be/2XLZ4Z8LpEE
Symptoms: When I try to print the linux_logo, it uses newfangled ASCII characters that are not compatible with the Baudot set on my 1930 vintage Model 15 Teletype which I use as a terminal. It also uses the newfangled ultra-wide 80 columns format, which overflows the standard 74 column width of The True Teletype.
Expected result: should be backwards compatible with 1930 technology, and print this Baudot/RTTY friendly logo instead:

                                                            $$$$$
                                                           $$$$$$$
               $                                           $$O$O$$
$$$$$$        $$$                                          $VVVVV$
  $$           $                                         $$  VVV  $$
  $$       $$$    $$$ $$$$   $$$    $$$  $$$$$ $$$$$    $          $$
  $$      $  $$    $$$    $$  $$     $$    $$   $$     $            $$
  $$     $   $$    $$     $$  $$     $$      $$$       $            $$$
  $$        $$$    $$     $$  $$     $$      $$$      QQ$           $$Q
  $$     $ $$$     $$     $$  $$     $$     $$ $$   QQQQQQ$       $QQQQQQ
  $$    $$ $$$ $   $$     $$  $$$   $$$    $$   $$  QQQQQQQ$     $QQQQQQQ
$$$$$$$$$$  $$$   $$$$   $$$$   $$$$ $$$ $$$$$ $$$$$  QQQQQ$$$$$$$QQQQQ

Estimated numbers of users affected by this: 1
therefore Importance = critical
I am OK if this would only work with the -curiousmarc option :-)
Cheers, keep up the good Linux software!

Marc

Potential Enhancement to Obtaining Memory Information via Sysinfo Syscall on Linux

Referencing two issues:

  1. (My bug report to debian) https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=839594
  2. RAM size shown is incorrect (Debian 9.2) #14

The problem was that Linus Torvalds wanted to remove privileged kernel memory information from
/proc/iomem -- but found that it broke a lot of system utilities and decided to only expose the information
to privleged users.
/proc/iomem: only expose physical resource addresses to privileged users
https://lore.kernel.org/patchwork/patch/1006236/

As the general conclusion (in issue #14 and Debian bug 839594) was that /proc/meminfo is available
to unprivileged users for getting memory size information.

However, instead of accessing /proc/meminfo directly why not use the sysinfo(&struct) call on Linux systems?
The structure used by sysinfo should not change (at least not very often) and it would provide a layer of abstraction
between linux_logo and the memory information.

Granted the information returned by sysinfo() can be obtained through /proc/meminfo -- but I think the abstraction provided
by the syscall (returning data in the common structure) means that we wouldn't have to deal with manually accessing the
raw information and would be better moving forward.

The man page for sysinfo(): https://man7.org/linux/man-pages/man2/sysinfo.2.html
Example usage: https://www.informit.com/articles/article.aspx?p=23618&seqNum=15

It seems that code for linux_logo already uses code from libsysinfo and sysinfo.h....so why not do the following:

const double megabyte = 1024 * 1024;
/* Obtain system statistics. */
struct sysinfo si;
sysinfo (&si);
printf ("total RAM   : %5.1f MB\n", si.totalram / megabyte);
printf ("free RAM   : %5.1f MB\n", si.freeram / megabyte);

// if mem_unit is needed (on later kernels -- see below)
printf ("total RAM   : %5.1f MB\n", (si.totalram * si.mem_unit) / megabyte);
printf ("free RAM   : %5.1f MB\n", (si.freeram * si.mem_unit) / megabyte);

There will need a check to determine if the kernel version is 2.3.16, 2.3.23 (i386), or 2.3.48 (all architectures).

Kernel 2.3.16 (and earlier): the sizes of the memory and swap fields are given in bytes

Since Kernel 2.3.23 (i386) & 2.3.48 (all architectures): sizes of the memory and swap fields are given as multiples of mem_unit bytes.

More information on the sysinfo structure:

Sysinfo structure ``` Until Linux 2.3.16, sysinfo() returned information in the following structure:
       struct sysinfo {
           long uptime;             /* Seconds since boot */
           unsigned long loads[3];  /* 1, 5, and 15 minute load averages */
           unsigned long totalram;  /* Total usable main memory size */
           unsigned long freeram;   /* Available memory size */
           unsigned long sharedram; /* Amount of shared memory */
           unsigned long bufferram; /* Memory used by buffers */
           unsigned long totalswap; /* Total swap space size */
           unsigned long freeswap;  /* Swap space still available */
           unsigned short procs;    /* Number of current processes */
           char _f[22];             /* Pads structure to 64 bytes */
       };

   In the above structure, the sizes of the memory and swap fields
   are given in bytes.

   Since Linux 2.3.23 (i386) and Linux 2.3.48 (all architectures)
   the structure is:

       struct sysinfo {
           long uptime;             /* Seconds since boot */
           unsigned long loads[3];  /* 1, 5, and 15 minute load averages */
           unsigned long totalram;  /* Total usable main memory size */
           unsigned long freeram;   /* Available memory size */
           unsigned long sharedram; /* Amount of shared memory */
           unsigned long bufferram; /* Memory used by buffers */
           unsigned long totalswap; /* Total swap space size */
           unsigned long freeswap;  /* Swap space still available */
           unsigned short procs;    /* Number of current processes */
           unsigned long totalhigh; /* Total high memory size */
           unsigned long freehigh;  /* Available high memory size */
           unsigned int mem_unit;   /* Memory unit size in bytes */
           char _f[20-2*sizeof(long)-sizeof(int)];
                                    /* Padding to 64 bytes */
       };

   In the above structure, sizes of the memory and swap fields are
   given as multiples of mem_unit bytes.
</details>

sysctl: Cannot allocate memory on FreeBSD 10

Output on FreeBSD 10:

  • a "sysctl: Cannot allocate memory" error message
  • the correct logo
  • an information line with RAM information missing
FreeBSD Version 10.0-RELEASE, Compiled FreeBSD 10.0-RELEASE #0 r260789: Thu Jan 16 22:34:59 UTC 2014   
Zero  Intel(R) Atom(TM) CPU  C2750  @ 2.40GHz Processors, 0M RAM, -1.00 Bogomips Total
                               ysul.nasqueron.org

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.