Softpanorama

Home Switchboard Unix Administration Red Hat TCP/IP Networks Neoliberalism Toxic Managers
May the source be with you, but remember the KISS principle ;-)
Bigger doesn't imply better. Bigger often is a sign of obesity, of lost control, of overcomplexity, of cancerous cells

FTP Filesystems

News

FTP Protocol Recommended Links win-sshfs - SSH(SFTP) filesystem for Windows NetDrive WebDAV 
FTPFS - Wikipedia          
Recursive uploading of directories via FTP FTP Security FUSE Linux.org Horror Stories Humor Etc

Introduction

The two most common implementations of ftp filesystem are Netdrive and Gnome. The idea go back to Plan 9, the research successor to Unix by the Computing Sciences Research Center at Bell Labs between the mid-1980s and 2002

There is no ftp(1) command under Plan 9. Instead there is an ftpfs fileserver, and each FTP connection looks like a file system mount. ftpfs automatically translates open, read, and write commands on files and directories under the mount point into FTP protocol transactions. Thus, all ordinary file-handling tools such as ls(1), mv(1) and cp(1) simply work, both underneath the FTP mount point and across the boundaries with the rest of the user's view of the namespace. The only difference the user (or his scripts and programs) will notice is retrieval speed.[Plan 9 The Way the Future Was]

Independently this idea was implemented in Orthodox file managers (OFM) and later found its way to Unix Midnight Commander and CurlFtpFS. There is also GNOME File System modeled after midnight Commander VFS.  It is used in Nautilus file manager  too:

You can use the file manager to access FTP sites. To access an FTP site, enter the URL for the site in the field on the location bar, then press Return. The contents of the site are displayed in the view pane. To copy a file from the FTP site, drag the file to the new location.

To access an FTP site that requires a username and password, you can enter the URL in the following form:

ftp://username:password@hostname.domain

To reload the FTP site in the view pane, choose View -> Reload. To stop loading the FTP site, choose View -> Stop.

Gnome VFS has wrapper for Perl:

VFSGnome - Gnome Virtual Filesystem for Perl - search.cpan.org

VFS::Gnome is a TIEHANDLE module that uses the gnome-vfs library from the Gnome project (http://www.gnome.org). The gnome-vfs library (Virtual File System) allows uniform access to various uri types such as http://, https://, file://, ftp:// etc.

Microsoft implementation in Windows 7


NEWS CONTENTS

Old News ;-)

[Aug 05, 2015] How To map A FTP server As A Local Drive or Network Drive In Windows

Microsoft Community
Alex T

Try this list of steps and see if it helps.

Step 1: Open My Computer and click on the "Map network drive" button.
Step 2: Name the Folder and select "Connect using different credentials and then click on "Connect to a Web site that you can use to store your documents and pictures.
Step 3 - click "Next"
Step 4 - Select "Choose a custom network location" and then click "Next"
Step 5 - Type in "ftp://yourwebsite.com/" as the Internet or network address
Step 6 - Un-check "Log on anonymously" and type in your user name for the FTP access.
Step 7 - Type a name for this location.
Step 8 - Click Finish
Step 9 - Now when you double click on your new network location you'll have to log in. Type in the password, uncheck "Log on anonymously and finally check the Save password unless you want to enter it every time.
Step 10 - Transfer your picture files to the server just like it's a folder on your PC.

[Mar 22, 2015] Access FTP sites natively in Windows 7

April 15, 2009 | Redmond Pie
Back in September last year, I wrote this article about accessing FTP sites using Windows Vista. I then completely shifted to Windows 7 (starting from M3 Build which was released at PDC 2008) only to find out that I couldn't get the FTP site location thing to work in Windows 7 as it did for me in Windows Vista. This functionality was probably broken or disabled by Microsoft on purpose for testing in all the builds up to Windows 7 Build 7057. But starting from Windows 7 Build 7077, this has been fixed and you can now access any FTP site from within Windows 7 itself without having to install any third party software.

The procedure for creating your FTP site location in Windows 7 is similar to what it was in Windows Vista. Here's how to create a FTP site location in Windows 7:

Step 1: Click on Windows Start button Windows Vista Start Orb and then click on "Computer".

Step 2: Click on "Map network drive"..

Step 3: "Map Network Drive" window will open. Now click on the link "Connect to a Web site that you can use to store your documents and pictures."

