Repo created

This commit is contained in:
Fr4nz D13trich 2025-11-22 13:56:56 +01:00
parent 75dc487a7a
commit 39c29d175b
6317 changed files with 388324 additions and 2 deletions

View file

@ -0,0 +1,14 @@
plugins {
id(ThunderbirdPlugins.Library.jvm)
alias(libs.plugins.android.lint)
alias(libs.plugins.kotlin.serialization)
}
dependencies {
api(projects.backend.api)
implementation(projects.feature.mail.folder.api)
implementation(libs.kotlinx.serialization.json)
testImplementation(projects.mail.testing)
}

View file

@ -0,0 +1,33 @@
package app.k9mail.backend.demo
import com.fsck.k9.backend.api.BackendStorage
import com.fsck.k9.backend.api.FolderInfo
import com.fsck.k9.backend.api.updateFolders
import net.thunderbird.feature.mail.folder.api.FOLDER_DEFAULT_PATH_DELIMITER
import net.thunderbird.feature.mail.folder.api.FolderPathDelimiter
internal class CommandRefreshFolderList(
private val backendStorage: BackendStorage,
private val demoStore: DemoStore,
) {
fun refreshFolderList(): FolderPathDelimiter? {
val localFolderServerIds = backendStorage.getFolderServerIds().toSet()
backendStorage.updateFolders {
val remoteFolderServerIds = demoStore.getFolderIds()
val foldersServerIdsToCreate = remoteFolderServerIds - localFolderServerIds
val foldersToCreate = foldersServerIdsToCreate.mapNotNull { folderServerId ->
demoStore.getFolder(folderServerId)?.let { folderData ->
FolderInfo(folderServerId, folderData.name, folderData.type)
}
}
createFolders(foldersToCreate)
val folderServerIdsToRemove = (localFolderServerIds - remoteFolderServerIds).toList()
deleteFolders(folderServerIdsToRemove)
}
return FOLDER_DEFAULT_PATH_DELIMITER
}
}

View file

@ -0,0 +1,32 @@
package app.k9mail.backend.demo
import app.k9mail.backend.demo.DemoHelper.createNewServerId
import com.fsck.k9.backend.api.BackendStorage
import com.fsck.k9.mail.Message
import com.fsck.k9.mail.MessageDownloadState
import com.fsck.k9.mail.internet.MimeMessage
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
internal class CommandSendMessage(
private val backendStorage: BackendStorage,
private val demoStore: DemoStore,
) {
fun sendMessage(message: Message) {
val inboxServerId = demoStore.getInboxFolderId()
val backendFolder = backendStorage.getFolder(inboxServerId)
val newMessage = message.copy(uid = createNewServerId())
backendFolder.saveMessage(newMessage, MessageDownloadState.FULL)
}
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
}
}
}

View file

@ -0,0 +1,40 @@
package app.k9mail.backend.demo
import com.fsck.k9.backend.api.BackendFolder.MoreMessages
import com.fsck.k9.backend.api.BackendStorage
import com.fsck.k9.backend.api.SyncListener
import com.fsck.k9.mail.MessageDownloadState
internal class CommandSync(
private val backendStorage: BackendStorage,
private val demoStore: DemoStore,
) {
fun sync(folderServerId: String, listener: SyncListener) {
listener.syncStarted(folderServerId)
val folder = demoStore.getFolder(folderServerId)
if (folder == 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 folder.messageServerIds) {
val message = demoStore.getMessage(folderServerId, messageServerId)
backendFolder.saveMessage(message, MessageDownloadState.FULL)
listener.syncNewMessage(folderServerId, messageServerId, isOldMessage = false)
}
backendFolder.setMoreMessages(MoreMessages.FALSE)
listener.syncFinished(folderServerId)
}
}

View file

