Repo created

This commit is contained in:
Fr4nz D13trich 2025-11-24 18:55:42 +01:00
parent a629de6271
commit 3cef7c5092
2161 changed files with 246605 additions and 2 deletions

View file

@ -0,0 +1,16 @@
@Suppress("DSL_SCOPE_VIOLATION")
plugins {
id(ThunderbirdPlugins.Library.jvm)
alias(libs.plugins.ksp)
alias(libs.plugins.android.lint)
}
dependencies {
api(projects.backend.api)
implementation(libs.kotlinx.coroutines.core)
implementation(libs.moshi)
ksp(libs.moshi.kotlin.codegen)
testImplementation(projects.mail.testing)
}

View file

@ -0,0 +1,210 @@
package app.k9mail.backend.demo
import com.fsck.k9.backend.api.Backend
import com.fsck.k9.backend.api.BackendFolder.MoreMessages
import com.fsck.k9.backend.api.BackendPusher
import com.fsck.k9.backend.api.BackendPusherCallback
import com.fsck.k9.backend.api.BackendStorage
import com.fsck.k9.backend.api.FolderInfo
import com.fsck.k9.backend.api.SyncConfig
import com.fsck.k9.backend.api.SyncListener
import com.fsck.k9.backend.api.updateFolders
import com.fsck.k9.mail.BodyFactory
import com.fsck.k9.mail.Flag
import com.fsck.k9.mail.FolderType
import com.fsck.k9.mail.Message
import com.fsck.k9.mail.MessageDownloadState
import com.fsck.k9.mail.Part
import com.fsck.k9.mail.internet.MimeMessage
import com.squareup.moshi.Moshi
import com.squareup.moshi.adapter
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
import java.io.InputStream
import java.util.UUID
import okio.buffer
import okio.source
class DemoBackend(private val backendStorage: BackendStorage) : Backend {
private val messageStoreInfo by lazy { readMessageStoreInfo() }
override val supportsFlags: Boolean = true
override val supportsExpunge: Boolean = false
override val supportsMove: Boolean = true
override val supportsCopy: Boolean = true
override val supportsUpload: Boolean = true
override val supportsTrashFolder: Boolean = true
override val supportsSearchByDate: Boolean = false
override val isPushCapable: Boolean = false
override fun refreshFolderList() {
val localFolderServerIds = backendStorage.getFolderServerIds().toSet()
backendStorage.updateFolders {
val remoteFolderServerIds = messageStoreInfo.keys
val foldersServerIdsToCreate = remoteFolderServerIds - localFolderServerIds
val foldersToCreate = foldersServerIdsToCreate.mapNotNull { folderServerId ->
messageStoreInfo[folderServerId]?.let { folderData ->
FolderInfo(folderServerId, folderData.name, folderData.type)
}
}
createFolders(foldersToCreate)
val folderServerIdsToRemove = (localFolderServerIds - remoteFolderServerIds).toList()
deleteFolders(folderServerIdsToRemove)
}
}
override fun sync(folderServerId: String, syncConfig: SyncConfig, listener: SyncListener) {
listener.syncStarted(folderServerId)
val folderData = messageStoreInfo[folderServerId]
if (folderData == null) {
listener.syncFailed(folderServerId, "Folder $folderServerId doesn't exist", null)
return
}
val backendFolder = backendStorage.getFolder(folderServerId)
val localMessageServerIds = backendFolder.getMessageServerIds()
if (localMessageServerIds.isNotEmpty()) {
listener.syncFinished(folderServerId)
return
}
for (messageServerId in folderData.messageServerIds) {
val message = loadMessage(folderServerId, messageServerId)
backendFolder.saveMessage(message, MessageDownloadState.FULL)
listener.syncNewMessage(folderServerId, messageServerId, isOldMessage = false)
}
backendFolder.setMoreMessages(MoreMessages.FALSE)
listener.syncFinished(folderServerId)
}
override fun downloadMessage(syncConfig: SyncConfig, folderServerId: String, messageServerId: String) {
throw UnsupportedOperationException("not implemented")
}
override fun downloadMessageStructure(folderServerId: String, messageServerId: String) {
throw UnsupportedOperationException("not implemented")
}
override fun downloadCompleteMessage(folderServerId: String, messageServerId: String) {
throw UnsupportedOperationException("not implemented")
}
override fun setFlag(folderServerId: String, messageServerIds: List<String>, flag: Flag, newState: Boolean) = Unit
override fun markAllAsRead(folderServerId: String) = Unit
override fun expunge(folderServerId: String) {
throw UnsupportedOperationException("not implemented")
}
override fun expungeMessages(folderServerId: String, messageServerIds: List<String>) {
throw UnsupportedOperationException("not implemented")
}
override fun deleteMessages(folderServerId: String, messageServerIds: List<String>) = Unit
override fun deleteAllMessages(folderServerId: String) = Unit
override fun moveMessages(
sourceFolderServerId: String,
targetFolderServerId: String,
messageServerIds: List<String>
): Map<String, String> {
// We do just enough to simulate a successful operation on the server.
return messageServerIds.associateWith { createNewServerId() }
}
override fun moveMessagesAndMarkAsRead(
sourceFolderServerId: String,
targetFolderServerId: String,
messageServerIds: List<String>
): Map<String, String> {
// We do just enough to simulate a successful operation on the server.
return messageServerIds.associateWith { createNewServerId() }
}
override fun copyMessages(
sourceFolderServerId: String,
targetFolderServerId: String,
messageServerIds: List<String>
): Map<String, String> {
// We do just enough to simulate a successful operation on the server.
return messageServerIds.associateWith { createNewServerId() }
}
override fun search(
folderServerId: String,
query: String?,
requiredFlags: Set<Flag>?,
forbiddenFlags: Set<Flag>?,
performFullTextSearch: Boolean
): List<String> {
throw UnsupportedOperationException("not implemented")
}
override fun fetchPart(folderServerId: String, messageServerId: String, part: Part, bodyFactory: BodyFactory) {
throw UnsupportedOperationException("not implemented")
}
override fun findByMessageId(folderServerId: String, messageId: String): String? {
throw UnsupportedOperationException("not implemented")
}
override fun uploadMessage(folderServerId: String, message: Message): String {
return createNewServerId()
}
override fun checkIncomingServerSettings() = Unit
override fun checkOutgoingServerSettings() = Unit
override fun sendMessage(message: Message) {
val inboxServerId = messageStoreInfo.filterValues { it.type == FolderType.INBOX }.keys.first()
val backendFolder = backendStorage.getFolder(inboxServerId)
val newMessage = message.copy(uid = createNewServerId())
backendFolder.saveMessage(newMessage, MessageDownloadState.FULL)
}
override fun createPusher(callback: BackendPusherCallback): BackendPusher {
throw UnsupportedOperationException("not implemented")
}
private fun createNewServerId() = UUID.randomUUID().toString()
private fun Message.copy(uid: String): MimeMessage {
val outputStream = ByteArrayOutputStream()
writeTo(outputStream)
val inputStream = ByteArrayInputStream(outputStream.toByteArray())
return MimeMessage.parseMimeMessage(inputStream, false).apply {
this.uid = uid
}
}
@OptIn(ExperimentalStdlibApi::class)
private fun readMessageStoreInfo(): MessageStoreInfo {
return getResourceAsStream("/contents.json").source().buffer().use { bufferedSource ->
val moshi = Moshi.Builder().build()
val adapter = moshi.adapter<MessageStoreInfo>()
adapter.fromJson(bufferedSource)
} ?: error("Couldn't read message store info")
}
private fun loadMessage(folderServerId: String, messageServerId: String): Message {
return getResourceAsStream("/$folderServerId/$messageServerId.eml").use { inputStream ->
MimeMessage.parseMimeMessage(inputStream, false).apply {
uid = messageServerId
}
}
}
private fun getResourceAsStream(name: String): InputStream {
return DemoBackend::class.java.getResourceAsStream(name) ?: error("Resource '$name' not found")
}
}

