Eiffel submission for www.99-bottles-of-beer.net.
This website contains sample programs for over 1500 languages and variations, all of which print the lyrics of the song "99 Bottles of Beer".
Example program demonstrating the use of the EROS library. EROS is an acronym for Eiffel Remote Object Server. It uses an XML remote procedure call protocol.
Example program demonstrating how a client can call a server created with the EROS library. EROS is an acronym for Eiffel Remote Object Server. It uses an XML remote procedure call protocol.
Demonstration program for the Eiffel-Loop Java interface library. This library provides a useful layer of abstraction over the Eiffel Software JNI interface.
This is a full-blown MP3 collection manager that is designed to work in conjunction with the Rhythmbox media player and has a number of features of particular interest to Tango DJs.
Manger Syntax
el_rhythmbox -manager -config <task-configuration>.pyx
Features
- Integrates with the GNOME desktop and the GNOME terminal so you can drag and drop task configuration files on to either a desktop launcher or the GNOME terminal.
- Automatically add album art to MP3 files from a directory based on album name or artist name.
- Collate songs into a directory structure according to song tags:
<genre>/<artist-name>/<song-title>.<unique id>.mp3
- Import videos in various formats as MP3 files automatically adding ID3 tags according to folder location. Includes facility for mapping video segments to individual MP3 files.
- Replace songs marked as duplicated, updating all playlists and removing replaced song from collection.
- Display all ID3 tag comments
- Create tango cortinas to act as breaks between a set of dance songs.
- Delete all ID3 tag comments except for the Rhythmbox 'c0' comment. (Gets rid of iTune identifiers etc.)
- Remove all UFID fields from ID3 tags
- Store playlists in a special format that can be easily edited in a text editor to add DJ event information.
- Publish playlists augmented with DJ event information to a website using an Evolicity HTML template.
- Display MusicBrainz info for any songs that have it.
- Display songs with incomplete TXXX ID3 tags (User defined text).
- Archive songs placed in a special "Archive" playlist. This removes them from the main Rhythmbox collection but does not delete them.
- Append field "album-artist" into main 'c0' comment.
- Replace 'c0' comment with album-artist info
- Synchronize all (or selected genres) of music with connected device.
- Export all playlists and associated MP3 to external device
- Has a trick where the beats-per-minute ID3 field can be used to generate a silent pause after particular songs in a playlist.
- Writes a unique audio signature into the MusicBrainz track id to facilitate foolproof device synchronization.
Manual
For details on how to use, read the source documentation notes.
Download
Download the latest executable for Ubuntu 14.04 or Linux Mint 17.x at the bottom of this page. You also need the following command line tools to be installed: sox, swgen, avconv, lame, gvfs-mount
.
Warning: Use at your own risk. It is recommended that you have a backup of your MP3 collection and rhythmbox configuration files (Usually in $HOME/.local/share/rhythmbox
). The developer does not take any responsibility for any data loss that may occur as a result of using el_rhythmbox.
A "Swiss-army knife" of useful Eiffel command line development tools. The most useful ones are listed here with command line switchs:
EIFFEL_REPOSITORY_PUBLISHER_APP
-publish_repository
: publishes an Eiffel code repository as a website with module descriptions.
-edit_notes
: Add default values to note fields using a source tree manifest.
-feature_edit
: expands Eiffel shorthand code in source file and reorders feature blocks alphabetically.
-crypto
: menu driven shell of useful cryptographic operations.
Download
Download binary of el_toolkit
for Ubuntu 14.04 or Linux Mint 17.x.
Provides many extensions to the Eiffel Software Vision-2 cross-platform GUI library and the Smart Docking library.
Features
- Advanced pixel buffer rendering with transparencies and anti-aliasing using the Cairo and Pangocairo 2D graphics library. See class
EL_DRAWABLE_PIXEL_BUFFER
- Drop-down combo boxes linked to data containers conforming to
FINITE
[G]
and initialized with a value of type G, and a selection change agent of typePROCEDURE [ANY, TUPLE [G]]
. See classEL_DROP_DOWN_BOX
- Drop-down combo boxes with localized display strings. See class
EL_LOCALE_STRING_DROP_DOWN_BOX
- Drop down combo box for months of year specified as integers and displayed with English names and a localized variant
EL_LOCALE_MONTH_DROP_DOWN_BOX
These features are only the tip of the ice-berg.
A high-level framework for wrapping Java classes that adds a useful layer of abstraction to Eiffel Software's interface to the JNI (Java Native Interface) called eiffel2java.
Features
- Better Java environment discovery for initialization.
- Automates composition of JNI call signature strings.
- Automates cleanup of Java objects.
The framework is based on the concept of a Java agent that is similar to an Eiffel agent. You will find classes: JAVA_FUNCTION
and JAVA_PROCEDURE
that inherit JAVA_ROUTINE
. These agent classes automatically generate correct JNI call signatures. The library allows the creation of recursively wrapped classes where the arguments and return types to wrapped routines are themselves wrapped classes.
See here for an example of it's use.
Status: No longer maintained
Matlab is a popular math orientated scripting language. This interface was developed with Matlab Version 6.5, VC++ 8.0 Express Edition and Windows XP SP2.
Status: No longer maintained
Praat is a free tool for doing acoustic and phonetic analysis and has it's own scripting language, Praat-script.
The el_toolkit
utility has an option for converting the source code of Praat ver. 4.4 to compile with MSC. (Praat compiles "out of the box" with the mingw compiler, but at the time EiffelStudio didn't support mingw)
Developed with VC++ 8.0 Express Edition, Windows XP SP2, Praat source code version 4.4.30. The conversion tool will not work with later versions of Praat.
Extensions for ISE network sockets and a class for obtaining the MAC address of network devices on both Windows and Linux.
Status: No longer maintained
Eiffel interface to Flash ActionScript objects used in the Laabhair digital signal processing framework. This framework allows you to create applications that process speech with a Praat script in real time and create visual representations of the the data in Flash. Depends on the Eiffel-Loop Praat-script interface library.
Developed on Windows XP SP2 with Flash Professional 8 IDE, EiffelStudio 6.1, VC++ 8.0 Express Edition.
Laabhair was developed at the Digital Media Centre at the Dublin Institute of Technology
An implementation of an experimental XML orientated remote procedure call protocol.
ECF Instructions
When including the ECF eros.ecf
in your project it is necessary to define a custom variable eros_server_enabled
. To build a server application set the value to true
. To build a client application set value to false
.
Classes for uploading files to a server and managing server directory structure.
An Eiffel interface to the PayPal Payments Standard Button Manager NVP HTTP API.
Classes for interacting with a HTTP server. Supports the following HTTP commands: HEAD, POST, GET.
Classes for creating single and multi-threaded HTTP servlet services that extend the Goanna servlet library.
Implements "in-memory" database tables based on an interface defined by the kernel Eiffel class CHAIN
. There are two table types:
- Monolithic tables which can only be saved to disk as a whole and any new items which have not been saved will be lost.
- Transactional tables where the effects of the table item operations: extend, replace or delete, are immediately committed to disk in an editions table file. When the editions file gets too large, the editions are consolidated into the main table file.
Monolithic tables are implemented by class: EL_STORABLE_CHAIN
which takes a generic paramter of type EL_STORABLE
.
This class defines the basic database CRUD concept of Create, Read, Update and Delete:
Create: is implemented by the {EL_STORABLE_CHAIN}.extend
procedure.
Read: is implemented by the {EL_STORABLE_CHAIN}.item
function.
Update: is implemented by the {EL_STORABLE_CHAIN}.replace
procedure.
Delete: is implemented by the {EL_STORABLE}.delete
procedure.
Transactional tables are implemented using the EL_RECOVERABLE_STORABLE_CHAIN
class which inherits EL_STORABLE_CHAIN
. It is called 'recoverable' because if the power suddenly goes off on your PC, the table is fully recoverable from the editions file.
ENCRYPTION
AES encryption is supported for both monolithic and transactional tables.
RELATIONAL CAPABILITIES
Some experimental relational capabilities have been added in a private project but these classes have not yet found their way into Eiffel-Loop.
EXAMPLES Unfortunately the only examples are in a private commercial project. But if there is enough popular demand, the author will open source some of them.
This library adds a layer of abstraction to the Windows registry classes found the in the Eiffel Windows Library WEL. This abstraction layer makes it much easier and more intuitive to search, read and edit Windows registry keys and data. See this article on Eiffel room.
Classes for scanning XML and Pyxis documents using a common interface. Pyxis is a more readable XML equivalent that resembles Python code.
This interface also includes a way of building Eiffel objects from element contexts defined by relative Xpaths. Although this is only a very partial implementation of Xpath, it is still very useful.
The XML implementation is based on a modified GOBO wrapper for the eXpat XML parser (written in C). The Pyxis implementation is pure Eiffel.
Classes for scanning XML documents and building Eiffel objects from XML contexts defined by relative Xpaths. Based on the VTD-XML parser. This is a full implemenation of Xpath 1.0.
VTD-XML uses a very fast and efficient method of building a compressed representation of an XML object using virtual token descriptors.
Using the Eiffel API is considerably easier and more intuitive to use than the original Java or C version of VTD-XML.
A substantial C-bridge was developed to make Eiffel work better with VTD-XML. The original VTX-XML code was forked to make it possible to compile it with the MSC compiler. This fork is found under contrib/C
.
Classes for parsing OpenDocument Flat XML spreadsheets using VTD-XML.
Introduction This library accomplishes two goals:
- Manage a collection of small (and possibility related) "mini-applications" as a single Eiffel application.
- Implement the concept of a self-installing/uninstalling application on multiple-platforms.
"Swiss-army-knife applications"
Creating a new project application in Eiffel is expensive both in terms of time to create a new ECF and project directory structure, and in terms of diskspace. If all you want to do is create a small utility to do some relatively minor task, it makes sense to include it with a other such utilities in a single application. But you need some framework to manage all these sub-applications. In this package, the two classes EL_MULTI_APPLICATION_ROOT
and EL_SUB_APPLICATION
provide this capability.
Command line sub-applications
The following features exist for creating command line applications:
- The class
EL_COMMAND_LINE_SUB_APPLICATION
provides a smart way of mapping command line arguments to the arguments of a creation procedure with automatic string conversion according to type. - Built-in help system with usage help.
- Create menu driven command line shells.
Installer Features
- Define system menu entries and desktop shortcuts for both Windows and the Linux XDG desktop entry standard.
- Define application sub menus
- Define application menu launchers
- Define launcher as file context Nautilus action script. (A similar feature for Windows not yet implemented)
- Define dekstop menu icons
- Install application resources and program files
- Uninstall application resources and program files
Resource Management The library provides a system of managing application resources like graphics, help files etc.
Extensions to Colin LeMahieu's AES encryption library. Includes a class for reading and writing encrypted files using AES cipher block chains.
Extends Colin LeMahieu's arbitrary precision integer library to conform to some RSA standards. The most important is the ability to read key-pairs conforming to the X509 PKCS1 standard. The top level class to access these facilities is EL_MODULE_X509_COMMAND
.
The private key reader however uses a non-standard encryption scheme. It assumes the file is encrypted using the Eiffel-Loop utility contained in el_toolkit
. See class CRYPTO_APP
for details.
Evolicity is a text substitution language that was inspired by the Velocity text substitution language for Java. Evolicity provides a way to merge the data from Eiffel objects into a text template. The template can be either supplied externally or hard-coded into an Eiffel class. The language includes, substitution variables, conditional statements and loops. Substitution variables have a BASH like syntax. Conditionals and loops have an Eiffel like syntax.
The text of this web page was generated by the Eiffel-view repository publisher using the following combination of Evolicity templates:
- doc-config/main-template.html.evol
- doc-config/site-map-content.html.evol
- doc-config/directory-tree-content.html.evol
- doc-config/eiffel-source-code.html.evol
To make an Eiffel class serializable with Evolicity you inherit from class EVOLICITY_SERIALIZEABLE
. Read the class notes for details on how to use. You can also access the substitution engine directly from the shared instance in class EL_MODULE_EVOLICITY_TEMPLATES
Features
- Templates are compiled to an intermediate byte code stored in
.evc
files. This saves time consuming lexing operations on large templates. - Has a class
EVOLICITY_CACHEABLE_SERIALIZEABLE
for caching the substituted output. Useful for generating pages on a web-server.
This contains a few basic classes for constructing an application license manager. The most important is a way to obtain a unique machine ID using a combination of the CPU model name and MAC address either from the network card or wifi card.
The principle developer of Eiffel-loop has developed a sophisticated license management system using RSA public key cryptography, however it is not available as open source. If you are interested to license this system for your company, please contact the developer. It has been used for the My Ching software product.