@ -0,0 +1,123 @@
package app.k9mail.backend.demo
import app.k9mail.backend.demo.DemoHelper.createNewServerId
import com.fsck.k9.backend.api.Backend
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.SyncConfig
import com.fsck.k9.backend.api.SyncListener
import com.fsck.k9.mail.BodyFactory
import com.fsck.k9.mail.Flag
import com.fsck.k9.mail.Message
import com.fsck.k9.mail.Part
import net.thunderbird.feature.mail.folder.api.FolderPathDelimiter
class DemoBackend(
private val backendStorage: BackendStorage,
) : Backend {
private val demoStore by lazy { DemoStore() }
private val commandSync by lazy { CommandSync(backendStorage, demoStore) }
private val commandRefreshFolderList by lazy { CommandRefreshFolderList(backendStorage, demoStore) }
private val commandSendMessage by lazy { CommandSendMessage(backendStorage, demoStore) }
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 supportsFolderSubscriptions: Boolean = false
override val isPushCapable: Boolean = false
override fun refreshFolderList(): FolderPathDelimiter? {
return commandRefreshFolderList.refreshFolderList()
}
override fun sync(folderServerId: String, syncConfig: SyncConfig, listener: SyncListener) {
commandSync.sync(folderServerId, listener)
}
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 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 sendMessage(message: Message) {
commandSendMessage.sendMessage(message)
}
override fun createPusher(callback: BackendPusherCallback): BackendPusher {
throw UnsupportedOperationException("not implemented")
}
}

View file

@ -0,0 +1,30 @@
package app.k9mail.backend.demo
import com.fsck.k9.mail.Message
import com.fsck.k9.mail.internet.MimeMessage
import java.io.InputStream
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.decodeFromStream
internal class DemoDataLoader {
@OptIn(ExperimentalSerializationApi::class)
fun loadFolders(): DemoFolders {
return getResourceAsStream("/contents.json").use { inputStream ->
Json.decodeFromStream<DemoFolders>(inputStream)
}
}
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 this.javaClass.getResourceAsStream(name) ?: error("Resource '$name' not found")
}
}

View file

@ -0,0 +1,12 @@
package app.k9mail.backend.demo
import com.fsck.k9.mail.FolderType
import kotlinx.serialization.Serializable
@Serializable
internal data class DemoFolder(
val name: String,
val type: FolderType,
val messageServerIds: List<String>,
val subFolders: DemoFolders? = null,
)

View file

@ -0,0 +1,3 @@
package app.k9mail.backend.demo
internal typealias DemoFolders = Map<String, DemoFolder>

View file

@ -0,0 +1,7 @@
package app.k9mail.backend.demo
import java.util.UUID
internal object DemoHelper {
fun createNewServerId() = UUID.randomUUID().toString()
}

View file

@ -0,0 +1,54 @@
package app.k9mail.backend.demo
import com.fsck.k9.mail.FolderType
import com.fsck.k9.mail.Message
internal class DemoStore(
private val demoDataLoader: DemoDataLoader = DemoDataLoader(),
) {
private val demoFolders: DemoFolders by lazy { flattenDemoFolders(demoDataLoader.loadFolders()) }
fun getFolder(folderServerId: String): DemoFolder? {
return demoFolders[folderServerId]
}
fun getFolderIds(): Set<String> {
return demoFolders.keys
}
fun getInboxFolderId(): String {
return demoFolders.filterValues { it.type == FolderType.INBOX }.keys.first()
}
fun getMessage(folderServerId: String, messageServerId: String): Message {
return demoDataLoader.loadMessage(folderServerId, messageServerId)
}
// This is a workaround for the fact that the backend doesn't support nested folders
private fun flattenDemoFolders(
demoFolders: DemoFolders,
parentName: String = "",
parentServerId: String = "",
): DemoFolders {
val flatFolders = mutableMapOf<String, DemoFolder>()
for ((folderServerId, demoFolder) in demoFolders) {
val fullName = if (parentName.isEmpty()) {
demoFolder.name
} else {
"$parentName/${demoFolder.name}"
}
val fullServerId = if (parentServerId.isEmpty()) {
folderServerId
} else {
"$parentServerId/$folderServerId"
}
flatFolders[fullServerId] = demoFolder.copy(name = fullName)
val subFolders = demoFolder.subFolders
if (subFolders != null) {
flatFolders.putAll(flattenDemoFolders(demoFolder.subFolders, fullName, fullServerId))
}
}
return flatFolders
}
}

View file