View file

@ -0,0 +1,13 @@
package app.k9mail.backend.demo
import com.fsck.k9.mail.FolderType
import com.squareup.moshi.JsonClass
typealias MessageStoreInfo = Map<String, FolderData>
@JsonClass(generateAdapter = true)
data class FolderData(
val name: String,
val type: FolderType,
val messageServerIds: List<String>
)

View file

@ -0,0 +1,60 @@
{
"inbox": {
"name": "Inbox",
"type": "INBOX",
"messageServerIds": [
"intro",
"many_recipients",
"thread_1",
"thread_2",
"inline_image_data_uri",
"inline_image_attachment"
]
},
"trash": {
"name": "Trash",
"type": "TRASH",
"messageServerIds": []
},
"drafts": {
"name": "Drafts",
"type": "DRAFTS",
"messageServerIds": []
},
"sent": {
"name": "Sent",
"type": "SENT",
"messageServerIds": []
},
"archive": {
"name": "Archive",
"type": "ARCHIVE",
"messageServerIds": []
},
"spam": {
"name": "Spam",
"type": "SPAM",
"messageServerIds": []
},
"turing": {
"name": "Turing Awards",
"type": "REGULAR",
"messageServerIds": [
"turing_award_1966",
"turing_award_1967",
"turing_award_1968",
"turing_award_1970",
"turing_award_1971",
"turing_award_1972",
"turing_award_1975",
"turing_award_1977",
"turing_award_1978",
"turing_award_1979",
"turing_award_1981",
"turing_award_1983",
"turing_award_1987",
"turing_award_1991",
"turing_award_1996"
]
}
}

View file

