* Speakup in userspace @ Tyler Spivey ` Luke Yelavich ` Doug Sutherland 0 siblings, 2 replies; 16+ messages in thread From: Tyler Spivey @ UTC (permalink / raw) To: speakup -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 I have some oppinions on this, and I'd like some input on how possible this is. I'm not a very good C coder, but that's less important. I'm hoping, if a user space screen reader is implemented, that it can be extended; e.g. perl, python, etc. The problems with this seems to be: 1. How can a userspace program get extended key sequences such as caps lock+i? Under Linux, I don't think that an API exists for this. 2. What about console output? There is /dev/vcs[a]x, but polling that a few times a second would be inefficient if the system was under load. The rest is relatively easy - Linux already has serial port devices if needed, and also speech dispatcher communications. I see no reason why a smaller subset of speakup (just an API to get keyboard/console input/output) couldn't be included into the kernel - it probably wouldn't change much, compared to the user-space adapter that would be using that API. This is similar to what the Jupiter project is doing; although that's all in-kernel. any thoughts? - - Tyler -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (FreeBSD) iD8DBQFGeOZxTsjaYASMWKQRAt/WAKCsG0jwPECPii4+yQX6i4gO02UdXQCgmmuY e5jsV1bQGCZd+8LLWjwTHTs= =xOzu -----END PGP SIGNATURE----- ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Speakup in userspace Speakup in userspace Tyler Spivey @ ` Luke Yelavich ` Samuel Thibault ` Doug Sutherland 1 sibling, 1 reply; 16+ messages in thread From: Luke Yelavich @ UTC (permalink / raw) To: speakup -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On Wed, Jun 20, 2007 at 06:33:54PM EST, Tyler Spivey wrote: > 1. How can a userspace program get extended key sequences such as caps > lock+i? Under Linux, I don't think that an API exists for this. THis is possible, using the uinput module from the kernel. > 2. What about console output? There is /dev/vcs[a]x, but polling that > a few times a second would be inefficient if the system was under load. BrlTTY uses this, and does so quite efficiently. As it is, if a user wants to run speakup and BrlTTY, there could be a problem with both programs wanting to share the same devices. THere has in fact been discussion on the BrlTTY mailing list about extending BrlTTY to have speech/screen reader via keyboard functionality. Patches would be accepted for BrlTTY to do this. - -- Luke Yelavich GPG key: 0xD06320CE (http://www.themuso.com/themuso-gpg-key.txt) Email & MSN: themuso@themuso.com Jabber: themuso@jabber.org.au -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iD8DBQFGePnGjVefwtBjIM4RAnMNAJ43ASbKihiYyojkrDJLvfC4WdMCWgCgjCXf slLR/lzF7/uHbYGy9Cpgl5E= =xftW -----END PGP SIGNATURE----- ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Speakup in userspace ` Luke Yelavich @ ` Samuel Thibault ` Luke Yelavich 0 siblings, 1 reply; 16+ messages in thread From: Samuel Thibault @ UTC (permalink / raw) To: Speakup is a screen review system for Linux. Luke Yelavich, le Wed 20 Jun 2007 19:56:22 +1000, a écrit : > -----BEGIN PGP SIGNED MESSAGE----- > On Wed, Jun 20, 2007 at 06:33:54PM EST, Tyler Spivey wrote: > > 1. How can a userspace program get extended key sequences such as caps > > lock+i? Under Linux, I don't think that an API exists for this. > > THis is possible, using the uinput module from the kernel. And it is tedious: you have to grab the keyboard, and re-simulate keypresses you don't interpret. > > 2. What about console output? There is /dev/vcs[a]x, but polling that > > a few times a second would be inefficient if the system was under load. > > BrlTTY uses this, For simulating keypresses, yes, but not for stealing key combinations. Samuel ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Speakup in userspace ` Samuel Thibault @ ` Luke Yelavich ` Samuel Thibault 0 siblings, 1 reply; 16+ messages in thread From: Luke Yelavich @ UTC (permalink / raw) To: speakup -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On Wed, Jun 20, 2007 at 07:59:52PM EST, Samuel Thibault wrote: > Luke Yelavich, le Wed 20 Jun 2007 19:56:22 +1000, a écrit : > > -----BEGIN PGP SIGNED MESSAGE----- > > On Wed, Jun 20, 2007 at 06:33:54PM EST, Tyler Spivey wrote: > > > 1. How can a userspace program get extended key sequences such as caps > > > lock+i? Under Linux, I don't think that an API exists for this. > > > > THis is possible, using the uinput module from the kernel. > > And it is tedious: you have to grab the keyboard, and re-simulate > keypresses you don't interpret. Ok. Was unaware of this. > > > 2. What about console output? There is /dev/vcs[a]x, but polling that > > > a few times a second would be inefficient if the system was under load. > > > > BrlTTY uses this, > > For simulating keypresses, yes, but not for stealing key combinations. I was referring to reading the console, which is what I think Tyler was referring to. - -- Luke Yelavich GPG key: 0xD06320CE (http://www.themuso.com/themuso-gpg-key.txt) Email & MSN: themuso@themuso.com Jabber: themuso@jabber.org.au -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iD8DBQFGeP1CjVefwtBjIM4RAhUsAKDxhDCdDMqUMkB/ExeZ4yJqLUtwbACggx2l UDG2iVT0iEMWnYE21e8q+aQ= =Sgb8 -----END PGP SIGNATURE----- ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Speakup in userspace ` Luke Yelavich @ ` Samuel Thibault 0 siblings, 0 replies; 16+ messages in thread From: Samuel Thibault @ UTC (permalink / raw) To: Speakup is a screen review system for Linux. Luke Yelavich, le Wed 20 Jun 2007 20:11:14 +1000, a écrit : > > > > 2. What about console output? There is /dev/vcs[a]x, but polling that > > > > a few times a second would be inefficient if the system was under load. > > > > > > BrlTTY uses this, > > > > For simulating keypresses, yes, but not for stealing key combinations. > > I was referring to reading the console, which is what I think Tyler was > referring to. Ooops, sorry, yes. brltty polls every 40ms, and it seems to be fine. That said, I have in my todo-list a request for i-notification that would make this fare more efficient. Samuel ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Speakup in userspace Speakup in userspace Tyler Spivey ` Luke Yelavich @ ` Doug Sutherland ` Samuel Thibault 1 sibling, 1 reply; 16+ messages in thread From: Doug Sutherland @ UTC (permalink / raw) To: Speakup is a screen review system for Linux. A few useful references http://linuxconsole.sourceforge.net/input/input.html Using the Input Subsystem - No matter how many buttons an input device has or how many kinds of events it can generate, you can now work with it from user space. http://www.linuxjournal.com/article/6429 Here is part one of that article series http://www.linuxjournal.com/article/6396 Here is a useful way to browse around in the input driver source http://www.gelato.unsw.edu.au/lxr/source/drivers/input/?a=i386 This POC /dev/input/event/* keylogger is interesting http://archives.neohapsis.com/archives/sf/linux/2005-q3/0065.html This is an interesting simple example driver code for input driver http://kernel.org/pub/linux/kernel/people/landley/kdocs/Documentation/input/input-programming.txt This is old but useful due to its description of the bigger picture of keyboard scancodes and related stuff http://www.linuxjournal.com/article/1080 As for console output, just as with the Input Driver redesign, it is changing quicky and they are trying to clean up the architecture. I suppose the first thing would be to see how the console is changing and where it's heading architecture wise. I have a lot of interest in this for other projects and will be doing some investigation. One thing I have in mind is implementing what will basically be the equivalent of a VT100 terminal using a small microcontroller, where input is an attached keyboard and output is speech. Since there already is serial console, a means to implement a terminal with keyboard input and speech output would be quite useful. Rather than connecting a machine to serial port for console, you'd plug in a dongle which would have both a keyboard port and an output port for speech, or possibly even speech hardware in the actual dongle. I'll share some more info on this idea a bit later. -- Doug ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Speakup in userspace ` Doug Sutherland @ ` Samuel Thibault ` Doug Sutherland 0 siblings, 1 reply; 16+ messages in thread From: Samuel Thibault @ UTC (permalink / raw) To: Speakup is a screen review system for Linux. Hi, Doug Sutherland, le Wed 20 Jun 2007 06:20:51 -0500, a écrit : > A few useful references > > http://linuxconsole.sourceforge.net/input/input.html Yes and no. What we want is stealing some keypresses, but not all of them. The way to achieve this with input is currently to grab the physical device, and re-emulate the keypresses we don't want in a uinput device, which is quite tedious. Samuel ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Speakup in userspace ` Samuel Thibault @ ` Doug Sutherland ` Samuel Thibault 0 siblings, 1 reply; 16+ messages in thread From: Doug Sutherland @ UTC (permalink / raw) To: Speakup is a screen review system for Linux. Samuel said: What we want is stealing some keypresses, but not all of them. The way to achieve this with input is currently to grab the physical device, and re-emulate the keypresses we don't want in a uinput device, which is quite tedious. Fair enough. But it would seem that the components that make up a specialized system like this need to be decoupled rather than monolithic, for many reasons, one being allowance for alternative modalities. What would be very useful I think, would be if those "stolen" keypresses could land in a /dev/input event queue. This decouples the input device from what is done what those stolen keypresses. It would also allow for some other modality, not PC keyboard, to generate those same events by some other means. Consider someone who cannot type for whatever reason, who needs an alternative interface other than the keyboard. The Input Driver may be tedious but it's uniform and modular. If we are talking about potential user space versus kernel space, then it would make some sense to dissect the overall functionality into layers and separate them, then figure out what needs to remain in the kernel, ideally as somewhat "atomic" functionality, probably as several drivers instead of one, then think about how in user space an application might use those. The approach of putting it all in the kernel has quite a few detriments, probably the largest being the need for constant maintenance as the kernel changes. One small example, although it may be tedious to steal key presses and then re-implement them, once that is done as a separate driver on its own, then very little should change from kernel to kernel version. One the other end of things, console output, there is even greater need for layering and atomicity of function, since what used to be a serial port is functionally the same now but the protocols and hardware to implement it (usb serial) is completely different. It might be a good idea to think in terms of what I would call vertical protoype if we want to explore user space versus kernel. What I mean by that is rather than thinking of how the entire new design would work, take a small cross-section of the whole and try re-designing a simple example that traverses from input to output. In commercial, in-house, or contract software this approach is essential (vertical prototype) to ensure that the architecture is sound before attempting to re-design the whole mess. The need to steal keypresses is not new or unique. It makes a lot of sense to pay close attention to the re-architecture of linux input method and console projects. Even if it's tedious or we don't like how some things are done, throwing it out and going direct to hardware digs a hole that makes it hardware specific to x86 and most likely a never ending cycle of maintenance so it doesn't break as the kernel evolves. Thinking about the whole process in abstraction somewhat like the model-view-controller design pattern would make sense. Stealing the keypresses should be independent and atomically abstracted from what those keypresses do. -- Doug ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Speakup in userspace ` Doug Sutherland @ ` Samuel Thibault ` Christopher Moore 0 siblings, 1 reply; 16+ messages in thread From: Samuel Thibault @ UTC (permalink / raw) To: Speakup is a screen review system for Linux. Doug Sutherland, le Wed 20 Jun 2007 07:40:32 -0500, a écrit : > The need to steal keypresses is not new or unique. It makes a lot > of sense to pay close attention to the re-architecture of linux input > method and console projects. Even if it's tedious or we don't like > how some things are done, throwing it out and going direct to > hardware digs a hole that makes it hardware specific to x86 and > most likely a never ending cycle of maintenance so it doesn't > break as the kernel evolves. I didn't mean we should go hardware :) That's why I said "Yes and No": Yes input is the way to go, but No it's not ready yet, we still need a fine way to steal keypresses. Samuel ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Speakup in userspace ` Samuel Thibault @ ` Christopher Moore ` Samuel Thibault ` Albert E. Sten-Clanton 0 siblings, 2 replies; 16+ messages in thread From: Christopher Moore @ UTC (permalink / raw) To: Speakup is a screen review system for Linux. This has been an interesting thread. Regarding input devices, could a user space speakup be controlled from a external numeric keypad plugged into a usb port? This would depend on whether we could identify the key presses as coming from the external keypad. brltty has a stable approach for gethering console output. So one of the missing pieces is a way to control speech output. If key presses on an external keypad could be routed to speakup and not available to other applications, we might have a relatively simple solution. Chris Chris ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Speakup in userspace ` Christopher Moore @ ` Samuel Thibault ` Albert E. Sten-Clanton 1 sibling, 0 replies; 16+ messages in thread From: Samuel Thibault @ UTC (permalink / raw) To: Speakup is a screen review system for Linux. Christopher Moore, le Wed 20 Jun 2007 11:40:08 -0400, a écrit : > This has been an interesting thread. Regarding input devices, could a > user space speakup be controlled from a external numeric keypad plugged > into a usb port? This would depend on whether we could identify the key > presses as coming from the external keypad. As it would appear as another /dev/input/eventX device, yes. Samuel ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Speakup in userspace ` Christopher Moore ` Samuel Thibault @ ` Albert E. Sten-Clanton ` Doug Sutherland ` Deborah Norling 1 sibling, 2 replies; 16+ messages in thread From: Albert E. Sten-Clanton @ UTC (permalink / raw) To: Speakup is a screen review system for Linux. Can anybody tell me what "user space" means and where to read about it? I don't recall finding the term in anything I've read so far. Thanks! Al ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Speakup in userspace ` Albert E. Sten-Clanton @ ` Doug Sutherland ` W. Nick Dotson ` Albert E. Sten-Clanton ` Deborah Norling 1 sibling, 2 replies; 16+ messages in thread From: Doug Sutherland @ UTC (permalink / raw) To: Speakup is a screen review system for Linux. Consider the linux that most of use to be a "protected mode" operating system as opposed to "real mode". Protected mode allows access to things like virtual memory, multi-threading, and priviledge levels not available in real mode. Protected mode has been the standard on x86 PCs since the 80286. A protected mode system segregates virtual memory into kernel space and user space. Kernel space is strictly reserved for running the kernel, device drivers, and kernel extensions. It is usually the case that kernel space memory is not swapped to disk since that is much slower, which user space memory can be swapped to disk. User space or "userland" processes cannot access the memory of other processes, the basis of memory protection which makes linux very stable. Prior to win2k, the windows os was not a protected memory system, hence the freezing up or crashing of whole system from one bug in one driver or app. A user space process, although restricted in memory access, can request the kernel to map part of its memory onto its own space, and can also access shared memory. The kernel space is the direct hardware access space along with the management software that controls virtual memory, DMA, threads, processes, etc. You have kernel processes and user processes. The kernel processes are supposed to be basic things like the direct interface to hardware. User space is where applications run. So there is kernel space memory, threads, and processes, and user space memory, threads, and processes. Consider ALSA sound as an example. It's in the kernel but it's also not in the kernel. There are kernel drivers and there are user space libraries. The alsa-lib delegates sound control to user space. This allows application developers to do all kinds of things without touching kernel code. The alsa-lib provides various functionality like software mixing, support for the older OSS API, and user specific configuration, and it is multi-thread safe, essential for complex audio programs. Alsa may not be the best example, but the idea is separating the core functionality from the application layer. Let's say I create an API for writing text to a speech synth. The code that actually talks to the synth would ideally be abstracted from the API such that the identical programming interface works for any synth using any protocol like serial or usb. Some hardware may not implement all parts of the API but where there are same functions the API should look the same. An example of a very well abstracted API is the Java API. It had to be done that way in order to make the programs portable on different systems. I may be biased because I used to work there, but if you look at how much work was done on abstraction it's the most impressively abstracted API around. I'm not talking about javascript, that's like a virus hehe. Unfortunately Sun wanted Java to be the answer to everything everywhere which it is not and will never be, and Java, like many good ideas, has become overly bloated and complex, although at least the various parts of it are separate APIs, and the compact versions like J2ME are still very efficient. They run on almost all phones now. There is a good reason for this. I wrote some apps on blackberry and it was a breeze to do so. Compared with doing it in C or ASM it's an entirely different world. -- Doug ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Speakup in userspace ` Doug Sutherland @ ` W. Nick Dotson ` Albert E. Sten-Clanton 1 sibling, 0 replies; 16+ messages in thread From: W. Nick Dotson @ UTC (permalink / raw) To: Speakup is a screen review system for Linux. Wow! If I had you here as my mentor, I could learn that Linux stuff. That just had to be the neatest bit of technical explanation I read in aeons... I saved it in my Linux docs folder on my Windows machine... (grin) Nick On Wed, 20 Jun 2007 13:53:35 -0500, Doug Sutherland wrote: Consider the linux that most of use to be a "protected mode" operating system as opposed to "real mode". Protected mode allows access to things like virtual memory, multi-threading, and priviledge levels not available in real mode. Protected mode has been the standard on x86 PCs since the 80286. A protected mode system segregates virtual memory into kernel space and user space. Kernel space is strictly reserved for running the kernel, device drivers, and kernel extensions. It is usually the case that kernel space memory is not swapped to disk since that is much slower, which user space memory can be swapped to disk. User space or "userland" processes cannot access the memory of other processes, the basis of memory protection which makes linux very stable. Prior to win2k, the windows os was not a protected memory system, hence the freezing up or crashing of whole system from one bug in one driver or app. A user space process, although restricted in memory access, can request the kernel to map part of its memory onto its own space, and can also access shared memory. The kernel space is the direct hardware access space along with the management software that controls virtual memory, DMA, threads, processes, etc. You have kernel processes and user processes. The kernel processes are supposed to be basic things like the direct interface to hardware. User space is where applications run. So there is kernel space memory, threads, and processes, and user space memory, threads, and processes. Consider ALSA sound as an example. It's in the kernel but it's also not in the kernel. There are kernel drivers and there are user space libraries. The alsa-lib delegates sound control to user space. This allows application developers to do all kinds of things without touching kernel code. The alsa-lib provides various functionality like software mixing, support for the older OSS API, and user specific configuration, and it is multi-thread safe, essential for complex audio programs. Alsa may not be the best example, but the idea is separating the core functionality from the application layer. Let's say I create an API for writing text to a speech synth. The code that actually talks to the synth would ideally be abstracted from the API such that the identical programming interface works for any synth using any protocol like serial or usb. Some hardware may not implement all parts of the API but where there are same functions the API should look the same. An example of a very well abstracted API is the Java API. It had to be done that way in order to make the programs portable on different systems. I may be biased because I used to work there, but if you look at how much work was done on abstraction it's the most impressively abstracted API around. I'm not talking about javascript, that's like a virus hehe. Unfortunately Sun wanted Java to be the answer to everything everywhere which it is not and will never be, and Java, like many good ideas, has become overly bloated and complex, although at least the various parts of it are separate APIs, and the compact versions like J2ME are still very efficient. They run on almost all phones now. There is a good reason for this. I wrote some apps on blackberry and it was a breeze to do so. Compared with doing it in C or ASM it's an entirely different world. -- Doug _______________________________________________ Speakup mailing list Speakup@braille.uwo.ca http://speech.braille.uwo.ca/mailman/listinfo/speakup ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Speakup in userspace ` Doug Sutherland ` W. Nick Dotson @ ` Albert E. Sten-Clanton 1 sibling, 0 replies; 16+ messages in thread From: Albert E. Sten-Clanton @ UTC (permalink / raw) To: Speakup is a screen review system for Linux. Thanks very much for the explanation below. Al ----- Original Message ----- From: "Doug Sutherland" <doug@proficio.ca> To: "Speakup is a screen review system for Linux." <speakup@braille.uwo.ca> Sent: Wednesday, June 20, 2007 2:53 PM Subject: Re: Speakup in userspace > Consider the linux that most of use to be a "protected mode" > operating system as opposed to "real mode". Protected mode > allows access to things like virtual memory, multi-threading, > and priviledge levels not available in real mode. Protected > mode has been the standard on x86 PCs since the 80286. > > A protected mode system segregates virtual memory into > kernel space and user space. Kernel space is strictly reserved > for running the kernel, device drivers, and kernel extensions. > It is usually the case that kernel space memory is not swapped > to disk since that is much slower, which user space memory > can be swapped to disk. > > User space or "userland" processes cannot access the memory > of other processes, the basis of memory protection which > makes linux very stable. Prior to win2k, the windows os was > not a protected memory system, hence the freezing up or > crashing of whole system from one bug in one driver or app. > A user space process, although restricted in memory access, > can request the kernel to map part of its memory onto its own > space, and can also access shared memory. > > The kernel space is the direct hardware access space along > with the management software that controls virtual memory, > DMA, threads, processes, etc. You have kernel processes > and user processes. The kernel processes are supposed to > be basic things like the direct interface to hardware. User > space is where applications run. So there is kernel space > memory, threads, and processes, and user space memory, > threads, and processes. > > Consider ALSA sound as an example. It's in the kernel but > it's also not in the kernel. There are kernel drivers and there > are user space libraries. The alsa-lib delegates sound control > to user space. This allows application developers to do all > kinds of things without touching kernel code. The alsa-lib > provides various functionality like software mixing, support > for the older OSS API, and user specific configuration, and > it is multi-thread safe, essential for complex audio programs. > > Alsa may not be the best example, but the idea is separating > the core functionality from the application layer. Let's say I > create an API for writing text to a speech synth. The code > that actually talks to the synth would ideally be abstracted > from the API such that the identical programming interface > works for any synth using any protocol like serial or usb. > Some hardware may not implement all parts of the API but > where there are same functions the API should look the > same. An example of a very well abstracted API is the > Java API. It had to be done that way in order to make the > programs portable on different systems. I may be biased > because I used to work there, but if you look at how much > work was done on abstraction it's the most impressively > abstracted API around. I'm not talking about javascript, > that's like a virus hehe. Unfortunately Sun wanted Java to > be the answer to everything everywhere which it is not and > will never be, and Java, like many good ideas, has become > overly bloated and complex, although at least the various > parts of it are separate APIs, and the compact versions > like J2ME are still very efficient. They run on almost all > phones now. There is a good reason for this. I wrote some > apps on blackberry and it was a breeze to do so. Compared > with doing it in C or ASM it's an entirely different world. > > -- Doug > > _______________________________________________ > Speakup mailing list > Speakup@braille.uwo.ca > http://speech.braille.uwo.ca/mailman/listinfo/speakup > > > -- > No virus found in this incoming message. > Checked by AVG Free Edition. > Version: 7.5.472 / Virus Database: 269.9.1/854 - Release Date: 6/19/2007 1:12 PM > > ^ permalink raw reply [flat|nested] 16+ messages in thread
* RE: Speakup in userspace ` Albert E. Sten-Clanton ` Doug Sutherland @ ` Deborah Norling 1 sibling, 0 replies; 16+ messages in thread From: Deborah Norling @ UTC (permalink / raw) To: 'Speakup is a screen review system for Linux.' Maybe this is stupid, but if you need user-space screen access, couldn't you just use Yasr? Can't its keymap be modified enough to mimic speakup? I guess yasr is really pretty primitive compared to speakup; it can't track highlighting for example. But maybe it would be easier, programatically to just improve yasr rather than rewrite speakup. --Debee ^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~ UTC | newest]
Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
Speakup in userspace Tyler Spivey
` Luke Yelavich
` Samuel Thibault
` Luke Yelavich
` Samuel Thibault
` Doug Sutherland
` Samuel Thibault
` Doug Sutherland
` Samuel Thibault
` Christopher Moore
` Samuel Thibault
` Albert E. Sten-Clanton
` Doug Sutherland
` W. Nick Dotson
` Albert E. Sten-Clanton
` Deborah Norling
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).