@ -0,0 +1,88 @@
{
"inbox": {
"name": "Inbox",
"type": "INBOX",
"messageServerIds": [
"intro",
"many_recipients",
"thread_1",
"thread_2",
"inline_image_data_uri",
"inline_image_attachment",
"localpart_exceeds_length_limit"
]
},
"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"
]
},
"nested": {
"name": "Nested",
"type": "REGULAR",
"messageServerIds": [
"nested_1"
],
"subFolders": {
"nested_level_1": {
"name": "Nested Level 1",
"type": "REGULAR",
"messageServerIds": [
"nested_level_1_1",
"nested_level_1_2"
],
"subFolders": {
"nested_level_2": {
"name": "Nested Level 2",
"type": "REGULAR",
"messageServerIds": [
"nested_level_2_1",
"nested_level_2_2"
]
}
}
}
}
}
}

View file

@ -0,0 +1,332 @@
MIME-Version: 1.0
From: "Test data" <data@example.com>
Date: Tue, 14 Feb 2023 15:00:00 +0100
Message-ID: <inbox-6@example.com>
Subject: Inline image attachment
To: User <user@example.com>
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@example.com">
</body>
</html>
--BOUNDARY
Content-Type: image/png; name="thunderbird.png"
Content-Transfer-Encoding: base64
Content-ID: <part1@example.com>
Content-Disposition: inline; filename="thunderbird.png"
iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAEtWlUWHRYTUw6Y29tLmFkb2JlLnht
cAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi
Pz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUg
NS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIy
LXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1s
bnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJo
dHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDov
L25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFk
b2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hh
cC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9z
VHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjEyOCIKICAgZXhp
ZjpQaXhlbFlEaW1lbnNpb249IjEyOCIKICAgZXhpZjpDb2xvclNwYWNlPSIxIgogICB0aWZmOklt
YWdlV2lkdGg9IjEyOCIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMTI4IgogICB0aWZmOlJlc29sdXRp
b25Vbml0PSIyIgogICB0aWZmOlhSZXNvbHV0aW9uPSI3Mi8xIgogICB0aWZmOllSZXNvbHV0aW9u
PSI3Mi8xIgogICBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIgogICBwaG90b3Nob3A6SUNDUHJvZmls
ZT0ic1JHQiBJRUM2MTk2Ni0yLjEiCiAgIHhtcDpNb2RpZnlEYXRlPSIyMDI1LTAzLTA0VDE5OjEy
OjU5KzAxOjAwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDI1LTAzLTA0VDE5OjEyOjU5KzAxOjAw
Ij4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0
RXZ0OmFjdGlvbj0icHJvZHVjZWQiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFmZmluaXR5
IFBob3RvIDIgMi42LjAiCiAgICAgIHN0RXZ0OndoZW49IjIwMjUtMDMtMDRUMTk6MTI6NTkrMDE6
MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0
aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0iciI/PkBqBbkAAAGB
aUNDUHNSR0IgSUVDNjE5NjYtMi4xAAAokXWRzytEURTHPzNDxAixUCwmYTU0fjSxUUZCSdMYZbCZ
eTNvRs2P13szabJVtooSG78W/AVslbVSRErWbIkNes6bUTPJnNu553O/957TveeCPZhUUkaVB1Lp
rB6Y9LkWQouumhccVNHMEO1hxdDG/P4ZKtrHHTYr3vRatSqf+9fqozFDAVut8Kii6VnhKeGZ1axm
8bZwq5IIR4VPhd26XFD41tIjRX62OF7kL4v1YGAc7E3CrngZR8pYSegpYXk5XalkTvm9j/USZyw9
PyexU7wDgwCT+HAxzQTjeOlnRGYvvQzQJysq5HsK+bNkJFeRWSOPzgpxEmRxi5qT6jGJqugxGUny
Vv//9tVQBweK1Z0+qH4yzbduqNmC703T/Dw0ze8jcDzCRbqUnzmA4XfRN0ta1z40rsPZZUmL7MD5
BrQ9aGE9XJAc4nZVhdcTaAhByzXULRV79rvP8T0E1+SrrmB3D3rkfOPyD2DqZ+MT1h/FAAAACXBI
WXMAAAsTAAALEwEAmpwYAAAgAElEQVR4nO29ebwmRXkv/q3qftfznn3OmY0BZoYBAdnRxKDmZxIQ
iEt+10RzzQ+SuIZEjahBXBL9GTXGeKMs0Zt7jbJqhKi43HsjKBEBBWTfZ2dgZs6s58xZ3vMu3V3P
/aO6qp7q7vfMDMy4RGo+Z97urv3Zn6equoHn0/Pp+fSrm8TPewD/mdNrPztZGhJiHMDiQGBcAGMS
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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: "Thunderbird" <thunderbird@example.com>
Date: Thu, 23 Sep 2021 23:42:00 +0200
Message-ID: <hello-1-2-3@example.com>
Subject: Welcome to Thunderbird for Android
To: User <user@example.com>
Content-Type: text/plain; charset=UTF-8
Congratulations, you have managed to set up Thunderbird for Android's demo account. Have fun exploring the app.