@ -0,0 +1,248 @@
MIME-Version: 1.0
From: "Test data" <data@k9mail.example>
Date: Tue, 14 Feb 2023 15:00:00 +0100
Message-ID: <inbox-6@k9mail.example>
Subject: Inline image attachment
To: User <user@k9mail.example>
Content-Type: multipart/related; boundary=BOUNDARY
--BOUNDARY
Content-Type: text/html; charset=UTF-8
<html>
<body>
<p>Inline image using a cid: URI to reference an attached image:</p>
<img src="cid:part1@k9mail.example">
</body>
</html>
--BOUNDARY
Content-Type: image/png; name="k9mail.png"
Content-Transfer-Encoding: base64
Content-ID: <part1@k9mail.example>
Content-Disposition: inline; filename="k9mail.png"
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
--BOUNDARY--

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,9 @@
MIME-Version: 1.0
From: "cketti" <cketti@k9mail.example>
Date: Thu, 23 Sep 2021 23:42:00 +0200
Message-ID: <hello-1-2-3@k9mail.example>
Subject: Welcome to K-9 Mail
To: User <user@k9mail.example>
Content-Type: text/plain; charset=UTF-8
Congratulations, you have managed to set up K-9 Mail's demo account. Have fun exploring the app.

View file

@ -0,0 +1,42 @@
MIME-Version: 1.0
From: "Alice" <from1@k9mail.example>, "Bob" <from2@k9mail.example>
Sender: "Bernd" <sender@k9mail.example>
Reply-To: <reply-to@k9mail.example>
Date: Mon, 23 Jan 2023 12:00:00 +0100
Message-ID: <inbox-2@k9mail.example>
Subject: Message details demo
To: "User 1" <to1@k9mail.example>,
"User 2" <to2@k9mail.example>,
"User 3" <to3@k9mail.example>,
"User 4" <to4@k9mail.example>,
"User 5" <to5@k9mail.example>,
"User 6" <to6@k9mail.example>,
"User 7" <to7@k9mail.example>,
"User 8" <to8@k9mail.example>,
"User 9" <to9@k9mail.example>,
"User 10" <to10@k9mail.example>,
"User 11" <to11@k9mail.example>,
"User 12" <to12@k9mail.example>,
"User 13" <to13@k9mail.example>,
"User 14" <to14@k9mail.example>,
"User 15" <to15@k9mail.example>,
"User 16" <to16@k9mail.example>,
"User 17" <to17@k9mail.example>,
"User 18" <to18@k10mail.example>,
"User 19" <to19@k11mail.example>,
"User 20" <to20@k12mail.example>
Cc: "Copy 1" <cc1@k9mail.example>,
"Copy 2" <cc2@k9mail.example>,
"Copy 3" <cc3@k9mail.example>
Bcc: "Blind 1" <bcc1@k9mail.example>,
"Blind 2" <bcc2@k9mail.example>,
"Blind 3" <bcc3@k9mail.example>
Content-Type: text/plain; charset=UTF-8
This message contains…
- multiple addresses in the From: header
- a Sender: header
- a Reply-To: header
- multiple addresses in the To: header
- multiple addresses in the Cc: header
- multiple addresses in the Bcc: header

View file

@ -0,0 +1,9 @@
MIME-Version: 1.0
From: Alice <alice@k9mail.example>
Date: Fri, 10 Feb 2023 10:00:00 +0100
Message-ID: <thread-1@k9mail.example>
Subject: Thread
To: Bob <bob@k9mail.example>
Content-Type: text/plain; charset=UTF-8
This is the first message in this thread.

View file

@ -0,0 +1,11 @@
MIME-Version: 1.0
From: Bob <bob@k9mail.example>
Date: Fri, 10 Feb 2023 10:05:00 +0100
Message-ID: <thread-2@k9mail.example>
Subject: Re: Thread
To: Alice <alice@k9mail.example>
In-Reply-To: <thread-1@k9mail.example>
References: <thread-2@k9mail.example>
Content-Type: text/plain; charset=UTF-8
This is the second message in this thread.

View file

