Zinc HTTP Components

Zinc HTTP Components is an open-source Smalltalk framework to deal with the HTTP networking protocol. Pharo is our reference platform. Zn is reasonably mature and complete. It has been in development and in production use since 2010 and is a standard part for Pharo versions 1.3, 1.4, 2.0 and 3.0.

Documentation

The main documentation for Zinc is the paper and draft chapter for the Pharo By Example 2 book. This is an HTML version based on a Markdown source, styled for readability. Here is a version not using fancy syntax highlighting.

At the Pharo Conference in May 2012, I presented both Zn and Zdc. Here are the slides of the Zinc presentation. This is a 750Kb PDF.

At the 'Il y a une vie après Ruby on Rails : Web 3.0 avec Pharo' conference at EuraTechnologies, Lille 2013-06-06 I presented 'Pharo HTTP Fundamentals'. Here are the slides.

There is also an extensive tutorial Building and deploying your first web app with Pharo - Understanding HTTP fundamentals through Zinc HTTP Components available.

Installation

Zinc is part of any Pharo version since 1.3. You might want to upgrade to the latest stable or development version. The best way to do so is to use the Metacello configuration, ConfigurationOfZincHTTPComponents, from one of two locations, like this:

Gofer it
  url: 'http://mc.stfx.eu/ZincHTTPComponents';
  configurationOf: 'ZincHTTPComponents';
  loadStable.

Gofer it
  smalltalkhubUser: 'SvenVanCaekenberghe' project: 'ZincHTTPComponents';
  configurationOf: 'ZincHTTPComponents';
  loadStable.

To manually load the framework as an addon to your current Pharo image, or to update to the very lastest development version, execute the following script:

Gofer it
  url: 'http://mc.stfx.eu/ZincHTTPComponents';
  package: 'Zinc-Character-Encoding-Core';
  package: 'Zinc-Resource-Meta-Core';
  package: 'Zinc-HTTP';
  package: 'Zinc-FileSystem';
  package: 'Zinc-Character-Encoding-Tests';
  package: 'Zinc-Resource-Meta-Tests';
  package: 'Zinc-Tests';
  load

On non-Pharo 2.0 platforms that do not use FileSystem, use the following script:

Gofer it
  url: 'http://mc.stfx.eu/ZincHTTPComponents';
  package: 'Zinc-Pharo-Forward-Compatibility';
  package: 'Zinc-Character-Encoding-Core';
  package: 'Zinc-Resource-Meta-Core';
  package: 'Zinc-HTTP';
  package: 'Zinc-FileSystem-Legacy';
  package: 'Zinc-Character-Encoding-Tests';
  package: 'Zinc-Resource-Meta-Tests';
  package: 'Zinc-Tests';
  load

Compatibility with Pharo 1.3, 1.4, 2.0 and 3.0 should be 100%. Older Pharo versions might still work. Compatibility with Squeak 4.2+ is not 100%, some cryptographic and encoding stuff is not working, without Announcements logging won't work, but overall the most used client and server features are functioning. A port to Gemstone is also available.

Live Demo

The web pages you are currently looking at are served by the Zinc HTTP Components standard web server, more specifically ZnManagingMultiThreadedServer with the ZnDefaultServerDelegate handler. The default / (slash) handler you would be seeing when you are running ZnServer locally (ZnServer startDefaultOn: 8080) is the /welcome page. This live demo setup is configured slightly differently to serve some HTML pages instead, under /zn by way of ZnStaticFileServerDelegate.

http://zn.stfx.eu is a cloud based virtual GNU/Linux server, more specifically an Amamzon AWS EC2 Micro Instance running Ubuntu 11.10 Server Edition using an Elastic IP address pointing to the http://stfx.eu - Smalltalk is the Red Pill website. Apache 2 was configured to statelessly load balance requests over 4 Smalltalk instances. Each Smalltalk instance is a Pharo 2.0 Smalltalk Image with Zinc HTTP Components run by a Pharo Cog VM. Monit is making sure that all 4 Smalltalk instances keep on running.

Development

The source code for Zinc HTTP Components lives in several places, like on SmalltalkHub where you will find some standard information to get you started.

We use an open development model. If you plan on making important changes that you would like to be integrated in the main development branch, it would be best if you discussed your plans with the authors. We like clean, elegant, self-documenting code. We like single purpose classes and small methods. We like tests, small commits and useful checkin messages.

Zinc HTTP Components is part of various targets of Pharo's Continous Integration Server, a Jenkins server.

Hosting of this website is provided by the stfx - Smalltalk is the Red Pill website. See also the information about the live demo.

Authors

License

Zinc HTTP Components is open-source software licensed under the MIT License. All contributions should be licensed under the same terms.

History

We kept a copy of our previous homepage online for historical accuracy.

Ethymology

Any project needs a name. We also needed a namespace prefix for our Smalltalk classes. We choose 'Zinc' and 'Zn' respectively.

zinc |zi ng k|
noun
the chemical element of atomic number 30, a silvery-white metal 
that is a constituent of brass and is used for coating (galvanizing) 
iron and steel to protect against corrosion. (Symbol: Zn)
ORIGIN mid 17th cent.: from German Zink, of unknown origin.

Here is the Wikipedia entry: Zinc. Apart from the fact that this is a nice name, don't go searching for a hidden meaning: there is none.