View file

@ -0,0 +1,9 @@
MIME-Version: 1.0
From: Sender <aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffggggg@example.com> (local part exceeds maximum length)
Date: Thu, 15 Jun 2023 18:00:00 +0200
Message-ID: <localpart@example.com>
Subject: Localpart of email address exceeds 64 characters
To: User <user@example.com>
Content-Type: text/plain; charset=UTF-8
You should still be able to read this message.

View file

@ -0,0 +1,42 @@
MIME-Version: 1.0
From: "Alice" <from1@example.com>, "Bob" <from2@example.com>
Sender: "Bernd" <sender@example.com>
Reply-To: <reply-to@example.com>
Date: Mon, 23 Jan 2023 12:00:00 +0100
Message-ID: <inbox-2@example.com>
Subject: Message details demo
To: "User 1" <to1@example.com>,
"User 2" <to2@example.com>,
"User 3" <to3@example.com>,
"User 4" <to4@example.com>,
"User 5" <to5@example.com>,
"User 6" <to6@example.com>,
"User 7" <to7@example.com>,
"User 8" <to8@example.com>,
"User 9" <to9@example.com>,
"User 10" <to10@example.com>,
"User 11" <to11@example.com>,
"User 12" <to12@example.com>,
"User 13" <to13@example.com>,
"User 14" <to14@example.com>,
"User 15" <to15@example.com>,
"User 16" <to16@example.com>,
"User 17" <to17@example.com>,
"User 18" <to18@e10.example.com>,
"User 19" <to19@e11.example.com>,
"User 20" <to20@e12.example.com>
Cc: "Copy 1" <cc1@example.com>,
"Copy 2" <cc2@example.com>,
"Copy 3" <cc3@example.com>
Bcc: "Blind 1" <bcc1@example.com>,
"Blind 2" <bcc2@example.com>,
"Blind 3" <bcc3@example.com>
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@example.com>
Date: Fri, 10 Feb 2023 10:00:00 +0100
Message-ID: <thread-1@example.com>
Subject: Thread
To: Bob <bob@example.com>
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@example.com>
Date: Fri, 10 Feb 2023 10:05:00 +0100
Message-ID: <thread-2@example.com>
Subject: Re: Thread
To: Alice <alice@example.com>
In-Reply-To: <thread-1@example.com>
References: <thread-2@example.com>
Content-Type: text/plain; charset=UTF-8
This is the second message in this thread.

View file

@ -0,0 +1,20 @@
MIME-Version: 1.0
From: "Nested User" <nested@example.com>
Date: Mon, 01 Jan 2024 12:00:00 -0400
Message-ID: <nested_1@example.com>
Subject: Nested Message
To: User <user@example.com>
Content-Type: multipart/alternative; boundary=047d7b450b100959e604d85a5320
--047d7b450b100959e604d85a5320
Content-Type: text/plain; charset=UTF-8
This is a message in the Nested folder.
--047d7b450b100959e604d85a5320
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>This is a message in the Nested folder.</div></div>
--047d7b450b100959e604d85a5320--

View file

@ -0,0 +1,20 @@
MIME-Version: 1.0
From: "Nested Level 1 User" <nested.level1@example.com>
Date: Mon, 01 Jan 2024 12:00:00 -0400
Message-ID: <nested_level_1_1@example.com>
Subject: Nested Level 1 Message
To: Nested Level 2 User <nested.level2@example.com>
Content-Type: multipart/alternative; boundary=047d7b450b100959e604d85a5320
--047d7b450b100959e604d85a5320
Content-Type: text/plain; charset=UTF-8
This is a message 1 in the Nested Level 1 folder.
--047d7b450b100959e604d85a5320
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>This is a message in the Nested Level 1 folder.</div></div>
--047d7b450b100959e604d85a5320--