@ -0,0 +1,84 @@
MIME-Version: 1.0
From: "Alan J. Perlis" <alan.perlis@example.com>
Date: Sat, 01 Jan 1966 12:00:00 -0400
Message-ID: <turing1966@cketti.de>
Subject: The Synthesis of Algorithmic Systems
To: Alan Turing <alan@turing.example>
Content-Type: multipart/alternative; boundary=047d7b450b100959e604d85a5320
--047d7b450b100959e604d85a5320
Content-Type: text/plain; charset=UTF-8
Both knowledge and wisdom extend man's reach. Knowledge led to computers,
wisdom to chopsticks. Unfortunately our association is overinvolved with
the former. The latter will have to wait for a more sublime day.
On what does and will the fame of Turing rest? That he proved a theorem
showing that for a general computing device--later dubbed a "Turing
machine"--there existed functions which it could not compute? I doubt it.
More likely it rests on the model he invented and employed: his formal
mechanism.
This model has captured the imagination and mobilized the thoughts of a
generation of scientists. It has provided a basis for arguments leading to
theories. His model has proved so useful that its generated activity has
been distributed not only in mathematics, but through several technologies
as well. The arguments that have been employed are not always formal and
the consequent creations not all abstract.
Indeed a most fruitful consequence of the Turing machine has been with the
creation, study and computation of functions which are computable, i.e., in
computer programming. This is not surprising since computers can compute so
much more than we yet know how to specify.
I am sure that all will agree that this model has been enormously valuable.
History will forgive me for not devoting any attention in this lecture to
the effect which Turing had on the development of the general-purpose
digital computer, which has further accelerated our involvement with the
theory and practice of computation.
Since the appearance of Turing's model there have, of course, been others
which have concerned and benefited us in computing. I think, however, that
only one has had an effect as great as Turing's: the formal mechanism
called ALGOL Many will immediately disagree, pointing out that too few of
us have understood it or used it.
While such has, unhappily, been the case, it is not the point. The impulse
given by ALGOL to the development of research in computer science is
relevant while the number of adherents is not. ALGOL, too, has mobilized
our thoughts and has provided us with a basis for our arguments.
--047d7b450b100959e604d85a5320
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>Both knowledge and wisdom extend man&#39;s reach. Kno=
wledge led to computers, wisdom to chopsticks. Unfortunately our associatio=
n is overinvolved with the former. The latter will have to wait for a more =
sublime day.=C2=A0</div>
<div>On what does and will the fame of Turing rest? That he proved a theore=
m showing that for a general computing device--later dubbed a &quot;Turing =
machine&quot;--there existed functions which it could not compute? I doubt =
it. More likely it rests on the model he invented and employed: his formal =
mechanism.=C2=A0</div>
<div>This model has captured the imagination and mobilized the thoughts of =
a generation of scientists. It has provided a basis for arguments leading t=
o theories. His model has proved so useful that its generated activity has =
been distributed not only in mathematics, but through several technologies =
as well. The arguments that have been employed are not always formal and th=
e consequent creations not all abstract.=C2=A0</div>
<div>Indeed a most fruitful consequence of the Turing machine has been with=
the creation, study and computation of functions which are computable, i.e=
., in computer programming. This is not surprising since computers can comp=
ute so much more than we yet know how to specify.=C2=A0</div>
<div>I am sure that all will agree that this model has been enormously valu=
able. History will forgive me for not devoting any attention in this lectur=
e to the effect which Turing had on the development of the general-purpose =
digital computer, which has further accelerated our involvement with the th=
eory and practice of computation.=C2=A0</div>
<div>Since the appearance of Turing&#39;s model there have, of course, been=
others which have concerned and benefited us in computing. I think, howeve=
r, that only one has had an effect as great as Turing&#39;s: the formal mec=
hanism called ALGOL Many will immediately disagree, pointing out that too f=
ew of us have understood it or used it.=C2=A0</div>
<div>While such has, unhappily, been the case, it is not the point. The imp=
ulse given by ALGOL to the development of research in computer science is r=
elevant while the number of adherents is not. ALGOL, too, has mobilized our=
thoughts and has provided us with a basis for our arguments.=C2=A0</div>
</div>
--047d7b450b100959e604d85a5320--

View file

@ -0,0 +1,35 @@
MIME-Version: 1.0
From: "Maurice V. Wilkes" <maurice.wilkes@example.com>
Date: Wed, 30 Aug 1967 12:00:00 -0400
Message-ID: <turing1967@cketti.de>
Subject: Computers Then and Now
To: Alan Turing <alan@turing.example>
Content-Type: multipart/alternative; boundary=047d7b5d9bdd0d571a04d85aec30
--047d7b5d9bdd0d571a04d85aec30
Content-Type: text/plain; charset=UTF-8
I do not imagine that many of the Turing lecturers who will follow me will
be people who were acquainted with Alan Turing. The work on computable
numbers, for which he is famous, was published in 1936 before digital
computers existed. Later he became one of the first of a distinguished
succession of able mathematicians who have made contributions to the
computer field. He was a colorful figure in the early days of digital
computer development in England, and I would find it difficult to speak of
that period without making some references to him.
--047d7b5d9bdd0d571a04d85aec30
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>I do not imagine that many of the Turing lecturers wh=
o will follow me will be people who were acquainted with Alan Turing. The w=
ork on computable numbers, for which he is famous, was published in 1936 be=
fore digital computers existed. Later he became one of the first of a disti=
nguished succession of able mathematicians who have made contributions to t=
he computer field. He was a colorful figure in the early days of digital co=
mputer development in England, and I would find it difficult to speak of th=
at period without making some references to him.</div>
</div>
--047d7b5d9bdd0d571a04d85aec30--

View file

@ -0,0 +1,40 @@
MIME-Version: 1.0
From: Richard Hamming <richard.hamming@example.com>
Date: Tue, 27 Aug 1968 12:00:00 -0400
Message-ID: <turing1968@cketti.de>
Subject: One Man's View of Computer Science
To: Alan Turing <alan@turing.example>
Content-Type: multipart/alternative; boundary=089e01227b30f6f60004d85af2ae
--089e01227b30f6f60004d85af2ae
Content-Type: text/plain; charset=UTF-8
Let me begin with a few personal words. When one is notified that he has
been elected the ACM Turing lecturer for the year, he is at first
surprised--especially is the nonacademic person surprised by an ACM award.
After a little while the surprise is replaced by a feeling of pleasure.
Still later comes a feeling of "Why me?" With all that has been done and is
being done in computing, why single out me and my work? Well, I suppose
that it has to happen to someone each year, and this
time I am the lucky person. Anyway, let me thank you for the honor you have
given to me and by inference to the Bell Telephone Laboratories where I
work and which has made possible so much of what I have done.
--089e01227b30f6f60004d85af2ae
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>Let me begin with a few personal words. When one is n=
otified that he has been elected the ACM Turing lecturer for the year, he i=
s at first surprised--especially is the nonacademic person surprised by an =
ACM award. After a little while the surprise is replaced by a feeling of pl=
easure. Still later comes a feeling of &quot;Why me?&quot; With all that ha=
s been done and is being done in computing, why single out me and my work? =
Well, I suppose that it has to happen to someone each year, and this=C2=A0<=
/div>
<div>time I am the lucky person. Anyway, let me thank you for the honor you=
have given to me and by inference to the Bell Telephone Laboratories where=
I work and which has made possible so much of what I have done.</div></div=
>
--089e01227b30f6f60004d85af2ae--

