The Ada Database Objects is a library that allows to easily access database contents for Ada applications.
Tag - Ada
Ada Database Objects 1.0.0 is available
By Stephane Carrez2014-04-27 15:52:00
New debian repository with Ada packages
By Stephane Carrez2014-04-06 15:54:30
I've created and setup a Debian repository to give access to several Debian packages for several Ada projects that I manage. The goal is to provide some easy and ready to use packages to simplify and help in the installation of various Ada libraries. The Debian repository includes the binary and development packages for Ada Utility Library, Ada EL, Ada Security, and Ada Server Faces.
Access to the repository
The repository packages are signed with PGP. To get the verification key and setup the apt-get
tool, you should run the following command:
wget -O - http://apt.vacs.fr/apt.vacs.fr.gpg.key | sudo apt-key add -
Ubuntu 13.04 Raring
A first repository provides Debian packages targeted at Ubuntu 13.04 raring. They are built with the gnat-4.6
package and depend on libaws-2.10.2-4
and libxmlada4.1-dev
. Add the following line to your /etc/apt/sources.list
configuration:
deb http://apt.vacs.fr/ubuntu-raring raring main
Ubuntu 12.04 LTS Precise
A second repository contains the Debian packages for Ubuntu 12.04 precise. They are built with the gnat-4.6
package and depend on libaws-2.10.2-1
and libxmlada4.1-dev
. Add the following line to your /etc/apt/sources.list
configuration:
deb http://apt.vacs.fr/ubuntu-precise precise main
Installation
Once you've added the configuration line, you can install the packages:
sudo apt-get update
sudo apt-get install libada-asf1.0
For the curious, you may browse the repository here.
Ada Server Faces 1.0.0 is available
By Stephane Carrez2014-04-05 19:30:53
Ada Server Faces is a framework that allows to create Web applications using the same design patterns as the Java Server Faces (See JSR 252, JSR 314, or JSR 344). The presentation pages benefit from the Facelets Web template system and the runtime takes advantages of the Ada language safety and performance.
A new release is available with several features that help writing online applications:
- Add support for Facebook and Google+ login
- Javascript support for popup and editable fields
- Added support to enable/disable mouseover effect in lists
- New EL function util:iso8601
- New component <w:autocomplete> for input text with autocompletion
- New component <w:gravatar> to render a gravatar image
- New component <w:like> to render a Facebook, Twitter or Google+ like button
- New component <w:panel> to provide collapsible div panels
- New components <w:tabView> and <w:tab> for tabs display
- New component <w:accordion> to display accordion tabs
- Add support for JSF <f:facet>, <f:convertDateTime>, <h:doctype>
- Support for the creation of Debian packages
You can try the online demonstration of the new widget components and download this new release at http://download.vacs.fr/ada-asf/ada-asf-1.0.0.tar.gz
Ada Security 1.1.0 is available
By Stephane Carrez2014-03-22 14:07:08
The Ada Security library provides a security framework which allows applications to define and enforce security policies. This framework allows users to authenticate by using OpenID Authentication 2.0, OAuth 2.0 or OpenID Connect protocols.
The new version brings the following improvements:
- New authentication framework that supports OpenID, OpenID Connect, OAuth, Facebook login
- AWS demo for a Google, Yahoo!, Facebook, Google+ authentication
- Support to extract JSON Web Token (JWT)
- Support for the creation of Debian packages
The library can be downloaded at http://download.vacs.fr/ada-security/ada-security-1.1.0.tar.gz
Ada EL 1.5.0 is available
By Stephane Carrez2014-03-19 21:55:38
Ada EL is a library that implements an expression language similar to JSP and JSF Unified Expression Languages (EL). The expression language is the foundation used by Java Server Faces and Ada Server Faces to make the necessary binding between presentation pages in XML/HTML and the application code written in Java or Ada.
The presentation page uses an UEL expression to retrieve the value provided by some application object (Java or Ada). In the following expression:
#{questionInfo.question.rating}
the EL runtime will first retrieve the object registered under the name questionInfo and look for the question and then rating data members. The data value is then converted to a string.
The new release is available for download at http://download.vacs.fr/ada-el/ada-el-1.5.0.tar.gz
This version brings the following improvements:
- EL parser optimization (20% to 30% speed up)
- Support for the creation of Debian packages
Ada Utility Library 1.7.0 is available
By Stephane Carrez2014-02-09 11:07:13
Ada Utility Library is a collection of utility packages for Ada 2005. A new version is available which provides:
- Added a text and string builder
- Added date helper operations to get the start of day, week or month time
- Support XmlAda 2013
- Added Objects.Datasets to provide list beans (lists of row/column objects)
- Added support for shared library loading
- Support for the creation of Debian packages
- Update Ahven integration to 2.3
- New option -r <test> option for the unit test harness to execute a single test
- Port on FreeBSD
It has been compiled and ported on Linux, Windows, Netbsd, FreeBSD (gcc 4.6, GNAT 2013, gcc 4.7.3). You can download this new version at http://download.vacs.fr/ada-util/ada-util-1.7.0.tar.gz.
Installation of FreeBSD for a jenkins build node
By Stephane Carrez2013-12-31 14:43:19
A few days ago, I did a fresh installation of my Jenkins build environment for my Ada projects (this was necessary after a disk crash on my OVH server). I took this opportunity to setup a FreeBSD build node. This article is probably incomplete but tends to collect a number of tips for the installation.
Virtual machine setup
The FreeBSD build node is running within a QEMU virtual machine. The choice of the host turns out to be important since not all versions of QEMU are able to run a FreeBSD/NetBSD or OpenBSD system. There is a bug in QEMU PCI emulation that prevents the NetBSD network driver to recognize the emulated network cards (See qemu-kvm 1.0 breaks openbsd, netbsd, freebsd). Ubuntu 12.04 and 12.10 provide a version of Qemu that has the problem. This is solved in Ubuntu 13.04, so this is the host linux distribution that I've installed.
For the virtual machine disk, I've setup some LVM partition on the host as follows:
sudo lvcreate -Z n -L 20G -n freebsd vg01
this creates a disk volume of 20G and label it freebsd
.
The next step is to download the FreeBSD Installation CD (I've installed the FreeBSD-10.0-RC2). To manage the virtual machines, one can use the virsh
command but the virt-manager
graphical front-end provides an easier setup.
sudo virt-manager
The virtual machine is configured with:
- CPU: x86_64
- Memory: 1048576
- Disk type: raw, source: /dev/vg01/freebsd
- Network card model: e1000
- Boot on the CD image
After the virtual machine starts, the FreeBSD installation proceeds (it was so simple that I took no screenshot at all).
Post installation
After the FreeBSD system is installed, it is almost ready to be used. Some additional packages are added by using the pkg install
command (which is very close to the Debian apt-get
command).
pkg install jed
pkg install sudo bash tcpdump
By default the /proc
is not setup and some application like the OpenJDK need to access it. Edit the file /etc/fstab
and add the following lines:
fdesc /dev/fd fdescfs rw 0 0
proc /proc procfs rw 0 0
and mount the new partitions with:
mount -a
GNAT installation
The FreeBSD repository provides some packages for Ada development. They are easily installed as follows:
pkg install gmake
pkg install gnat-aux-20130412_1 gprbuild-20120510
pkg install xmlada-4.4.0.0_1 zip-ada-45
pkg install aws-3.1.0.0
pkg install gdb-7.6.1_1
After the installation, change the path and setup the ADA_PROJECT_PATH
variables to be able to use gnatmake
:
export PATH=/usr/local/gcc-aux/bin:$PATH
export ADA_PROJECT_PATH=/usr/local/lib/gnat
Jenkins slave node installation
Jenkins uses a Java application that runs on each build node. It is necessary to install some Java JRE. To use subversion on the build node, we must make sure to install some 1.6 version since the 1.8 and 1.7 version have incompatibilities with the Jenkins master. The following packages are necessary:
pkg install openjdk6-jre-b28_7
pkg install subversion-1.6.23_2
Jenkins needs a user to connect to the build node. The user is created by the adduser command. The Jenkins user does not need any privilege.
Jenkins master will use SSH
to connect to the slave node. During the first connection, it installs the slave.jar
file which manages the launch of remote builds on the slave. For the SSH
connection, the password authentication is possible but I've setup a public key authentication that I've setup on the FreeBSD node by using ssh-copy-id
.
At this stage, the FreeBSD build node is ready to be added on the Jenkins master node (through the Jenkins UI Manage Jenkins/Manage Nodes).
MySQL Installation
The MySQL installation is necessary for some of my projects. This is easily done as follows:
pkg install mysql55-server-5.5.35 mysql55-client-5.5.35
Then add the following line to /etc/rc.conf
mysql_enable="YES"
and start the server manyally:
/usr/local/etc/rc.d/mysql-server onestart
The database tables are setup during the first start.
Other packages
Some packages that are necessary for some projets:
pkg install autoconf-2.69 curl-7.33.0_1
pkg install ImageMagick-nox11-6.8.0.7_3
Jenkins jobs
The jenkins master is now building 7 projects automatically for FreeBSD 10: FreeBSD Ada Jobs
Ada Web Application 0.3.0 is available
By Stephane Carrez2013-02-15 21:29:00
Ada Web Application is a framework to build web applications.
- AWA uses Ada Server Faces for the web framework. This framework is using several patterns from the Java world such as Java Server Faces and Java Servlets.
- AWA provides a set of ready to use and extendable modules that are common to many web application. This includes managing the login, authentication, users, permissions.
- AWA uses an Object Relational Mapping that helps in writing Ada applications on top of MySQL or SQLite databases. The ADO framework allows to map database objects into Ada records and access them easily.
- AWA is a model driven engineering framework that allows to design the application data model using UML and generate the corresponding Ada code.
The new version of AWA provides:
- New jobs plugin to manage asynchronous jobs,
- New storage plugin to manage a storage space for application documents,
- New votes plugin to allow voting on items,
- New question plugin to provide a general purpose Q&A.
AWA can be downloaded at http://code.google.com/p/ada-awa/downloads/list
A live demonstration of various features provided by AWA is available at http://demo.vacs.fr/atlas
Dynamo 0.6.0 is available
By Stephane Carrez2013-02-10 22:15:26
Dynamo is a tool to help developers write some types of Ada Applications which use the Ada Server Faces or Ada Database Objects frameworks. Dynamo provides several commands to perform one specific task in the development process: creation of an application, generation of database model, generation of Ada model, creation of database.
The new version of Dynamo provides:
- A new command
build-doc
to extract some documentation from the sources, - The generation of MySQL and SQLite schemas from UML models,
- The generation of Ada database mappings from UML models,
- The generation of Ada beans from the UML models,
- A new project template for command line tools using ADO,
- A new distribution command to merge the resource bundles.
The most important feature is probably the Ada code generation from a UML class diagram. With this, you can design the data model of an application using ArgoUML and generate the Ada model files that will be used to access the database easily through the Ada Database Objects library. The tool will also generate the SQL database schema so that everything is concistent from your UML model, to the Ada implementation and the database tables.
The short tutorial below indicates how to design a UML model with ArgoUML, generate the Ada model files, the SQL files and create the MySQL database.
The Dynamo tool is available at http://code.google.com/p/ada-gen.
To build Dynamo, you will need:
Ada Database Objects 0.4.0 is available
By Stephane Carrez2013-02-10 21:42:26
The Ada Database Objects is an Object Relational Mapping for the Ada05 programming language. It allows to map database objects into Ada records and access databases easily. Most of the concepts developped for ADO come from the Java Hibernate ORM. ADO supports MySQL and SQLite databases.
The new version brings:
- Support to reload query definitions,
- It optimizes session factory implementation,
- It allows to customize the MySQL database connection by using MySQL SET
This version can be downloaded at http://code.google.com/p/ada-ado/downloads/list.
Ada Server Faces 0.5.0 is available
By Stephane Carrez2013-02-06 22:15:45
Ada Server Faces is an Ada implementation of several Java standard web frameworks.
- The Java Servlet (JSR 315) defines the basis for a Java application to be plugged in Web servers. It standardizes the way an HTTP request and HTTP response are represented. It defines the mechanisms by which the requests and responses are passed from the Web server to the application possibly through some additional filters.
- The Java Unified Expression Language (JSR 245) is a small expression language intended to be used in Web pages. Through the expressions, functions and methods it creates the link between the Web page template and the application data identified as beans.
- The Java Server Faces (JSR 314 and JSR 344) is a component driven framework which provides a powerful mechanism for Web applications. Web pages are represented by facelet views (XHTML files) that are modelized as components when a request comes in. A lifecycle mechanism drives the request through converters and validators triggering events that are received by the application. Navigation rules define what result view must be rendered and returned.
Ada Server Faces gives to Ada developers a strong web framework which is frequently used in Java Web applications. On their hand, Java developers could benefit from the high performance that Ada brings: apart from the language, they will use the same design patterns.
The new version of Ada Server Faces is available and brings the following changes:
- The Security packages was moved in a separate project: Ada Security,
- New demo to show OAuth and Facebook API integration,
- Integrated jQuery 1.8.3 and jQuery UI 1.9.2,
- New converter to display file sizes,
- Javascript support was added for click-to-edit behavior,
- Add support for JSF session beans,
- Add support for servlet error page customization,
- Allow navigation rules to handle exceptions raised by Ada bean actions,
- Support the JSF 2.2 conditional navigation,
- New functions fn:escapeXml and fn:replace.
The new version can be downloaded on the Ada Server Faces project page. A live demo is available at http://demo.vacs.fr/demo.
Ada Security 1.0.0 is available
By Stephane Carrez2013-01-20 18:04:03
Ada Security is a security framework which allows web applications to define and enforce security policies. The framework allows users to authenticate by using OpenID Authentication 2.0. Ada Security also defines a set of client methods for using the OAuth 2.0 protocol.
- A security policy manager defines and implements the set of security rules that specify how to protect the system or the resources.
- A user is authenticated in the application. Authentication can be based on OpenID or another system.
- A security context holds the contextual information that allows the security policy manager to verify that the user is allowed to access the protected resource according to the policy rules.
The Ada Security framework can be downloaded at Ada Security project page.
The framework is the core security framework used by Ada Server Faces and Ada Web Application to protect access to resources.
Ada Utility Library 1.6.0 is available
By Stephane Carrez2012-12-26 21:24:47
Ada Utility Library is a collection of utility packages for Ada 2005. A new version is available which provides:
- Support for HTTP clients (curl, AWS, ...)
- Support for REST APIs using JSON
- New operations To_JSON and From_JSON for easy object map serialization
- Added a listeners to help implementing the observer/listener design patterns
- Added support for wildcard mapping in serialization framework
- New option -d <dir> for the unit test harness to change the working directory,
- New example facebook.adb to show the REST support.
It has been compiled and ported on Linux, Windows and Netbsd (gcc 4.4, GNAT 2011, gcc 4.6.3). You can download this new version at http://code.google.com/p/ada-util/downloads/list.
Atlas, the Ada Web Application demonstrator
By Stephane Carrez2012-05-22 21:45:00 2 comments
AWA is a framework to build web applications on top of various robust components.
- AWA uses Ada Server Faces for the web framework. This framework is using several patterns from the Java world such as Java Server Faces and Java Servlets.
- AWA is architectured arround modules and plugins that allow to build, re-use and extend modules made of Ada code, Web pages or Javascript.
- AWA provides a set of ready to use and extendable plugins that are common to many web application. This includes managing the login, authentication, users, permissions, a mail plugin, a blog plugin, a Javascript light editor.
- AWA uses an Object Relational Mapping that helps in writing Ada applications on top of MySQL or SQLite databases. The ADO framework allows to map database objects into Ada records and access them easily.
- AWA integrates a configurable event service which allows plugins to easily interact and connect with each other (either synchronously or asynchronously). The event service provided by AWA is heavily inspired from the Java Message Service.
To learn more on how to create easily a web application using AWA, look at the 4 minutes video.
The Atlas Web Application Demonstrator is a demonstration of an application using this AWA framework. Sources of the Atlas demonstrator are available on GitHub project: Atlas.
Dynamo 0.5.0 is available
By Stephane Carrez2012-05-20 20:40:05
Dynamo is a tool to help developers write an Ada Web Application using the Ada Server Faces and the Ada Database Objects frameworks. Dynamo provides several commands to perform one specific task in the development process: creation of an application, generation of database model, generation of Ada model, creation of database.
The new version of Dynamo provides:
- Support multi-line comments in XML mappings,
- Generate List_Bean types for the XML mapped queries,
- Add support for Ada enum generation,
- Add test template generation,
- Add AWA service template generation,
- Add support for blob model mapping,
- New command 'add-ajax-form', 'add-query', 'dist', 'create-plugin'
The Dynamo tool is available at http://code.google.com/p/ada-gen. To build Dynamo, you will need:
Ada Database Objects 0.3.0 is available
By Stephane Carrez2012-05-12 20:34:28
The Ada Database Objects is an Object Relational Mapping for the Ada05 programming language. It allows to map database objects into Ada records and access databases easily. Most of the concepts developped for ADO come from the Java Hibernate ORM. ADO supports MySQL and SQLite databases.
The new version brings:
- Support to update database records when a field is really modified,
- Customization of the SQLite database connection by using SQLite PRAGMAs,
- Escape of MySQL or SQLite reserved keywords,
- Support for blob type.
This version can be downloaded at http://code.google.com/p/ada-ado/downloads/list.
Ada Server Faces 0.4.0 is available
By Stephane Carrez2012-05-11 21:32:08
Ada Server Faces is a web framework which uses the Java Server Faces design patterns (See JSR 252, JSR 314 or the latest one the JSR 344).
This new version brings a serious step ahead towards JSF compatibility. This new version provides:
- Support for shared or static build configuration,
- Support for file upload,
- New components
<h:inputFile>, <f:metadata>, <f:viewParam>, <f:viewAction>
, - New EL function util:hasMessage,
- ASF now Implements the JSF phase events and phase listeners,
- Implements the JSF/Ruby on Rails flash context,
- Adds the pre-defined JSF beans:
initParam, flash
, - Support for locales and honors the Accept-Language,
- New demos are available in French and English
It has been compiled and ported on Linux, Windows and Netbsd (gcc 4.4, GNAT 2011, gcc 4.6.2). You can download this new version at http://code.google.com/p/ada-asf/downloads/list.
A live demo is available at: http://demo.vacs.fr.
Feel free to play with the OpenID stuff!!!
Ada Utility Library 1.5.0 is available
By Stephane Carrez2012-05-09 21:22:15
Ada Utility Library is a collection of utility packages for Ada 2005. A new version is available which provides:
- Concurrent fifo queues and arrays
- Changed Objects.Maps to use a String instead of an Unbounded_String as the key
- Support for shared or static build configuration
- Implementation of input/output/error redirection to a file for process launch
It has been compiled and ported on Linux, Windows and Netbsd (gcc 4.4, GNAT 2011, gcc 4.6.2). You can download this new version at http://code.google.com/p/ada-util/downloads/list.
Process creation in Java and Ada
By Stephane Carrez2012-03-16 22:18:07
When developping and integrating applications together it is often useful to launch an external program. By doing this, many integration and implementation details are simplified (this integration technic also avoids license issues for some open source software integration).
This article explains how to launch an external program in Java and Ada and be able to read the process output to get the result.
Java Process Creation
The process creation is managed by the ProcessBuilder
Java class. An instance of this class holds the necessary information to create and launch a new process. This includes the command line and its arguments, the standard input and outputs, the environment variables and the working directory.
The process builder instance is created by specifying the command and its arguments. For this the constructor accepts a variable list of parameters of type String
.
import java.lang.ProcessBuilder;
...
final String cmd = "ls";
final String arg1 = "-l";
final ProcessBuilder pb = new ProcessBuilder(cmd, arg1);
When the process builder is initialized, we can invoke the start
method to create a new process. Each process is then represented by an instance of the Process
class. It is possible to invoke start
serveral times and each call creates a new process. It is necessary to catch the IOException
which can be raised if the process cannot be created.
import java.lang.Process;
...
try {
final Process p = pb.start();
...
} catch (final IOException ex) {
System.err.println("IO error: " + ex.getLocalizedMessage());
}
The Process
class gives access to the process output through an input stream represented by the InputStream
class. With this input stream, we can read what the process writes on its output. We will use a BufferedReader
class to read that output line by line.
import java.io.*;
...
final InputStream is = p.getInputStream();
final BufferedReader reader = new BufferedReader(new InputStreamReader(is));
By using the readLine
method, we can read a new line after each call. Once the whole stream is read, we have to close it. Closing the BufferedReader
will close the InputStream
associated with it.
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
Last step is to wait for the process termination and get the exit status: we can use the waitFor
method. Since this method can be interrupted, we have to catch the InterruptedException
.
try {
...
final int exit = p.waitFor();
if (exit != 0) {
System.err.printf("Command exited with status %d\n", exit);
}
} catch (final InterruptedException ex) {
System.err.println("Launch was interrupted...");
}
You can get the complete source from the file: Launch.java
Ada Process Creation
For the Ada example, we will create an application that invokes the nslookup
utility to resolve a set of host names. The list of host names is provided to nslookup
by writing on its standard input and the result is collected by reading the output.
We will use the Pipe_Stream
to launch the process, write on its input and read its output at the same time. The process is launched by calling the Open
procedure and specifying the pipe redirection modes: READ
is for reading the process output, WRITE
is for writing to its input and READ_WRITE
is for both.
with Util.Processes;
with Util.Streams.Pipes;
...
Pipe : aliased Util.Streams.Pipes.Pipe_Stream;
Pipe.Open ("nslookup", Util.Processes.READ_WRITE);
We can read or write on the pipe directly but using a Print_Stream
to write the text and the Buffered_Stream
to read the result simplifies the implementation. Both of them are connected to the pipe: the Print_Stream
will use the pipe output stream and the Buffered_Stream
will use the pipe input stream.
with Util.Streams.Buffered;
with Util.Streams.Texts;
...
Buffer : Util.Streams.Buffered.Buffered_Stream;
Print : Util.Streams.Texts.Print_Stream;
begin
-- Write on the process input stream
Buffer.Initialize (null, Pipe'Unchecked_Access, 1024);
Print.Initialize (Pipe'Unchecked_Access);
Before reading the process output, we send the input data to be solved by the process. By closing the print stream, we also close the pipe output stream, thus closing the process standard input.
Print.Write ("www.google.com" & ASCII.LF);
Print.Write ("set type=NS" & ASCII.LF);
Print.Write ("www.google.com" & ASCII.LF);
Print.Write ("set type=MX" & ASCII.LF);
Print.Write ("www.google.com" & ASCII.LF);
Print.Close;
We can now read the program output by using the Read
procedure and get the result in the Content
string. The Close
procedure is invoked on the pipe to close the pipe (input and output) and wait for the application termination.
Content : Unbounded_String;
-- Read the 'nslookup' output.
Buffer.Read (Content);
Pipe.Close;
Once the process has terminated, we can get the exit status by using the Get_Exit_Status
function.
Ada.Text_IO.Put_Line ("Exit status: "
& Integer'Image (Pipe.Get_Exit_Status));
References
launch.adb
util-streams-pipes.ads
util-streams-buffered.ads
util-streams-texts.ads
Ada Server Faces 0.3.0 is available
By Stephane Carrez2012-02-14 21:32:26
Ada Server Faces is a web framework which uses the Java Server Faces design patterns (See JSR 252 and JSR 314).
JSF and ASF use a component-based model for the design and implementation of a web application. The presentation layer is implemented using XML or XHTML files and the component layer is implemented in Ada 05 for ASF and in Java for JSF.
A new version of ASF is available which provides:
- New components used in HTML forms (textarea, select, label, hidden),
- New components for the AJAX framework,
- Support for dialog boxes with jQuery UI,
- Pre-defined beans in ASF contexts: param, header,
- A complete set of example and documentation for each tag.
It has been compiled and ported on Linux, Windows and Netbsd (gcc 4.4, GNAT 2011, gcc 4.6.2). You can download this new version at http://code.google.com/p/ada-asf/downloads/list.
A live demo is available at: http://demo.vacs.fr.
Tags
- Facelet
- NetBSD
- framework
- Mysql
- generator
- firefox
- application
- interview
- ReadyNAS
- Security
- binutils
- ELF
- JSF
- Java
- bacula
- Tutorial
- Apache
- COFF
- collaboration
- planning
- project
- upgrade
- AWA
- C
- EL
- J2EE
- UML
- php
- symfony
- Ethernet
- Ada
- FreeBSD
- Go
- KVM
- MDE
- Proxy
- STM32
- Servlet
- backup
- lvm
- multiprocessing
- web
- Bean
- Jenkins
- release
- OAuth
- ProjectBar
- REST
- Rewrite
- Sqlite
- Storage
- USB
- Ubuntu
- bison
- cache
- crash
- Linux
- gcc
- performance
- lex
Subscribe
Learn more about Ada
- ada-lang.io (General)
- Ada 2022 LRM (Reference)
- Ada Programming (Book)
- Ada-Europe (Organization)
- Ada-France (Organization)
- Ada Resource Association (Organization)
- Ada Forge (Libraries & Tools)
- AdaCore (Company)