View file

@ -0,0 +1,20 @@
MIME-Version: 1.0
From: "Nested Level 1 User" <nested.level1@example.com>
Date: Mon, 01 Jan 2024 12:00:00 -0400
Message-ID: <nested_level_1_2@example.com>
Subject: Nested Level 1 Message
To: Nested Level 2 User <nested.level2@example.com>
Content-Type: multipart/alternative; boundary=047d7b450b100959e604d85a5320
--047d7b450b100959e604d85a5320
Content-Type: text/plain; charset=UTF-8
This is a message 2 in the Nested Level 1 folder.
--047d7b450b100959e604d85a5320
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>This is a message in the Nested Level 1 folder.</div></div>
--047d7b450b100959e604d85a5320--

View file

@ -0,0 +1,20 @@
MIME-Version: 1.0
From: "Nested Level 2 User" <nested.level2@example.com>
Date: Mon, 01 Jan 2024 12:00:00 -0400
Message-ID: <nested_level_2_1@example.com>
Subject: Nested Level 2 Message
To: Nested Level 1 User <nested.level1@example.com>
Content-Type: multipart/alternative; boundary=047d7b450b100959e604d85a5320
--047d7b450b100959e604d85a5320
Content-Type: text/plain; charset=UTF-8
This is a message 1 in the Nested Level 2 folder.
--047d7b450b100959e604d85a5320
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>This is a message in the Nested Level 2 folder.</div></div>
--047d7b450b100959e604d85a5320--

View file

@ -0,0 +1,20 @@
MIME-Version: 1.0
From: "Nested Level 2 User" <nested.level2@example.com>
Date: Mon, 01 Jan 2024 12:00:00 -0400
Message-ID: <nested_level_2_2@example.com>
Subject: Nested Level 2 Message
To: Nested Level 1 User <nested.level1@example.com>
Content-Type: multipart/alternative; boundary=047d7b450b100959e604d85a5320
--047d7b450b100959e604d85a5320
Content-Type: text/plain; charset=UTF-8
This is a message 2 in the Nested Level 2 folder.
--047d7b450b100959e604d85a5320
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>This is a message in the Nested Level 2 folder.</div></div>
--047d7b450b100959e604d85a5320--

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@example.com>
Subject: The Synthesis of Algorithmic Systems
To: Alan Turing <alan.turing@example.com>
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@example.com>
Subject: Computers Then and Now
To: Alan Turing <alan.turing@example.com>
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@example.com>
Subject: One Man's View of Computer Science
To: Alan Turing <alan.turing@example.com>
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@example.com>
Subject: Some Comments from a Numerical Analyst
To: Alan Turing <alan.turing@example.com>
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@example.com>
Subject: Generality in Artificial Intelligence
To: Alan Turing <alan.turing@example.com>
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@example.com>
Subject: The Humble Programmer
To: Alan Turing <alan.turing@example.com>
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@example.com>
Subject: Computer Science as Empirical Inquiry: Symbols and Search
To: Alan Turing <alan.turing@example.com>
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@example.com>
Subject: Can Programming Be Liberated from the von Neumann Style? A Functional
Style and Its Algebra of Programs
To: Alan Turing <alan.turing@example.com>
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@example.com>
Subject: The Paradigms of Programming
To: Alan Turing <alan.turing@example.com>
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@example.com>
Subject: Notation as a Tool of Thought
To: Alan Turing <alan.turing@example.com>
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@example.com>
Subject: Relational Database: A Practical Foundation for Productivity
To: Alan Turing <alan.turing@example.com>
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@example.com>
Subject: Reflections on Software Research
To: Alan Turing <alan.turing@example.com>
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@example.com>
Subject: The Search for Performance in Scientific Processors
To: Alan Turing <alan.turing@example.com>
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@example.com>
Subject: Elements of Interaction
To: Alan Turing <alan.turing@example.com>
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@example.com>
Subject: Verification Engineering: A Future Profession
To: Alan Turing <alan.turing@example.com>
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--