I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry
I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry, I'm sorry
next systems. Sorry my voice is a bit down, but I'll try to speak as loudly as possible.
So please bear with me. And now without further ado, let's get started. Cool. So who am I?
Well, I am a Christian Kapoor. You can call me AK because that's apparently easier to pronounce.
I am a fourth year, data science and graduate at IIT Monday India. For the past seven
eight months, I have been working as an exchange student at Ubranshwai and to you
President in Germany. I have contributed two times to the Google Summer of Code Program in 2023
and 2024 as a participant under Linux foundation contributing to open printing.
Fun fact, I have one of my mentors here, Tilt Campeter, a huge shout out to him.
Very good. I am also being a speaker at the Ubranshwai 2023 and 2024 and I'm currently
interning at FITEC where I'm developing an AI-based system for information management system,
content management systems, basically sort of a retry will augmented generation pipeline or
act pipeline. But yes, now without further ado, let's get started. So what exactly is
Apple? Well, Apple is a printer application framework. It's basically a C-based framework.
It's a library that allows you to build cups printer applications, cups as in common
unix printing systems. It is a recommended replacement for your traditional
printer drivers. It is a complete plug-and-place system. It allows you to basically has its own
HTTP IPP everywhere server built-in that allows you to go ahead and connect to any possible
printer service in the world. It allows for multiple platforms support as well. It works with
desktop, submitted servers, embedded environments. It is also adaptable to raster graphics,
raster drivers as well. It sort of simplifies your entire printer application development.
Cool. Moving ahead. Before I move on to start talking about scanning in general, how scanning
is getting included into the printer application framework, let's talk a little bit about the
API behind Apple. Well, the API is essentially divided into five main components. The first one
being system, clients, devices, printers, and jobs as can be seen on the block diagram as well.
The system is basically the object that is responsible for managing the entire programming
application framework here. It is sort of the main parent object that we have and it is responsible
for controlling the social listeners and basically logging everything that is out there.
As you can see in the block diagram as well, the system of the task has a parent object to
clients, devices, and printers. Clients talking about client client is another type of object that
helps manage all the client-based operations. Think about any HTTP or IPP get post, post, any type
of request that you can think of. Those are handled by the client object. The device's object
is basically the one that is handling connection with the actual physical printer or the actual
physical scanner. That's the devices object and the printers is basically a virtual object that
allows us that is basically also a parent to the jobs, which manages all the printing jobs,
the queuing of jobs, you know, different printing settings, different everything else. So that is how
it's all, that is a broad overview of the application programming interface of Apple.
Cool. So, I told you about Apple, what Apple is, I told you about the API, but where does
developers role come in? So, what will you have to do as a developer if you want to get started
in Apple? Well, essentially what you will have to do is you will need to be sort of, you
need to sort of write a printer driver. You provide you a complete application programming interface,
a complete library, all that you have to do is sort of refactor your code into some functions,
which are called as callback functions. And then boom, you will have everything working. So, essentially
it's a minimal effort and a maximum efficiency protocol setup. Apple entirely handles all the heavy
lifting for you. So, you have the printer driver code setup, you take the printer driver,
code factor it into a bunch of different callback functions, which are essentially behind the
loop of actually communicating with the printer and Apple handles the request, it handles the
server for you, it handles concurrency, it handles everything related to printing. So, this was
a complete overview of what Apple is, how you will start developing with Apple, what is the
API's Apple? Now, coming on to the main title of the topic, which is the scanning works and
the unified scanning systems in Linux. Well, it starts with same going insane. Now, what is
sane, you might think sane is basically scanner access now easy. It's basically the standard
platform for scanning on Linux and Linux. Essentially what sane provides like what it tries to
provide you is that you will have a front end setup and a back end setup. The front end application
for example, I mentioned a couple of them, simple scan and XK, XXN, they look for back end
drivers, those back end drivers are essentially dynamically loaded libraries and each of those
back end run and support a particular set of scanners. So, what happens during runtime, the front end
tries to contact the back end back end drivers, the back end drivers then sort of contact the scanners
and this is how the entire process is set up. Now, the problem with this setup is essentially that
if you have X number of front ends and Y number of back ends, you will have X into Y total number
of permutations and combinations for this. Because for each front end, you will have to correlate
with a particular back end and you will sort of have to interface. So, that's where sort of
Apple tries to come in and excuse me, Apple tries to come in and sort of give the solution for it.
So, the problem as I already mentioned is let's suppose a particular driver back end has been packaged
into a sandbox application, that sandbox application trying as in a flat back or a snap-based application.
It sort of isolates the back end from that and since the back end has been completely isolated,
the front end does not have any means of loading all the dynamically shared libraries that are
available. So, let's suppose a particular back end has been fixated to a particular SNAP number 1,
then a SNAP number 2. So, front end will have to manually contacts SNAP number 1 and then SNAP number
2. So, each driver being sandbox does not, you know, it is not an optimal solution.
So, it breaks the traditional same architecture and hence the name same going and same.
Cool. So, what is this solution for this? Well, obviously integrating, we talked about
printer applications going, you know, driverless, how about we integrate that scanning architecture
into the printer framework that we have. So, obviously we need to have a proper standard,
that standard that we have is called ESCL. It is provided by organization called MO Priya.
So, MO Priya is the one that provides the ESCL standard. We have settled on the ESCL standard
and what that allows us to do is sort of merge the driverless functionality of different
back ends into one single architecture on the platform. So, you have a multi-function device for
a printer or a scanner, you can easily go ahead and create applications using that.
Uh, it sort of replaces the same interface that was initially there. So, instead of having X
into Y number of permutations, you will now have X plus Y number of permutations out there.
So, that essentially is more optimal as compared to the initial architecture.
So, how do we go about that? Well, I initially talked about Apple, the API overview of Apple.
We already have system clients, devices, printers and jobs. So, we will lead to embed
somewhere, a scanner, object inside this API overview. So, we have printers, we go ahead and
add scanners. We will also have to figure out how to align the ESCL functionality with the
API functionality that is already available. So, creating a scanning API from scratch up to the
papel level will be the final issue that we are going to try to solve here.
Uh, give me a second, I will have some water my throat is down.
Yes. So, now talking back about the MO Priya specs that we have, what these scanning specifications
allow you to do is they define a proper interface, how you will be able to perform scanning.
So, think about like somewhere else in the world thought about this, they thought about creating
an independent sort of solution related to scanning. We come in and the open printing,
we were already doing so for printing, how about we go ahead and merge these two together.
So, we already had a standard for it. The standard was MO Priya's scanning specifications.
It provides sort of a restful API interface and that restful API interface sort of allows you to
communicate between different scanning services that are available in the cloud, either on
device or, you know, on cloud as well. The network device, coming that goes on the protocol that
has followed is MDNS, multicars GNS and DNS as G protocol. We have the scanning being registered
under U scan TCP and U scan TCP. So, these are advertised via TXT records and passed as XML files.
The scan job management is also very easy because we have a couple of different functions
under scan of capabilities, scan of jobs, scan of supplies. These are essentially used
for tracking and you know storing of job requests and anything related to scanning process.
Anything else like different types of scanners, flatbed, plethora, all these types of
scanners are then essentially provided under the MO Priya specifications.
Cool. How about the testing pipeline? Well, the testing pipeline that we have here
has to be divided into two parts. The first part is essentially we have a dummy scanner.
The dummy scanner is essentially a library wherein we have different, you know, we are basically
emulating a scanner where wherein we have everything that a scanner can return as a text file.
So, the text file, all that we have to do is read the text file, stole the store the information
into a particular data structure and internal data structure and we can therefore mimic a real
scanner behavior without actually needing the real hardware. So, that's a successful execution.
And in the end, if everything works out, if all the flats are checked, all that we have to do is go ahead
and return a simple scanned dummy image so that we know that the software is working. It's simple
file that allows you to execute and test the flow of the entire scanning architecture.
But how about the actual thing? How about actually, you know, replacing same. So, that comes
under a different repository. The repository is called papel retrofit. So, retrofit was essentially
a repository that allowed printed drivers or, you know, older printed drivers to be configured
into diabolous emulators. What we've developed ahead and configured this for scene.
So, scene scanner, scanner access, now easy. Now has a configuration for allowing, you know,
legacy scanners to get supported into papel. So, that is about how we are providing
a comprehensive scanner support and sort of providing a robust, you know, sandbox scanner application framework.
So, the printer app, my dear here, the printer, printer emulation was sort of an IPP emulation,
the internet printing services and scanner integration is sort of based on ESL which is a different
protocol as specified by the MO Priya scan specifications. So, all you have to do is sort of interface
managed different interfaces between same. Put the same drivers, the drivers that are actually,
you know, legacy drivers into papel retrofit. papel will manage the application
packaging of the application. It will sort of, you know, distribute the coding drivers that route
there into papel application and then you have, Pingo, you have a sandbox scanner application out there.
Cool. So, that was it. You can go ahead and connect with me on LinkedIn and we are, you can also
go ahead. I have put the slides up there on, on my presentation link as well. So, you can go ahead
and follow the GitHub and the current WIP, the work in progress, pull requests is actually going ahead.
So, happy to connect with you all. Thank you. I hope you all have a wonderful time here in
Brussels and for us. Thank you. Thanks a lot.