Step 4: Now simply follow the step by step wizard to add a new network location. Select"Choose a custom network location" when given the choice of where to create this network connection.

Step 5: Type your ftp address ftp://server.yoursite.com. Specify a user name and password if required. For home directory do not provide the PATH

Step 6: Last but not the least, give your newly created network location a name and you are done! :)

How to mount a ftp server as a drive in Windows By Martin Brinkmann

August 3, 2006 | gHacks Tech News

The following tip may be useful for all the webmasters out there and everyone else who is having access to ftp servers on the Internet. Instead of connecting to the ftp with your ftp software you can simply mount the ftp drive in windows and access it like every other hard drive you have installed. Here is how you do that:

Update: The process has changed slightly under Windows 8.
  • Here you need to select Computer in Windows Explorer which is listed in the left sidebar.
  • Right-click in the main window and select Add a network location from the context menu.

    add ftp server windows

    Follow the wizard that pops up from this point. You basically need to paste the ftp server's address and login credentials in the following windows of the dialog.

  • Mount FTP Server As Local Drive In Windows 7

    Many of you will be frustrated to find out that there is hardly any way to mount an FTP server as local drive in Windows 7. Yes, Microsoft has always provided an option to map a network location but this is not helpful for many users. The benefit of mounting an FTP or WebDav server as local drive is that many backup and 3rd party tools are easily able to recognize the drive and allow operations to be performed on them just like a local drive.

    NetDrive is by far the most suitable freeware available to mount both FTP and WebDav server as a local drive. A user just has to give it a name, enter the IP address or URL, enter the port (default is 21), assign a drive letter, and finally enter the login credentials. Once connected, the drive is visible in "My Computers" alongside other local drives.

    FUSEWiki - NetworkFileSystems

    SshFS

    Author: Miklos Szeredi / miklos at szeredi hu

    Homepage: http://fuse.sourceforge.net/sshfs.html

    Description
    This is a filesystem client based on the SSH File Transfer Protocol. Since most SSH servers already support this protocol it is very easy to set up: i.e. on the server side there's nothing to do. On the client side mounting the filesystem is as easy as logging into the server with ssh.

    HTTPFS

    ... is a FUSE-based file system. You may think of it, as a downloader with the speed of light.

    virtual filesystem ideas

    ...Here's something I threw together. I too am very interested an seeing
    the writeups of the gnome-vfs and kio as I only know very high level
    things about them.

    Attached is some kind of architecture diagram and some text describing
    various ideas in it. I guess its an elaboration on what I was saying
    yesterday. I've also inserted the text part below. If anything maybe the
    design goals part tries to sum up what we've talked about in this thread
    so far.

    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<


    See attached diagram:

    Legend:

    Dotted red arrows = "relaization" in the uml sense
    Green arrows = D-BUS transactions
    White boxes = software implementations
    Yellow boxes = D-Bus interfaces ('services')


    Overview
    --------

    I think this design is essentially something along the lines of what
    people have been thinking about, with the ability to 'hook' into
    various parts of the process by passing references to services that
    have well-defined interfaces. It's kind of like a call back, but it
    uses D-BUS to let you define much more interesting interactions than
    just a simple callback. Backends that use protocols that weren't meant
    for async io can still be written in a fairly sync matter, it would
    just have to block on certain things (like authentication).

    Design goals
    ------------

    * Simplicity: This is i think from the point of view of the
    application programmer and the backend developer. There should not
    be too many things that they have to worry about. From the user's
    perspective, it should just work (tm), but I think this specifically
    means that passing in URI's to various applications should result in
    regular and predictable consistent behaviour, including the kinds of
    authentication mechanisms presented.

    * User-interaction decoupling: All the parts that require user
    interaction are hidden behind D-BUS services with specific message
    interfaces. This lets client apps not have to worry about anything
    unless they want to, and it allows desktops to provide integrated
    'default' solutions that can implement their own policies with
    regards to authentications, password caching, sessions management,
    etc. This allows for a situation like, if you run a KDE app in
    gnome, it should be able to use the proper gnome dialogs and
    policies.

    * Client control: If a client wants to be really involved in the
    backend, like with browsers, it should be able to. My design so far
    allows clients to provide their own authentication services, as well
    as monitor backends in a way that may be specific to that backend.
    I suppose it would be useful to have a backend also specify any
    backend-specific control interfaces so that a client can have lots
    of control over a backend if it wanted to. Or maybe a mechanism by
    which a client can bypass the central vfs service altogether and use
    a backend directly and exculsively.

    * Provide High level operations: I like the queryInterfaces() type of
    idea, save for that I'm not sure most application programmers want
    to deal with adapting to all kinds of different capabilities of
    various backends. So there should be someone in the middle that
    provides very high level operations and translates them to whatever
    capabilities a backend may provide, or tells you that they're not
    possible. This is probably hard to do very well, so it should only
    be done once.


    VFS Service
    -----------

    The Vfs service is at the core. It is sort of a management center that
    provides high level vfs operations. This service would be running
    regardless of whether a desktop was, so that it could provide vfs
    services to console applications as well.

    It also is responsible for activating back ends (or maybe this can be
    done by d-bus directly), knowing what backends are available, providing
    calls to query what kinds of backends are currently running, and to
    provide a standard way to observe the state of the vfs in real time. I
    think it would be nice to also bring something like fam into this
    component so that we only need one interface to support monitoring
    on all kinds of vfs's.

    I think this would also be the place to put high level-> low level
    operation composition kind of stuff. (i.e. implement recursive
    directory delete as a series of change directories and deletes, as
    many ftp programs do) I think kio does this, not sure about gnome-vfs.
    But these highlevel operations are useful to everyone so they should
    share an implementation.

    A desktop when it runs should be able to tell the vfs to notify it of
    events. I'm not sure exactly what kind of events, but there must be
    something that the desktop would like to know in real time.


    VFS Backend
    -----------

    This is where the actual work happens. This design tries to extract
    all the GUI and user-interaction requiring stuff out of the module.

    Each backend instance would be passed several service names as
    parameters, one which implements an authentication service that is
    specific to this backend (or i guess the interface could be shared if
    i multiple backends had the same kind of authentication requirements)
    and an observer interface, that would be capable of capturing events
    within a backend that maybe specific to that back end.

    For example i could say give me a sftp backend instance passing it
    the gnome sftp authentication adapter, and the gnome sftp observer. The
    authentication adapter would give me gnome dialogs that adhere
    to gnome's policy of 'sessions' and password caching (maybe a dialog
    wouldn't even pop up at all) and would also say, pop up gnome dialogs
    to show the current status (like say if downloading af file)

    It seems like things like the status dialogs that come up when you do
    a big copy in konqueror or nautilus should be able to be handled at
    either the desktop level OR specifically by the client. You wouldn't
    want little dialog windows popping up every time konqueror loads a
    page, so an app like konq should be able to pass in its own observer
    that could monitor the backend's status and update its own GUI in an
    appropriate way. A console ftp app could also pass in its own observer
    that just updates its own internal structures and displays information
    in some way more appropriate for the console.

    In the case that the app doesn't care what kind of authentication or
    observer is used, there should of course be a call that just means
    'use whatever is there'. The best way to do this is probably use the
    'service ownership' idea in D-BUS so that when gnome starts up for
    example, it would have something that takes ownership of a well known
    auth adapter service name, org.vfs.auth.sftp or something similar. If
    when the backend is created, not specific auth adapters or observers
    are passed in, then it could just be hardwired to lookup the well
    known service name.

    The only thing I'm not sure about is, say you're just running in the
    console, so no application may have claimed the default well-known
    auth service. In that case, if you try to do something that requires a
    service, the activation mehcanism will kick in, but you want it to do
    something appropriate for the console. Is there a way in D-BUS that
    you can say 'give me something that works on the console', or rather
    is there a way to implement that kind of thing?


    Issues
    ------

    It seems kind of fundamental, but how does the client app actually get
    the data it wants? In this design's organization, I suppose the back
    end would deliver it to the vfs service, which would then deliver it
    to the client application. I guess if D-BUS can do some kind of
    shared-memory avoid-copying thing then this could be a reasonable
    solution. Scheduling latency might be a problem with so many mutually
    out-of-process interactions. In the case of network transfers, since
    the network will likely be the bottleneck, maybe this isn't so much of
    a problem. But if its dog slow, nobody's gonna use it.. especially for
    'file://'

    AKBP-II 1999 Gruppe 4

    FTP filesystem für Solaris, implementiert mit RPCs und User-Level Daemon

    Ziel war es ein FTP filesystem für Solaris zu bauen. Prinzipiell gab es zwei Methoden um mit dem Kern zu kommunizieren: Die Implementierung eines neuen System-Calls oder eine Verbindung über RPC. Wir entschieden uns für RPC. Ein wenig Spass muss ja auch sein!

    tech-kern Re proposed changes to etc ()

    Subject: Re: proposed: changes to "etc" (?)
    To: None <tech-kern@NetBSD.ORG>
    From: Paul B Dokas <dokas@cs.umn.edu>
    List: tech-kern
    Date: 12/10/1997 11:23:35
    On Tue, 9 Dec 1997, Paul Evans wrote:
    > One of the specific draw backs of UNIX I keep running up against is the
    > difficulties related to configuration across software packages and 
    > different UNIXices. Specficly I'm talking about files in any dir that 
    > ends in "etc"
    > 
    > Having said that, I acknowledgbe there's nothing we can do about other 
    > peoples misguided beliefs (Hello Solaris Dev team are you there?)
    > 
    > I'm not propsing to instigate something the Red Sysadmin book refers to 
    > as a "vendor gratuitous change" But, I think an initive is needed here, 
    > for several reasons:
    > 
    > 	1. difficulties in management due to differnces in format
    > 	2. error prone by nature, i.e. typos
    > 	3. lack of history log
    > 	4. Security concerns (This last to are far ranging)
    > 	5. Program inplementations of parsers are redundant (hence more 
    > 		possible failure points)
    
    Well, I'll try not to get involved in this one.  Personally, I feel that
    the current /etc/* files are fine.  Perhaps that's just because I've
    never known anything else.  But, I'm open to suggestions.
    
    > >From what I can see there are two possible alternitive solutions:
    > 
    > 	1. A user mode configuration library that uses a protected
    > 		binary file. (a *gasp* registry)
    > 
    > 	2. A VFS based solution involving mounting the above to create 
    > 		the illusion of the files in "etc" (as ascii), but with 
    > 		an API for program use.
    > 
    > Just wanted to pitch this out as I suspect it could have a lot to do with 
    > the proposed capabilties an HSM or new VFS layers/drivers 
    
    [Let me preface this with the declaimer:  I'm know very little about
     how the kernel implements file systems and I know even less about file
     systems themselves.  Take everything that I'm about to say with a
     lot of salt...]
    
    Now this one is interesting to me.  One thing that I'd love to see is
    a well implemented user space filesystem (perhaps just a daemon that
    talks to the kernel's VFS layer).  For example, imagine an RCS filesystem
    built with a user space filesystem and the RCS commands.  When a file is
    opened, the daemon does an 'co -l' on the file.  When the file is closed,
    the daemon does a 'ci -u'.  It could probably even be extended to append
    version numbers to files ala VMS (IMO this is ugly as hell, but it is
    potentially useful in some cases).
    
    In fact, it would be more useful to have a generic user space filesystem
    daemon that executes shell scripts to implement the VFS operations.  That
    way, we'd have a generic daemon that would be useful for experimenting
    with new filesystems without having to muck around in the kernel.  The
    FTP filesystem would be pretty trivial to implement with such a daemon.
    
    Yes, this would be slow, insecure and open to all kinds of problems.  But
    it would be useful in some very limited cases and for experimentation.
    
    
    Just rambling on,
    
    Paul
    --
    Paul Dokas                                            dokas@cs.umn.edu
    

    Recommended Links

    Google matched content

    Softpanorama Recommended

    Top articles

    Sites

    Internal

    External

    Random Findings

    GNU's Bulletin, vol. 1 no. 16 - GNU Project - Free Software Foundation (FSF) mirror is here GNU's Bulletin, vol. 1 no. 16

    File/Storage Systems

    Alex FTP Filesystem
    Alex is a filesystem that lets users access files in FTP sites around the world just like they access local files. Alex pathnames are composed of 3 parts. First is /alex. Second is a reversed hostname. Last is the path on that host. For example, /alex/edu/berkeley/pub/virus.patch is a file at berkeley.edu.
    CIFS - the Common Internet File System
    Coda - an advanced network filesystem
    Coda is an advanced networked filesystem. It has been developed at CMU during the last six years by the systems group of M. Satyanarayanan. in the SCS deparment.
    Ext2fs - a structural analysis
    Microsoft Research Scalable Servers
    The Swarm Scaleable Storage System
    The goal of the Swarm project is to design and implement a scalable network storage system based on a cluster of personal computers. Swarm is scalable because its performance is a function of the size of the cluster -- the more nodes in the cluster, the higher the system performance. This performance improvement is not merely an increase in aggregate performance, either; clients whose I/O performance is limited by the storage system will see an improvement in individual I/O operations if more storage servers are added. This decoupling of I/O performance from storage server performance allows the nodes of the cluster to be chosen to optimize cost-performance, rather than absolute performance -- the desired performance of the overall system is attained by aggregating enough nodes.
    TCFS - the Transparent Cryptographic File System

    Libor Martinek has submitted code for an FTP-capable filesystem implementation. See his message: http://www.netbeans.org/www-contrib/msg00006.html It lets you connect to an FTP server and then mount part of the server in NetBeans like a filesystem; you can then edit files and work with them normally. Any objections to making him a project for this? Suggested name: "ftpfs" or maybe "remotefs" (it has some sections which are more generic, then FTP-specific stuff, then a module--right Libor?). -Jesse

    HTTPFS talk at USENIX99

    Alex FTP Filesystem

    Summary: alex - filesystem for transparent access to FTP sites; spoofs NFS into mounting cached copies of Internet-based FTP sites Version: 940717, 950406 (alpha) Description: Alex is an experimental filesystem that tries to give users transparent read access to anonymous FTP sites. Alex pathnames are really composed of 3 parts. First is /alex. Second is a reversed hostname. Last is the path on that host. For example, /alex/edu/berkeley/pub/virus.patch is a file at berkeley.edu. .../usr.man/alex.1 Keywords: alex, data communication, File Transfer Protocol, ftp(1), Network File System, NFS Language(s): C Requirements: NFS client capability See Also: ? Restrictions: See .../src/README References: ?

    internet-tools

    Alex FTP Filesystem

    Alex FTP Filesystem

    Alex FTP Filesystem

    Alex



    Etc

    Society

    Groupthink : Two Party System as Polyarchy : Corruption of Regulators : Bureaucracies : Understanding Micromanagers and Control Freaks : Toxic Managers :   Harvard Mafia : Diplomatic Communication : Surviving a Bad Performance Review : Insufficient Retirement Funds as Immanent Problem of Neoliberal Regime : PseudoScience : Who Rules America : Neoliberalism  : The Iron Law of Oligarchy : Libertarian Philosophy

    Quotes

    War and Peace : Skeptical Finance : John Kenneth Galbraith :Talleyrand : Oscar Wilde : Otto Von Bismarck : Keynes : George Carlin : Skeptics : Propaganda  : SE quotes : Language Design and Programming Quotes : Random IT-related quotesSomerset Maugham : Marcus Aurelius : Kurt Vonnegut : Eric Hoffer : Winston Churchill : Napoleon Bonaparte : Ambrose BierceBernard Shaw : Mark Twain Quotes

    Bulletin:

    Vol 25, No.12 (December, 2013) Rational Fools vs. Efficient Crooks The efficient markets hypothesis : Political Skeptic Bulletin, 2013 : Unemployment Bulletin, 2010 :  Vol 23, No.10 (October, 2011) An observation about corporate security departments : Slightly Skeptical Euromaydan Chronicles, June 2014 : Greenspan legacy bulletin, 2008 : Vol 25, No.10 (October, 2013) Cryptolocker Trojan (Win32/Crilock.A) : Vol 25, No.08 (August, 2013) Cloud providers as intelligence collection hubs : Financial Humor Bulletin, 2010 : Inequality Bulletin, 2009 : Financial Humor Bulletin, 2008 : Copyleft Problems Bulletin, 2004 : Financial Humor Bulletin, 2011 : Energy Bulletin, 2010 : Malware Protection Bulletin, 2010 : Vol 26, No.1 (January, 2013) Object-Oriented Cult : Political Skeptic Bulletin, 2011 : Vol 23, No.11 (November, 2011) Softpanorama classification of sysadmin horror stories : Vol 25, No.05 (May, 2013) Corporate bullshit as a communication method  : Vol 25, No.06 (June, 2013) A Note on the Relationship of Brooks Law and Conway Law

    History:

    Fifty glorious years (1950-2000): the triumph of the US computer engineering : Donald Knuth : TAoCP and its Influence of Computer Science : Richard Stallman : Linus Torvalds  : Larry Wall  : John K. Ousterhout : CTSS : Multix OS Unix History : Unix shell history : VI editor : History of pipes concept : Solaris : MS DOSProgramming Languages History : PL/1 : Simula 67 : C : History of GCC developmentScripting Languages : Perl history   : OS History : Mail : DNS : SSH : CPU Instruction Sets : SPARC systems 1987-2006 : Norton Commander : Norton Utilities : Norton Ghost : Frontpage history : Malware Defense History : GNU Screen : OSS early history

    Classic books:

    The Peter Principle : Parkinson Law : 1984 : The Mythical Man-MonthHow to Solve It by George Polya : The Art of Computer Programming : The Elements of Programming Style : The Unix Hater’s Handbook : The Jargon file : The True Believer : Programming Pearls : The Good Soldier Svejk : The Power Elite

    Most popular humor pages:

    Manifest of the Softpanorama IT Slacker Society : Ten Commandments of the IT Slackers Society : Computer Humor Collection : BSD Logo Story : The Cuckoo's Egg : IT Slang : C++ Humor : ARE YOU A BBS ADDICT? : The Perl Purity Test : Object oriented programmers of all nations : Financial Humor : Financial Humor Bulletin, 2008 : Financial Humor Bulletin, 2010 : The Most Comprehensive Collection of Editor-related Humor : Programming Language Humor : Goldman Sachs related humor : Greenspan humor : C Humor : Scripting Humor : Real Programmers Humor : Web Humor : GPL-related Humor : OFM Humor : Politically Incorrect Humor : IDS Humor : "Linux Sucks" Humor : Russian Musical Humor : Best Russian Programmer Humor : Microsoft plans to buy Catholic Church : Richard Stallman Related Humor : Admin Humor : Perl-related Humor : Linus Torvalds Related humor : PseudoScience Related Humor : Networking Humor : Shell Humor : Financial Humor Bulletin, 2011 : Financial Humor Bulletin, 2012 : Financial Humor Bulletin, 2013 : Java Humor : Software Engineering Humor : Sun Solaris Related Humor : Education Humor : IBM Humor : Assembler-related Humor : VIM Humor : Computer Viruses Humor : Bright tomorrow is rescheduled to a day after tomorrow : Classic Computer Humor

    The Last but not Least Technology is dominated by two types of people: those who understand what they do not manage and those who manage what they do not understand ~Archibald Putt. Ph.D


    Copyright © 1996-2018 by Dr. Nikolai Bezroukov. www.softpanorama.org was initially created as a service to the (now defunct) UN Sustainable Development Networking Programme (SDNP) in the author free time and without any remuneration. This document is an industrial compilation designed and created exclusively for educational use and is distributed under the Softpanorama Content License. Original materials copyright belong to respective owners. Quotes are made for educational purposes only in compliance with the fair use doctrine.

    FAIR USE NOTICE This site contains copyrighted material the use of which has not always been specifically authorized by the copyright owner. We are making such material available to advance understanding of computer science, IT technology, economic, scientific, and social issues. We believe this constitutes a 'fair use' of any such copyrighted material as provided by section 107 of the US Copyright Law according to which such material can be distributed without profit exclusively for research and educational purposes.

    This is a Spartan WHYFF (We Help You For Free) site written by people for whom English is not a native language. Grammar and spelling errors should be expected. The site contain some broken links as it develops like a living tree...

    You can use PayPal to make a contribution, supporting development of this site and speed up access. In case softpanorama.org is down you can use the at softpanorama.info

    Disclaimer:

    The statements, views and opinions presented on this web page are those of the author (or referenced source) and are not endorsed by, nor do they necessarily reflect, the opinions of the author present and former employers, SDNP or any other organization the author may be associated with. We do not warrant the correctness of the information provided or its fitness for any purpose.

    The site uses AdSense so you need to be aware of Google privacy policy. You you do not want to be tracked by Google please disable Javascript for this site. This site is perfectly usable without Javascript.

    Last modified: September 12, 2017