View file

@ -0,0 +1,35 @@
MIME-Version: 1.0
From: "James H. Wilkinson" <james.wilkinson@example.com>
Date: Tue, 01 Sep 1970 12:00:00 -0400
Message-ID: <turing1970@cketti.de>
Subject: Some Comments from a Numerical Analyst
To: Alan Turing <alan@turing.example>
Content-Type: multipart/alternative; boundary=047d7b5d9bdd9697d504d85ac65f
--047d7b5d9bdd9697d504d85ac65f
Content-Type: text/plain; charset=UTF-8
When at last I recovered from the feeling of shocked elation at being
invited to give the 1970 Turing Award Lecture, I became aware that I must
indeed prepare an appropriate lecture. There appears to be a tradition that
a Turing Lecturer should decide for himself what is expected from him, and
probably for this reason previous lectures have differed considerably in
style and content. However, it was made quite clear that I was to give an
after-luncheon speech and that I would not have the benefit of an overhead
projector or a blackboard.
--047d7b5d9bdd9697d504d85ac65f
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>When at last I recovered from the feeling of shocked =
elation at being invited to give the 1970 Turing Award Lecture, I became aw=
are that I must indeed prepare an appropriate lecture. There appears to be =
a tradition that a Turing Lecturer should decide for himself what is expect=
ed from him, and probably for this reason previous lectures have differed c=
onsiderably in style and content. However, it was made quite clear that I w=
as to give an after-luncheon speech and that I would not have the benefit o=
f an overhead projector or a blackboard.</div>
</div>
--047d7b5d9bdd9697d504d85ac65f--

View file

@ -0,0 +1,32 @@
MIME-Version: 1.0
From: John McCarthy <john.mccarthy@example.com>
Date: Fri, 01 Jan 1971 12:00:00 -0400
Message-ID: <turing1971@cketti.de>
Subject: Generality in Artificial Intelligence
To: Alan Turing <alan@turing.example>
Content-Type: multipart/alternative; boundary=089e01030106b6942904d85ad870
--089e01030106b6942904d85ad870
Content-Type: text/plain; charset=UTF-8
Postscript
My 1971 Turing Award Lecture was entitled "Generality in Artificial
Intelligence." The topic turned out to have been overambitious in that I
discovered that I was unable to put my thoughts on the subject in a
satisfactory written form at that time. It would have been better to have
reviewed previous work rather than attempt something new, but such wasn't
my custom at that time.
--089e01030106b6942904d85ad870
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>Postscript</div><div>My 1971 Turing Award Lecture was=
entitled &quot;Generality in Artificial Intelligence.&quot; The topic turn=
ed out to have been overambitious in that I discovered that I was unable to=
put my thoughts on the subject in a satisfactory written form at that time=
. It would have been better to have reviewed previous work rather than atte=
mpt something new, but such wasn&#39;t my custom at that time.</div>
</div>
--089e01030106b6942904d85ad870--

View file

@ -0,0 +1,27 @@
MIME-Version: 1.0
From: "Edsger W. Dijkstra" <edsger.dijkstra@example.com>
Date: Mon, 02 Aug 1972 12:00:00 -0500
Message-ID: <turing1972@cketti.de>
Subject: The Humble Programmer
To: Alan Turing <alan@turing.example>
Content-Type: text/plain; charset=UTF-8; format=flowed
As a result of a long sequence of coincidences I entered the programming
profession officially on the first spring morning of 1952, and as far as
I have been able to trace, I was the first Dutchman to do so in my
country. In retrospect the most amazing thing is the slowness with which,
at least in my part of the world, the programming profession emerged, a
slowness which is now hard to believe. But I am grateful for two vivid
recollections from that period that establish that slowness beyond any
doubt.
After having programmed for some three years, I had a discussion with
van Wijngaarden, who was then my boss at the Mathematical Centre in
Amsterdam - a discussion for which I shall remain grateful to him
as long as I live. The point was that I was supposed to study theoretical
physics at the University of Leiden simultaneously, and as I found the
two activities harder and harder to combine, I had to make up my
mind, either to stop programming and become a real, respectable theoretical
physicist, or to carry my study of physics to a formal completion only,
with a minimum of effort, and to become..., yes what? A programmer?
But was that a respectable profession? After all, what was programming?

View file

@ -0,0 +1,30 @@
MIME-Version: 1.0
From: Allen Newell <allen.newell@example.com>
Cc: Herbert Simon <herbert.simon@example.com>
Date: Mon, 20 Oct 1975 12:00:00 -0500
Message-ID: <turing1975@cketti.de>
Subject: Computer Science as Empirical Inquiry: Symbols and Search
To: Alan Turing <alan@turing.example>
Content-Type: multipart/alternative; boundary=047d7b450b1092035304d85abf33
--047d7b450b1092035304d85abf33
Content-Type: text/plain; charset=UTF-8
Computer science is the study of the phenomena surrounding computers. The
founders of this society understood this very well when they called
themselves the Association for Computing Machinery. The machine---not just
the hardware, but the programmed, living machine--is the organism we study.
--047d7b450b1092035304d85abf33
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">Computer science is the study of the phenomena surrounding=
computers. The founders of this society understood this very well when the=
y called themselves the Association for Computing Machinery. The machine---=
not just the hardware, but the programmed, living machine--is the organism =
we study.<br>
</div>
--047d7b450b1092035304d85abf33--

View file

@ -0,0 +1,39 @@
MIME-Version: 1.0
From: "John W. Backus" <john.backus@example.com>
Date: Mon, 17 Oct 1977 12:00:00 -0700
Message-ID: <turing1977@cketti.de>
Subject: Can Programming Be Liberated from the von Neumann Style? A Functional
Style and Its Algebra of Programs
To: Alan Turing <alan@turing.example>
Content-Type: multipart/alternative; boundary=047d7b5d9bdd8a36e804d85ade47
--047d7b5d9bdd8a36e804d85ade47
Content-Type: text/plain; charset=UTF-8
Conventional programming languages are growing ever more enormous, but not
stronger. Inherent defects at the most basic level cause them to be both
fat and weak: their primitive word-at-a-time style of programming inherited
from their common ancestor--the von Neumann computer, their close coupling
of semantics to state transitions, their division of programming into a
world of expressions and a world of statements, their inability to
effectively use powerful combining forms for building new programs from
existing ones, and their lack of useful mathematical properties for
reasoning about
programs.
--047d7b5d9bdd8a36e804d85ade47
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>Conventional programming languages are growing ever m=
ore enormous, but not stronger. Inherent defects at the most basic level ca=
use them to be both fat and weak: their primitive word-at-a-time style of p=
rogramming inherited from their common ancestor--the von Neumann computer, =
their close coupling of semantics to state transitions, their division of p=
rogramming into a world of expressions and a world of statements, their ina=
bility to effectively use powerful combining forms for building new program=
s from existing ones, and their lack of useful mathematical properties for =
reasoning about=C2=A0</div>
<div>programs.</div></div>
--047d7b5d9bdd8a36e804d85ade47--

View file

@ -0,0 +1,36 @@
MIME-Version: 1.0
From: Robert Floyd <robert.floyd@example.com>
Date: Mon, 04 Dec 1978 12:00:00 -0500
Message-ID: <turing1978@cketti.de>
Subject: The Paradigms of Programming
To: Alan Turing <alan@turing.example>
Content-Type: multipart/alternative; boundary=089e0118419206e64304d85af860
--089e0118419206e64304d85af860
Content-Type: text/plain; charset=UTF-8
Today I want to talk about the paradigms of programming, how they affect
our success as designers of computer programs, how they should be taught,
and how they should be embodied in our programming languages.
A familiar example of a paradigm of programming is the technique of
structured programming, which appears to be the dominant paradigm in most
current treatments of programming methodology. Structured programming, as
formulated by Dijkstra, Wirth, and Parnas, among others, consists of two
phases.
--089e0118419206e64304d85af860
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>Today I want to talk about the paradigms of programmi=
ng, how they affect our success as designers of computer programs, how they=
should be taught, and how they should be embodied in our programming langu=
ages.=C2=A0</div>
<div>A familiar example of a paradigm of programming is the technique of st=
ructured programming, which appears to be the dominant paradigm in most cur=
rent treatments of programming methodology. Structured programming, as form=
ulated by Dijkstra, Wirth, and Parnas, among others, consists of two phases=
.=C2=A0</div>
</div>
--089e0118419206e64304d85af860--

View file

@ -0,0 +1,33 @@
MIME-Version: 1.0
From: "Kenneth E. Iverson" <kenneth.iverson@example.com>
Date: Mon, 29 Oct 1979 12:00:00 -0500
Message-ID: <turing1979@cketti.de>
Subject: Notation as a Tool of Thought
To: Alan Turing <alan@turing.example>
Content-Type: multipart/alternative; boundary=20cf30549cad76254e04d85ae4df
--20cf30549cad76254e04d85ae4df
Content-Type: text/plain; charset=UTF-8
The importance of nomenclature, notation, and language as tools of thought
has long been recognized. In chemistry and in botany, for example, the
establishment of systems of nomenclature by Lavoisier and Linnaeus did much
to stimulate and to channel later investigation. Concerning language,
George Boole in his Laws off Thought asserted "That language is an
instrument of human reason, and not merely a medium for the expression of
thought, is a truth generally admitted."
--20cf30549cad76254e04d85ae4df
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>The importance of nomenclature, notation, and languag=
e as tools of thought has long been recognized. In chemistry and in botany,=
for example, the establishment of systems of nomenclature by Lavoisier and=
Linnaeus did much to stimulate and to channel later investigation. Concern=
ing language, George Boole in his Laws off Thought asserted &quot;That lang=
uage is an instrument of human reason, and not merely a medium for the expr=
ession of thought, is a truth generally admitted.&quot;</div>
</div>
--20cf30549cad76254e04d85ae4df--

View file

@ -0,0 +1,51 @@
MIME-Version: 1.0
From: "Edgar F. Codd" <edgar.codd@example.com>
Date: Wed, 11 Nov 1981 12:00:00 -0800
Message-ID: <turing1981@cketti.de>
Subject: Relational Database: A Practical Foundation for Productivity
To: Alan Turing <alan@turing.example>
Content-Type: multipart/alternative; boundary=047d7bfd026c782f2404d85ab4b8
--047d7bfd026c782f2404d85ab4b8
Content-Type: text/plain; charset=UTF-8
It is well known that the growth in demands from end users for new
applications is outstripping the capability of data processing departments
to implement the corresponding application programs. There are two
complementary approaches to attacking this problem (and both approaches are
needed): one is to put end users into direct touch with the information
stored in computers; the other is to increase the productivity of data
processing professionals in the development of application programs. It is
less well known that a single technology, relational database management,
provides a practical foundation for both approaches. It is explained why
this
is so.
While developing this productivity theme, it is noted that the time has
come to draw a very sharp line between relational and non-relational
database systems, so that the label "relational" will not be used in
misleading ways.
The key to drawing this line is something called a "relational processing
capability."
--047d7bfd026c782f2404d85ab4b8
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>It is well known that the growth in demands from end =
users for new applications is outstripping the capability of data processin=
g departments to implement the corresponding application programs. There ar=
e two complementary approaches to attacking this problem (and both approach=
es are needed): one is to put end users into direct touch with the informat=
ion stored in computers; the other is to increase the productivity of data =
processing professionals in the development of application programs. It is =
less well known that a single technology, relational database management, p=
rovides a practical foundation for both approaches. It is explained why thi=
s=C2=A0</div>
<div><div>is so.=C2=A0</div><div>While developing this productivity theme, =
it is noted that the time has come to draw a very sharp line between relati=
onal and non-relational database systems, so that the label &quot;relationa=
l&quot; will not be used in misleading ways.=C2=A0</div>
<div>The key to drawing this line is something called a &quot;relational pr=
ocessing capability.&quot;</div></div></div>
--047d7bfd026c782f2404d85ab4b8--

View file

@ -0,0 +1,46 @@
MIME-Version: 1.0
From: Dennis Ritchie <dennis.ritchie@example.com>
Date: Mon, 24 Oct 1983 12:00:00 -0400
Message-ID: <turing1983@cketti.de>
Subject: Reflections on Software Research
To: Alan Turing <alan@turing.example>
Content-Type: multipart/alternative; boundary=bcaec54fbb2250035a04d85aabcd
--bcaec54fbb2250035a04d85aabcd
Content-Type: text/plain; charset=UTF-8
The UNIX operating system has suddenly become news, but it is not new. It
began in 1969 when Ken Thompson discovered a little-used PDP-7 computer and
set out to fashion a computing environment that he liked, His work soon
attracted me; I joined in the enterprise, though most of the ideas, and
most of the work for that matter, were his. Before long, others from our
group in the research area of AT&T Bell Laboratories were using the system;
Joe Ossanna, Doug Mcllroy, and
Bob Morris were especially enthusiastic critics and contributors, tn 1971,
we acquired a PDP-11, and by the end of that year we were supporting our
first real users: three typists entering patent applications. In 1973, the
system was rewritten in the C language, and in that year, too, it was first
described publicly at the Operating Systems Principles conference; the
resulting paper appeared in Communications of the ACM the next year.
--bcaec54fbb2250035a04d85aabcd
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>The UNIX operating system has suddenly become news, b=
ut it is not new. It began in 1969 when Ken Thompson discovered a little-us=
ed PDP-7 computer and set out to fashion a computing environment that he li=
ked, His work soon attracted me; I joined in the enterprise, though most of=
the ideas, and most of the work for that matter, were his. Before long, ot=
hers from our group in the research area of AT&amp;T Bell Laboratories were=
using the system; Joe Ossanna, Doug Mcllroy, and=C2=A0</div>
<div>Bob Morris were especially enthusiastic critics and contributors, tn 1=
971, we acquired a PDP-11, and by the end of that year we were supporting o=
ur first real users: three typists entering patent applications. In 1973, t=
he system was rewritten in the C language, and in that year, too, it was fi=
rst described publicly at the Operating Systems Principles conference; the =
resulting paper appeared in Communications of the ACM the next year.=C2=A0<=
/div>
</div>
--bcaec54fbb2250035a04d85aabcd--

View file

@ -0,0 +1,42 @@
MIME-Version: 1.0
From: John Cocke <john.cocke@example.com>
Date: Mon, 16 Feb 1987 12:00:00 -0600
Message-ID: <turing1987@cketti.de>
Subject: The Search for Performance in Scientific Processors
To: Alan Turing <alan@turing.example>
Content-Type: multipart/alternative; boundary=047d7bfd079665fb2c04d85ad0bc
--047d7bfd079665fb2c04d85ad0bc
Content-Type: text/plain; charset=UTF-8
I am honored and grateful to have been selected to join the ranks of ACM
Turing Award winners. I probably have spent too much of my life thinking
about computers, but I do not regret it a bit. I was fortunate to enter the
field of computing in its infancy and participate in its explosive growth.
The rapid evolution of the underlying technologies in the past 30 years has
not only provided an exciting environment, but has also presented a
constant stream of intellectual challenges to those of us trying to harness
this power and squeeze it to the last ounce. I hasten to say, especially to
the
younger members of the audience, there is no end in sight. As a matter of
fact, I believe the next thirty years will be even more exciting and rich
with challenges.
--047d7bfd079665fb2c04d85ad0bc
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>I am honored and grateful to have been selected to jo=
in the ranks of ACM Turing Award winners. I probably have spent too much of=
my life thinking about computers, but I do not regret it a bit. I was fort=
unate to enter the field of computing in its infancy and participate in its=
explosive growth. The rapid evolution of the underlying technologies in th=
e past 30 years has not only provided an exciting environment, but has also=
presented a constant stream of intellectual challenges to those of us tryi=
ng to harness this power and squeeze it to the last ounce. I hasten to say,=
especially to the=C2=A0</div>
<div>younger members of the audience, there is no end in sight. As a matter=
of fact, I believe the next thirty years will be even more exciting and ri=
ch with challenges.=C2=A0</div></div>
--047d7bfd079665fb2c04d85ad0bc--

View file

@ -0,0 +1,44 @@
MIME-Version: 1.0
From: Robin Milner <robin.milner@example.com>
Date: Mon, 18 Nov 1991 12:00:00 -0700
Message-ID: <turing1991@cketti.de>
Subject: Elements of Interaction
To: Alan Turing <alan@turing.example>
Content-Type: multipart/alternative; boundary=047d7b86e6de64aecb04d85affff
--047d7b86e6de64aecb04d85affff
Content-Type: text/plain; charset=UTF-8
I am greatly honored to receive this award, bearing the name of Alan
Turing. Perhaps Turing would be pleased that it should go to someone
educated at his old college, King's College at Cambridge. While there in
1956 I wrote my first computer program; it was on the EDSAC. Of course
EDSAC made history. But I am ashamed to say it did not lure me into
computing, and I ignored computers for four years. In 1960 I thought that
computers might be more peaceful to handle than schoolchildren--I was then
a teacher--so I applied for a job at Ferranti in London, at the time of
Pegasus. I was asked at the interview whether I would like to devote my
life to computers. This daunting notion had never crossed my mind. Well,
here I am still, and I have had the lucky chance to grow alongside computer
science.
--047d7b86e6de64aecb04d85affff
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>I am greatly honored to receive this award, bearing t=
he name of Alan Turing. Perhaps Turing would be pleased that it should go t=
o someone educated at his old college, King&#39;s College at Cambridge. Whi=
le there in 1956 I wrote my first computer program; it was on the EDSAC. Of=
course EDSAC made history. But I am ashamed to say it did not lure me into=
computing, and I ignored computers for four years. In 1960 I thought that =
computers might be more peaceful to handle than schoolchildren--I was then =
a teacher--so I applied for a job at Ferranti in London, at the time of=C2=
=A0</div>
<div>Pegasus. I was asked at the interview whether I would like to devote m=
y life to computers. This daunting notion had never crossed my mind. Well, =
here I am still, and I have had the lucky chance to grow alongside computer=
science.</div>
</div>
--047d7b86e6de64aecb04d85affff--

View file

@ -0,0 +1,28 @@
MIME-Version: 1.0
From: Amir Pnueli <amir.pnueli@example.com>
Date: Thu, 15 Feb 1996 12:00:00 -0500
Message-ID: <turing1996@cketti.de>
Subject: Verification Engineering: A Future Profession
To: Alan Turing <alan@turing.example>
Content-Type: multipart/alternative; boundary=bcaec54fbb222acf6704d85aa523
--bcaec54fbb222acf6704d85aa523
Content-Type: text/plain; charset=UTF-8
It is time that formal verification (of both software and hardware systems)
be demoted from an art practiced by the enlightened few to an activity
routinely and mundanely performed by a cadre of Verification Engineers (a
new profession), as a standard part of the system development process.
--bcaec54fbb222acf6704d85aa523
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>It is time that formal verification (of both software=
and hardware systems) be demoted from an art practiced by the enlightened =
few to an activity routinely and mundanely performed by a cadre of Verifica=
tion Engineers (a new profession), as a standard part of the system develop=
ment process.</div>
</div>
--bcaec54fbb222acf6704d85aa523--