Wikibooks enwikibooks https://en.wikibooks.org/wiki/Main_Page MediaWiki 1.47.0-wmf.23 first-letter Media Special Talk User User talk Wikibooks Wikibooks talk File File talk MediaWiki MediaWiki talk Template Template talk Help Help talk Category Category talk Cookbook Cookbook talk Transwiki Transwiki talk Wikijunior Wikijunior talk Subject Subject talk TimedText TimedText talk Module Module talk Event Event talk Wikibooks:Requests for deletion 4 385 4675429 4674974 2026-10-10T07:49:51Z EggRoll97 3178669 Adding deletion request for [[The Permanent Advantage]] 4675429 wikitext text/x-wiki __NEWSECTIONLINK__ [[Category:Wikibooks deletion|{{PAGENAME}}]] {{Discussion Rooms}} {{TOCleft}} {{shortcut|WB:RFD}} {{Requests for deletion/New deletion}} {{Requests for deletion/Deletion intro}} <!-- New deletion nominations go at the bottom of page. --> == [[Salute, Jonathan!]] and its translations == <div style="column-count: 7;"> * [[Salute, Jonathan!|Interlingue/Occidental]] ([[w:en:Occidental|w]], original) * [[Òla, Ionatà!|Audià]] * [[Holo, Jonathan!|Cristianés]] * [[Terve, Jonathan!|Ekumenski]] * [[Hej, Jonathan! (Germanisch)|Germanisch]] * [[Salom, Jonatan!|Globasa]] * [[Àlŏ, Jonathan!|Guosa]] ([[w:en:Guosa|w]]) * [[Salut, Jonathan!|Idiom Neutral]] ([[w:en:Idiom Neutral|w]]) * [[Saluto, Jonathan! (Ido)|Ido]] ([[w:en:Ido|w]]) * [[Hallo, Jonathan!|Interlingua]] ([[w:en:Interlingua|w]]) * [[Salut, Jonathan! (Interocidental)|Interocidental]] * [[Bune Ğonatan!|Lingaust]] * [[Oila, Jonatan!|Lingue Simple]] * [[Haloo, Jonatan!|Lingwa de Planeta]] ([[w:en:Lingwa de Planeta|w]]) * [[Sin Chao, Jonathan!|Masa Tang]] * [[Salut, ionatano!|Meteza]] * [[Salu, Jon!|Mini]] * [[Hay, Jonathan!|Mirad]] * [[Hai, Jon!|Monav]] * [[Sesan Jon!|Monkel]] * [[Salam, Jonathan!|Mundeze]] * [[Dag, Jonathan!|Negerhollands]] ([[w:en:Negerhollands|w]]) * [[Salut Jonathan!|Neo]] ([[w:en:Neo|w]]) * [[Hej, Jonathan!|Nordien]] * [[Saluto, Jonathan!|Novial]] ([[w:en:Novial|w]]) * [[Salute, Jonathan! (Novlingue)|Novlingue]] * [[Alo, Jonathan!|Numo]] * [[Hela, Jonathan!|Proyo]] * [[Salute, Jonathan! (Romanica)|Romanica]] ([[w:en:Romanica|w]]) * [[Simi, Jonathan!|Solresol]] ([[w:en:Solresol|w]]) * [[Toki a, jan Jonatan!|Toki Pona]] ([[w:en:Toki Pona|w]]) * [[Glidis, o Jonathan!|Volapük]] ([[w:en:Volapük|w]]) </div> There are a couple of issues here: # Beyond their introductions, all of these books are written in languages which are not English, making them out of scope for the English Wikibooks. # All but one of these books are in fact written in constructed languages, most of them in recently created conlangs. In some cases (e.g. [[Sin Chao, Jonathan!]]), I can't find any reliable sources describing the target language outside of the translation itself. # Most of the translations (i.e. other than [[Salute, Jonathan!]] itself) were abandoned within the first five or so chapters (out of 100); none of them are complete, and there seems to be little effort to complete any of them. While I recognize that this is an unusual project, and potentially one which could have some value, it's not at all clear to me that the English Wikibooks is the right place for it. — [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 00:24, 29 September 2024 (UTC) : I'm really not sure what to do about these ones. While I recognize that this approach is certainly one method of teaching a language, I'm not sure that it constitutes an educational textbook. We do require that the English Wikibooks be written in English—for language-learning books, this typically means that the instructional parts are in English while the exercises are in the language being taught. I do think that if the language doesn't have much supporting evidence outside the book itself, it can safely be deleted. — [[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:01, 29 September 2024 (UTC) : Author of the book here. I originally wanted to put it in the Interlingue Wikibooks https://ie.wikibooks.org/wiki/Principal_p%C3%A1gine but it somehow got locked when I wasn't paying attention and so I ended up putting it here. Getting it unlocked requires going through the process of starting an Incubator and all the rest so I opted for here and then started putting some English-only content once it was done. It's sort of in the same vein as books like Lingua Latina per se Illustrata that have separate versions with teacher notes and whatnot. [[Salute, Jonathan!/Capitul 1 - with notes]] After it was done the auxlang community really took to it which was a nice surprise. I think Ido has the largest number of chapters at the moment at 15. :If the vast content of this book could be used to justify a quick reopening of the Interlingue Wikibooks to move it there, I'd love to do that. I imagine that an incubator with 100+ book chapters would be enough to open a Wikibooks and that's what this is. — [[User:Mithridates|Mithridates]] ([[User talk:Mithridates|discuss]] • [[Special:Contributions/Mithridates|contribs]]) 06:02, 29 September 2024 (UTC) : Ah, I just realized that we do have a proposal to reopen the Interlingue Wikibooks: https://meta.wikimedia.org/wiki/Requests_for_new_languages/Wikibooks_Interlingue along with an Incubator page here. https://incubator.wikimedia.org/wiki/Wb/ie/Principal_p%C3%A1gine : How easy would it be to migrate the entirety of Salute Jonathan to there? — [[User:Mithridates|Mithridates]] ([[User talk:Mithridates|discuss]] • [[Special:Contributions/Mithridates|contribs]]) 06:30, 29 September 2024 (UTC) :: Hi @[[User:Mithridates|Mithridates]]! I'm not sure how incubator projects work, but I fully support migrating these books there. You may want to inquire over there and link to this discussion to support your request to move the content over there. Cheers! — [[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:16, 29 September 2024 (UTC) ::: Hi! Actually I have a third idea to propose after thinking about this again today (haven't been here much since I finished the book): I noticed that there is more English content than I remember and that might make it an awkward fit for the Interlingue Wikibooks. I definitely agree that having all the auxlang translations for new auxlang projects goes well beyond the scope of this Wikibooks. Finally, there are some auxlangs that are notable with their own Wikipedias. ::: So the idea is the following: :::# Leave the original here and I can continue the work on the version with English notes and grammar. That will make it the same as Lingua Latina per se Illustrata, English by the Nature Method, Athenaze and all the rest. :::# The Interlingua one can move to the Interlingua Wikibooks (maybe Romanica too if they want as it is sort of a dialect of Interlingua). :::# For Ido and Lingua Franca Nova which have a Wikipedia but not a Wikibooks, I'm a little bit unsure...technically they could have their own version like the original one but would require English explanations. I could let them know and see if they are willing to do so and see what they think (work on adding English to the books vs. move the content elsewhere). :::# The rest can move to a Github repo, then be deleted, and the front page of this book can have a single link to the repo. ::: Any thoughts on that? Adding the extra English content will be easy as it is my book and I know it inside and out. ::: Edit: [https://en.wikibooks.org/wiki/Salute,_Jonathan!/Grammar_(pronouns) this page] I just added. — [[User:Mithridates|Mithridates]] ([[User talk:Mithridates|discuss]] • [[Special:Contributions/Mithridates|contribs]]) 13:50, 29 September 2024 (UTC) :::: Thanks for taking the time to consider this! Here are my responses/questions: ::::* Is the original [[Salute, Jonathan!]] (Occidental)? Since that one is quite fleshed out, I agree that if you edit it so the primary language of the book (e.g. headers, instructions, etc) are written in English while leaving the actual story in Occidental, it would be okay and fit in more with instructional language textbooks. ::::* For your points 2 and 3, I'm not sure how those other projects work, so I'll leave it up to them. I'm not quite sure why they would need to move, since in theory they could be revised with English as the language of instruction? Although, they have been left incomplete for a long time. ::::* For your point 4, I have no problem with that. Cheers! — [[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 16:51, 29 September 2024 (UTC) ::::: Hello again, it's the weekend so I have a bit more time to work on this. I've decided to merge the extra content from the following five chapters since the difference is fairly small and the original chapters should now have this English content. Could you delete these five pages now that they are no longer needed? [[User:Mithridates|Mithridates]] ([[User talk:Mithridates|discuss]] • [[Special:Contributions/Mithridates|contribs]]) 14:02, 5 October 2024 (UTC) ::::: [[Salute, Jonathan!/Capitul 1 - with notes]] ::::: [[Salute, Jonathan!/Capitul 2 - with notes]] ::::: [[Salute, Jonathan!/Capitul 3 - with notes]] ::::: [[Salute, Jonathan!/Capitul 4 - with notes]] ::::: [[Salute, Jonathan!/Capitul 5 - with notes]] [[User:Mithridates|Mithridates]] ([[User talk:Mithridates|discuss]] • [[Special:Contributions/Mithridates|contribs]]) 14:02, 5 October 2024 (UTC) :::::: [[File:Yes_check.svg|{{#ifeq:|small|8|15}}px|link=|alt=]] {{#ifeq:|small|<small>|}}'''Done'''{{#ifeq:|small|</small>|}} — [[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 23:34, 5 October 2024 (UTC) ::::::: Hi again! No luck trying to find a home for the random language translations on other auxlang wikis, can't find one that is actively maintained. ::::::: The thought struck me that maybe I could just put those ones on a sub page of my user page, would that be permitted? If not, I think I'll just stick them somewhere in GitHub and call it a day since none of the people who started the translations seem to care enough to do anything about them. I'd rather not see them outright disappear but since they aren't mine I don't care enough about them to do much more work than copy and paste them somewhere. ::::::: (I would leave the ones in languages with an ISO-639 code and Wikipedia here, of course) — [[User:Mithridates|Mithridates]] ([[User talk:Mithridates|discuss]] • [[Special:Contributions/Mithridates|contribs]]) 14:13, 9 November 2024 (UTC) :::::::: Thank you for checking! I don't personally see an issue with moving them to your user space right now. Cheers — [[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 17:21, 9 November 2024 (UTC) ::::::::: Thanks a lot! I've started a single page where I will put them all here [[User:Mithridates/SJ]] and will proceed slowly due to lack of time and also to avoid stepping on any toes / asking you to delete too much at a time and possibly deleting the wrong content. ::::::::: For this week I have put the content for the languages Audia, Cristianès, Guosa, Lingaust, Mini, Mirad, and Monav on that page as they all have a single page of content and didn't take much time to move. Please delete those. Once they are gone I will add a note on the main page letting people know where they have gone (in addition to a thank you for their interest in the book! I do love how many people have recognized it as a good source material for teaching a language). — [[User:Mithridates|Mithridates]] ([[User talk:Mithridates|discuss]] • [[Special:Contributions/Mithridates|contribs]]) 04:09, 10 November 2024 (UTC) : {{keep}} the translations for languages that have an article on the English Wikipedia, i.e. Guosa, Idiom Neutral, Ido, Interlingua, Lingwa de Planeta, Negerhollands, Neo, Novial, Occidental, Romanica, Solresol, Toki Pona, and Volapük. : Translations for languages that don't have an article can be kept if they have reliable sources, which I was able to find for the following languages (if you think they are not reliable, please let me know): :* Globasa: [https://www.languagesandnumbers.com/how-to-count-in-globasa/en/globasa/] [https://greyson.conlang.org/2020/01/29/shouting-out-globasa-and-pandunia/] :* Mini: [https://jprogr.github.io/mini] [https://www.omniglot.com/language/phrases/mini.htm] [https://www.languagesandnumbers.com/how-to-count-in-mini/en/mini/] : {{del}} and move to [[User:Mithridates/SJ]] the rest of the translations, i.e. Audià/Audian, Cristianés, Ekumenski, Germanisch, Interocidental, Lingaust, Lingue Simple, Masa Tang, Mirad, Monav, Monkel, Mundeze, Nordien, Novlingue, Numo, Proyo, and Scuian/Meteza. If you can find reliable sources for those languages, please let me know. : In particular, I could not find resources for Audià/Audian and Monav after searching through 15 and 17 pages on Google, respectively. It doesn't help that [[Òla, Ionatà!|their]] [[Hai, Jon!|translations]] don't explain what those languages are and where to find resources for them. This makes contributing to those translations almost impossible until @[[User:Caro de Segeda|Caro de Segeda]] can provide resources to us. It's possible that the resources may have disappared from the Internet, or that those languages were created by Caro de Segeda him/herself. If you can find resources for Audià/Audian and Monav, please let me know. : I'm notifying the primary contributors of the translations: @[[User:Caro de Segeda|Caro de Segeda]], @[[User:Frzzl|Frzzl]], @[[User:Greatscotteh|Greatscotteh]], @[[User:IHateNumbers234|IHateNumbers234]], @[[User:Jayeless2|Jayeless2]], @[[User:Morozof|Morozof]], @[[User:Omnihom|Omnihom]], @[[User:Omoutuazn|Omoutuazn]], @[[User:PovriNaivon|PovriNaivon]], @[[User:Sir Beluga|Sir Beluga]] and @[[User:Tyoyafud|Tyoyafud]]. — [[User:EJPPhilippines|EJPPhilippines]] ([[User talk:EJPPhilippines|discuss]] • [[Special:Contributions/EJPPhilippines|contribs]]) 09:52, 30 June 2025 (UTC) :: Caro de Segeda said on [https://www.reddit.com/r/conlangs/comments/1lcnz9g/comment/n0sc3wx/ Reddit] that Monav was created by him/her and that he/she didn't publish any resources about it other than [[Hai, Jon!]]. With '''zero''' other resources to rely on for contributing to the translation, and the fact that Monav is in [[User:Mithridates/SJ]], [[Hai, Jon!]] should be speedy deleted. — [[User:EJPPhilippines|EJPPhilippines]] ([[User talk:EJPPhilippines|discuss]] • [[Special:Contributions/EJPPhilippines|contribs]]) 01:38, 3 July 2025 (UTC) ::: I've undone the speedy deletion as Caro de Segeda posted a [https://prexins.wordpress.com/2025/07/04/monav/ resource] for Monav. — [[User:EJPPhilippines|EJPPhilippines]] ([[User talk:EJPPhilippines|discuss]] • [[Special:Contributions/EJPPhilippines|contribs]]) 07:18, 4 July 2025 (UTC) :::: You can delete all the ones that I have created myself, I have already moved them to other places. — [[User:Caro de Segeda|Caro de Segeda]] ([[User talk:Caro de Segeda|discuss]] • [[Special:Contributions/Caro de Segeda|contribs]]) 12:39, 5 July 2025 (UTC) {{outdent|::::}}I don't know if this is helpful since it wouldn't apply to most of these, but [[s:mul:]] could hold some of these. — [[User:Arlo Barnes|Arlo Barnes]] ([[User talk:Arlo Barnes|discuss]] • [[Special:Contributions/Arlo Barnes|contribs]]) 09:18, 30 November 2025 (UTC) : I don't think that would be within the scope of that project. I'm not aware of any other situation where Wikisource publishes translations of texts created on Wikimedia projects - that's usually left up to other language editions of the same project. — [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 05:34, 1 December 2025 (UTC) :: In this situation there isn't a separate [[s:ie:]] distinct from Multilingual Wikisource (see [[meta:Wikisource#List of Wikisources]]). In fact, there are very few multilingual wikis in the Wikimedia sphere; while this project ''could'' move to a Miraheze-hosted or similar wiki farm location, I think it would be a missed opportunity. I suppose an [[Interlingue]] book could be started in [[shelf:Constructed languages]] which would have all 100 chapters as an appendix (and likewise for the other languages), but that also seems non-ideal since it requires an English-language text that doesn't currently exist to be created. [[WB:AT]] seems to describe a similar situation to this one and prescribe Wikisource as the solution, and [[WB:SOURCE]] mentions fiction as out-of-scope for Wikibooks (even as in this case, language-educational fiction). [[s:mul:Wikisource:about Wikisource]] simply speaks of source texts and doesn't mention publication requirements, so maybe that is specific to some of the monolingual editions? — [[User:Arlo Barnes|Arlo Barnes]] ([[User talk:Arlo Barnes|discuss]] • [[Special:Contributions/Arlo Barnes|contribs]]) 22:28, 5 December 2025 (UTC) :{{keep}} 100% keep. These books are a core part of language textbooks on Wikibooks and have been for years. Not sure why this is even being debated.--[[User:Xania|Xania]] [[Image:Flag_of_Estonia.svg|15px]] [[Image:Flag_of_Ukraine.svg|15px]] [[User talk:Xania|<sup>talk</sup>]] 17:55, 16 May 2026 (UTC) ::With all due respect, some of the books included in this nomination (like [[Sin Chao, Jonathan!]]) are written in constructed languages which are not substantially attested anywhere else. I struggle to imagine any educational purpose for such a book. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 00:12, 17 May 2026 (UTC) == [[International Baccalaureate]] == Not actually a book in and of itself; rather, it is just a compilation of links to other books —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 23:24, 18 October 2024 (UTC) : Could this be salvaged as a shelf? [[User:Pppery|Pppery]] ([[User talk:Pppery|discuss]] • [[Special:Contributions/Pppery|contribs]]) 05:23, 27 January 2025 (UTC) ::Probably, but are the linked books even useful? IB exams change from year to year - sometimes quite dramatically - so an old exam guide is of very limited value. Many of these books were written 10-15 years ago, and some of them (like [[IB French]]) even have comments indicating that they're no longer applicable. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 02:18, 8 December 2025 (UTC) == [[Character List for Baxter&Sagart]] == Seems completely out of scope as an educational book; it's just a list of characters and outlinks —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 23:53, 18 October 2024 (UTC) :Adding [[Character List for Karlgren's GSR]] and [[Character List for Schuessler's CGSR]] for the same reason —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 23:55, 18 October 2024 (UTC) :These three books do make a package and I agree they should be considered together. However, I strongly object to deleting them. They are really extremely useful resources. I use them every week and I know that many people who do work on Old Chinese phonology do so. There are lots of books out there that are lists of characters, these are called dictionaries. For example Axel Schuessler's ABC Etymological Dictionary of Old Chinese, or Pulleyblank's Lexicon of Reconstructed Pronunciation in Early Middle Chinese, Late Middle Chinese, and Early Mandarin. I see it as entirely a good thing for reference works of this kind to be available free online rather than only in expensive books in university research libraries. If this is in violation of a Wikibooks policy, I would at least like that policy to be drawn to my attention and to have some constructive comment offered about which Wikiproject such a resource should fall under. I will also say on a personal note that I have put literally hundreds of hours of work into these projects and it would grieve me a lot to see this work simply vanish, in particular when I know that colleagues around the world use these books. --[[User:Tibetologist|Tibetologist]] ([[User talk:Tibetologist|discuss]] • [[Special:Contributions/Tibetologist|contribs]]) 07:27, 1 November 2024 (UTC) ::Hi @[[User:Tibetologist|Tibetologist]], and thank you for the feedback! Official Wikibooks policy does not permit standalone dictionaries (see [[WB:DICT]]), though I understand the argument that it is a useful resource. I am wondering if there might be a home for it at [[Wiktionary:Wiktionary:Welcome, newcomers|Wiktionary]] or [[Wikiversity:Wikiversity:SHARE|Wikiversity]]? Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 12:14, 1 November 2024 (UTC) :::The policy says to use Wiktionary, but these books cannot be moved there. In fact they link there, you can understand me as having made an index to wiktionary, if you like, where the ORDER of the characters is extremely important, information that would be lost in Wiktionary. :::Wikiversity is not a project I participate in, and in any event my books here are older than it, so this option was not available for me at the relevant moment. If you are offering to move my books to Wikiversity, that is very kind of you and I will very graciously accept. [[User:Tibetologist|Tibetologist]] ([[User talk:Tibetologist|discuss]] • [[Special:Contributions/Tibetologist|contribs]]) 14:10, 1 November 2024 (UTC) ::::I have pinged over at Wikiversity Colloquium to ask about suitability and have looped you into the conversation over there. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 18:20, 1 November 2024 (UTC) ::I concur. I'm just an undergrad who tries to learn about Sino-Tibetan historical linguistics in his free time but I've found this wikibook to be incredibly useful, and I keep it open in one tab while I watch Professor Nathan Hill's lectures that he uploads to youtube in another tab, and another tab for taking notes. In fact if I remember correctly Professor Hill actually pointed his students to this wikibook. ::I'm not familiar with [[wikiversity:Wikiversity:SHARE|Wikiversity]] but if all the content were as accessible there as it is here then I think that could work. [[User:ChromeBones|ChromeBones]] ([[User talk:ChromeBones|discuss]] • [[Special:Contributions/ChromeBones|contribs]]) 02:43, 9 July 2025 (UTC) :Per [[:v:Wikiversity:Colloquium#Import_Resource_From_Wikibooks?]], I recommend copying and pasting, including attribution via the edit summary and talk page, add appropriate categories and links, and then it could be deleted locally. —[[User:Koavf|Justin (<span style="color:grey">ko'''a'''vf</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 22:32, 3 November 2024 (UTC) == [[Suomen kieli käyttöön]] == Multiple pages in this book are written entirely in Finnish, which is out of the enWB scope. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:09, 19 October 2024 (UTC) :I was going to say whether we should ask any fiwikibooks sysop to maybe see if this could be transwikied to fiwb if it's within the scope there. But [[:fi:Toiminnot:Käyttäjät/sysop]] indicates that there are only 3 sysops, and only {{u|Anr}} and {{u|Zache}} have made edits this ''year''. If they deem it to be salvageable, then transwiki + delete, otherwise straight-up delete. --[[User:SHB2000|SHB2000]] ([[User talk:SHB2000|discuss]] • [[Special:Contributions/SHB2000|contribs]]) 11:24, 14 November 2024 (UTC) ::It seems that the idea behind the book was for the pages to be bilingual, as it’s a language learning book. That’s why there are Finnish texts included intentionally even on the pages that are complete. There are similar books in dewikibooks and ruwikibooks as well. For the English version, I think the easiest way to proceed would be to clean up and adjust the page layout to fit enwikibooks better, and then translate the missing parts. By the way, if anyone wants to update the book’s name in English, it can be titled ''"Using the Finnish Language"'' or ''"Put Finnish Language into Use"'' for a direct translation. [[User:Zache|Zache]] ([[User talk:Zache|discuss]] • [[Special:Contributions/Zache|contribs]]) 11:57, 14 November 2024 (UTC) == [[AT&T Mobility FAQ]] == * [[AT&T Mobility FAQ]] * [[AT&T Mobility FAQ/MEdia Net Configuration]] * [[AT&T Mobility FAQ/Data Connect Configuration]] An ''extremely'' outdated FAQ on AT&T's cell phone services. Most of this document was written 20+ years ago as a Usenet FAQ; very little of it is accurate or useful anymore (particularly the two subpages, which have to do with obsolete configurations for "tethering" a computer to a cell phone). No objection if someone wants to update it, but there's clearly been no appetite to do that. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 22:20, 30 December 2024 (UTC) :I'm wondering if it might make sense for us to develop some kind of policy on archiving books here. There are many like this one that have a good deal of content but are extremely out of date and just not useful as originally intended. ——[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 22:34, 30 December 2024 (UTC) ::@[[User:Kittycataclysm|Kittycataclysm]]: See the newly developed [[Wikibooks:Outdated books]]. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 00:16, 31 December 2024 (UTC) :::Ooh, thanks - something like that seems like it could be an appropriate way to handle this book. A lot of the other outdated books I've tagged have been so incomplete that they wouldn't have been particularly useful even as historical references; this one might at least have some interest. :::Any chance we can get a separate namespace (maybe "Archive:") set up for archived book content? That'd make it possible to do things like exclude them from on-site search by default. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 21:07, 31 December 2024 (UTC) ::::I think this might be a more extended discussion, so I'll bump it over to the [[Wikibooks talk:Outdated books|talk page of the draft policy]]! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 21:54, 31 December 2024 (UTC) == Algebra/Chapter 10/Symmetric Polynomials == I personally believe that [[Algebra/Chapter 10/Symmetric Polynomials|this]], and all of the sections should be deleted for the fact that this goes WAY beyond the scope of what was intended for the Chapter (Algebra II level polynomials). [[User:GoreyCat|GoreyCat]] ([[User talk:GoreyCat|discuss]] • [[Special:Contributions/GoreyCat|contribs]]) 15:07, 6 February 2025 (UTC) :'''Split''': Deletion here is not the best solution (see [[w:WP:ATD]]). Instead, this page and its subpages should be moved to another book, most likely [[Abstract Algebra]]. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 17:35, 6 February 2025 (UTC) :{{keep}} since there is a good amount of content. If [[Abstract Algebra]] is appropriate, it seems like a fine idea to move there. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 22:59, 7 February 2025 (UTC) ::Eh, yeah, I supposed moving it is better. I just don't think it's suitable for where it appears. [[User:GoreyCat|GoreyCat]] ([[User talk:GoreyCat|discuss]] • [[Special:Contributions/GoreyCat|contribs]]) 01:40, 8 February 2025 (UTC) == [[Puredyne]] == Development of Puredyne Linux was discontinued in 2012, and the software no longer appears to be available for download anywhere. (An archive of the web site is still up - with a bunch of embedded spam links - but the download links are all dead.) Is this a suitable candidate for archival (cf. [[Wikibooks:Outdated books]]), or should it just be deleted? [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 04:35, 5 March 2025 (UTC) :I'd just archive stuff like this. Looks like a decent bit of work went into it, and you never know when someone might need to use Puredyne for some obscure project. I'd be willing to bet mirrors exist of it somewhere, or someone has it on a drive. If you want to find some stuff worth deleting, comb through [[:Category:Allbooks categories]]. [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 11:30, 5 March 2025 (UTC) == [[Template:Qr-twwp]] == This isn't exactly a request to delete the template, but rather to merge it with {{tlx|Copypaste}}. The {{tlx|Qr-twwp}} template serves the same purpose as {{tlx|Copypaste}}, but without the seven-day period after which the page is deleted. This leads to confusion, as well as a perpetually full [[:Category:Queried pages]]. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 17:37, 30 March 2025 (UTC) == [[Ghouls of the Miskatonic]] == I don't think that a plot summary of a book is in-scope here. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 18:43, 20 August 2025 (UTC) :{{vd}} - at least, not a summary of ''this'' book. A summary and/or study guide to a notable work of literature might be in scope, but this is certainly not one. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 21:23, 25 August 2025 (UTC) ::Hi. I am the creator of the pages of this book. If I understand correctly, it has to be a summary of a notable work of literature? So what exactly is defined as such? I only started this as I thought it would be fun, interesting and encouraging to others who read the Arkham Horror novels, and I thought it was permitted as I've seen other summaries of books on wikibooks. [[User:Dayne90|Dayne90]] ([[User talk:Dayne90|discuss]] • [[Special:Contributions/Dayne90|contribs]]) 13:27, 26 August 2025 (UTC) :::Your problem is it is just the plot... it needs to include an educational textual analysis to be in scope [[User:MarcGarver|MarcGarver]] ([[User talk:MarcGarver|discuss]] • [[Special:Contributions/MarcGarver|contribs]]) 12:47, 28 August 2025 (UTC) ::::And ideally it'd be a text which has ''already'' been the subject of literary analysis, such that the analysis on Wikibooks isn't original research. A notable work of literature like ''Frankenstein'' or ''Moby-Dick'' would easily meet that requirement; a tie-in novel for a tabletop RPG probably does not. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 22:08, 29 August 2025 (UTC) == [[A-level Computing AQA Paper 1 Skeleton program 2027]] == This was proposed for speedy deletion by [[User:Omphalographer]] as 'not being a book'. However, I think this page's future requires further discussion from the community. Maybe some input would be appreciated?[[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 23:51, 21 September 2026 (UTC) :As best I can tell, this is a page students are using to collaborate on solutions for a standardized test. There are a number of similar pages for other years linked from [[A-level Computing/AQA/Paper 1/Skeleton program]]. :This is not a good fit for Wikibooks. If these students are interested in this kind of collaboration, it should take place elsewhere. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 00:14, 22 September 2026 (UTC) ::The project can be moved to Wikiversity, I think. If the students can contribute it and make sure it complies with Wikibooks' guidelines, it can stay here. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 00:17, 22 September 2026 (UTC) :::@[[User:Omphalographer|Omphalographer]] @[[User:TechVindicator|TechVindicator]] :::There's been a Wikibook on this every single year, as I mentioned in my comment on the deletion notice. That doesn't mean that this shouldn't be on Wikiversity, just that there is ample precedent of it being a Wikibook. Dunno if this matter to those kind of editorial decisions, though. [[Special:Contributions/~2026-51010-27|~2026-51010-27]] ([[User talk:~2026-51010-27|talk]]) 13:39, 22 September 2026 (UTC) ::::@[[User:~2026-51010-27|~2026-51010-27]]: How would the page comply with [[WB:What is Wikibooks?|Wikibooks' mission]]?. Could you provide an explanation of what the project is? If it's a collaborative project to work on solutions for a standardized test (like @[[User:Omphalographer|Omphalographer]] said), it would be more suitable for Wikiversity. If it's a textbook about A-level computing, then it would be suitable here. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 13:58, 22 September 2026 (UTC) :::::Hi, :::::This is definitely the former, not the latter. As I said, I don't particularly think this should be on Wikibooks, it just happens the previous years had been, and clearly they weren't subject to this degree of scrutiny 😅 :::::I have created https://en.wikiversity.org/wiki/A-level_Computer_Science_AQA_Paper_1_Skeleton_program_2027 - I'll delete the content of the page and put the link at the top. If there is a more appropriate banner to indicate the migration, please make it look how it should :D [[User:MrBerard|MrBerard]] ([[User talk:MrBerard|discuss]] • [[Special:Contributions/MrBerard|contribs]]) 10:23, 29 September 2026 (UTC) ::::::I can't seem to put a link without the edit being deemed destructive, so I'll let you trusted people do what's needed. [[User:MrBerard|MrBerard]] ([[User talk:MrBerard|discuss]] • [[Special:Contributions/MrBerard|contribs]]) 10:27, 29 September 2026 (UTC) == [[Talmudic aramic]] == Per the user's other mass-created pages, I concur with the AI flagging that Kittycataclysm placed on the page. I believe this to be LLM-generated, and it should thus be deleted. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 03:29, 30 September 2026 (UTC) :{{vd}}, LLM spam. [[User:Ternera|Ternera]] ([[User talk:Ternera|discuss]] • [[Special:Contributions/Ternera|contribs]]) 13:22, 30 September 2026 (UTC) :{{vd}} - like most LLM-generated books, this is heavy on structure and light on substance. Most of the content amounts to a poorly organized glossary, and there are a lot of pieces missing. (For instance, there is no discussion of the grammar of the language beyond a couple of fixed expressions.) [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 19:11, 1 October 2026 (UTC) == [[Job Search]] == * as well as [[Job Search Automation for College Students]]. Neither of these books contains any useful information. The first book seems to be written primarily to funnel users to the second, and the second to funnel users to [[PlanoTse Handbook for Job Search Automation]], which was deleted last year. (The deletion request doesn't seem to have been archived.) The sum total of information in these two books is, essentially, "you can search for jobs online", which is insultingly trivial. The second book's suggestion that users automate the job search process is of no practical value; most web search engines and job search sites nowadays will detect and block automated access. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 18:36, 1 October 2026 (UTC) : {{vd}} and redirect to [[Find Employment]]. ‑‑[[User:Kai Burghardt|Kai Burghardt]] ([[User talk:Kai Burghardt|discuss]] • [[Special:Contributions/Kai Burghardt|contribs]]) 05:14, 2 October 2026 (UTC) == [[Wikipage]] == Like a few other books created by this user, the purpose of this book appears to have been to promote a piece of software written by the author ([[User:Planotse]]). The software is no longer available, and there is no actual content in the book. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 18:40, 1 October 2026 (UTC) == [[Becoming a Linguistic Mastermind]] == Old book (created 2007) with no substantial content. The intent of this book appears to have been to create a single textbook encompassing ''all'' languages, with sub-courses for each language at [[Becoming a Linguistic Mastermind/The courses]], but no such courses were ever created. An analogous project on dewikibooks [[:b:de:Wikibooks:Löschkandidaten/ 2011-04#Der einfache Weg zum Sprachgenie|was deleted in 2011 for similar reasons]]. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 21:20, 7 October 2026 (UTC) == [[The Permanent Advantage]] == Probably LLM-generated, given broken templates, references to Claude, and section identifiers. This could probably be speedied, but not 100% sure so throwing it to RfD. Even regardless of whether it's LLM-generated or not, I can't see any way it's really suitable for the project. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 07:49, 10 October 2026 (UTC) juumw8ns4cbuk4j0c22omptcadd0y9g Wikibooks:Requests for undeletion 4 387 4675311 4674298 2026-10-09T19:09:37Z Omphalographer 3427146 /* Template:Message box */ new section 4675311 wikitext text/x-wiki __NEWSECTIONLINK__ [[Category:Wikibooks deletion|{{PAGENAME}}]] {{Discussion Rooms}} {{TOCleft}} {{shortcut|WB:RFU}} {{Requests for deletion/New undeletion}} {{Requests for deletion/Undeletion intro}} <!-- New undeletion requests go at the bottom of this page. --> == [[Character Encodings]] == *I didn't see the deletion discussion, as the latest author of this wikibook. <s>I want to know what work could be done to fix this, if it was restored.</s> I see that it needs content outside of code tables for it to be valid- if restored, I will add pages for MS-DOS, HP, and EBCDIC. What else needs to be done? If restoring is impossible, I at least want to view it.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 21:37, 9 March 2026 (UTC) **Maybe this can be merged into [[Introduction to Computer Information Systems]] or something similar. [[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 21:44, 9 March 2026 (UTC) **:Hi, [[User:Alexlatham96|Alexlatham96]]. I closed a [[Special:Diff/4622001|recent deletion discussion]] about the book, because: {{tq|Was never fleshed out into a proper book and consists only of code tables}}. I'll ping @[[User:Kittycataclysm|Kittycataclysm]] here if they have a second opinion, and because they created the discussion (that never had any participation). There were hundreds of pages in this book that will take some time to restore. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 00:32, 10 March 2026 (UTC) **::Chiming in here to elaborate on my reasoning! Per [[WB:WIW]], {{tq|as a general rule, only instructional books are suitable for inclusion. Non-fictional books (as well as fictional ones) that aren't instructional aren't allowed on Wikibooks}}. Examples of nonfictional books that aren't instructional/allowed include reference works like dictionaries, which are only really allowed as part of larger instructional books and not on their own. Based on the contents I saw here, the content was solely reference materials and not instructional materials. I see no problem with consolidating and migrating the content to something like a useful appendix as part of another book. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 18:15, 11 March 2026 (UTC) **:::Note that these pages were created as transwiki back in late 2024 from Wikipedia (and they were deleted afterwards), and since these were deleted now from WikiBooks, they're no longer visible (also, they're still deleted from Wikipedia). However, "Wayback Machine" seems to have a copy of it, but it may not be complete. **:::If a restoration here isn't possible, what should be done instead? **:::[[Special:Contributions/&#126;2026-15548-70|&#126;2026-15548-70]] ([[User talk:&#126;2026-15548-70|talk]]) 19:03, 11 March 2026 (UTC) **::::This was actually created in an earlier transwiki from Wikipedia (there were two)<s>-</s> the first being in July 2020. I support the proposal to make it an appendix to Introduction to Computer Information Systems or something similar.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 20:15, 11 March 2026 (UTC) **:::::{{ping|Alexlatham96}} which pages would you want to be undeleted? I can help. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 22:19, 11 March 2026 (UTC) **::::::Let's start with the MS-DOS (code page numbers 3846 and lower) and HP code tables section, because these were the most recently transwikied (people will be especially looking for code pages 775, 852, 855, 857, and 860). Once this is done, we can do the EBCDIC code tables, which were also transwikied (and I finished adding what was planned for Wikipedia).[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 00:17, 12 March 2026 (UTC) **:::::::I've undeleted all HP code table sections, and to clarify, do you want ALL MS-DOS sections lower than 3846 (including undeleting those in the 100-700 range) to be undeleted? [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 00:31, 12 March 2026 (UTC) **::::::::Yes, including 3846. [[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 00:55, 12 March 2026 (UTC) **:::::::::{{done|All done}}. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 02:29, 12 March 2026 (UTC) **::::::::::Great. Let me know when you have time to undelete the EBCDIC section- people will be looking for code pages 37, 500, 875, and 1026 especially.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 22:10, 12 March 2026 (UTC) **::::::::::Update: also the two in the ISO section- these are standards.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 06:29, 14 March 2026 (UTC) ***Thank you. I also see that the old administrator is inactive, and never found out about this. There <s>will</s> may have to be a new administrator other than me, since I am not one on Wikipedia or Wikibooks. <s>Does another user with knowledge of the topic like Drmccreedy or HarJIT have admin powers?</s>[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 03:34, 10 March 2026 (UTC) ***Update: I found out they do not have admin rights, but can still do non-admin tasks. The authors of Unicode's legacy encoding proposals (latest being L2-26/077) could also help out if they're active here.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 03:55, 10 March 2026 (UTC) * @[[User:Alexlatham96|Alexlatham96]], [[Character Encodings]] and its subpages are all now restored. I apologize for the huge delay; thank you for your patience. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:56, 2 October 2026 (UTC) ** Thank you!!! Adding descriptions to pages.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 01:45, 5 October 2026 (UTC) ***Started the Glossary. [[Talk:Character Encodings/Code Tables]] has still not been restored yet. [[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 02:05, 5 October 2026 (UTC) ***:{{done}} ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 02:11, 5 October 2026 (UTC) == Markdown == The page [[Markdown]] was short but pretty sweet. It showed Markdown features by example and contained decent external links. He who would want to expand the page had the option. I find the page to be a minimum useful product/artifact, to be ideally restored. For reference, [https://web.archive.org/web/20250427011600/https://en.wikibooks.org/wiki/Markdown the page in Wayback Machine]. --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 15:36, 5 May 2026 (UTC) : {{courtesy ping}} to [[User:Kittycataclysm|Kittycataclysm]] who marked the page for speedy deletion. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 19:00, 5 May 2026 (UTC) ::@[[User:Codename Noreste|Codename Noreste]] thank you! I think for me this relates to recent on-wiki discussions we've been having in the sense that I don't think it makes sense to host any content that could theoretically be improved by someone at some time in the future. Even if the content is valid (which it seems to be!), the work is not set up to be book-like, I don't think it's in scope here, and I can't see someone coming around and turning it into a book within a reasonable time frame. Does this help? —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 12:42, 8 May 2026 (UTC) ::: {{courtesy ping}} to [[User:Dan Polansky|Dan Polansky]]. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 16:28, 8 May 2026 (UTC) ::: {{Ping|Kittycataclysm}} The content is not book-like, but I do not recall this having been a requirement in Wikibooks (despite the name). If there is a requirement that the content should be book-like, it should be made into a policy. I created other pages that were instructional with no chance of being book-like in the past. Some examples of non-book-like pages include [[less]], [[grep]] and [[sed]]. ::: The content is minimum useful artifact for the head and is instructional. ::: Either way, can you please at least restore the content in my user space? --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 06:15, 18 May 2026 (UTC) ::::@[[User:Dan Polansky|Dan Polansky]] language in policy does refer to Wikibooks content as book-like. For example, per [[WB:WIW]]: ::::* {{tq|"The site should primarily be used for developing textbooks, textbook-like books, and supporting book-based instructional materials"}} ::::* {{tq|"As a general rule, only instructional books are suitable for inclusion"}} ::::* {{tq|"Wikibooks includes both minor and major book-like projects"}} ::::For other admins: if I am missing something obvious, please let me know. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:43, 20 May 2026 (UTC) ::::: {{Ping|Kittycataclysm}} Thank you. I note: 1) it says "primarily", which means "not exclusively"; 2) "instructional materials" is much broader than books. ::::: Moreover, I checked [https://en.wikibooks.org/w/index.php?title=Wikibooks:What_is_Wikibooks%3F&oldid=3797401 2021 version] of the policy and did not find the text you are quoting. When was the text introduced, by what process and who approved the text? --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 04:25, 20 May 2026 (UTC) ::::: Part of the answer lies in [https://en.wikibooks.org/w/index.php?title=Wikibooks:What_is_Wikibooks%3F&diff=prev&oldid=4377929 this edit] of yours from 9 March 2024, which does not trace to a discussion or a vote, but traces to [[Wikibooks:Policies and guidelines]]. However, [[Wikibooks:Policies and guidelines]] is not marked as a policy. ::::: Be it as it may, it does not answer my question: where is the evidence of consensus for the changes, minimally in the form of a discussion, and ideally in the form of a request for comments or a vote? ::::: Let me also ask from the point of view of examining other examples that I already brought up: is it your view that [[less]], [[sed]] and [[grep]] should be deleted as non-books, too short to be considered books? ::::: Let me also ask about the ''process'': why was RFD not used and instead speedy was used? From what I recall, Wikibooks used to delete subpar content via RFD, including all those outlines with no content proper. --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 04:41, 20 May 2026 (UTC) ::::::@[[User:Dan Polansky|Dan Polansky]] ::::::# That's a good catch about the March 9 edit—I can't recall why I made that decision, but I think you're right that moving text from a non-policy page to a policy page without discussion is not appropriate. My understanding is that the general sentiment is still correct, but we'll need more community discussion to officially integrate it into policy. ::::::# Regarding the other examples you listed: assuming the book-like requirement is the community consensus, I don't think they can stand on their own, but it might be possible to turn them into a more cohesive book. ::::::# Regarding the process, I flagged for speedy deletion because I was on the fence about whether it was a speedy or an RFD—in these cases, I usually flag for another admin to review instead of making the deletion myself. ::::::Since this is getting more into community consensus territory, I am looping in other active users and admins to weigh in @[[User:Atcovi|Atcovi]] @[[User:Leaderboard|Leaderboard]] @[[User:Xania|Xania]] @[[User:MarcGarver|MarcGarver]] @[[User:SHB2000|SHB2000]] @[[User:Omphalographer|Omphalographer]] @[[User:JJPMaster|JJPMaster]]. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:04, 20 May 2026 (UTC) ::::::: @Kittycataclysm: Thank you for this response. And let me also thank you for your clean-up effort at Wikibooks; hardly anyone wants to do that and you seem to be doing quite a lot of it. --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 13:56, 20 May 2026 (UTC) :::::::Wikibooks has never been heavy on written policies and tends to operate in line with what the current active community thinks is right. This isn't unusual, many small projects work like that. So getting hung up on who edited a policy and whether it was approved isn't really important - there have been many proposals put forward to amend WIW, and you need to search to find them as they are buried in different talk pages and project pages - what's important is what the community wants to do now. For what it is worth it is pretty clear from its very inception that the intention of Wikibooks was to host textbooks (see [[m:Talk:Science_Hypertextbook_project]]). That doesn't preclude the community from changing its mind, now or in the future. [[User:MarcGarver|MarcGarver]] ([[User talk:MarcGarver|discuss]] • [[Special:Contributions/MarcGarver|contribs]]) 15:23, 20 May 2026 (UTC) :::::::: 1) This use of the word "community" (instead of e.g. "editors") is a huge red flag. 2) The above attitude allows for a manipulation of the project, especially by people who are more interested in exercising their power than contributing any useful content. If there really is a consensus of the "current active community" (whatever that is supposed to mean), that current community should not have any difficulty passing it through a request for comment or a vote. From my experience, projects that disregard policies start to get controlled by bad actors, often actors who do not have the skill to do any content work so they natually tend toward mere administrators (also known by Steve Jobs as bozos). --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 07:06, 23 May 2026 (UTC) :::::::My thoughts are mostly with Marc's and Leaderboard's here. --[[User:SHB2000|SHB2000]] ([[User talk:SHB2000|discuss]] • [[Special:Contributions/SHB2000|contribs]]) 22:57, 20 May 2026 (UTC) ::::::::+1 —[[User:Atcovi|Atcovi]] [[User talk:Atcovi|(Talk]] - [[Special:Contributions/Atcovi|Contribs)]] 17:32, 23 May 2026 (UTC) :I think the book does not qualify in its current state (but as a draft, wouldn't have qualified for deletion either). Markdown is indeed a language without a lot to write; however, I think the book is too small as written. The fact that it's only a single page is fine. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 13:08, 20 May 2026 (UTC) :: But ''why'' does it not qualify, given it shows the most important features of Markup by example? (It is not a book and probably never will be. It is too short for that and will be too short, even if expanded.) --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 13:14, 20 May 2026 (UTC) :::It's too brief in my opinion. A Wikibook tends to have significantly more detail, even if it's just one page. I think the book can absolutely be expanded in a form that will allow it to stay here. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 14:15, 20 May 2026 (UTC) :::: Brief for what purpose or objective? As a user of Markdown, I want to know the answer to the following questions: 1) What is the core syntax of Markdown (so that I can use it productively)? 2) What are some of the best external sources about Markdown? I provided an answer to both questions. --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 07:21, 23 May 2026 (UTC) == [[Template:Message box]] == There are currently [[Special:WhatLinksHere/Template:Message box|128 pages linking to this template]] which are currently displaying error messages instead of the intended text. Even if there is a module which implements some of the technical functionality previously used by this template, a template is still needed to simplfiy the process of invoking that module - even if it just expands to <code><nowiki>{{#invoke:Message box}}</nowiki></code>. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 19:09, 9 October 2026 (UTC) 8hr8bixr0n70uqqx14doik30v5k32qs 4675313 4675311 2026-10-09T19:14:52Z Omphalographer 3427146 /* Pages related to citations */ new section 4675313 wikitext text/x-wiki __NEWSECTIONLINK__ [[Category:Wikibooks deletion|{{PAGENAME}}]] {{Discussion Rooms}} {{TOCleft}} {{shortcut|WB:RFU}} {{Requests for deletion/New undeletion}} {{Requests for deletion/Undeletion intro}} <!-- New undeletion requests go at the bottom of this page. --> == [[Character Encodings]] == *I didn't see the deletion discussion, as the latest author of this wikibook. <s>I want to know what work could be done to fix this, if it was restored.</s> I see that it needs content outside of code tables for it to be valid- if restored, I will add pages for MS-DOS, HP, and EBCDIC. What else needs to be done? If restoring is impossible, I at least want to view it.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 21:37, 9 March 2026 (UTC) **Maybe this can be merged into [[Introduction to Computer Information Systems]] or something similar. [[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 21:44, 9 March 2026 (UTC) **:Hi, [[User:Alexlatham96|Alexlatham96]]. I closed a [[Special:Diff/4622001|recent deletion discussion]] about the book, because: {{tq|Was never fleshed out into a proper book and consists only of code tables}}. I'll ping @[[User:Kittycataclysm|Kittycataclysm]] here if they have a second opinion, and because they created the discussion (that never had any participation). There were hundreds of pages in this book that will take some time to restore. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 00:32, 10 March 2026 (UTC) **::Chiming in here to elaborate on my reasoning! Per [[WB:WIW]], {{tq|as a general rule, only instructional books are suitable for inclusion. Non-fictional books (as well as fictional ones) that aren't instructional aren't allowed on Wikibooks}}. Examples of nonfictional books that aren't instructional/allowed include reference works like dictionaries, which are only really allowed as part of larger instructional books and not on their own. Based on the contents I saw here, the content was solely reference materials and not instructional materials. I see no problem with consolidating and migrating the content to something like a useful appendix as part of another book. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 18:15, 11 March 2026 (UTC) **:::Note that these pages were created as transwiki back in late 2024 from Wikipedia (and they were deleted afterwards), and since these were deleted now from WikiBooks, they're no longer visible (also, they're still deleted from Wikipedia). However, "Wayback Machine" seems to have a copy of it, but it may not be complete. **:::If a restoration here isn't possible, what should be done instead? **:::[[Special:Contributions/&#126;2026-15548-70|&#126;2026-15548-70]] ([[User talk:&#126;2026-15548-70|talk]]) 19:03, 11 March 2026 (UTC) **::::This was actually created in an earlier transwiki from Wikipedia (there were two)<s>-</s> the first being in July 2020. I support the proposal to make it an appendix to Introduction to Computer Information Systems or something similar.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 20:15, 11 March 2026 (UTC) **:::::{{ping|Alexlatham96}} which pages would you want to be undeleted? I can help. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 22:19, 11 March 2026 (UTC) **::::::Let's start with the MS-DOS (code page numbers 3846 and lower) and HP code tables section, because these were the most recently transwikied (people will be especially looking for code pages 775, 852, 855, 857, and 860). Once this is done, we can do the EBCDIC code tables, which were also transwikied (and I finished adding what was planned for Wikipedia).[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 00:17, 12 March 2026 (UTC) **:::::::I've undeleted all HP code table sections, and to clarify, do you want ALL MS-DOS sections lower than 3846 (including undeleting those in the 100-700 range) to be undeleted? [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 00:31, 12 March 2026 (UTC) **::::::::Yes, including 3846. [[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 00:55, 12 March 2026 (UTC) **:::::::::{{done|All done}}. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 02:29, 12 March 2026 (UTC) **::::::::::Great. Let me know when you have time to undelete the EBCDIC section- people will be looking for code pages 37, 500, 875, and 1026 especially.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 22:10, 12 March 2026 (UTC) **::::::::::Update: also the two in the ISO section- these are standards.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 06:29, 14 March 2026 (UTC) ***Thank you. I also see that the old administrator is inactive, and never found out about this. There <s>will</s> may have to be a new administrator other than me, since I am not one on Wikipedia or Wikibooks. <s>Does another user with knowledge of the topic like Drmccreedy or HarJIT have admin powers?</s>[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 03:34, 10 March 2026 (UTC) ***Update: I found out they do not have admin rights, but can still do non-admin tasks. The authors of Unicode's legacy encoding proposals (latest being L2-26/077) could also help out if they're active here.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 03:55, 10 March 2026 (UTC) * @[[User:Alexlatham96|Alexlatham96]], [[Character Encodings]] and its subpages are all now restored. I apologize for the huge delay; thank you for your patience. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:56, 2 October 2026 (UTC) ** Thank you!!! Adding descriptions to pages.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 01:45, 5 October 2026 (UTC) ***Started the Glossary. [[Talk:Character Encodings/Code Tables]] has still not been restored yet. [[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 02:05, 5 October 2026 (UTC) ***:{{done}} ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 02:11, 5 October 2026 (UTC) == Markdown == The page [[Markdown]] was short but pretty sweet. It showed Markdown features by example and contained decent external links. He who would want to expand the page had the option. I find the page to be a minimum useful product/artifact, to be ideally restored. For reference, [https://web.archive.org/web/20250427011600/https://en.wikibooks.org/wiki/Markdown the page in Wayback Machine]. --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 15:36, 5 May 2026 (UTC) : {{courtesy ping}} to [[User:Kittycataclysm|Kittycataclysm]] who marked the page for speedy deletion. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 19:00, 5 May 2026 (UTC) ::@[[User:Codename Noreste|Codename Noreste]] thank you! I think for me this relates to recent on-wiki discussions we've been having in the sense that I don't think it makes sense to host any content that could theoretically be improved by someone at some time in the future. Even if the content is valid (which it seems to be!), the work is not set up to be book-like, I don't think it's in scope here, and I can't see someone coming around and turning it into a book within a reasonable time frame. Does this help? —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 12:42, 8 May 2026 (UTC) ::: {{courtesy ping}} to [[User:Dan Polansky|Dan Polansky]]. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 16:28, 8 May 2026 (UTC) ::: {{Ping|Kittycataclysm}} The content is not book-like, but I do not recall this having been a requirement in Wikibooks (despite the name). If there is a requirement that the content should be book-like, it should be made into a policy. I created other pages that were instructional with no chance of being book-like in the past. Some examples of non-book-like pages include [[less]], [[grep]] and [[sed]]. ::: The content is minimum useful artifact for the head and is instructional. ::: Either way, can you please at least restore the content in my user space? --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 06:15, 18 May 2026 (UTC) ::::@[[User:Dan Polansky|Dan Polansky]] language in policy does refer to Wikibooks content as book-like. For example, per [[WB:WIW]]: ::::* {{tq|"The site should primarily be used for developing textbooks, textbook-like books, and supporting book-based instructional materials"}} ::::* {{tq|"As a general rule, only instructional books are suitable for inclusion"}} ::::* {{tq|"Wikibooks includes both minor and major book-like projects"}} ::::For other admins: if I am missing something obvious, please let me know. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:43, 20 May 2026 (UTC) ::::: {{Ping|Kittycataclysm}} Thank you. I note: 1) it says "primarily", which means "not exclusively"; 2) "instructional materials" is much broader than books. ::::: Moreover, I checked [https://en.wikibooks.org/w/index.php?title=Wikibooks:What_is_Wikibooks%3F&oldid=3797401 2021 version] of the policy and did not find the text you are quoting. When was the text introduced, by what process and who approved the text? --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 04:25, 20 May 2026 (UTC) ::::: Part of the answer lies in [https://en.wikibooks.org/w/index.php?title=Wikibooks:What_is_Wikibooks%3F&diff=prev&oldid=4377929 this edit] of yours from 9 March 2024, which does not trace to a discussion or a vote, but traces to [[Wikibooks:Policies and guidelines]]. However, [[Wikibooks:Policies and guidelines]] is not marked as a policy. ::::: Be it as it may, it does not answer my question: where is the evidence of consensus for the changes, minimally in the form of a discussion, and ideally in the form of a request for comments or a vote? ::::: Let me also ask from the point of view of examining other examples that I already brought up: is it your view that [[less]], [[sed]] and [[grep]] should be deleted as non-books, too short to be considered books? ::::: Let me also ask about the ''process'': why was RFD not used and instead speedy was used? From what I recall, Wikibooks used to delete subpar content via RFD, including all those outlines with no content proper. --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 04:41, 20 May 2026 (UTC) ::::::@[[User:Dan Polansky|Dan Polansky]] ::::::# That's a good catch about the March 9 edit—I can't recall why I made that decision, but I think you're right that moving text from a non-policy page to a policy page without discussion is not appropriate. My understanding is that the general sentiment is still correct, but we'll need more community discussion to officially integrate it into policy. ::::::# Regarding the other examples you listed: assuming the book-like requirement is the community consensus, I don't think they can stand on their own, but it might be possible to turn them into a more cohesive book. ::::::# Regarding the process, I flagged for speedy deletion because I was on the fence about whether it was a speedy or an RFD—in these cases, I usually flag for another admin to review instead of making the deletion myself. ::::::Since this is getting more into community consensus territory, I am looping in other active users and admins to weigh in @[[User:Atcovi|Atcovi]] @[[User:Leaderboard|Leaderboard]] @[[User:Xania|Xania]] @[[User:MarcGarver|MarcGarver]] @[[User:SHB2000|SHB2000]] @[[User:Omphalographer|Omphalographer]] @[[User:JJPMaster|JJPMaster]]. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:04, 20 May 2026 (UTC) ::::::: @Kittycataclysm: Thank you for this response. And let me also thank you for your clean-up effort at Wikibooks; hardly anyone wants to do that and you seem to be doing quite a lot of it. --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 13:56, 20 May 2026 (UTC) :::::::Wikibooks has never been heavy on written policies and tends to operate in line with what the current active community thinks is right. This isn't unusual, many small projects work like that. So getting hung up on who edited a policy and whether it was approved isn't really important - there have been many proposals put forward to amend WIW, and you need to search to find them as they are buried in different talk pages and project pages - what's important is what the community wants to do now. For what it is worth it is pretty clear from its very inception that the intention of Wikibooks was to host textbooks (see [[m:Talk:Science_Hypertextbook_project]]). That doesn't preclude the community from changing its mind, now or in the future. [[User:MarcGarver|MarcGarver]] ([[User talk:MarcGarver|discuss]] • [[Special:Contributions/MarcGarver|contribs]]) 15:23, 20 May 2026 (UTC) :::::::: 1) This use of the word "community" (instead of e.g. "editors") is a huge red flag. 2) The above attitude allows for a manipulation of the project, especially by people who are more interested in exercising their power than contributing any useful content. If there really is a consensus of the "current active community" (whatever that is supposed to mean), that current community should not have any difficulty passing it through a request for comment or a vote. From my experience, projects that disregard policies start to get controlled by bad actors, often actors who do not have the skill to do any content work so they natually tend toward mere administrators (also known by Steve Jobs as bozos). --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 07:06, 23 May 2026 (UTC) :::::::My thoughts are mostly with Marc's and Leaderboard's here. --[[User:SHB2000|SHB2000]] ([[User talk:SHB2000|discuss]] • [[Special:Contributions/SHB2000|contribs]]) 22:57, 20 May 2026 (UTC) ::::::::+1 —[[User:Atcovi|Atcovi]] [[User talk:Atcovi|(Talk]] - [[Special:Contributions/Atcovi|Contribs)]] 17:32, 23 May 2026 (UTC) :I think the book does not qualify in its current state (but as a draft, wouldn't have qualified for deletion either). Markdown is indeed a language without a lot to write; however, I think the book is too small as written. The fact that it's only a single page is fine. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 13:08, 20 May 2026 (UTC) :: But ''why'' does it not qualify, given it shows the most important features of Markup by example? (It is not a book and probably never will be. It is too short for that and will be too short, even if expanded.) --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 13:14, 20 May 2026 (UTC) :::It's too brief in my opinion. A Wikibook tends to have significantly more detail, even if it's just one page. I think the book can absolutely be expanded in a form that will allow it to stay here. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 14:15, 20 May 2026 (UTC) :::: Brief for what purpose or objective? As a user of Markdown, I want to know the answer to the following questions: 1) What is the core syntax of Markdown (so that I can use it productively)? 2) What are some of the best external sources about Markdown? I provided an answer to both questions. --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 07:21, 23 May 2026 (UTC) == [[Template:Message box]] == There are currently [[Special:WhatLinksHere/Template:Message box|128 pages linking to this template]] which are currently displaying error messages instead of the intended text. Even if there is a module which implements some of the technical functionality previously used by this template, a template is still needed to simplfiy the process of invoking that module - even if it just expands to <code><nowiki>{{#invoke:Message box}}</nowiki></code>. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 19:09, 9 October 2026 (UTC) == Pages related to citations == * [[Doi (identifier)]] * [[PMID (identifier)]] * [[ISSN (identifier)]] * [[PMC (identifier)]] These pages are all linked automatically by citation templates like {{tl|Cite journal}}. I understand that their content is out of scope for Wikibooks, but we're still linking to them - either they should exist, or we should modify the citation module to not link to them. Having them exist seems like the easier solution. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 19:14, 9 October 2026 (UTC) 84ql4pjz1vag6njplf1zfrlj2mcmrf0 4675314 4675313 2026-10-09T19:15:10Z Omphalographer 3427146 /* Pages related to citations */ as soft redirects 4675314 wikitext text/x-wiki __NEWSECTIONLINK__ [[Category:Wikibooks deletion|{{PAGENAME}}]] {{Discussion Rooms}} {{TOCleft}} {{shortcut|WB:RFU}} {{Requests for deletion/New undeletion}} {{Requests for deletion/Undeletion intro}} <!-- New undeletion requests go at the bottom of this page. --> == [[Character Encodings]] == *I didn't see the deletion discussion, as the latest author of this wikibook. <s>I want to know what work could be done to fix this, if it was restored.</s> I see that it needs content outside of code tables for it to be valid- if restored, I will add pages for MS-DOS, HP, and EBCDIC. What else needs to be done? If restoring is impossible, I at least want to view it.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 21:37, 9 March 2026 (UTC) **Maybe this can be merged into [[Introduction to Computer Information Systems]] or something similar. [[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 21:44, 9 March 2026 (UTC) **:Hi, [[User:Alexlatham96|Alexlatham96]]. I closed a [[Special:Diff/4622001|recent deletion discussion]] about the book, because: {{tq|Was never fleshed out into a proper book and consists only of code tables}}. I'll ping @[[User:Kittycataclysm|Kittycataclysm]] here if they have a second opinion, and because they created the discussion (that never had any participation). There were hundreds of pages in this book that will take some time to restore. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 00:32, 10 March 2026 (UTC) **::Chiming in here to elaborate on my reasoning! Per [[WB:WIW]], {{tq|as a general rule, only instructional books are suitable for inclusion. Non-fictional books (as well as fictional ones) that aren't instructional aren't allowed on Wikibooks}}. Examples of nonfictional books that aren't instructional/allowed include reference works like dictionaries, which are only really allowed as part of larger instructional books and not on their own. Based on the contents I saw here, the content was solely reference materials and not instructional materials. I see no problem with consolidating and migrating the content to something like a useful appendix as part of another book. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 18:15, 11 March 2026 (UTC) **:::Note that these pages were created as transwiki back in late 2024 from Wikipedia (and they were deleted afterwards), and since these were deleted now from WikiBooks, they're no longer visible (also, they're still deleted from Wikipedia). However, "Wayback Machine" seems to have a copy of it, but it may not be complete. **:::If a restoration here isn't possible, what should be done instead? **:::[[Special:Contributions/&#126;2026-15548-70|&#126;2026-15548-70]] ([[User talk:&#126;2026-15548-70|talk]]) 19:03, 11 March 2026 (UTC) **::::This was actually created in an earlier transwiki from Wikipedia (there were two)<s>-</s> the first being in July 2020. I support the proposal to make it an appendix to Introduction to Computer Information Systems or something similar.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 20:15, 11 March 2026 (UTC) **:::::{{ping|Alexlatham96}} which pages would you want to be undeleted? I can help. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 22:19, 11 March 2026 (UTC) **::::::Let's start with the MS-DOS (code page numbers 3846 and lower) and HP code tables section, because these were the most recently transwikied (people will be especially looking for code pages 775, 852, 855, 857, and 860). Once this is done, we can do the EBCDIC code tables, which were also transwikied (and I finished adding what was planned for Wikipedia).[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 00:17, 12 March 2026 (UTC) **:::::::I've undeleted all HP code table sections, and to clarify, do you want ALL MS-DOS sections lower than 3846 (including undeleting those in the 100-700 range) to be undeleted? [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 00:31, 12 March 2026 (UTC) **::::::::Yes, including 3846. [[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 00:55, 12 March 2026 (UTC) **:::::::::{{done|All done}}. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 02:29, 12 March 2026 (UTC) **::::::::::Great. Let me know when you have time to undelete the EBCDIC section- people will be looking for code pages 37, 500, 875, and 1026 especially.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 22:10, 12 March 2026 (UTC) **::::::::::Update: also the two in the ISO section- these are standards.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 06:29, 14 March 2026 (UTC) ***Thank you. I also see that the old administrator is inactive, and never found out about this. There <s>will</s> may have to be a new administrator other than me, since I am not one on Wikipedia or Wikibooks. <s>Does another user with knowledge of the topic like Drmccreedy or HarJIT have admin powers?</s>[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 03:34, 10 March 2026 (UTC) ***Update: I found out they do not have admin rights, but can still do non-admin tasks. The authors of Unicode's legacy encoding proposals (latest being L2-26/077) could also help out if they're active here.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 03:55, 10 March 2026 (UTC) * @[[User:Alexlatham96|Alexlatham96]], [[Character Encodings]] and its subpages are all now restored. I apologize for the huge delay; thank you for your patience. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:56, 2 October 2026 (UTC) ** Thank you!!! Adding descriptions to pages.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 01:45, 5 October 2026 (UTC) ***Started the Glossary. [[Talk:Character Encodings/Code Tables]] has still not been restored yet. [[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 02:05, 5 October 2026 (UTC) ***:{{done}} ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 02:11, 5 October 2026 (UTC) == Markdown == The page [[Markdown]] was short but pretty sweet. It showed Markdown features by example and contained decent external links. He who would want to expand the page had the option. I find the page to be a minimum useful product/artifact, to be ideally restored. For reference, [https://web.archive.org/web/20250427011600/https://en.wikibooks.org/wiki/Markdown the page in Wayback Machine]. --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 15:36, 5 May 2026 (UTC) : {{courtesy ping}} to [[User:Kittycataclysm|Kittycataclysm]] who marked the page for speedy deletion. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 19:00, 5 May 2026 (UTC) ::@[[User:Codename Noreste|Codename Noreste]] thank you! I think for me this relates to recent on-wiki discussions we've been having in the sense that I don't think it makes sense to host any content that could theoretically be improved by someone at some time in the future. Even if the content is valid (which it seems to be!), the work is not set up to be book-like, I don't think it's in scope here, and I can't see someone coming around and turning it into a book within a reasonable time frame. Does this help? —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 12:42, 8 May 2026 (UTC) ::: {{courtesy ping}} to [[User:Dan Polansky|Dan Polansky]]. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 16:28, 8 May 2026 (UTC) ::: {{Ping|Kittycataclysm}} The content is not book-like, but I do not recall this having been a requirement in Wikibooks (despite the name). If there is a requirement that the content should be book-like, it should be made into a policy. I created other pages that were instructional with no chance of being book-like in the past. Some examples of non-book-like pages include [[less]], [[grep]] and [[sed]]. ::: The content is minimum useful artifact for the head and is instructional. ::: Either way, can you please at least restore the content in my user space? --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 06:15, 18 May 2026 (UTC) ::::@[[User:Dan Polansky|Dan Polansky]] language in policy does refer to Wikibooks content as book-like. For example, per [[WB:WIW]]: ::::* {{tq|"The site should primarily be used for developing textbooks, textbook-like books, and supporting book-based instructional materials"}} ::::* {{tq|"As a general rule, only instructional books are suitable for inclusion"}} ::::* {{tq|"Wikibooks includes both minor and major book-like projects"}} ::::For other admins: if I am missing something obvious, please let me know. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:43, 20 May 2026 (UTC) ::::: {{Ping|Kittycataclysm}} Thank you. I note: 1) it says "primarily", which means "not exclusively"; 2) "instructional materials" is much broader than books. ::::: Moreover, I checked [https://en.wikibooks.org/w/index.php?title=Wikibooks:What_is_Wikibooks%3F&oldid=3797401 2021 version] of the policy and did not find the text you are quoting. When was the text introduced, by what process and who approved the text? --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 04:25, 20 May 2026 (UTC) ::::: Part of the answer lies in [https://en.wikibooks.org/w/index.php?title=Wikibooks:What_is_Wikibooks%3F&diff=prev&oldid=4377929 this edit] of yours from 9 March 2024, which does not trace to a discussion or a vote, but traces to [[Wikibooks:Policies and guidelines]]. However, [[Wikibooks:Policies and guidelines]] is not marked as a policy. ::::: Be it as it may, it does not answer my question: where is the evidence of consensus for the changes, minimally in the form of a discussion, and ideally in the form of a request for comments or a vote? ::::: Let me also ask from the point of view of examining other examples that I already brought up: is it your view that [[less]], [[sed]] and [[grep]] should be deleted as non-books, too short to be considered books? ::::: Let me also ask about the ''process'': why was RFD not used and instead speedy was used? From what I recall, Wikibooks used to delete subpar content via RFD, including all those outlines with no content proper. --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 04:41, 20 May 2026 (UTC) ::::::@[[User:Dan Polansky|Dan Polansky]] ::::::# That's a good catch about the March 9 edit—I can't recall why I made that decision, but I think you're right that moving text from a non-policy page to a policy page without discussion is not appropriate. My understanding is that the general sentiment is still correct, but we'll need more community discussion to officially integrate it into policy. ::::::# Regarding the other examples you listed: assuming the book-like requirement is the community consensus, I don't think they can stand on their own, but it might be possible to turn them into a more cohesive book. ::::::# Regarding the process, I flagged for speedy deletion because I was on the fence about whether it was a speedy or an RFD—in these cases, I usually flag for another admin to review instead of making the deletion myself. ::::::Since this is getting more into community consensus territory, I am looping in other active users and admins to weigh in @[[User:Atcovi|Atcovi]] @[[User:Leaderboard|Leaderboard]] @[[User:Xania|Xania]] @[[User:MarcGarver|MarcGarver]] @[[User:SHB2000|SHB2000]] @[[User:Omphalographer|Omphalographer]] @[[User:JJPMaster|JJPMaster]]. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:04, 20 May 2026 (UTC) ::::::: @Kittycataclysm: Thank you for this response. And let me also thank you for your clean-up effort at Wikibooks; hardly anyone wants to do that and you seem to be doing quite a lot of it. --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 13:56, 20 May 2026 (UTC) :::::::Wikibooks has never been heavy on written policies and tends to operate in line with what the current active community thinks is right. This isn't unusual, many small projects work like that. So getting hung up on who edited a policy and whether it was approved isn't really important - there have been many proposals put forward to amend WIW, and you need to search to find them as they are buried in different talk pages and project pages - what's important is what the community wants to do now. For what it is worth it is pretty clear from its very inception that the intention of Wikibooks was to host textbooks (see [[m:Talk:Science_Hypertextbook_project]]). That doesn't preclude the community from changing its mind, now or in the future. [[User:MarcGarver|MarcGarver]] ([[User talk:MarcGarver|discuss]] • [[Special:Contributions/MarcGarver|contribs]]) 15:23, 20 May 2026 (UTC) :::::::: 1) This use of the word "community" (instead of e.g. "editors") is a huge red flag. 2) The above attitude allows for a manipulation of the project, especially by people who are more interested in exercising their power than contributing any useful content. If there really is a consensus of the "current active community" (whatever that is supposed to mean), that current community should not have any difficulty passing it through a request for comment or a vote. From my experience, projects that disregard policies start to get controlled by bad actors, often actors who do not have the skill to do any content work so they natually tend toward mere administrators (also known by Steve Jobs as bozos). --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 07:06, 23 May 2026 (UTC) :::::::My thoughts are mostly with Marc's and Leaderboard's here. --[[User:SHB2000|SHB2000]] ([[User talk:SHB2000|discuss]] • [[Special:Contributions/SHB2000|contribs]]) 22:57, 20 May 2026 (UTC) ::::::::+1 —[[User:Atcovi|Atcovi]] [[User talk:Atcovi|(Talk]] - [[Special:Contributions/Atcovi|Contribs)]] 17:32, 23 May 2026 (UTC) :I think the book does not qualify in its current state (but as a draft, wouldn't have qualified for deletion either). Markdown is indeed a language without a lot to write; however, I think the book is too small as written. The fact that it's only a single page is fine. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 13:08, 20 May 2026 (UTC) :: But ''why'' does it not qualify, given it shows the most important features of Markup by example? (It is not a book and probably never will be. It is too short for that and will be too short, even if expanded.) --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 13:14, 20 May 2026 (UTC) :::It's too brief in my opinion. A Wikibook tends to have significantly more detail, even if it's just one page. I think the book can absolutely be expanded in a form that will allow it to stay here. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 14:15, 20 May 2026 (UTC) :::: Brief for what purpose or objective? As a user of Markdown, I want to know the answer to the following questions: 1) What is the core syntax of Markdown (so that I can use it productively)? 2) What are some of the best external sources about Markdown? I provided an answer to both questions. --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 07:21, 23 May 2026 (UTC) == [[Template:Message box]] == There are currently [[Special:WhatLinksHere/Template:Message box|128 pages linking to this template]] which are currently displaying error messages instead of the intended text. Even if there is a module which implements some of the technical functionality previously used by this template, a template is still needed to simplfiy the process of invoking that module - even if it just expands to <code><nowiki>{{#invoke:Message box}}</nowiki></code>. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 19:09, 9 October 2026 (UTC) == Pages related to citations == * [[Doi (identifier)]] * [[PMID (identifier)]] * [[ISSN (identifier)]] * [[PMC (identifier)]] These pages are all linked automatically by citation templates like {{tl|Cite journal}}. I understand that their content is out of scope for Wikibooks, but we're still linking to them - either they should exist, or we should modify the citation module to not link to them. Having them exist as soft redirects seems like the easier solution. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 19:14, 9 October 2026 (UTC) r6irj0geypmpjzua4q60te97viwrz5q 4675318 4675314 2026-10-09T20:33:56Z Koavf 16549 /* Pages related to citations */ Reply 4675318 wikitext text/x-wiki __NEWSECTIONLINK__ [[Category:Wikibooks deletion|{{PAGENAME}}]] {{Discussion Rooms}} {{TOCleft}} {{shortcut|WB:RFU}} {{Requests for deletion/New undeletion}} {{Requests for deletion/Undeletion intro}} <!-- New undeletion requests go at the bottom of this page. --> == [[Character Encodings]] == *I didn't see the deletion discussion, as the latest author of this wikibook. <s>I want to know what work could be done to fix this, if it was restored.</s> I see that it needs content outside of code tables for it to be valid- if restored, I will add pages for MS-DOS, HP, and EBCDIC. What else needs to be done? If restoring is impossible, I at least want to view it.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 21:37, 9 March 2026 (UTC) **Maybe this can be merged into [[Introduction to Computer Information Systems]] or something similar. [[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 21:44, 9 March 2026 (UTC) **:Hi, [[User:Alexlatham96|Alexlatham96]]. I closed a [[Special:Diff/4622001|recent deletion discussion]] about the book, because: {{tq|Was never fleshed out into a proper book and consists only of code tables}}. I'll ping @[[User:Kittycataclysm|Kittycataclysm]] here if they have a second opinion, and because they created the discussion (that never had any participation). There were hundreds of pages in this book that will take some time to restore. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 00:32, 10 March 2026 (UTC) **::Chiming in here to elaborate on my reasoning! Per [[WB:WIW]], {{tq|as a general rule, only instructional books are suitable for inclusion. Non-fictional books (as well as fictional ones) that aren't instructional aren't allowed on Wikibooks}}. Examples of nonfictional books that aren't instructional/allowed include reference works like dictionaries, which are only really allowed as part of larger instructional books and not on their own. Based on the contents I saw here, the content was solely reference materials and not instructional materials. I see no problem with consolidating and migrating the content to something like a useful appendix as part of another book. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 18:15, 11 March 2026 (UTC) **:::Note that these pages were created as transwiki back in late 2024 from Wikipedia (and they were deleted afterwards), and since these were deleted now from WikiBooks, they're no longer visible (also, they're still deleted from Wikipedia). However, "Wayback Machine" seems to have a copy of it, but it may not be complete. **:::If a restoration here isn't possible, what should be done instead? **:::[[Special:Contributions/&#126;2026-15548-70|&#126;2026-15548-70]] ([[User talk:&#126;2026-15548-70|talk]]) 19:03, 11 March 2026 (UTC) **::::This was actually created in an earlier transwiki from Wikipedia (there were two)<s>-</s> the first being in July 2020. I support the proposal to make it an appendix to Introduction to Computer Information Systems or something similar.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 20:15, 11 March 2026 (UTC) **:::::{{ping|Alexlatham96}} which pages would you want to be undeleted? I can help. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 22:19, 11 March 2026 (UTC) **::::::Let's start with the MS-DOS (code page numbers 3846 and lower) and HP code tables section, because these were the most recently transwikied (people will be especially looking for code pages 775, 852, 855, 857, and 860). Once this is done, we can do the EBCDIC code tables, which were also transwikied (and I finished adding what was planned for Wikipedia).[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 00:17, 12 March 2026 (UTC) **:::::::I've undeleted all HP code table sections, and to clarify, do you want ALL MS-DOS sections lower than 3846 (including undeleting those in the 100-700 range) to be undeleted? [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 00:31, 12 March 2026 (UTC) **::::::::Yes, including 3846. [[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 00:55, 12 March 2026 (UTC) **:::::::::{{done|All done}}. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 02:29, 12 March 2026 (UTC) **::::::::::Great. Let me know when you have time to undelete the EBCDIC section- people will be looking for code pages 37, 500, 875, and 1026 especially.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 22:10, 12 March 2026 (UTC) **::::::::::Update: also the two in the ISO section- these are standards.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 06:29, 14 March 2026 (UTC) ***Thank you. I also see that the old administrator is inactive, and never found out about this. There <s>will</s> may have to be a new administrator other than me, since I am not one on Wikipedia or Wikibooks. <s>Does another user with knowledge of the topic like Drmccreedy or HarJIT have admin powers?</s>[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 03:34, 10 March 2026 (UTC) ***Update: I found out they do not have admin rights, but can still do non-admin tasks. The authors of Unicode's legacy encoding proposals (latest being L2-26/077) could also help out if they're active here.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 03:55, 10 March 2026 (UTC) * @[[User:Alexlatham96|Alexlatham96]], [[Character Encodings]] and its subpages are all now restored. I apologize for the huge delay; thank you for your patience. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:56, 2 October 2026 (UTC) ** Thank you!!! Adding descriptions to pages.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 01:45, 5 October 2026 (UTC) ***Started the Glossary. [[Talk:Character Encodings/Code Tables]] has still not been restored yet. [[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 02:05, 5 October 2026 (UTC) ***:{{done}} ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 02:11, 5 October 2026 (UTC) == Markdown == The page [[Markdown]] was short but pretty sweet. It showed Markdown features by example and contained decent external links. He who would want to expand the page had the option. I find the page to be a minimum useful product/artifact, to be ideally restored. For reference, [https://web.archive.org/web/20250427011600/https://en.wikibooks.org/wiki/Markdown the page in Wayback Machine]. --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 15:36, 5 May 2026 (UTC) : {{courtesy ping}} to [[User:Kittycataclysm|Kittycataclysm]] who marked the page for speedy deletion. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 19:00, 5 May 2026 (UTC) ::@[[User:Codename Noreste|Codename Noreste]] thank you! I think for me this relates to recent on-wiki discussions we've been having in the sense that I don't think it makes sense to host any content that could theoretically be improved by someone at some time in the future. Even if the content is valid (which it seems to be!), the work is not set up to be book-like, I don't think it's in scope here, and I can't see someone coming around and turning it into a book within a reasonable time frame. Does this help? —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 12:42, 8 May 2026 (UTC) ::: {{courtesy ping}} to [[User:Dan Polansky|Dan Polansky]]. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 16:28, 8 May 2026 (UTC) ::: {{Ping|Kittycataclysm}} The content is not book-like, but I do not recall this having been a requirement in Wikibooks (despite the name). If there is a requirement that the content should be book-like, it should be made into a policy. I created other pages that were instructional with no chance of being book-like in the past. Some examples of non-book-like pages include [[less]], [[grep]] and [[sed]]. ::: The content is minimum useful artifact for the head and is instructional. ::: Either way, can you please at least restore the content in my user space? --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 06:15, 18 May 2026 (UTC) ::::@[[User:Dan Polansky|Dan Polansky]] language in policy does refer to Wikibooks content as book-like. For example, per [[WB:WIW]]: ::::* {{tq|"The site should primarily be used for developing textbooks, textbook-like books, and supporting book-based instructional materials"}} ::::* {{tq|"As a general rule, only instructional books are suitable for inclusion"}} ::::* {{tq|"Wikibooks includes both minor and major book-like projects"}} ::::For other admins: if I am missing something obvious, please let me know. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:43, 20 May 2026 (UTC) ::::: {{Ping|Kittycataclysm}} Thank you. I note: 1) it says "primarily", which means "not exclusively"; 2) "instructional materials" is much broader than books. ::::: Moreover, I checked [https://en.wikibooks.org/w/index.php?title=Wikibooks:What_is_Wikibooks%3F&oldid=3797401 2021 version] of the policy and did not find the text you are quoting. When was the text introduced, by what process and who approved the text? --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 04:25, 20 May 2026 (UTC) ::::: Part of the answer lies in [https://en.wikibooks.org/w/index.php?title=Wikibooks:What_is_Wikibooks%3F&diff=prev&oldid=4377929 this edit] of yours from 9 March 2024, which does not trace to a discussion or a vote, but traces to [[Wikibooks:Policies and guidelines]]. However, [[Wikibooks:Policies and guidelines]] is not marked as a policy. ::::: Be it as it may, it does not answer my question: where is the evidence of consensus for the changes, minimally in the form of a discussion, and ideally in the form of a request for comments or a vote? ::::: Let me also ask from the point of view of examining other examples that I already brought up: is it your view that [[less]], [[sed]] and [[grep]] should be deleted as non-books, too short to be considered books? ::::: Let me also ask about the ''process'': why was RFD not used and instead speedy was used? From what I recall, Wikibooks used to delete subpar content via RFD, including all those outlines with no content proper. --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 04:41, 20 May 2026 (UTC) ::::::@[[User:Dan Polansky|Dan Polansky]] ::::::# That's a good catch about the March 9 edit—I can't recall why I made that decision, but I think you're right that moving text from a non-policy page to a policy page without discussion is not appropriate. My understanding is that the general sentiment is still correct, but we'll need more community discussion to officially integrate it into policy. ::::::# Regarding the other examples you listed: assuming the book-like requirement is the community consensus, I don't think they can stand on their own, but it might be possible to turn them into a more cohesive book. ::::::# Regarding the process, I flagged for speedy deletion because I was on the fence about whether it was a speedy or an RFD—in these cases, I usually flag for another admin to review instead of making the deletion myself. ::::::Since this is getting more into community consensus territory, I am looping in other active users and admins to weigh in @[[User:Atcovi|Atcovi]] @[[User:Leaderboard|Leaderboard]] @[[User:Xania|Xania]] @[[User:MarcGarver|MarcGarver]] @[[User:SHB2000|SHB2000]] @[[User:Omphalographer|Omphalographer]] @[[User:JJPMaster|JJPMaster]]. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:04, 20 May 2026 (UTC) ::::::: @Kittycataclysm: Thank you for this response. And let me also thank you for your clean-up effort at Wikibooks; hardly anyone wants to do that and you seem to be doing quite a lot of it. --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 13:56, 20 May 2026 (UTC) :::::::Wikibooks has never been heavy on written policies and tends to operate in line with what the current active community thinks is right. This isn't unusual, many small projects work like that. So getting hung up on who edited a policy and whether it was approved isn't really important - there have been many proposals put forward to amend WIW, and you need to search to find them as they are buried in different talk pages and project pages - what's important is what the community wants to do now. For what it is worth it is pretty clear from its very inception that the intention of Wikibooks was to host textbooks (see [[m:Talk:Science_Hypertextbook_project]]). That doesn't preclude the community from changing its mind, now or in the future. [[User:MarcGarver|MarcGarver]] ([[User talk:MarcGarver|discuss]] • [[Special:Contributions/MarcGarver|contribs]]) 15:23, 20 May 2026 (UTC) :::::::: 1) This use of the word "community" (instead of e.g. "editors") is a huge red flag. 2) The above attitude allows for a manipulation of the project, especially by people who are more interested in exercising their power than contributing any useful content. If there really is a consensus of the "current active community" (whatever that is supposed to mean), that current community should not have any difficulty passing it through a request for comment or a vote. From my experience, projects that disregard policies start to get controlled by bad actors, often actors who do not have the skill to do any content work so they natually tend toward mere administrators (also known by Steve Jobs as bozos). --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 07:06, 23 May 2026 (UTC) :::::::My thoughts are mostly with Marc's and Leaderboard's here. --[[User:SHB2000|SHB2000]] ([[User talk:SHB2000|discuss]] • [[Special:Contributions/SHB2000|contribs]]) 22:57, 20 May 2026 (UTC) ::::::::+1 —[[User:Atcovi|Atcovi]] [[User talk:Atcovi|(Talk]] - [[Special:Contributions/Atcovi|Contribs)]] 17:32, 23 May 2026 (UTC) :I think the book does not qualify in its current state (but as a draft, wouldn't have qualified for deletion either). Markdown is indeed a language without a lot to write; however, I think the book is too small as written. The fact that it's only a single page is fine. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 13:08, 20 May 2026 (UTC) :: But ''why'' does it not qualify, given it shows the most important features of Markup by example? (It is not a book and probably never will be. It is too short for that and will be too short, even if expanded.) --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 13:14, 20 May 2026 (UTC) :::It's too brief in my opinion. A Wikibook tends to have significantly more detail, even if it's just one page. I think the book can absolutely be expanded in a form that will allow it to stay here. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 14:15, 20 May 2026 (UTC) :::: Brief for what purpose or objective? As a user of Markdown, I want to know the answer to the following questions: 1) What is the core syntax of Markdown (so that I can use it productively)? 2) What are some of the best external sources about Markdown? I provided an answer to both questions. --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 07:21, 23 May 2026 (UTC) == [[Template:Message box]] == There are currently [[Special:WhatLinksHere/Template:Message box|128 pages linking to this template]] which are currently displaying error messages instead of the intended text. Even if there is a module which implements some of the technical functionality previously used by this template, a template is still needed to simplfiy the process of invoking that module - even if it just expands to <code><nowiki>{{#invoke:Message box}}</nowiki></code>. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 19:09, 9 October 2026 (UTC) == Pages related to citations == * [[Doi (identifier)]] * [[PMID (identifier)]] * [[ISSN (identifier)]] * [[PMC (identifier)]] These pages are all linked automatically by citation templates like {{tl|Cite journal}}. I understand that their content is out of scope for Wikibooks, but we're still linking to them - either they should exist, or we should modify the citation module to not link to them. Having them exist as soft redirects seems like the easier solution. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 19:14, 9 October 2026 (UTC) :Immediate solution is soft redirects, longer-term solution is removal from the template or at the very least, turning them into links to Wikipedia articles directly. ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 20:33, 9 October 2026 (UTC) iqtcyu73bo2aw3hwqjxajuzutpmgfqt 4675319 4675318 2026-10-09T20:34:40Z Koavf 16549 /* Pages related to citations */ 4675319 wikitext text/x-wiki __NEWSECTIONLINK__ [[Category:Wikibooks deletion|{{PAGENAME}}]] {{Discussion Rooms}} {{TOCleft}} {{shortcut|WB:RFU}} {{Requests for deletion/New undeletion}} {{Requests for deletion/Undeletion intro}} <!-- New undeletion requests go at the bottom of this page. --> == [[Character Encodings]] == *I didn't see the deletion discussion, as the latest author of this wikibook. <s>I want to know what work could be done to fix this, if it was restored.</s> I see that it needs content outside of code tables for it to be valid- if restored, I will add pages for MS-DOS, HP, and EBCDIC. What else needs to be done? If restoring is impossible, I at least want to view it.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 21:37, 9 March 2026 (UTC) **Maybe this can be merged into [[Introduction to Computer Information Systems]] or something similar. [[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 21:44, 9 March 2026 (UTC) **:Hi, [[User:Alexlatham96|Alexlatham96]]. I closed a [[Special:Diff/4622001|recent deletion discussion]] about the book, because: {{tq|Was never fleshed out into a proper book and consists only of code tables}}. I'll ping @[[User:Kittycataclysm|Kittycataclysm]] here if they have a second opinion, and because they created the discussion (that never had any participation). There were hundreds of pages in this book that will take some time to restore. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 00:32, 10 March 2026 (UTC) **::Chiming in here to elaborate on my reasoning! Per [[WB:WIW]], {{tq|as a general rule, only instructional books are suitable for inclusion. Non-fictional books (as well as fictional ones) that aren't instructional aren't allowed on Wikibooks}}. Examples of nonfictional books that aren't instructional/allowed include reference works like dictionaries, which are only really allowed as part of larger instructional books and not on their own. Based on the contents I saw here, the content was solely reference materials and not instructional materials. I see no problem with consolidating and migrating the content to something like a useful appendix as part of another book. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 18:15, 11 March 2026 (UTC) **:::Note that these pages were created as transwiki back in late 2024 from Wikipedia (and they were deleted afterwards), and since these were deleted now from WikiBooks, they're no longer visible (also, they're still deleted from Wikipedia). However, "Wayback Machine" seems to have a copy of it, but it may not be complete. **:::If a restoration here isn't possible, what should be done instead? **:::[[Special:Contributions/&#126;2026-15548-70|&#126;2026-15548-70]] ([[User talk:&#126;2026-15548-70|talk]]) 19:03, 11 March 2026 (UTC) **::::This was actually created in an earlier transwiki from Wikipedia (there were two)<s>-</s> the first being in July 2020. I support the proposal to make it an appendix to Introduction to Computer Information Systems or something similar.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 20:15, 11 March 2026 (UTC) **:::::{{ping|Alexlatham96}} which pages would you want to be undeleted? I can help. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 22:19, 11 March 2026 (UTC) **::::::Let's start with the MS-DOS (code page numbers 3846 and lower) and HP code tables section, because these were the most recently transwikied (people will be especially looking for code pages 775, 852, 855, 857, and 860). Once this is done, we can do the EBCDIC code tables, which were also transwikied (and I finished adding what was planned for Wikipedia).[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 00:17, 12 March 2026 (UTC) **:::::::I've undeleted all HP code table sections, and to clarify, do you want ALL MS-DOS sections lower than 3846 (including undeleting those in the 100-700 range) to be undeleted? [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 00:31, 12 March 2026 (UTC) **::::::::Yes, including 3846. [[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 00:55, 12 March 2026 (UTC) **:::::::::{{done|All done}}. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 02:29, 12 March 2026 (UTC) **::::::::::Great. Let me know when you have time to undelete the EBCDIC section- people will be looking for code pages 37, 500, 875, and 1026 especially.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 22:10, 12 March 2026 (UTC) **::::::::::Update: also the two in the ISO section- these are standards.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 06:29, 14 March 2026 (UTC) ***Thank you. I also see that the old administrator is inactive, and never found out about this. There <s>will</s> may have to be a new administrator other than me, since I am not one on Wikipedia or Wikibooks. <s>Does another user with knowledge of the topic like Drmccreedy or HarJIT have admin powers?</s>[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 03:34, 10 March 2026 (UTC) ***Update: I found out they do not have admin rights, but can still do non-admin tasks. The authors of Unicode's legacy encoding proposals (latest being L2-26/077) could also help out if they're active here.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 03:55, 10 March 2026 (UTC) * @[[User:Alexlatham96|Alexlatham96]], [[Character Encodings]] and its subpages are all now restored. I apologize for the huge delay; thank you for your patience. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:56, 2 October 2026 (UTC) ** Thank you!!! Adding descriptions to pages.[[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 01:45, 5 October 2026 (UTC) ***Started the Glossary. [[Talk:Character Encodings/Code Tables]] has still not been restored yet. [[User:Alexlatham96|Alexlatham96]] ([[User talk:Alexlatham96|discuss]] • [[Special:Contributions/Alexlatham96|contribs]]) 02:05, 5 October 2026 (UTC) ***:{{done}} ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 02:11, 5 October 2026 (UTC) == Markdown == The page [[Markdown]] was short but pretty sweet. It showed Markdown features by example and contained decent external links. He who would want to expand the page had the option. I find the page to be a minimum useful product/artifact, to be ideally restored. For reference, [https://web.archive.org/web/20250427011600/https://en.wikibooks.org/wiki/Markdown the page in Wayback Machine]. --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 15:36, 5 May 2026 (UTC) : {{courtesy ping}} to [[User:Kittycataclysm|Kittycataclysm]] who marked the page for speedy deletion. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 19:00, 5 May 2026 (UTC) ::@[[User:Codename Noreste|Codename Noreste]] thank you! I think for me this relates to recent on-wiki discussions we've been having in the sense that I don't think it makes sense to host any content that could theoretically be improved by someone at some time in the future. Even if the content is valid (which it seems to be!), the work is not set up to be book-like, I don't think it's in scope here, and I can't see someone coming around and turning it into a book within a reasonable time frame. Does this help? —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 12:42, 8 May 2026 (UTC) ::: {{courtesy ping}} to [[User:Dan Polansky|Dan Polansky]]. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 16:28, 8 May 2026 (UTC) ::: {{Ping|Kittycataclysm}} The content is not book-like, but I do not recall this having been a requirement in Wikibooks (despite the name). If there is a requirement that the content should be book-like, it should be made into a policy. I created other pages that were instructional with no chance of being book-like in the past. Some examples of non-book-like pages include [[less]], [[grep]] and [[sed]]. ::: The content is minimum useful artifact for the head and is instructional. ::: Either way, can you please at least restore the content in my user space? --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 06:15, 18 May 2026 (UTC) ::::@[[User:Dan Polansky|Dan Polansky]] language in policy does refer to Wikibooks content as book-like. For example, per [[WB:WIW]]: ::::* {{tq|"The site should primarily be used for developing textbooks, textbook-like books, and supporting book-based instructional materials"}} ::::* {{tq|"As a general rule, only instructional books are suitable for inclusion"}} ::::* {{tq|"Wikibooks includes both minor and major book-like projects"}} ::::For other admins: if I am missing something obvious, please let me know. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:43, 20 May 2026 (UTC) ::::: {{Ping|Kittycataclysm}} Thank you. I note: 1) it says "primarily", which means "not exclusively"; 2) "instructional materials" is much broader than books. ::::: Moreover, I checked [https://en.wikibooks.org/w/index.php?title=Wikibooks:What_is_Wikibooks%3F&oldid=3797401 2021 version] of the policy and did not find the text you are quoting. When was the text introduced, by what process and who approved the text? --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 04:25, 20 May 2026 (UTC) ::::: Part of the answer lies in [https://en.wikibooks.org/w/index.php?title=Wikibooks:What_is_Wikibooks%3F&diff=prev&oldid=4377929 this edit] of yours from 9 March 2024, which does not trace to a discussion or a vote, but traces to [[Wikibooks:Policies and guidelines]]. However, [[Wikibooks:Policies and guidelines]] is not marked as a policy. ::::: Be it as it may, it does not answer my question: where is the evidence of consensus for the changes, minimally in the form of a discussion, and ideally in the form of a request for comments or a vote? ::::: Let me also ask from the point of view of examining other examples that I already brought up: is it your view that [[less]], [[sed]] and [[grep]] should be deleted as non-books, too short to be considered books? ::::: Let me also ask about the ''process'': why was RFD not used and instead speedy was used? From what I recall, Wikibooks used to delete subpar content via RFD, including all those outlines with no content proper. --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 04:41, 20 May 2026 (UTC) ::::::@[[User:Dan Polansky|Dan Polansky]] ::::::# That's a good catch about the March 9 edit—I can't recall why I made that decision, but I think you're right that moving text from a non-policy page to a policy page without discussion is not appropriate. My understanding is that the general sentiment is still correct, but we'll need more community discussion to officially integrate it into policy. ::::::# Regarding the other examples you listed: assuming the book-like requirement is the community consensus, I don't think they can stand on their own, but it might be possible to turn them into a more cohesive book. ::::::# Regarding the process, I flagged for speedy deletion because I was on the fence about whether it was a speedy or an RFD—in these cases, I usually flag for another admin to review instead of making the deletion myself. ::::::Since this is getting more into community consensus territory, I am looping in other active users and admins to weigh in @[[User:Atcovi|Atcovi]] @[[User:Leaderboard|Leaderboard]] @[[User:Xania|Xania]] @[[User:MarcGarver|MarcGarver]] @[[User:SHB2000|SHB2000]] @[[User:Omphalographer|Omphalographer]] @[[User:JJPMaster|JJPMaster]]. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:04, 20 May 2026 (UTC) ::::::: @Kittycataclysm: Thank you for this response. And let me also thank you for your clean-up effort at Wikibooks; hardly anyone wants to do that and you seem to be doing quite a lot of it. --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 13:56, 20 May 2026 (UTC) :::::::Wikibooks has never been heavy on written policies and tends to operate in line with what the current active community thinks is right. This isn't unusual, many small projects work like that. So getting hung up on who edited a policy and whether it was approved isn't really important - there have been many proposals put forward to amend WIW, and you need to search to find them as they are buried in different talk pages and project pages - what's important is what the community wants to do now. For what it is worth it is pretty clear from its very inception that the intention of Wikibooks was to host textbooks (see [[m:Talk:Science_Hypertextbook_project]]). That doesn't preclude the community from changing its mind, now or in the future. [[User:MarcGarver|MarcGarver]] ([[User talk:MarcGarver|discuss]] • [[Special:Contributions/MarcGarver|contribs]]) 15:23, 20 May 2026 (UTC) :::::::: 1) This use of the word "community" (instead of e.g. "editors") is a huge red flag. 2) The above attitude allows for a manipulation of the project, especially by people who are more interested in exercising their power than contributing any useful content. If there really is a consensus of the "current active community" (whatever that is supposed to mean), that current community should not have any difficulty passing it through a request for comment or a vote. From my experience, projects that disregard policies start to get controlled by bad actors, often actors who do not have the skill to do any content work so they natually tend toward mere administrators (also known by Steve Jobs as bozos). --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 07:06, 23 May 2026 (UTC) :::::::My thoughts are mostly with Marc's and Leaderboard's here. --[[User:SHB2000|SHB2000]] ([[User talk:SHB2000|discuss]] • [[Special:Contributions/SHB2000|contribs]]) 22:57, 20 May 2026 (UTC) ::::::::+1 —[[User:Atcovi|Atcovi]] [[User talk:Atcovi|(Talk]] - [[Special:Contributions/Atcovi|Contribs)]] 17:32, 23 May 2026 (UTC) :I think the book does not qualify in its current state (but as a draft, wouldn't have qualified for deletion either). Markdown is indeed a language without a lot to write; however, I think the book is too small as written. The fact that it's only a single page is fine. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 13:08, 20 May 2026 (UTC) :: But ''why'' does it not qualify, given it shows the most important features of Markup by example? (It is not a book and probably never will be. It is too short for that and will be too short, even if expanded.) --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 13:14, 20 May 2026 (UTC) :::It's too brief in my opinion. A Wikibook tends to have significantly more detail, even if it's just one page. I think the book can absolutely be expanded in a form that will allow it to stay here. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 14:15, 20 May 2026 (UTC) :::: Brief for what purpose or objective? As a user of Markdown, I want to know the answer to the following questions: 1) What is the core syntax of Markdown (so that I can use it productively)? 2) What are some of the best external sources about Markdown? I provided an answer to both questions. --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 07:21, 23 May 2026 (UTC) == [[Template:Message box]] == There are currently [[Special:WhatLinksHere/Template:Message box|128 pages linking to this template]] which are currently displaying error messages instead of the intended text. Even if there is a module which implements some of the technical functionality previously used by this template, a template is still needed to simplfiy the process of invoking that module - even if it just expands to <code><nowiki>{{#invoke:Message box}}</nowiki></code>. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 19:09, 9 October 2026 (UTC) == Pages related to citations == * [[Doi (identifier)]] * [[PMID (identifier)]] * [[ISSN (identifier)]] * [[PMC (identifier)]] These pages are all linked automatically by citation templates like {{tl|Cite journal}}. I understand that their content is out of scope for Wikibooks, but we're still linking to them - either they should exist, or we should modify the citation module to not link to them. Having them exist as soft redirects seems like the easier solution. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 19:14, 9 October 2026 (UTC) :Immediate solution is soft redirects, longer-term solution is removal from the template or at the very least, turning them into links to Wikipedia articles directly. I actually tried to resolve this when I first became an admin, but deciphering how to get these links out of the modules was too tricky for my smooth brain. ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 20:33, 9 October 2026 (UTC) 1xzip2xuhxevmeejrj4vio8mg4s0fdw XML - Managing Data Exchange/Parsing XML files 0 7111 4675370 4666684 2026-10-10T00:39:49Z Omphalographer 3427146 substituting single-use template 4675370 wikitext text/x-wiki {{XML-MDE|prev=Cocoon|next=XUL}} {| cellspacing="10" cellpadding="10" border="5" |- | <span style="font-size: large;"><b>Learning objectives</b></span> <br> <ul> <li> <span style="font-size: medium;">Understand the concept of parsing XML files</span></li> <li> <span style="font-size: medium;">Use different APIs for processing XML files </span></li> <li> <span style="font-size: medium;">Be aware of the differences between different approaches for parsing XML files </span></li> <li> <span style="font-size: medium;">Decide when to use a particular technique</span></li> </ul> |} In the earlier chapters we were taught how to create [[../Introduction to XML#The_major_XML_elements|XML files]] in detail. This involved the development of [[../A single entity#XML_document|XML documents]], [[../A single entity#XML_Stylesheet|Style sheets]] and [[../A single entity#XML_schema|Schema]] and their validation. In this chapter, we will focus on different approaches for parsing [[../Introduction to XML#The_major_XML_elements|XML files]] and when to use them. But first, it is time to refresh what we have learned about parsing. == The Process of Parsing XML files == One goal of the XML format was to enhance raw data formats like plain text by including detailed descriptions of the meaning of the content. Now, in order to be able to read XML files, we use a parser which basically exposes the document’s content through a so-called API (application programming interface). In other words, a client application accesses the content of the XML document through an interface, instead of having to interpret the XML code on its own! === Simple Text Parsing === One way to extract data from an XML document is simple text parsing – browsing all characters in the document and check for a desired pattern: <syntaxhighlight lang="XML"> <house> <value><int>150,000</int></value> </house> </syntaxhighlight> Let’s say we are interested in the value of the house. Using straight text parsing, we would scan the file for the character sequence {{tag|int|o}} and call it the start pattern. Then, we would further scan the document for the end pattern (i.e. {{tag|int|c}}{{tag|value|c}}). Finally, we declare the text string in between these two patterns to be the value of the surrounding {{tag|house}} tag. === Why it doesn't work that way === Obviously, this approach is not suitable for extracting information from large and complex XML documents, since we would have to know exactly what the file looks like and where the information needed is located. From a more general point of view, the structure and semantics of an XML file is determined by the makeup of the document, its tags and attributes – hence, we need a device that is able to recognize and understand this structure and can point out any errors in it. Moreover, it has to provide the content of the document through an interface, so that other applications can access it without difficulty. This device is known as an XML parser. === What a parser does === Almost all programs that need to process XML documents use an XML parser to extract the information stored in the XML document in order to avoid any of the difficulties that occur when reading and interpreting raw XML data. The parser usually is a class library (e.g. a set of Java class files) that reads a given document and checks if it is well-formed according to the W3C specification. Then, any client software can use methods of the interface provided by the parser API to access the information the parser retrieved from the XML file. All in all, the parser shields the user from dealing with the complex details of XML like assembling information distributed over several XML files, checking for well-formedness constraints, and so on. == Parsing: an Example == To illustrate more clearly what parsing an XML file really means, the following example was created which contains information about some cities. It also keeps track of who is on vacation and demonstrates the parsing process with the currently most common parsing methods. === Example: ''cities.xml''=== <syntaxhighlight lang="XML"> <?xml version="1.0" encoding="UTF-8" ?> <cities> <city vacation="Sam"> <cityName>Atlanta</cityName> <cityCountry>USA</cityCountry> </city> <city vacation="David"> <cityName>Sydney</cityName> <cityCountry>Australia</cityCountry> </city> <city vacation="Pune"> <cityName>Athens</cityName> <cityCountry>Greece</cityCountry> </city> </cities> </syntaxhighlight> Based on the information stored in this XML document, we can easily check who is on vacation and where. The parser will read the file using one of the various techniques presented later in this chapter. This process is very complicated and prone to errors of all kinds. Luckily, we will never have to write code for it, because there are plenty of free, fully-functional parsers on the Web. All we do is download a parser class library and access the XML document through the interface provided by the parser software. With more recent builds of Java, most parsers do not even have to be downloaded. In other words, we use the functions or methods included in the class library for extracting the information. Basically, a parser reads the XML document and tries to recognize the structure of the file itself while checking for errors. It simply checks for start/end tags, attributes, namespaces, prefixes, and so on. Then, the client software can access the information derived from this structure using methods provided by the parser software (i.e. the interface). The best way to learn about the functionality of a parser is to actually use them; therefore, the next section demonstrates the different methods of parsing. == Parser APIs (Application Programming Interface) == === Overview === There are two “traditional” approaches that dominate the market right now, an event-based push-model as represented by SAX (Simple API for XML) and a tree-based model using the DOM (document object model) approach. However, there is a movement towards newer approaches and techniques that try to overcome the flaws inherent in these traditional models – an event-based pull-model and a “cursor model”, such as VTD-XML, which allows us to browse the XML document just like in the tree-based approach, but simpler and easier to use. === SAX (Simple API for XML) === ==== Description ==== The push model, typically the exemplified by SAX (www.saxproject.org) is the “gold standard” of XML parsing, since it is probably the most complete and accurate method so far. The SAX classes provide an interface between the input streams from which XML documents are read and the client software which receives the data made available by the parser. The parser browses through the whole document and fires events every time it recognizes an XML construct (e.g. it recognizes a start tag and fires an event – the client software is notified and can use this information… or not). ==== Evaluation ==== The advantage of such a model is that we don’t need to store the whole XML document in memory, since we are only reading one piece of information at a time. If you recall that the XML structure is a set of nodes of various types (like an element node) – parsing the document with a SAX parser means going through each node one at a time. This makes it possible to read even very large XML documents in a memory-efficient way. However, the fact that the parser only provides information about the node currently read also implies that the programmer of the client software is in charge of saving certain information in a separate data structure (e.g. the parents or children of the currently processed node). Moreover, the SAX approach is pretty much read-only, since it is hard to modify the XML structure when we do not have some sort of global view. In fact, the parser is in control of what is read when. The user can only wait until a certain event has occurred and then use the information stored in the currently processed node. ==== Example: ''TGSAXParser.java'' ==== As mentioned before, the best way to fully understand the concept of the parsing process is to actually use it. In the following code sample, the information about the name and country of the cities that people are vacationing in will be displayed. The SAX API that is part of the Xerces parser package was used for the implementation (([http://xml.apache.org/xerces2-j Xerces 2 Homepage]): <syntaxhighlight lang="java"> // import the basic SAX API classes import org.xml.sax.*; import org.xml.sax.helpers.*; import java.io.*; public class TGSAXParser extends DefaultHandler { public boolean onVacation = false; // what to do when a start-element event was triggered public void startElement(String uri, String name, String qName, Attributes atts) { // stores the string in the XML file String vacationer = atts.getValue("vacation"); String cityName = atts.getValue("cityName"); String cityCountry = atts.getValue("cityCountry"); // if the start tag is "city" set vacationer to true if (qName.equals("city") && (vacationer != null)) { onVacation = true; System.out.print("\n" + vacationer + " is on vacation in "); } if (qName.equals("cityName") && onVacation) { } if (qName.equals("cityCountry") && onVacation) { } } /**This method is used to stop printing information once the element has *been read. It will also reset the onVacation variable for the next *element. */ public void endElement(String uri, String name, String qName) { //reset flag if (qName.equals("city")) { onVacation = false; } } /**This method is triggered to store and print the values between *the XML tags. It will only print those values if onVacation == true. */ public void characters(char[] ch, int start, int length) { if (onVacation) { for (int i = start; i < start + length; i++) System.out.print(ch[i]); } } public static void main(String[] args) { System.out.println("People on vacation in the following cities:"); try { // create a SAX parser from the Xerces package XMLReader xml = XMLReaderFactory.createXMLReader(); TGSAXParser handler = new TGSAXParser(); xml.setContentHandler(handler); xml.setErrorHandler(handler); FileReader r = new FileReader("cities.xml"); xml.parse(new InputSource(r)); } catch (SAXException se) { System.out.println("XML Parsing Error: " + se); } catch (IOException io) { System.out.println("File I/O Error: " + io); } } } </syntaxhighlight> The <code>DefaultHandler</code>: As mentioned before, SAX is completely event-driven. Therefore, we need a handler that “listens” to the input stream coming from the input file (''cities.xml'' in this case). The SAX API provides interface classes, which we have to extend with our own code to read our own specific XML document. In order to include our code in the SAX API, we just have to extend the DefaultHandler interface with our own class and set the content handler to our custom handler class (which consists of three methods: startElement, endElement and characters) The <code>startElement()</code> and <code>endElement()</code> methods: These methods are invoked whenever the SAX parser finds a start or end tag respectively. The SAX API provides blank stubs for both methods and we have to fill them with code of our own. In this case, we want our program to do something whenever the <code>vacation</code> attribute is set, so we set a Boolean variable to true whenever we find such an element and process the node by printing out the character sequence in between the start and end tag. The <code>character</code> method is automatically called whenever a <code>startElement</code> and <code>endElement</code> event was triggered, but prints out the character string only if the <code>onVacation</code> attribute is set. === DOM (Document Object Model) === ==== Description ==== The other popular approach is the tree-based model as represented by the DOM (document object model, see [http://www.w3.org/DOM/DOMTR W3C Recommendation]). This method actually works similarly to a SAX parser, since it reads the XML document from an input stream by browsing through the file and recognizing XML structures. This time, instead of returning the content of the document in a series of small fragments, the DOM method maps the XML hierarchy to a DOM tree object that contains everything from the original XML document. Everything from elements, comments, textual information or processing instructions is stored in the tree object as nodes, starting with the document itself as the root node. Now that all the information we need is stored in memory, we access the data by using methods provided by the parser software to read or modify objects within the tree. This facilitates random access to the content of the XML document and provides the possibility to modify the data it contains or even create new XML files by transforming a DOM back to an XML document. ==== Evaluation ==== However, the major downside of this approach is that it requires much more memory and is therefore not suitable for situations where large XML files are used. More importantly, it is somewhat more complex than the simplistic SAX method even for small and simple problems. ==== Example: ''MyDOMParser.java'' ==== In the following code sample, a list of cities with people on vacation is again created but this time with the tree-based approach: <syntaxhighlight lang="java"> // import all necessary DOM API classes import org.apache.xerces.parsers.*; import org.apache.xerces.dom.*; import org.w3c.dom.*; public class MyDOMParser{ public static void main(String[] args) { System.out.println("People on vacation in the following cities:"); try { // creates a DOM parser object DOMParser parser = new DOMParser(); parser.parse("cities.xml"); // stores the tree object in a variable org.w3c.dom.Document doc = parser.getDocument(); // returns a list of all city elements in my city list NodeList list = doc.getElementsByTagName("city"); // now, for every element in the city list, check if the // "vacation" attribute is set and if yes, print out the // information about the vacationer. for(int i = 0, length = list.getLength(); i < length; i++){ Element city = (Element)list.item(i); Attr vacationer = city.getAttributeNode("vacation"); if(vacationer!= null){ String v = vacationer.getValue(); System.out.print(v + " is vacationing in "); // grab information about city name and country // directly from the DOM tree object ParentNode cityname = (ParentNode) doc.getElementsByTagName("cityName").item(0); ParentNode country = (ParentNode) doc.getElementsByTagName("cityCountry").item(0); System.out.println(cityname.getTextContent() + ", " + country.getTextContent()); } } } catch (Exception e) { System.out.println(e.getMessage()); } } } </syntaxhighlight> <u><code>parser.getDocument()</code>:</u> Once we parsed the XML document, the tree object is temporarily stored in the parser variable. In order to work with the DOM object, we have to create a variable holding it (of type <u><code>org.w3c.dom.Document</code></u>). Then, we create a <u>list of nodes holding all elements with the tag name {{tag|city|o}}</u>. The parser finds these nodes by browsing through the DOM tree. Then, we just go through each one of the city-elements and check if the <code>vacation</code> attribute is set and display all the information about the vacationer if so. Xerces provides a helpful method called <u><code>getTextContent()</code></u> that lets us directly access the text node of an element node, avoiding all difficulties emerging from unneeded white space and the like. == Summary == Choosing an API at the beginning of your XML project is a very important decision. Once you decide which one to use, it is easy to try different vendors without having much trouble, but switching to a different API will be a very time-consuming and costly process, since you will have to redesign your whole program code. The SAX API is a widely accepted and well-working parser that is easy to implement and works especially well with streaming content (e.g. an online XML source). Because it is a read-only API, you would not be able to modify the underlying XML data source. Since it only reads one node at a time, it is very memory-efficient and fast. However, this implies that your application expects the information to be close together and ordered. If you want to randomly access the entire document at any point of time, then the DOM approach might be a better choice for you. The DOM API is more complex and harder to implement, but gives you full control over the whole document and lets you modify the data, also. However, it reads the whole XML document into memory, so the DOM API is not suitable for projects with very large XML files. <div style="color:#8b4513"> == Exercise == === Recommended optional exercise === ''Use the code sample for the SAX and DOM parser from this chapter and play around with it. You probably want to print out different nodes or add more constraints. This absolutely optional, but will give you an idea of the main differences between SAX and DOM.'' === Now for the exercise === *''Create a SAX parser to parse the file movies.xml. The output simply needs to come from your IDE, it does not need to be sent onto a webpage. '' ''TO HELP YOU'' [http://arches.uga.edu/~andy311/MovieSAXParser.zip download this], it provides a structure of the problem so that you can more easily run the app in NetBeans 5.0. If you’re interested in using Xerces – just download the following file: http://www.apache.org/dist/xml/xerces-j/Xerces-J-bin.2.8.0.zip If the above link is dead. Go to http://www.apache.org/dist/xml/xerces-j/ and download the latest zip binary file. It should be in the format of "Xerces-J-bin.#.#.#.zip" Then put the content into the <kbd>\lib\ext</kbd> subfolder of your NetBeans directory and start up NetBeans IDE. Now, the Xerces package is successfully installed on your machine. </div> == Useful Links == # http://www.cafeconleche.org # http://www.xml.com # http://www.xmlpull.org # http://workshop.bea.com/xmlbeans/reference/com/bea/xml/XmlCursor.html # http://workshop.bea.com/xmlbeans/reference/com/bea/xml/XmlCursor.html <br clear="all" /> {| width=80% align="center" style="background: #FFEECC;color: #202122; border: 1px solid #aaa; padding: .2em; margin-bottom: 3px" |align="center"|[[/Answers|If this text appears blue, the '''answers''' to the examples to this page may be found by clicking '''''here'''''.]] |} {{BookCat}} [[fr:Programmation XML/Parsing]] lung7y13g4z4dgj1k4r5au9nlfzugsl Koine Greek 0 16226 4675422 4674787 2026-10-10T05:48:20Z It-is-Truly-Meet 3624460 3rd declension nouns are more irregular than 1st and 2nd declensions, so they should be taught after the first two declensions, but not after many lessons; it is possibly more effective for retention if nouns are taught all together. 4675422 wikitext text/x-wiki {{print version}} {{Category 4 Language}} <br clear="all"> [[File:Alexander and Bucephalus - Battle of Issus mosaic - Museo Archeologico Nazionale - Naples BW.jpg|center|300px|Naples, National Archaeological Museum, Alexander Mosaic, Battle of Isus]] {{Book title|{{BOOKNAME}}|An introduction to the Koine Greek language.}} This text serves as an introduction to '''Koine Greek''', also known as '''Biblical Greek''', appropriate for a two year course. A fluent knowledge of English is presumed. :''For other Greek languages, click [[Subject:Greek language|here]].'' ==Preface== :[[/A Historical Setting for Koine Greek/]] ==Pronunciation== :[[/Alphabet, Pronunciation, and Punctuation/]] :[[/Additional Information: Accents/]] :[[/Exercise in Pronunciation: John 1:1-5/]] ==Nouns, Adjectives, and Pronouns== :[[/Introduction to Nouns/]] :[[/Declining 1st and 2nd Declension Nouns/]] :[[/Declining 3rd Declension Nouns/]] :[[/Prepositions and εἰμί/]] :[[/Adjectives/]] :[[/Pronouns/]] ==Finite Indicative Verb Forms== :[[/Accents and Morae/]] :[[/Introduction to Finite Indicative Verbs/]] :[[/Contract Verbs/]] ===The Future Tense=== :[[/Future Active Indicative/]] :[[/Future Middle Indicative/]] :[[/Future Passive Indicative/]] ===The Imperfect Tense=== :[[/Imperfect Active/Mediopassive Indicative/]] ===The Aorist Tense=== :[[/2nd Aorist Active Indicative/]] :[[/2nd Aorist Middle Indicative/]] :[[/1st Aorist Active Indicative/]] :[[/1st Aorist Middle Indicative/]] :[[/Aorist Passive Indicative/]] ===The Perfect Tense=== :[[/Perfect Active Indicative/]] :[[/Perfect Middle/Passive Indicative/]] ==Finite Non-Indicative Verb Forms== ===The Subjunctive=== :[[/Introduction to the Subjunctive Mood/]] :[[/Present Active Subjunctive/]] :[[/Present Middle/Passive Subjunctive/]] :[[/1st Aorist Active Subjunctive/]] :[[/1st Aorist Middle Subjunctive/]] :[[/1st Aorist Passive Subjunctive/]] :[[/2nd Aorist Active Subjunctive/]] :[[/2nd Aorist Middle Subjunctive/]] :[[/2nd Aorist Passive Subjunctive/]] :[[/Perfect Active Subjunctive/]] :[[/Perfect Middle Subjunctive/]] :[[/Perfect Passive Subjunctive/]] ===The Imperative=== :[[/Introduction to the Imperative Mood/]] :[[/Present Active Imperative (ω conjugation)/]] :[[/Present Middle/Passive Imperative (ω conjugation)/]] :[[/1st Aorist Active Imperative (ω conjugation)/]] :[[/1st Aorist Middle Imperative (ω conjugation)/]] :[[/2nd Aorist Active Imperative (ω conjugation)/]] :[[/2nd Aorist Middle Imperative (ω conjugation)/]] :[[/2nd Aorist Passive Imperative (ω conjugation)/]] :[[/Perfect Active Imperative (ω conjugation)/]] :[[/Perfect Middle Imperative (ω conjugation)/]] :[[/Perfect Passive Imperative (ω conjugation)/]] :[[/Ἡ Κυριακὴ Προσευχή/]] ===The Optative=== :[[/Introduction to the Optative Mood/]] :[[/Present Active Optative (ω conjugation)/]] :[[/Present Middle/Passive Optative (ω conjugation)/]] :[[/1st Aorist Active Optative (ω conjugation)/]] :[[/1st Middle Optative (ω conjugation)/]] :[[/2nd Aorist Active Optative (ω conjugation)/]] :[[/2nd Aorist Middle Optative (ω conjugation)/]] :[[/2nd Aorist Passive Optative (ω conjugation)/]] :[[/Future Active Optative (ω conjugation)/]] :[[/Future Middle Optative (ω conjugation)/]] :[[/Future Passive Optative (ω conjugation)/]] :[[/Perfect Active Optative (ω conjugation)/]] :[[/Perfect Middle Optative (ω conjugation)/]] :[[/Perfect Passive Optative (ω conjugation)/]] :[[/Πράξεις ΙΖ/]] ==The -μι Conjugation== :[[/Present Active Imperative (μι conjugation)/]] :[[/Present Middle/Passive Imperative (μι conjugation)/]] :[[/1st Aorist Active Imperative (μι conjugation)/]] :[[/1st Aorist Middle Imperative (μι conjugation)/]] :[[/2nd Aorist Active Imperative(μι conjugation)/]] :[[/2nd Aorist Passive Imperative (μι conjugation)/]] :[[/Present Active Optative (μι conjugation)/]] :[[/Present Middle/Passive Optative (μι conjugation)/]] :[[/1st Aorist Active Optative (μι conjugation)/]] :[[/1st Aorist Middle Optative (μι conjugation)/]] :[[/2nd Aorist Active Optative (μι conjugation)/]] :[[/2nd Aorist Passive Optative (μι conjugation)/]] ==Non-finite Verbal Forms== ===The Participle=== :[[/Introduction to Participles/]] :[[/Present Participle/]] :[[/Aorist Participle/]] :[[/Perfect Participle/]] :[[/Future Participle/]] ===The Infinitive=== :[[/Introduction to Infinitives/]] :[[/Present Infinitive/]] :[[/Aorist Infinitive/]] :[[/Perfect Infinitive/]] ==Advanced Syntax== ===Adverbs=== :[[/Overview of Adverbs/]] ===Particles=== :[[/Overview of Particles/]] ===Conjunctions=== :[[/Coordinating (Paratactic) Conjunctions/]] :[[/Subordinating (Hypotactic) Conjunctions/]] :[[/Conditional Clauses/]] ===The Genitive Absolute=== :[[/The Genitive Absolute/]] == About this Book == :[[Koine Greek/Authors|Authors]] == External Links == {{Wikipedia}} {{Wiktionary|Category:Ancient Greek language}} * For more free language-learning information on Koine Greek (used in the New Testament and by the army of Alexander the Great), go to Textkit's website at http://www.textkit.com. * Another great source is http://ntgateway.com/ * [http://www.wikichristian.org/Koine_Greek Koine Greek] plus [http://www.wikichristian.org/Koine_Greek:_Dictionary Dictionary] at [http://www.wikichristian.org/Main_Page WikiChristian] {{Shelves|Greek language}} {{alphabetical|K}} {{status|25%}} __NOTOC__ __NOEDITSECTION__ kmhq0kzp6wu4b82lw37k9s7ex4q7gku Real Analysis/Riemann integration 0 23433 4675441 3491697 2026-10-10T09:30:41Z PJ Geest 213156 png -> svg 4675441 wikitext text/x-wiki {{header | title = [[../]] | author = | section = [[../Riemann_integration|Riemann integration]] | previous = [[../Applications_of_Derivatives|Applications of Derivatives]] | next = [[../Fundamental_Theorem_of_Calculus|Fundamental Theorem of Calculus]] | notes = }} {|align=right |__TOC__ |} ==Definition== Riemann integration is the formulation of integration most people think of if they ever think about integration. It is the only type of integration considered in most calculus classes; many other forms of integration, notably Lebesgue integrals, are extensions of Riemann integrals to larger classes of functions. The Riemann integral was developed by [[w:Bernhard Riemann|Bernhard Riemann]] in 1854 and was, when invented, the first rigorous definition of integration applicable to not necessarily continuous functions. We will first define some preliminary ideas. ==Partitions== ===Definition=== Let <math>a,b\in\R</math> A '''Partition''' <math>\mathcal{P}</math> is defined as the ordered <math>n</math>''-tuple'' of real numbers <math>\mathcal{P}=(x_0,x_1,\ldots,x_n)</math> such that <math>a=x_0<x_1<\ldots<x_n=b</math> ===Norm of a Partition=== Let <math>\mathcal{P}</math> be a partition given by <math>\mathcal{P}=(x_0,x_1,x_2,\ldots,x_n)</math> Then, the '''Norm''' (or the "mesh") of <math>\mathcal{P}</math> is defined as <math>\|\mathcal{P}\|=\sup\Big\{\big|x_k-x_{k-1}\big|:1\le k\le n\Big\}</math> ===Tagged Partition=== Let <math>\mathcal{P}=(x_0,x_1,\ldots,x_n)</math> be a partition A '''Tagged Partition''' <math>\mathcal{\dot{P}}</math> is defined as the set of ordered pairs <math>\mathcal{\dot{P}}=\Big\{\big([x_{k-1},x_k],t_k\big)\Big\}_{k=1}^n</math> such that <math>x_{k-1}\le t_k\le x_k</math> . The points <math>t_k</math> are called '''Tags'''. ==Riemann== [[Image:Integral Riemann sum.svg|thumb|180px|Riemann sum of a function]] ===Riemann Sums=== Let <math>f:[a,b]\to\mathbb{R}</math> Let <math>\mathcal{\dot{P}}=\Big\{\big([x_{k-1},x_k],t_k\big)\Big\}_{k=1}^n</math> be a tagged partition of <math>[a,b]</math> The '''Riemann Sum''' of <math>f</math> over <math>[a,b]</math> with respect to <math>\mathcal{\dot{P}}</math> is given by <math>S(f,\mathcal{\dot{P}})=\sum_{k=1}^n f(t_k)(x_k-x_{k-1})</math> ===Riemann Integral=== Let <math>f:[a,b]\to\R</math> Let <math>L\in\R</math> We say that <math>f</math> is '''Integrable''' on <math>[a,b]</math> if and only if, for every <math>\varepsilon>0</math> there exists <math>\delta>0</math> such that for every partition <math>\mathcal{\dot{P}}</math> satisfying <math>\|\mathcal{\dot{P}}\|<\delta</math> , we have that <math>|S(f,\mathcal{\dot{P}})-L|<\varepsilon</math> <math>L</math> is said to be the '''integral''' of <math>f</math> over <math>[a,b]</math> , and is written as <math>L=\int\limits_a^b f(x)dx</math> or as <math>L=\int\limits_a^b f</math> ==Properties== ===Theorem (Uniqueness)=== Let <math>f:[a,b]\to\R</math> be integrable on <math>[a,b]</math> Then the integral <math>L</math> of <math>f</math> is unique ====Proof==== Assume, if possible that <math>L_1\ne L_2</math> are both integrals of <math>f</math> over <math>[a,b]</math> . Consider <math>\varepsilon=\tfrac{|L_1-L_2|}{2}</math> As <math>L_1,L_2</math> are integrals, there exist <math>\delta_1,\delta_2>0</math> such that <math>|S(f,\mathcal{\dot{P}})-L_1|<\varepsilon</math> for all <math>\mathcal{\dot{P}}</math> that satisfy <math>\|\mathcal{\dot{P}}\|<\delta_1</math> and <math>|S(f,\mathcal{\dot{P}})-L_2|<\varepsilon</math> for all <math>\mathcal{\dot{P}}</math> that satisfy <math>\|\mathcal{\dot{P}}\|<\delta_2</math> Let <math>\delta=\inf\{\delta_1,\delta_2\}</math> . Hence, if <math>\mathcal{\dot{P}}</math> is a partition satisfying <math>\|\mathcal{\dot{P}}\|<\delta</math> , then we have <math>|S(f,\mathcal{\dot{P}})-L_1|<\varepsilon</math> and that <math>|S(f,\mathcal{\dot{P}})-L_2|<\varepsilon</math> That is, <math>|L_1-L_2|<2\varepsilon=|L_1-L_2|</math> , which is an obvious contradiction. Hence the integral <math>L</math> of <math>f</math> is unique. We now state (without proof) two seemingly obvious properties of the integral. ===Theorem=== Let <math>f,g:[a,b]\to\R</math> be integrable and let <math>c\in(a,b)</math> Then: (i)<math>\int\limits_a^b f+\int\limits_a^b g=\int\limits_a^b(f+g)</math> (ii)<math>\int\limits_a^c f+\int\limits_c^b f=\int\limits_a^b f</math> ===Theorem (Boundedness Theorem)=== Let <math>f:[a,b]\to\R</math> be Riemann integrable. Then <math>f</math> is bounded over <math>[a,b]</math> ====Proof==== Assume if possible that <math>f</math> is unbounded. For every <math>n\in\N</math> divide the interval <math>[a,b]</math> into <math>n</math> parts. Hence, for every <math>n\in\N</math> , <math>f</math> is unbounded on at least one of these <math>n</math> parts. Call it <math>I_n</math> . Now, let <math>\varepsilon>0</math> be given. Consider an arbitrary <math>\delta>0</math> . Let <math>\mathcal{\dot{P}}</math> be a tagged partition such that <math>\|\mathcal{\dot{P}}\|<\delta</math> and <math>(I_n,t_n)\in\mathcal{\dot{P}}</math> , where <math>t_n</math> is taken so as to satisfy <math>|f(t_n)|>n\varepsilon</math> . Thus we have that <math>|S(f,\mathcal{\dot{P}})-L|>\varepsilon</math>. But as <math>\delta>0</math> is arbitrary, we have a contradiction to the fact that <math>f</math> is Riemann integrable. Hence, <math>f</math> is bounded. ==Integrability== We now study classes of Riemann integrable functions. The first "constraint" on Riemann integrable functions is provided by the Cauchy Integrability Criterion. ===Theorem (Cauchy Criterion)=== Let <math>f:[a,b]\to\mathbb{R}</math> Then, (i)<math>f</math> is Riemann integrable on <math>[a,b]</math> if and only if (ii) For every <math>\varepsilon>0</math>, there exists <math>\delta>0</math> such that if <math>\mathcal{\dot{P}},\mathcal{\dot{Q}}</math> are two partitions satisfying <math>\|\mathcal{\dot{P}}\|,\|\mathcal{\dot{Q}}\|<\delta</math> then <math>|S(f,\mathcal{\dot{P}})-S(f,\mathcal{\dot{Q}})|<\varepsilon</math> ====Proof==== (<math>\Rightarrow</math>)Let <math>\int_a^b f=L</math> and let <math>\varepsilon>0</math> be given. Then, there exists <math>\delta>0</math> such that for every partition <math>\mathcal{\dot{P}}</math> satisfying <math>\|\mathcal{\dot{P}}\|<\delta</math>,we have <math>|S(f,\mathcal{\dot{P}})-L|<\tfrac{\varepsilon}{2}</math> Now, let partitions <math>\mathcal{\dot{P}},\mathcal{\dot{Q}}</math> be such that <math>\|\mathcal{\dot{P}}\|,\|\mathcal{\dot{Q}}\|<\delta</math>. Thus we have that <math>|S(f,\mathcal{\dot{P}})-L|,|S(f,\mathcal{\dot{Q}})-L|<\tfrac{\varepsilon}{2}</math>, that is <math>|S(f,\mathcal{\dot{P}})-S(f,\mathcal{\dot{Q}})|<\varepsilon</math> (<math>\Leftarrow</math>) For every <math>n\in\mathbb{N}</math>, consider <math>\delta_n>0</math> such that for all partitions <math>\mathcal{\dot{P}},\mathcal{\dot{Q}}</math> satisfying <math>\|\mathcal{\dot{P}}\|,\|\mathcal{\dot{Q}}\|<\delta_n</math>, we have <math>|S(f,\mathcal{\dot{P}})-S(f,\mathcal{\dot{Q}})|<\tfrac{1}{n}</math>. Without loss of generality, we can assume that <math>\delta_m>\delta_n</math> when <math>m<n</math>. For every <math>\delta_n</math>, let <math>\mathcal{\dot{P}}_n</math> be a partition such that <math>\|\mathcal{\dot{P}}_n\|<\delta_n</math> The sequence <math>a_n=S(f,\mathcal{\dot{P}}_n)</math> is a Cauchy sequence, and hence it has a limit <math>L\in\mathbb{R}</math>. Now, for every <math>\varepsilon>0</math>, we have a <math>\delta>0</math> such that <math>\|\mathcal{\dot{P}}\|<\delta</math> implies <math>|S(f,\mathcal{\dot{P}})-L|<\varepsilon</math>. Thus <math>\int_a^b f=L</math> ===Theorem (Squeeze Theorem)=== Let <math>f:[a,b]\to\mathbb{R}</math> Then, (i) <math>f</math> is Riemann integrable on <math>[a,b]</math> if and only if (ii) For every <math>\varepsilon>0</math>, there exist <u>Riemann integrable</u> functions <math>\alpha_{\varepsilon},\omega_{\varepsilon}:[a,b]\to\mathbb{R}</math> such that <math>\alpha_{\varepsilon}(x)\leq f(x)\leq\omega_{\varepsilon}(x)</math> for all <math>x\in[a,b]</math> and <math>\int_a^b (\omega_{\varepsilon}-\alpha_{\varepsilon})<\varepsilon</math> ====Proof==== (<math>\Rightarrow</math>)Take <math>\alpha_{\varepsilon}(x)=f(x)=\omega_{\varepsilon}(x)</math>. It is easy to see that <math>\int_a^b (\omega_{\varepsilon}-\alpha_{\varepsilon})<\varepsilon</math> (<math>\Leftarrow</math>)Let <math>n\in\mathbb{N}</math>. Then, there exist functions <math>\alpha_n,\omega_n</math> such that <math>\int_a^b (\omega_n-\alpha_n)<\tfrac{1}{n}</math>. Further, if <math>\int_a^b \alpha_n=A_n</math> and <math>\int_a^b \omega_n=Z_n</math>, then there exist <math>\delta_1,\delta_2>0</math> such that if a partition <math>\mathcal{\dot{P}}</math> satisfies <math>\|\mathcal{\dot{P}}\|<\delta_1</math> then <math>|S(\alpha_n,\mathcal{\dot{P}})-A_n|<\tfrac{1}{n}</math> and <math>\|\mathcal{\dot{P}}\|<\delta_2</math> then <math>|S(\omega_n,\mathcal{\dot{P}})-Z_n|<\tfrac{1}{n}</math> Now let <math>\mathcal{\dot{P}}_n</math> be a partition satisfying <math>\|\mathcal{\dot{P}}_n\|<\inf \{\delta_1,\delta_2\}</math>. Now, we can easily see that <math>|S(f,\mathcal{\dot{P}}_n)-S(f,\mathcal{\dot{P}}_{n-1})|<\tfrac{1}{n}</math>. Hence, <math>S(f,\mathcal{\dot{P}}_n)</math> is a Cauchy sequence, with a limit <math>L\in\mathbb{R}</math>, and as in the previous proof, we can show that <math>\int_a^b f=L</math> rrkz0zoz09dorihu0r0wwymzqk1qfxo Javafied/Preface 0 25065 4675326 4294612 2026-10-09T21:43:54Z Omphalographer 3427146 delete - orphaned preface 4675326 wikitext text/x-wiki {{delete|Abandoned, badly outdated preface to a nonexistent book}} With lessons learnt from C and C++, Java emerged as a language of choice for the Internet programmer in its early days circa 1995. Many a programmers adopted this ''easy-to-use'' language almost instantly after its launch and why wouldn't they when it offered all the goodies in one bag: Automatic Garbage Collection, Graphics, Animation, Graphical User Interfaces, Platform Independence, Networking, Internationalisation and Documentation. __TOC__ == All that hype: Rise and fall of Java == The year 1996 saw Java develop a massive following as Usenet groups flooded with vast amounts of news and information about the language. The Java beta and 1.0 might have caused a huge noise in the development community, but it was the version 1.1 launch in March 1997 that led people into thinking "Can Java replace Windows?"<sup>[[Javafied/Preface#References|1]]</sup>. People began measuring Java up against systems like Microsoft Windows and no matter how impressive Java seemed, people began scratching up tidbits against the language. Some said it was slow, some simply disliked it because the <code>drawLine(...)</code> method in the <code>Graphics</code> class drew a line that was of <code>1px</code> width. And soon technical papers began appearing on websites benchmarking Java speeds and issues related to performance hits and glitches in Java programs. Java faded out. == The resurrection == With Java out of the scene, software vendors like Microsoft adopted almost all of the functionalities of Java (the Virtual Machine Bytecode, Garbage collection and Multithreading), plastered it over their existing products namely Visual C++ and Visual Basic to come out with a new language, C# and a brand new platform, .Net. Java was long forgotten. C# was now the language of choice for a programmer, a language with the same functionality as that of Java and the speed of C/C++. C# ruled over Java in all aspects. Java started losing developers, heck, I was one of them. But then the minor version incremented. The <code>1.3</code> was now <code>1.4</code>. Hope appeared at the horizon of neglect as streaks of bright red at sunrise would. The Java language was not dead yet! Still in beta it clambered, resurrected but to vain. C# development had juiced out half of developers once devoted Javaholics. A few months later Java incremented to <code>1.5</code>, but this time Java had some major changes introduced into the language syntax to match some constructs like <code>enum</code> and the <code>foreach</code> loop equivalent common to C#. Java attracted a few more developers but it had yet to convince the end-users. Can it? We'll be exploring how Java can be useful for developers and users both on the Windows platform in this book and will travel deep into the world of Java to learn what's new in Java. == Support == It doesn't just end with this book. We will try to provide ongoing support to readers of this book and keep on improving the text of the book through the '''discussion''' link on the top of each and every page of this book. We would also be: *providing a ''download section'' where the source-code (if any) could be downloaded. *publishing FAQs on using this guide to overcome most of your problems. == Talkback == What makes an author more merrier than response? We welcome comments to the manuscript and would like to hear from all the readers of the book. If you'd like to talk to any of the authors of the book, go ahead and do so using the '''discussion''' link on top of the page. Please let us know if there are any errors in this book, lest correct them yourself and provide us with your suggestions fro future editions. == References == # ''Can Java replace Windows?'' [http://pandonia.canberra.edu.au/java/auugjava/paper.html http://pandonia.canberra.edu.au/java/auugjava/paper.html] {{incomplete}} {{alphabetical|J}} {{subject}} 234dl5z5q32uu7ry3bh8xp5wr4fe94n Biblical Studies/Christianity/The Bible 0 30234 4675329 4659851 2026-10-09T21:59:08Z It-is-Truly-Meet 3624460 4675329 wikitext text/x-wiki The Bible is the sacred book of Christianity. Many of the biblical accounts, especially those of the Old Testament, are believed not only by Christians, but also Jews and Muslims. The word "Bible" originated from the Greek word "βιβλία" (''biblia'', "books" or "collection of books"). The [[/Origin_of_the_Bible|origin of the Bible]] is very interesting, featuring multiple translations and conciliar debates leading to the canonization of the books as we know them today. The Bible consists of two parts, called "testaments" (the word "testament" refers to the covenant with God, from the Latin "testamentum"): The Old Testament (OT), which contains the Torah (Law), Nevi'im (Prophets), and Ketuvim (Writings) of the Jewish tradition, and the New Testament (NT), which contains the Gospels (good news) and the Epistles (letters), the Acts of the Apostles (accounts of the early Christian movement), and the Revelation of John (an apocalypse). According to the Roman Catholic Canon, the Bible is comprised of 73 books: the OT has 46 books, and the NT has 27. Most Protestant churches reject six books from the Catholic OT, referring to them as the Apocrypha (it is obvious that Orthodox and Catholics do not call them "Apocryphal" but use the adjective "Deuterocanonical," which means "of the Second "Canon"—the first being the Jewish Canon), giving the Protestant Bible 39 books in the OT and thus a total of 66 books. The problem of defining which books belong in the Bible has received many solutions. At the time of Jesus, the Jews of the Sadducees group recognized only the Pentateuch as canonical. Today, among the major Christian denominations, the largest number of books is found in the Bible of the Ethiopian Orthodox Church, which consists of 81 books: 46 in the Old Testament and 35 in the New Testament. The first Catholic English Bible translation was the "Douay-Rheims Bible," 1609, followed by the Protestant (Anglican) "[[/KJV|King James Bible]]" in 1611. Although before these two there were many partial translations and some full and authorized editions (such as the Great Bible, which was a predecessor to the KJV, authorized by King Henry VIII of England in 1539), the KJV, which utilized the Douay-Rheims Bible in its presentation of the NT, is often viewed as the first major English translation of the Bible due to the dominant place it held as the standard English Bible for some 400 years. The linguistic structure of the King James Bible helped shape the English language and set most of the standards on how words should be spelled, as well as word order and grammar. Putting aside its intrinsic religious value, it is a masterpiece of English literature. The original languages of the biblical texts were Classical Hebrew (most of the OT), Biblical (probably Imperial) Aramaic (Daniel 2–7, portions of Ezra 4–7, Genesis 31.47, and Jeremiah 10.11), and Koine Greek (the entire NT). Modern Hebrew, which is related to Biblical Hebrew, is spoken in Israel; a version of Aramaic is still spoken in Syria and surrounding areas by a population of almost one million people, and Greek is still spoken in its modern form in Greece. In the final centuries BC, the Hebrew Bible was translated into Greek (a translation called the Septuagint, abbreviated LXX), the universal language of the time. Then, in the very early Middle Ages, the whole Bible was translated into Latin, which was, in turn, the language spoken in Europe at that time. After the Reformation, many translations to the common languages (Spanish, French, English, German, etc.) began to appear. The Bible is the most translated book of all time, the first book ever printed on a press with movable type, and the best selling book of all time. ==Wikis centered around the Bible== *[http://www.textus-receptus.com/w/mediawiki-1.13.2/index.php/Main_Page Textus-Receptus.Com] * New Testament Commentary [http://en.wikibooks.org/wiki/Biblical_Studies/New_Testament_Commentaries] ==Available Versions== {{wikisource|Bible (King James)}} {{wikisource|Bible (World English)}} *[[/KJV|King James Bible]] ==External links== [http://www.wikichristian.org/index.php?title=Bible WikiChristian - The Bible] {| class="messagebox" id="practicum" align="right" style="text-align:center;background-color: CornSilk;{{Text default color}};" |- |'''''Wikiversity''''' has learning materials on the '''''New Testament''''' [[v:Biblical Studies (NT)|Biblical Studies]] |} {{clear}} ---- Return to [[../|Christianity]] contents page {{BookCat}} 80iy97xphkesca7lidmnnbxebpk20oz LaTeX/Mathematics 0 42442 4675443 4641165 2026-10-10T09:56:08Z ~2026-54403-66 3628050 /* Pit */ 4675443 wikitext text/x-wiki <noinclude>{{LaTeX/Top}} </noinclude> One of the greatest motivating forces for Donald Knuth when he began developing the original TeX system was to create something that allowed simple construction of mathematical formulas, while looking professional when printed. The fact that he succeeded was most probably why TeX (and later on, LaTeX) became so popular within the scientific community. Typesetting mathematics is one of LaTeX's greatest strengths. It is also a large topic due to the existence of so much mathematical notation. If your document requires only a few simple mathematical formulas, plain LaTeX has most of the tools that you will ever need. If you are writing a scientific document that contains numerous complex formulas, the {{LaTeX/Package|amsmath}} package<ref>http://www.ams.org/publications/authors/tex/amslatex</ref> introduces several new commands that are more powerful and flexible than the ones provided by basic LaTeX. The {{LaTeX/Package|mathtools}} package fixes some {{LaTeX/Package|amsmath}} quirks and adds some useful settings, symbols, and environments to amsmath.<ref>http://www.ctan.org/tex-archive/macros/latex/contrib/mathtools/mathtools.pdf</ref> To use either package, include: <syntaxhighlight lang="latex"> \usepackage{amsmath} </syntaxhighlight> or <syntaxhighlight lang="latex"> \usepackage{mathtools} </syntaxhighlight> in the preamble of the document. The {{LaTeX/Package|mathtools}} package loads the {{LaTeX/Package|amsmath}} package and hence there is no need to <code>\usepackage{amsmath}</code> in the preamble if {{LaTeX/Package|mathtools}} is used. == Mathematics environments == LaTeX needs to know when the text is mathematical. This is because LaTeX typesets math notation differently from normal text. Therefore, special environments have been declared for this purpose. They can be distinguished into two categories depending on how they are presented: * ''text'' &mdash; text formulas are displayed inline, that is, within the body of text where it is declared, for example, I can say that <math>a+a=2a</math> within this sentence. * ''displayed'' &mdash; displayed formulas are on a line by themselves. As math requires special environments, there are naturally the appropriate environment names you can use in the standard way. Unlike most other environments, however, there are some handy shorthands for declaring your formulas. The following table summarizes them: {| class="wikitable" latexfontsize="scriptsize" !width="15%"|Type !Inline (within text) formulas !Displayed equations !Displayed and automatically numbered equations |- !Environment |{{LaTeX/LaTeX|code=math}} |{{LaTeX/LaTeX|code=displaymath}} |{{LaTeX/LaTeX|code=equation}} |- ! width="15%"|LaTeX shorthand |{{LaTeX/LaTeX|code=\(...\) }} |{{LaTeX/LaTeX|code=\[...\]}} | |- !width="15%"|TeX shorthand |{{LaTeX/LaTeX|code=$...$}} |{{LaTeX/LaTeX|code=$$...$$ }} | |- !width="20%"|Comment | | |{{LaTeX/LaTeX|code=equation*}} (starred version) suppresses numbering, but requires amsmath |} '''Suggestion''': Using the {{LaTeX/LaTeX|code=$$...$$}} should be avoided, as it may cause problems, particularly with the AMS-LaTeX macros. Furthermore, should a problem occur, the error messages may not be helpful. The {{LaTeX/LaTeX|code=equation*}} and {{LaTeX/LaTeX|code=displaymath}} environments are functionally equivalent. If you are typing text normally, you are said to be in ''text mode'', but while you are typing within one of those mathematical environments, you are said to be in ''math mode'', that has some differences compared to the ''text mode'': # Most spaces and line breaks do not have any significance, as all spaces are either derived logically from the mathematical expressions or have to be specified with special commands such as {{LaTeX/LaTeX|code=\quad}} # Empty lines are not allowed. Only one paragraph per formula. # Each letter is considered to be the name of a variable and will be typeset as such. If you want to typeset normal text within a formula (normal upright font with normal spacing), then you have to enter the text using [[#Adding text to equations|dedicated commands.]] === Inserting "Displayed" maths inside blocks of text === In order for some operators, such as {{LaTeX/LaTeX|code=\lim}} or {{LaTeX/LaTeX|code=\sum}}, to be displayed correctly inside some math environments (read {{LaTeX/LaTeX|code=$......$}}), it might be convenient to write the {{LaTeX/LaTeX|code=\displaystyle}} class inside the environment. Doing so might cause the line to be taller, but will cause exponents and indices to be displayed correctly for some math operators. For example, the {{LaTeX/LaTeX|code=$\sum$}} will print a smaller Σ and {{LaTeX/LaTeX|code=$\displaystyle \sum$}} will print a bigger one <math>\displaystyle \sum</math>, like in equations.{{efn|name="amsmath"}} It is possible to force this behaviour for all math environments by declaring {{LaTeX/LaTeX|code=\everymath{\displaystyle} }} in the preamble (i.e. before {{LaTeX/LaTeX|code=\begin{document} }}). == Symbols == Mathematics has many symbols! The following is a set of symbols that can be accessed directly from the keyboard: + - = ! / ( ) [ ] < > | ' : * Beyond those listed above, distinct commands must be issued in order to display the desired symbols. There are many examples such as Greek letters, set and relations symbols, arrows, binary operators, etc. For example: {{LaTeX/Example|code= \forall x \in X, \quad \exists y \leq \epsilon |render=<math> \forall x \in X, \quad \exists y \leq \epsilon \,</math>}} Fortunately, there's a tool that can greatly simplify the search for the command for a specific symbol. Look for "Detexify" in the [[#External links|external links]] section below. Another option would be to look in "The Comprehensive LaTeX Symbol List" in the [[#External links|external links]] section below. ==Greek letters== Greek letters are commonly used in mathematics, and they are very easy to type in ''math mode''. You just have to type the name of the letter after a backslash: if the first letter is lowercase, you will get a lowercase Greek letter, if the first letter is uppercase (and only the first letter), then you will get an uppercase letter. Note that some uppercase Greek letters look like Latin ones, so they are not provided by LaTeX (e.g. uppercase ''Alpha'' and ''Beta'' are just "A" and "B", respectively). Lowercase epsilon, theta, kappa, phi, pi, rho, and sigma are provided in two different versions. The alternate, or ''var''iant, version is created by adding "var" before the name of the letter: {{LaTeX/Example|code= \alpha, \Alpha, \beta, \Beta, \gamma, \Gamma, \pi, \Pi, \phi, \varphi, \mu, \Phi |render=<math>\alpha, \Alpha, \beta, \Beta, \gamma, \Gamma, \pi, \Pi, \phi, \varphi, \mu, \Phi</math>}} Scroll down to [[#List of mathematical symbols]] for a complete list of Greek symbols. == Operators == An operator is a function that is written as a word: e.g. trigonometric functions (sin, cos, tan), logarithms and exponentials (log, exp), limits (lim), as well as trace and determinant (tr, det). LaTeX has many of these defined as commands: {{LaTeX/Example|code= \cos (2\theta) = \cos^2 \theta - \sin^2 \theta |render=<math>\cos (2\theta) = \cos^2 \theta - \sin^2 \theta \,</math> }} For certain operators such as [[w:Limit (mathematics)|limits]], the subscript is placed underneath the operator: {{LaTeX/Example|code= \lim\limits_{x \to \infty} \exp(-x) = 0 |render=<math>\lim_{x \to \infty} \exp(-x) = 0</math>}} For the [[w:Modular arithmetic|modular operator]] there are two commands: {{LaTeX/LaTeX|code=\bmod}} and {{LaTeX/LaTeX|code=\pmod}}: {{LaTeX/Example|code= a \bmod b |render=<math> a \, \bmod \, b \,</math>}} {{LaTeX/Example|code= x \equiv a \pmod{b} |render=<math> x \equiv a \pmod b \,</math>}} To use operators that are not pre-defined, such as [[w:argmax|argmax]], see [[../Advanced Mathematics#Custom operators|custom operators]] == Powers and indices == Powers and indices are equivalent to superscripts and subscripts in normal text mode. The caret (<code>^</code>; [[w:Caret|also known as the circumflex accent]]) character is used to raise something, and the underscore (<code>_</code>) is for lowering. If an expression containing more than one character is raised or lowered, it should be grouped using curly braces (<code>{</code> and <code>}</code>). {{LaTeX/Example|code= k_{n+1} = n^2 + k_n^2 - k_{n-1} |render=<math> k_{n+1} = n^2 + k_n^2 - k_{n-1} \,</math>}} For powers with more than one digit, surround the power with {}. {{LaTeX/Example|code= x^{1.01} |render=<math> x^{1.01} \,</math>}} An underscore (<code>_</code>) can be used with a vertical bar (<math> | </math>) to denote evaluation using subscript notation in mathematics: {{LaTeX/Example|code= f(n) = n^5 + 4n^2 + 2 {{!}}_{n=17} |render=<math> f(n) = n^5 + 4n^2 + 2 |_{n=17} \,</math>}} == Fractions and Binomials == A fraction is created using the {{LaTeX/LaTeX|code=\frac{numerator}{denominator}<!---->}} command (for those who need their memories refreshed, that's the ''top'' and ''bottom'' respectively!). Likewise, the [[w:Binomial coefficient|binomial coefficient]] (a.k.a, the Choose function) may be written using the {{LaTeX/LaTeX|code=\binom}} command:{{efn|name="amsmath"}} {{LaTeX/Example|code= \frac{n!}{k!(n-k)!} = \binom{n}{k} |render= <math> \frac{n!}{k!(n-k)!} = \binom{n}{k} </math> }} You can embed fractions within fractions: {{LaTeX/Example|code= \frac{\frac{1}{x}+\frac{1}{y}<!---->}{y-z} |render= <math> \frac{\frac{1}{x}+\frac{1}{y}}{y-z} </math> }} Note that when appearing inside another fraction, or in inline text <math>\tfrac{a}{b}</math>, a fraction is noticeably smaller than in displayed mathematics. The {{LaTeX/LaTeX|code=\tfrac}} and {{LaTeX/LaTeX|code=\dfrac}} commands{{efn|name="amsmath"}} force the use of the respective styles, {{LaTeX/LaTeX|code=\textstyle}} and {{LaTeX/LaTeX|code=\displaystyle}}. Similarly, the {{LaTeX/LaTeX|code=\tbinom}} and {{LaTeX/LaTeX|code=\dbinom}} commands typeset the binomial coefficient. For relatively simple fractions, especially within the text, it may be more aesthetically pleasing to use [[#Powers and indices|powers and indices]] instead: {{LaTeX/Example|code= ^3/_7 |render=<math> ^3/_7 \,</math> }} If this looks a little "loose" (i.e., overspaced), a tightened version can be defined by inserting some negative space {{LaTeX/Example|code= %running fraction with slash - requires math mode. \newcommand*\rfrac[2]{{}^{#1}\!/_{#2}} \rfrac{3}{7} |render=<math> {{}^{3}\!/_{7}} </math> }} If you use them throughout the document, usage of {{LaTeX/Package|xfrac}} package is recommended. This package provides {{LaTeX/LaTeX|code=\sfrac}} command to create slanted fractions. Usage: {{LaTeX/Example|code= Take $\sfrac{1}{2}$ cup of sugar, \dots 3\times\sfrac{1}{2}=1\sfrac{1}{2} Take ${}^1/_2$ cup of sugar, \dots 3\times{}^1/_2=1{}^1/_2 |render=[[Image:LaTeX-xfrac-example.png|400px]]}} If fractions are used as an exponent, curly braces have to be used around the {{LaTeX/LaTeX|code=\sfrac}} command: $x^\frac{1}{2}$ % no error $x^\sfrac{1}{2}$ % error $x^{\sfrac{1}{2}}$ % no error {{LaTeX/Example|code= $x^\frac{1}{2}$ % no error |render= <math> t^\frac{1}{2} </math> }} In some cases, using the package alone will result in errors about certain font shapes not being available. In that case, the {{LaTeX/Package|lmodern}} and {{LaTeX/Package|fix-cm}} packages need to be added as well. Alternatively, the {{LaTeX/Package|nicefrac}} package provides the {{LaTeX/LaTeX|code=\nicefrac}} command, whose usage is similar to {{LaTeX/LaTeX|code=\sfrac}}. === Continued fractions === Continued fractions should be written using {{LaTeX/LaTeX|code=\cfrac}} command:{{efn|name="amsmath"}} {{LaTeX/Example|code= \begin{equation} x = a_0 + \cfrac{1}{a_1 + \cfrac{1}{a_2 + \cfrac{1}{a_3 + \cfrac{1}{a_4} } } } \end{equation} |render= <math> x = a_0 + \cfrac{1}{a_1 + \cfrac{1}{a_2 + \cfrac{1}{a_3 + \cfrac{1}{a_4}}}} </math> }} === Multiplication of two numbers === To make multiplication visually similar to a fraction, a nested array can be used. For example, multiplication of numbers written one below the other can be typeset as follows: {{LaTeX/Example|code= \begin{equation} \frac{ \begin{array}[b]{r} \left( x_4.12 x_217 \right)\\ \times \left( x'_1 x'_2 \right) \end{array} }{ \left( y_1y_2y_3y_4 \right) } \end{equation} |render= <math>\frac{ \begin{array}[b]{r} \left( x_1 x_2 \right)\\ \times \left( x'_1 x'_2 \right) \end{array} }{ \left( y_1y_2y_3y_4 \right) } </math> }} == Roots == The {{LaTeX/LaTeX|code=\sqrt}} command creates a square root surrounding an expression. It accepts an optional argument specified in square brackets (<code>[</code> and <code>]</code>) to change magnitude: {{LaTeX/Example|code= \sqrt{\frac{a}{b}<!---->} |render= <math> \sqrt{\frac{a}{b}} </math> }} {{LaTeX/Example|code= \sqrt[n]{1+x+x^2+x^3+\dots+x^n} |render=<math> \sqrt[n]{1+x+x^2+x^3+\dots+x^n} </math> }} Some people prefer writing the square root "closing" it over its content. This method arguably makes it more clear what is in the scope of the root sign. This habit is not normally used while writing with the computer, but if you still want to change the output of the square root, LaTeX gives you this possibility. Just add the following code in the preamble of your document: {{LaTeX/Example|code= % New definition of square root: % it renames \sqrt as \oldsqrt \let\oldsqrt\sqrt % it defines the new \sqrt in terms of the old one \def\sqrt{\mathpalette\DHLhksqrt} \def\DHLhksqrt#1#2{% \setbox0=\hbox{$#1\oldsqrt{#2\,}$}\dimen0=\ht0 \advance\dimen0-0.2\ht0 \setbox2=\hbox{\vrule height\ht0 depth -\dimen0}% {\box0\lower0.4pt\box2}<!---->} |render=[[Image:Latex_new_squareroot.png|thumb|right|250px|The new style is on left, the old one on right]] }} This TeX code first renames the {{LaTeX/LaTeX|code=\sqrt}} command as {{LaTeX/LaTeX|code=\oldsqrt}}, then redefines {{LaTeX/LaTeX|code=\sqrt}} in terms of the old one, adding something more. The new square root can be seen in the picture on the left, compared to the old one on the right. Unfortunately this code won't work if you want to use multiple roots: if you try to write <math>\sqrt[b]{a}</math> as {{LaTeX/LaTeX|code=\sqrt[b]{a}<!---->}} after you used the code above, you'll just get a wrong output. In other words, you can redefine the square root this way only if you are not going to use multiple roots in the whole document. An alternative piece of TeX code that does allow multiple roots is {{LaTeX/Example|code= \usepackage{letltxmacro} \makeatletter \let\oldr@@t\r@@t \def\r@@t#1#2{% \setbox0=\hbox{$\oldr@@t#1{#2\,}$}\dimen0=\ht0 \advance\dimen0-0.2\ht0 \setbox2=\hbox{\vrule height\ht0 depth -\dimen0}% {\box0\lower0.4pt\box2}<!---->} \LetLtxMacro{\oldsqrt}{\sqrt} \renewcommand*{\sqrt}[2][\ ]{\oldsqrt[#1]{#2} <!---->} \makeatother $\sqrt[a]{b} \quad \oldsqrt[a]{b}$ |render=[[Image:LaTeX example sqrt.png]] }} However, this requires the {{LaTeX/LaTeX|code=\usepackage{letltxmacro}<!---->}} package. == Sums and integrals == The {{LaTeX/LaTeX|code=\sum}} and {{LaTeX/LaTeX|code=\int}} commands insert the sum and integral symbols respectively, with limits specified using the caret (<code>^</code>) and underscore (<code>_</code>). The typical notation for sums is: {{LaTeX/Example|code= \sum_{i=1}^{10} t_i |render=<math> \textstyle\sum_{i=1}^{10} t_i \,</math> }} or {{LaTeX/Example|code= \displaystyle\sum_{i=1}^{10} t_i |render=<math> \displaystyle\sum_{i=1}^{10} t_i \,</math> }} The limits for the integrals follow the same notation. It's also important to represent the integration variables with an upright <math>\mathrm{d}</math>, which in math mode is obtained through the {{LaTeX/LaTeX|code=\mathrm{}|}} command, and with a small space separating it from the integrand, which is attained with the {{LaTeX/LaTeX|code=\,}} command. {{LaTeX/Example|code= \int_0^\infty \mathrm{e}^{-x}\,\mathrm{d}x |render=<math> \int_0^\infty \mathrm{e}^{-x}\,\mathrm{d}x \,</math> }} There are many other "big" commands which operate in a similar manner: {| | <code>\sum</code> ||width="5%"| <math>\sum \,</math> |style="padding-left:20px"| | <code>\prod</code> ||width="5%"| <math>\prod</math> |style="padding-left:20px"| | <code>\coprod</code> ||width="5%"| <math>\coprod</math> |- | <code>\bigoplus</code> || <math>\bigoplus</math> |style="padding-left:20px"| | <code>\bigotimes</code> || <math>\bigotimes</math> |style="padding-left:20px"| | <code>\bigodot</code> || <math>\bigodot</math> |- | <code>\bigcup</code> || <math>\bigcup</math> |style="padding-left:20px"| | <code>\bigcap</code> || <math>\bigcap</math> |style="padding-left:20px"| | <code>\biguplus</code> || <math>\biguplus</math> |- | <code>\bigsqcup</code> || <math>\bigsqcup</math> |style="padding-left:20px"| | <code>\bigvee</code> || <math>\bigvee</math> |style="padding-left:20px"| | <code>\bigwedge</code> || <math>\bigwedge</math> |- | <code>\int</code> || <math>\int</math> |style="padding-left:20px"| | <code>\oint</code> || <math>\oint</math> |style="padding-left:20px"| | <code>\iint</code>{{efn|name="amsmath"}} || <math>\iint</math> |- | <code>\iiint</code>{{efn|name="amsmath"}} || <math>\iiint</math> |style="padding-left:20px"| | <code>\iiiint</code>{{efn|name="amsmath"}} || <math>\iiiint</math> |style="padding-left:20px"| | <code>\idotsint</code>{{efn|name="amsmath"}} || <math>\int \! \cdots \! \int</math> |} For more integral symbols, including those not included by default in the Computer Modern font, try the {{LaTeX/Package|esint}} package. The {{LaTeX/LaTeX|code=\substack}} command{{efn|name="amsmath"}} allows the use of {{LaTeX/LaTeX|code=\\}} to write the limits over multiple lines: {{LaTeX/Example|code= \sum_{\substack{ 0<i<m \\ 0<j<n }<!---->} P(i,j) |render=<math> \sum_{\overset{\scriptstyle 0<i<m} {\scriptstyle 0<j<n}} P(i,j) \,</math> }} If you want the limits of an integral to be specified above and below the symbol (like the sum), use the {{LaTeX/LaTeX|code=\limits}} command: {{LaTeX/Example|code= \int\limits_a^b |render=<math> \int\limits_b^c \,</math> }} However, if you want this to apply to all integrals, it is preferable to specify the {{LaTeX/Parameter|intlimits}} option when loading the {{LaTeX/Package|amsmath}} package: {{LaTeX/Usage|code= \usepackage[intlimits]{amsmath} }} Subscripts and superscripts in other contexts, as well as other parameters to {{LaTeX/Package|amsmath}} package related to them, are described in [[LaTeX/Advanced_Mathematics#Advanced_formatting|Advanced Mathematics]] chapter. For bigger integrals, you may use personal declarations, or the {{LaTeX/Package|bigints}} package <ref name=LM> http://hdl.handle.net/2268/6219</ref>. == Brackets, braces and delimiters == <small>''How to use braces in multi line equations is described in the [[LaTeX/Advanced_Mathematics#Braces_spanning_multiple_lines|Advanced Mathematics]] chapter.''</small> The use of delimiters such as brackets soon becomes important when dealing with anything but the most trivial equations. Without them, formulas can become ambiguous. Also, special types of mathematical structures, such as matrices, typically rely on delimiters to enclose them. There are a variety of delimiters available for use in LaTeX: {{LaTeX/Example|code= ( a ), [ b ], \{ c \}, {{!}} d {{!}}, \{{!}} e \{{!}}, \langle f \rangle, \lfloor g \rfloor, \lceil h \rceil, \ulcorner i \urcorner, / j \backslash |render=<math> ( a ), [ b ], \{ c \}, | d |, \| e \|, \langle f \rangle, \lfloor g \rfloor, \lceil h \rceil, \ulcorner i \urcorner, / j \backslash </math> }} where {{LaTeX/LaTeX|code=\lbrack}} and {{LaTeX/LaTeX|code=\rbrack}} may be used in place of [ and ]. === Automatic sizing === Very often, mathematical features will differ in size, in which case the delimiters surrounding the expression should vary accordingly. This can be done automatically using the {{LaTeX/LaTeX|code=\left}}, {{LaTeX/LaTeX|code=\right}}, and {{LaTeX/LaTeX|code=\middle}} commands. Any of the previous delimiters may be used in combination with these: {{LaTeX/Example|code= \left(\frac{x^2}{y^3}\right) |render=<math> \left(\frac{x^2}{y^3}\right) \,</math> }} {{LaTeX/Example|code= P\left(A=2\middle{{!}}\frac{A^2}{B}>4\right) | render=[[Image:Latex_example_middle.png|150px]] }} Curly braces are defined differently by using {{LaTeX/LaTeX|code=\left\{}} and {{LaTeX/LaTeX|code=\right\} }}, {{LaTeX/Example|code= \left\{\frac{x^2}{y^3}\right\} |render=<math> \left\{\frac{x^2}{y^3}\right\} \,</math> }} If a delimiter on only one side of an expression is required, then an invisible delimiter on the other side may be denoted using a period (<code>.</code>). {{LaTeX/Example|code= \left.\frac{x^3}{3}\right{{!}}_0^1 |render=<math> \left.\frac{x^3}{3}\right|_0^1 \,</math> }} === Manual sizing === In certain cases, the sizing produced by the {{LaTeX/LaTeX|code=\left}} and {{LaTeX/LaTeX|code=\right}} commands may not be desirable, or you may simply want finer control over the delimiter sizes. In this case, the {{LaTeX/LaTeX|code=\big}}, {{LaTeX/LaTeX|code=\Big}}, {{LaTeX/LaTeX|code=\bigg}} and {{LaTeX/LaTeX|code=\Bigg}} modifier commands may be used: {{LaTeX/Example|code= ( \big( \Big( \bigg( \Bigg( |render=<math> ( \big( \Big( \bigg( \Bigg( \,</math> }} These commands are primarily useful when dealing with nested delimiters. For example, when typesetting {{LaTeX/Example|code= \frac{\mathrm d}{\mathrm d x} \left( k g(x) \right) |render=<math> \frac{\mathrm d}{\mathrm d x} \left( k g(x) \right) </math> }} we notice that the {{LaTeX/LaTeX|code=\left}} and {{LaTeX/LaTeX|code=\right}} commands produce the same size delimiters as those nested within it. This can be difficult to read. To fix this, we write {{LaTeX/Example|code= \frac{\mathrm d}{\mathrm d x} \big( k g(x) \big) |render=<math> \frac{\mathrm d}{\mathrm d x} \big( k g(x) \big) </math> }} Manual sizing can also be useful when an equation is too large, trails off the end of the page, and must be separated into two lines using an align command. Although the commands {{LaTeX/LaTeX|code=\left.}} and {{LaTeX/LaTeX|code=\right.}} can be used to balance the delimiters on each line, this may lead to wrong delimiter sizes. Furthermore, manual sizing can be used to avoid overly large delimiters — if an {{LaTeX/LaTeX|code=\underbrace}} or a similar command appears between the delimiters. == Matrices and arrays == A basic matrix may be created using the {{LaTeX/Environment|matrix}} environment{{efn|name="amsmath"}}: in common with other table-like structures, entries are specified by row, with columns separated using an ampersand ({{LaTeX/LaTeX|code=&}}) and new rows separated with a double backslash ({{LaTeX/LaTeX|code=\\}}) {{LaTeX/Example|code= \[ \begin{matrix} a & b & c \\ d & e & f \\ g & h & i \end{matrix} \] |render=<math> \begin{matrix} a & b & c \\ d & e & f \\ g & h & i \end{matrix} </math> }} To specify alignment of columns in the table, use starred version{{efn|name="mathtools"}}: {{LaTeX/Example|code= \begin{matrix} -1 & 3 \\ 2 & -4 \end{matrix} = \begin{matrix*}[r] -1 & 3 \\ 2 & -4 \end{matrix*} |render= <math> \begin{matrix} -1 & 3 \\ 2 & -4 \end{matrix} = \begin{matrix} -1 & \,\;\;3 \\ \,\;\;2 & -4 \end{matrix} </math> }} The alignment by default is {{LaTeX/Parameter|c}}, but it can be any column type valid in {{LaTeX/Environment|array}} environment. However matrices are usually enclosed in delimiters of some kind, and while it is possible to use the [[#Automatic sizing|<code>\left</code> and <code>\right</code> commands]], there are various other predefined environments which automatically include delimiters: {|class="wikitable" ! Environment name ! Surrounding delimiter ! Notes |- | {{LaTeX/Environment|pmatrix}}{{efn|name="amsmath"}} | <math>( \, ) </math> | centers columns by default |- | {{LaTeX/Environment|pmatrix*}}{{efn|name="mathtools"}} | <math>( \, ) </math> | allows to specify alignment of columns in optional parameter |- | {{LaTeX/Environment|bmatrix}}{{efn|name="amsmath"}} | <math>[ \, ] </math> | centers columns by default |- | {{LaTeX/Environment|bmatrix*}}{{efn|name="mathtools"}} | <math>[ \, ] </math> | allows to specify alignment of columns in optional parameter |- | {{LaTeX/Environment|Bmatrix}}{{efn|name="amsmath"}} | <math>\{ \, \} </math> | centers columns by default |- | {{LaTeX/Environment|Bmatrix*}}{{efn|name="mathtools"}} | <math>\{ \, \} </math> | allows to specify alignment of columns in optional parameter |- | {{LaTeX/Environment|vmatrix}}{{efn|name="amsmath"}} | <math>| \, | </math> | centers columns by default |- | {{LaTeX/Environment|vmatrix*}}{{efn|name="mathtools"}} | <math>| \, | </math> | allows to specify alignment of columns in optional parameter |- | {{LaTeX/Environment|Vmatrix}}{{efn|name="amsmath"}} | <math>\| \, \| </math> | centers columns by default |- | {{LaTeX/Environment|Vmatrix*}}{{efn|name="mathtools"}} | <math>\| \, \| </math> | allows to specify alignment of columns in optional parameter |} When writing down arbitrary sized matrices, it is common to use horizontal, vertical and diagonal triplets of dots (known as [[w:ellipsis|ellipses]]) to fill in certain columns and rows. These can be specified using the {{LaTeX/LaTeX|code=\cdots}}, {{LaTeX/LaTeX|code=\vdots}} and {{LaTeX/LaTeX|code=\ddots}} respectively: {{LaTeX/Example|code= A_{m,n} = \begin{pmatrix} a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\ a_{2,1} & a_{2,2} & \cdots & a_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m,1} & a_{m,2} & \cdots & a_{m,n} \end{pmatrix} |render=<math> A_{m,n} = \begin{pmatrix} a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\ a_{2,1} & a_{2,2} & \cdots & a_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m,1} & a_{m,2} & \cdots & a_{m,n} \end{pmatrix} </math> }} In some cases, you may want to have finer control of the alignment within each column, or to insert lines between columns or rows. This can be achieved using the {{LaTeX/Environment|array}} environment, which is essentially a math-mode version of the [[../Tables#The tabular environment|<code>tabular</code> environment]], which requires that the columns be pre-specified: {{LaTeX/Example|code= \begin{array}{c{{!}}c} 1 & 2 \\ \hline 3 & 4 \end{array} |render=<math> \begin{array}{c|c} 1 & 2 \\ \hline 3 & 4 \end{array} </math> }} You may see that the AMS matrix class of environments doesn't leave enough space when used together with fractions resulting in output similar to this: <math> M = \begin{bmatrix} \frac{5}{6} & \frac{1}{6} & 0\\ \frac{5}{6} & 0 & \frac{1}{6}\\ 0 & \frac{5}{6} & \frac{1}{6} \end{bmatrix} </math> To counteract this problem, add additional leading space with the optional parameter to the {{LaTeX/LaTeX|code=\\}} command: {{LaTeX/Example|code= M = \begin{bmatrix} \frac{5}{6} & \frac{1}{6} & 0 \\[0.3em] \frac{5}{6} & 0 & \frac{1}{6} \\[0.3em] 0 & \frac{5}{6} & \frac{1}{6} \end{bmatrix} |render=<math> M = \begin{bmatrix} \frac{5}{6} & \frac{1}{6} & 0 \\[0.3em] \frac{5}{6} & 0 & \frac{1}{6} \\[0.3em] 0 & \frac{5}{6} & \frac{1}{6} \end{bmatrix}</math> }} If you need "border" or "indexes" on your matrix, plain TeX provides the macro {{LaTeX/LaTeX|code=\bordermatrix}} {{LaTeX/Example|code= M = \bordermatrix{~ & x & y \cr A & 1 & 0 \cr B & 0 & 1 \cr} |render=[[Image:bordermatrix.png|150px]] }} === Matrices in running text === To insert a small matrix without increasing leading in the line containing it, use {{LaTeX/Environment|smallmatrix}} environment: {{LaTeX/Example|code= A matrix in text must be set smaller: $\bigl(\begin{smallmatrix} a&b \\ c&d \end{smallmatrix} \bigr)$ to not increase leading in a portion of text. |render=[[Image:LaTeX-smallmatrix.png]] }} == Adding text to equations == The math environment differs from the text environment in the representation of text. Here is an example of trying to represent text within the math environment: {{LaTeX/Example|code= 50 apples \times 100 apples = lots of apples^2 |render=<math> 50 apples \times 100 apples = lots of apples^2 \,</math> }} There are two noticeable problems: there are no spaces between words or numbers, and the letters are italicized and more spaced out than normal. Both issues are simply artifacts of the maths mode, in that it treats it as a mathematical expression: spaces are ignored (LaTeX spaces mathematics according to its own rules), and each character is a separate element (so are not positioned as closely as normal text). There are a number of ways that text can be added properly. The typical way is to wrap the text with the {{LaTeX/LaTeX|code=\text{...}<!---->}} command{{efn|name="amsmath"}} (a similar command is {{LaTeX/LaTeX|code=\mbox{...}<!---->}}, though this causes problems with subscripts, and has a less descriptive name). Let's see what happens when the above equation code is adapted: {{LaTeX/Example|code= 50 \text{apples} \times 100 \text{apples} = \text{lots of apples}^2 |render= <math> 50 \text{apples} \times 100 \text{apples} = \text{lots of apples}^2 \,</math> }} The text looks better. However, there are no gaps between the numbers and the words. Unfortunately, you are required to explicitly add these. There are many ways to add spaces between math elements, but for the sake of simplicity we may simply insert space characters into the {{LaTeX/LaTeX|code=\text}} commands. {{LaTeX/Example|code= 50 \text{ apples} \times 100 \text{ apples} = \text{lots of apples}^2 |render= <math> 50 \text{ apples} \times 100 \text{ apples} = \text{lots of apples}^2 \,</math> }} == Formatting mathematics symbols == :''See also: [[w:Mathematical Alphanumeric Symbols]], [[w:Help:Displaying a formula#Alphabets and typefaces]] and [[w:Wikipedia:LaTeX symbols#Fonts]]'' We can now format text; what about formatting mathematical expressions? There are a set of formatting commands very similar to the font formatting ones just used, except that they are specifically aimed at text in math mode (requires {{LaTeX/Package|amsfonts}}) {|class="wikitable" latexfontsize="scriptsize" ! width="15%"|LaTeX command ! width="35%"|Sample ! Description ! Common use |- | {{LaTeX/LaTeX|code=\mathnormal{…} }}<br/><small>(or simply omit any command)</small> | <math>ABCDEF~abcdef~123456\,</math> | The default math font | Most mathematical notation |- | {{LaTeX/LaTeX|code=\mathrm{…} }} | <math>\mathrm{ABCDEF~abcdef~123456}\,</math> | This is the default or normal font, unitalicised | Units of measurement, one word functions |- | {{LaTeX/LaTeX|code=\mathit{…} }} | <math>\mathit{ABCDEF~abcdef~123456}\,</math> | Italicised font | Multi-letter function or variable names. Compared to <code>\mathnormal</code>, words are spaced more naturally and numbers are italicized as well. |- | {{LaTeX/LaTeX|code=\mathbf{…} }} | <math>\mathbf{ABCDEF~abcdef~123456}\,</math> | Bold font | Vectors |- | {{LaTeX/LaTeX|code=\mathsf{…} }} | <math>\mathsf{ABCDEF~abcdef~123456}\,</math> | [[w:sans-serif|Sans-serif]] | Categories |- | {{LaTeX/LaTeX|code=\mathtt{…} }} | <math>\mathtt{ABCDEF~abcdef~123456}\,</math> | [[w:Monospace font|Monospace (fixed-width) font]] | |- | {{LaTeX/LaTeX|code=\mathfrak{…} }}<br/><small>(requires the {{LaTeX/Package|amsfonts}} or {{LaTeX/Package|amssymb}} package{{efn|name="mathalfa"}})</small> | <math>\mathfrak{ABCDEF~abcdef~123456}\,</math> | [[w:Fraktur (script)|Fraktur]] | Almost canonical font for Lie algebras, [[w:Ideal (ring theory)|ideals]] in ring theory |- | {{LaTeX/LaTeX|code=\mathcal{…} }} | <math>\mathcal{ABCDEF}\,</math> | Calligraphy (uppercase only{{efn|name="mathalfa"}}) | Often used for sheaves/schemes and categories, used to denote [[w:en:Cryptography|cryptological]] concepts like an ''alphabet of definition'' (<math>\mathcal{A}</math>), ''message space'' (<math>\mathcal{M}</math>), ''ciphertext space'' (<math>\mathcal{C}</math>) and ''[[w:key space|key space]]'' (<math>\mathcal{K}</math>); [[w:Kleene's O|Kleene's <math>\mathcal{O}</math>]]; [[w:Description logic#Naming Convention|naming convention in description logic]]; [[w:Laplace transform|Laplace transform]] (<math>\mathcal{L}</math>) and [[w:Fourier transform|Fourier transform]] (<math>\mathcal{F}</math>) |- | {{LaTeX/LaTeX|code=\mathbb{…} }}<br/><small>(requires the {{LaTeX/Package|amsfonts}} or {{LaTeX/Package|amssymb}} package{{efn|name="mathalfa"}})</small> | <math>\mathbb{ABCDEF}\,</math> | [[w:Blackboard bold|Blackboard bold]] (uppercase only{{efn|name="mathalfa"}}) | Used to denote special sets (e.g. real numbers) |- | {{LaTeX/LaTeX|code=\mathscr{…} }}<br/><small>(requires the {{LaTeX/Package|mathrsfs}} package{{efn|name="mathalfa"}})</small> | [[File:Mathscr (A-F).png]] | [[w:Script (typefaces)|Script]] (uppercase only{{efn|name="mathalfa"}}) | An alternative font for categories and sheaves. |} These formatting commands can be wrapped around the entire equation, and not just on the textual elements: they only format letters, numbers, and uppercase Greek, and other math commands are unaffected. To bold lowercase Greek or other symbols use the {{LaTeX/LaTeX|code=\boldsymbol}} command{{efn|name="amsmath"}}; this will only work if there exists a bold version of the symbol in the current font. As a last resort there is the {{LaTeX/LaTeX|code=\pmb}} command{{efn|name="amsmath"}} (poor man's bold): this prints multiple versions of the character slightly offset against each other. {{LaTeX/Example|code= \boldsymbol{\beta} = (\beta_1,\beta_2,\dotsc,\beta_n) |render= <math> \boldsymbol{\beta} = (\beta_1,\beta_2,\dotsc,\beta_n) \,</math> }} To change the size of the fonts in math mode, see [[../Advanced Mathematics#Changing font size|Changing font size]]. === Accents === So what to do when you run out of symbols and fonts? Well, the next step is to use accents: {| | <code>a'</code> or <code>a^{\prime}</code> ||width="15%"| <math>a'\,</math> | style="padding-left:20px" | <code><nowiki>a''</nowiki></code> || <math>a''\,</math> |- | <code>\hat{a}</code> || <math>\hat{a} \,</math> | style="padding-left:20px" | <code>\bar{a}</code> || <math>\bar{a} \,</math> |- | <code>\grave{a}</code> || <math>\grave{a} \,</math> | style="padding-left:20px" | <code>\acute{a}</code> || <math>\acute{a} \,</math> |- | <code>\dot{a}</code> || <math>\dot{a} \,</math> | style="padding-left:20px" | <code>\ddot{a}</code> || <math>\ddot{a} \,</math> |- | <code>\not{a}</code> || <math>\not{a} \,</math> | style="padding-left:20px" | <code>\mathring{a}</code> || å |- | <code>\overrightarrow{AB}</code> || <math>\overrightarrow{AB} \,</math> | <code>\overleftarrow{AB}</code> || <math>\overleftarrow{AB} \,</math> |- | <code><nowiki>a'''</nowiki></code> || <math>a'''\,</math> | style="padding-left:20px" | <code><nowiki>a''''</nowiki></code> || <math>a''''\,</math> |- | <code>\overline{aaa}</code> || <math>\overline{aaa} \,</math> | style="padding-left:20px" | <code>\check{a}</code> || <math>\check{a} \,</math> |- | <code>\breve{a}</code> || <math>\breve{a} \,</math> | style="padding-left:20px" | <code>\vec{a}</code> || <math>\vec{a} \,</math> |- | <code>\dddot{a}</code>{{efn|name="amsmath"}} || | style="padding-left:20px" | <code>\ddddot{a}</code>{{efn|name="amsmath"}} || |- | <code>\widehat{AAA}</code> || <math>\widehat{AAA} \,</math> | style="padding-left:20px" | <code>\widetilde{AAA}</code> || <math>\widetilde{AAA}</math> |- | <code>\stackrel\frown{AAA}</code> || <math>\stackrel\frown{AAA}</math> |- | <code>\tilde{a}</code> || <math>\tilde{a} \,</math> | style="padding-left:20px" | <code>\underline{a}</code> || <math>\underline{a} \,</math> |} == Color == The package {{LaTeX/Package|xcolor}}, described in [[../Colors#Adding_the_color_package|Colors]], allows us to add color to our equations. For example, {{LaTeX/Example|code= k = {\color{red}x} \mathbin{\color{blue}-} 2 |render=<math> k = {\color{red}x} \mathbin{\color{blue}-} 2 </math> }} The only problem is that this disrupts the default {{LaTeX}} formatting around the {{LaTeX/LaTeX|code=-}} operator. To fix this, we enclose it in a {{LaTeX/LaTeX|code=\mathbin}} environment, since {{LaTeX/LaTeX|code=-}} is a binary operator. This process is described [http://tex.stackexchange.com/questions/21598/how-to-color-math-symbols here]. ==Plus and minus signs== LaTeX deals with the + and − signs in two possible ways. The most common is as a binary operator. When two maths elements appear on either side of the sign, it is assumed to be a binary operator, and as such, allocates some space to either side of the sign. The alternative way is a sign designation. This is when you state whether a mathematical quantity is either positive or negative. This is common for the latter, as in math, such elements are assumed to be positive unless a − is prefixed to it. In this instance, you want the sign to appear close to the appropriate element to show their association. If you put a + or a − with nothing before it but you want it to be handled like a binary operator you can add an ''invisible'' character before the operator using {{LaTeX/LaTeX|code={}<!---->}}. This can be useful if you are writing multiple-line formulas, and a new line could start with a − or +, for example, then you can fix some strange alignments adding the invisible character where necessary. A plus-minus sign is written as: {{LaTeX/Example|code= \pm |render=<math> \pm </math> }} Similarly, there exists also a minus-plus sign: {{LaTeX/Example|code= \mp |render=<math> \mp </math> }} == Controlling horizontal spacing == LaTeX is obviously pretty good at typesetting maths—it was one of the chief aims of the core TeX system that LaTeX extends. However, it can't always be relied upon to accurately interpret formulas in the way you did. It has to make certain assumptions when there are ambiguous expressions. The result tends to be slightly incorrect horizontal spacing. In these events, the output is still satisfactory, yet any perfectionists will no doubt wish to ''fine-tune'' their formulas to ensure spacing is correct. These are generally very subtle adjustments. There are other occasions where LaTeX has done its job correctly, but you just want to add some space, maybe to add a comment of some kind. For example, in the following equation, it is preferable to ensure there is a decent amount of space between the maths and the text. {{LaTeX/Example|code= \[ f(n) = \begin{cases} n/2 & \quad \text{if } n \text{ is even}\\ -(n+1)/2 & \quad \text{if } n \text{ is odd} \end{cases} \] |render= <math> f(n) = \begin{cases} n/2 & \quad \text{if } n \text{ is even}\\ -(n+1)/2 & \quad \text{if } n \text{ is odd} \end{cases} </math> }} This code produces errors with Miktex 2.9 and does not yield the results seen on the right. Use \mathrm instead of just \text. (Note that this particular example can be expressed in more elegant code by the {{LaTeX/Environment|cases}} construct provided by the {{LaTeX/Package|amsmath}} package described in [[LaTeX/Advanced_Mathematics#The_cases_environment|Advanced Mathematics]] chapter.) LaTeX has defined two commands that can be used anywhere in documents (not just maths) to insert some horizontal space. They are {{LaTeX/LaTeX|code=\quad}} and {{LaTeX/LaTeX|code=\qquad}} A {{LaTeX/LaTeX|code=\quad}} is a space equal to the current font size. So, if you are using an 11pt font, then the space provided by {{LaTeX/LaTeX|code=\quad}} will also be 11pt (horizontally, of course.) The {{LaTeX/LaTeX|code=\qquad}} gives twice that amount. As you can see from the code from the above example, {{LaTeX/LaTeX|code=\quad}}s were used to add some separation between the maths and the text. OK, so back to the fine tuning as mentioned at the beginning of the document. A good example would be displaying the simple equation for the indefinite integral of ''y'' with respect to ''x'': <math>\int y\, \mathrm{d}x</math> If you were to try this, you may write: {{LaTeX/Example|code= \int y \mathrm{d}x |render= <math>\int y \mathrm{d}x</math> }} However, this doesn't give the correct result. LaTeX doesn't respect the white-space left in the code to signify that the ''y'' and the d''x'' are independent entities. Instead, it lumps them altogether. A {{LaTeX/LaTeX|code=\quad}} would clearly be overkill in this situation—what is needed are some small spaces to be utilized in this type of instance, and that's what LaTeX provides: {| class="wikitable" ! Command ! Description ! Size |- | {{LaTeX/LaTeX|code=\,}} | small space | 3/18 of a quad |- | {{LaTeX/LaTeX|code=\:}} | medium space | 4/18 of a quad |- | {{LaTeX/LaTeX|code=\;}} | large space | 5/18 of a quad |- | {{LaTeX/LaTeX|code=\!}} | negative space | -3/18 of a quad |} NB you can use more than one command in a sequence to achieve a greater space if necessary. So, to rectify the current problem: {{LaTeX/Example|code= \int y\, \mathrm{d}x |render= <math>\int y\, \mathrm{d}x</math> }} {{LaTeX/Example|code= \int y\: \mathrm{d}x |render= <math>\int y\;\;\!\! \mathrm{d}x</math> }} {{LaTeX/Example|code= \int y\; \mathrm{d}x |render= <math>\int y\; \mathrm{d}x</math> }} The negative space may seem like an odd thing to use, however, it wouldn't be there if it didn't have ''some'' use! Take the following example: {{LaTeX/Example|code=\partial\frac{x-y}z|render=<math>\partial\frac{x-y}z</math>}} X and Y are like rotations.{{LaTeX/Example|code= \left( \begin{array}{c} n \\ r \end{array} \right) = \frac{n!}{r!(n-r)!} |render= <math>\left( \begin{matrix} n \\ r \end{matrix} \right) = \frac{n!}{r!(n-r)!}</math> }} The matrix-like expression for representing binomial coefficients is too padded. There is too much space between the brackets and the actual contents within. This can easily be corrected by adding a few negative spaces after the left bracket and before the right bracket. {{LaTeX/Example|code=\Re|render=<math>\Re</math>}}{{LaTeX/Example|code= \left(\! \begin{array}{c} n \\ r \end{array} \!\right) = \frac{n!}{r!(n-r)!} |render= <math>\left(\! \begin{matrix} n \\ r \end{matrix} \!\right) = \frac{n!}{r!(n-r)!} </math> }} In any case, adding some spaces manually should be avoided whenever possible: it makes the source code more complex and it's against the basic principles of a What You See is What You Mean approach. The best thing to do is to define some commands using all the spaces you want and then, when you use your command, you don't have to add any other space. Later, if you change your mind about the length of the horizontal space, you can easily change it modifying only the command you defined before. Let us use an example: you want the ''d'' of a ''dx'' in an integral to be in roman font and a small space away from the rest. If you want to type an integral like {{LaTeX/LaTeX|code=\int x \, \mathrm{d} x}}, you can define a command like this: {{LaTeX/Usage|code= \newcommand{\dd}{\mathop{}\,\mathrm{d}<!---->} }} in the preamble of your document. We have chosen {{LaTeX/LaTeX|code=\dd}} just because it reminds the "d" it replaces and it is fast to type. Doing so, the code for your integral becomes {{LaTeX/LaTeX|code=\int x \dd x}}. Now, whenever you write an integral, you just have to use the {{LaTeX/LaTeX|code=\dd}} instead of the "d", and all your integrals will have the same style. If you change your mind, you just have to change the definition in the preamble, and all your integrals will be changed accordingly. == Manually Specifying Formula Style == To manually display a fragment of a formula using text style, surround the fragment with curly braces and prefix the fragment with {{LaTeX/LaTeX|code=\textstyle}}. The braces are required because the {{LaTeX/LaTeX|code=\textstyle}} macro changes the state of the renderer, rendering all subsequent mathematics in text style. The braces limit this change of state to just the fragment enclosed within. For example, to use text style for just the summation symbol in a sum, one would enter {{LaTeX/Usage|code= \begin{equation} C^i_j = {\textstyle \sum_k} A^i_k B^k_j \end{equation} }} The same thing as a command would look like this: {{LaTeX/Usage|code= \newcommand{\tsum}[1]{{\textstyle \sum_{#1}}} }} Note the extra braces. Just one set around the expression won't be enough. That would cause all math after {{LaTeX/LaTeX|code=\tsum k}} to be displayed using text style. To display part of a formula using display style, do the same thing, but use {{LaTeX/LaTeX|code=\displaystyle}} instead. ==Advanced Mathematics: AMS Math package== The AMS ([[Wikipedia:American Mathematical Society|American Mathematical Society]]) mathematics package is a powerful package that creates a higher layer of abstraction over mathematical LaTeX language; if you use it it will make your life easier. Some commands {{LaTeX/Package|amsmath}} introduces will make other plain LaTeX commands obsolete: in order to keep consistency in the final output you'd better use {{LaTeX/Package|amsmath}} commands whenever possible. If you do so, you will get an elegant output without worrying about alignment and other details, keeping your source code readable. If you want to use it, you have to add this in the preamble: {{LaTeX/Usage|code= \usepackage{amsmath} }} ===Introducing dots in formulas=== {{LaTeX/Package|amsmath}} defines also the {{LaTeX/LaTeX|code=\dots}} command, that is a generalization of the existing {{LaTeX/LaTeX|code=\ldots}}. You can use {{LaTeX/LaTeX|code=\dots}} in both text and math mode and LaTeX will replace it with three dots "…" but it will decide according to the context whether to put it on the bottom (like {{LaTeX/LaTeX|code=\ldots}}) or centered (like {{LaTeX/LaTeX|code=\cdots}}). ===Dots=== LaTeX gives you several commands to insert dots (ellipses) in your formulae. This can be particularly useful if you have to type big matrices omitting elements. First of all, here are the main dots-related commands LaTeX provides: {| class="wikitable" ! Code !! Output !! Comment |- | {{LaTeX/LaTeX|code=\dots}} || <math>\dots</math> || generic dots (ellipsis), to be used in text (outside formulae as well). It automatically manages whitespaces before and after itself according to the context, it's a higher level command. |- | {{LaTeX/LaTeX|code=\ldots}}|| <math>\ldots</math> || the output is similar to the previous one, but there is no automatic whitespace management; it works at a lower level. |- | {{LaTeX/LaTeX|code=\cdots}} || <math>\cdots</math> || These dots are centered relative to the height of a letter. There is also the binary multiplication operator, <code>\cdot</code>, mentioned below. |- | {{LaTeX/LaTeX|code=\vdots}} || <math>\vdots</math> || vertical dots |- | {{LaTeX/LaTeX|code=\ddots}} || <math>\ddots</math> || diagonal dots |- | {{LaTeX/LaTeX|code=\iddots}} || || inverse diagonal dots (requires the {{LaTeX/Package|mathdots}} package) |- | {{LaTeX/LaTeX|code=\hdotsfor{n}<!---->}} || <math>\ldots \ldots</math>|| to be used in matrices, it creates a row of dots spanning ''n'' columns. |} Instead of using {{LaTeX/LaTeX|code=\ldots}} and {{LaTeX/LaTeX|code=\cdots}}, you should use the semantically oriented commands. It makes it possible to adapt your document to different conventions on the fly, in case (for example) you have to submit it to a publisher who insists on following house tradition in this respect. The default treatment for the various kinds follows American Mathematical Society conventions. {| class="wikitable" ! Code !! Output !! Comment |- | {{LaTeX/LaTeX|code=A_1,A_2,\dotsc,}} || [[File:LaTeX Dotsc.png]] || for "dots with commas" |- | {{LaTeX/LaTeX|code=A_1+\dotsb+A_N}} || [[File:LaTeX Dotsb.png]] || for "dots with binary operators/relations" |- | {{LaTeX/LaTeX|code=A_1 \dotsm A_N}} || [[File:LaTeX Dotsm.png]] || for "multiplication dots" |- | {{LaTeX/LaTeX|code=\int_a^b \dotsi}} || [[File:LaTeX Dotsi.png]] || for "dots with integrals" |- | {{LaTeX/LaTeX|code=A_1\dotso A_N}} || [[File:LaTeX Dotso.png]] || for "other dots" (none of the above) |} ===Write an equation with the align environment=== How to write an equation with the align environment with the {{LaTeX/Package|amsmath}} package is described in [[LaTeX/Advanced_Mathematics#align_and_align.2A|Advanced Mathematics]]. ==List of mathematical symbols== All the pre-defined mathematical symbols from the \TeX\ package are listed below. More symbols are available from extra packages. {| class="wikitable" latexfontsize="scriptsize" |+ Relation Symbols |- !scope="col"| Symbol !!scope="col"| Script |rowspan="11"| &nbsp; !scope="col"| Symbol !!scope="col"| Script |rowspan="10"| &nbsp; !scope="col"| Symbol !!scope="col"| Script |rowspan="10"| &nbsp; !scope="col"| Symbol !!scope="col"| Script |rowspan="10"| &nbsp; !scope="col"| Symbol !!scope="col"| Script |- | <math><\,</math>||<code><</code> | <math>>\,</math>||<code>></code> | <math>=\,</math>||<code>=</code> | <math>\parallel\,</math>||<code>\parallel</code> | <math>\nparallel\,</math>||<code>\nparallel</code> |- | <math>\leq\,</math>||<code>\leq</code> | <math>\geq\,</math>||<code>\geq</code> | <math>\doteq\,</math>||<code>\doteq</code> | <math>\asymp\,</math>||<code>\asymp</code> | <math>\bowtie\,</math>||<code>\bowtie</code> |- | <math>\ll\,</math>||<code>\ll</code> | <math>\gg\,</math>||<code>\gg</code> | <math>\equiv\,</math>||<code>\equiv</code> | <math>\vdash\,</math>||<code>\vdash</code> | <math>\dashv\,</math>||<code>\dashv</code> |- | <math>\subset\,</math>||<code>\subset</code> | <math>\supset\,</math>||<code>\supset</code> | <math>\approx\,</math>||<code>\approx</code> | <math>\in\,</math>||<code>\in</code> | <math>\ni\,</math>||<code>\ni</code> |- | <math>\subseteq\,</math>||<code>\subseteq</code> | <math>\supseteq\,</math>||<code>\supseteq</code> | <math>\cong\,</math>||<code>\cong</code> | <math>\smile\,</math>||<code>\smile</code> | <math>\frown\,</math>||<code>\frown</code> |- | <math>\nsubseteq\,</math>||<code>\nsubseteq</code> | <math>\nsupseteq\,</math>||<code>\nsupseteq</code> | <math>\simeq\,</math>||<code>\simeq</code> | <math>\models\,</math>||<code>\models</code> | <math>\notin\,</math>||<code>\notin</code> |- | <math>\sqsubset\,</math>||<code>\sqsubset</code> | <math>\sqsupset\,</math>||<code>\sqsupset</code> | <math>\sim\,</math>||<code>\sim</code> | <math>\perp\,</math>||<code>\perp</code> | <math>\mid\,</math>||<code>\mid</code> |- | <math>\sqsubseteq\,</math>||<code>\sqsubseteq</code> | <math>\sqsupseteq\,</math>||<code>\sqsupseteq</code> | <math>\propto\,</math>||<code>\propto</code> | <math>\prec\,</math>||<code>\prec</code> | <math>\succ\,</math>||<code>\succ</code> |- | <math>\preceq\,</math>||<code>\preceq</code> | <math>\succeq\,</math>||<code>\succeq</code> | <math>\neq\,</math>||<code>\neq</code> | <math>\sphericalangle\,</math>||<code>\sphericalangle</code> | <math>\measuredangle\,</math>||<code>\measuredangle</code> |- | <math>\therefore\,</math>||<code>\therefore</code> | <math>\because\,</math>||<code>\because</code> |} {| class="wikitable" latexfontsize="scriptsize" |+ Binary Operations |- !scope="col"| Symbol !!scope="col"| Script |rowspan="9"| &nbsp; !scope="col"| Symbol !!scope="col"| Script |rowspan="9"| &nbsp; !scope="col"| Symbol !!scope="col"| Script |rowspan="9"| &nbsp; !scope="col"| Symbol !!scope="col"| Script |- | <math>\pm\,</math> || <code>\pm</code> | <math>\cap\,</math> || <code>\cap</code> | <math>\diamond\,</math> || <code>\diamond</code> | <math>\oplus\,</math> || <code>\oplus</code> |- | <math>\mp\,</math> || <code>\mp</code> | <math>\cup\,</math> || <code>\cup</code> | <math>\bigtriangleup\,</math> || <code>\bigtriangleup</code> | <math>\ominus\,</math> || <code>\ominus</code> |- | <math>\times\,</math> || <code>\times</code> | <math>\uplus\,</math> || <code>\uplus</code> | <math>\bigtriangledown\,</math> || <code>\bigtriangledown</code> | <math>\otimes\,</math> || <code>\otimes</code> |- | <math>\div\,</math> || <code>\div</code> | <math>\sqcap\,</math> || <code>\sqcap</code> | <math>\triangleleft\,</math> || <code>\triangleleft</code> | <math>\oslash\,</math> || <code>\oslash</code> |- | <math>\ast\,</math> || <code>\ast</code> | <math>\sqcup\,</math> || <code>\sqcup</code> | <math>\triangleright\,</math> || <code>\triangleright</code> | <math>\odot\,</math> || <code>\odot</code> |- | <math>\star\,</math> || <code>\star</code> | <math>\vee\,</math> || <code>\vee</code> | <math>\bigcirc\,</math> || <code>\bigcirc</code> | <math>\circ\,</math> || <code>\circ</code> |- | <math>\dagger\,</math> || <code>\dagger</code> | <math>\wedge\,</math> || <code>\wedge</code> | <math>\bullet\,</math> || <code>\bullet</code> | <math>\setminus\,</math> || <code>\setminus</code> |- | <math>\ddagger\,</math> || <code>\ddagger</code> | <math>\cdot\,</math> || <code>\cdot</code> | <math>\wr\,</math> || <code>\wr</code> | <math>\amalg\,</math> || <code>\amalg</code> |} {| class="wikitable" latexfontsize="scriptsize" |+ Set and/or Logic Notation |- !scope="col"| Symbol !!scope="col"| Script | rowspan="16" | &nbsp; !scope="col"| Symbol !!scope="col"| Script |- | <math>\exists\,</math> || <code>\exists</code> | <math>\rightarrow\,</math> || <code>\rightarrow</code> or <code>\to</code> |- | <math>\nexists\,</math> || <code>\nexists</code> | <math>\leftarrow\,</math> || <code>\leftarrow</code> or <code>\gets</code> |- | <math>\forall\,</math> || <code>\forall</code> | <math>\mapsto\,</math> || <code>\mapsto</code> |- | <math>\neg\,</math> || <code>\neg</code> | <math>\implies\,</math> || <code>\implies</code> |- |<math>\cap</math> |<code>\cap</code> | | |- |<math>\cup</math> |<code>\cup</code> | | |- | <math>\subset\,</math>|| <code>\subset</code> |⟸ |<code>\impliedby</code> |- | <math>\supset\,</math>|| <code>\supset</code> |<math>\Rightarrow\,</math>||<code>\Rightarrow</code> or <code>\implies</code> |- | <math>\in</math>||<code>\in</code> |<math>\leftrightarrow\,</math>||<code>\leftrightarrow</code> |- | <math>\notin\,</math>|| <code>\notin</code> |<math>\iff\,</math>||<code>\iff</code> |- | <math>\ni\,</math>|| <code>\ni</code> |<math>\Leftrightarrow\,</math>||<code>\Leftrightarrow</code> (preferred for equivalence (iff)) |- | <math>\land\,</math>|| <code>\land</code> |<math>\top\,</math>||<code>\top</code> |- | <math>\lor\,</math>|| <code>\lor</code> |<math>\bot\,</math>||<code>\bot</code> |- | <math>\angle\,</math> || <code>\angle</code> |<math>\emptyset\,</math> and <math>\varnothing\,</math>||<code>\emptyset</code> and <code>\varnothing</code>{{ref|symbolpackage}} |- | | |<math>\rightleftharpoons\,</math> |<code>\rightleftharpoons</code> |} {| class="wikitable" latexfontsize="scriptsize" |+ Delimiters |- !scope="col"| Symbol !!scope="col"| Script |rowspan="5"| &nbsp; !scope="col"| Symbol !!scope="col"| Script |rowspan="5"| &nbsp; !scope="col"| Symbol !!scope="col"| Script |rowspan="5"| &nbsp; !scope="col"| Symbol !!scope="col"| Script |- | <math>|\,</math> || <code><nowiki>|</nowiki></code> or <code>\mid</code> (difference in spacing) | <math>\|\,</math> || <code>\<nowiki>|</nowiki></code> | <math>/\,</math> || <code>/</code> | <math>\backslash\,</math> || <code>\backslash</code> |- | <math>\{\,</math> || <code>\{</code> | <math>\}\,</math> || <code>\}</code> | <math>\langle\,</math> || <code>\langle</code> | <math>\rangle\,</math> || <code>\rangle</code> |- | <math>\uparrow\,</math> || <code>\uparrow</code> | <math>\Uparrow\,</math> || <code>\Uparrow</code> | <math>\lceil\,</math> || <code>\lceil</code> | <math>\rceil\,</math> || <code>\rceil</code> |- | <math>\downarrow\,</math> || <code>\downarrow</code> | <math>\Downarrow\,</math> || <code>\Downarrow</code> | <math>\lfloor\,</math> || <code>\lfloor</code> | <math>\rfloor\,</math> || <code>\rfloor</code> |} Note: To use the Greek Letters in LaTeX that have the same appearance in the Latin alphabet, just use Latin: e.g., A instead of Alpha, B instead of Beta, etc. {| class="wikitable" latexfontsize="scriptsize" |+ Greek Letters |- !scope="col"| Symbol !!scope="col"| Script |rowspan="13"| &nbsp; !scope="col"| Symbol !!scope="col"| Script |- | <math>\Alpha\,</math> and <math>\alpha\,</math>|| <code>A</code> and <code>\alpha</code> | <math>\Nu\,</math> and <math>\nu\,</math>|| <code>N</code> and <code>\nu</code> |- | <math>\Beta\,</math> and <math>\beta\,</math>|| <code>B</code> and <code>\beta</code> | <math>\Xi\,</math> and <math>\xi\,</math>|| <code>\Xi</code> and <code>\xi</code> |- | <math>\Gamma\,</math> and <math>\gamma\,</math>|| <code>\Gamma</code> and <code>\gamma</code> | <math>\Omicron\,</math> and <math>\omicron\,</math>|| <code>O</code> and <code>o</code> |- | <math>\Delta\,</math> and <math>\delta\,</math>|| <code>\Delta</code> and <code>\delta</code> | <math>\Pi\,</math>, <math>\pi\,</math> and <math>\varpi</math>|| <code>\Pi</code>, <code>\pi</code> and <code>\varpi</code> |- | <math>\Epsilon\,</math>, <math>\epsilon\,</math> and <math>\varepsilon\,</math>|| <code>E</code>, <code>\epsilon</code> and <code>\varepsilon</code> | <math>\Rho\,</math>, <math>\rho\,</math> and <math>\varrho\,</math>|| <code>P</code>, <code>\rho</code> and <code>\varrho</code> |- | <math>\Zeta\,</math> and <math>\zeta\,</math>|| <code>Z</code> and <code>\zeta</code> | <math>\Sigma\,</math>, <math>\sigma\,</math> and <math>\varsigma\,</math>|| <code>\Sigma</code>, <code>\sigma</code> and <code>\varsigma</code> |- | <math>\Eta\,</math> and <math>\eta\,</math>|| <code>H</code> and <code>\eta</code> | <math>\Tau\,</math> and <math>\tau\,</math>|| <code>T</code> and <code>\tau</code> |- | <math>\Theta\,</math>, <math>\theta\,</math> and <math>\vartheta\,</math>|| <code>\Theta</code>, <code>\theta</code> and <code>\vartheta</code> | <math>\mbox{Y}\,</math>, <math>\Upsilon\,</math> and <math>\upsilon\,</math>|| <code>Y</code>, <code>\Upsilon</code> and <code>\upsilon</code> |- | <math>\Iota\,</math> and <math>\iota\,</math>|| <code>I</code> and <code>\iota</code> | <math>\Phi\,</math>, <math>\phi\,</math>, and <math>\varphi\,</math>|| <code>\Phi</code>, <code>\phi</code> and <code>\varphi</code> |- | <math>\Kappa\,</math>, <math>\kappa\,</math> and <math>\varkappa\,</math> || <code>K</code>, <code>\kappa</code> and <code>\varkappa</code> | <math>\Chi\,</math> and <math>\chi\,</math>|| <code>X</code> and <code>\chi</code> |- | <math>\Lambda\,</math> and <math>\lambda\,</math>|| <code>\Lambda</code> and <code>\lambda</code> | <math>\Psi\,</math> and <math>\psi\,</math>|| <code>\Psi</code> and <code>\psi</code> |- | <math>\Mu\,</math> and <math>\mu\,</math>|| <code>M</code> and <code>\mu</code> | <math>\Omega\,</math> and <math>\omega\,</math>|| <code>\Omega</code> and <code>\omega</code> |} {| class="wikitable" latexfontsize="scriptsize" |+ Other symbols |- !scope="col"| Symbol !!scope="col"| Script |rowspan="4"| &nbsp; !scope="col"| Symbol !!scope="col"| Script |rowspan="4"| &nbsp; !scope="col"| Symbol !!scope="col"| Script |rowspan="4"| &nbsp; !scope="col"| Symbol !!scope="col"| Script |rowspan="4"| &nbsp; !scope="col"| Symbol !!scope="col"| Script |- | <math>\partial\,</math> || <code>\partial</code> | <math>\imath\,</math> || <code>\imath</code> | <math>\Re\,</math> || <code>\Re</code> | <math>\nabla\,</math> || <code>\nabla</code> | <math>\aleph\,</math> || <code>\aleph</code> |- | <math>\eth\,</math> || <code>\eth</code> | <math>\jmath\,</math> || <code>\jmath</code> | <math>\Im\,</math> || <code>\Im</code> | <math>\Box\,</math> || <code>\Box</code> | <math>\beth\,</math> || <code>\beth</code> |- | <math>\hbar\,</math> || <code>\hbar</code> | <math>\ell\,</math> || <code>\ell</code> | <math>\wp\,</math> || <code>\wp</code> | <math>\infty\,</math> || <code>\infty</code> | <math>\gimel\,</math> || <code>\gimel</code> |} {{note|symbolpackage}}Not predefined in LATEX 2. Use one of the packages latexsym, amsfonts, amssymb, txfonts, pxfonts, or wasysym {| class="wikitable" latexfontsize="scriptsize" |+Trigonometric Functions |- !scope="col"| Symbol !!scope="col"| Script |rowspan="5"| &nbsp; !scope="col"| Symbol !!scope="col"| Script |rowspan="5"| &nbsp; !scope="col"| Symbol !!scope="col"| Script |rowspan="5"| &nbsp; !scope="col"| Symbol !!scope="col"| Script |- | <math>\sin\,</math> || <code>\sin</code> | <math>\arcsin\,</math> || <code>\arcsin</code> | <math>\sinh\,</math> || <code>\sinh</code> | <math>\sec\,</math> || <code>\sec</code> |- | <math>\cos\,</math> || <code>\cos</code> | <math>\arccos\,</math> || <code>\arccos</code> | <math>\cosh\,</math> || <code>\cosh</code> | <math>\csc\,</math> || <code>\csc</code> |- | <math>\tan\,</math> || <code>\tan</code> | <math>\arctan\,</math> || <code>\arctan</code> | <math>\tanh\,</math> || <code>\tanh</code> | || |- | <math>\cot\,</math> || <code>\cot</code> | <math>\arccot\,</math> || <code>\arccot</code> | <math>\coth\,</math> || <code>\coth</code> | || |} If LaTeX does not include a command for the mathematical operator you want to use, for example <code>\cis</code> (<strong>c</strong>osine plus <strong>i</strong> times <strong>s</strong>ine), add to your preamble: \DeclareMathOperator\cis{cis} You can then use <code>\cis</code> in the document just like <code>\cos</code> or any other mathematical operator. <!-- Sections remaining: Table 3 onwards from symbols.pdf --> {{clear}} == Summary == As you begin to see, typesetting math can be tricky at times. However, because LaTeX provides so much control, you can get professional quality mathematics typesetting with relatively little effort (once you've had a bit of practice, of course!). It is possible to elaborate further on the nitty-gritty of mathematics because the possibilities seem endless. However, with this tutorial, you should be able to get along with it sufficiently. {{TODO| * introduce symbols from [http://www.andy-roberts.net/res/writing/latex/symbols.pdf] * add symbols from [http://www.ctan.org/tex-archive/macros/latex/contrib/wasysym/wasysym.pdf] * consider adding symbols from [http://www.ctan.org/tex-archive/info/symbols/comprehensive/symbols-letter.pdf] -- the list of nearly all symbols available for LaTeX * Consider, instead of using the symbols from the above mentioned, using what has already been introduced in [http://en.wikipedia.org/wiki/Math_markup] instead of retyping the tables * How to box an equation within an align environment * Color in equations }} == References == {{reflist}} == Notes == {{notelist|refs= {{efn|name="amsmath"|requires the {{LaTeX/Package|amsmath}} package}} {{efn|name="mathtools"|requires the {{LaTeX/Package|mathtools}} package}} {{efn|name="mathalfa"|1=The {{LaTeX/Package|mathalpha}} package allows for specifying a broader variety of fonts to be used in the <code>\mathfrak{}</code>, <code>\mathbb{}</code>, <code>\mathcal{}</code> and <code>\mathscr{}</code> commands. For example, the command <code>\usepackage[bb=pazo]{mathalpha}</code> makes it so <code>\mathbb{}</code> uses the "pazo" font. {{LaTeX/Package|mathalpha}}'s [http://mirrors.ctan.org/macros/latex/contrib/mathalpha/doc/mathalpha-doc.pdf documentation] gives a comparison of the different font options; some have lowercase letters, Greek letters or numerals where the default does not.}} }} ==Further reading== * [[meta:Help:Displaying a formula]]: Wikimedia uses a subset of LaTeX commands. ==External links== * [http://detexify.kirelabs.org detexify]: applet for looking up LaTeX symbols by drawing them * [http://mirrors.ctan.org/macros/latex/required/amsmath/amsmath.pdf <code>amsmath</code> documentation] * [http://www.thestudentroom.co.uk/wiki/LaTeX LaTeX - The Student Room] * [http://www.ctan.org/tex-archive/info/symbols/comprehensive The Comprehensive LaTeX Symbol List] * [https://mathvault.ca/wp-content/uploads/Comprehensive-List-of-Mathematical-Symbols.pdf Comprehensive List of Mathematical Symbols] <noinclude> == Examples == <math>\Re</math>=\Re <math>\overbrace{ 1+2+\cdots+100 }^{5050}</math>=\overbrace{ 1+2+\cdots }^{5050}{{LaTeX/Bottom|Rules and Struts|Advanced Mathematics}} </noinclude> == Templates == LaTeX/Example LaTeX/LaTeX {{LaTeX/LaTeX|code=ABC}} {{LaTeX/Example|code=ABC…|render=ABC…}} E(θ)=cos2θ 21y3mb9tsytws6mrt1qj1hrbijffbqh Hindi/Tenses 0 43049 4675315 4194371 2026-10-09T19:20:11Z ~2026-54390-62 3628002 /* The rest of the verbs */ (correct typo: the word "of" was spelled "fo") 4675315 wikitext text/x-wiki {{Indic}} {{Hindi}} Verbs in Hindi can be put into 3 aspects (habitual, progressive, perfective), 5 moods (indicative, presumptive, contrafactual, subjunctive, imperative), and 3 tenses (present, past, future). The copular verb "to be" होना (honā) in Hindi makes a distinction between the perfect and the imperfect past as well, while all the other verbs only have the perfect past. Hindi uses compound verbs to mark the aspect and the mood. In such compound constructions the aspectual participle acts as the aspect marker and the copular verb as the common mood/tense marker. Hence, unlike many other indo-european languages, the aspects and the moods which the verbs are in can be clearly demarkated. Also, Hindi has a couple of verbs besides होना (honā) [to be] that can act as the copula. Those copular verbs are रहना (rêhnā) [to stay], आना (ānā) [to come], जाना (jānā) [to go], and करना (karnā) [to do]. These could be called the secondary copulas, while होना (honā) [to be] is the primary copula. == Grammatical moods== The verbs in Hindi as discussed above can be put into different grammatical moods and aspects. For now we will stick to the grammatical moods and will later discuss the grammatical aspects. For now, just know that there is a base verb होना [to be] (aka copula verb) that helps us construct all the grammatical aspects of Hindi. This copula is the only verb in Hindi that has certain conjugations for some grammatical moods that the rest of the verbs do not have. A list of the grammatical moods that only the copula होना [to be] has is: # Indicative mood #* Present tense #* Past imperfect tense # Presumptive mood # Subjunctive mood #* Present tense === The verb होना === The conjugations of the copula होना (honā) [to be] for all the 5 moods and the 3 tenses are shown in the table below. These are the non-aspectual conjugations, or the simple aspect conjugations. However, beside the meaning "to be" of होना (honā), depending on the context of usage it can also be translated into English as "to be/exist", "to have/possess", "to happen", and "to become". The meaning of "to happen" when used with animate nouns, can also possibly mean "to be born". Also, in the third person the present indicative conjugations है and हैं can be translated to "there is" and "there are" respectively. Similarly, the indicative past imperfect था and थी could be translates to "there was" while थे and थीं to "there were" respectively. And, similarly the future indicative (the future presumptive as well) in the 3rd person can be translated as "there will be". {| class="wikitable" | colspan="10" |'''''Conjugations'' of होना ''' |- ! rowspan="5" |''mood'' ! rowspan="5" |''tense'' ! colspan="6" |singular ! colspan="2" |plural |- ! colspan="2" rowspan="3" |1P - मैं ! colspan="2" rowspan="3" |2P - तुम ! colspan="2" rowspan="2" |3P - यह/ये , वह/वो ! colspan="2" |1P - हम |- ! colspan="2" |2P - आप |- ! colspan="2" |2P - तू ! colspan="2" |3P - ये, वे/वो |- !''♂'' !''♀'' !''♂'' !''♀'' !''♂'' !''♀'' !''♂'' !''♀'' |- | rowspan="4" |'''indicative''' |'''present''' | colspan="2" |हूँ | colspan="2" |हो | colspan="2" |है | colspan="2" |हैं |- |'''perfect''' |हुआ |हुई |हुए |हुई |हुआ |हुई |हुए |हुईं |- |'''imperfect''' |था |थी |थे |थी |था |थी |थे |थीं |- |'''future''' |होऊँगा |होऊँगी |होओगे |होओगी |होएगा |होएगी |होएँगे |होएँगी |- | rowspan="3" |'''presumptive''' |'''present''' | rowspan="3" |हूँगा | rowspan="3" |हूँगी | rowspan="3" |होगे | rowspan="3" |होगी | rowspan="3" |होगा | rowspan="3" |होगी | rowspan="3" |होंगे | rowspan="3" |होंगी |- |'''past''' |- |'''future''' |- | rowspan="2" |'''subjunctive''' |'''present''' | colspan="2" |हूँ | colspan="2" |हो | colspan="2" |हो | colspan="2" |हों |- |'''future''' | colspan="2" |होऊँ | colspan="2" |होओ | colspan="2" |होए | colspan="2" |होएँ |- |'''contrafactual''' |'''past''' |होता |होती |होते |होती |होता |होती |होते |होतीं |- | rowspan="2" |'''imperative''' |'''present''' | colspan="2" |— | colspan="2" |होओ | colspan="2" |हो | colspan="2" |होइए |- |'''future''' | colspan="2" |— | colspan="2" |होना | colspan="2" |होइयो | colspan="2" |होइयेगा |} === The rest of the verbs === Using the verb करना [to do] as an example to show what conjugations the rest of the verbs have. {| class="wikitable" | colspan="10" |'''conjugations of "''करना'' [to do]"''' |- ! rowspan="5" |''mood'' ! rowspan="5" |''tense'' ! colspan="6" |''singular'' ! colspan="2" |''plural'' |- ! colspan="2" rowspan="3" |''1P - मैं'' ! colspan="2" rowspan="3" |''2P - तुम'' ! colspan="2" rowspan="2" |''3P - यह /ये , वह /वो'' ! colspan="2" |''1P - हम'' |- ! colspan="2" |''2P - आप'' |- ! colspan="2" |''2P - तू'' ! colspan="2" |''3P - ये , वे /वो'' |- !''♂'' !''♀'' !''♂'' !''♀'' !''♂'' !''♀'' !''♂'' !''♀'' |- | rowspan="2" |'''indicative''' |'''perfect''' |किया |की |किये |की |किया |की |किये |कीं |- |'''future''' |करूँगा |करूँगी |करोगे |करोगी |करेगा |करेगी |करेंगे |करेंगी |- |'''subjunctive''' |'''future''' | colspan="2" |करूँ | colspan="2" |करो | colspan="2" |करे | colspan="2" |करें |- |'''contrafactual''' |'''past''' |करता |करती |करते |करती |करता |करती |करते |करतीं |- | rowspan="2" |'''imperative''' |'''present''' | colspan="2" |— | colspan="2" |करो | colspan="2" |कर | colspan="2" |करिये |- |'''future''' | colspan="2" |— | colspan="2" |करना | colspan="2" |करियो | colspan="2" |करियेगा |} Comparing this table for करना [to do] with the previous conjugation table for होना [to be] it can be seen that करना [to do] (and the rest of the verbs) have a lot few conjugations. == Indicative mood == The indicative mood conveys factual information. It can be translated into English the following way: {| class="wikitable" ! ! colspan="2" |Present ! colspan="2" |Past Imperfect ! colspan="2" |Past Perfect ! colspan="2" |Future |- |1. |मैं हूँ |I am |मैं था |I was |मैं हुआ |I became |मैं होऊँगा |I will become |- |2. |तू है |thou art |तू था |thou wast |तू हुआ |thou becamest |तू होएगी |thou wilt become |- |3. |तुम हो |you are |तुम थे |you were |तुम हुए |you became |तुम होओगी |you will become |- |4. |वो हैं |they are |वो थे |they were |वो हुए |they became |वो होएँगे |they will become |} It must be noted that these present indicative forms only exist for the verb होना [to be]. No other verb in Hindi has the present indicative conjuguations. A little linguistic fact: Historically, Hindi used to have the present indicative forms but eventually they somehow changed their meaning from the present indicative to the future subjunctive. So, all the conjugations that once represented the present indicative mood now represennt the future subjunctive mood in Hindi. Also, keep in mind that it is only the simple verbal aspect in which the rest of the verbs don't have the indicative mood forms. The other aspects which are the habitual aspect, the perfective aspect, and the progressive aspect do have indicative mood forms for all the verbs. We will learn about them soon! == Presumptive mood == The presumptive mood conveys presumption about something, it could also convey the nuance of indifference to things. It is not easy (if not impossible) to translate this mood into English. In Hindi, the present, past, and the future conjugations of the presumptive mood is the same. Also, only the verb होना [to be] has the presumptive mood conjugations. For the other verbs, the preseumtive mood forms are constructed using the aspectual participles. They presumptive mood could roughly be translated in the following way: # वो होगा/होगी — (s)he/it must be, it must be true that (s)he/it is, (s)he/it might be # तुम होगे/होगी — you must be, it must be true that you are, you might be # होंगे तुम्हारे पास 1000 रुपये पर मुझे फ़र्क नहीं पड़ता। — It could/might be true that you have ₹1000 but I don't care. [The sentence conveys that the speaker is indifferent to the fact that the listener has ₹1000 even without using the expression फ़र्क नहीं पड़ता (don't/doesn't care)] == Subjunctive Mood == The subjunctive mood of the verbs express desire, wish, or want. === Subjunctive triggering words === It is always subjunctive form of verbs that are used with certain verbs or phrasal words, that is certain verbs and desire expressing expressions trigger the subjunctive. Using any other mood with such verbs or phrases will make the sentencec grammatically wrong. For example: # चाहना [to want, to love, to like] #* मैं चाहता हूँ कि वो करे। — I want that (s)he do. #* मैं चाहता हूँ कि वो करेगा। — [ungrammatical sentence] (the future subjunctive when switched with future indicative mood makes the sentence ungrammatical) # काश [wish, hope, I wish] #* काश ऐसा हो। — (I) Wish that it is like that. #* काश ऐसा है। — [ungrammatical sentence] (the present subjunctive when switched with present indicative mood makes the sentence ungrammatical) However, note that subjunctive can be used with the sentences like the first example above if non-subjunctive triggering verbs are used as well, but in such cases the indicative mood can also used in the sentence, for example: # बोलना [to tell, to say] #* मैंने उसे बोला कि वो आये। — "I told him that he come." #* मैंने उसे बोला कि वो आएगा। — "I told him that he will come". (which is equivalent to saying — I told him: "You will come.") The first sentence above expresses the same as what the 1st sentence in the first example expressed, a wish or desire through the subjunctive verb आये. The second sentence is the indirect reporting of the what you said to somone. It's the indirect speech form. The pronoun वो in the sentence may or may not refer to the same person who is represented by pronoun उसे. So, both these sentences express two different gramamrical ideas. === Conveying a past event === Another type of sentence when the subjunctive is used is when you are conveying someone a past event. Let's say that a friend of yours asked you to give him money and you are narrating this event to someone else at a later time, your sentence could be one of the two sentences below: # मेरा दोस्त बोला कि मैं उसे पैसे दूँ। — My friend asked me to give him money. # मेरा दोस्त चाहता था कि मैं उसे पैसे दूँ। — My friend wanted that I give him money. In the first exammple sentence, the verb दूँ is the subjunctive form of the verb देना [to give] and बोला is the past perfective form of the verb बोलना [to tell, to say]. The second sentence uses the verb चाहना [to want] to convey the same. === Seeking approval === Historically, in Hindi, the subjunctive form of the verbs used to be the present indicative form of verbs (that is why no verbs in Hindi with an exception of the verb होना [to be] have present indicative forms), so subjunctives in some cases also convey what the present indicative would have roughly conveyed, for example the subjuntive form of verbs when turned into a question in the first person (i.e. only with the pronoun मैं) translates with the word "shall" added to the question, this form of question is used to ask another person permission or seeking for approval to do something. For example: # करना [to do] #* मैं करूँ? — Shall I do? # आना [to come] #* मैं आऊँ? — Shall I come? Also, note that in the eastern dialects of Hindi the pronoun मैं is not used, but instead the pronoun हम is used as the 1st person singular (as well as the plural) pronoun. So, it's possible hearing people हम and its subjunctive conjugugation for seeking approval. # करना [to do] #* हम करें? — Shall I do? # आना [to come] #* हम आएँ? — Shall I come? == Contrafactual mood == The name contrafactual is made up of two constituents, "contra" (means 'against') and "factual" (means 'truth'). So, as the name suggests this mood is used when you want to talk about things that are not true, that are not factual, things that could been been but did not, things if they were true but are not. From its usage you will notice that this mood is very similar to the subjunctive mood in the sense that both convey some kind of wish or desire. The only difference being that the contrafactual mood looks back into the past, while the subjunctive mood into the future. You will see that there are a two different usages of the contrafactual mood. It is used as the past subjunctive and the past conditional mood both. === Conveying unreal past === # काश ऐसा होता। — (I) wish it were true. # काश बोलते कुछ उसे तुम। — (I) wish you had told something to him/her. === Past conditional sentences === These sentences are equivalent to the English construction of "If ____, then _____." For example: "If he '''were''' hungry, I '''would have''' given him bread." Such sentences talk about hypothetical situations in the past. In English you would notice that the first part of the sentence "I he '''were''' hungry..." uses the past subjunctive mood and the second part of the sentence "I '''would have''' given him bread" uses the conditional mood. Now, as we discussed above in Hindi, the past conditional and the past subjunctive mood both are represented as the same contrafacutual mood. It is also important to keep in mind that the verbs in contrafactual mood agree with the number and gender of the noun (either the subject or the direct object) in the sentence. When the subject is in the dative or ergative case then the verb agrees with the object in the sentence and in any other case the verb agrees with the subject of the sentence. Examples of contrafactual mood to form past conditional sentences are given below: * When nominative case is used: :# अगर मैं उसे ये बात '''बोलता''' तो वो सबको '''बता देता'''। — If I (masc.) had told him this thing, he would have told it to everyone. :# अगर मैं उसे ये बात '''बोलती''' तो वो सबको '''बता देता'''। — If I (fem.) had told him this thing, he would have told it to everyone. In the first part of the sentence, the subject (the pronoun मैं) is in the nominative case so the verb in contrafactual mood will agree with the pronoun मैं in gender and number. If मैं refers to a female use the feminine conjugation (बोलती) (ी ending shows its feminine) and when it refers to a male, use the masculine conjugation (बोलता). The same happens in the second part of the senetnce, the pronoun वो is in the nominative case and hence the verb in contrafactual mood agrees with the gender of the person referred using वो. * When dative case is used: :# अगर उसे भूख '''होती''' तो मैं उसे ब्रॅड '''दे देता'''। — If (s)he '''were''' hungry, I (masc.) '''would have given''' him/her bread. :# अगर उसे भूख '''होती''' तो मैं उसे ब्रॅड '''दे देती'''। — If (s)he '''were''' hungry, I (fem.) '''would have given''' him/her bread. The noun (object) भूख (hunger) is feminine and it it's used with hence it goes with उसे (to him/her) [dative case], so agreeing with भूख, the contrafactual verb होती (ी ending shows its feminine) is used. In the second part, मैं (I) is the nominative case, and so the gender/number agreement will be with the subject. If मैं (I) is used by a female, the verb would have been देती instead of देता. {{BookCat}} fkyxk5ftc92mbfy2kpnlslxtl9hp6uh Brewing/Procedures 0 57585 4675371 4091826 2026-10-10T00:40:37Z ~2026-54475-31 3628021 /* Grain Preparation */ fix typo 4675371 wikitext text/x-wiki {{TOCbrewing}} ==In the Beginning...== Making beer starts in the field where hardworking farmers raise acres of barley and wonderful hop bines. Barley is grown in winter and spring varieties, and barley for beer is grown in 2-row and 6-row varieties. Hop vines are an annual crop, harvested flower buds, or cones, being the fruit of the plant brewers have interest in. The vines may be trimmed back, and the core of the plant left in the ground for next year. Barley grain is then sent to the maltster, and hops are either immediately used, frozen and vacuum packed until use, or compressed into pellets and stored for future use. ==Grain Preparation== Harvested grain is allowed to germinate for 1-3 days until the desired level of modification is achieved. Then the grain is dried using heat to varying degrees and drying times to produce the varying types and styles of malt. For some styles of malt, additional preparations are performed such as smoking or roasting. The malted grain is milled using varied designs of grinders that attempt to break up the starch rich "meat" of the grain, while leaving the hulls as intact as possible. ==Mashing and Lautering== The starches are broken down to fermentable sugars and extracted into water from the milled malt grains or grist by processes called the mash and the lauter. The mash uses heat at specific temperatures to activate certain enzymes that break starch chains down to sugars that can easily be consumed by yeast. Lautering is simply the straining of the spent grain from the sugar enriched water. Sparging is another process that rinses the spent grain, and is usually done as a part of the lautering. ===The Mash=== There are three major fashions in which the mash is preformed; Infusion, Temperature Controlled Step, and Decoction. The infusion mash is the simplest, in which grist and water are combined and held at a single temperature until the conversion of starches to sugars is complete. It gets its name from the "infusion" of hot water into the grist to obtain the initial temperature. The step mash gets its name from the manner by which the temperature of the mash is brought to an initial point, held there for a period of time, called a rest, and then raised to another rest, and sometimes again. If you plot the temperature with respect to time, the plot will appear to be "steps." The Decoction mash is the oldest method and is done by infusing boiling water to the mash to achieve initial temperature rest. Sometime before the end of the rest, a measured amount of the mash (water ''and'' grist) is removed and brought to a boil. When added back in, the mash temperature raises to the next rest. This is usually done once more, and sometimes a fourth rest is used. ===The Lauter and Sparge=== Once the starches are converted to sugars, and dissolved into the mash water, the sweet liquid is drained away and sent to the boil. The sweet liquid can be filtered through a collander or a screen, but it is often more desirable to carefully drain the liquid away from the grain to avoid excessive aeration of the hot liquid, since this will cause oxidation. Usually the lauter and the sparge are done as one operation. The mash is carefully put into a lauter tun, using some sparge water to keep the surface of the liquid above that of the grain. This allows the grain to form a "bed" where the spent hulls support each other and form a filtration structure, while the higher temperature of the sparge water stops further enzymatic activity. Sometimes the mash tun and the lauter tun are one and the same, in which case sparge water is added to the mash to maintain the surface while part of the mash is drained and cycled back into the mash. Once the mash is completely transferred, or the cycling liquid "runs clear," or has no large particles, the sweet liquid is slowly drained to the boil kettle while fresh sparge water is carefully added to the top of the tun. When the volume of liquid from the mash is drained, lautering is considered complete. But, the process is usually continued, and is called sparging. The resulting liquid can now be called wort. ==Malt Extract== The sweet liquid that results from the mash, lauter, and sparge can be considered "extract." The all-grain home brewer ignores this and proceeds to the boil. However, this liquid can be concentrated, by boiling down to a thick syrup, or cooked into a dry powder. These are the forms we usually refer to as "malt extract." Bulk malt extract and unhopped extract kits are produced this way, and pre-hopped extracts are either obtained after the boil or simply mixed with hop extract. When a brewer uses malt extracts to make beer, he must first "unconcentrate" the extract. This can be compared to making orange juice from frozen orange juice concentrate. An amount of water is brought to a boil, then removed from the heat source. The malt extract is stirred in, dissolving into the liquid, which then can be again called wort. ==The Boil== Hops are then added to the wort, and boiled therein for an hour or more. This causes alpha acids in the hops to break down and dissolve into the wort. Some adjuncts that could not be added in the mash can also be added to the boil, as in the case of molasses, or if a mash was not performed at all (this is then called partial mash brewing). Near the end of the boil more hops may be added to impart flavors and aromas from the hops, certain fining agents may be added such as Irish moss, and certain other adjuncts may be added to pasturize them while leaving their starch chains intact. Before pitching yeast, the wort must be cooled to a yeast friendly temperature. This can be done by immersing the brew kettle in a tub full of cold water, placing a special chilling coil into the wort, or special chillers that the wort actually passes through. Quick cooling lessens the potential for early bacterial contamination or oxidation of the wort. Slow wort cooling can allow dimethyl sulfide to build up in the wort, which will produce off flavors. Rapid cooling also aids in cold break formation, allowing a clearer beer to be produced. ==Yeast Farm?== Professional and commercial breweries usually maintain a culture of yeast that they use in their beer. Many homebrewers do the same, and the science, or art as some might consider it, of maintaining a yeast culture is called zymurgy or, more affectionately, yeast farming. This process can be considered apart from the brewing process, since viable yeast cultures can be bought and quickly pitched to a cooled wort, but a wise brewer knows that understanding how yeast lives is very important to understanding how yeast makes beer. In fact, most experienced homebrewers will prepare what is called a "starter" to pitch instead of blindly tossing in the contents of the store bought vial. A nurturing environment is produced that is rich in sugars and nutrients, into which yeast is pitched. The mixture is allowed to ferment for a day or two, or even a few hours, after which the sediment may be harvested and placed into cold storage. The yeast sediment may also be freeze-dried to produce the dried yeast that comes in packets with many shelf stored beer kits. The stored yeast, in liquid form, can be expected to have viable cells several months later, but a yeast farmer will repitch after no more than a month, both to keep the culture alive, and to revitalize the amount of viable cells. A day or two before brew day, a smart brewer will create a starter by preparing perhaps a quart of wort, using a DME (dry malt extract) for simplicity and then pitching either a sample from his yeast farm, a store bought vial of liquid yeast, or rehydrated dry yeast. The yeast will multiply in number until they reach an optimal threshold of yeast per volume of wort, and the fermenting starter will exhibit signs of primary fermentation and it is then ready to pitch to the wort. As an aside, professional breweries who ferment in large batches might make several starters, i.e., a quart to start a five gallon starter to start a 60 gallon barrel. By doing this, the brewer shortens the time it takes for primary fermentation to start, and thus minimizes the chances for unwanted microbials getting a foot hold and ruining the batch. ==Fermentation== Fermentation is said to have two stages; primary and secondary. In primary fermentation, yeast is very active, reproducing itself and consuming the easily converted sugars. The process may seem violent, and a foam head will form, which is called krauesen{{typo help inline|reason=similar to krausen|date=August 2022}}. Once the krauesen "drops," or settles to the bottom, primary fermentation is complete and some brewers will transfer the fermenting liquid off of the sediment and into a secondary fermenter. This is done to prevent the spent yeast cells from negatively affecting the flavor of the beer, however the benefit of doing this is somewhat debatable, and some brewers choose not to do this. Fermentation can take a couple weeks to a month, or even longer depending on the amount of sugars in the wort and the difficulty of conversion. Light body beers can be quickly fermented with fast working ale yeast. Conversely, heavy body beers fermented with colder working lager yeast can ferment a lot longer. Primary fermentation usually is complete within the first week. ==Carbonation== Before consumption beer is normally carbonated, and often aged for a week or more. Generally, longer aging produces a better beer, but too much aging can negatively affect the quality. Beer can be ''naturally'' or ''artificially'' carbonated. Natural carbonation capitalizes on the fact that even after fermentation is complete, yeast remains suspended in the beer. After transferring the beer into an intermediate "bottling" or "priming" bucket, additional fermentable sugar is added to the beer. The beer is allowed to sit for up to 24 hours, in which time the suspended yeast reawakens and begins to convert the new sugars. The beer is then put into a sealed container or containers, such as a keg or recappable bottles. Within a week the yeast will have converted the new sugars into a negligible amount of alcohol and an amount of CO<sub>2</sub> adequate to pressurize the container and carbonate the beer. Aging becomes most important when the sugars added are different than the sugars present in the source wort. Priming corn sugar is quickly converted and so will result in larger bubbles and a thin head. Given time under pressure these bubbles will break down and allow better head development. Priming malt will perform better, but both priming sources will introduce flavors that may not have been present in the original beer. A process called krauesening is optimal, but requires slightly more work. Aging also allows the suspended yeast to settle, and allow the beer to clear, resulting in a cleaner looking and tasting beer. Artificial carbonation is done by putting the beer into a keg and applying pressure from a CO<sub>2</sub> tank for at least 24 hours to force carbonate. ==Consumption== Artificially carbonated beer should be poured into a stein, to avoid sloshing the sediment while drinking. Steins should be washed using a diluted bleach solution, since dish soaps will leave a film on the glass that will destroy beer head. Homebrewed beer still has suspended yeast cells in it, which is a Good Thing(TM). When a human drinks alcohol, its body uses vitamin B complex and water to neutralize and rid itself of the alcohol. If it didn't do this, the human would remain perpetually drunk, which might sound good, but then the human would be unable to drink more beer since it would probably kill it. Now, when that human wakes in the morning after two cases of beer, a bottle of BaerenJaeger, and a few hours praying to a porcelain god, the human's body is depleted of vitamin b and is dehydrated from excessive gifts to the aforementioned god. Yeast cell walls contain vitamin b complex, so a homebrewer, after enjoying a few home brews with good friends will drink a glass or two of water before going to bed. NO HANGOVERS. (Well, at least less likely) 4yb2e25h8tg2gdnw6qm60vfbm2o0ug9 4675374 4675371 2026-10-10T00:43:09Z ~2026-54475-31 3628021 /* The Mash */ 4675374 wikitext text/x-wiki {{TOCbrewing}} ==In the Beginning...== Making beer starts in the field where hardworking farmers raise acres of barley and wonderful hop bines. Barley is grown in winter and spring varieties, and barley for beer is grown in 2-row and 6-row varieties. Hop vines are an annual crop, harvested flower buds, or cones, being the fruit of the plant brewers have interest in. The vines may be trimmed back, and the core of the plant left in the ground for next year. Barley grain is then sent to the maltster, and hops are either immediately used, frozen and vacuum packed until use, or compressed into pellets and stored for future use. ==Grain Preparation== Harvested grain is allowed to germinate for 1-3 days until the desired level of modification is achieved. Then the grain is dried using heat to varying degrees and drying times to produce the varying types and styles of malt. For some styles of malt, additional preparations are performed such as smoking or roasting. The malted grain is milled using varied designs of grinders that attempt to break up the starch rich "meat" of the grain, while leaving the hulls as intact as possible. ==Mashing and Lautering== The starches are broken down to fermentable sugars and extracted into water from the milled malt grains or grist by processes called the mash and the lauter. The mash uses heat at specific temperatures to activate certain enzymes that break starch chains down to sugars that can easily be consumed by yeast. Lautering is simply the straining of the spent grain from the sugar enriched water. Sparging is another process that rinses the spent grain, and is usually done as a part of the lautering. ===The Mash=== There are three major fashions in which the mash is performed: Infusion, Temperature Controlled Step, and Decoction. The infusion mash is the simplest, in which grist and water are combined and held at a single temperature until the conversion of starches to sugars is complete. It gets its name from the "infusion" of hot water into the grist to obtain the initial temperature. The step mash gets its name from the manner by which the temperature of the mash is brought to an initial point, held there for a period of time, called a rest, and then raised to another rest, and sometimes again. If you plot the temperature with respect to time, the plot will appear to be "steps." The Decoction mash is the oldest method and is done by infusing boiling water to the mash to achieve initial temperature rest. Sometime before the end of the rest, a measured amount of the mash (water ''and'' grist) is removed and brought to a boil. When added back in, the mash temperature raises to the next rest. This is usually done once more, and sometimes a fourth rest is used. ===The Lauter and Sparge=== Once the starches are converted to sugars, and dissolved into the mash water, the sweet liquid is drained away and sent to the boil. The sweet liquid can be filtered through a collander or a screen, but it is often more desirable to carefully drain the liquid away from the grain to avoid excessive aeration of the hot liquid, since this will cause oxidation. Usually the lauter and the sparge are done as one operation. The mash is carefully put into a lauter tun, using some sparge water to keep the surface of the liquid above that of the grain. This allows the grain to form a "bed" where the spent hulls support each other and form a filtration structure, while the higher temperature of the sparge water stops further enzymatic activity. Sometimes the mash tun and the lauter tun are one and the same, in which case sparge water is added to the mash to maintain the surface while part of the mash is drained and cycled back into the mash. Once the mash is completely transferred, or the cycling liquid "runs clear," or has no large particles, the sweet liquid is slowly drained to the boil kettle while fresh sparge water is carefully added to the top of the tun. When the volume of liquid from the mash is drained, lautering is considered complete. But, the process is usually continued, and is called sparging. The resulting liquid can now be called wort. ==Malt Extract== The sweet liquid that results from the mash, lauter, and sparge can be considered "extract." The all-grain home brewer ignores this and proceeds to the boil. However, this liquid can be concentrated, by boiling down to a thick syrup, or cooked into a dry powder. These are the forms we usually refer to as "malt extract." Bulk malt extract and unhopped extract kits are produced this way, and pre-hopped extracts are either obtained after the boil or simply mixed with hop extract. When a brewer uses malt extracts to make beer, he must first "unconcentrate" the extract. This can be compared to making orange juice from frozen orange juice concentrate. An amount of water is brought to a boil, then removed from the heat source. The malt extract is stirred in, dissolving into the liquid, which then can be again called wort. ==The Boil== Hops are then added to the wort, and boiled therein for an hour or more. This causes alpha acids in the hops to break down and dissolve into the wort. Some adjuncts that could not be added in the mash can also be added to the boil, as in the case of molasses, or if a mash was not performed at all (this is then called partial mash brewing). Near the end of the boil more hops may be added to impart flavors and aromas from the hops, certain fining agents may be added such as Irish moss, and certain other adjuncts may be added to pasturize them while leaving their starch chains intact. Before pitching yeast, the wort must be cooled to a yeast friendly temperature. This can be done by immersing the brew kettle in a tub full of cold water, placing a special chilling coil into the wort, or special chillers that the wort actually passes through. Quick cooling lessens the potential for early bacterial contamination or oxidation of the wort. Slow wort cooling can allow dimethyl sulfide to build up in the wort, which will produce off flavors. Rapid cooling also aids in cold break formation, allowing a clearer beer to be produced. ==Yeast Farm?== Professional and commercial breweries usually maintain a culture of yeast that they use in their beer. Many homebrewers do the same, and the science, or art as some might consider it, of maintaining a yeast culture is called zymurgy or, more affectionately, yeast farming. This process can be considered apart from the brewing process, since viable yeast cultures can be bought and quickly pitched to a cooled wort, but a wise brewer knows that understanding how yeast lives is very important to understanding how yeast makes beer. In fact, most experienced homebrewers will prepare what is called a "starter" to pitch instead of blindly tossing in the contents of the store bought vial. A nurturing environment is produced that is rich in sugars and nutrients, into which yeast is pitched. The mixture is allowed to ferment for a day or two, or even a few hours, after which the sediment may be harvested and placed into cold storage. The yeast sediment may also be freeze-dried to produce the dried yeast that comes in packets with many shelf stored beer kits. The stored yeast, in liquid form, can be expected to have viable cells several months later, but a yeast farmer will repitch after no more than a month, both to keep the culture alive, and to revitalize the amount of viable cells. A day or two before brew day, a smart brewer will create a starter by preparing perhaps a quart of wort, using a DME (dry malt extract) for simplicity and then pitching either a sample from his yeast farm, a store bought vial of liquid yeast, or rehydrated dry yeast. The yeast will multiply in number until they reach an optimal threshold of yeast per volume of wort, and the fermenting starter will exhibit signs of primary fermentation and it is then ready to pitch to the wort. As an aside, professional breweries who ferment in large batches might make several starters, i.e., a quart to start a five gallon starter to start a 60 gallon barrel. By doing this, the brewer shortens the time it takes for primary fermentation to start, and thus minimizes the chances for unwanted microbials getting a foot hold and ruining the batch. ==Fermentation== Fermentation is said to have two stages; primary and secondary. In primary fermentation, yeast is very active, reproducing itself and consuming the easily converted sugars. The process may seem violent, and a foam head will form, which is called krauesen{{typo help inline|reason=similar to krausen|date=August 2022}}. Once the krauesen "drops," or settles to the bottom, primary fermentation is complete and some brewers will transfer the fermenting liquid off of the sediment and into a secondary fermenter. This is done to prevent the spent yeast cells from negatively affecting the flavor of the beer, however the benefit of doing this is somewhat debatable, and some brewers choose not to do this. Fermentation can take a couple weeks to a month, or even longer depending on the amount of sugars in the wort and the difficulty of conversion. Light body beers can be quickly fermented with fast working ale yeast. Conversely, heavy body beers fermented with colder working lager yeast can ferment a lot longer. Primary fermentation usually is complete within the first week. ==Carbonation== Before consumption beer is normally carbonated, and often aged for a week or more. Generally, longer aging produces a better beer, but too much aging can negatively affect the quality. Beer can be ''naturally'' or ''artificially'' carbonated. Natural carbonation capitalizes on the fact that even after fermentation is complete, yeast remains suspended in the beer. After transferring the beer into an intermediate "bottling" or "priming" bucket, additional fermentable sugar is added to the beer. The beer is allowed to sit for up to 24 hours, in which time the suspended yeast reawakens and begins to convert the new sugars. The beer is then put into a sealed container or containers, such as a keg or recappable bottles. Within a week the yeast will have converted the new sugars into a negligible amount of alcohol and an amount of CO<sub>2</sub> adequate to pressurize the container and carbonate the beer. Aging becomes most important when the sugars added are different than the sugars present in the source wort. Priming corn sugar is quickly converted and so will result in larger bubbles and a thin head. Given time under pressure these bubbles will break down and allow better head development. Priming malt will perform better, but both priming sources will introduce flavors that may not have been present in the original beer. A process called krauesening is optimal, but requires slightly more work. Aging also allows the suspended yeast to settle, and allow the beer to clear, resulting in a cleaner looking and tasting beer. Artificial carbonation is done by putting the beer into a keg and applying pressure from a CO<sub>2</sub> tank for at least 24 hours to force carbonate. ==Consumption== Artificially carbonated beer should be poured into a stein, to avoid sloshing the sediment while drinking. Steins should be washed using a diluted bleach solution, since dish soaps will leave a film on the glass that will destroy beer head. Homebrewed beer still has suspended yeast cells in it, which is a Good Thing(TM). When a human drinks alcohol, its body uses vitamin B complex and water to neutralize and rid itself of the alcohol. If it didn't do this, the human would remain perpetually drunk, which might sound good, but then the human would be unable to drink more beer since it would probably kill it. Now, when that human wakes in the morning after two cases of beer, a bottle of BaerenJaeger, and a few hours praying to a porcelain god, the human's body is depleted of vitamin b and is dehydrated from excessive gifts to the aforementioned god. Yeast cell walls contain vitamin b complex, so a homebrewer, after enjoying a few home brews with good friends will drink a glass or two of water before going to bed. NO HANGOVERS. (Well, at least less likely) gq4uuixpkl27sl86i99pjz7tdpvnspk 4675384 4675374 2026-10-10T00:54:45Z ~2026-54475-31 3628021 /* The Boil */ 4675384 wikitext text/x-wiki {{TOCbrewing}} ==In the Beginning...== Making beer starts in the field where hardworking farmers raise acres of barley and wonderful hop bines. Barley is grown in winter and spring varieties, and barley for beer is grown in 2-row and 6-row varieties. Hop vines are an annual crop, harvested flower buds, or cones, being the fruit of the plant brewers have interest in. The vines may be trimmed back, and the core of the plant left in the ground for next year. Barley grain is then sent to the maltster, and hops are either immediately used, frozen and vacuum packed until use, or compressed into pellets and stored for future use. ==Grain Preparation== Harvested grain is allowed to germinate for 1-3 days until the desired level of modification is achieved. Then the grain is dried using heat to varying degrees and drying times to produce the varying types and styles of malt. For some styles of malt, additional preparations are performed such as smoking or roasting. The malted grain is milled using varied designs of grinders that attempt to break up the starch rich "meat" of the grain, while leaving the hulls as intact as possible. ==Mashing and Lautering== The starches are broken down to fermentable sugars and extracted into water from the milled malt grains or grist by processes called the mash and the lauter. The mash uses heat at specific temperatures to activate certain enzymes that break starch chains down to sugars that can easily be consumed by yeast. Lautering is simply the straining of the spent grain from the sugar enriched water. Sparging is another process that rinses the spent grain, and is usually done as a part of the lautering. ===The Mash=== There are three major fashions in which the mash is performed: Infusion, Temperature Controlled Step, and Decoction. The infusion mash is the simplest, in which grist and water are combined and held at a single temperature until the conversion of starches to sugars is complete. It gets its name from the "infusion" of hot water into the grist to obtain the initial temperature. The step mash gets its name from the manner by which the temperature of the mash is brought to an initial point, held there for a period of time, called a rest, and then raised to another rest, and sometimes again. If you plot the temperature with respect to time, the plot will appear to be "steps." The Decoction mash is the oldest method and is done by infusing boiling water to the mash to achieve initial temperature rest. Sometime before the end of the rest, a measured amount of the mash (water ''and'' grist) is removed and brought to a boil. When added back in, the mash temperature raises to the next rest. This is usually done once more, and sometimes a fourth rest is used. ===The Lauter and Sparge=== Once the starches are converted to sugars, and dissolved into the mash water, the sweet liquid is drained away and sent to the boil. The sweet liquid can be filtered through a collander or a screen, but it is often more desirable to carefully drain the liquid away from the grain to avoid excessive aeration of the hot liquid, since this will cause oxidation. Usually the lauter and the sparge are done as one operation. The mash is carefully put into a lauter tun, using some sparge water to keep the surface of the liquid above that of the grain. This allows the grain to form a "bed" where the spent hulls support each other and form a filtration structure, while the higher temperature of the sparge water stops further enzymatic activity. Sometimes the mash tun and the lauter tun are one and the same, in which case sparge water is added to the mash to maintain the surface while part of the mash is drained and cycled back into the mash. Once the mash is completely transferred, or the cycling liquid "runs clear," or has no large particles, the sweet liquid is slowly drained to the boil kettle while fresh sparge water is carefully added to the top of the tun. When the volume of liquid from the mash is drained, lautering is considered complete. But, the process is usually continued, and is called sparging. The resulting liquid can now be called wort. ==Malt Extract== The sweet liquid that results from the mash, lauter, and sparge can be considered "extract." The all-grain home brewer ignores this and proceeds to the boil. However, this liquid can be concentrated, by boiling down to a thick syrup, or cooked into a dry powder. These are the forms we usually refer to as "malt extract." Bulk malt extract and unhopped extract kits are produced this way, and pre-hopped extracts are either obtained after the boil or simply mixed with hop extract. When a brewer uses malt extracts to make beer, he must first "unconcentrate" the extract. This can be compared to making orange juice from frozen orange juice concentrate. An amount of water is brought to a boil, then removed from the heat source. The malt extract is stirred in, dissolving into the liquid, which then can be again called wort. ==The Boil== Hops are then added to the wort, and boiled therein for an hour or more. This causes alpha acids in the hops to break down and dissolve into the wort. Some adjuncts that could not be added in the mash can also be added to the boil, as in the case of molasses, or if a mash was not performed at all (this is then called partial mash brewing). Near the end of the boil more hops may be added to impart flavors and aromas from the hops, certain fining agents may be added such as Irish moss, and certain other adjuncts may be added to pasteurize them while leaving their starch chains intact. Before pitching yeast, the wort must be cooled to a yeast friendly temperature. This can be done by immersing the brew kettle in a tub full of cold water, placing a special chilling coil into the wort, or special chillers that the wort actually passes through. Quick cooling lessens the potential for early bacterial contamination or oxidation of the wort. Slow wort cooling can allow dimethyl sulfide to build up in the wort, which will produce off flavors. Rapid cooling also aids in cold break formation, allowing a clearer beer to be produced. ==Yeast Farm?== Professional and commercial breweries usually maintain a culture of yeast that they use in their beer. Many homebrewers do the same, and the science, or art as some might consider it, of maintaining a yeast culture is called zymurgy or, more affectionately, yeast farming. This process can be considered apart from the brewing process, since viable yeast cultures can be bought and quickly pitched to a cooled wort, but a wise brewer knows that understanding how yeast lives is very important to understanding how yeast makes beer. In fact, most experienced homebrewers will prepare what is called a "starter" to pitch instead of blindly tossing in the contents of the store bought vial. A nurturing environment is produced that is rich in sugars and nutrients, into which yeast is pitched. The mixture is allowed to ferment for a day or two, or even a few hours, after which the sediment may be harvested and placed into cold storage. The yeast sediment may also be freeze-dried to produce the dried yeast that comes in packets with many shelf stored beer kits. The stored yeast, in liquid form, can be expected to have viable cells several months later, but a yeast farmer will repitch after no more than a month, both to keep the culture alive, and to revitalize the amount of viable cells. A day or two before brew day, a smart brewer will create a starter by preparing perhaps a quart of wort, using a DME (dry malt extract) for simplicity and then pitching either a sample from his yeast farm, a store bought vial of liquid yeast, or rehydrated dry yeast. The yeast will multiply in number until they reach an optimal threshold of yeast per volume of wort, and the fermenting starter will exhibit signs of primary fermentation and it is then ready to pitch to the wort. As an aside, professional breweries who ferment in large batches might make several starters, i.e., a quart to start a five gallon starter to start a 60 gallon barrel. By doing this, the brewer shortens the time it takes for primary fermentation to start, and thus minimizes the chances for unwanted microbials getting a foot hold and ruining the batch. ==Fermentation== Fermentation is said to have two stages; primary and secondary. In primary fermentation, yeast is very active, reproducing itself and consuming the easily converted sugars. The process may seem violent, and a foam head will form, which is called krauesen{{typo help inline|reason=similar to krausen|date=August 2022}}. Once the krauesen "drops," or settles to the bottom, primary fermentation is complete and some brewers will transfer the fermenting liquid off of the sediment and into a secondary fermenter. This is done to prevent the spent yeast cells from negatively affecting the flavor of the beer, however the benefit of doing this is somewhat debatable, and some brewers choose not to do this. Fermentation can take a couple weeks to a month, or even longer depending on the amount of sugars in the wort and the difficulty of conversion. Light body beers can be quickly fermented with fast working ale yeast. Conversely, heavy body beers fermented with colder working lager yeast can ferment a lot longer. Primary fermentation usually is complete within the first week. ==Carbonation== Before consumption beer is normally carbonated, and often aged for a week or more. Generally, longer aging produces a better beer, but too much aging can negatively affect the quality. Beer can be ''naturally'' or ''artificially'' carbonated. Natural carbonation capitalizes on the fact that even after fermentation is complete, yeast remains suspended in the beer. After transferring the beer into an intermediate "bottling" or "priming" bucket, additional fermentable sugar is added to the beer. The beer is allowed to sit for up to 24 hours, in which time the suspended yeast reawakens and begins to convert the new sugars. The beer is then put into a sealed container or containers, such as a keg or recappable bottles. Within a week the yeast will have converted the new sugars into a negligible amount of alcohol and an amount of CO<sub>2</sub> adequate to pressurize the container and carbonate the beer. Aging becomes most important when the sugars added are different than the sugars present in the source wort. Priming corn sugar is quickly converted and so will result in larger bubbles and a thin head. Given time under pressure these bubbles will break down and allow better head development. Priming malt will perform better, but both priming sources will introduce flavors that may not have been present in the original beer. A process called krauesening is optimal, but requires slightly more work. Aging also allows the suspended yeast to settle, and allow the beer to clear, resulting in a cleaner looking and tasting beer. Artificial carbonation is done by putting the beer into a keg and applying pressure from a CO<sub>2</sub> tank for at least 24 hours to force carbonate. ==Consumption== Artificially carbonated beer should be poured into a stein, to avoid sloshing the sediment while drinking. Steins should be washed using a diluted bleach solution, since dish soaps will leave a film on the glass that will destroy beer head. Homebrewed beer still has suspended yeast cells in it, which is a Good Thing(TM). When a human drinks alcohol, its body uses vitamin B complex and water to neutralize and rid itself of the alcohol. If it didn't do this, the human would remain perpetually drunk, which might sound good, but then the human would be unable to drink more beer since it would probably kill it. Now, when that human wakes in the morning after two cases of beer, a bottle of BaerenJaeger, and a few hours praying to a porcelain god, the human's body is depleted of vitamin b and is dehydrated from excessive gifts to the aforementioned god. Yeast cell walls contain vitamin b complex, so a homebrewer, after enjoying a few home brews with good friends will drink a glass or two of water before going to bed. NO HANGOVERS. (Well, at least less likely) pfj0vltkpd7pl0lcyfkc11ritb71hwr 4675387 4675384 2026-10-10T00:56:16Z ~2026-54475-31 3628021 /* The Boil */ 4675387 wikitext text/x-wiki {{TOCbrewing}} ==In the Beginning...== Making beer starts in the field where hardworking farmers raise acres of barley and wonderful hop bines. Barley is grown in winter and spring varieties, and barley for beer is grown in 2-row and 6-row varieties. Hop vines are an annual crop, harvested flower buds, or cones, being the fruit of the plant brewers have interest in. The vines may be trimmed back, and the core of the plant left in the ground for next year. Barley grain is then sent to the maltster, and hops are either immediately used, frozen and vacuum packed until use, or compressed into pellets and stored for future use. ==Grain Preparation== Harvested grain is allowed to germinate for 1-3 days until the desired level of modification is achieved. Then the grain is dried using heat to varying degrees and drying times to produce the varying types and styles of malt. For some styles of malt, additional preparations are performed such as smoking or roasting. The malted grain is milled using varied designs of grinders that attempt to break up the starch rich "meat" of the grain, while leaving the hulls as intact as possible. ==Mashing and Lautering== The starches are broken down to fermentable sugars and extracted into water from the milled malt grains or grist by processes called the mash and the lauter. The mash uses heat at specific temperatures to activate certain enzymes that break starch chains down to sugars that can easily be consumed by yeast. Lautering is simply the straining of the spent grain from the sugar enriched water. Sparging is another process that rinses the spent grain, and is usually done as a part of the lautering. ===The Mash=== There are three major fashions in which the mash is performed: Infusion, Temperature Controlled Step, and Decoction. The infusion mash is the simplest, in which grist and water are combined and held at a single temperature until the conversion of starches to sugars is complete. It gets its name from the "infusion" of hot water into the grist to obtain the initial temperature. The step mash gets its name from the manner by which the temperature of the mash is brought to an initial point, held there for a period of time, called a rest, and then raised to another rest, and sometimes again. If you plot the temperature with respect to time, the plot will appear to be "steps." The Decoction mash is the oldest method and is done by infusing boiling water to the mash to achieve initial temperature rest. Sometime before the end of the rest, a measured amount of the mash (water ''and'' grist) is removed and brought to a boil. When added back in, the mash temperature raises to the next rest. This is usually done once more, and sometimes a fourth rest is used. ===The Lauter and Sparge=== Once the starches are converted to sugars, and dissolved into the mash water, the sweet liquid is drained away and sent to the boil. The sweet liquid can be filtered through a collander or a screen, but it is often more desirable to carefully drain the liquid away from the grain to avoid excessive aeration of the hot liquid, since this will cause oxidation. Usually the lauter and the sparge are done as one operation. The mash is carefully put into a lauter tun, using some sparge water to keep the surface of the liquid above that of the grain. This allows the grain to form a "bed" where the spent hulls support each other and form a filtration structure, while the higher temperature of the sparge water stops further enzymatic activity. Sometimes the mash tun and the lauter tun are one and the same, in which case sparge water is added to the mash to maintain the surface while part of the mash is drained and cycled back into the mash. Once the mash is completely transferred, or the cycling liquid "runs clear," or has no large particles, the sweet liquid is slowly drained to the boil kettle while fresh sparge water is carefully added to the top of the tun. When the volume of liquid from the mash is drained, lautering is considered complete. But, the process is usually continued, and is called sparging. The resulting liquid can now be called wort. ==Malt Extract== The sweet liquid that results from the mash, lauter, and sparge can be considered "extract." The all-grain home brewer ignores this and proceeds to the boil. However, this liquid can be concentrated, by boiling down to a thick syrup, or cooked into a dry powder. These are the forms we usually refer to as "malt extract." Bulk malt extract and unhopped extract kits are produced this way, and pre-hopped extracts are either obtained after the boil or simply mixed with hop extract. When a brewer uses malt extracts to make beer, he must first "unconcentrate" the extract. This can be compared to making orange juice from frozen orange juice concentrate. An amount of water is brought to a boil, then removed from the heat source. The malt extract is stirred in, dissolving into the liquid, which then can be again called wort. ==The Boil== Hops are then added to the wort, and boiled therein for an hour or more. This causes alpha acids in the hops to break down and dissolve into the wort. Some adjuncts that could not be added in the mash can also be added to the boil, as in the case of molasses, or if a mash was not performed at all (this is then called partial mash brewing). Near the end of the boil more hops may be added to impart flavors and aromas from the hops, certain fining agents may be added such as Irish moss, and certain other adjuncts may be added to pasteurize them while leaving their starch chains intact. Before pitching yeast, the wort must be cooled to a yeast-friendly temperature. This can be done by immersing the brew kettle in a tub full of cold water, placing a special chilling coil into the wort, or special chillers that the wort actually passes through. Quick cooling lessens the potential for early bacterial contamination or oxidation of the wort. Slow wort cooling can allow dimethyl sulfide to build up in the wort, which will produce off flavors. Rapid cooling also aids in cold break formation, allowing a clearer beer to be produced. ==Yeast Farm?== Professional and commercial breweries usually maintain a culture of yeast that they use in their beer. Many homebrewers do the same, and the science, or art as some might consider it, of maintaining a yeast culture is called zymurgy or, more affectionately, yeast farming. This process can be considered apart from the brewing process, since viable yeast cultures can be bought and quickly pitched to a cooled wort, but a wise brewer knows that understanding how yeast lives is very important to understanding how yeast makes beer. In fact, most experienced homebrewers will prepare what is called a "starter" to pitch instead of blindly tossing in the contents of the store bought vial. A nurturing environment is produced that is rich in sugars and nutrients, into which yeast is pitched. The mixture is allowed to ferment for a day or two, or even a few hours, after which the sediment may be harvested and placed into cold storage. The yeast sediment may also be freeze-dried to produce the dried yeast that comes in packets with many shelf stored beer kits. The stored yeast, in liquid form, can be expected to have viable cells several months later, but a yeast farmer will repitch after no more than a month, both to keep the culture alive, and to revitalize the amount of viable cells. A day or two before brew day, a smart brewer will create a starter by preparing perhaps a quart of wort, using a DME (dry malt extract) for simplicity and then pitching either a sample from his yeast farm, a store bought vial of liquid yeast, or rehydrated dry yeast. The yeast will multiply in number until they reach an optimal threshold of yeast per volume of wort, and the fermenting starter will exhibit signs of primary fermentation and it is then ready to pitch to the wort. As an aside, professional breweries who ferment in large batches might make several starters, i.e., a quart to start a five gallon starter to start a 60 gallon barrel. By doing this, the brewer shortens the time it takes for primary fermentation to start, and thus minimizes the chances for unwanted microbials getting a foot hold and ruining the batch. ==Fermentation== Fermentation is said to have two stages; primary and secondary. In primary fermentation, yeast is very active, reproducing itself and consuming the easily converted sugars. The process may seem violent, and a foam head will form, which is called krauesen{{typo help inline|reason=similar to krausen|date=August 2022}}. Once the krauesen "drops," or settles to the bottom, primary fermentation is complete and some brewers will transfer the fermenting liquid off of the sediment and into a secondary fermenter. This is done to prevent the spent yeast cells from negatively affecting the flavor of the beer, however the benefit of doing this is somewhat debatable, and some brewers choose not to do this. Fermentation can take a couple weeks to a month, or even longer depending on the amount of sugars in the wort and the difficulty of conversion. Light body beers can be quickly fermented with fast working ale yeast. Conversely, heavy body beers fermented with colder working lager yeast can ferment a lot longer. Primary fermentation usually is complete within the first week. ==Carbonation== Before consumption beer is normally carbonated, and often aged for a week or more. Generally, longer aging produces a better beer, but too much aging can negatively affect the quality. Beer can be ''naturally'' or ''artificially'' carbonated. Natural carbonation capitalizes on the fact that even after fermentation is complete, yeast remains suspended in the beer. After transferring the beer into an intermediate "bottling" or "priming" bucket, additional fermentable sugar is added to the beer. The beer is allowed to sit for up to 24 hours, in which time the suspended yeast reawakens and begins to convert the new sugars. The beer is then put into a sealed container or containers, such as a keg or recappable bottles. Within a week the yeast will have converted the new sugars into a negligible amount of alcohol and an amount of CO<sub>2</sub> adequate to pressurize the container and carbonate the beer. Aging becomes most important when the sugars added are different than the sugars present in the source wort. Priming corn sugar is quickly converted and so will result in larger bubbles and a thin head. Given time under pressure these bubbles will break down and allow better head development. Priming malt will perform better, but both priming sources will introduce flavors that may not have been present in the original beer. A process called krauesening is optimal, but requires slightly more work. Aging also allows the suspended yeast to settle, and allow the beer to clear, resulting in a cleaner looking and tasting beer. Artificial carbonation is done by putting the beer into a keg and applying pressure from a CO<sub>2</sub> tank for at least 24 hours to force carbonate. ==Consumption== Artificially carbonated beer should be poured into a stein, to avoid sloshing the sediment while drinking. Steins should be washed using a diluted bleach solution, since dish soaps will leave a film on the glass that will destroy beer head. Homebrewed beer still has suspended yeast cells in it, which is a Good Thing(TM). When a human drinks alcohol, its body uses vitamin B complex and water to neutralize and rid itself of the alcohol. If it didn't do this, the human would remain perpetually drunk, which might sound good, but then the human would be unable to drink more beer since it would probably kill it. Now, when that human wakes in the morning after two cases of beer, a bottle of BaerenJaeger, and a few hours praying to a porcelain god, the human's body is depleted of vitamin b and is dehydrated from excessive gifts to the aforementioned god. Yeast cell walls contain vitamin b complex, so a homebrewer, after enjoying a few home brews with good friends will drink a glass or two of water before going to bed. NO HANGOVERS. (Well, at least less likely) onbvlaahcimcmmm58w134073ql3cqf8 4675388 4675387 2026-10-10T00:57:40Z ~2026-54475-31 3628021 /* Fermentation */ 4675388 wikitext text/x-wiki {{TOCbrewing}} ==In the Beginning...== Making beer starts in the field where hardworking farmers raise acres of barley and wonderful hop bines. Barley is grown in winter and spring varieties, and barley for beer is grown in 2-row and 6-row varieties. Hop vines are an annual crop, harvested flower buds, or cones, being the fruit of the plant brewers have interest in. The vines may be trimmed back, and the core of the plant left in the ground for next year. Barley grain is then sent to the maltster, and hops are either immediately used, frozen and vacuum packed until use, or compressed into pellets and stored for future use. ==Grain Preparation== Harvested grain is allowed to germinate for 1-3 days until the desired level of modification is achieved. Then the grain is dried using heat to varying degrees and drying times to produce the varying types and styles of malt. For some styles of malt, additional preparations are performed such as smoking or roasting. The malted grain is milled using varied designs of grinders that attempt to break up the starch rich "meat" of the grain, while leaving the hulls as intact as possible. ==Mashing and Lautering== The starches are broken down to fermentable sugars and extracted into water from the milled malt grains or grist by processes called the mash and the lauter. The mash uses heat at specific temperatures to activate certain enzymes that break starch chains down to sugars that can easily be consumed by yeast. Lautering is simply the straining of the spent grain from the sugar enriched water. Sparging is another process that rinses the spent grain, and is usually done as a part of the lautering. ===The Mash=== There are three major fashions in which the mash is performed: Infusion, Temperature Controlled Step, and Decoction. The infusion mash is the simplest, in which grist and water are combined and held at a single temperature until the conversion of starches to sugars is complete. It gets its name from the "infusion" of hot water into the grist to obtain the initial temperature. The step mash gets its name from the manner by which the temperature of the mash is brought to an initial point, held there for a period of time, called a rest, and then raised to another rest, and sometimes again. If you plot the temperature with respect to time, the plot will appear to be "steps." The Decoction mash is the oldest method and is done by infusing boiling water to the mash to achieve initial temperature rest. Sometime before the end of the rest, a measured amount of the mash (water ''and'' grist) is removed and brought to a boil. When added back in, the mash temperature raises to the next rest. This is usually done once more, and sometimes a fourth rest is used. ===The Lauter and Sparge=== Once the starches are converted to sugars, and dissolved into the mash water, the sweet liquid is drained away and sent to the boil. The sweet liquid can be filtered through a collander or a screen, but it is often more desirable to carefully drain the liquid away from the grain to avoid excessive aeration of the hot liquid, since this will cause oxidation. Usually the lauter and the sparge are done as one operation. The mash is carefully put into a lauter tun, using some sparge water to keep the surface of the liquid above that of the grain. This allows the grain to form a "bed" where the spent hulls support each other and form a filtration structure, while the higher temperature of the sparge water stops further enzymatic activity. Sometimes the mash tun and the lauter tun are one and the same, in which case sparge water is added to the mash to maintain the surface while part of the mash is drained and cycled back into the mash. Once the mash is completely transferred, or the cycling liquid "runs clear," or has no large particles, the sweet liquid is slowly drained to the boil kettle while fresh sparge water is carefully added to the top of the tun. When the volume of liquid from the mash is drained, lautering is considered complete. But, the process is usually continued, and is called sparging. The resulting liquid can now be called wort. ==Malt Extract== The sweet liquid that results from the mash, lauter, and sparge can be considered "extract." The all-grain home brewer ignores this and proceeds to the boil. However, this liquid can be concentrated, by boiling down to a thick syrup, or cooked into a dry powder. These are the forms we usually refer to as "malt extract." Bulk malt extract and unhopped extract kits are produced this way, and pre-hopped extracts are either obtained after the boil or simply mixed with hop extract. When a brewer uses malt extracts to make beer, he must first "unconcentrate" the extract. This can be compared to making orange juice from frozen orange juice concentrate. An amount of water is brought to a boil, then removed from the heat source. The malt extract is stirred in, dissolving into the liquid, which then can be again called wort. ==The Boil== Hops are then added to the wort, and boiled therein for an hour or more. This causes alpha acids in the hops to break down and dissolve into the wort. Some adjuncts that could not be added in the mash can also be added to the boil, as in the case of molasses, or if a mash was not performed at all (this is then called partial mash brewing). Near the end of the boil more hops may be added to impart flavors and aromas from the hops, certain fining agents may be added such as Irish moss, and certain other adjuncts may be added to pasteurize them while leaving their starch chains intact. Before pitching yeast, the wort must be cooled to a yeast-friendly temperature. This can be done by immersing the brew kettle in a tub full of cold water, placing a special chilling coil into the wort, or special chillers that the wort actually passes through. Quick cooling lessens the potential for early bacterial contamination or oxidation of the wort. Slow wort cooling can allow dimethyl sulfide to build up in the wort, which will produce off flavors. Rapid cooling also aids in cold break formation, allowing a clearer beer to be produced. ==Yeast Farm?== Professional and commercial breweries usually maintain a culture of yeast that they use in their beer. Many homebrewers do the same, and the science, or art as some might consider it, of maintaining a yeast culture is called zymurgy or, more affectionately, yeast farming. This process can be considered apart from the brewing process, since viable yeast cultures can be bought and quickly pitched to a cooled wort, but a wise brewer knows that understanding how yeast lives is very important to understanding how yeast makes beer. In fact, most experienced homebrewers will prepare what is called a "starter" to pitch instead of blindly tossing in the contents of the store bought vial. A nurturing environment is produced that is rich in sugars and nutrients, into which yeast is pitched. The mixture is allowed to ferment for a day or two, or even a few hours, after which the sediment may be harvested and placed into cold storage. The yeast sediment may also be freeze-dried to produce the dried yeast that comes in packets with many shelf stored beer kits. The stored yeast, in liquid form, can be expected to have viable cells several months later, but a yeast farmer will repitch after no more than a month, both to keep the culture alive, and to revitalize the amount of viable cells. A day or two before brew day, a smart brewer will create a starter by preparing perhaps a quart of wort, using a DME (dry malt extract) for simplicity and then pitching either a sample from his yeast farm, a store bought vial of liquid yeast, or rehydrated dry yeast. The yeast will multiply in number until they reach an optimal threshold of yeast per volume of wort, and the fermenting starter will exhibit signs of primary fermentation and it is then ready to pitch to the wort. As an aside, professional breweries who ferment in large batches might make several starters, i.e., a quart to start a five gallon starter to start a 60 gallon barrel. By doing this, the brewer shortens the time it takes for primary fermentation to start, and thus minimizes the chances for unwanted microbials getting a foot hold and ruining the batch. ==Fermentation== Fermentation is said to have two stages; primary and secondary. In primary fermentation, yeast is very active, reproducing itself and consuming the easily converted sugars. The process may seem violent, and a foam head will form, which is called krausen{{typo help inline|reason=similar to krausen|date=August 2022}}. Once the krausen "drops," or settles to the bottom, primary fermentation is complete and some brewers will transfer the fermenting liquid off of the sediment and into a secondary fermenter. This is done to prevent the spent yeast cells from negatively affecting the flavor of the beer, however the benefit of doing this is somewhat debatable, and some brewers choose not to do this. Fermentation can take a couple of weeks to a month, or even longer depending on the amount of sugars in the wort and the difficulty of conversion. Light body beers can be quickly fermented with fast-working ale yeast. Conversely, heavy body beers fermented with colder working lager yeast can ferment a lot longer. Primary fermentation usually is complete within the first week. ==Carbonation== Before consumption beer is normally carbonated, and often aged for a week or more. Generally, longer aging produces a better beer, but too much aging can negatively affect the quality. Beer can be ''naturally'' or ''artificially'' carbonated. Natural carbonation capitalizes on the fact that even after fermentation is complete, yeast remains suspended in the beer. After transferring the beer into an intermediate "bottling" or "priming" bucket, additional fermentable sugar is added to the beer. The beer is allowed to sit for up to 24 hours, in which time the suspended yeast reawakens and begins to convert the new sugars. The beer is then put into a sealed container or containers, such as a keg or recappable bottles. Within a week the yeast will have converted the new sugars into a negligible amount of alcohol and an amount of CO<sub>2</sub> adequate to pressurize the container and carbonate the beer. Aging becomes most important when the sugars added are different than the sugars present in the source wort. Priming corn sugar is quickly converted and so will result in larger bubbles and a thin head. Given time under pressure these bubbles will break down and allow better head development. Priming malt will perform better, but both priming sources will introduce flavors that may not have been present in the original beer. A process called krauesening is optimal, but requires slightly more work. Aging also allows the suspended yeast to settle, and allow the beer to clear, resulting in a cleaner looking and tasting beer. Artificial carbonation is done by putting the beer into a keg and applying pressure from a CO<sub>2</sub> tank for at least 24 hours to force carbonate. ==Consumption== Artificially carbonated beer should be poured into a stein, to avoid sloshing the sediment while drinking. Steins should be washed using a diluted bleach solution, since dish soaps will leave a film on the glass that will destroy beer head. Homebrewed beer still has suspended yeast cells in it, which is a Good Thing(TM). When a human drinks alcohol, its body uses vitamin B complex and water to neutralize and rid itself of the alcohol. If it didn't do this, the human would remain perpetually drunk, which might sound good, but then the human would be unable to drink more beer since it would probably kill it. Now, when that human wakes in the morning after two cases of beer, a bottle of BaerenJaeger, and a few hours praying to a porcelain god, the human's body is depleted of vitamin b and is dehydrated from excessive gifts to the aforementioned god. Yeast cell walls contain vitamin b complex, so a homebrewer, after enjoying a few home brews with good friends will drink a glass or two of water before going to bed. NO HANGOVERS. (Well, at least less likely) 3ebv2jcpetgmt43x8c2rvxp02pqffke Brewing/Mashing 0 90391 4675394 4583699 2026-10-10T01:05:58Z ~2026-54475-31 3628021 /* Introduction */ 4675394 wikitext text/x-wiki {{TOCbrewing}} == Introduction == Mashing is the process of immersing the milled barley (grist) in water so as to convert the starch in the ground-up endosperm into smaller sugars. The resulting liquor is called wort. When you brew from extract, you are using a concentrated form of wort, much like using frozen orange juice to make orange juice. The goal of mashing (or diluting an extract) to create wort, is to provide an environment in which yeast will thrive. Sugars in the milled barley are in long chains, which are unfermentable. The mash process allows you to extract fermentable sugars from the grist, or milled grains, by dissolving starches and then breaking the starch chains up using enzymes developed in the malting stage. The processes described here will work well in any of the mash tuns described in the equipment section. == What Happens? == [[image:Starch-breakdown-sites.jpg|thumb|right|300px| Cartoon showing starch breakdown sites]] Conversion of barley starch into sugars is primarily the result of two types of enzymes - alpha amylase and beta amylase. Both enzymes break the chains of glucose which form starch at alpha 1,4 linkages. Alpha amylase breaks these bonds at random points in the starch chain. In contrast, beta amylase acts on the bond between the last 2 and 3 glucose residues in the starch chain, releasing the disaccharide sugar maltose. It may help to imagine alpha amylase as an enzyme that breaks chains in half, while beta enzymes merely nibble at the ends. Beta enzymes will quickly turn starch chains into fermentable sugars, whereas alpha enzymes, given the same amount of time to work, will leave a lot more of the longer, unfermentable chains. The more of the longer chains left in the wort, the thicker or fuller the final beer will feel when consumed. However, with more of the smaller chains, or fermentable sugars, the beer will turn out with a higher alcohol content. The relative effect of each of these enzymes is determined by the temperature - alpha amylase has an optimum temperature of 68 degrees C, while beta amylase has an optimum of 65 degrees. Limit dextrins are non-fermentable sugars which are produced from the parts of the starch molecule which are branched (ie contain alpha 1,6 linkages). The enzyme which removes the alpha 1,6 branch (in the branched small sugars, not the original starch) is called limit dextrinase, and is destroyed by the high temperatures of mashing (typically 65 degrees C or more), although it is active at lower temperatures. The limit gravity, or residual sugar present after complete fermentation, is in part determined by these limit dextrins. Brewers can control the limit gravity by: * minimising the time that the mash is at the temperature at which beta amylase is active, as this will convert larger limit dextrins into smaller ones * adding adjuncts with varying degrees of branching in their starch chains. * minimising the time the mash is at lower temperatures where limit dextrinase is active (eg protein rest) Additional processes that can occur during mashing are * proteolysis (if there is a protein rest stage at 50 degrees C) * destruction of the beta glucan layer which protects the starch granules * colour is extracted from the malt ==Mashing systems (techniques)== There are various mashing techniques and the choice of technique is linked to the equipment available, the level of expertise, the beer style produced, the level of process control and the number of brews to be produced per day. === Iso-thermal Infusion Mash === The iso-thermal infusion mash is the simplest way to make wort, however, since the technique lacks a protein rest, it is recommended that you use mostly well modified malts. The infusion mash is also referred to as the one-step mash, since the process requires only one step. Iso-thermal obviously refers to the single mash temperature. In this system mash conversion (the malt starch is converted to sugars) takes place in the same vessel as wort separation. As there are no heating stages it is not necessary to have an agitation in the mash tun. The ideal situation you want is to attain is one in which your mash ''rests'' at a temperature between 66° and 70° C (150°-158° F) to allow the amylase enzymes to do their work. The colder the rest, the more fermentable sugars will be available for fermenting, and therefore the higher alcohol content in the final beer. The hotter the temperature, the more unfermentable sugars will reach fermentation, and thus the fuller the mouth-feel. This is, of course a comparison of otherwise duplicate mashes. Remember, the enzymes ''will'' work outside their optimum temperatures, so given an adequate amount of time, all starches can be converted to fermentables. For an infusion mash, mix a measured amount of hot water in a container with your grist (milled malt) and allow the mash to rest for 30 to 60 minutes. For every pound of grain, you will use 1 quart of water. At this ratio, the mash will stabilize at a temperature 9°-10° C (16°-18°F) lower than the temperature water added. For example, adding 10 quarts of water at a temperature of 78°C (172°F) to 10 lbs of grist will stabilize at a temperature of 68°-69°C (154°-156°F). You will be well served to take temperature readings at regular intervals to make sure you are maintaining the optimal temperature range. Adding small amounts of hot water to bring the temperature back up is permissible, however avoid bringing the temperature too high as the higher temperatures will negatively affect enzymatic activity, just as much as too low. === Decoction Mash === Decoction mash is the most complex technique used to extract sugars from grain. The technique was born out of the lack of accurate temperature measurements, with the only accurate points of measurement being freezing point of water (0° C or 32° F), blood temperature (~36°C or 98°F), and the boiling point of water (100°C or 212°F). This method also is believed to result in better yield. However, because of the complexity, and the unlikelihood of a homebrewer choosing to use decoction, detailed instructions will not be given here at this time. The basic method begins by infusing a measured amount of boiling water with water and grist at blood temperature to bring the mash up to the initial rest temperature. This initial rest can be an acid rest, or the mash could begin with a protein rest. Near the end of this rest a measured amount of water and grist is stolen from the mash, heated to a boil, and then returned to the main mash to bring the temperature up to the next temperature rest. This process is called decoction. Sometimes, when an extended rest time is expected, the mash is decocted again, or even a few more times to maintain rest temperature. === Step Mash === If you are planning to use under-modified malts, or just simply want a better quality product, the Step Mash (or Program mash or Temperature-Controlled Step Infusion Mash), is only slightly more complicated than iso-thermal mashing. There can be two or three steps, or rests, in your mash. * '''Unmalted grain''' - {{convert|40|°C|°F}} activates: ** debranching enzymes - {{convert|35|-|45|°C|°F}} (5.0-5.8 pH),<ref name="Mashing Defined">{{cite web |url=http://www.howtobrew.com/section3/chapter14-1.html |title=Mashing Defined |author=John Palmer |format=HTML |accessdate=2015-02-18 }}</ref> ** phytase - {{convert|30|-|52|°C|°F}} (5.0-5.5 pH) which lowers mash pH, and ** beta-gluconase - {{convert|35|-|45|°C|°F}} (4.5-5.5 pH).<ref name="How the Mash Makes Wort" /> Maximum activity {{convert|40|°C|°F}}.<ref name="Brewing science and practice">{{cite book |title=Brewing Science and practice |author1=Dennis E. Briggs |author2=Chris A. Boulton |author3=Peter A. Brookes |author4=Roger Stevens |year=2004 |publisher=Woodhead Publishing Limited |location=Cambridge, England |quote=See Table 4-4, Fig. 4.2 |accessdate=2015-02-18}}</ref> * '''Proteolytic stand''' - {{convert|50|°C|°F}} for 20 to 30 minutes. The protein rest activates: ** protease - {{convert|45|-|55|°C|°F}} (4.6-5.3 pH) "Breaks up large proteins that form haze," and<ref name="How the Mash Makes Wort" /> ** peptidase - {{convert|45|-|55|°C|°F}} (4.6-5.3 pH) "Produces free amino nitrogen,"<ref name="How the Mash Makes Wort">{{cite web |url=http://realbeer.com/jjpalmer/ch14.html |title=How the Mash Makes Wort |author=John Palmer |format=HTML |accessdate=2015-02-18}}</ref><ref group="note">Briggs et al. breaks nitrogen into three temperature ranges, {{convert|50|-|60|°C|°F}} for total nitrogen, {{convert|50|-|55|°C|°F}} for formol nitrogen, and {{convert|55|-|60|°C|°F}} for permanently soluble nitrogen minus formol nitrogen.</ref> and ** phytase - Maximum activity at {{convert|50|-|60|°C|°F}}.<ref name="Brewing science and practice" /><ref group="note">Palmer's phytase temperature range of {{convert|30|-|52|°C|°F}} disagrees with Briggs et al. of {{convert|50|-|60|°C|°F}}.</ref> * '''Saccharification stand''' - {{convert|55|-|66|°C|°F}} (5.0-5.5 pH),<ref name="How the Mash Makes Wort" /> Beta-amylase produces fermentable maltose. ** Maximum activity of beta-amylase is {{convert|60|°C|°F}},<ref group="note">Maximum activity of beta-amylase of {{convert|60|°C|°F}} is also the highest range value of both phytase and nitrogen production. This suggests the low temperature value of the saccharification range may begin at {{convert|60|°C|°F}}</ref> ** highest yield of reducing sugars occurs at {{convert|60|-|63|°C|°F}}, and ** highest percentage fermentability at {{convert|63|°C|°F}}.<ref name="Brewing science and practice" /> * '''Highest extract''' - {{convert|65|-|68|°C|°F}} for 20 to 60 minutes for starch conversion and saccharification.<ref name="Brewing science and practice" /> Beta-amylase is active at the lower end of temperature range, alpha-amylase at the higher and prefers a slightly higher pH. ** Highest yield of fermentable extract occurs at {{convert|65|°C|°F}}.<ref name="Brewing science and practice" /> * '''Conversion stand''' - {{convert|68|-|72|°C|°F}} (5.3-5.7 pH)<ref name="How the Mash Makes Wort" /> for 20 to 30 minutes. Alpha-amylase breaks down any large starch particles to achieve starch conversion. Produces a variety of sugars including maltose, oligosaccharides, and dextrins.<ref name="Brewing science and practice" /> The end of this stand is confirmed with the starch test - see below. ** Maximum activity of alpha-amylase at {{convert|70|°C|°F}}, ''dextrinization'' temperature.<ref name="Brewing science and practice" /> * '''Mash out stand''' - the mash is finally raised to {{convert|76|°C|°F}} for 5 to 10 minutes to denature all mashing enzymes. In practice, for every pound of grist in the mash, you will use 1 liter (1 qt) of water at {{convert|54|°C|°F}} to get the mash to the initial protein rest. Then, for each pound of grist, you will use .5 liter (½ qt) of {{convert|93|°C|°F}} water to raise the temperature {{convert|10|C-change|0}}. These are rough figures, since the more water added, the larger the volume, and therefore the more water required to raise the temperature a comparable amount. However, if you use these figures to figure the amounts needed, you will be pretty well off. == End of mashing == Mashing usually takes about 30 minutes with a typical pale malt - however times may be more or less depending on the enzymatic activity (diastatic) power of the malt. Mashing may take as long as 6 hours.<ref name="Brewing science and practice" /> To test for mash conversion we test for the presence of starch: this can be done by mixing 1g of Lite salt (potassium iodide) with 50 ml 3% iodine solution and adding a drop to a sample (a teaspoon full) of the mash. If it turns deep blue starch is present. ===Unconverted mash=== If you continue to get starch, even hours after mashing, then the milling of the grain may be at fault in that the starch isn't being broken up enough to allow the enzymes to access it. High mash temperatures may have de-natured the malt enzymes. ==Special mashing techniques== ===Grain steeping=== The most basic way to extract flavors from specialty grains is by steeping them in warm water. The simplest way to perform this is to add the crushed grains (in a nylon or cotton grain bag) to the (cold) brewing water as is it brought to boiling temperature. The grains should be removed before the temperature reaches 170°F to prevent the extraction of too many tannins. Dip the bag in and out a few times and let it drip for about 15 seconds before discarding. Do not squeeze the bag. Squeezing will also extract too much tannin from the grain husks. Alternatively, the crushed grains are steeped in 2-3 gallons of 150°F water for 30 minutes before being removed from the wort. This allows for a more complete extraction. ===Partial mash=== Not much more difficult than steeping is the "Partial mash" or "Mini-Mash" procedure, which utilizes emzymatic malts in addition to the specialty grains and will result in a much better extraction of flavors and colors. Start by setting your oven to the "warm" (or lowest) setting. We are looking to a achieve a temperature of between 140 and 160°F. If the temperature of your oven is higher than 160°F at this setting, simply turn off the oven before placing the mash pot inside. The thermal mass of the hot grains and water should maintain a proper temperature during mashing. Heat between 1 and 3 quarts of water per pound of crushed grain that will be used to a light boil. Remove from the heat, allow to cool to 160-170°F, and transfer to your mash vessel and mix in the crushed grains. Mix thoroughly to be sure that the grains are not clumped then place the mash vessel in the oven for 45 to 60 minutes. Do not open the oven door while mashing is in progress or a significant amount of heat will escape. Do not let the mash temperature fall below 145°F. An oven themometer with a probe will allow you to monitor the temperature, although this is usually not necessary. While the mashing is taking place, heat an additional 1 to 3 quarts of water per pound of crushed grain (roughly the same amount you used for mashing) to a light boil, remove from the heat, and allow to cool to 140-170°F. This will be your sparge water. Once the mashing process is complete strain the mash into your brew pot using a stainless steel colander (pasta strainer). Then, slowly and evenly pour the sparge water over the mash. The mash is now complete. ""Add an amount water necessary to your brew pot to get up to the volume of water you traditionally use for your extract brewing."" ==Notes== {{Reflist|group=note}} ==References== {{reflist}} 608p4hx7b3fyhqof1cfpwzj8f0l48ug 4675397 4675394 2026-10-10T01:09:59Z ~2026-54475-31 3628021 /* Grain steeping */ 4675397 wikitext text/x-wiki {{TOCbrewing}} == Introduction == Mashing is the process of immersing the milled barley (grist) in water so as to convert the starch in the ground-up endosperm into smaller sugars. The resulting liquor is called wort. When you brew from extract, you are using a concentrated form of wort, much like using frozen orange juice to make orange juice. The goal of mashing (or diluting an extract) to create wort, is to provide an environment in which yeast will thrive. Sugars in the milled barley are in long chains, which are unfermentable. The mash process allows you to extract fermentable sugars from the grist, or milled grains, by dissolving starches and then breaking the starch chains up using enzymes developed in the malting stage. The processes described here will work well in any of the mash tuns described in the equipment section. == What Happens? == [[image:Starch-breakdown-sites.jpg|thumb|right|300px| Cartoon showing starch breakdown sites]] Conversion of barley starch into sugars is primarily the result of two types of enzymes - alpha amylase and beta amylase. Both enzymes break the chains of glucose which form starch at alpha 1,4 linkages. Alpha amylase breaks these bonds at random points in the starch chain. In contrast, beta amylase acts on the bond between the last 2 and 3 glucose residues in the starch chain, releasing the disaccharide sugar maltose. It may help to imagine alpha amylase as an enzyme that breaks chains in half, while beta enzymes merely nibble at the ends. Beta enzymes will quickly turn starch chains into fermentable sugars, whereas alpha enzymes, given the same amount of time to work, will leave a lot more of the longer, unfermentable chains. The more of the longer chains left in the wort, the thicker or fuller the final beer will feel when consumed. However, with more of the smaller chains, or fermentable sugars, the beer will turn out with a higher alcohol content. The relative effect of each of these enzymes is determined by the temperature - alpha amylase has an optimum temperature of 68 degrees C, while beta amylase has an optimum of 65 degrees. Limit dextrins are non-fermentable sugars which are produced from the parts of the starch molecule which are branched (ie contain alpha 1,6 linkages). The enzyme which removes the alpha 1,6 branch (in the branched small sugars, not the original starch) is called limit dextrinase, and is destroyed by the high temperatures of mashing (typically 65 degrees C or more), although it is active at lower temperatures. The limit gravity, or residual sugar present after complete fermentation, is in part determined by these limit dextrins. Brewers can control the limit gravity by: * minimising the time that the mash is at the temperature at which beta amylase is active, as this will convert larger limit dextrins into smaller ones * adding adjuncts with varying degrees of branching in their starch chains. * minimising the time the mash is at lower temperatures where limit dextrinase is active (eg protein rest) Additional processes that can occur during mashing are * proteolysis (if there is a protein rest stage at 50 degrees C) * destruction of the beta glucan layer which protects the starch granules * colour is extracted from the malt ==Mashing systems (techniques)== There are various mashing techniques and the choice of technique is linked to the equipment available, the level of expertise, the beer style produced, the level of process control and the number of brews to be produced per day. === Iso-thermal Infusion Mash === The iso-thermal infusion mash is the simplest way to make wort, however, since the technique lacks a protein rest, it is recommended that you use mostly well modified malts. The infusion mash is also referred to as the one-step mash, since the process requires only one step. Iso-thermal obviously refers to the single mash temperature. In this system mash conversion (the malt starch is converted to sugars) takes place in the same vessel as wort separation. As there are no heating stages it is not necessary to have an agitation in the mash tun. The ideal situation you want is to attain is one in which your mash ''rests'' at a temperature between 66° and 70° C (150°-158° F) to allow the amylase enzymes to do their work. The colder the rest, the more fermentable sugars will be available for fermenting, and therefore the higher alcohol content in the final beer. The hotter the temperature, the more unfermentable sugars will reach fermentation, and thus the fuller the mouth-feel. This is, of course a comparison of otherwise duplicate mashes. Remember, the enzymes ''will'' work outside their optimum temperatures, so given an adequate amount of time, all starches can be converted to fermentables. For an infusion mash, mix a measured amount of hot water in a container with your grist (milled malt) and allow the mash to rest for 30 to 60 minutes. For every pound of grain, you will use 1 quart of water. At this ratio, the mash will stabilize at a temperature 9°-10° C (16°-18°F) lower than the temperature water added. For example, adding 10 quarts of water at a temperature of 78°C (172°F) to 10 lbs of grist will stabilize at a temperature of 68°-69°C (154°-156°F). You will be well served to take temperature readings at regular intervals to make sure you are maintaining the optimal temperature range. Adding small amounts of hot water to bring the temperature back up is permissible, however avoid bringing the temperature too high as the higher temperatures will negatively affect enzymatic activity, just as much as too low. === Decoction Mash === Decoction mash is the most complex technique used to extract sugars from grain. The technique was born out of the lack of accurate temperature measurements, with the only accurate points of measurement being freezing point of water (0° C or 32° F), blood temperature (~36°C or 98°F), and the boiling point of water (100°C or 212°F). This method also is believed to result in better yield. However, because of the complexity, and the unlikelihood of a homebrewer choosing to use decoction, detailed instructions will not be given here at this time. The basic method begins by infusing a measured amount of boiling water with water and grist at blood temperature to bring the mash up to the initial rest temperature. This initial rest can be an acid rest, or the mash could begin with a protein rest. Near the end of this rest a measured amount of water and grist is stolen from the mash, heated to a boil, and then returned to the main mash to bring the temperature up to the next temperature rest. This process is called decoction. Sometimes, when an extended rest time is expected, the mash is decocted again, or even a few more times to maintain rest temperature. === Step Mash === If you are planning to use under-modified malts, or just simply want a better quality product, the Step Mash (or Program mash or Temperature-Controlled Step Infusion Mash), is only slightly more complicated than iso-thermal mashing. There can be two or three steps, or rests, in your mash. * '''Unmalted grain''' - {{convert|40|°C|°F}} activates: ** debranching enzymes - {{convert|35|-|45|°C|°F}} (5.0-5.8 pH),<ref name="Mashing Defined">{{cite web |url=http://www.howtobrew.com/section3/chapter14-1.html |title=Mashing Defined |author=John Palmer |format=HTML |accessdate=2015-02-18 }}</ref> ** phytase - {{convert|30|-|52|°C|°F}} (5.0-5.5 pH) which lowers mash pH, and ** beta-gluconase - {{convert|35|-|45|°C|°F}} (4.5-5.5 pH).<ref name="How the Mash Makes Wort" /> Maximum activity {{convert|40|°C|°F}}.<ref name="Brewing science and practice">{{cite book |title=Brewing Science and practice |author1=Dennis E. Briggs |author2=Chris A. Boulton |author3=Peter A. Brookes |author4=Roger Stevens |year=2004 |publisher=Woodhead Publishing Limited |location=Cambridge, England |quote=See Table 4-4, Fig. 4.2 |accessdate=2015-02-18}}</ref> * '''Proteolytic stand''' - {{convert|50|°C|°F}} for 20 to 30 minutes. The protein rest activates: ** protease - {{convert|45|-|55|°C|°F}} (4.6-5.3 pH) "Breaks up large proteins that form haze," and<ref name="How the Mash Makes Wort" /> ** peptidase - {{convert|45|-|55|°C|°F}} (4.6-5.3 pH) "Produces free amino nitrogen,"<ref name="How the Mash Makes Wort">{{cite web |url=http://realbeer.com/jjpalmer/ch14.html |title=How the Mash Makes Wort |author=John Palmer |format=HTML |accessdate=2015-02-18}}</ref><ref group="note">Briggs et al. breaks nitrogen into three temperature ranges, {{convert|50|-|60|°C|°F}} for total nitrogen, {{convert|50|-|55|°C|°F}} for formol nitrogen, and {{convert|55|-|60|°C|°F}} for permanently soluble nitrogen minus formol nitrogen.</ref> and ** phytase - Maximum activity at {{convert|50|-|60|°C|°F}}.<ref name="Brewing science and practice" /><ref group="note">Palmer's phytase temperature range of {{convert|30|-|52|°C|°F}} disagrees with Briggs et al. of {{convert|50|-|60|°C|°F}}.</ref> * '''Saccharification stand''' - {{convert|55|-|66|°C|°F}} (5.0-5.5 pH),<ref name="How the Mash Makes Wort" /> Beta-amylase produces fermentable maltose. ** Maximum activity of beta-amylase is {{convert|60|°C|°F}},<ref group="note">Maximum activity of beta-amylase of {{convert|60|°C|°F}} is also the highest range value of both phytase and nitrogen production. This suggests the low temperature value of the saccharification range may begin at {{convert|60|°C|°F}}</ref> ** highest yield of reducing sugars occurs at {{convert|60|-|63|°C|°F}}, and ** highest percentage fermentability at {{convert|63|°C|°F}}.<ref name="Brewing science and practice" /> * '''Highest extract''' - {{convert|65|-|68|°C|°F}} for 20 to 60 minutes for starch conversion and saccharification.<ref name="Brewing science and practice" /> Beta-amylase is active at the lower end of temperature range, alpha-amylase at the higher and prefers a slightly higher pH. ** Highest yield of fermentable extract occurs at {{convert|65|°C|°F}}.<ref name="Brewing science and practice" /> * '''Conversion stand''' - {{convert|68|-|72|°C|°F}} (5.3-5.7 pH)<ref name="How the Mash Makes Wort" /> for 20 to 30 minutes. Alpha-amylase breaks down any large starch particles to achieve starch conversion. Produces a variety of sugars including maltose, oligosaccharides, and dextrins.<ref name="Brewing science and practice" /> The end of this stand is confirmed with the starch test - see below. ** Maximum activity of alpha-amylase at {{convert|70|°C|°F}}, ''dextrinization'' temperature.<ref name="Brewing science and practice" /> * '''Mash out stand''' - the mash is finally raised to {{convert|76|°C|°F}} for 5 to 10 minutes to denature all mashing enzymes. In practice, for every pound of grist in the mash, you will use 1 liter (1 qt) of water at {{convert|54|°C|°F}} to get the mash to the initial protein rest. Then, for each pound of grist, you will use .5 liter (½ qt) of {{convert|93|°C|°F}} water to raise the temperature {{convert|10|C-change|0}}. These are rough figures, since the more water added, the larger the volume, and therefore the more water required to raise the temperature a comparable amount. However, if you use these figures to figure the amounts needed, you will be pretty well off. == End of mashing == Mashing usually takes about 30 minutes with a typical pale malt - however times may be more or less depending on the enzymatic activity (diastatic) power of the malt. Mashing may take as long as 6 hours.<ref name="Brewing science and practice" /> To test for mash conversion we test for the presence of starch: this can be done by mixing 1g of Lite salt (potassium iodide) with 50 ml 3% iodine solution and adding a drop to a sample (a teaspoon full) of the mash. If it turns deep blue starch is present. ===Unconverted mash=== If you continue to get starch, even hours after mashing, then the milling of the grain may be at fault in that the starch isn't being broken up enough to allow the enzymes to access it. High mash temperatures may have de-natured the malt enzymes. ==Special mashing techniques== ===Grain steeping=== The most basic way to extract flavors from specialty grains is by steeping them in warm water. The simplest way to perform this is to add the crushed grains (in a nylon or cotton grain bag) to the (cold) brewing water as is it brought to boiling temperature. The grains should be removed before the temperature reaches 77°C (170°F) to prevent the extraction of too many tannins. Dip the bag in and out a few times and let it drip for about 15 seconds before discarding. Do not squeeze the bag. Squeezing will also extract too much tannin from the grain husks. Alternatively, the crushed grains are steeped in 8-11 litres (2-3 gallons) of 65°C (150°F) water for 30 minutes before being removed from the wort. This allows for a more complete extraction. ===Partial mash=== Not much more difficult than steeping is the "Partial mash" or "Mini-Mash" procedure, which utilizes emzymatic malts in addition to the specialty grains and will result in a much better extraction of flavors and colors. Start by setting your oven to the "warm" (or lowest) setting. We are looking to a achieve a temperature of between 140 and 160°F. If the temperature of your oven is higher than 160°F at this setting, simply turn off the oven before placing the mash pot inside. The thermal mass of the hot grains and water should maintain a proper temperature during mashing. Heat between 1 and 3 quarts of water per pound of crushed grain that will be used to a light boil. Remove from the heat, allow to cool to 160-170°F, and transfer to your mash vessel and mix in the crushed grains. Mix thoroughly to be sure that the grains are not clumped then place the mash vessel in the oven for 45 to 60 minutes. Do not open the oven door while mashing is in progress or a significant amount of heat will escape. Do not let the mash temperature fall below 145°F. An oven themometer with a probe will allow you to monitor the temperature, although this is usually not necessary. While the mashing is taking place, heat an additional 1 to 3 quarts of water per pound of crushed grain (roughly the same amount you used for mashing) to a light boil, remove from the heat, and allow to cool to 140-170°F. This will be your sparge water. Once the mashing process is complete strain the mash into your brew pot using a stainless steel colander (pasta strainer). Then, slowly and evenly pour the sparge water over the mash. The mash is now complete. ""Add an amount water necessary to your brew pot to get up to the volume of water you traditionally use for your extract brewing."" ==Notes== {{Reflist|group=note}} ==References== {{reflist}} j0r9sf7syxxb0iskuh81wrv8ye3dr9w Chess Opening Theory/1. e4/1...e5/2. Nf3/2...Nf6/3. Nxe5/3...d6 0 102585 4675413 4639381 2026-10-10T03:45:22Z InvarianceNaN 3628028 Fix typo: Nxe5 -> Nxe4 4675413 wikitext text/x-wiki {{Chess Opening Theory/Position |Russian game |parent=[[../|Russian game]] |eco=[[Chess/ECOC|C42]] }} == 3...d6 == White's knight is under attack and must be moved, then it is safe for Black to pick up the pawn. [[/4. Nf3|'''4. Nf3''']] is the overwhelmingly common choice, and Black retakes the pawn with 4...Nxe4. This reaches the main junction of the Russian game where there are several theoretical continuations; the main line is 5. d4, the classical attack. [[/4. Nd3|'''4. Nd3!?''']], the '''Karklins-Martinovsky variation''' has been tried occasionally, notably played by Magnus Carlsen in the 2018 World Chess Championship against Fabiano Caruana.<ref>{{cite web |url=https://www.chessgames.com/perl/chessgame?gid=1937789 |title=Magnus Carlsen vs. Fabiano Caruana, 2018 |website=Chessgames.com}}</ref> Temporarily blocking the d-pawn, White's knight will eventually make way for it by rerouting to f4. 4...Nxe4 5. Qe2 Qe7 6. Nf4 Nf6 7. d4 Qxe2+ 8. Bxe2 Nc6 {{chess/not|+}}. [[/4. Nc4|'''4. Nc4!?''']], the '''Paulsen attack''', avoids blocking the d-pawn, but is no more effective than 4. Nd3 according to the engine. The knight usually ends up falling back to e3. [[/4. Nxf7|'''4. Nxf7?!''']] is the '''Cochrane gambit''', a double-edged but dubious gambit. White sacrifices their knight to drive Black's king out into the open and keep the initiative. After 4...Kxf7 5. d4 Nxe4? is a mistake due to 6. Qh5+ g6 7. Qd5+ Kg7 8. Qxe4 {{chess/not|++}}. ==Theory table== {{ChessTable}} '''1. e4 e5 2. Nf3 Nf6 3. Nxe5 d6''' <table border="0" cellspacing="0" cellpadding="4"> <tr> <th></th> <th align="left">4</th> <th align="left">5</th> </tr> <tr> <th align="right"><span style="font-size:small">Main line</span></th> <td>[[/4. Nf3|Nf3]]<br>-</td> <td>-<br>Nxe4</td> <td>=</td> </tr> <tr> <th align="right"><span style="font-size:small">Cochrane Gambit</span></th> <td>[[/4. Nxf7|Nxf7]]<br>-</td> <td>-<br>Kxf7</td> <td>=</td> </tr> <tr> <th align="right"><span style="font-size:small">Karklin-Marklovsky Variation</span></th> <td>Nd3!?<br>-</td> <td>-<br>Nxe4</td> <td>=</td> </tr> <tr> <th align="right"><span style="font-size:small">Paulsen Attack</span></th> <td>Nc4!?<br>-</td> <td>-<br>Nxe4</td> <td>=</td> </tr> </table> {{ChessMid}} ==References== {{reflist}} === See also === {{wikipedia|Petrov Defence}} {{BCO2}} {{Chess Opening Theory/Footer}} rexjcvnhhhzp4sfknhqo6coo7dom2sj Problems In High School Chemistry/PhChem/thermo1/table 0 132893 4675289 4661723 2026-10-09T12:44:42Z R. Henrik Nilsson 3395618 necessrily > necessarily 4675289 wikitext text/x-wiki Fill in the missing values in the table. The table contains 63 blanks, so we expect a student to solve the table in 90 minutes. Note: - 1.) Each of the processes are carried out on 1 mole of&nbsp; ideal gas. 2.) The odd numbered processes are for monoatomic ideal gases, while the rest are for diatomic ideal gases. For a monoatomic ideal gas, Cv = (3/2)R and for a diatomic ideal gas, Cv = (5/2)R. Cp = Cv + R, so theyre (5/2)R and (7/2)R respectively; not considering the vibrational degrees of freedom which we neglect at relatively low temperatures. 3.) Throughout the entire page, &#8747;PextdV implies the definite integral over the initial and the final stages as the lower and upper limits respectively. It DOES NOT designate the indefinite integral. == The Question == <table class="MsoNormalTable" border="0" cellspacing="1" width="693" fpstyle="10,011111100" style="border: 2px solid black; background-color: #DDE6E6;{{Text default color}};"> <tr style="height: 12.8pt"> <td width="29" nowrap valign="bottom" style="color: white; border-style: none; background-color: black;color:white;"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="98" nowrap valign="bottom" style="color: black; border-style: none; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"><b> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #993300"> Process</span></b></p></td> <td width="44" nowrap valign="bottom" style="color: black; border-style: none; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"><b> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #993300"> T</span><span style="font-size: 6.0pt; font-family: Century Gothic; color: #993300">i</span></b></p></td> <td width="42" nowrap valign="bottom" style="color: black; border-style: none; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"><b> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #993300"> V</span><span style="font-size: 6.0pt; font-family: Century Gothic; color: #993300">i</span></b></p></td> <td width="60" nowrap valign="bottom" style="color: black; border-style: none; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"><b> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #993300"> P</span><span style="font-size: 6.0pt; font-family: Century Gothic; color: #993300">i</span></b></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-style: none; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"><b> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #993300"> T</span><span style="font-size: 6.0pt; font-family: Century Gothic; color: #993300">f</span></b></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-style: none; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"><b> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #993300"> V</span><span style="font-size: 6.0pt; font-family: Century Gothic; color: #993300">f</span></b></p></td> <td width="66" nowrap valign="bottom" style="color: black; border-style: none; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"><b> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #993300"> P</span><span style="font-size: 6.0pt; font-family: Century Gothic; color: #993300">f</span></b></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-style: none; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"><b> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #993300"> Q</span></b></p></td> <td width="59" nowrap valign="bottom" style="color: black; border-style: none; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"><b> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #993300"> &#8710;E</span></b></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-style: none; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"><b> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #993300"> w</span></b></p></td> <td width="59" nowrap valign="bottom" style="color: black; border-style: none; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"><b> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #993300"> &#8747;P</span><span style="font-size: 7.0pt; font-family: Century Gothic; color: #993300">ext</span><span style="font-size: 10.0pt; font-family: Century Gothic; color: #993300">dV</span></b></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-style: none; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"><b> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #993300"> &#8710;H</span></b></p></td> </tr> <tr style="height: 12.8pt"> <td width="29" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #FFFF00"> 1</span></p></td> <td width="98" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: blue"> Rev. Adiabatic</span></p></td> <td width="44" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">400K</span></p></td> <td width="42" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">02.0 L</span></p></td> <td width="60" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">04.0 L</span></p></td> <td width="66" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="59" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="59" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> </tr> <tr style="height: 12.8pt"> <td width="29" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #FFFF00"> 2</span></p></td> <td width="98" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: blue"> Rev. Adiabatic</span></p></td> <td width="44" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">300K</span></p></td> <td width="42" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="60" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">01.00 atm</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="66" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">02.00 atm</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="59" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="59" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> </tr> <tr style="height: 12.8pt"> <td width="29" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #FFFF00"> 3</span></p></td> <td width="98" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: blue"> Isobaric Rev.</span></p></td> <td width="44" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">300K</span></p></td> <td width="42" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="60" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">01.00 atm</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">600K</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="66" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="59" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="59" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> </tr> <tr style="height: 12.8pt"> <td width="29" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #FFFF00"> 4</span></p></td> <td width="98" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: blue"> Rev. Isothermal</span></p></td> <td width="44" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">300K</span></p></td> <td width="42" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">03.0 L</span></p></td> <td width="60" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">06.0 L</span></p></td> <td width="66" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="59" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="59" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> </tr> <tr style="height: 12.8pt"> <td width="29" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #FFFF00"> 5</span></p></td> <td width="98" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: blue"> Rev. Isothermal</span></p></td> <td width="44" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">250K</span></p></td> <td width="42" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">03.0 L</span></p></td> <td width="60" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="66" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">02.00 atm</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="59" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="59" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> </tr> <tr style="height: 12.8pt"> <td width="29" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #FFFF00"> 6</span></p></td> <td width="98" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: blue"> Rev. Isochoric</span></p></td> <td width="44" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="42" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="60" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">02.00 atm</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">400K</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="66" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="59" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">1000 J</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="59" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> </tr> <tr style="height: 12.8pt"> <td width="29" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #FFFF00"> 7</span></p></td> <td width="98" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: blue"> Irrev. Adiabatic</span></p></td> <td width="44" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="42" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="60" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">350K</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="66" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">01.00 atm = ext pressure</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="59" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">1000 J</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="59" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> </tr> <tr style="height: 12.8pt"> <td width="29" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #FFFF00"> 8</span></p></td> <td width="98" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: blue"> Irrev. Isothermal</span></p></td> <td width="44" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="42" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">01.0 L</span></p></td> <td width="60" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="66" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">10.00 atm = ext pressure</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="59" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="59" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">0500 J</span></p></td> <td width="47" nowrap valign="bottom" style="color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> </tr> </table> <p><span style="font-family: Century Gothic">&nbsp;</span></p> <p>&nbsp;</p> <p><span style="font-family: Century Gothic">&nbsp;</span></p> <p>&nbsp;</p> <p>If you feel stumped by the sheer lack of data in the table, know that this is not an impossible task. It is, actually, a mechanical, mindless work. This is mainly because the table doesn't require a proper understanding of a process and the related intricacies. All it demands is a harmony among the formulae in the student's mind. Filling up this table will give a strong practice of the mathematics involved, and will also benefit the student in simplifying the more complex numerical problems.</p> <p>&nbsp;</p> <p>If you still do not gather any courage to fill the table, you should consider solving the introductory problems.</p> <p>&nbsp;</p> == The Answer == <p>&nbsp;</p> <table class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0" width="693" style="width: 520.0pt; border-left: 4.5pt solid black; border-right: 2.25pt solid black; border-top: 2.25pt solid black; border-bottom: 2.25pt solid black; margin-left: 4.65pt; background-color: #DDE6E6;{{Text default color}};" fpstyle="10,011111100"> <tr style="height: 12.75pt"> <td width="29" nowrap valign="bottom" style="width: 22.0pt; height: 12.75pt; color: white; border-style: none; background-color: black;color:white;"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">&nbsp;</span></p></td> <td width="100" nowrap valign="bottom" style="width: 75.0pt; height: 12.75pt; color: black; border-style: none; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"><b> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #993300"> Process</span></b></p></td> <td width="44" nowrap valign="bottom" style="width: 33.35pt; height: 12.75pt; color: black; border-style: none; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"><b> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #993300"> T</span><span style="font-size: 6.0pt; font-family: Century Gothic; color: #993300">i</span></b></p></td> <td width="48" nowrap valign="bottom" style="width: 35.75pt; height: 12.75pt; color: black; border-style: none; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"><b> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #993300"> V</span><span style="font-size: 6.0pt; font-family: Century Gothic; color: #993300">i</span></b></p></td> <td width="55" nowrap valign="bottom" style="width: 41.0pt; height: 12.75pt; color: black; border-style: none; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"><b> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #993300"> P</span><span style="font-size: 6.0pt; font-family: Century Gothic; color: #993300">i</span></b></p></td> <td width="44" nowrap valign="bottom" style="width: 33.35pt; height: 12.75pt; color: black; border-style: none; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"><b> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #993300"> T</span><span style="font-size: 6.0pt; font-family: Century Gothic; color: #993300">f</span></b></p></td> <td width="48" nowrap valign="bottom" style="width: 35.75pt; height: 12.75pt; color: black; border-style: none; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"><b> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #993300"> V</span><span style="font-size: 6.0pt; font-family: Century Gothic; color: #993300">f</span></b></p></td> <td width="67" nowrap valign="bottom" style="width: 50.5pt; height: 12.75pt; color: black; border-style: none; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"><b> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #993300"> P</span><span style="font-size: 6.0pt; font-family: Century Gothic; color: #993300">f</span></b></p></td> <td width="45" nowrap valign="bottom" style="width: 34.0pt; height: 12.75pt; color: black; border-style: none; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"><b> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #993300"> Q</span></b></p></td> <td width="60" nowrap valign="bottom" style="width: 45.05pt; height: 12.75pt; color: black; border-style: none; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"><b> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #993300"> &#8710;E</span></b></p></td> <td width="48" nowrap valign="bottom" style="width: .5in; height: 12.75pt; color: black; border-style: none; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"><b> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #993300"> W</span></b></p></td> <td width="58" nowrap valign="bottom" style="width: 43.25pt; height: 12.75pt; color: black; border-style: none; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"><b> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #993300"> &#8747;P</span><span style="font-size: 7.0pt; font-family: Century Gothic; color: #993300">ext</span><span style="font-size: 10.0pt; font-family: Century Gothic; color: #993300">dV</span></b></p></td> <td width="47" nowrap valign="bottom" style="width: 35.0pt; height: 12.75pt; color: black; border-style: none; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"><b> <span style="font-size: 10.0pt; font-family: Century Gothic; color: #993300"> &#8710;H</span></b></p></td> </tr> <tr style="height: 12.75pt"> <td width="29" nowrap valign="bottom" style="width: 22.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: blue">1</span></p></td> <td width="100" nowrap valign="bottom" style="width: 75.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: blue"> Rev. Adiabatic</span></p></td> <td width="44" nowrap valign="bottom" style="width: 33.35pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">400K</span></p></td> <td width="48" nowrap valign="bottom" style="width: 35.75pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">02.0 L</span></p></td> <td width="55" nowrap valign="bottom" style="width: 41.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 16.42 atm</span></p></td> <td width="44" nowrap valign="bottom" style="width: 33.35pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 252K</span></p></td> <td width="48" nowrap valign="bottom" style="width: 35.75pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">04.0 L</span></p></td> <td width="67" nowrap valign="bottom" style="width: 50.5pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 05.18 atm</span></p></td> <td width="45" nowrap valign="bottom" style="width: 34.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red">0</span></p></td> <td width="60" nowrap valign="bottom" style="width: 45.05pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"><b> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red">-</span></b><span style="font-size: 10.0pt; font-family: Century Gothic; color: red">1846 J</span></p></td> <td width="48" nowrap valign="bottom" style="width: .5in; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> -1846J</span></p></td> <td width="58" nowrap valign="bottom" style="width: 43.25pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 1846J</span></p></td> <td width="47" nowrap valign="bottom" style="width: 35.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> -3076J</span></p></td> </tr> <tr style="height: 12.75pt"> <td width="29" nowrap valign="bottom" style="width: 22.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: blue">2</span></p></td> <td width="100" nowrap valign="bottom" style="width: 75.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: blue"> Rev. Adiabatic</span></p></td> <td width="44" nowrap valign="bottom" style="width: 33.35pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">300K</span></p></td> <td width="48" nowrap valign="bottom" style="width: 35.75pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 24.63 L</span></p></td> <td width="55" nowrap valign="bottom" style="width: 41.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">01.00 atm</span></p></td> <td width="44" nowrap valign="bottom" style="width: 33.35pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 365K</span></p></td> <td width="48" nowrap valign="bottom" style="width: 35.75pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 29.96 L</span></p></td> <td width="67" nowrap valign="bottom" style="width: 50.5pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">02.00 atm</span></p></td> <td width="45" nowrap valign="bottom" style="width: 34.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red">0</span></p></td> <td width="60" nowrap valign="bottom" style="width: 45.05pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 1351J</span></p></td> <td width="48" nowrap valign="bottom" style="width: .5in; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> -1351J</span></p></td> <td width="58" nowrap valign="bottom" style="width: 43.25pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 1351J</span></p></td> <td width="47" nowrap valign="bottom" style="width: 35.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 1891J</span></p></td> </tr> <tr style="height: 12.75pt"> <td width="29" nowrap valign="bottom" style="width: 22.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: blue">3</span></p></td> <td width="100" nowrap valign="bottom" style="width: 75.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: blue"> Isobaric Rev.</span></p></td> <td width="44" nowrap valign="bottom" style="width: 33.35pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">300K</span></p></td> <td width="48" nowrap valign="bottom" style="width: 35.75pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 24.63 L</span></p></td> <td width="55" nowrap valign="bottom" style="width: 41.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">01.00 atm</span></p></td> <td width="44" nowrap valign="bottom" style="width: 33.35pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">600K</span></p></td> <td width="48" nowrap valign="bottom" style="width: 35.75pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 49.26 L</span></p></td> <td width="67" nowrap valign="bottom" style="width: 50.5pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 01.00 atm</span></p></td> <td width="45" nowrap valign="bottom" style="width: 34.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 6236 J</span></p></td> <td width="60" nowrap valign="bottom" style="width: 45.05pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 3741J</span></p></td> <td width="48" nowrap valign="bottom" style="width: .5in; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> -2495J</span></p></td> <td width="58" nowrap valign="bottom" style="width: 43.25pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 2495J</span></p></td> <td width="47" nowrap valign="bottom" style="width: 35.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 6236J</span></p></td> </tr> <tr style="height: 12.75pt"> <td width="29" nowrap valign="bottom" style="width: 22.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: blue">4</span></p></td> <td width="100" nowrap valign="bottom" style="width: 75.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: blue"> Rev. Isothermal</span></p></td> <td width="44" nowrap valign="bottom" style="width: 33.35pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">300K</span></p></td> <td width="48" nowrap valign="bottom" style="width: 35.75pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">03.0 L</span></p></td> <td width="55" nowrap valign="bottom" style="width: 41.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 8.21 atm</span></p></td> <td width="44" nowrap valign="bottom" style="width: 33.35pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 300K</span></p></td> <td width="48" nowrap valign="bottom" style="width: 35.75pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">06.0 L</span></p></td> <td width="67" nowrap valign="bottom" style="width: 50.5pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 04.10 atm</span></p></td> <td width="45" nowrap valign="bottom" style="width: 34.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 1729 J</span></p></td> <td width="60" nowrap valign="bottom" style="width: 45.05pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red">0</span></p></td> <td width="48" nowrap valign="bottom" style="width: .5in; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> -1729J</span></p></td> <td width="58" nowrap valign="bottom" style="width: 43.25pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 1729J</span></p></td> <td width="47" nowrap valign="bottom" style="width: 35.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red">0</span></p></td> </tr> <tr style="height: 12.75pt"> <td width="29" nowrap valign="bottom" style="width: 22.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: blue">5</span></p></td> <td width="100" nowrap valign="bottom" style="width: 75.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: blue"> Rev. Isothermal</span></p></td> <td width="44" nowrap valign="bottom" style="width: 33.35pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">250K</span></p></td> <td width="48" nowrap valign="bottom" style="width: 35.75pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">03.0 L</span></p></td> <td width="55" nowrap valign="bottom" style="width: 41.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 6.84 atm</span></p></td> <td width="44" nowrap valign="bottom" style="width: 33.35pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 250K</span></p></td> <td width="48" nowrap valign="bottom" style="width: 35.75pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 10.26 L</span></p></td> <td width="67" nowrap valign="bottom" style="width: 50.5pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">02.00 atm</span></p></td> <td width="45" nowrap valign="bottom" style="width: 34.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 2556 J</span></p></td> <td width="60" nowrap valign="bottom" style="width: 45.05pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red">0</span></p></td> <td width="48" nowrap valign="bottom" style="width: .5in; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> -2556J</span></p></td> <td width="58" nowrap valign="bottom" style="width: 43.25pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 2556J</span></p></td> <td width="47" nowrap valign="bottom" style="width: 35.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red">0</span></p></td> </tr> <tr style="height: 12.75pt"> <td width="29" nowrap valign="bottom" style="width: 22.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: blue">6</span></p></td> <td width="100" nowrap valign="bottom" style="width: 75.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: blue"> Rev. Isochoric</span></p></td> <td width="44" nowrap valign="bottom" style="width: 33.35pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red">352 K</span></p></td> <td width="48" nowrap valign="bottom" style="width: 35.75pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 14.44 L</span></p></td> <td width="55" nowrap valign="bottom" style="width: 41.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">02.00 atm</span></p></td> <td width="44" nowrap valign="bottom" style="width: 33.35pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">400K</span></p></td> <td width="48" nowrap valign="bottom" style="width: 35.75pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 14.44 L</span></p></td> <td width="67" nowrap valign="bottom" style="width: 50.5pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 02.27 atm</span></p></td> <td width="45" nowrap valign="bottom" style="width: 34.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 1000 J</span></p></td> <td width="60" nowrap valign="bottom" style="width: 45.05pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">1000J</span></p></td> <td width="48" nowrap valign="bottom" style="width: .5in; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center; margin-right: -.6pt"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red">0</span></p></td> <td width="58" nowrap valign="bottom" style="width: 43.25pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red">0</span></p></td> <td width="47" nowrap valign="bottom" style="width: 35.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 1397J</span></p></td> </tr> <tr style="height: 12.75pt"> <td width="29" nowrap valign="bottom" style="width: 22.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: blue">7</span></p></td> <td width="100" nowrap valign="bottom" style="width: 75.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: blue"> Irrev. Adiabatic</span></p></td> <td width="44" nowrap valign="bottom" style="width: 33.35pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red">270 K</span></p></td> <td width="48" nowrap valign="bottom" style="width: 35.75pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 38.63 L</span></p></td> <td width="55" nowrap valign="bottom" style="width: 41.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 0.57 atm</span></p></td> <td width="44" nowrap valign="bottom" style="width: 33.35pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">350K</span></p></td> <td width="48" nowrap valign="bottom" style="width: 35.75pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 28.73 L</span></p></td> <td width="67" nowrap valign="bottom" style="width: 50.5pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">01.00 atm = ext pressure</span></p></td> <td width="45" nowrap valign="bottom" style="width: 34.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red">0</span></p></td> <td width="60" nowrap valign="bottom" style="width: 45.05pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">1000J</span></p></td> <td width="48" nowrap valign="bottom" style="width: .5in; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 1000J</span></p></td> <td width="58" nowrap valign="bottom" style="width: 43.25pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> - 1000J</span></p></td> <td width="47" nowrap valign="bottom" style="width: 35.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 1663J</span></p></td> </tr> <tr style="height: 12.75pt"> <td width="29" nowrap valign="bottom" style="width: 22.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver; background-color: teal;{{Text default color}};"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: blue">8</span></p></td> <td width="100" nowrap valign="bottom" style="width: 75.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: blue"> Irrev. Isothermal</span></p></td> <td width="44" nowrap valign="bottom" style="width: 33.35pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red">424 K</span></p></td> <td width="48" nowrap valign="bottom" style="width: 35.75pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">01.0 L</span></p></td> <td width="55" nowrap valign="bottom" style="width: 41.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 34.81</span></p></td> <td width="44" nowrap valign="bottom" style="width: 33.35pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 424K</span></p></td> <td width="48" nowrap valign="bottom" style="width: 35.75pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> 3.48 L</span></p></td> <td width="67" nowrap valign="bottom" style="width: 50.5pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">10.00 atm = ext pressure</span></p></td> <td width="45" nowrap valign="bottom" style="width: 34.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red">500 J</span></p></td> <td width="60" nowrap valign="bottom" style="width: 45.05pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red">0</span></p></td> <td width="48" nowrap valign="bottom" style="width: .5in; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red"> -500J</span></p></td> <td width="58" nowrap valign="bottom" style="width: 43.25pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic">0500 J</span></p></td> <td width="47" nowrap valign="bottom" style="width: 35.0pt; height: 12.75pt; color: black; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid silver"> <p class="MsoNormal" align="center" style="text-align: center"> <span style="font-size: 10.0pt; font-family: Century Gothic; color: red">0</span></p></td> </tr> </table> <p><span style="font-family: Century Gothic">&nbsp;</span></p> == Hints == === Column 1 === <p>(a)Pi - Since three of the gas parameters are known, the fourth parameter can always be found using the ideal gas equation on the initial state.</p> <p>(b)Tf - Ideal gas equation has four parameters, only two are known, so we need one more equation.</p> <p>&nbsp;</p> <p>Since this is a reversible adiabatic process, the pressure P and Volume V satisfy the relation (P)(V^y) = constant throughout. Also, the ideal gas equation is satisfied throughout in any reversible process. PV = nrt. Devide the first equation by the second, and you'll find that you just eliminated one unknown - P. It is now left to one equation, Ti[Vi^(y-1)] = Tf[Vf^(y-1])&nbsp; and one unknown, Tf.</p> <p>&nbsp;</p> <p>The final calculations require a simple use of log tables. In competitive exams however, the paper setter will give all the values of the logarithms involved, so you need not concern yourself with the complexity of the calculations.</p> <p>&nbsp;</p> <p>(c)Pf - Now that three quantities in the ideal gas equation are known, you can easily find Pf.</p> <p>&nbsp;</p> <p>Alternatively, you could directly find Pf through using P(V^y) = constant on initial and final stages of the process, and then used the ideal gas equation to find Tf. Notice that we avoided finding Pf when we were asked to find only Tf, by eliminating the unknown.</p> <p>&nbsp;</p> <p>(d)Q - In an adiabatic process, the heat exchanged with the surroundings is ________</p> <p>&nbsp;</p> <p>(e)&#8710;E - Internal energy is fairly simple for an ideal gas, and depends only upon temperature of the ideal gas.&nbsp; It is nCvTf at Tf, and nCvTi at Ti. So the change, then, is nCv(Tf-Ti). Try to relate it to the expression for heat gained and heat lost learnt in thermal physics in the eleventh and ninth standard in Indian Schools.</p> <p>&nbsp;</p> <p>(f)w - It is the additive inverse of &#8747;PextdV in Chemistry conventions. In Physics, it is the same as &#8747;PextdV. See below on how to find &#8747;PextdV, that is the work done by the gas during the change in volume.</p> <p>&nbsp;</p> <p>(g)&#8747;PextdV - Well, performing the whole integration by substituting P is a good idea. P = nrt/v will not work because even T will vary. We cannot integrate two variables in this way. Instead, substitute P as [Constant]/(V^y) and carry out the integration. After the integration is done, substitute the value of constant as Pf(Vf^y) and Pi(Vi^y) to get the result in terms of known quantities.</p> <p>&nbsp;</p> <p>But, the same work can be done in an easy manner! Use the first law, Q = &#8710;E + &#8747;PextdV. You will find that in an adiabatic process, since the heat exchanged is 0, &#8747;PextdV becomes the additive inverse of the change in the internal energy. In laymen's terms, since in an adiabatic process, the heat input is zero, whatever work that is done by the gas comes at the expence of its internal energy (and vice versa). This explaining subtly why the First Law Of Thermodynamics is actually the manifestation of the law of conservation of energy. <br> &nbsp;</p> <p>**NOTE :: The integral requires the value of Pext. In a reversible process, since the External Pressure is the same as the internal pressure of a gas, the whole substitution makes sence. Remember, Pext is not necessarily equal to nrt/v, but internal pressure = nrt/v.**</p> <p>(h)&#8710;H - Finally, the enthalpy change of the reaction. It is pleasing to know that this again, depends only on the change in temperature for an ideal gas. That is, &#8710;H = nCp&#8710;T.</p> <p>&nbsp;</p> <p>The First Column, Done!!!</p> <p>&nbsp;</p> === Column 2 === <p>(a)Vi - Use the ideal gas equation over the first state.</p> <p>(b)Tf - Ideal gas equation, this time again, will have two unknowns. We need one more equation, which comes from (P)(V^y) = constant. Going exactly by the steps in column one, however, we won't be eliminating the unknown Vf, while eliminating the known P. Instead, to eliminate Vf, while keeping the knowns, raise both sides of the ideal gas equation by Y and devide the first equation by the second. You will end up with (T^y)[P^(1-Y)] = constant. Use it on the initial and final stages. </p> <p>&nbsp;</p> <p>(c)Vf - Now that three quantities in the ideal gas equation are known, you can easily find Vf.</p> <p>&nbsp;</p> <p>Alternatively, you could directly find Vf through using P(V^y) = constant on initial and final stages of the process, and then used the ideal gas equation to find Tf. Notice that we avoided finding Vf when we were asked to find only Tf, by eliminating the unknown.</p> <p>&nbsp;</p> <p>(d)Q - What is the defining charachteristic of an adiabatic process?</p> <p>&nbsp;</p> <p>(e)&#8710;E - nCv&#8710;T pretty simple. :)</p> <p>&nbsp;</p> <p>(f)w - Tip::Throughout the table, this column is going to be the additive inverse of &#8747;PextdV</p> <p>&nbsp;</p> <p>(g)&#8747;PextdV - Tip::Although not throughout the table, but in any kind of adiabatic process (reversible or irreversible), &#8747;PextdV is the abditive inverse of &#8710;E, according to the first law.</p> <p>&nbsp;</p> <p>**This is because the first law of the thermodynamics is universal, and it doesnt matter if the process is reversible or irreversible to apply it. </p> <p>&nbsp;</p> <p>However, the ideal gas equation and any results derived from it are applicable only in the case of a thermodynamic equilibrium. Since this is not possible in case of an irreversible process, we cannot use the mentioned equations over the course of the reactions. Even then, the ideal gas equation can be used before and after an irreversible process takes place.**<br>&nbsp;</p> <p>(h)&#8710;H -&nbsp; &#8710;H = nCp&#8710;T.</p> <p>&nbsp;</p> <p>Second column completed as well.</p> <p>&nbsp;</p> === The Third Column === <p>(a)Vi - the _______ equation, fill in the blank mentally.</p> <p>(b)Vf - Again, two unknowns for the ideal gas equation. But is Pf actually an unknown? Remember that this is an isobaric process, and that the initial pressure is known, so the final pressure is known as well.</p> <p>(c)Pf - Done</p> <p>(d)Q - Non zero for the first time!! We will use the first law, Q = &#8710;E + &#8747;PextdV. See it again as the law of conservation of energy, the heat supplied is used in heating the gas as well as doing work. Now find the other two terms.</p> <p>(e)&#8710;E - nCv&#8710;T :)</p> <p>(f)&#8747;PextdV - Since this is a reversible process, the external pressure is the same as the internal pressure, and the internal pressure is constant. It comes out of the integration. So we are left with&nbsp; (P)&#8747;dV, which evaluates to P&#8710;V. Do the needful!!</p> <p>(h)&#8710;H - nCp&#8710;T !!!</p> <p>&nbsp;</p> <p>Note : - In evaluating &#8747;PextdV, make sure that you use the correct units of each quantity! Since we want the answer to be in joules, i.e. SI units, we need to substitute pressure and volume in Pascals and Cubic Meters. </p> <p>&nbsp;</p> <p>Note : - The enthalpy change of a reaction is the heat exchanged in a reaction when a process is carried out at constant pressure. This, in our case, means that the Q and &#8710;H entries in column three should be same. [Have you convinced yourself why?] But there may be slight differences between the two entries, this resulting from the rounding off of conversion factors. e.g. 1 atm = 101325 Pascals, but we often substitute 1 atm as 1.01 lac pascals. </p> <p>&nbsp;</p> <p>Third column done as well. :)</p> <p>&nbsp;</p> === Column Four === <p>&nbsp;</p> <p>(a)Pi&nbsp; - ;)</p> <p>(b)Tf - This question is the answer, &quot;what is an isothermal process?&quot;</p> <p>(c)Pf- The ideal gas equation is OK, but observe that the RHS of it is constant. So, even the LHS would be. Hence, if the volume doubles up, the pressure reduces to half.</p> <p>(d)Q - &#8710;E + &#8747;PextdV, now we will find both the terms and substitute them.</p> <p>(e)&#8710;E - Well, if the internal energy of an ideal gas depends only on its temperature, and if this is an isothermal process, where does it lead us?</p> <p>(f)&#8747;PextdV - This is a reversible process. As explained above, Pext is the same as the pressure of the gas molecules at any stage. Substitute Pext as nrt/v. Since the numerator is constant, we take it out of integration, and evaluate nrT &#8747;(dV/V) which is nrTln(Vf/Vi). Now substitute the values.</p> <p>(g)&#8710;H - nCp&#8710;T :)</p> <p>&nbsp;</p> === Column Five === <p>&nbsp;</p> <p>No additional info. This is a clone actually.</p> <p>&nbsp;</p> === Column Six === <p>&nbsp;</p> <p>We expect the student to be seasoned enough now to realize that the gas parameters are found through ideal gas equation, and then the thermodynamic Joule values are found simply.</p> <p>&nbsp;</p> <p>Note : Since the volume remains constant, change in volume is 0. i.e. dV=0, so &#8747;PextdV = 0</p> <p>&nbsp;</p> === Column Seven === <p>This is the first irreversible process that we are dealing with, in this table. Pf = 1 atm = external pressure in the above table means that the gas expands/contracts against a constant external pressure of 1 atm, and the final pressure of the gas too is 1 atm. [We have some numerical problems where the final pressure isnt equal to the external pressure against which expansion/contraction took place, but do not bother yourself with it at this moment.]</p> <p>&nbsp;</p> <p>Note carefully that all three gas parameters are missing for the initial state. That means, apart from the gas equation, we will require two more equations to find them all. And since this is an irreversible adiabatic process, we cannot use P(V^y)=Constant over the initial and final states. That means we have lost an equation!</p> <p>&nbsp;</p> <p>How are we going to deal with this situation? The first thing to keep in mind is that every problem asked in this book has a solution. And this table, like most of the highschool problems, is all about making equations to find unknowns.</p> <p>&nbsp;</p> <p>(a)Vf - Use the ideal gas equation to get the value.</p> <p>&nbsp;</p> <p>Now try to relate the final parameters to the initial parameters. Obviously, the heat gained, work done, change in internal energy put some constraints on the possible values of the parameters.</p> <p>&nbsp;</p> <p>(b)Ti - &#8710;E is known to us, but if we write it as nCv&#8710;T, and equate it to 1000 J, we actually end up with an equation. This gives us the value of &#8710;T, which can be use to find the initial temperature, because the final temperature is known.</p> <p>&nbsp;</p> <p>(c)Vi/&#8747;PextdV - Refer the two reversible adiabatic processes in column 1 and column 2 that we studied. We made a statement over there, that since the characteristic of any kind of adiabatic process is &quot;zero energy exchange&quot;, &#8747;PextdV is always the additive inverse of &#8710;E for an adiabatic process. Hence &#8747;PextdV = -1000 J.</p> <p>&nbsp;</p> <p>But this is not all!! If you are thorough with integration, look at the word &#8747;PextdV with some concentration. The parameter Pext would jump in and out of the integral in your mind's eye once you understand that it is constant for this process. This yields &#8747;PextdV =Pext(&#8710;V). Just as you found Ti by finding &#8710;T, find Vi by finding &#8710;V.</p> <p>&nbsp;</p> <p>Fill up the rest of the entries yourself.</p> <p>&nbsp;</p> <p>Note: This is for you to ponder. In the reversible adiabatic processes,&nbsp; &#8747;PextdV = -&#8710;E and actually evaluating the integral gave the same equation. But in the case of an irreversible adiabatic process, evaluating the integral and using the first law to find its value gives two distinct equations! This can be used for our benefit in problems. Please keep this in mind!</p> <p>&nbsp;</p> === Column Eight === <p>&nbsp;</p> <p>Just as in Column Seven, we lose the equation &#8747;PextdV = nrtln(Vf/Vi), but we can write it as &#8747;PextdV = Pext(&#8710;V).</p> <p>&nbsp;</p> <p>An irreversible isothermal process is much shorter than an irreversible adiabatic process to complete.</p> <p>&nbsp;</p> <p>(a)Vf - &#8747;PextdV = Pext(&#8710;V) use this equation to find the final volume of the gas molecules.</p> <p>&nbsp;</p> <p>(b)Tf - Two gas parameters are known now, use the ideal gas equation to find Tf. And if this is an isothermal process, what does knowing the final temperature mean?</p> <p>&nbsp;</p> <p>The rest of the entries require no new logic, everything has been covered in the above columns.</p> {{BookCat}} qu9isosd5994787lbdexxvoouihb7iy Wikibooks:Reading room/Administrative Assistance 4 140081 4675414 4675282 2026-10-10T04:07:27Z TechVindicator 3626296 Reporting Lenawalker1 4675414 wikitext text/x-wiki {{/Header}} {{User:MiszaBot/config |archive = Wikibooks:Reading room/Administrative Assistance/Archives/%(year)d/%(monthname)s |algo = old(14d) |counter = 1 |minthreadstoarchive = 1 |minthreadsleft = 1 }} == Mango-tree-technology reported by TechVindicator == * {{userlinks|Mango-tree-technology}} Spam <!-- USERREPORTED:/Mango-tree-technology/ --> [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 12:41, 25 September 2026 (UTC) :{{done|Blocked}} by Kittycataclysm. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 13:53, 25 September 2026 (UTC) == ~2026-51713-42 reported by Morkoz == * {{userlinks|~2026-51713-42}} Spam, see also [[w:hi:special:contribs/~2026-51214-19|~2026-51214-19]]. <!-- USERREPORTED:/~2026-51713-42/ --> --[[User:Morkoz|Morkoz]] ([[User talk:Morkoz|discuss]] • [[Special:Contributions/Morkoz|contribs]]) 15:43, 25 September 2026 (UTC) : {{done}} by NDKDD (GS). [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 22:37, 25 September 2026 (UTC) == Tunde akinlabi reported by MathXplore == * {{userlinks|Tunde akinlabi}} Spam <!-- USERREPORTED:/Tunde akinlabi/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:18, 1 October 2026 (UTC) : Page was deleted by another admin. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:11, 2 October 2026 (UTC) == Barakat isiaka reported by MathXplore == * {{userlinks|Barakat isiaka}} Spam <!-- USERREPORTED:/Barakat isiaka/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:19, 1 October 2026 (UTC) : Page was deleted by another admin. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:11, 2 October 2026 (UTC) == Roconpaas01 reported by MathXplore == * {{userlinks|Roconpaas01}} Link spam, [[Special:AbuseLog/315913]] <!-- USERREPORTED:/Roconpaas01/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:19, 2 October 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:10, 2 October 2026 (UTC) == Diiminstitute reported by MathXplore == * {{userlinks|Diiminstitute}} Link spam, [[Special:AbuseLog/315963]] <!-- USERREPORTED:/Diiminstitute/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 02:34, 4 October 2026 (UTC) :{{done}} --[[User:SHB|SHB]] ([[User talk:SHB|discuss]] • [[Special:Contributions/SHB|contribs]]) 02:58, 4 October 2026 (UTC) == ~2026-51118-27 reported by EggRoll97 == * {{anonlinks|~2026-51118-27}} Vandalism <!-- USERREPORTED:/~2026-51118-27/ --> [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 07:28, 4 October 2026 (UTC) : {{done}} by NDG (GS). [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:13, 4 October 2026 (UTC) == ~2026-53393-86 reported by MathXplore == * {{anonlinks|~2026-53393-86}} Vandalism <!-- USERREPORTED:/~2026-53393-86/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:37, 5 October 2026 (UTC) :Various contributions deleted—watching to see how this develops. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 19:15, 5 October 2026 (UTC) == [[CustomChessTheory]] == Reason for reporting: Wrong title, renaming needed. [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:45, 5 October 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:21, 8 October 2026 (UTC) == Siddhgiritubes reported by MathXplore == * {{userlinks|Siddhgiritubes}} Spam <!-- USERREPORTED:/Siddhgiritubes/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:31, 7 October 2026 (UTC) : Page deleted by JJPMaster. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:09, 8 October 2026 (UTC) == Editbots reported by MathXplore == * {{userlinks|Editbots}} Link spam ([[Special:AbuseLog/316068]], [[Special:Contributions/~2026-54143-79]]) <!-- USERREPORTED:/Editbots/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:13, 8 October 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:10, 8 October 2026 (UTC) == Lenawalker1 reported by TechVindicator == * {{userlinks|Lenawalker1}} Spam <!-- USERREPORTED:/Lenawalker1/ --> [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 04:07, 10 October 2026 (UTC) ek2uj2fp2uku693j6x2oj4ltexb0v1q 4675432 4675414 2026-10-10T08:10:38Z ArchiverBot 1227662 Bot: Archiving 2 threads (older than 14 days) to [[Wikibooks:Reading room/Administrative Assistance/Archives/2026/September]] 4675432 wikitext text/x-wiki {{/Header}} {{User:MiszaBot/config |archive = Wikibooks:Reading room/Administrative Assistance/Archives/%(year)d/%(monthname)s |algo = old(14d) |counter = 1 |minthreadstoarchive = 1 |minthreadsleft = 1 }} == Tunde akinlabi reported by MathXplore == * {{userlinks|Tunde akinlabi}} Spam <!-- USERREPORTED:/Tunde akinlabi/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:18, 1 October 2026 (UTC) : Page was deleted by another admin. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:11, 2 October 2026 (UTC) == Barakat isiaka reported by MathXplore == * {{userlinks|Barakat isiaka}} Spam <!-- USERREPORTED:/Barakat isiaka/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:19, 1 October 2026 (UTC) : Page was deleted by another admin. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:11, 2 October 2026 (UTC) == Roconpaas01 reported by MathXplore == * {{userlinks|Roconpaas01}} Link spam, [[Special:AbuseLog/315913]] <!-- USERREPORTED:/Roconpaas01/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:19, 2 October 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:10, 2 October 2026 (UTC) == Diiminstitute reported by MathXplore == * {{userlinks|Diiminstitute}} Link spam, [[Special:AbuseLog/315963]] <!-- USERREPORTED:/Diiminstitute/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 02:34, 4 October 2026 (UTC) :{{done}} --[[User:SHB|SHB]] ([[User talk:SHB|discuss]] • [[Special:Contributions/SHB|contribs]]) 02:58, 4 October 2026 (UTC) == ~2026-51118-27 reported by EggRoll97 == * {{anonlinks|~2026-51118-27}} Vandalism <!-- USERREPORTED:/~2026-51118-27/ --> [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 07:28, 4 October 2026 (UTC) : {{done}} by NDG (GS). [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:13, 4 October 2026 (UTC) == ~2026-53393-86 reported by MathXplore == * {{anonlinks|~2026-53393-86}} Vandalism <!-- USERREPORTED:/~2026-53393-86/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:37, 5 October 2026 (UTC) :Various contributions deleted—watching to see how this develops. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 19:15, 5 October 2026 (UTC) == [[CustomChessTheory]] == Reason for reporting: Wrong title, renaming needed. [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:45, 5 October 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:21, 8 October 2026 (UTC) == Siddhgiritubes reported by MathXplore == * {{userlinks|Siddhgiritubes}} Spam <!-- USERREPORTED:/Siddhgiritubes/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:31, 7 October 2026 (UTC) : Page deleted by JJPMaster. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:09, 8 October 2026 (UTC) == Editbots reported by MathXplore == * {{userlinks|Editbots}} Link spam ([[Special:AbuseLog/316068]], [[Special:Contributions/~2026-54143-79]]) <!-- USERREPORTED:/Editbots/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:13, 8 October 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:10, 8 October 2026 (UTC) == Lenawalker1 reported by TechVindicator == * {{userlinks|Lenawalker1}} Spam <!-- USERREPORTED:/Lenawalker1/ --> [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 04:07, 10 October 2026 (UTC) 7mnwar47pqjz8paqp1481ounfx58tmb Wikibooks:Reading room/Proposals 4 155682 4675290 4675251 2026-10-09T13:36:52Z TechVindicator 3626296 /* Disable (some) page creation by temporary accounts */ 4675290 wikitext text/x-wiki __NEWSECTIONLINK__ {{Discussion Rooms}} {{Shortcut|WB:RFC|WB:PROPOSALS}} {{TOC left<!--|limit=2-->}} Welcome to the '''Proposals reading room'''. On this page, Wikibookians are free to talk about suggestions for improving Wikibooks. {{User:MiszaBot/config |archive = Wikibooks:Reading room/Proposals/%(year)d/%(monthname)s |algo = old(120d) |counter = 1 |key = 1f2adc5eee951900b65c7b981b786191 |minthreadstoarchive = 1 |minthreadsleft = 1 }} {{clear}} <!--Take threads to archive below this line--> <!--Add new threads to bottom of page--> == New gadget to browse subpages == Hi all! I developed a gadget to easily browse subpages through a collapsible menu, that I think might be useful in Wikibooks. Here's a little demo video: [[File:Subpages_gadget_demo.webm|frameless]] To test it yourself, add the following to [[Special:MyPage/common.js|your common.js]]: <syntaxhighlight lang="javascript"> mw.loader.load( '//www.mediawiki.org/w/load.php?modules=ext.gadget.Global-Subpages' ); </syntaxhighlight> If you find it useful, I can enable it as a gadget to make it generally available from the preferences. Thoughts? Cheers! [[User:Sophivorus|Sophivorus]] ([[User talk:Sophivorus|discuss]] • [[Special:Contributions/Sophivorus|contribs]]) 16:02, 2 July 2026 (UTC) :Wikibooks relies heavily on subpages, so this is a nice addition. Merci. ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 16:43, 2 July 2026 (UTC) :This could be extremely useful for books here!! I'll note, though, that it doesn't work quite right with the vector legacy skin (what I use). —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:20, 3 July 2026 (UTC) : @[[User:Sophivorus|Sophivorus]] I will be the one in charge installing this as a gadget since there is no objection, but what dependecies does this gadget need to use? You might also want to read Kittycataclysm's suggestion above. ''Muchos saludos''. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 23:08, 9 July 2026 (UTC) ::@[[User:Codename Noreste|Codename Noreste]] Hi! I just fixed the issue with Vector legacy and also for other skins. Regarding dependencies, this gadget requires <code>mediawiki.api</code> and <code>@wikimedia/codex</code>. If you want to take care of the installation, please do not copy-paste the source code, but rather load the global version using <code>mw.loader.load( '//www.mediawiki.org/w/load.php?modules=ext.gadget.Global-Subpages' );</code>, like other [[mw:Global gadgets|global gadgets]]. Thanks! [[User:Sophivorus|Sophivorus]] ([[User talk:Sophivorus|discuss]] • [[Special:Contributions/Sophivorus|contribs]]) 14:22, 22 July 2026 (UTC) ::: I put the code on the gadgets definition page @[[User:Sophivorus|Sophivorus]], but feel free to fix what I placed. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 21:45, 22 July 2026 (UTC) == Breadcrumbs in the title == Hi! I think breadcrumbs would be more intuitive, compact and cleaner if they were integrated into the title rather than below it, like so: <gallery> Wikisource breadcrumbs proposal (before).png|Current breadcrumbs Wikisource breadcrumbs proposal (after).png|Proposed breadcrumbs </gallery> What do you think? [[User:Sophivorus|Sophivorus]] ([[User talk:Sophivorus|discuss]] • [[Special:Contributions/Sophivorus|contribs]]) 16:02, 17 August 2026 (UTC) :I appreciate the effort, but I don't see a big difference or that one would be more usable than another. ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 19:14, 17 August 2026 (UTC) :I like proposal and I think it would be an improvement. Having the breadcrumbs twice, as in the current system, creates a redundant ui element. I also think the formatting around the forward slashes in the "new" version better conveys that they have specific technical meaning and are not part of the name of the page. --[[User:JCrue|JCrue]] ([[User talk:JCrue|discuss]] • [[Special:Contributions/JCrue|contribs]]) 14:52, 7 October 2026 (UTC) == Approve [[Wikibooks:CheckUser]] as a local policy? == Some of the text was based off of the global CheckUser policy, but in this case, should we approve [[Wikibooks:CheckUser]] as a local policy? There is a special clause allowing stewards to perform checks even during non-emergency situations (as set in [[Wikibooks:Global rights policy]]). I have yet to include a part where users may request CU checks. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 21:55, 13 September 2026 (UTC) :I'm somewhat just unsure on what the benefit of making this policy would be. Sure, there's strength in policy, of course. But this seems to be doing fine overall as an information page, no? It doesn't differ very much from the global CU policy, so I'm not sure that a page without any Wikibooks-specific information really benefits from policy status. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 00:22, 14 September 2026 (UTC) :I would {{support}} this. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 00:26, 20 September 2026 (UTC) == FlaggedRevs again == <div class="cd-moveMark">''Moved from [[Wikibooks:Reading room/General#FlaggedRevs again]]. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:01, 1 October 2026 (UTC)''</div> Hi all. I already know there were various topics over the years about this subject, but I was considering for the project on whether we should remove this extension from this project, and go back to using MediaWiki's page patrol system. Currently, there is a backlog of more than 3000 unreviewed edits (some going back as far as a few years ago); that’s why I started this discussion here. {{collapse top}} * <code>autoreview</code> and <code>editor</code> would be <code>autopatrolled</code> and <code>patroller</code>, respectively. * <code>wgUseNPPatrol</code> and <code>wgUseFilePatrol</code> would be re-enabled for English Wikibooks. * <code>autopatrol</code> and <code>patrol</code> would be re-assigned back to sysops and their respective user groups. * <code>patroller</code> would also have <code>rollback</code> and <code>suppressredirect</code> and its rate limit untouched. {{collapse bottom}} Best, [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 12:56, 30 September 2026 (UTC) :{{s}} the removal of FlaggedRevs. Inasmuch as the extension works at all, it works best when it is used selectively on projects like Wikipedia, for individual high-traffic pages with lots of watchers which are subject to vandalism or controversy. Wikibooks is not a good use case for this extension. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 15:51, 1 October 2026 (UTC) :{{s}} I don't see any way that backlog ever gets cleared, frankly, and if it isn't going to be cleared, we might as well go to something easier, which is the normal page patrol system, which works well off of [[Special:NewPages]] already. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 00:31, 3 October 2026 (UTC) :{{neutral}} - Wikibooks is not a good use case for this extension, and with 3000 unreviewed edits with no progress at all, it does make sense to remove it. On the other hand, there could be a WikiProject to review each of these edits. For this reason, I am voting neutral [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 13:41, 3 October 2026 (UTC) :: There was the outdated [[Wikibooks:New page patrol]] before this project used FlaggedRevs. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:22, 3 October 2026 (UTC) :{{support}} the removal of FlaggedRevs from Wikibooks. It's a redundant extension that's not useful in this wiki. --[[User:Agusbou2015|Agusbou2015]] ([[User talk:Agusbou2015|discuss]] • [[Special:Contributions/Agusbou2015|contribs]]) 21:53, 3 October 2026 (UTC) :{{Support}}. Several years ago I spent hundreds of hours trying to do the first review of every page. I managed to get all the root pages done but only got as far as "E" for the other pages. While I was doing this I stopped reviewing changes - and in that time over a 1,000 out of date pages were in the list. I concluded it was an impossible task unless lots of people joined in the work but that didn't happen and I doubt it ever will. I do think it has value for Wikijunior in showing the last reviewed page rather than the possibly offensively vandalised latest revision, but other than that it's a waste of time. At some point the extension will get fully deprecated and we'll be forced to stop using it anyway. [[User:MarcGarver|MarcGarver]] ([[User talk:MarcGarver|discuss]] • [[Special:Contributions/MarcGarver|contribs]]) 09:53, 6 October 2026 (UTC) :Will <code>patroller</code> be granted automatically? [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 13:24, 6 October 2026 (UTC) :: Unfortunately, no. Since we will stop using FlaggedRevs, the patroller user group will not be granted automatically and thus will have to be manually given out by administrators. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:46, 6 October 2026 (UTC) :::@[[User:Codename Noreste|Codename Noreste]]: And are we planning on giving back the <code>patroller</code> right to existing reviewers? Or will they have to manually reapply? [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 02:30, 8 October 2026 (UTC) :::: I have a plan: any former reviewer who has been active recently in the past two years will have patroller rights. This will be done to reduce a huge amount of inactive former reviewers. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 12:26, 8 October 2026 (UTC) ::::Keep the name the same; just remove the reviewer right. After all, patrolling is a form of reviewing. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 18:52, 8 October 2026 (UTC) ::::: Do we have to use the term {{tq|reviewing}} instead of {{tq|patrolling}}? [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:57, 8 October 2026 (UTC) : If you take a look at the extended content, I also included what I also proposed too. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:19, 6 October 2026 (UTC) :{{comment}}. The [[mw:Extension:FlaggedRevs|FlaggedRevs extension]] is not recommended for production use, per Mediawiki. On this basis alone we should discontinue use of it. However, we haven't determined if page patrolling is the best replacement. There are [[mw:Content approval extensions|alternative extensions]] and the mediawiki page for FlaggedRevs specifically recommends [[mw:Extension:Approved Revs|'''Approved Revs extension''']]. We should determine which of page patrolling or these extensions is the most appropriate antivandalism tool first. (after all, according to [[Help:Tracking_changes#Reviewing_pages]], the purpose of FlaggedRevs is to be "our primary counter-vandalism tool"). --[[User:JCrue|JCrue]] ([[User talk:JCrue|discuss]] • [[Special:Contributions/JCrue|contribs]]) 14:48, 7 October 2026 (UTC) :: Approved Revs would require significant testing and approval per [[mw:Writing an extension for deployment]]. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 16:35, 7 October 2026 (UTC) == Disable (some) page creation by temporary accounts == Creating a new book, or adding a chapter to an existing book, is a significant action, and users performing this action should be available to discuss it. Additionally, in practice, most page creations by temp accounts are out of scope, if not outright vandalism. (See https://en.wikibooks.org/w/index.php?title=Special:Log&type=create for some examples.) As such, I'd like to propose that the wiki require a registered account to create pages in any non-talk namespace. Temporary accounts will still be able to edit existing pages, or to create talk pages to start discussions. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 18:48, 1 October 2026 (UTC) : From a technical point of view, this would require moving <code>createpage</code> from unregistered users (<code><nowiki>*</nowiki></code>) to registered users (<code>user</code>), but that would mean every non-registered user may not be able to create pages in every namespace, but talk pages. : Another solution would be to add [[mw:Extension:ArticleCreationWorkflow]] to this project, but we don't have a system to create drafts (or similar). : And a final solution would be to create an edit filter disallowing unregistered users from creating pages in mainspace. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:43, 1 October 2026 (UTC) :: Just to note, please read the first point of [[m:Limits to configuration changes#Changes that are likely to be declined]] (Disable non-autoconfirmed page creation). [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:50, 1 October 2026 (UTC) :::What I'm proposing is that we require a registered account for page creation, not autoconfirmed. enwiki (as well as a few other wikis) already use this configuration - it's not new. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 19:58, 1 October 2026 (UTC) ::::I would propose the use of autoconfirmed, to better patrol new pages that are being created. There are countless advertisement pages being created on Wikibooks, usually in the user's userpage. The use of a registered account proposed by Omphalographer therefore may have some limitations. I agree with the proposal to make new pages strictly autoconfirmed. If a user wishes to create a page, there could be a feature for reviewers/patrollers to check such pages that are being created. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 13:36, 9 October 2026 (UTC) :::: Okay, but I provided some alternatives above. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 20:06, 1 October 2026 (UTC) : In that case, I have no objections here. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:03, 6 October 2026 (UTC) 0z7iz5id44uxsupuh3fil7jmcs64ryq 4675297 4675290 2026-10-09T14:53:35Z Codename Noreste 3441010 /* Disable (some) page creation by temporary accounts */ reply to TechVindicator ([[mw:c:Special:MyLanguage/User:JWBTH/CD|CD]]) 4675297 wikitext text/x-wiki __NEWSECTIONLINK__ {{Discussion Rooms}} {{Shortcut|WB:RFC|WB:PROPOSALS}} {{TOC left<!--|limit=2-->}} Welcome to the '''Proposals reading room'''. On this page, Wikibookians are free to talk about suggestions for improving Wikibooks. {{User:MiszaBot/config |archive = Wikibooks:Reading room/Proposals/%(year)d/%(monthname)s |algo = old(120d) |counter = 1 |key = 1f2adc5eee951900b65c7b981b786191 |minthreadstoarchive = 1 |minthreadsleft = 1 }} {{clear}} <!--Take threads to archive below this line--> <!--Add new threads to bottom of page--> == New gadget to browse subpages == Hi all! I developed a gadget to easily browse subpages through a collapsible menu, that I think might be useful in Wikibooks. Here's a little demo video: [[File:Subpages_gadget_demo.webm|frameless]] To test it yourself, add the following to [[Special:MyPage/common.js|your common.js]]: <syntaxhighlight lang="javascript"> mw.loader.load( '//www.mediawiki.org/w/load.php?modules=ext.gadget.Global-Subpages' ); </syntaxhighlight> If you find it useful, I can enable it as a gadget to make it generally available from the preferences. Thoughts? Cheers! [[User:Sophivorus|Sophivorus]] ([[User talk:Sophivorus|discuss]] • [[Special:Contributions/Sophivorus|contribs]]) 16:02, 2 July 2026 (UTC) :Wikibooks relies heavily on subpages, so this is a nice addition. Merci. ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 16:43, 2 July 2026 (UTC) :This could be extremely useful for books here!! I'll note, though, that it doesn't work quite right with the vector legacy skin (what I use). —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:20, 3 July 2026 (UTC) : @[[User:Sophivorus|Sophivorus]] I will be the one in charge installing this as a gadget since there is no objection, but what dependecies does this gadget need to use? You might also want to read Kittycataclysm's suggestion above. ''Muchos saludos''. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 23:08, 9 July 2026 (UTC) ::@[[User:Codename Noreste|Codename Noreste]] Hi! I just fixed the issue with Vector legacy and also for other skins. Regarding dependencies, this gadget requires <code>mediawiki.api</code> and <code>@wikimedia/codex</code>. If you want to take care of the installation, please do not copy-paste the source code, but rather load the global version using <code>mw.loader.load( '//www.mediawiki.org/w/load.php?modules=ext.gadget.Global-Subpages' );</code>, like other [[mw:Global gadgets|global gadgets]]. Thanks! [[User:Sophivorus|Sophivorus]] ([[User talk:Sophivorus|discuss]] • [[Special:Contributions/Sophivorus|contribs]]) 14:22, 22 July 2026 (UTC) ::: I put the code on the gadgets definition page @[[User:Sophivorus|Sophivorus]], but feel free to fix what I placed. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 21:45, 22 July 2026 (UTC) == Breadcrumbs in the title == Hi! I think breadcrumbs would be more intuitive, compact and cleaner if they were integrated into the title rather than below it, like so: <gallery> Wikisource breadcrumbs proposal (before).png|Current breadcrumbs Wikisource breadcrumbs proposal (after).png|Proposed breadcrumbs </gallery> What do you think? [[User:Sophivorus|Sophivorus]] ([[User talk:Sophivorus|discuss]] • [[Special:Contributions/Sophivorus|contribs]]) 16:02, 17 August 2026 (UTC) :I appreciate the effort, but I don't see a big difference or that one would be more usable than another. ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 19:14, 17 August 2026 (UTC) :I like proposal and I think it would be an improvement. Having the breadcrumbs twice, as in the current system, creates a redundant ui element. I also think the formatting around the forward slashes in the "new" version better conveys that they have specific technical meaning and are not part of the name of the page. --[[User:JCrue|JCrue]] ([[User talk:JCrue|discuss]] • [[Special:Contributions/JCrue|contribs]]) 14:52, 7 October 2026 (UTC) == Approve [[Wikibooks:CheckUser]] as a local policy? == Some of the text was based off of the global CheckUser policy, but in this case, should we approve [[Wikibooks:CheckUser]] as a local policy? There is a special clause allowing stewards to perform checks even during non-emergency situations (as set in [[Wikibooks:Global rights policy]]). I have yet to include a part where users may request CU checks. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 21:55, 13 September 2026 (UTC) :I'm somewhat just unsure on what the benefit of making this policy would be. Sure, there's strength in policy, of course. But this seems to be doing fine overall as an information page, no? It doesn't differ very much from the global CU policy, so I'm not sure that a page without any Wikibooks-specific information really benefits from policy status. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 00:22, 14 September 2026 (UTC) :I would {{support}} this. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 00:26, 20 September 2026 (UTC) == FlaggedRevs again == <div class="cd-moveMark">''Moved from [[Wikibooks:Reading room/General#FlaggedRevs again]]. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:01, 1 October 2026 (UTC)''</div> Hi all. I already know there were various topics over the years about this subject, but I was considering for the project on whether we should remove this extension from this project, and go back to using MediaWiki's page patrol system. Currently, there is a backlog of more than 3000 unreviewed edits (some going back as far as a few years ago); that’s why I started this discussion here. {{collapse top}} * <code>autoreview</code> and <code>editor</code> would be <code>autopatrolled</code> and <code>patroller</code>, respectively. * <code>wgUseNPPatrol</code> and <code>wgUseFilePatrol</code> would be re-enabled for English Wikibooks. * <code>autopatrol</code> and <code>patrol</code> would be re-assigned back to sysops and their respective user groups. * <code>patroller</code> would also have <code>rollback</code> and <code>suppressredirect</code> and its rate limit untouched. {{collapse bottom}} Best, [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 12:56, 30 September 2026 (UTC) :{{s}} the removal of FlaggedRevs. Inasmuch as the extension works at all, it works best when it is used selectively on projects like Wikipedia, for individual high-traffic pages with lots of watchers which are subject to vandalism or controversy. Wikibooks is not a good use case for this extension. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 15:51, 1 October 2026 (UTC) :{{s}} I don't see any way that backlog ever gets cleared, frankly, and if it isn't going to be cleared, we might as well go to something easier, which is the normal page patrol system, which works well off of [[Special:NewPages]] already. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 00:31, 3 October 2026 (UTC) :{{neutral}} - Wikibooks is not a good use case for this extension, and with 3000 unreviewed edits with no progress at all, it does make sense to remove it. On the other hand, there could be a WikiProject to review each of these edits. For this reason, I am voting neutral [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 13:41, 3 October 2026 (UTC) :: There was the outdated [[Wikibooks:New page patrol]] before this project used FlaggedRevs. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:22, 3 October 2026 (UTC) :{{support}} the removal of FlaggedRevs from Wikibooks. It's a redundant extension that's not useful in this wiki. --[[User:Agusbou2015|Agusbou2015]] ([[User talk:Agusbou2015|discuss]] • [[Special:Contributions/Agusbou2015|contribs]]) 21:53, 3 October 2026 (UTC) :{{Support}}. Several years ago I spent hundreds of hours trying to do the first review of every page. I managed to get all the root pages done but only got as far as "E" for the other pages. While I was doing this I stopped reviewing changes - and in that time over a 1,000 out of date pages were in the list. I concluded it was an impossible task unless lots of people joined in the work but that didn't happen and I doubt it ever will. I do think it has value for Wikijunior in showing the last reviewed page rather than the possibly offensively vandalised latest revision, but other than that it's a waste of time. At some point the extension will get fully deprecated and we'll be forced to stop using it anyway. [[User:MarcGarver|MarcGarver]] ([[User talk:MarcGarver|discuss]] • [[Special:Contributions/MarcGarver|contribs]]) 09:53, 6 October 2026 (UTC) :Will <code>patroller</code> be granted automatically? [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 13:24, 6 October 2026 (UTC) :: Unfortunately, no. Since we will stop using FlaggedRevs, the patroller user group will not be granted automatically and thus will have to be manually given out by administrators. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:46, 6 October 2026 (UTC) :::@[[User:Codename Noreste|Codename Noreste]]: And are we planning on giving back the <code>patroller</code> right to existing reviewers? Or will they have to manually reapply? [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 02:30, 8 October 2026 (UTC) :::: I have a plan: any former reviewer who has been active recently in the past two years will have patroller rights. This will be done to reduce a huge amount of inactive former reviewers. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 12:26, 8 October 2026 (UTC) ::::Keep the name the same; just remove the reviewer right. After all, patrolling is a form of reviewing. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 18:52, 8 October 2026 (UTC) ::::: Do we have to use the term {{tq|reviewing}} instead of {{tq|patrolling}}? [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:57, 8 October 2026 (UTC) : If you take a look at the extended content, I also included what I also proposed too. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:19, 6 October 2026 (UTC) :{{comment}}. The [[mw:Extension:FlaggedRevs|FlaggedRevs extension]] is not recommended for production use, per Mediawiki. On this basis alone we should discontinue use of it. However, we haven't determined if page patrolling is the best replacement. There are [[mw:Content approval extensions|alternative extensions]] and the mediawiki page for FlaggedRevs specifically recommends [[mw:Extension:Approved Revs|'''Approved Revs extension''']]. We should determine which of page patrolling or these extensions is the most appropriate antivandalism tool first. (after all, according to [[Help:Tracking_changes#Reviewing_pages]], the purpose of FlaggedRevs is to be "our primary counter-vandalism tool"). --[[User:JCrue|JCrue]] ([[User talk:JCrue|discuss]] • [[Special:Contributions/JCrue|contribs]]) 14:48, 7 October 2026 (UTC) :: Approved Revs would require significant testing and approval per [[mw:Writing an extension for deployment]]. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 16:35, 7 October 2026 (UTC) == Disable (some) page creation by temporary accounts == Creating a new book, or adding a chapter to an existing book, is a significant action, and users performing this action should be available to discuss it. Additionally, in practice, most page creations by temp accounts are out of scope, if not outright vandalism. (See https://en.wikibooks.org/w/index.php?title=Special:Log&type=create for some examples.) As such, I'd like to propose that the wiki require a registered account to create pages in any non-talk namespace. Temporary accounts will still be able to edit existing pages, or to create talk pages to start discussions. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 18:48, 1 October 2026 (UTC) : From a technical point of view, this would require moving <code>createpage</code> from unregistered users (<code><nowiki>*</nowiki></code>) to registered users (<code>user</code>), but that would mean every non-registered user may not be able to create pages in every namespace, but talk pages. : Another solution would be to add [[mw:Extension:ArticleCreationWorkflow]] to this project, but we don't have a system to create drafts (or similar). : And a final solution would be to create an edit filter disallowing unregistered users from creating pages in mainspace. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:43, 1 October 2026 (UTC) :: Just to note, please read the first point of [[m:Limits to configuration changes#Changes that are likely to be declined]] (Disable non-autoconfirmed page creation). [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:50, 1 October 2026 (UTC) :::What I'm proposing is that we require a registered account for page creation, not autoconfirmed. enwiki (as well as a few other wikis) already use this configuration - it's not new. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 19:58, 1 October 2026 (UTC) ::::I would propose the use of autoconfirmed, to better patrol new pages that are being created. There are countless advertisement pages being created on Wikibooks, usually in the user's userpage. The use of a registered account proposed by Omphalographer therefore may have some limitations. I agree with the proposal to make new pages strictly autoconfirmed. If a user wishes to create a page, there could be a feature for reviewers/patrollers to check such pages that are being created. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 13:36, 9 October 2026 (UTC) ::::: You might want to read my point about limits to configuration changes. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:53, 9 October 2026 (UTC) :::: Okay, but I provided some alternatives above. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 20:06, 1 October 2026 (UTC) : In that case, I have no objections here. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:03, 6 October 2026 (UTC) 0lshc4bo67992k1thsoe3uctj6i7qo3 4675358 4675297 2026-10-10T00:19:05Z ~2026-40500-29 3615407 /* Disable (some) page creation by temporary accounts */ Reply oppose 4675358 wikitext text/x-wiki __NEWSECTIONLINK__ {{Discussion Rooms}} {{Shortcut|WB:RFC|WB:PROPOSALS}} {{TOC left<!--|limit=2-->}} Welcome to the '''Proposals reading room'''. On this page, Wikibookians are free to talk about suggestions for improving Wikibooks. {{User:MiszaBot/config |archive = Wikibooks:Reading room/Proposals/%(year)d/%(monthname)s |algo = old(120d) |counter = 1 |key = 1f2adc5eee951900b65c7b981b786191 |minthreadstoarchive = 1 |minthreadsleft = 1 }} {{clear}} <!--Take threads to archive below this line--> <!--Add new threads to bottom of page--> == New gadget to browse subpages == Hi all! I developed a gadget to easily browse subpages through a collapsible menu, that I think might be useful in Wikibooks. Here's a little demo video: [[File:Subpages_gadget_demo.webm|frameless]] To test it yourself, add the following to [[Special:MyPage/common.js|your common.js]]: <syntaxhighlight lang="javascript"> mw.loader.load( '//www.mediawiki.org/w/load.php?modules=ext.gadget.Global-Subpages' ); </syntaxhighlight> If you find it useful, I can enable it as a gadget to make it generally available from the preferences. Thoughts? Cheers! [[User:Sophivorus|Sophivorus]] ([[User talk:Sophivorus|discuss]] • [[Special:Contributions/Sophivorus|contribs]]) 16:02, 2 July 2026 (UTC) :Wikibooks relies heavily on subpages, so this is a nice addition. Merci. ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 16:43, 2 July 2026 (UTC) :This could be extremely useful for books here!! I'll note, though, that it doesn't work quite right with the vector legacy skin (what I use). —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:20, 3 July 2026 (UTC) : @[[User:Sophivorus|Sophivorus]] I will be the one in charge installing this as a gadget since there is no objection, but what dependecies does this gadget need to use? You might also want to read Kittycataclysm's suggestion above. ''Muchos saludos''. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 23:08, 9 July 2026 (UTC) ::@[[User:Codename Noreste|Codename Noreste]] Hi! I just fixed the issue with Vector legacy and also for other skins. Regarding dependencies, this gadget requires <code>mediawiki.api</code> and <code>@wikimedia/codex</code>. If you want to take care of the installation, please do not copy-paste the source code, but rather load the global version using <code>mw.loader.load( '//www.mediawiki.org/w/load.php?modules=ext.gadget.Global-Subpages' );</code>, like other [[mw:Global gadgets|global gadgets]]. Thanks! [[User:Sophivorus|Sophivorus]] ([[User talk:Sophivorus|discuss]] • [[Special:Contributions/Sophivorus|contribs]]) 14:22, 22 July 2026 (UTC) ::: I put the code on the gadgets definition page @[[User:Sophivorus|Sophivorus]], but feel free to fix what I placed. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 21:45, 22 July 2026 (UTC) == Breadcrumbs in the title == Hi! I think breadcrumbs would be more intuitive, compact and cleaner if they were integrated into the title rather than below it, like so: <gallery> Wikisource breadcrumbs proposal (before).png|Current breadcrumbs Wikisource breadcrumbs proposal (after).png|Proposed breadcrumbs </gallery> What do you think? [[User:Sophivorus|Sophivorus]] ([[User talk:Sophivorus|discuss]] • [[Special:Contributions/Sophivorus|contribs]]) 16:02, 17 August 2026 (UTC) :I appreciate the effort, but I don't see a big difference or that one would be more usable than another. ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 19:14, 17 August 2026 (UTC) :I like proposal and I think it would be an improvement. Having the breadcrumbs twice, as in the current system, creates a redundant ui element. I also think the formatting around the forward slashes in the "new" version better conveys that they have specific technical meaning and are not part of the name of the page. --[[User:JCrue|JCrue]] ([[User talk:JCrue|discuss]] • [[Special:Contributions/JCrue|contribs]]) 14:52, 7 October 2026 (UTC) == Approve [[Wikibooks:CheckUser]] as a local policy? == Some of the text was based off of the global CheckUser policy, but in this case, should we approve [[Wikibooks:CheckUser]] as a local policy? There is a special clause allowing stewards to perform checks even during non-emergency situations (as set in [[Wikibooks:Global rights policy]]). I have yet to include a part where users may request CU checks. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 21:55, 13 September 2026 (UTC) :I'm somewhat just unsure on what the benefit of making this policy would be. Sure, there's strength in policy, of course. But this seems to be doing fine overall as an information page, no? It doesn't differ very much from the global CU policy, so I'm not sure that a page without any Wikibooks-specific information really benefits from policy status. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 00:22, 14 September 2026 (UTC) :I would {{support}} this. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 00:26, 20 September 2026 (UTC) == FlaggedRevs again == <div class="cd-moveMark">''Moved from [[Wikibooks:Reading room/General#FlaggedRevs again]]. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:01, 1 October 2026 (UTC)''</div> Hi all. I already know there were various topics over the years about this subject, but I was considering for the project on whether we should remove this extension from this project, and go back to using MediaWiki's page patrol system. Currently, there is a backlog of more than 3000 unreviewed edits (some going back as far as a few years ago); that’s why I started this discussion here. {{collapse top}} * <code>autoreview</code> and <code>editor</code> would be <code>autopatrolled</code> and <code>patroller</code>, respectively. * <code>wgUseNPPatrol</code> and <code>wgUseFilePatrol</code> would be re-enabled for English Wikibooks. * <code>autopatrol</code> and <code>patrol</code> would be re-assigned back to sysops and their respective user groups. * <code>patroller</code> would also have <code>rollback</code> and <code>suppressredirect</code> and its rate limit untouched. {{collapse bottom}} Best, [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 12:56, 30 September 2026 (UTC) :{{s}} the removal of FlaggedRevs. Inasmuch as the extension works at all, it works best when it is used selectively on projects like Wikipedia, for individual high-traffic pages with lots of watchers which are subject to vandalism or controversy. Wikibooks is not a good use case for this extension. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 15:51, 1 October 2026 (UTC) :{{s}} I don't see any way that backlog ever gets cleared, frankly, and if it isn't going to be cleared, we might as well go to something easier, which is the normal page patrol system, which works well off of [[Special:NewPages]] already. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 00:31, 3 October 2026 (UTC) :{{neutral}} - Wikibooks is not a good use case for this extension, and with 3000 unreviewed edits with no progress at all, it does make sense to remove it. On the other hand, there could be a WikiProject to review each of these edits. For this reason, I am voting neutral [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 13:41, 3 October 2026 (UTC) :: There was the outdated [[Wikibooks:New page patrol]] before this project used FlaggedRevs. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:22, 3 October 2026 (UTC) :{{support}} the removal of FlaggedRevs from Wikibooks. It's a redundant extension that's not useful in this wiki. --[[User:Agusbou2015|Agusbou2015]] ([[User talk:Agusbou2015|discuss]] • [[Special:Contributions/Agusbou2015|contribs]]) 21:53, 3 October 2026 (UTC) :{{Support}}. Several years ago I spent hundreds of hours trying to do the first review of every page. I managed to get all the root pages done but only got as far as "E" for the other pages. While I was doing this I stopped reviewing changes - and in that time over a 1,000 out of date pages were in the list. I concluded it was an impossible task unless lots of people joined in the work but that didn't happen and I doubt it ever will. I do think it has value for Wikijunior in showing the last reviewed page rather than the possibly offensively vandalised latest revision, but other than that it's a waste of time. At some point the extension will get fully deprecated and we'll be forced to stop using it anyway. [[User:MarcGarver|MarcGarver]] ([[User talk:MarcGarver|discuss]] • [[Special:Contributions/MarcGarver|contribs]]) 09:53, 6 October 2026 (UTC) :Will <code>patroller</code> be granted automatically? [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 13:24, 6 October 2026 (UTC) :: Unfortunately, no. Since we will stop using FlaggedRevs, the patroller user group will not be granted automatically and thus will have to be manually given out by administrators. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:46, 6 October 2026 (UTC) :::@[[User:Codename Noreste|Codename Noreste]]: And are we planning on giving back the <code>patroller</code> right to existing reviewers? Or will they have to manually reapply? [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 02:30, 8 October 2026 (UTC) :::: I have a plan: any former reviewer who has been active recently in the past two years will have patroller rights. This will be done to reduce a huge amount of inactive former reviewers. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 12:26, 8 October 2026 (UTC) ::::Keep the name the same; just remove the reviewer right. After all, patrolling is a form of reviewing. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 18:52, 8 October 2026 (UTC) ::::: Do we have to use the term {{tq|reviewing}} instead of {{tq|patrolling}}? [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:57, 8 October 2026 (UTC) : If you take a look at the extended content, I also included what I also proposed too. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:19, 6 October 2026 (UTC) :{{comment}}. The [[mw:Extension:FlaggedRevs|FlaggedRevs extension]] is not recommended for production use, per Mediawiki. On this basis alone we should discontinue use of it. However, we haven't determined if page patrolling is the best replacement. There are [[mw:Content approval extensions|alternative extensions]] and the mediawiki page for FlaggedRevs specifically recommends [[mw:Extension:Approved Revs|'''Approved Revs extension''']]. We should determine which of page patrolling or these extensions is the most appropriate antivandalism tool first. (after all, according to [[Help:Tracking_changes#Reviewing_pages]], the purpose of FlaggedRevs is to be "our primary counter-vandalism tool"). --[[User:JCrue|JCrue]] ([[User talk:JCrue|discuss]] • [[Special:Contributions/JCrue|contribs]]) 14:48, 7 October 2026 (UTC) :: Approved Revs would require significant testing and approval per [[mw:Writing an extension for deployment]]. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 16:35, 7 October 2026 (UTC) == Disable (some) page creation by temporary accounts == Creating a new book, or adding a chapter to an existing book, is a significant action, and users performing this action should be available to discuss it. Additionally, in practice, most page creations by temp accounts are out of scope, if not outright vandalism. (See https://en.wikibooks.org/w/index.php?title=Special:Log&type=create for some examples.) As such, I'd like to propose that the wiki require a registered account to create pages in any non-talk namespace. Temporary accounts will still be able to edit existing pages, or to create talk pages to start discussions. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 18:48, 1 October 2026 (UTC) : From a technical point of view, this would require moving <code>createpage</code> from unregistered users (<code><nowiki>*</nowiki></code>) to registered users (<code>user</code>), but that would mean every non-registered user may not be able to create pages in every namespace, but talk pages. : Another solution would be to add [[mw:Extension:ArticleCreationWorkflow]] to this project, but we don't have a system to create drafts (or similar). : And a final solution would be to create an edit filter disallowing unregistered users from creating pages in mainspace. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:43, 1 October 2026 (UTC) :: Just to note, please read the first point of [[m:Limits to configuration changes#Changes that are likely to be declined]] (Disable non-autoconfirmed page creation). [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:50, 1 October 2026 (UTC) :::What I'm proposing is that we require a registered account for page creation, not autoconfirmed. enwiki (as well as a few other wikis) already use this configuration - it's not new. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 19:58, 1 October 2026 (UTC) ::::I would propose the use of autoconfirmed, to better patrol new pages that are being created. There are countless advertisement pages being created on Wikibooks, usually in the user's userpage. The use of a registered account proposed by Omphalographer therefore may have some limitations. I agree with the proposal to make new pages strictly autoconfirmed. If a user wishes to create a page, there could be a feature for reviewers/patrollers to check such pages that are being created. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 13:36, 9 October 2026 (UTC) ::::: You might want to read my point about limits to configuration changes. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:53, 9 October 2026 (UTC) :::: Okay, but I provided some alternatives above. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 20:06, 1 October 2026 (UTC) : In that case, I have no objections here. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:03, 6 October 2026 (UTC) :Why turn off potential good contributors by telling them they must register AND log-in in order to contribute? The problem at Wikibooks right now is the dearth of contributions, not vandalism, I think (?). :* Anons are already precluded from editing pages that have been "protected" by admins. :* Anon user contributions are automatically marked for Review before they become public :* There are less than 500 anon accounts that have contributed more than one edit to Wikibooks? :Is it really necessary to stop us from contributing to Wikibooks? [[Special:Contributions/~2026-40500-29|~2026-40500-29]] ([[User talk:~2026-40500-29|talk]]) 00:19, 10 October 2026 (UTC) 028h7l4o806jjxsmjijjbm6iblqaqh3 4675380 4675358 2026-10-10T00:48:44Z TechVindicator 3626296 /* Disable (some) page creation by temporary accounts */ reply 4675380 wikitext text/x-wiki __NEWSECTIONLINK__ {{Discussion Rooms}} {{Shortcut|WB:RFC|WB:PROPOSALS}} {{TOC left<!--|limit=2-->}} Welcome to the '''Proposals reading room'''. On this page, Wikibookians are free to talk about suggestions for improving Wikibooks. {{User:MiszaBot/config |archive = Wikibooks:Reading room/Proposals/%(year)d/%(monthname)s |algo = old(120d) |counter = 1 |key = 1f2adc5eee951900b65c7b981b786191 |minthreadstoarchive = 1 |minthreadsleft = 1 }} {{clear}} <!--Take threads to archive below this line--> <!--Add new threads to bottom of page--> == New gadget to browse subpages == Hi all! I developed a gadget to easily browse subpages through a collapsible menu, that I think might be useful in Wikibooks. Here's a little demo video: [[File:Subpages_gadget_demo.webm|frameless]] To test it yourself, add the following to [[Special:MyPage/common.js|your common.js]]: <syntaxhighlight lang="javascript"> mw.loader.load( '//www.mediawiki.org/w/load.php?modules=ext.gadget.Global-Subpages' ); </syntaxhighlight> If you find it useful, I can enable it as a gadget to make it generally available from the preferences. Thoughts? Cheers! [[User:Sophivorus|Sophivorus]] ([[User talk:Sophivorus|discuss]] • [[Special:Contributions/Sophivorus|contribs]]) 16:02, 2 July 2026 (UTC) :Wikibooks relies heavily on subpages, so this is a nice addition. Merci. ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 16:43, 2 July 2026 (UTC) :This could be extremely useful for books here!! I'll note, though, that it doesn't work quite right with the vector legacy skin (what I use). —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:20, 3 July 2026 (UTC) : @[[User:Sophivorus|Sophivorus]] I will be the one in charge installing this as a gadget since there is no objection, but what dependecies does this gadget need to use? You might also want to read Kittycataclysm's suggestion above. ''Muchos saludos''. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 23:08, 9 July 2026 (UTC) ::@[[User:Codename Noreste|Codename Noreste]] Hi! I just fixed the issue with Vector legacy and also for other skins. Regarding dependencies, this gadget requires <code>mediawiki.api</code> and <code>@wikimedia/codex</code>. If you want to take care of the installation, please do not copy-paste the source code, but rather load the global version using <code>mw.loader.load( '//www.mediawiki.org/w/load.php?modules=ext.gadget.Global-Subpages' );</code>, like other [[mw:Global gadgets|global gadgets]]. Thanks! [[User:Sophivorus|Sophivorus]] ([[User talk:Sophivorus|discuss]] • [[Special:Contributions/Sophivorus|contribs]]) 14:22, 22 July 2026 (UTC) ::: I put the code on the gadgets definition page @[[User:Sophivorus|Sophivorus]], but feel free to fix what I placed. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 21:45, 22 July 2026 (UTC) == Breadcrumbs in the title == Hi! I think breadcrumbs would be more intuitive, compact and cleaner if they were integrated into the title rather than below it, like so: <gallery> Wikisource breadcrumbs proposal (before).png|Current breadcrumbs Wikisource breadcrumbs proposal (after).png|Proposed breadcrumbs </gallery> What do you think? [[User:Sophivorus|Sophivorus]] ([[User talk:Sophivorus|discuss]] • [[Special:Contributions/Sophivorus|contribs]]) 16:02, 17 August 2026 (UTC) :I appreciate the effort, but I don't see a big difference or that one would be more usable than another. ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 19:14, 17 August 2026 (UTC) :I like proposal and I think it would be an improvement. Having the breadcrumbs twice, as in the current system, creates a redundant ui element. I also think the formatting around the forward slashes in the "new" version better conveys that they have specific technical meaning and are not part of the name of the page. --[[User:JCrue|JCrue]] ([[User talk:JCrue|discuss]] • [[Special:Contributions/JCrue|contribs]]) 14:52, 7 October 2026 (UTC) == Approve [[Wikibooks:CheckUser]] as a local policy? == Some of the text was based off of the global CheckUser policy, but in this case, should we approve [[Wikibooks:CheckUser]] as a local policy? There is a special clause allowing stewards to perform checks even during non-emergency situations (as set in [[Wikibooks:Global rights policy]]). I have yet to include a part where users may request CU checks. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 21:55, 13 September 2026 (UTC) :I'm somewhat just unsure on what the benefit of making this policy would be. Sure, there's strength in policy, of course. But this seems to be doing fine overall as an information page, no? It doesn't differ very much from the global CU policy, so I'm not sure that a page without any Wikibooks-specific information really benefits from policy status. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 00:22, 14 September 2026 (UTC) :I would {{support}} this. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 00:26, 20 September 2026 (UTC) == FlaggedRevs again == <div class="cd-moveMark">''Moved from [[Wikibooks:Reading room/General#FlaggedRevs again]]. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:01, 1 October 2026 (UTC)''</div> Hi all. I already know there were various topics over the years about this subject, but I was considering for the project on whether we should remove this extension from this project, and go back to using MediaWiki's page patrol system. Currently, there is a backlog of more than 3000 unreviewed edits (some going back as far as a few years ago); that’s why I started this discussion here. {{collapse top}} * <code>autoreview</code> and <code>editor</code> would be <code>autopatrolled</code> and <code>patroller</code>, respectively. * <code>wgUseNPPatrol</code> and <code>wgUseFilePatrol</code> would be re-enabled for English Wikibooks. * <code>autopatrol</code> and <code>patrol</code> would be re-assigned back to sysops and their respective user groups. * <code>patroller</code> would also have <code>rollback</code> and <code>suppressredirect</code> and its rate limit untouched. {{collapse bottom}} Best, [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 12:56, 30 September 2026 (UTC) :{{s}} the removal of FlaggedRevs. Inasmuch as the extension works at all, it works best when it is used selectively on projects like Wikipedia, for individual high-traffic pages with lots of watchers which are subject to vandalism or controversy. Wikibooks is not a good use case for this extension. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 15:51, 1 October 2026 (UTC) :{{s}} I don't see any way that backlog ever gets cleared, frankly, and if it isn't going to be cleared, we might as well go to something easier, which is the normal page patrol system, which works well off of [[Special:NewPages]] already. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 00:31, 3 October 2026 (UTC) :{{neutral}} - Wikibooks is not a good use case for this extension, and with 3000 unreviewed edits with no progress at all, it does make sense to remove it. On the other hand, there could be a WikiProject to review each of these edits. For this reason, I am voting neutral [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 13:41, 3 October 2026 (UTC) :: There was the outdated [[Wikibooks:New page patrol]] before this project used FlaggedRevs. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:22, 3 October 2026 (UTC) :{{support}} the removal of FlaggedRevs from Wikibooks. It's a redundant extension that's not useful in this wiki. --[[User:Agusbou2015|Agusbou2015]] ([[User talk:Agusbou2015|discuss]] • [[Special:Contributions/Agusbou2015|contribs]]) 21:53, 3 October 2026 (UTC) :{{Support}}. Several years ago I spent hundreds of hours trying to do the first review of every page. I managed to get all the root pages done but only got as far as "E" for the other pages. While I was doing this I stopped reviewing changes - and in that time over a 1,000 out of date pages were in the list. I concluded it was an impossible task unless lots of people joined in the work but that didn't happen and I doubt it ever will. I do think it has value for Wikijunior in showing the last reviewed page rather than the possibly offensively vandalised latest revision, but other than that it's a waste of time. At some point the extension will get fully deprecated and we'll be forced to stop using it anyway. [[User:MarcGarver|MarcGarver]] ([[User talk:MarcGarver|discuss]] • [[Special:Contributions/MarcGarver|contribs]]) 09:53, 6 October 2026 (UTC) :Will <code>patroller</code> be granted automatically? [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 13:24, 6 October 2026 (UTC) :: Unfortunately, no. Since we will stop using FlaggedRevs, the patroller user group will not be granted automatically and thus will have to be manually given out by administrators. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:46, 6 October 2026 (UTC) :::@[[User:Codename Noreste|Codename Noreste]]: And are we planning on giving back the <code>patroller</code> right to existing reviewers? Or will they have to manually reapply? [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 02:30, 8 October 2026 (UTC) :::: I have a plan: any former reviewer who has been active recently in the past two years will have patroller rights. This will be done to reduce a huge amount of inactive former reviewers. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 12:26, 8 October 2026 (UTC) ::::Keep the name the same; just remove the reviewer right. After all, patrolling is a form of reviewing. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 18:52, 8 October 2026 (UTC) ::::: Do we have to use the term {{tq|reviewing}} instead of {{tq|patrolling}}? [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:57, 8 October 2026 (UTC) : If you take a look at the extended content, I also included what I also proposed too. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:19, 6 October 2026 (UTC) :{{comment}}. The [[mw:Extension:FlaggedRevs|FlaggedRevs extension]] is not recommended for production use, per Mediawiki. On this basis alone we should discontinue use of it. However, we haven't determined if page patrolling is the best replacement. There are [[mw:Content approval extensions|alternative extensions]] and the mediawiki page for FlaggedRevs specifically recommends [[mw:Extension:Approved Revs|'''Approved Revs extension''']]. We should determine which of page patrolling or these extensions is the most appropriate antivandalism tool first. (after all, according to [[Help:Tracking_changes#Reviewing_pages]], the purpose of FlaggedRevs is to be "our primary counter-vandalism tool"). --[[User:JCrue|JCrue]] ([[User talk:JCrue|discuss]] • [[Special:Contributions/JCrue|contribs]]) 14:48, 7 October 2026 (UTC) :: Approved Revs would require significant testing and approval per [[mw:Writing an extension for deployment]]. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 16:35, 7 October 2026 (UTC) == Disable (some) page creation by temporary accounts == Creating a new book, or adding a chapter to an existing book, is a significant action, and users performing this action should be available to discuss it. Additionally, in practice, most page creations by temp accounts are out of scope, if not outright vandalism. (See https://en.wikibooks.org/w/index.php?title=Special:Log&type=create for some examples.) As such, I'd like to propose that the wiki require a registered account to create pages in any non-talk namespace. Temporary accounts will still be able to edit existing pages, or to create talk pages to start discussions. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 18:48, 1 October 2026 (UTC) : From a technical point of view, this would require moving <code>createpage</code> from unregistered users (<code><nowiki>*</nowiki></code>) to registered users (<code>user</code>), but that would mean every non-registered user may not be able to create pages in every namespace, but talk pages. : Another solution would be to add [[mw:Extension:ArticleCreationWorkflow]] to this project, but we don't have a system to create drafts (or similar). : And a final solution would be to create an edit filter disallowing unregistered users from creating pages in mainspace. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:43, 1 October 2026 (UTC) :: Just to note, please read the first point of [[m:Limits to configuration changes#Changes that are likely to be declined]] (Disable non-autoconfirmed page creation). [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:50, 1 October 2026 (UTC) :::What I'm proposing is that we require a registered account for page creation, not autoconfirmed. enwiki (as well as a few other wikis) already use this configuration - it's not new. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 19:58, 1 October 2026 (UTC) ::::I would propose the use of autoconfirmed, to better patrol new pages that are being created. There are countless advertisement pages being created on Wikibooks, usually in the user's userpage. The use of a registered account proposed by Omphalographer therefore may have some limitations. I agree with the proposal to make new pages strictly autoconfirmed. If a user wishes to create a page, there could be a feature for reviewers/patrollers to check such pages that are being created. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 13:36, 9 October 2026 (UTC) ::::: You might want to read my point about limits to configuration changes. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:53, 9 October 2026 (UTC) :::: Okay, but I provided some alternatives above. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 20:06, 1 October 2026 (UTC) : In that case, I have no objections here. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:03, 6 October 2026 (UTC) :Why turn off potential good contributors by telling them they must register AND log-in in order to contribute? The problem at Wikibooks right now is the dearth of contributions, not vandalism, I think (?). :* Anons are already precluded from editing pages that have been "protected" by admins. :* Anon user contributions are automatically marked for Review before they become public :* There are less than 500 anon accounts that have contributed more than one edit to Wikibooks? :Is it really necessary to stop us from contributing to Wikibooks? [[Special:Contributions/~2026-40500-29|~2026-40500-29]] ([[User talk:~2026-40500-29|talk]]) 00:19, 10 October 2026 (UTC) :: {{ping|~2026-40500-29}} The initial question was not whether registered accounts can contribute, it is whether temporary accounts can create pages. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 00:48, 10 October 2026 (UTC) 9jnmhgoedhf0zi3zi1nw51zlar4sgwu 4675430 4675380 2026-10-10T07:55:24Z EggRoll97 3178669 /* FlaggedRevs again */ Reply 4675430 wikitext text/x-wiki __NEWSECTIONLINK__ {{Discussion Rooms}} {{Shortcut|WB:RFC|WB:PROPOSALS}} {{TOC left<!--|limit=2-->}} Welcome to the '''Proposals reading room'''. On this page, Wikibookians are free to talk about suggestions for improving Wikibooks. {{User:MiszaBot/config |archive = Wikibooks:Reading room/Proposals/%(year)d/%(monthname)s |algo = old(120d) |counter = 1 |key = 1f2adc5eee951900b65c7b981b786191 |minthreadstoarchive = 1 |minthreadsleft = 1 }} {{clear}} <!--Take threads to archive below this line--> <!--Add new threads to bottom of page--> == New gadget to browse subpages == Hi all! I developed a gadget to easily browse subpages through a collapsible menu, that I think might be useful in Wikibooks. Here's a little demo video: [[File:Subpages_gadget_demo.webm|frameless]] To test it yourself, add the following to [[Special:MyPage/common.js|your common.js]]: <syntaxhighlight lang="javascript"> mw.loader.load( '//www.mediawiki.org/w/load.php?modules=ext.gadget.Global-Subpages' ); </syntaxhighlight> If you find it useful, I can enable it as a gadget to make it generally available from the preferences. Thoughts? Cheers! [[User:Sophivorus|Sophivorus]] ([[User talk:Sophivorus|discuss]] • [[Special:Contributions/Sophivorus|contribs]]) 16:02, 2 July 2026 (UTC) :Wikibooks relies heavily on subpages, so this is a nice addition. Merci. ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 16:43, 2 July 2026 (UTC) :This could be extremely useful for books here!! I'll note, though, that it doesn't work quite right with the vector legacy skin (what I use). —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:20, 3 July 2026 (UTC) : @[[User:Sophivorus|Sophivorus]] I will be the one in charge installing this as a gadget since there is no objection, but what dependecies does this gadget need to use? You might also want to read Kittycataclysm's suggestion above. ''Muchos saludos''. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 23:08, 9 July 2026 (UTC) ::@[[User:Codename Noreste|Codename Noreste]] Hi! I just fixed the issue with Vector legacy and also for other skins. Regarding dependencies, this gadget requires <code>mediawiki.api</code> and <code>@wikimedia/codex</code>. If you want to take care of the installation, please do not copy-paste the source code, but rather load the global version using <code>mw.loader.load( '//www.mediawiki.org/w/load.php?modules=ext.gadget.Global-Subpages' );</code>, like other [[mw:Global gadgets|global gadgets]]. Thanks! [[User:Sophivorus|Sophivorus]] ([[User talk:Sophivorus|discuss]] • [[Special:Contributions/Sophivorus|contribs]]) 14:22, 22 July 2026 (UTC) ::: I put the code on the gadgets definition page @[[User:Sophivorus|Sophivorus]], but feel free to fix what I placed. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 21:45, 22 July 2026 (UTC) == Breadcrumbs in the title == Hi! I think breadcrumbs would be more intuitive, compact and cleaner if they were integrated into the title rather than below it, like so: <gallery> Wikisource breadcrumbs proposal (before).png|Current breadcrumbs Wikisource breadcrumbs proposal (after).png|Proposed breadcrumbs </gallery> What do you think? [[User:Sophivorus|Sophivorus]] ([[User talk:Sophivorus|discuss]] • [[Special:Contributions/Sophivorus|contribs]]) 16:02, 17 August 2026 (UTC) :I appreciate the effort, but I don't see a big difference or that one would be more usable than another. ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 19:14, 17 August 2026 (UTC) :I like proposal and I think it would be an improvement. Having the breadcrumbs twice, as in the current system, creates a redundant ui element. I also think the formatting around the forward slashes in the "new" version better conveys that they have specific technical meaning and are not part of the name of the page. --[[User:JCrue|JCrue]] ([[User talk:JCrue|discuss]] • [[Special:Contributions/JCrue|contribs]]) 14:52, 7 October 2026 (UTC) == Approve [[Wikibooks:CheckUser]] as a local policy? == Some of the text was based off of the global CheckUser policy, but in this case, should we approve [[Wikibooks:CheckUser]] as a local policy? There is a special clause allowing stewards to perform checks even during non-emergency situations (as set in [[Wikibooks:Global rights policy]]). I have yet to include a part where users may request CU checks. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 21:55, 13 September 2026 (UTC) :I'm somewhat just unsure on what the benefit of making this policy would be. Sure, there's strength in policy, of course. But this seems to be doing fine overall as an information page, no? It doesn't differ very much from the global CU policy, so I'm not sure that a page without any Wikibooks-specific information really benefits from policy status. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 00:22, 14 September 2026 (UTC) :I would {{support}} this. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 00:26, 20 September 2026 (UTC) == FlaggedRevs again == <div class="cd-moveMark">''Moved from [[Wikibooks:Reading room/General#FlaggedRevs again]]. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:01, 1 October 2026 (UTC)''</div> Hi all. I already know there were various topics over the years about this subject, but I was considering for the project on whether we should remove this extension from this project, and go back to using MediaWiki's page patrol system. Currently, there is a backlog of more than 3000 unreviewed edits (some going back as far as a few years ago); that’s why I started this discussion here. {{collapse top}} * <code>autoreview</code> and <code>editor</code> would be <code>autopatrolled</code> and <code>patroller</code>, respectively. * <code>wgUseNPPatrol</code> and <code>wgUseFilePatrol</code> would be re-enabled for English Wikibooks. * <code>autopatrol</code> and <code>patrol</code> would be re-assigned back to sysops and their respective user groups. * <code>patroller</code> would also have <code>rollback</code> and <code>suppressredirect</code> and its rate limit untouched. {{collapse bottom}} Best, [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 12:56, 30 September 2026 (UTC) :{{s}} the removal of FlaggedRevs. Inasmuch as the extension works at all, it works best when it is used selectively on projects like Wikipedia, for individual high-traffic pages with lots of watchers which are subject to vandalism or controversy. Wikibooks is not a good use case for this extension. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 15:51, 1 October 2026 (UTC) :{{s}} I don't see any way that backlog ever gets cleared, frankly, and if it isn't going to be cleared, we might as well go to something easier, which is the normal page patrol system, which works well off of [[Special:NewPages]] already. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 00:31, 3 October 2026 (UTC) :{{neutral}} - Wikibooks is not a good use case for this extension, and with 3000 unreviewed edits with no progress at all, it does make sense to remove it. On the other hand, there could be a WikiProject to review each of these edits. For this reason, I am voting neutral [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 13:41, 3 October 2026 (UTC) :: There was the outdated [[Wikibooks:New page patrol]] before this project used FlaggedRevs. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:22, 3 October 2026 (UTC) :{{support}} the removal of FlaggedRevs from Wikibooks. It's a redundant extension that's not useful in this wiki. --[[User:Agusbou2015|Agusbou2015]] ([[User talk:Agusbou2015|discuss]] • [[Special:Contributions/Agusbou2015|contribs]]) 21:53, 3 October 2026 (UTC) :{{Support}}. Several years ago I spent hundreds of hours trying to do the first review of every page. I managed to get all the root pages done but only got as far as "E" for the other pages. While I was doing this I stopped reviewing changes - and in that time over a 1,000 out of date pages were in the list. I concluded it was an impossible task unless lots of people joined in the work but that didn't happen and I doubt it ever will. I do think it has value for Wikijunior in showing the last reviewed page rather than the possibly offensively vandalised latest revision, but other than that it's a waste of time. At some point the extension will get fully deprecated and we'll be forced to stop using it anyway. [[User:MarcGarver|MarcGarver]] ([[User talk:MarcGarver|discuss]] • [[Special:Contributions/MarcGarver|contribs]]) 09:53, 6 October 2026 (UTC) :Will <code>patroller</code> be granted automatically? [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 13:24, 6 October 2026 (UTC) :: Unfortunately, no. Since we will stop using FlaggedRevs, the patroller user group will not be granted automatically and thus will have to be manually given out by administrators. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:46, 6 October 2026 (UTC) :::@[[User:Codename Noreste|Codename Noreste]]: And are we planning on giving back the <code>patroller</code> right to existing reviewers? Or will they have to manually reapply? [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 02:30, 8 October 2026 (UTC) :::: I have a plan: any former reviewer who has been active recently in the past two years will have patroller rights. This will be done to reduce a huge amount of inactive former reviewers. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 12:26, 8 October 2026 (UTC) ::::Keep the name the same; just remove the reviewer right. After all, patrolling is a form of reviewing. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 18:52, 8 October 2026 (UTC) ::::: Do we have to use the term {{tq|reviewing}} instead of {{tq|patrolling}}? [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:57, 8 October 2026 (UTC) :::{{ping|Codename Noreste}} Is there a reason that we should not simply give the reviewer group the <code>patrol</code> right, and keep the auto-granting going? [[Wikibooks:Reviewers#Automatic criteria]] does not appear to be FlaggedRevs-specific, so auto-promotion should still be able to continue even without FlaggedRevs, and reviewers could simply become patrollers (in the technical sense). [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 07:55, 10 October 2026 (UTC) : If you take a look at the extended content, I also included what I also proposed too. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:19, 6 October 2026 (UTC) :{{comment}}. The [[mw:Extension:FlaggedRevs|FlaggedRevs extension]] is not recommended for production use, per Mediawiki. On this basis alone we should discontinue use of it. However, we haven't determined if page patrolling is the best replacement. There are [[mw:Content approval extensions|alternative extensions]] and the mediawiki page for FlaggedRevs specifically recommends [[mw:Extension:Approved Revs|'''Approved Revs extension''']]. We should determine which of page patrolling or these extensions is the most appropriate antivandalism tool first. (after all, according to [[Help:Tracking_changes#Reviewing_pages]], the purpose of FlaggedRevs is to be "our primary counter-vandalism tool"). --[[User:JCrue|JCrue]] ([[User talk:JCrue|discuss]] • [[Special:Contributions/JCrue|contribs]]) 14:48, 7 October 2026 (UTC) :: Approved Revs would require significant testing and approval per [[mw:Writing an extension for deployment]]. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 16:35, 7 October 2026 (UTC) == Disable (some) page creation by temporary accounts == Creating a new book, or adding a chapter to an existing book, is a significant action, and users performing this action should be available to discuss it. Additionally, in practice, most page creations by temp accounts are out of scope, if not outright vandalism. (See https://en.wikibooks.org/w/index.php?title=Special:Log&type=create for some examples.) As such, I'd like to propose that the wiki require a registered account to create pages in any non-talk namespace. Temporary accounts will still be able to edit existing pages, or to create talk pages to start discussions. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 18:48, 1 October 2026 (UTC) : From a technical point of view, this would require moving <code>createpage</code> from unregistered users (<code><nowiki>*</nowiki></code>) to registered users (<code>user</code>), but that would mean every non-registered user may not be able to create pages in every namespace, but talk pages. : Another solution would be to add [[mw:Extension:ArticleCreationWorkflow]] to this project, but we don't have a system to create drafts (or similar). : And a final solution would be to create an edit filter disallowing unregistered users from creating pages in mainspace. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:43, 1 October 2026 (UTC) :: Just to note, please read the first point of [[m:Limits to configuration changes#Changes that are likely to be declined]] (Disable non-autoconfirmed page creation). [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:50, 1 October 2026 (UTC) :::What I'm proposing is that we require a registered account for page creation, not autoconfirmed. enwiki (as well as a few other wikis) already use this configuration - it's not new. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 19:58, 1 October 2026 (UTC) ::::I would propose the use of autoconfirmed, to better patrol new pages that are being created. There are countless advertisement pages being created on Wikibooks, usually in the user's userpage. The use of a registered account proposed by Omphalographer therefore may have some limitations. I agree with the proposal to make new pages strictly autoconfirmed. If a user wishes to create a page, there could be a feature for reviewers/patrollers to check such pages that are being created. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 13:36, 9 October 2026 (UTC) ::::: You might want to read my point about limits to configuration changes. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:53, 9 October 2026 (UTC) :::: Okay, but I provided some alternatives above. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 20:06, 1 October 2026 (UTC) : In that case, I have no objections here. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:03, 6 October 2026 (UTC) :Why turn off potential good contributors by telling them they must register AND log-in in order to contribute? The problem at Wikibooks right now is the dearth of contributions, not vandalism, I think (?). :* Anons are already precluded from editing pages that have been "protected" by admins. :* Anon user contributions are automatically marked for Review before they become public :* There are less than 500 anon accounts that have contributed more than one edit to Wikibooks? :Is it really necessary to stop us from contributing to Wikibooks? [[Special:Contributions/~2026-40500-29|~2026-40500-29]] ([[User talk:~2026-40500-29|talk]]) 00:19, 10 October 2026 (UTC) :: {{ping|~2026-40500-29}} The initial question was not whether registered accounts can contribute, it is whether temporary accounts can create pages. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 00:48, 10 October 2026 (UTC) dvi0aczdx6k27zi3ykcvvrvv7f1y33h 4675439 4675430 2026-10-10T09:26:34Z ~2026-54469-87 3628046 /* Disable (some) page creation by temporary accounts */ Reply 4675439 wikitext text/x-wiki __NEWSECTIONLINK__ {{Discussion Rooms}} {{Shortcut|WB:RFC|WB:PROPOSALS}} {{TOC left<!--|limit=2-->}} Welcome to the '''Proposals reading room'''. On this page, Wikibookians are free to talk about suggestions for improving Wikibooks. {{User:MiszaBot/config |archive = Wikibooks:Reading room/Proposals/%(year)d/%(monthname)s |algo = old(120d) |counter = 1 |key = 1f2adc5eee951900b65c7b981b786191 |minthreadstoarchive = 1 |minthreadsleft = 1 }} {{clear}} <!--Take threads to archive below this line--> <!--Add new threads to bottom of page--> == New gadget to browse subpages == Hi all! I developed a gadget to easily browse subpages through a collapsible menu, that I think might be useful in Wikibooks. Here's a little demo video: [[File:Subpages_gadget_demo.webm|frameless]] To test it yourself, add the following to [[Special:MyPage/common.js|your common.js]]: <syntaxhighlight lang="javascript"> mw.loader.load( '//www.mediawiki.org/w/load.php?modules=ext.gadget.Global-Subpages' ); </syntaxhighlight> If you find it useful, I can enable it as a gadget to make it generally available from the preferences. Thoughts? Cheers! [[User:Sophivorus|Sophivorus]] ([[User talk:Sophivorus|discuss]] • [[Special:Contributions/Sophivorus|contribs]]) 16:02, 2 July 2026 (UTC) :Wikibooks relies heavily on subpages, so this is a nice addition. Merci. ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 16:43, 2 July 2026 (UTC) :This could be extremely useful for books here!! I'll note, though, that it doesn't work quite right with the vector legacy skin (what I use). —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:20, 3 July 2026 (UTC) : @[[User:Sophivorus|Sophivorus]] I will be the one in charge installing this as a gadget since there is no objection, but what dependecies does this gadget need to use? You might also want to read Kittycataclysm's suggestion above. ''Muchos saludos''. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 23:08, 9 July 2026 (UTC) ::@[[User:Codename Noreste|Codename Noreste]] Hi! I just fixed the issue with Vector legacy and also for other skins. Regarding dependencies, this gadget requires <code>mediawiki.api</code> and <code>@wikimedia/codex</code>. If you want to take care of the installation, please do not copy-paste the source code, but rather load the global version using <code>mw.loader.load( '//www.mediawiki.org/w/load.php?modules=ext.gadget.Global-Subpages' );</code>, like other [[mw:Global gadgets|global gadgets]]. Thanks! [[User:Sophivorus|Sophivorus]] ([[User talk:Sophivorus|discuss]] • [[Special:Contributions/Sophivorus|contribs]]) 14:22, 22 July 2026 (UTC) ::: I put the code on the gadgets definition page @[[User:Sophivorus|Sophivorus]], but feel free to fix what I placed. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 21:45, 22 July 2026 (UTC) == Breadcrumbs in the title == Hi! I think breadcrumbs would be more intuitive, compact and cleaner if they were integrated into the title rather than below it, like so: <gallery> Wikisource breadcrumbs proposal (before).png|Current breadcrumbs Wikisource breadcrumbs proposal (after).png|Proposed breadcrumbs </gallery> What do you think? [[User:Sophivorus|Sophivorus]] ([[User talk:Sophivorus|discuss]] • [[Special:Contributions/Sophivorus|contribs]]) 16:02, 17 August 2026 (UTC) :I appreciate the effort, but I don't see a big difference or that one would be more usable than another. ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 19:14, 17 August 2026 (UTC) :I like proposal and I think it would be an improvement. Having the breadcrumbs twice, as in the current system, creates a redundant ui element. I also think the formatting around the forward slashes in the "new" version better conveys that they have specific technical meaning and are not part of the name of the page. --[[User:JCrue|JCrue]] ([[User talk:JCrue|discuss]] • [[Special:Contributions/JCrue|contribs]]) 14:52, 7 October 2026 (UTC) == Approve [[Wikibooks:CheckUser]] as a local policy? == Some of the text was based off of the global CheckUser policy, but in this case, should we approve [[Wikibooks:CheckUser]] as a local policy? There is a special clause allowing stewards to perform checks even during non-emergency situations (as set in [[Wikibooks:Global rights policy]]). I have yet to include a part where users may request CU checks. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 21:55, 13 September 2026 (UTC) :I'm somewhat just unsure on what the benefit of making this policy would be. Sure, there's strength in policy, of course. But this seems to be doing fine overall as an information page, no? It doesn't differ very much from the global CU policy, so I'm not sure that a page without any Wikibooks-specific information really benefits from policy status. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 00:22, 14 September 2026 (UTC) :I would {{support}} this. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 00:26, 20 September 2026 (UTC) == FlaggedRevs again == <div class="cd-moveMark">''Moved from [[Wikibooks:Reading room/General#FlaggedRevs again]]. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:01, 1 October 2026 (UTC)''</div> Hi all. I already know there were various topics over the years about this subject, but I was considering for the project on whether we should remove this extension from this project, and go back to using MediaWiki's page patrol system. Currently, there is a backlog of more than 3000 unreviewed edits (some going back as far as a few years ago); that’s why I started this discussion here. {{collapse top}} * <code>autoreview</code> and <code>editor</code> would be <code>autopatrolled</code> and <code>patroller</code>, respectively. * <code>wgUseNPPatrol</code> and <code>wgUseFilePatrol</code> would be re-enabled for English Wikibooks. * <code>autopatrol</code> and <code>patrol</code> would be re-assigned back to sysops and their respective user groups. * <code>patroller</code> would also have <code>rollback</code> and <code>suppressredirect</code> and its rate limit untouched. {{collapse bottom}} Best, [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 12:56, 30 September 2026 (UTC) :{{s}} the removal of FlaggedRevs. Inasmuch as the extension works at all, it works best when it is used selectively on projects like Wikipedia, for individual high-traffic pages with lots of watchers which are subject to vandalism or controversy. Wikibooks is not a good use case for this extension. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 15:51, 1 October 2026 (UTC) :{{s}} I don't see any way that backlog ever gets cleared, frankly, and if it isn't going to be cleared, we might as well go to something easier, which is the normal page patrol system, which works well off of [[Special:NewPages]] already. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 00:31, 3 October 2026 (UTC) :{{neutral}} - Wikibooks is not a good use case for this extension, and with 3000 unreviewed edits with no progress at all, it does make sense to remove it. On the other hand, there could be a WikiProject to review each of these edits. For this reason, I am voting neutral [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 13:41, 3 October 2026 (UTC) :: There was the outdated [[Wikibooks:New page patrol]] before this project used FlaggedRevs. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:22, 3 October 2026 (UTC) :{{support}} the removal of FlaggedRevs from Wikibooks. It's a redundant extension that's not useful in this wiki. --[[User:Agusbou2015|Agusbou2015]] ([[User talk:Agusbou2015|discuss]] • [[Special:Contributions/Agusbou2015|contribs]]) 21:53, 3 October 2026 (UTC) :{{Support}}. Several years ago I spent hundreds of hours trying to do the first review of every page. I managed to get all the root pages done but only got as far as "E" for the other pages. While I was doing this I stopped reviewing changes - and in that time over a 1,000 out of date pages were in the list. I concluded it was an impossible task unless lots of people joined in the work but that didn't happen and I doubt it ever will. I do think it has value for Wikijunior in showing the last reviewed page rather than the possibly offensively vandalised latest revision, but other than that it's a waste of time. At some point the extension will get fully deprecated and we'll be forced to stop using it anyway. [[User:MarcGarver|MarcGarver]] ([[User talk:MarcGarver|discuss]] • [[Special:Contributions/MarcGarver|contribs]]) 09:53, 6 October 2026 (UTC) :Will <code>patroller</code> be granted automatically? [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 13:24, 6 October 2026 (UTC) :: Unfortunately, no. Since we will stop using FlaggedRevs, the patroller user group will not be granted automatically and thus will have to be manually given out by administrators. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:46, 6 October 2026 (UTC) :::@[[User:Codename Noreste|Codename Noreste]]: And are we planning on giving back the <code>patroller</code> right to existing reviewers? Or will they have to manually reapply? [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 02:30, 8 October 2026 (UTC) :::: I have a plan: any former reviewer who has been active recently in the past two years will have patroller rights. This will be done to reduce a huge amount of inactive former reviewers. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 12:26, 8 October 2026 (UTC) ::::Keep the name the same; just remove the reviewer right. After all, patrolling is a form of reviewing. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 18:52, 8 October 2026 (UTC) ::::: Do we have to use the term {{tq|reviewing}} instead of {{tq|patrolling}}? [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:57, 8 October 2026 (UTC) :::{{ping|Codename Noreste}} Is there a reason that we should not simply give the reviewer group the <code>patrol</code> right, and keep the auto-granting going? [[Wikibooks:Reviewers#Automatic criteria]] does not appear to be FlaggedRevs-specific, so auto-promotion should still be able to continue even without FlaggedRevs, and reviewers could simply become patrollers (in the technical sense). [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 07:55, 10 October 2026 (UTC) : If you take a look at the extended content, I also included what I also proposed too. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:19, 6 October 2026 (UTC) :{{comment}}. The [[mw:Extension:FlaggedRevs|FlaggedRevs extension]] is not recommended for production use, per Mediawiki. On this basis alone we should discontinue use of it. However, we haven't determined if page patrolling is the best replacement. There are [[mw:Content approval extensions|alternative extensions]] and the mediawiki page for FlaggedRevs specifically recommends [[mw:Extension:Approved Revs|'''Approved Revs extension''']]. We should determine which of page patrolling or these extensions is the most appropriate antivandalism tool first. (after all, according to [[Help:Tracking_changes#Reviewing_pages]], the purpose of FlaggedRevs is to be "our primary counter-vandalism tool"). --[[User:JCrue|JCrue]] ([[User talk:JCrue|discuss]] • [[Special:Contributions/JCrue|contribs]]) 14:48, 7 October 2026 (UTC) :: Approved Revs would require significant testing and approval per [[mw:Writing an extension for deployment]]. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 16:35, 7 October 2026 (UTC) == Disable (some) page creation by temporary accounts == Creating a new book, or adding a chapter to an existing book, is a significant action, and users performing this action should be available to discuss it. Additionally, in practice, most page creations by temp accounts are out of scope, if not outright vandalism. (See https://en.wikibooks.org/w/index.php?title=Special:Log&type=create for some examples.) As such, I'd like to propose that the wiki require a registered account to create pages in any non-talk namespace. Temporary accounts will still be able to edit existing pages, or to create talk pages to start discussions. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 18:48, 1 October 2026 (UTC) : From a technical point of view, this would require moving <code>createpage</code> from unregistered users (<code><nowiki>*</nowiki></code>) to registered users (<code>user</code>), but that would mean every non-registered user may not be able to create pages in every namespace, but talk pages. : Another solution would be to add [[mw:Extension:ArticleCreationWorkflow]] to this project, but we don't have a system to create drafts (or similar). : And a final solution would be to create an edit filter disallowing unregistered users from creating pages in mainspace. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:43, 1 October 2026 (UTC) :: Just to note, please read the first point of [[m:Limits to configuration changes#Changes that are likely to be declined]] (Disable non-autoconfirmed page creation). [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:50, 1 October 2026 (UTC) :::What I'm proposing is that we require a registered account for page creation, not autoconfirmed. enwiki (as well as a few other wikis) already use this configuration - it's not new. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 19:58, 1 October 2026 (UTC) ::::I would propose the use of autoconfirmed, to better patrol new pages that are being created. There are countless advertisement pages being created on Wikibooks, usually in the user's userpage. The use of a registered account proposed by Omphalographer therefore may have some limitations. I agree with the proposal to make new pages strictly autoconfirmed. If a user wishes to create a page, there could be a feature for reviewers/patrollers to check such pages that are being created. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 13:36, 9 October 2026 (UTC) ::::: You might want to read my point about limits to configuration changes. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:53, 9 October 2026 (UTC) :::: Okay, but I provided some alternatives above. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 20:06, 1 October 2026 (UTC) ::::APPLICATION FOR PAGE CREATION FOR THE CIVIL RIGHTS MOVEMENT AS SOUTH AFRICAN STATE POLITICAL PARTY [[Special:Contributions/~2026-54469-87|~2026-54469-87]] ([[User talk:~2026-54469-87|talk]]) 09:26, 10 October 2026 (UTC) : In that case, I have no objections here. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:03, 6 October 2026 (UTC) :Why turn off potential good contributors by telling them they must register AND log-in in order to contribute? The problem at Wikibooks right now is the dearth of contributions, not vandalism, I think (?). :* Anons are already precluded from editing pages that have been "protected" by admins. :* Anon user contributions are automatically marked for Review before they become public :* There are less than 500 anon accounts that have contributed more than one edit to Wikibooks? :Is it really necessary to stop us from contributing to Wikibooks? [[Special:Contributions/~2026-40500-29|~2026-40500-29]] ([[User talk:~2026-40500-29|talk]]) 00:19, 10 October 2026 (UTC) :: {{ping|~2026-40500-29}} The initial question was not whether registered accounts can contribute, it is whether temporary accounts can create pages. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 00:48, 10 October 2026 (UTC) oh2g6anf5a2aappj0hdq974eqno5c1b 4675440 4675439 2026-10-10T09:27:54Z Codename Noreste 3441010 /* Disable (some) page creation by temporary accounts */ delete comment by [[User:~2026-54469-87|~2026-54469-87]] ([[mw:c:Special:MyLanguage/User:JWBTH/CD|CD]]) 4675440 wikitext text/x-wiki __NEWSECTIONLINK__ {{Discussion Rooms}} {{Shortcut|WB:RFC|WB:PROPOSALS}} {{TOC left<!--|limit=2-->}} Welcome to the '''Proposals reading room'''. On this page, Wikibookians are free to talk about suggestions for improving Wikibooks. {{User:MiszaBot/config |archive = Wikibooks:Reading room/Proposals/%(year)d/%(monthname)s |algo = old(120d) |counter = 1 |key = 1f2adc5eee951900b65c7b981b786191 |minthreadstoarchive = 1 |minthreadsleft = 1 }} {{clear}} <!--Take threads to archive below this line--> <!--Add new threads to bottom of page--> == New gadget to browse subpages == Hi all! I developed a gadget to easily browse subpages through a collapsible menu, that I think might be useful in Wikibooks. Here's a little demo video: [[File:Subpages_gadget_demo.webm|frameless]] To test it yourself, add the following to [[Special:MyPage/common.js|your common.js]]: <syntaxhighlight lang="javascript"> mw.loader.load( '//www.mediawiki.org/w/load.php?modules=ext.gadget.Global-Subpages' ); </syntaxhighlight> If you find it useful, I can enable it as a gadget to make it generally available from the preferences. Thoughts? Cheers! [[User:Sophivorus|Sophivorus]] ([[User talk:Sophivorus|discuss]] • [[Special:Contributions/Sophivorus|contribs]]) 16:02, 2 July 2026 (UTC) :Wikibooks relies heavily on subpages, so this is a nice addition. Merci. ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 16:43, 2 July 2026 (UTC) :This could be extremely useful for books here!! I'll note, though, that it doesn't work quite right with the vector legacy skin (what I use). —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:20, 3 July 2026 (UTC) : @[[User:Sophivorus|Sophivorus]] I will be the one in charge installing this as a gadget since there is no objection, but what dependecies does this gadget need to use? You might also want to read Kittycataclysm's suggestion above. ''Muchos saludos''. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 23:08, 9 July 2026 (UTC) ::@[[User:Codename Noreste|Codename Noreste]] Hi! I just fixed the issue with Vector legacy and also for other skins. Regarding dependencies, this gadget requires <code>mediawiki.api</code> and <code>@wikimedia/codex</code>. If you want to take care of the installation, please do not copy-paste the source code, but rather load the global version using <code>mw.loader.load( '//www.mediawiki.org/w/load.php?modules=ext.gadget.Global-Subpages' );</code>, like other [[mw:Global gadgets|global gadgets]]. Thanks! [[User:Sophivorus|Sophivorus]] ([[User talk:Sophivorus|discuss]] • [[Special:Contributions/Sophivorus|contribs]]) 14:22, 22 July 2026 (UTC) ::: I put the code on the gadgets definition page @[[User:Sophivorus|Sophivorus]], but feel free to fix what I placed. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 21:45, 22 July 2026 (UTC) == Breadcrumbs in the title == Hi! I think breadcrumbs would be more intuitive, compact and cleaner if they were integrated into the title rather than below it, like so: <gallery> Wikisource breadcrumbs proposal (before).png|Current breadcrumbs Wikisource breadcrumbs proposal (after).png|Proposed breadcrumbs </gallery> What do you think? [[User:Sophivorus|Sophivorus]] ([[User talk:Sophivorus|discuss]] • [[Special:Contributions/Sophivorus|contribs]]) 16:02, 17 August 2026 (UTC) :I appreciate the effort, but I don't see a big difference or that one would be more usable than another. ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 19:14, 17 August 2026 (UTC) :I like proposal and I think it would be an improvement. Having the breadcrumbs twice, as in the current system, creates a redundant ui element. I also think the formatting around the forward slashes in the "new" version better conveys that they have specific technical meaning and are not part of the name of the page. --[[User:JCrue|JCrue]] ([[User talk:JCrue|discuss]] • [[Special:Contributions/JCrue|contribs]]) 14:52, 7 October 2026 (UTC) == Approve [[Wikibooks:CheckUser]] as a local policy? == Some of the text was based off of the global CheckUser policy, but in this case, should we approve [[Wikibooks:CheckUser]] as a local policy? There is a special clause allowing stewards to perform checks even during non-emergency situations (as set in [[Wikibooks:Global rights policy]]). I have yet to include a part where users may request CU checks. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 21:55, 13 September 2026 (UTC) :I'm somewhat just unsure on what the benefit of making this policy would be. Sure, there's strength in policy, of course. But this seems to be doing fine overall as an information page, no? It doesn't differ very much from the global CU policy, so I'm not sure that a page without any Wikibooks-specific information really benefits from policy status. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 00:22, 14 September 2026 (UTC) :I would {{support}} this. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 00:26, 20 September 2026 (UTC) == FlaggedRevs again == <div class="cd-moveMark">''Moved from [[Wikibooks:Reading room/General#FlaggedRevs again]]. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:01, 1 October 2026 (UTC)''</div> Hi all. I already know there were various topics over the years about this subject, but I was considering for the project on whether we should remove this extension from this project, and go back to using MediaWiki's page patrol system. Currently, there is a backlog of more than 3000 unreviewed edits (some going back as far as a few years ago); that’s why I started this discussion here. {{collapse top}} * <code>autoreview</code> and <code>editor</code> would be <code>autopatrolled</code> and <code>patroller</code>, respectively. * <code>wgUseNPPatrol</code> and <code>wgUseFilePatrol</code> would be re-enabled for English Wikibooks. * <code>autopatrol</code> and <code>patrol</code> would be re-assigned back to sysops and their respective user groups. * <code>patroller</code> would also have <code>rollback</code> and <code>suppressredirect</code> and its rate limit untouched. {{collapse bottom}} Best, [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 12:56, 30 September 2026 (UTC) :{{s}} the removal of FlaggedRevs. Inasmuch as the extension works at all, it works best when it is used selectively on projects like Wikipedia, for individual high-traffic pages with lots of watchers which are subject to vandalism or controversy. Wikibooks is not a good use case for this extension. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 15:51, 1 October 2026 (UTC) :{{s}} I don't see any way that backlog ever gets cleared, frankly, and if it isn't going to be cleared, we might as well go to something easier, which is the normal page patrol system, which works well off of [[Special:NewPages]] already. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 00:31, 3 October 2026 (UTC) :{{neutral}} - Wikibooks is not a good use case for this extension, and with 3000 unreviewed edits with no progress at all, it does make sense to remove it. On the other hand, there could be a WikiProject to review each of these edits. For this reason, I am voting neutral [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 13:41, 3 October 2026 (UTC) :: There was the outdated [[Wikibooks:New page patrol]] before this project used FlaggedRevs. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:22, 3 October 2026 (UTC) :{{support}} the removal of FlaggedRevs from Wikibooks. It's a redundant extension that's not useful in this wiki. --[[User:Agusbou2015|Agusbou2015]] ([[User talk:Agusbou2015|discuss]] • [[Special:Contributions/Agusbou2015|contribs]]) 21:53, 3 October 2026 (UTC) :{{Support}}. Several years ago I spent hundreds of hours trying to do the first review of every page. I managed to get all the root pages done but only got as far as "E" for the other pages. While I was doing this I stopped reviewing changes - and in that time over a 1,000 out of date pages were in the list. I concluded it was an impossible task unless lots of people joined in the work but that didn't happen and I doubt it ever will. I do think it has value for Wikijunior in showing the last reviewed page rather than the possibly offensively vandalised latest revision, but other than that it's a waste of time. At some point the extension will get fully deprecated and we'll be forced to stop using it anyway. [[User:MarcGarver|MarcGarver]] ([[User talk:MarcGarver|discuss]] • [[Special:Contributions/MarcGarver|contribs]]) 09:53, 6 October 2026 (UTC) :Will <code>patroller</code> be granted automatically? [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 13:24, 6 October 2026 (UTC) :: Unfortunately, no. Since we will stop using FlaggedRevs, the patroller user group will not be granted automatically and thus will have to be manually given out by administrators. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:46, 6 October 2026 (UTC) :::@[[User:Codename Noreste|Codename Noreste]]: And are we planning on giving back the <code>patroller</code> right to existing reviewers? Or will they have to manually reapply? [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 02:30, 8 October 2026 (UTC) :::: I have a plan: any former reviewer who has been active recently in the past two years will have patroller rights. This will be done to reduce a huge amount of inactive former reviewers. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 12:26, 8 October 2026 (UTC) ::::Keep the name the same; just remove the reviewer right. After all, patrolling is a form of reviewing. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 18:52, 8 October 2026 (UTC) ::::: Do we have to use the term {{tq|reviewing}} instead of {{tq|patrolling}}? [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:57, 8 October 2026 (UTC) :::{{ping|Codename Noreste}} Is there a reason that we should not simply give the reviewer group the <code>patrol</code> right, and keep the auto-granting going? [[Wikibooks:Reviewers#Automatic criteria]] does not appear to be FlaggedRevs-specific, so auto-promotion should still be able to continue even without FlaggedRevs, and reviewers could simply become patrollers (in the technical sense). [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 07:55, 10 October 2026 (UTC) : If you take a look at the extended content, I also included what I also proposed too. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:19, 6 October 2026 (UTC) :{{comment}}. The [[mw:Extension:FlaggedRevs|FlaggedRevs extension]] is not recommended for production use, per Mediawiki. On this basis alone we should discontinue use of it. However, we haven't determined if page patrolling is the best replacement. There are [[mw:Content approval extensions|alternative extensions]] and the mediawiki page for FlaggedRevs specifically recommends [[mw:Extension:Approved Revs|'''Approved Revs extension''']]. We should determine which of page patrolling or these extensions is the most appropriate antivandalism tool first. (after all, according to [[Help:Tracking_changes#Reviewing_pages]], the purpose of FlaggedRevs is to be "our primary counter-vandalism tool"). --[[User:JCrue|JCrue]] ([[User talk:JCrue|discuss]] • [[Special:Contributions/JCrue|contribs]]) 14:48, 7 October 2026 (UTC) :: Approved Revs would require significant testing and approval per [[mw:Writing an extension for deployment]]. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 16:35, 7 October 2026 (UTC) == Disable (some) page creation by temporary accounts == Creating a new book, or adding a chapter to an existing book, is a significant action, and users performing this action should be available to discuss it. Additionally, in practice, most page creations by temp accounts are out of scope, if not outright vandalism. (See https://en.wikibooks.org/w/index.php?title=Special:Log&type=create for some examples.) As such, I'd like to propose that the wiki require a registered account to create pages in any non-talk namespace. Temporary accounts will still be able to edit existing pages, or to create talk pages to start discussions. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 18:48, 1 October 2026 (UTC) : From a technical point of view, this would require moving <code>createpage</code> from unregistered users (<code><nowiki>*</nowiki></code>) to registered users (<code>user</code>), but that would mean every non-registered user may not be able to create pages in every namespace, but talk pages. : Another solution would be to add [[mw:Extension:ArticleCreationWorkflow]] to this project, but we don't have a system to create drafts (or similar). : And a final solution would be to create an edit filter disallowing unregistered users from creating pages in mainspace. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:43, 1 October 2026 (UTC) :: Just to note, please read the first point of [[m:Limits to configuration changes#Changes that are likely to be declined]] (Disable non-autoconfirmed page creation). [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:50, 1 October 2026 (UTC) :::What I'm proposing is that we require a registered account for page creation, not autoconfirmed. enwiki (as well as a few other wikis) already use this configuration - it's not new. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 19:58, 1 October 2026 (UTC) ::::I would propose the use of autoconfirmed, to better patrol new pages that are being created. There are countless advertisement pages being created on Wikibooks, usually in the user's userpage. The use of a registered account proposed by Omphalographer therefore may have some limitations. I agree with the proposal to make new pages strictly autoconfirmed. If a user wishes to create a page, there could be a feature for reviewers/patrollers to check such pages that are being created. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 13:36, 9 October 2026 (UTC) ::::: You might want to read my point about limits to configuration changes. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:53, 9 October 2026 (UTC) :::: Okay, but I provided some alternatives above. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 20:06, 1 October 2026 (UTC) : In that case, I have no objections here. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:03, 6 October 2026 (UTC) :Why turn off potential good contributors by telling them they must register AND log-in in order to contribute? The problem at Wikibooks right now is the dearth of contributions, not vandalism, I think (?). :* Anons are already precluded from editing pages that have been "protected" by admins. :* Anon user contributions are automatically marked for Review before they become public :* There are less than 500 anon accounts that have contributed more than one edit to Wikibooks? :Is it really necessary to stop us from contributing to Wikibooks? [[Special:Contributions/~2026-40500-29|~2026-40500-29]] ([[User talk:~2026-40500-29|talk]]) 00:19, 10 October 2026 (UTC) :: {{ping|~2026-40500-29}} The initial question was not whether registered accounts can contribute, it is whether temporary accounts can create pages. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 00:48, 10 October 2026 (UTC) dvi0aczdx6k27zi3ykcvvrvv7f1y33h Israeli History/Israel Today 0 209348 4675302 4377435 2026-10-09T17:05:57Z ~2026-40500-29 3615407 /* 7 October 2023 invasion from the Gaza Strip */ killed and abducted over a thousand civilians 4675302 wikitext text/x-wiki ==Israel Today== === The Economic Situation === Israel today is a thriving society, although facing great and formidable challenges. The state of Israel has survived the economic breakdown in the world's markets in 2008 and the Shekel came out as a strong currency. Stanley Fischer, the current governor of the Bank of Israel, is considered one of the greatest managers of central banks today, steered Israel's economy away from the crisis. === The Security Situation === Israel Defense Forces (abbreviated IDF) is considered among the smartest armies in the world. The reason for this is the ongoing conflict with parts of the Arab world, which today are mainly Syria, Hezbollah (Islamic militant group based in Lebanon) and Palestinian militias. Also, Israel routinely has to deal with attacks inside the country, such as suicide terrorists on buses and public places, as well as external offensive, such as repetitive rockets on civilian population. All of which often lead to military operations. ==Challenges for the future== In December 1966, before the West Bank was captured in the Six-Day War, Elad Peled authored a memo called "Jordan as a Military and Political Problem for Israel". In this memo, Peled argued that with the West Bank the Arab population of Israel would become a political majority between 2035 and 2050. The result, if the Israeli-Palestinian conflict had not been resolved by that time, would necessarily be a disaster scenario. Arabs would attempt to give West Bank inhabitants the right to return or other privileges. Jewish groups would retaliate by depriving Arabs of political rights, causing a nationwide revolt. The end of the scenario would be a "police state". Thus, Peled recommended that Israel allow Jordan to keep the West Bank.<ref>Segev 2007, pp.185-186.</ref> Despite this recommendation, the West Bank was captured, but there has been nothing to prevent Peled's scenario from playing out. By 2030, it is probable that Israel will either collapse as a civil society or become a multicultural state.<ref>[http://linkinghub.elsevier.com/retrieve/pii/S0147176701000451 "Towards the year 2030: can a civil society shared by Jews and Arabs evolve in Israel?" International Journal of Intercultural Relations, Volume 26, Issue 2, April 2002, Pages 153-168]</ref> Antisemitism is still a major issue today. Jewish people both inside and outside of Israel are wary of petty tyrants in all walks of life who scapegoat Jews for the world's problems and covertly or explicitly encourage hate crimes. For this reason, nearly all Jews hope that Israel will be able to retain Jewish political control in the future, creating a refuge for victims of racism and a nation where Jews can succeed in a global economy. If these freedoms are to be maintained in the 21st century, however, Israel must resolve the injustices towards both Arabs and Jews that plague its present situation. All mankind should hope for a peaceful Israel. == 7 October 2023 invasion from the Gaza Strip == On 7 October 2023, the paramilitary wings of Hamas, Palestinian Islamic Jihad, PRC, PFLP and DFLP launched a series of coordinated armed incursions into the Gaza envelope of neighboring Israel, the first invasion of Israeli home territory since the Arab-Israeli War of 1948. The paramilitary force killed and abducted over a thousand civilians of several nationalities during this invasion. ==References== {{reflist}} {{BookCat}} fig9bnjv8h7nsiocujm84asuq19bjhs Aros/User/Applications 0 237399 4675447 4675021 2026-10-10T11:44:38Z ~2026-54415-41 3628056 4675447 wikitext text/x-wiki ==Introduction== [[#Graphical Image Editing Art]] [[#Office Application]] [[#Audio]] [[#Misc Application]] [[#Games & Emulation]] [[#Application Guides]] [[#top|...to the top]] [[#top|...to the top]] Most apps can be opened on the Workbench (aka publicscreen pubscreen) which is the default display option but can offer a custom one set to your configurations (aka custom screen mode promotion). These custom ones tend to stack so the possible use of A-M/A-N method of switching between full screens and the ability to pull down screens as well If you are interested in creating or porting new software, see [http://en.wikibooks.org/wiki/Aros/Developer/Docs here] {| class="wikitable sortable" |- !width:30%;|Internet Applications !width:10%;|AROS(x86) !width:10%;|Commodore-Amiga OS 3.1 (68k) !width:10%;|Hyperion OS4(PPC) !width:10%;|MorphOS(PPC) |- |<!--Sub Menu-->Web Online Browser [], |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=network/browser Amelinium], Odyssey 2.0, [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=1175&highlight=odyssey&rowstart=100 Odyssey 3.0], [], |<!--Amiga OS-->[https://juen.in/ Amelinium], [https://blog.alb42.de/programs/amifox/ amifox] with [https://github.com/alb42/wrp wrp server], IBrowse*, [https://github.com/zapek/Voyager Voyager], [https://github.com/amigazen/aweb3/ AWeb 3.6 src], [https://github.com/matjam/aweb AWeb Src], [http://aminet.net/package/comm/www/NetSurf-m68k-sources Netsurf], [], |<!--AmigaOS4-->[ Odyssey OWB], [ Timberwolf (Firefox port 2011)], [http://amigaworld.net/modules/newbb/viewtopic.php?forum=32&topic_id=32847 OWB-mui], [http://strohmayer.org/owb/ OWB-Reaction], IBrowse*, [http://os4depot.net/index.php?function=showfile&file=network/browser/aweb.lha AWeb], Voyager, [http://www.os4depot.net/index.php?function=browse&cat=network/browser Netsurf], |<!--MorphOS-->Wayfarer, [http://fabportnawak.free.fr/owb/ Odyssey OWB], [ Netsurf], IBrowse*, AWeb, [], |- | |<!--AROS-->[], [https://blog.alb42.de/amitube/ Amitube], |<!--Amiga OS-->[https://blog.alb42.de/amitube/ Amitube], [ smtube], |<!--AmigaOS4-->[https://blog.alb42.de/amitube/ Amitube], getVide, |<!--MorphOS-->[ ytsearch],x |- | |<!--AROS-->Emailinium, [http://archives.arosworld.org/index.php?function=browse&cat=network/email SimpleMail], [http://sourceforge.net/projects/simplemail/files/ src], [https://github.com/jens-maus/yam YAM] |<!--Amiga OS-->Emailinium, [http://sourceforge.net/projects/simplemail/files/ SimpleMail], [https://github.com/jens-maus/yam YAM] |<!--AmigaOS4-->SimpleMail, YAM, |<!--MorphOS--> SimpleMail, YAM |- | | |<!--Amiga OS-->[https://github.com/charabaruk/WookieChat Wookiechat], AmIRC |<!--AmigaOS4-->Wookiechat |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=5 Wookiechat], [http://morphos.lukysoft.cz/en/vypis.php?kat=5 AmIRC], |- | |<!--AROS-->[https://github.com/kaffeine1/telegram-amiga telegram-amiga], [http://archives.arosworld.org/index.php?function=browse&cat=network/chat jabberwocky], |<!--Amiga OS-->[http://amitwitter.sourceforge.net/ AmiTwitter], CLIMM, SabreMSN, [https://sourceforge.net/projects/ajabberwocky/ jabberwocky], |<!--AmigaOS4-->[http://amitwitter.sourceforge.net/ AmiTwitter], SabreMSN, |<!--MorphOS-->[http://amitwitter.sourceforge.net/ AmiTwitter], [http://morphos.lukysoft.cz/en/vypis.php?kat=5 PolyglotNG], SabreMSN, |- |<!--Sub Menu-->Torrents |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=network/p2p ArTorr], |<!--Amiga OS--> |<!--AmigaOS4-->CTorrent, Transmission |<!--MorphOS-->MLDonkey, Beehive, [http://morphos.lukysoft.cz/en/vypis.php?kat=5 Transmission], CTorrent, |- |<!--Sub Menu-->FTP |<!--AROS-->[https://github.com/BlitterStudio/dopus5 Dopus5 Magellan], MarranoFTP, [https://aminet.net/package/comm/tcp/wput-0.3.4c.i386-aros wput i386 c src] |<!--Amiga OS-->[https://github.com/BlitterStudio/dopus5 Dopus5 Magellan], [http://aminet.net/package/comm/tcp/AmiFTP AmiFTP], AmiTradeCenter, ncFTP, [https://aminet.net/package/comm/tcp/sana2-tftpclient sana2 tftpclient c src] |<!--AmigaOS4-->[https://github.com/BlitterStudio/dopus5 Dopus5 Magellan], |<!--MorphOS-->[https://github.com/BlitterStudio/dopus5 Dopus5 Magellan], [http://morphos.lukysoft.cz/en/vypis.php?kat=5 Pftp], [http://aminet.net/package/comm/tcp/AmiFTP-1.935-OS4 AmiFTP], |- |<!--Sub Menu-->WYSIWYG Web Site Editor |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Internet Radio Streaming Audio [http://www.gnu.org/software/gnump3d/ gnump3d], [http://www.icecast.org/ Icecast2] Server (Broadcast) and Client (Listen), [ mpd], [http://darkice.sourceforge.net/ DarkIce], [http://www.dyne.org/software/muse/ Muse], |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=audio/misc], Mplayer (Icecast Client only), |<!--Amiga OS-->[https://github.com/sandlbn/TuneFinder TuneFinder C Src], [https://github.com/sandlbn/TuneFinderMUI TuneFinderMUI], [http://amigazeux.net/anr/ AmiNetRadio], [https://github.com/boingball/MintAMP MintAMP], [], |<!--AmigaOS4-->[http://www.tunenet.co.uk/ Tunenet], |<!--MorphOS-->Mplayer, AmiNetRadio, |- |<!--Sub Menu-->VoIP (Voice over IP) with SIP Client (Session Initiation Protocol) or Asterisk IAX2 Clients Softphone (skype like) |<!--AROS--> |<!--Amiga OS-->AmiPhone with Speak Freely, |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Weather Forecast |<!--AROS-->[http://sourceforge.net/projects/zunetools/files/ WeatherBar], [http://archives.arosworld.org/index.php?function=browse&cat=utility/workbench AWeather], [] |<!--Amiga OS-->[http://amigazeux.net/wetter/ Wetter], [https://github.com/emartisoft/AmiWeatherForecasts AmiWeatherForecasts src], |<!--AmigaOS4-->[http://os4depot.net/?function=showfile&file=utility/workbench/flipclock.lha FlipClock], |<!--MorphOS-->[http://amigazeux.net/wetter/ Wetter], |- |<!--Sub Menu-->Street Road Maps Route Planning GPS Tracking |<!--AROS-->[https://blog.alb42.de/programs/muimapparium/ MuiMapparium] [https://build.alb42.de/ Build of MuiMapp versions], |<!--Amiga OS-->AmiAtlas*, UKRoutePlus*, [http://blog.alb42.de/ AmOSM], |<!--AmigaOS4--> |<!--MorphOS-->[http://blog.alb42.de/programs/mapparium/ Mapparium], |- |<!--Sub Menu-->Clock and Date setting from the internet by network time protocol (NTP) [https://www.timeanddate.com/worldclock/ World Clock], [http://www.time.gov/ old standard NIST Internet Time Servers], |<!--AROS-->[https://github.com/bohunamiga/PiNTP PiNTP], [https://archives.arosworld.org/?function=showfile&file=utility/workbench/amitimekeeper.i386-aros.lha amitimekeeper with c src], [http://archives.arosworld.org/index.php?function=browse&cat=network/misc ntpsync], [], |<!--Amiga OS-->ntpsync, [http://aminet.net/package/util/cdity/AmiTimeKeeper amitimekeeper], [http://aminet.net/comm/misc/netclock netclock], [https://aminet.net/package/comm/net/sntp sntp], [http://aminet.net/package/util/time/ScreenTime ScreenTime], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Newsgroups |<!--AROS--> |<!--Amiga OS-->[http://newscoaster.sourceforge.net/ Newscoaster], [https://github.com/jens-maus/newsrog NewsRog], [ WorldNews], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->RSS |<!--AROS--> |<!--Amiga OS-->[https://github.com/Team-Boingo/AmiRSS AmiRSS src] |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->AI |<!--AROS--> |<!--Amiga OS-->[https://github.com/murinsel/AmigaAI Claude], [https://github.com/geekychris/amiga_mcp AI on host machine], [], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->BBS |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |} <nowiki>*</nowiki> Commercial product. ==Graphical Image Editing Art== {| class="wikitable sortable" |- !width:30%;|Image Editing !width:10%;|AROS(x86) !width:10%;|Commodore-Amiga OS 3.1(68k) !width:10%;|Hyperion OS4(PPC) !width:10%;|MorphOS(PPC) |- |<!--Sub Menu-->Pixel Raster Artwork [https://github.com/LibreSprite/LibreSprite LibreSprite based on GPL aseprite], [https://github.com/abetusk/hsvhero hsvhero], [], |<!--AROS-->[https://sourceforge.net/projects/zunetools/files/ZunePaint/ ZunePaint], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/edit LunaPaint], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/edit GrafX2], [ LodePaint needs OpenGL], |<!--Amiga OS-->[http://www.amigaforever.com/classic/download.html PPaint], GrafX2, [https://github.com/grovdata/Amiga_Sources/blob/master/software.md DeluxePaint], [http://www.amiforce.de/perfectpaint/perfectpaint.php PerfectPaint], Zoetrope, Brilliance2*, |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=graphics/edit LodePaint], GrafX2, |<!--MorphOS-->Sketch, Pixel*, GrafX2, [http://morphos.lukysoft.cz/en/vypis.php?kat=3 LunaPaint] |- |<!--Sub Menu-->Image viewing |<!--AROS-->[http://sourceforge.net/projects/zunetools/files/ ZuneView], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/viewer LookHere], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/viewer LoView], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/viewer PicShow] , [http://amigaworld.net/modules/newbb/viewtopic.php?mode=viewtopic&topic_id=31400&forum=32&start=80&viewmode=flat&order=0#583458 Picture Album], |<!--Amiga OS-->PicShow, PicView, Photoalbum, |<!--AmigaOS4-->WarpView, PicShow, flPhoto, Thumbs, [http://amigaworld.net/modules/newbb/viewtopic.php?mode=viewtopic&topic_id=31400&forum=32&start=80&viewmode=flat&order=0#583458 Picture Album], |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=3 ShowGirls], [http://amigaworld.net/modules/newbb/viewtopic.php?mode=viewtopic&topic_id=31400&forum=32&start=80&viewmode=flat&order=0#583458 Picture Album] |- |<!--Sub Menu-->Photography retouching / Image Manipulation like Photoshop(tm) |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=graphics/edit RNOEffects], |<!--Amiga OS-->[ Tecsoft Video Paint aka TVPaint], Photogenics*, ArtEffect*, ImageFX*, XiPaint, fxPaint, ImageMasterRT, Opalpaint, |<!--AmigaOS4-->WarpView, flPhoto, [http://www.os4depot.net/index.php?function=browse&cat=graphics/edit Photocrop] |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=3 ShowGirls], ImageFX*, |- |<!--Sub Menu-->Manage RAW picture folder galleries like Darktable, RAWtherapy, etc |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Graphic Format Converter - ICC profile support sRGB, Adobe RGB, XYZ and linear RGB |<!--AROS--> |<!--Amiga OS-->GraphicsConverter, ImageStudio, [http://www.coplabs.org/artpro.html ArtPro] |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Thumbnail Generator [], |<!--AROS-->[http://sourceforge.net/projects/zunetools/files/ ZuneView], [http://archives.arosworld.org/index.php?function=browse&cat=utility/shell Thumbnail Generator] |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Icon Editor |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=graphics/iconedit Archives], [http://archives.arosworld.org/index.php?function=browse&cat=utility/workbench Icon Toolbox], |<!--Amiga OS--> |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=graphics/iconedit IconEditor] |<!--MorphOS--> |- |<!--Sub Menu-->2D Pixel Art Animation |<!--AROS-->Lunapaint |<!--Amiga OS-->PPaint, AnimatED, Scala*, GoldDisk MovieSetter*, Walt Disney's Animation Studio*, ProDAD*, [https://github.com/historicalsource/DeluxePaint DeluxePaint src], Brilliance |<!--AmigaOS4--> |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=3 Titler] |- |<!--Sub Menu-->2D SVG based MovieSetter type |<!--AROS--> |<!--Amiga OS-->MovieSetter*, Fantavision* |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Morphing |<!--AROS-->[ GLMorph] |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->2D Cad (qcad->LibreCAD, etc.) |<!--AROS--> |<!--Amiga OS-->Xcad, MaxonCAD |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->3D Cad like FreeCad, BRL-CAD, OpenSCAD, AvoCADo, etc. using dxf, obj (vertices), blend, |<!--AROS--> |<!--Amiga OS-->XCad3d*, DynaCADD*, [https://aminet.net/package/gfx/3d/Cycas178_EN Cycas]*, |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->3D Model Rendering of glft (json) gbl (png jpg), usdz (USD files with materials, textures, and animations), FBX Filmbox is a proprietary Autodesk format, |<!--AROS-->POV-Ray |<!--Amiga OS-->[http://www.discreetfx.com./amigaproducts.html CINEMA 4D]*, POV-Ray, Lightwave3D*, Real3D*, Caligari24*, Reflections/Monzoom*, [https://github.com/privatosan/RayStorm Raystorm src], Tornado 3D, [https://github.com/AlphaPixel/Eric-Graham-1987-Juggler-Raytracer-1.0 Eric-Graham-1987-Juggler-Raytracer-1.0] |<!--AmigaOS4-->Blender, POV-Ray, Yafray |<!--MorphOS-->Blender, POV-Ray, Yafray |- |<!--Sub Menu-->3D Format Converter [], [], |<!--AROS-->[https://archives.arosworld.org/?function=showfile&file=graphics/convert/ 3doc.i386-aros], [], |<!--Amiga OS--> |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=showfile&file=graphics/convert/ivcon.lha IVCon] |<!--MorphOS--> |- |<!--Sub Menu-->Screen grabbing display |<!--AROS-->[ Screengrabber], [http://archives.arosworld.org/index.php?function=browse&cat=utility/misc snapit], [http://archives.arosworld.org/index.php?function=browse&cat=video/record screen recorder], [] |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Grab graphics music from apps [https://github.com/Malvineous/ripper6 ripper6], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Manage metadata of images [https://github.com/exiv2/exiv2 exiv2], [ EXIF/IPTC/XMP metadata manipulation], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |} <nowiki>*</nowiki> Commercial product. [[#top|...to the top]] ==Office Application== {| class="wikitable sortable" |- !width:30%;|Office !width:10%;|AROS (x86) !width:10%;|[http://en.wikipedia.org/wiki/Amiga_software Commodore-Amiga OS 3.1] (68k) !width:10%;|[http://en.wikipedia.org/wiki/AmigaOS_4 Hyperion OS4] (PPC) !width:10%;|[http://en.wikipedia.org/wiki/MorphOS MorphOS] (PPC) |- |<!--Sub Menu-->Office Suite |<!--AROS--> |<!--Amiga OS-->[ Softwood Final Office], [ Wordworth Office], [ Digita Office], [ The Works!], [ Europress Mini Office], [], [ Papyrus Office Demo], |<!--AmigaOS4--> |<!--MorphOS-->[ Papyrus Office], |- |<!--Sub Menu-->Word-processing |<!--AROS-->[https://finalwriter.godaddysites.com/ Final Writer 7*], [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=1995&rowstart=20&pid=12668#post_12668 Slovo], [https://github.com/sodero/MUI-Vim/releases MUI-Vim], [https://archives.arosworld.org/index.php?function=browse&cat=office/wordprocessing Cinnamon Writer], [], |<!--AmigaOS-->[ Softwood FinalCopy II*], Haage AmigaWriter*, Digita WordWorth*, Softwood FinalWriter*, Micro-Systems Excellence 3*, Arnor Protext, Rashumon, [ InterWord], [ KindWords], [WordPerfect], [ New Horizons Flow], [ CygnusEd Pro], [ Micro-systems Scribble], |<!--AmigaOS4-->AbiWord, [ CinnamonWriter], |<!--MorphOS-->[ Cinnamon Writer], [http://www.meta-morphos.org/viewtopic.php?topic=1246&forum=53 scriba], [http://morphos.lukysoft.cz/en/index.php Papyrus Office], |- |<!--Sub Menu-->Spreadsheets |<!--AROS-->[https://blog.alb42.de/programs/leu/ Leu], [https://archives.arosworld.org/index.php?function=browse&cat=office/spreadsheet], |<!--AmigaOS-->[https://aminet.net/package/biz/spread/ignition-src Ignition Src 1.3], [MaxiPlan 500 Plus], [OXXI Plan/IT v2.0 Speadsheet], [ Superplan], [ Creative Developments TurboCalc], [ ProCalc], [ InterSpread], [Digita DGCalc], [ Gold Disk Advantage], [ Micro-systems Analyze!] |<!--AmigaOS4-->Gnumeric, [https://ignition-amiga.sourceforge.net/ Ignition], |<!--MorphOS-->[ ignition], [http://morphos.lukysoft.cz/en/vypis.php Papyrus Office], |- |<!--Sub Menu-->Presentations |<!--AROS-->[http://www.hollywoood-mal.com/ Hollywood]*, |<!--Amiga OS-->[http://www.hollywoood-mal.com/ Hollywood]*, [https://github.com/evaneykelen/mediapoint-amiga MediaPoint C and asm], PointRider, Scala*, |<!--Amiga OS4-->[http://www.hollywoood-mal.com/ Hollywood]*, PointRider |<!--MorphOS-->[http://www.hollywoood-mal.com/ Hollywood]*, PointRider |- |<!--Sub Menu-->Databases |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=office/database BeeBase], |<!--Amiga OS-->Precision Superbase 4 Pro*, Arnor Prodata*, [https://sourceforge.net/projects/beebase/ BeeBase], Datastore, FinalData*, AmigaBase, Fiasco, Twist2*, [Digita DGBase], [], |<!--AmigaOS4-->BeeBase, SQLite, |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=6 BeeBase], |- |<!--Sub Menu-->PDF Viewing, editing and digital signatures |<!--AROS-->[https://github.com/tomaszstaniak/aros-foliopdf folio version of mupdf], [http://sourceforge.net/projects/arospdf/ ArosPDF via splash xpdf], [https://github.com/wattoc/AROS-vpdf vpdf], |<!--Amiga OS-->APDF |<!--AmigaOS4-->AmiPDF |<!--MorphOS-->APDF, vPDF, |- |<!--Sub Menu-->Note Taking markdown support like Obsidian like, joplin, OneNote, EverNotes, xournalpp, etc |<!--AROS--> |<!--Amiga OS-->[http://aminet.net/package/text/edit/Kickdown c src with reaction gui], [], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Study and analyse, collect, organize, annotate, cite, and share |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->PIM Personal Information Manager - Day Diary Planner Calendar App Filofax like |<!--AROS-->[ ], [ ], [ ], |<!--Amiga OS-->Digita Organiser*, On The Ball, Everyday Organiser, [ Contact Manager], |<!--AmigaOS4-->AOrganiser, |<!--MorphOS-->[http://polymere.free.fr/orga_en.html PolyOrga], |- |<!--Sub Menu-->Accounting |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=office/misc ETB], LoanCalc, [ ], [ ], [ ], |[ Digita Home Accounts2], Accountant, Small Business Accounts, Account Master, [ Amigabok], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Project Management Research |<!--AROS--> |<!--Amiga OS-->SuperGantt, SuperPlan, |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Desktop |<!--AROS-->Wanderer, Scalos, Workbook, DOpus5, |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS-->[https://github.com/zapek/Ambient Ambient Src] |- |<!--Sub Menu-->System Wide Search |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=utility/filetool Finder], [], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->System Wide Dictionary - multilingual [http://sourceforge.net/projects/babiloo/ Babiloo], [http://code.google.com/p/stardict-3/ StarDict], |<!--AROS-->[ ], |<!--AmigaOS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->System wide Thesaurus - multi lingual |<!--AROS-->[ ], |Kuma K-Roget*, |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Sticky Desktop Notes (post it type) |<!--AROS-->[http://aminet.net/package/util/wb/amimemos.i386-aros AmiMemos], [https://aminet.net/package/util/wb/amimemos.src-aros AmiMemos Src], [], |<!--Amiga OS-->[http://aminet.net/package/util/wb/StickIt-2.00 StickIt v2], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->DTP Desktop Publishing |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=graphics/edit RNOPublisher], |<!--Amiga OS-->[http://pagestream.org/ Pagestream]*, Professional Pro Page*, Saxon Publisher, Pagesetter, PenPal, |<!--AmigaOS4-->[http://pagestream.org/ Pagestream]* |<!--MorphOS-->[http://pagestream.org/ Pagestream]* |- |<!--Sub Menu-->Printing |<!--AROS-->Postscript 3 laser printers, [https://github.com/bohunamiga/MintPRINT MintPRINT AirPrint IPP], [ Ghostscript], [], |<!--Amiga OS-->[https://github.com/boingball/MintPRINT MintPRINT IPP], [https://github.com/Andiweli/AmiAirprint AmiAirprint], [http://www.irseesoft.de/tp_what.htm TurboPrint]*, [ GutenPrint], [https://aminet.net/package/comm/tcp/NetPrinter NetPrinter LPR], [], [], |<!--AmigaOS4-->(some native drivers), |<!--MorphOS-->early TurboPrint included, [https://aminet.net/package/comm/tcp/NetPrinter NetPrinter LPR], |- |<!--Sub Menu-->Scanning |<!--AROS-->[ SCANdal], [], |<!--Amiga OS-->FxScan*, ScanQuix*, [https://github.com/boingball/MintSCAN MintSCAN], |<!--AmigaOS4-->SCANdal (Sane) |<!--MorphOS-->SCANdal |- |<!--Sub Menu-->OCR |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=graphics/convert gOCR] |<!--AmigaOS--> |<!--AmigaOS4--> |<!--MorphOS-->[http://morphos-files.net/categories/office/text Tesseract] |- |<!--Sub Menu-->Text Editing |<!--AROS-->Jano Editor (already installed as Editor), [http://archives.arosworld.org/index.php?function=browse&cat=development/edit EdiSyn], [http://archives.arosworld.org/index.php?function=browse&cat=utility/text/edit Annotate], [https://archives.arosworld.org/index.php?function=browse&cat=development/edit Vim], [http://archives.arosworld.org/index.php?function=browse&cat=utility/text/edit FrexxEd] [https://github.com/vidarh/FrexxEd src], [ NoWinEd], |<!--Amiga OS-->[https://aminet.net/package/text/edit/TurboText20 TurboText20 ttx], Annotate, MicroGoldED/CubicIDE*, CygnusED*, Protext*, NoWinED, |<!--AmigaOS4-->Notepad, Annotate, CygnusED*, NoWinED, |<!--MorphOS-->MorphOS ED, NoWinED, GoldED/CubicIDE*, CygnusED*, Annotate, |- |<!--Sub Menu-->Office Fonts [http://sourceforge.net/projects/fontforge/files/fontforge-source/ Font Designer] |<!--AROS-->[ ], [ ], |<!--Amiga OS-->TypeSmith*, SaxonScript (GetFont Adobe Type 1), |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Drawing Vector |<!--AROS-->[http://sourceforge.net/projects/amifig/ ZuneFIG previously AmiFIG], [https://github.com/serk118/designworks-aros designworks aros 64bit] |<!--Amiga OS-->Drawstudio*, ProVector*, ArtExpression*, Professional Draw*, AmiFIG, MetaView, [https://gitlab.com/amigasourcecodepreservation/designworks Design Works Src], [], |<!--AmigaOS4-->MindSpace, [http://www.os4depot.net/index.php?function=browse&cat=graphics/edit amifig], |<!--MorphOS-->SteamDraw, [http://aminet.net/package/gfx/edit/amifig amiFIG], |- |<!--Sub Menu-->video conferencing (jitsi) |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->source code hosting |<!--AROS-->Gitlab, |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Remote Desktop (server) |<!--AROS-->[http://sourceforge.net/projects/zunetools/files/VNC_Server ArosVNCServer], |<!--Amiga OS-->[http://s.guillard.free.fr/AmiVNC/AmiVNC.htm AmiVNC], [http://dspach.free.fr/amiga/avnc/index.html AVNC] |<!--AmigaOS4-->[http://s.guillard.free.fr/AmiVNC/AmiVNC.htm AmiVNC] |MorphVNC, vncserver |- |<!--Sub Menu-->Remote Desktop (client) login and connect to another machine |<!--AROS-->[https://sourceforge.net/projects/zunetools/files/VNC_Client/ ArosVNC], [http://archives.arosworld.org/index.php?function=browse&cat=network/misc rdesktop], |<!--Amiga OS-->[http://twinvnc.free.fr/index.php?menu=01&lang=eng TwinVNC], [http://dspach.free.fr/amiga/vva/index.html VVA], [http://www.hd-zone.com/ RDesktop] |<!--AmigaOS4-->[http://twinvnc.free.fr/index.php?menu=01&lang=eng TwinVNC], [http://www.hd-zone.com/ RDesktop] |[http://twinvnc.free.fr/index.php?menu=01&lang=eng TwinVNC], [http://www.hd-zone.com/ RDesktop] |- |<!--Sub Menu-->notifications |<!--AROS--> |<!--Amiga OS-->Ranchero |<!--AmigaOS4-->Ringhio |<!--MorphOS-->MagicBeacon |- |<!--Sub Menu-->Biometric facial logins and fingerprint security features |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |} <nowiki>*</nowiki> Commercial product. [[#top|...to the top]] ==Audio== {| class="wikitable sortable" |- !width:30%;|Audio !width:10%;|AROS(x86) !width:10%;|Commodore-Amiga OS 3.1(68k) !width:10%;|Hyperion OS4(PPC) !width:10%;|MorphOS(PPC) |- |<!--Sub Menu-->Playing playback Audio like MP3, [https://github.com/chrg127/gmplayer NSF], [https://github.com/kode54/lazyusf miniusf .usflib] [https://gitlab.com/kode54/psflib with pfslib], [], [], etc |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=video/play Mplayer], [ HarmonyPlayer hp], [http://www.a500.org/downloads/audio/index.xhtml playcdda] CDs, [ WildMidi Player], [https://bszili.morphos.me/ UADE mod player], [], [ RNOTunes], [ mp3Player], [], |<!--Amiga OS-->AmiNetRadio, AmigaAmp, playOGG, [https://codeberg.org/tygre/amimodradio amimodradio] |<!--AmigaOS4-->TuneNet, SimplePlay, AmigaAmp, TKPlayer |AmiNetRadio, Mplayer, Kaya, AmigaAmp |- |<!--Sub Menu-->Editing Audio |<!--AROS-->[ Audio Evolution 4] |<!--Amiga OS-->[https://sourceforge.net/projects/hd-rec/ HD-Rec Src], [http://www.sonicpulse.de/eng/news.html SoundFX], [ Samplitude], |<!--AmigaOS4-->[https://sourceforge.net/projects/hd-rec/ HD-Rec], AmiSoundED, [http://os4depot.net/?function=showfile&file=audio/record/audioevolution4.lha Audio Evolution 4] |[http://www.hd-rec.de/HD-Rec/index.php?site=home HD-Rec], |- |<!--Sub Menu-->Editing Tracker Music |<!--AROS-->[https://github.com/hitchhikr/protrekkr Protrekkr], [ Schism Tracker], [http://archives.arosworld.org/index.php?function=browse&cat=audio/tracker MilkyTracker], [http://www.hivelytracker.com/ HivelyTracker], [ Radium in AROS already], [http://www.a500.org/downloads/development/index.xhtml libMikMod], |<!--Amiga OS-->MilkyTracker, HivelyTracker, DigiBooster, Octamed SoundStudio, [https://github.com/elindstrom/soundtracker soundtracker], |<!--AmigaOS4-->MilkyTracker, HivelyTracker, GoatTracker |MilkyTracker, GoatTracker, DigiBooster, |- |<!--Sub Menu-->Editing Music [], [https://github.com/kmatheussen/camd CAMD] and/or staves and musical notes on manuscript [https://github.com/ratchov/midish midish] midi sequencer |<!--AROS-->[http://bnp.hansfaust.de/ Bars and Pipes], [], [], |<!--Amiga OS-->[http://bnp.hansfaust.de/ Bars'n'Pipes], MusicX* David "Talin" Joiner & Craig Weeks (for Notator-X), Deluxe Music Construction Set DMCS2*, [https://github.com/timoinutilis/midi-sequencer-amigaos Horny c Src] [https://github.com/kas1e/midi-sequencer-amigaos/tree/master/HornyGCC HornyGCC OS4 src] [https://github.com/capehill/midi-sequencer-amigaos Horny OS4 fork src] [https://www.amigans.net/modules/newbb/viewtopic.php?start=0&topic_id=8143&order=ASC&status=&mode=0 OS4 thread], HD-Rec, [https://aminet.net/package/mus/midi/dominatorV1_51 Dominator], [https://github.com/royaltm/Amiga-midiIn Amiga-midiIn], [ Aegis Sonix 2.0] |<!--AmigaOS4-->[https://sourceforge.net/p/hd-rec/code/HEAD/tree/ HD-Rec Src], Rockbeat, [http://bnp.hansfaust.de/download.html Bars'n'Pipes], [https://github.com/gooofy/freeaction Horny OS4 src fork], Audio Evolution 4, |<!--MorphOS-->Bars'n'Pipes, |- |<!--Sub Menu-->Sound Sampling |<!--AROS-->[ Advanced AHI Recorder all], [https://archives.arosworld.org/index.php?function=browse&cat=audio/record Audio Evolution 4], [http://www.imica.net/SitePortalPage.aspx?siteid=1&did=162 Quick Record], [https://archives.arosworld.org/index.php?function=browse&cat=audio/misc SOX to get AIFF 16bit files], [https://github.com/aros-development-team/AROS/tree/master/workbench/tools/AHIRecord AHIRecord], |<!--Amiga OS-->[https://aminet.net/package/mus/edit/AudioEvolution3_src Audio Evolution 3 c src], [ Samplitude]*, Audiomaster IV*, |<!--AmigaOS4-->[https://github.com/timoinutilis/phonolith-amigaos phonolith c src], HD-Rec, Audio Evolution 4, |<!--MorphOS-->[https://sourceforge.net/p/hd-rec/code/HEAD/tree/ HD-Rec Src], Audio Evolution 4, |- |<!--Sub Menu-->Audio Processing like easyeffects so having limiter, compressor, convolver, equalizer and auto volume and many other plugins |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Live Looping or Audio Misc - Groovebox like |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->CD/DVD burn |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=utility IsoTools], [https://code.google.com/p/amiga-fryingpan/ FryingPan], |<!--Amiga OS-->FryingPan, [ MakeCD], |<!--AmigaOS4-->FryingPan, AmiDVD, |<!--MorphOS-->[http://www.amiga.org/forums/printthread.php?t=58736 FryingPan], Jalopeano, |- |<!--Sub Menu-->CD/DVD audio rip |<!--AROS-->Lame, [http://www.imica.net/SitePortalPage.aspx?siteid=1&cfid=0&did=167 Quick CDrip], |<!--Amiga OS-->Lame, |<!--AmigaOS4-->Lame, |<!--MorphOS-->Lame, |- |<!--Sub Menu-->MP3 v1 and v2 Tagger |<!--AROS-->id3ren (v1), [http://archives.arosworld.org/index.php?function=browse&cat=audio/edit mp3info], |<!--Amiga OS--> |<!--AmigaOS4--> | |- |<!--Sub Menu-->Audio Convert |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=audio/misc Sox], [], |<!--Amiga OS-->[http://aminet.net/package/mus/misc/SoundBox SoundBox], [http://aminet.net/package/mus/misc/SoundBoxKey SoundBox Key], [http://aminet.net/package/mus/edit/SampleE SampleE], sox |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->DJ mixing jamming |<!--AROS--> |<!--Amiga OS-->[https://github.com/djh0ffman/PT1210 Hoffman PT1210 DJ tracker], [], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Radio Automation Software [http://www.rivendellaudio.org/ Rivendell], [http://code.campware.org/projects/livesupport/report/3 Campware LiveSupport], [http://www.sourcefabric.org/en/airtime/ SourceFabric AirTime], [http://www.ohloh.net/p/mediabox404 MediaBox404], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Speakers Audio Sonos Mains AC networked wired controlled *2005 ZP100 with ZP80 *2008 Zoneplayer ZP120 (multi-room wireless amp) ZP90 receiver only with CR100 controller, *2009 ZonePlayer S5, *2010 BR100 wireless Bridge (no support), *2011 Play:3 *2013 Bridge (no support), Play:1, *2016 Arc, Play:1, *Beam (Gen 2), Playbar, Ray, Era 100, Era 300, Roam, Move 2, *Sub (Gen 3), Sub Mini, Five, Amp S2 |<!--AROS-->SonosController |<!--Amiga OS-->SonosController |<!--AmigaOS4-->SonosController |<!--MorphOS-->SonosController |- |<!--Sub Menu-->Smart Speakers |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |} <nowiki>*</nowiki> Commercial product. [[#top|...to the top]] ==Video Creativity and Production== {| class="wikitable sortable" |- !width:30%;|Video !width:10%;|AROS(x86) !width:10%;|Commodore-Amiga OS 3.1(68k) !width:10%;|Hyperion OS4(PPC) !width:10%;|MorphOS(PPC) |- |<!--Sub Menu-->Playing Video |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=video/play Mplayer], [ VAMP], [http://www.a500.org/downloads/video/index.xhtml CDXL player], [http://www.a500.org/downloads/video/index.xhtml IffAnimPlay], [], |<!--Amiga OS-->Frogger*, AMP2, MPlayer, RiVA*, MooViD*, |<!--AmigaOS4-->DvPlayer, MPlayer |<!--MorphOS-->MPlayer, Frogger, AMP2, VLC |- |<!--Sub Menu-->Streaming Video and game streaming like OBS studio, Parsec, [https://github.com/lizardbyte/sunshine sunshine], [https://github.com/moonlight-stream/moonlight-qt moonlight], etc |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Playing DVD |<!--AROS-->[http://a-mc.biz/ AMC]*, Mplayer |<!--Amiga OS-->AMP2, Frogger |<!--AmigaOS4-->[http://a-mc.biz/ AMC]*, DvPlayer*, AMP2, |<!--MorphOS-->Mplayer |- |<!--Sub Menu-->Screen Recording |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=video/record Screenrecorder], [ ], [ ], [ ], [ ], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS-->Screenrecorder, |- |<!--Sub Menu-->Create Edit Individual Video - Amiga like OSs have no pro NLE |<!--AROS-->[ Mencoder], [ Quick Videos], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/edit AVIbuild], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/misc FrameBuild], FFMPEG, |<!--Amiga OS-->[ MainConcept Mainactor Broadcast*], [http://en.wikipedia.org/wiki/Video_Toaster Video Toaster*] with [https://discreetfx.com/openvideotoaster.html some c src], MacroSystem MovieShop 4.3*, proDAD Adorage*, [ IOSpirit VHI studio]*, [Gold Disk ShowMaker], [], |<!--AmigaOS4-->FFMpeg/GUI |<!--MorphOS-->Blender, Mencoder, FFmpeg |- |<!--Sub Menu-->Subtitle editor |<!--AROS-->[https://aminet.net/package/text/edit/Slarti_Arosx86ABIv0 Slarti_Arosx86ABIv0], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->IP-based video production workflows with High Dynamic Range (HDR), 10-bit color collaborative NDI, |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Blogging like Lemmy or kbin |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->VR face recognition for Vtubers |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->VR chatting Live2D models with Cubism type editor or [https://github.com/AyagamiDev/ayagami ayagami] like with zipped moc3 with model metadata (model3, cdi3) <pre> Model data (cmo3) Basic motions (can3) Background image (png) Set of files for embedding (runtime folder) • Model data (moc3) • Motion data (motion3.json) • Model settings file (model3.json) • Physics settings file (physics3.json) • Display auxiliary file (cdi3.json) </pre> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->VR chatting chatters .VRML models - standardized 3D file format for VR avatars |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->V-tubers V-tubing like Vseeface with Openseeface tracker or Vpuppr (virtual puppet project) for online live 2d / 3d art models rigging rigged LIV |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |} <nowiki>*</nowiki> Commercial product. [[#top|...to the top]] ==Misc Application== {| class="wikitable sortable" |- !width:30%;|Misc Application !width:10%;|AROS(x86) !width:10%;|Commodore-Amiga OS 3.1 (68k) !width:10%;|Hyperion OS4(PPC) !width:10%;|MorphOS(PPC) |- |<!--Sub Menu-->File Management |<!--AROS-->DOpus4, [https://github.com/BlitterStudio/dopus5 DOpus Magellan aka DOpus 5], [ Scalos], [ FileMaster], |<!--Amiga OS-->DOpus2, DOpus 4, [https://github.com/BlitterStudio/dopus5 Dopus5 Magellan], ClassAction, FileMaster, DirWork 2*, [https://github.com/RudolphRiedel/DiskMaster2 DiskMaster2 src], |<!--AmigaOS4-->DOpus4, [https://github.com/BlitterStudio/dopus5 Dopus5 Magellan], Filer, AmiDisk |<!--MorphOS-->DOpus4, [https://github.com/BlitterStudio/dopus5 Dopus5 Magellan], |- |<!--Sub Menu-->Package Application Installer |<!--AROS-->[https://github.com/tomaszstaniak?tab=repositories Pkg manager], [https://aros-pkg.azurewebsites.net/search?arch=x86_64 Pkg], [ InstallerNG], |<!--Amiga OS-->InstallerNG, Grunch, |<!--AmigaOS4-->Jack |<!--MorphOS-->Jack |- |<!--Sub Menu-->Compression archiver [https://github.com/FS-make-simple/paq9a paq9a], [], |<!--AROS-->XAD system is a toolkit designed for handling various file and disk archiver |<!--Amiga OS--> |<!--AmigaOS4-->[https://aminet.net/package/util/pack/decrunchmania_os4 Crunchmania CrM2 depacker], |<!--MorphOS--> |- |<!--Sub Menu-->Binary Hexadecimal Editor |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=development/edit Zaphod], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Filesystem Partition Editor formatter Disk Management |<!--AROS-->[https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=1440&highlight=partition&pid=8821#post_8821 QuickPart], [ HDToolBox] |<!--Amiga OS-->[https://github.com/stefanskotte/hdpart hdpart], [https://github.com/ChuckyGang/AmiPart AmiPart], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Filesystem Repair and backups |<!--AROS-->ArSFSDoctor, |<!--Amiga OS-->[https://aminet.net/package/disk/bakup/quarterback_src Quarterback Tools C and asm src], [ ], [ ], [ ], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->System Disk check, integrity and history [https://github.com/smartmontools/smartmontools smart tools], [], |<!--AROS--> |<!--Amiga OS-->[], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->File Verification / Repair |<!--AROS-->[https://arosarchives.os4depot.net/index.php?function=browse&cat=utility md5sum], [https://arosarchives.os4depot.net/index.php?function=browse&cat=utility/filetool asum], [http://archives.arosworld.org/index.php?function=browse&cat=utility/filetool workpar2] (PAR2), [http://zakalwe.fi/~shd/foss/cksfv/files/ compile cksfv from website], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS-->Par2, |- |<!--Sub Menu-->Multiple File renaming |<!--AROS-->DOpus 4 or 5, |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Anti Virus |<!--AROS--> |<!--Amiga OS-->VChecker, |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Random Wallpaper Desktop changer [ DOpus5], [ Scalos], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Alarm Clock, Timer, Stopwatch, Countdown |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=utility/workbench DClock], [http://aminet.net/util/time/AlarmClockAROS.lha AlarmClock], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Edge snap window tool |<!--AROS-->[https://github.com/kaffeine1/edgesnap edgesnap] |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |} ==Misc Application 2== {| class="wikitable sortable" |- !width:30%;|Misc Application !width:10%;|AROS(x86) !width:10%;|Commodore-Amiga OS 3.1(68k) !width:10%;|Hyperion OS4(PPC) !width:10%;|MorphOS(PPC) |- |<!--Sub Menu-->C/C++ IDE Integrated Development |<!--AROS-->[https://sourceforge.net/projects/aidea/ AIDEa], [ Murks], [], |<!--Amiga OS-->[http://devplex.awardspace.biz/cubic/index.html Cubic IDE]*, [ StormC], [https://github.com/jens-maus/amide amide], [], |<!--AmigaOS4-->CodeBench , [https://gitlab.com/boemann/codecraft CodeCraft], |<!--MorphOS-->[http://devplex.awardspace.biz/cubic/index.html Cubic IDE]*, |- |<!--Sub Menu-->C/C++ Text Editors |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=utility/text/edit FrexxEd], [https://github.com/vidarh/FrexxEd FrexxEd src], [http://archives.arosworld.org/index.php?function=browse&cat=utility/text/edit Annotate] with [https://www.onyxsoft.se/files/annotate_src.lha src], |<!--Amiga OS-->[ Protext], [ CED], [], |<!--AmigaOS4--> |<!--MorphOS-->[https://www.onyxsoft.se/annotate.html Annotate], |- |<!--Sub Menu-->Repository |<!--AROS-->[ Git] |<!--Amiga OS--> |<!--AmigaOS4-->Git |<!--MorphOS--> |- |<!--Sub Menu-->BASIC Computer Language |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=development/language Basic4SDL], [ Ace Basic], [ X-AMOS], [SDLBasic], [ Alvyn], |<!--Amiga OS-->[http://www.amiforce.de/main.php Amiblitz 3] with [https://github.com/AmiBlitz/AmiBlitz3 Asm src], [http://amos.condor.serverpro3.com/AmosProManual/contents/c1.html Amos Pro] with [https://github.com/AmiDARK/AmosProfessionalUnity-Official-Releases Asm src], [http://aminet.net/package/dev/basic/ace24dist ACE Basic], [https://github.com/gooofy/aqb aqb], [], |<!--AmigaOS4--> |<!--MorphOS-->sdlBasic |- |<!--Sub Menu-->Computer Languages Translation [https://tetracorp.github.io/guide/reverse-engineering-amiga.html], [https://amigasourcecodepreservation.gitlab.io/amiga-assembler-insider-guide/], [https://github.com/kermitfrog/Amiga-Re-Engineering Rust, Ghidra and FS-UAE], |<!--AROS--> |<!--Amiga OS-->[https://bitbucket.org/rhinoid/convert68000toc/src/main/ convert m68k seka asm-one to c], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Gui Creators |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=development/guitool MuiBuilder], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS-->[ MuiBuilder], |- |<!--Sub Menu-->Catalog .cd .ct Custom App Language Editors |<!--AROS-->FlexCat, [https://archives.arosworld.org/index.php?function=browse&cat=utility Flexcat GUI], [], |<!--Amiga OS-->[http://www.geit.de/deu_simplecat.html SimpleCat], FlexCat |<!--AmigaOS4-->[http://aminet.net/package/dev/misc/simplecat SimpleCat], FlexCat |<!--MorphOS-->[http://www.geit.de/deu_simplecat.html SimpleCat], FlexCat |- |<!--Sub Menu-->Cross Development |<!--AROS-->[], [], |<!--Amiga OS-->[https://github.com/geekychris/amiga_mcp amiga_mcp], [https://github.com/mbergmann-sh/AmigaED4-IDE AmigaED4-IDE], [https://lemonspawn.com/turbo-rascal-syntax-error-expected-but-begin/ Turbo Rascal], [], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |} <nowiki>*</nowiki> Commercial product. ==Misc Application 3== {| class="wikitable sortable" |- !width:30%;|Misc Application !width:10%;|AROS(x86) !width:10%;|Commodore-Amiga OS 3.1(68k) !width:10%;|Hyperion OS4(PPC) !width:10%;|MorphOS(PPC) |- |<!--Sub Menu-->System |<!--AROS-->[ SysExplorer], [ SysMon], [ Scout], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Terminals Shells CLIs |<!--AROS-->[https://github.com/tomaszstaniak/limpet limpet], [], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->OSK On Screen Keyboard |<!--AROS-->[], |<!--Amiga OS-->[https://aminet.net/util/wb/OSK.lha OSK] |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Screen Magnifier Magnifying Glass Magnification |<!--AROS-->[http://www.onyxsoft.se/files/zoomit.lha ZoomIT], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Comic Book CBR CBZ format reader viewer |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=graphics/viewer comics], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/viewer comicon], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Ebook Reader |<!--AROS-->[https://blog.alb42.de/programs/#legadon Legadon EPUB],[] |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Ebook Converter |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Text to Speech tts [https://github.com/JonathanFly/bark-installer Bark], [], |<!--AROS-->[ Echo " " >SPEAK:A1 inbuilt], [http://archives.arosworld.org/index.php?function=browse&cat=audio/misc flite], |<!--Amiga OS-->[http://www.text2speech.com translator], [https://github.com/sidick/narrator.wyoming narrator.wyoming], [], |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=search&tool=simple FLite] |<!--MorphOS-->[http://se.aminet.net/pub/aminet/mus/misc/ FLite] |- |<!--Sub Menu-->Speech Voice Recognition Dictation - [http://sourceforge.net/projects/cmusphinx/files/ CMU Sphinx], [http://julius.sourceforge.jp/en_index.php?q=en/index.html Julius], [http://www.isip.piconepress.com/projects/speech/index.html ISIP], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Speech Voice Changer [], [], [], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Screen Display Blanker screensaver |<!--AROS-->Blanker Commodity (built in), [https://archives.arosworld.org/index.php?function=browse&cat=graphics/screenblanker GarshneBlanker], [http://sourceforge.net/projects/gblanker/ GBlanker Src], [], |<!--Amiga OS-->MultiCX, |<!--AmigaOS4--> |<!--MorphOS-->ModernArt Blanker, |- |<!--Sub Menu-->Fortune Cookie Quotes Sayings |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=utility/misc AFortune], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |} ==Misc Application 4== {| class="wikitable sortable" |- !width:30%;|Misc Application !width:10%;|AROS(x86) !width:10%;|Commodore-Amiga OS 3.1(68k) !width:10%;|Hyperion OS4(PPC) !width:10%;|MorphOS(PPC) |- |<!--Sub Menu-->Fractals mandelbrot, etc |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=graphics/misc], |<!--Amiga OS-->ZoneXplorer, |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Landscape Rendering |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=graphics/raytrace WCS World Construction Set], |<!--Amiga OS-->[ Vista Pro], [http://en.wikipedia.org/wiki/World_Construction_Set World Construction Set] |<!--AmigaOS4-->[ WCS World Construction Set], |<!--MorphOS-->[ WCS World Construction Set], |- |<!--Sub Menu-->Astronomy [https://sourceforge.net/projects/skychart/ skychart freepascal], [], [], |<!--AROS-->[ Digital Almanac (ABIv0 only)], |<!--Amiga OS-->[http://aminet.net/search?query=planetarium Aminet search], [http://aminet.net/misc/sci/DA3V56ISO.zip Digital Almanac], [https://aminet.net/package/misc/sci/da3sourceV58 Src c V58], [ Galileo renamed to Distant Suns]*, [], |<!--AmigaOS4-->[http://sourceforge.net/projects/digital-almanac/ Digital Almanac], Distant Suns*, [http://www.digitaluniverse.org.uk/ Digital Universe]*, |<!--MorphOS-->[http://www.aminet.net/misc/sci/da3.lha Digital Almanac], [http://www.aminet.net/package/misc/sci/da3-mos-src Src c V56], |- |<!--Sub Menu-->Astrology [https://sourceforge.net/projects/skylendar/ skylendar], [https://github.com/CruiserOne/Astrolog Astrolog], [https://www.astrolog.org/astrolog/astfile.htm Astrology alt site], [https://saravali.github.io/download.html Maitreya], [https://github.com/alamahant/Asteria Asteria], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Genealogy History Family Tree Ancestry Records (FreeBMD, FreeREG, and FreeCEN file formats or GEDCOM GenTree) |<!--AROS--> |<!--Amiga OS--> [ Origins], [ Your Family Tree], [ ], [ ], [ ], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Languages |<!--AROS--> |<!--Amiga OS-->Fun School, |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Mathematics ([http://www-fourier.ujf-grenoble.fr/~parisse/install_en.html Xcas], etc.), |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=utility/scientific mathX] |<!--Amiga OS-->Maple V, mathX, Fun School, GCSE Maths, [ ], [ ], [ ], |<!--AmigaOS4-->Yacas |<!--MorphOS-->Yacas |- |<!--Sub Menu-->Maths Graph Function Plotting |<!--AROS-->[https://blog.alb42.de/programs/#MUIPlot MUIPlot], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->App Utility Launcher Dock toolbar |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=utility/docky BoingBar], [], |<!--Amiga OS-->[https://github.com/adkennan/DockBot Dockbot], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->3D Printer [https://github.com/OrcaSlicer/OrcaSlicer OrcaSlicer] |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->CNC control with laser and vinyl cutting |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->PCB design |<!--AROS--> |<!--Amiga OS-->[ ], [ ], [ ], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Digital Signage |<!--AROS-->Hollywood, Hollywood Designer |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->HAM radio, amateur radio, packet radio, [], [], [], [https://cemaxecuter.com/ Dragon OS], [https://github.com/km4ack/73Linux with 73 link update], [https://www.youtube.com/watch?v=YAL5KNePRSg video for], |<!--AROS--> |<!--Amiga OS-->[https://github.com/punktniklas/NiKom NiKom], [https://www.amigarealm.com/amiga/amicomms/comm4.htm Comm4], [https://www.amigarealm.com/archives/comms/aarug/ TNC Terminal Node Controller with packets over serial connections on Yaesu or Woxum handheld], [https://aminet.net/comm/misc AmiCom], [ with 7Plus file encoder/decoder], [ mksstv], [ RTTYam], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->modern smart home network like Home Assistant Automation Yellow, Green, Mosquitto, EMQX, |<!--AROS--> |<!--Amiga OS-->[https://github.com/evil4dmin/ami2ha HA], [https://github.com/sidick/midge mtqq.lib], [https://aminet.net/package/comm/tcp/AmiHomeassist-0.7 AmiHomeassist], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Teaching classroom learning training [https://github.com/moodle/moodle moodle], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |} <nowiki>*</nowiki> Commercial product. ==Games & Emulation== Some emulators/games require OpenGL to function and to adjust ahi prefs channels, frequency and unit0 and unit1 and [http://aros.sourceforge.net/documentation/users/shell/changetaskpri.php changetaskpri -1] Rom patching https://www.marcrobledo.com/RomPatcher.js/ https://www.romhacking.net/patch/ (ips, ups, bps, etc) and this other site supports the latter formats https://hack64.net/tools/patcher.php Free public domain roms for use with emulators can be found [http://www.pdroms.de/ here] as most of the rest are covered by copyright rules. If you like to read about old games see [http://retrogamingtimes.com/ here] and [http://www.armchairarcade.com/neo/ here] and a [http://www.vintagecomputing.com/ blog] about old computers. Possibly some of the [http://www.answers.com/topic/list-of-best-selling-computer-and-video-games best selling] of all time. [http://en.wikipedia.org/wiki/List_of_computer_system_emulators Wiki] with emulated systems list. [https://archive.gamehistory.org/ Archive of VGHF], [https://library.gamehistory.org/ Video Game History Foundation Library search] {| class="wikitable sortable" |- !width:10%;|Games [http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer Emulation] !width:10%;|AROS(x86) !width:10%;|AmigaOS3(68k) !width:10%;|AmigaOS4(PPC) !width:10%;|MorphOS(PPC) |- |<!--Sub Menu-->Games Emulation Amstrad CPC |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer], [ Caprice32 (OpenGL & pure SDL)], [ Arnold], [https://retroshowcase.gr/cpcbox-master/], |<!--Amiga OS--> |<!--AmigaOS4-->[http://os4depot.net/index.php?function=browse&cat=emulation/computer] |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=2], |- |<!--Sub Menu-->Games Emulation Apple2 and 2GS |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Arcade |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem Mame], [ SI Emu (ABIv0 only)], |<!--Amiga OS-->Mame, |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem xmame], amiarcadia, |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=2 Mame], |- |<!--Sub Menu-->Games Emulation Atari 2600 [], [], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem Stella], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Atari 5200 [https://github.com/wavemotion-dave/A5200DS A5200DS], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Atari 7800 |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Atari 400 800 130XL [https://github.com/wavemotion-dave/A8DS A8DS], [], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer Atari800], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Atari Lynx |<!--AROS-->[http://myfreefilehosting.com/f/6366e11bdf_1.93MB Handy (ABIv0 only)], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Atari Jaguar |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Bandai Wonderswan |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation BBC Micro and Acorn Electron [http://beehttps://bem-unix.bbcmicro.com/download.html BeebEm], [http://b-em.bbcmicro.com/ B-Em], [http://elkulator.acornelectron.co.uk/ Elkulator], [http://electrem.emuunlim.com/ ElectrEm], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Dragon 32 and Tandy CoCo [http://www.6809.org.uk/xroar/ xroar], [], |<!--AROS-->[], [], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Commodore C16 Plus4 |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Commodore C64 |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer Vice (ABIv0 only)], [], |<!--Amiga OS-->Frodo, |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem viceplus], |<!--MorphOS-->Vice, |- |<!--Sub Menu-->Games Emulation Commodore Amiga |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer Janus UAE], Emumiga, |<!--Amiga OS--> |<!--AmigaOS4-->[http://os4depot.net/index.php?function=browse&cat=emulation/computer UAE], |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=2 UAE], |- |<!--Sub Menu-->Games Emulation Japanese MSX MSX2 |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Mattel Intelivision |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Mattel Colecovision and Adam |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Milton Bradley (MB) Vectrex [ Vectrex OpenGL], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation PICO8 Pico-8 fantasy video game console [https://github.com/egordorichev/pemsa-sdl/ pemsa-sdl], [https://github.com/jtothebell/fake-08 fake-08], [https://github.com/Epicpkmn11/fake-08/tree/wip fake-08 fork], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Nintendo Gameboy |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem vba no sound], [], |<!--Amiga OS--> |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem vba] |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Nintendo NES |<!--AROS-->[ EmiNES], [http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem Fceu], [https://github.com/takahirox/nes-js?tab=readme-ov-file nes-js], [https://github.com/bfirsh/jsnes jsnes], [https://github.com/angelo-wf/NesJs NesJs], |<!--Amiga OS-->AmiNES, [http://www.dridus.com/~nyef/darcnes/ darcNES], |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem amines] |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Nintendo SNES |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem Zsnes], |<!--Amiga OS--> |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem warpsnes] |<!--MorphOS-->[http://fabportnawak.free.fr/snes/ Snes9x], |- |<!--Sub Menu-->Games Emulation Nintendo N64 *HLE and plugins [ mupen64], [https://github.com/ares-emulator/ares ares], [https://github.com/N64Recomp/N64Recomp N64Recomp], [https://github.com/rt64/rt64 rt64], [https://github.com/simple64/simple64 Simple64], *LLE [], |<!--AROS-->[http://code.google.com/p/mupen64plus/ Mupen64+], |<!--Amiga OS-->[http://code.google.com/p/mupen64plus/ Mupen64+], [http://aminet.net/package/misc/emu/tr-981125_src TR64], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->[ Nintendo Gamecube Wii] |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->[ Nintendo Wii U] |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->[https://github.com/yuzu-emu Nintendo Switch] |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation NEC PC Engine |<!--AROS-->[], [], [https://github.com/yhzmr442/jspce js-pce], |[http://www.hugo.fr.fm/ Hugo], [http://mednafen.sourceforge.net/ Mednafen], |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem tgemu] |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Sega Master System (SMS) |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem Dega], [http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem sms], |<!--Amiga OS--> |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem osmose] |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Sega Genesis/Megadrive |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem gp no sound], [http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem DGen], |<!--Amiga OS-->[http://code.google.com/p/genplus-gx/ Genplus], |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem genesisplus] |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Sega Saturn *HLE [https://mednafen.github.io/ mednafen], [http://yabause.org/ yabause], [], *LLE [], [], |<!--AROS-->? |<!--Amiga OS-->[http://yabause.org/ Yabause], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Sega Dreamcast *HLE [https://github.com/flyinghead/flycast flycast], [https://code.google.com/archive/p/nulldc/downloads NullDC], *LLE [], [], |<!--AROS-->? |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Sinclair ZX80 and ZX81 |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer], [], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Sinclair Spectrum |[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer Fuse (crackly sound)], [http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer SimCoupe], [ FBZX slow], [https://jsspeccy.zxdemo.org/ jsspeccy], [http://torinak.com/qaop/games qaop], |<!--Amiga OS-->[http://www.zophar.net/sinclair.html Speculator], [http://www.worldofspectrum.org/x128/index.html X128], |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/computer] |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Sinclair QL |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer], [], |<!--Amiga OS-->[http://aminet.net/package/misc/emu/QDOS4amiga1 QDOS4amiga] |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation SNK NeoGeo Pocket |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem], |<!--Amiga OS--> |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem gngeo], NeoPop, |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Sony PlayStation |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem FPSE], |<!--Amiga OS--> |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem FPSE] |<!--MorphOS--> |- |<!--Sub Menu-->[ Sony PS2] |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->[ Sony PS3] |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->[https://vita3k.org/ Sony Vita] |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->[https://github.com/shadps4-emu/shadPS4 PS4] |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation [http://en.wikipedia.org/wiki/Tangerine_Computer_Systems Tangerine] Oric and Atmos |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer Oricutron] |<!--Amiga OS--> |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem Oricutron] |<!--MorphOS-->[http://aminet.net/package/misc/emu/oricutron Oricutron] |- |<!--Sub Menu-->Games Emulation TI 99/4 99/4A [https://github.com/wavemotion-dave/DS994a DS994a], [], [https://js99er.net/#/ js99er], [], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer], |<!--Amiga OS-->[http://aminet.net/package/misc/emu/TI4Amiga TI4Amiga], [http://aminet.net/package/misc/emu/TI4Amiga_src TI4Amiga src in c], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation HP 38G 40GS 48 49G/50G Graphing Calculators |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation TI 58 83 84 85 86 - 89 92 Graphing Calculators |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games emulation Ms-Dos Dosbox type |<!--AROS-->[https://github.com/tomaszstaniak/aros-boxerapp Boxer] |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |} {| class="wikitable sortable" |- !width:10%;|Games [https://www.rockpapershotgun.com/ General] !width:10%;|AROS(x86) !width:10%;|AmigaOS3(68k) !width:10%;|AmigaOS4(PPC) !width:10%;|MorphOS(PPC) |- style="background:lightgrey;{{text default color}}; text-align:center; font-weight:bold;" | Games [https://www.trackawesomelist.com/michelpereira/awesome-open-source-games/ Open Source and others] || AROS || Amiga OS || Amiga OS4 || Morphos |- |<!--Sub Menu-->Games Action like [https://github.com/opentomb/OpenTomb opentomb], [https://github.com/LostArtefacts/TRX TRX formerly Tomb1Main], [https://github.com/TombEngine TombEngine], [http://archives.arosworld.org/index.php?function=browse&cat=game/action Thrust], [https://github.com/fragglet/sdl-sopwith sdl sopwith], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/action], [https://archives.arosworld.org/index.php?function=browse&cat=game/action BOH], [], |<!--Amiga OS-->[https://github.com/BSzili/OpenLara/tree/amiga/src source of openlara SDL2], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Adventure like [http://dotg.sourceforge.net/ DMJ], [https://github.com/kromenak/gengine Gabriel Knight 3], [http://www.sarien.net/ Sierra Sarien], [https://github.com/klembot/twinejs twine js], [https://github.com/QSPFoundation/qspgui Quest Soft Player QSP], [], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/adventure dmagnetic], [https://archives.arosworld.org/?function=browse&cat=emulation/misc ScummVM], [https://archives.arosworld.org/index.php?function=browse&cat=game/roleplaying frotz infocom], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Board like [https://github.com/aperture-software/colditz-escape escape from colditz], [], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/board], [http://amigan.1emu.net/releases Africa] |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Cards |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=game/card], [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=1443&rowstart=180&pid=12934#post_12934 Balatro], |<!--AmigaOS-->[http://home.arcor.de/amigasolitaire/e/welcome.html Reko], [https://github.com/samskivert/beschei-en beschei Src], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Misc [https://github.com/michelpereira/awesome-open-source-games Awesome open], [https://github.com/bobeff/open-source-games General Open Source], [https://github.com/SAT-R/sa2 Sonic Advance 2], [https://github.com/velorek1/cwordle Wordle type], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/misc], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games FPS like [https://aminet.net/package/game/shoot/D1X_Rebirth_AGA Descent D1X src], [https://github.com/DescentDevelopers/Descent3 Descent 3], [https://github.com/Fewnity/Counter-Strike-Nintendo-DS Counter-Strike-Nintendo-DS], [https://github.com/Aleph-One-Marathon/alephone Bungie Marathon 1994], [https://zdoom.org/downloads UzDoom opengl 3.3], [https://github.com/ZDoom/gzdoom gzdoom opengl 3+], [https://zdoom.org/downloads LZDoom opengl 2.1], [https://github.com/OpenXRay/xray-16 S.T.A.L.K.E.R Xray], [https://staniks.github.io/articles/serious-engine-networking-analysis/ Serious Sam] [https://github.com/Croteam-official/Serious-Engine Serious Engine 1] |<!--AROS-->Doom, Quake, [http://archives.arosworld.org/index.php?function=browse&cat=game/fps Quake 3 Arena (OpenGL)], [http://archives.arosworld.org/index.php?function=browse&cat=game/fps Cube (OpenGL)], [http://archives.arosworld.org/index.php?function=browse&cat=game/fps Assault Cube (OpenGL)], [http://archives.arosworld.org/index.php?function=browse&cat=game/fps Cube 2 Sauerbraten (OpenGL)], [http://fodquake.net/test/ FodQuake QuakeWorld], [https://archives.arosworld.org/index.php?function=browse&cat=game/fps Duke Nukem 3D], [https://archives.arosworld.org/index.php?function=browse&cat=game/fps Darkplaces Nexuiz Xonotic], [http://archives.arosworld.org/index.php?function=browse&cat=game/fps Doom 3 SDL (OpenGL)], [http://archives.arosworld.org/index.php?function=browse&cat=game/fps Hexenworld and Hexen 2], [https://archives.arosworld.org/index.php?function=browse&cat=game/fps Aliens vs Predator Gold 2000 avp (openGL)], [https://archives.arosworld.org/index.php?function=browse&cat=game/fps Odamex (openGL doom)], [https://archives.arosworld.org/?function=showfile&file=game/fps/ zgloom], [], [https://archives.arosworld.org/?function=showfile&file=game/fps/ ab3dhd], [], |<!--Amiga OS-->Doom, Quake, AB3D, Fears, Breathless, Gloom, |<!--AmigaOS4-->Doom, Quake, |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=12 Doom], Quake, Quake 3 Arena, |- |<!--Sub Menu-->Games MMORG like |<!--AROS-->[ Eternal Lands (OpenGL)], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Platform like |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/platform], [ Maze of Galious], [ Gish]*(openGL), [ Mega Mario], [https://archives.arosworld.org/?function=showfile&file=game/platform/ thextech SMBX], [http://www.gianas-return.de/ Giana's Return], [http://www.sqrxz.de/ Sqrxz], [www.sqrxz2.de/ Sqrxz 2], [http://www.sqrxz.de/sqrxz-3/ Sqrxz 3], [http://www.sqrxz.de/sqrxz-4/ Sqrxz 4], [http://archives.arosworld.org/index.php?function=browse&cat=game/platform Cave Story], [https://bszili.morphos.me/ Frogatto], [https://bszili.morphos.me/ OpenJazz], [https://archives.arosworld.org/?function=showfile&file=game/platform/ pekkakana2], [ Aquaria], [https://archives.arosworld.org/?function=showfile&file=game/platform/ sonic CD], [], |<!--Amiga OS-->[ Giana Sisters], [], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Puzzle [https://github.com/mariopartyrd/marioparty4/tree/port Party], [https://github.com/mdodis/OpenSolomonsKey OpenSolomonsKey], [], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/puzzle], [ Cubosphere (OpenGL)], [http://archives.arosworld.org/index.php?function=browse&cat=game/puzzle Candy Crisis], [http://bszili.morphos.me/ TailTale], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Racing [ Trigger Rally], [ VDrift], [http://www.ultimatestunts.nl/index.php?page=2&lang=en Ultimate Stunts], [http://maniadrive.raydium.org/ Mania Drive], [https://github.com/plowteam/donut Simpsons Hit and Run], [], |<!--AROS-->[ Super Tux Kart (OpenGL)], [http://www.dusabledanslherbe.eu/AROSPage/F1Spirit.30.html F1 Spirit (OpenGL)], [http://bszili.morphos.me/index.html MultiRacer], [https://bszili.morphos.me/ Speed Dreams], [https://archives.arosworld.org/?function=showfile&file=game/driving/dethrace-0.10.1.x86_64-aros-v11.zip Carmageddon dethrace 64bit], [http://maniadrive.raydium.org/index.php?downloads=yes maniadrive like trackmania], |<!--AmigaOS--> |<!--AmigaOS4-->[http://bszili.morphos.me/index.html Speed Dreams], |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=12], [http://bszili.morphos.me/index.html TORCS], |- |<!--Sub Menu-->Games 1st first person DRPG [https://wiki.rpg.net/index.php/Open_Game_Systems Misc], [https://github.com/OpenEnroth/OpenEnroth OpenEnroth MM], [] |<!--AROS-->[https://github.com/BSzili/aros-stuff Arx Libertatis], [http://www.playfuljs.com/a-first-person-engine-in-265-lines/ js raycaster], [https://github.com/Dorthu/es6-crpg webgl], [https://github.com/sonountaleban/AmiShockolate System Shock], [], [], |<!--AmigaOS-->Phantasie, Faery Tale, Dungeon Master, |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games 3rd third person action CRPG [https://sourceforge.net/projects/sumwars/ Summoning Wars], [https://www.solarus-games.org/ Solarus], [https://wiki.rpg.net/index.php/Open_Game_Systems Misc], [https://github.com/alexbatalov/fallout1-ce fallout ce], [https://github.com/rwengine/openrw gta3], [https://github.com/gta-reversed/gta-reversed gta3 sa], [https://github.com/mrxenginner/reVC gta3 vc revc], [https://github.com/jakobharder/burntime/tree/main Burntime], |<!--AROS-->[https://archives.arosworld.org/?function=showfile&file=game/strategy/ fheroes2 homm2], [https://archives.arosworld.org/?function=showfile&file=game/roleplaying/ breakhack], [https://archives.arosworld.org/?function=showfile&file=game/roleplaying/ devilutionx diablo 1 hellfire], [https://archives.arosworld.org/?function=showfile&file=game/roleplaying/ fallout 1], [https://archives.arosworld.org/?function=showfile&file=game/strategy/ stratagus], [https://archives.arosworld.org/?function=showfile&file=game/strategy/ hostile-takeover], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games isometric RPG [https://sourceforge.net/projects/sumwars/ Summoning Wars], [https://www.solarus-games.org/ Solarus], [https://wiki.rpg.net/index.php/Open_Game_Systems Misc], [https://github.com/topics/dungeon?l=javascript Dungeon], [], [https://github.com/clintbellanger/heroine-dusk JS Dusk], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/roleplaying nethack], [https://archives.arosworld.org/index.php?function=browse&cat=game/roleplaying GemRB], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games card based RPG [https://github.com/open-duelyst/duelyst Duelyst], [], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games turn based tactics RPG [], [], [], [], [], [], |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=game/strategy UFO AI], [http://play.freeciv.org/ FreeCiv], [https://juen.in Aveterna online civ], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Strategy [http://rtsgus.org/ RTSgus], [http://stargus.sourceforge.net/ Stargus], [https://github.com/KD-lab-Open-Source/Perimeter Perimeter], [https://matty77.itch.io/conflict-3049 conflict-3049], [https://github.com/ZeroK-RTS/Zero-K Zero-K multi player rts lua], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/strategy MegaGlest (OpenGL)], [https://archives.arosworld.org/?function=showfile&file=game/strategy/ signus], [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=1443&rowstart=140&pid=12446#post_12446 Wargus warcraft 2 setup], |<!--Amiga OS-->[https://aminet.net/package/game/strat/OpenDUNE_RTG OpenDUNE_RTG src] |<!--AmigaOS4--> |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=12] |- |<!--Sub Menu-->Games Rhythm, Beat, Step [], [], [https://clonehero.net/ clonehero], [https://github.com/MatteoGodzilla/Dj-Engine Dj-Engine], |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=game/misc Frets on Fire], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Shoot Em Ups [http://www.mhgames.org/oldies/formido/ Formido], [http://code.google.com/p/violetland/ Violetland], ||<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=game/action Open Tyrian], [http://www.parallelrealities.co.uk/projects/starfighter.php Starfighter], [ Alien Blaster], [https://github.com/OpenFodder/openfodder OpenFodder], [https://archives.arosworld.org/?function=showfile&file=game/action/ tbftss The Battle for the Solar System: the Pandora War] |<!--AmigaOS--> |<!--AmigaOS4-->[http://www.parallelrealities.co.uk/projects/starfighter.php Starfighter], [ The Battle for the Solar System: the Pandora War] |<!--MorphOS--> |- |<!--Sub Menu-->Games Simulations [http://scp.indiegames.us/ Freespace 2], [http://www.heptargon.de/gl-117/gl-117.html GL117], [http://code.google.com/p/corsix-th/ Theme Hospital], [http://code.google.com/p/freerct/ Rollercoaster Tycoon], [http://hedgewars.org/ Hedgewars], [https://github.com/raceintospace/raceintospace raceintospace], [https://github.com/Return-To-The-Roots RTTR Settlers 2], [https://github.com/OoliteProject/oolite oolite elite], [https://github.com/fesh0r/newkind newkind elite], [https://github.com/bohemiainteractive/cwr Arma Cold War Src], [https://github.com/endless-sky/endless-sky endless-sky], [https://github.com/pioneerspacesim/pioneer pioneer space command], |<!--AROS-->[https://github.com/tomaszstaniak/aros-micropolis micropolis] |<!--Amiga OS-->SimCity, SimAnt, Sim Hospital, Theme Park, [https://github.com/angree/openttd_amiga_68k openttd amiga_68k], |<!--AmigaOS4--> |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=12] |- |<!--Sub Menu-->Games Life Sim [https://github.com/ACreTeam/forest Animal Crossing], [ ], [], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Horror [https://github.com/Mikompilation/MikuPan Fatal Frame], [ ], [], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Sandbox Voxel Open World Exploration [https://github.com/ClassiCube/ Classicube],[http://www.michaelfogleman.com/craft/ Craft], [https://github.com/tothpaul/DelphiCraft DelphiCraft],[https://www.minetest.net/ Luanti formerly Minetest], [ infiniminer], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Battle Royale [https://bruh.io/ Play.Bruh.io], [https://www.coolmathgames.com/0-copter Copter Royale], [https://surviv.io/ Surviv.io], [https://nuggetroyale.io/#Ketchup Nugget Royale], [https://miniroyale2.io/ Miniroyale2.io], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Tower Defense [https://chriscourses.github.io/tower-defense/ HTML5], [https://github.com/SBardak/Tower-Defense-Game TD C++], [https://github.com/bdoms/love_defense LUA and LOVE], [https://github.com/HyOsori/Osori-WebGame HTML5], [https://github.com/PascalCorpsman/ConfigTD ConfigTD Pascal], [https://github.com/GloriousEggroll/wine-ge-custom Wine], [] |<!--AROS-->[https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=1443&rowstart=180&pid=12871#post_12871 Plants vs Zombies PvZ], |<!--Amiga OS-->[https://github.com/boingball/miggy-tower-defense miggy-tower-defense], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Visual Novel Engines [https://github.com/diane1f0cd/VisualNovelTemplate Visual Novel Template], [https://github.com/Kirilllive/tuesday-js Tuesday JS], [https://github.com/tejasnayak25/vnsutra vnsutra], [https://github.com/weetabix-su/renpsp-dev RenPSP], [https://github.com/Galladite27/ONScripter-EN ONScripter-EN], [https://github.com/NathanGuilhot/VNES-Raylib https://github.com/NathanGuilhot/VNES VNES in Raylib], [https://www.renpy.org/latest.html renpy ren'py python based], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Virtual Reality VR [https://gitlab.com/madsbuvi/openmw openmw vr], [https://github.com/Team-Beef-Studios/BeefRaiderXR BeefRaiderXR], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Virtual Table Top VTT [ Roll20], [https://www.owlbear.rodeo/ owlbear rodeo], [], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Computer assisted TableTop TTRPG OSR [https://www.rpgsolo.com/play.php RPGSolo], [https://github.com/fpsvogel/solo-ttrpgs Solo TTRPG], [], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games 2D 3D Engines [https://github.com/fegennari/3DWorld 3DWorld], [https://github.com/GarageGames/Torque3D Torque3D], [https://github.com/gameplay3d/GamePlay GamePlay 3D], [https://www.babylonjs.com/ BabylonJS ], [ Godot], [ Ogre], [ Crystal Space], [https://github.com/JacobHess03/ Dragon-Quest like], [https://github.com/bjornbytes/lovr Lua LOVE for 2D LOVR for 3D], [], |<!--AROS-->[https://www.arkhamdev.net/wiki.htm?id=agx Arkham Development antiryadgx 8.9 lts with register], [], |<!--Amiga OS-->[https://github.com/alpyre/Sevgi_Engine Sevgi Engine], [], [], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games C based game frameworks [https://github.com/orangeduck/Corange Corange], [https://github.com/scottcgi/Mojoc Mojoc], [https://orx-project.org/ Orx], [https://github.com/ioquake/ioq3 Quake 3], [https://www.mapeditor.org/ Tiled], [https://www.raylib.com/ 2d Raylib], [https://github.com/Rabios/awesome-raylib other raylib], [https://github.com/MrFrenik/gunslinger Gunslinger], [https://o3de.org/ o3d], [http://archives.aros-exec.org/index.php?function=browse&cat=development/library GLFW], [], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=development/library Raylib 5], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games RPGMaker MV/MZ-compatible projects [https://github.com/Psychronic-Games/RPGReactor RPGReactor js], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Virtual Pinball [https://github.com/vpinball/vpinball vpinball], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games unpack unarc [], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |} ==Application Guides== [[#top|...to the top]] ===Web Browser=== OWB is now at version 2.0 (which got an engine refresh, from July 2015 to February 2019) and 3.0. This latest version has a good support for many/most web sites, even YouTube web page now works. [https://www.bilibili.tv/en/search untested] This improved compatibility comes at the expense of higher RAM usage (now 1GB RAM is the absolute minimum). Also, keep in mind that the lack of a JIT (Just-In-Time) JS compiler on the 32 bit version, makes the web surfing a bit slow. Only the 64 bit version of OWB 2.0 will have JIT enabled, thus benefitting of more speed. There are tooltypes that can be added to the icon to provide further features JIT, MSE etc Certificates from [https://curl.se/docs/caextract.html ca certs], DNS tracking blocking with [https://easylist.to/easylist/easylist.txt easylist.txt] in PROGDIR:Conf before starting browser with enabled AdBlock [https://github.com/easylist/easylist/tree/master easylist], [https://gitlab.com/eyeo anti abp], [https://firebog.net/ big blocklist], [https://github.com/StevenBlack/hosts Steves], [], [], This can be enabled with OWB Odyssey with Windows -> Content Blocking and Windows -> Messages and enter https://www.youtube.com/api/stats/ads* https://www.youtube.com/pagead/adview* https://www.youtube.com#@##player-ads* into your custom filters Element blocker browser extension might be needed for [https://github.com/easylist/easylist/wiki/Youtube-Issues youtube], [ mid roll], [ pre roll], [ ], OWB speed is much better when running from RAM Disk, the best way is to add the below into your S:User-Startup which copies OWB drawer from Extras:Internet/OWB to RAM Disk: So add this : <pre> copy Extras:Internet/OWB Ram:OWB/ ALL CLONE >NIL: copy Extras:Internet/OWB.info Ram: >NIL: </pre> Open RAM Disk and open OWB drawer and double click on OWB icon so that the above icon tooltypes are activated Problems are that the copy time is long (around 20 seconds added in the background), but we can make it faster if we delete useless files from the OWB drawer (docs, …) If you don’t copy the drawer back onto the HD, you won’t save your cache, cookies, passwords… So you need a script for it. copy Extras:Internet/Amelinium/#? Ram:Amelinium/ ALL CLONE >NIL: Error messages SSL error "cant verify with ca-certificates", check bios clock time date is correct Error 6, try checking networking prefs settings and Save / Use preferences again or a '''few times''' otherwise the network chipset may not be compatible with Aros [https://www.google.com/search?q=%s&udm=14 Google search without AI overview] [ DuckDuckGo] [ Ecosia] [ Qwant] [ Swisscows] [ Mojeek] [ Brave Search] [ PreSearch] [ Startpage] ===E-mail=== Emailinium is now available for IMAP and POP3 based accounts YAM does not support SSL and most mail providers now switched to encrypted SMTP/POP3 connections ====SimpleMail==== SimpleMail supports IMAP and appears to work with GMail, but it's never been reliable enough, it can crash with large mailboxes. Please read more on this [http://www.freelists.org/list/simplemail-usr User list] GMail Be sure to activate the pop3 usage in your gmail account setup / configuration first. pop3: pop.gmail.com Use SSL: Yes Port: 995 smtp: smtp.gmail.com (with authentication) Use Authentication: Yes Use SSL: Yes Port: 465 or 587 Hotmail/MSN/outlook/Microsoft Mail mid-2017, all outlook.com accounts will be migrated to Office 365 / Exchange Most users are currently on POP which does not allow showing folders and many other features (technical limitations of POP3). With Microsoft IMAP you will get folders, sync read/unread, and show flags. You still won't get push though, as Microsoft has not turned on the IMAP Idle command as at Sept 2013. If you want to try it, you need to first remove (you can't edit) your pop account (long-press the account on the accounts screen, delete account). Then set it up this way: 1. Email/Password 2. Manual 3. IMAP 4. * Incoming: imap-mail.outlook.com, port 993, SSL/TLS should be checked * Outgoing: smtp-mail.outlook.com, port 587, SSL/TLS should be checked * POP server name pop-mail.outlook.com, port 995, POP encryption method SSL Yahoo Mail On April 24, 2002 Yahoo ceased to offer POP access to its free mail service. Introducing instead a yearly payment feature, allowing users POP3 and IMAP server support, along with such benefits as larger file attachment sizes and no adverts. Sorry to see Yahoo leaving its users to cough up for the privilege of accessing their mail. Understandable, when competing against rivals such as Gmail and Hotmail who hold a large majority of users and were hacked in 2014 as well. Incoming Mail (IMAP) Server * Server - imap.mail.yahoo.com * Port - 993 * Requires SSL - Yes Outgoing Mail (SMTP) Server * Server - smtp.mail.yahoo.com * Port - 465 or 587 * Requires SSL - Yes * Requires authentication - Yes Your login info * Email address - Your full email address (name@domain.com) * Password - Your account's password * Requires authentication - Yes Note that you need to enable “Web & POP Access” in your Yahoo Mail account to send and receive Yahoo Mail messages through any other email program. You will have to enable “Allow your Yahoo Mail to be POPed” under “POP and Forwarding”, to send and receive Yahoo mails through any other email client. Cannot be done since 2002 unless the customer pays Yahoo a subscription subs fee to have access to SMTP and POP3 * Set the POP server for incoming mails as pop.mail.yahoo.com. You will have to enable “SSL” and use 995 for Port. * “Account Name or Login Name” – Your Yahoo Mail ID i.e. your email address without the domain “@yahoo.com”. * “Email Address” – Your Yahoo Mail address i.e. your email address including the domain “@yahoo.com”. E.g. myname@yahoo.com * “Password” – Your Yahoo Mail password. Yahoo! Mail Plus users may have to set POP server as plus.pop.mail.yahoo.com and SMTP server as plus.smtp.mail.yahoo.com. * Set the SMTP server for outgoing mails as smtp.mail.yahoo.com. You will also have to make sure that “SSL” is enabled and use 465 for port. you must also enable “authentication” for this to work. ====YAM Yet Another Mailer==== YAM does not support SSL and most mail providers have now switched to encrypted SMTP/POP3 connections This email client is POP3 only if the SSL library is available [http://www.freelists.org/list/yam YAM Freelists] One of the downsides of using a POP3 mailer unfortunately - you have to set an option not to delete the mail if you want it left on the server. IMAP keeps all the emails on the server. Possible issues Sending mail issues is probably a matter of using your ISP's SMTP server, though it could also be an SSL issue. getting a "Couldn't initialise TLSv1 / SSL error Use of on-line e-mail accounts with this email client is not possible as it lacks the OpenSSL AmiSSl v3 compatible library GMail Incoming Mail (POP3) Server - requires SSL: pop.gmail.com Use SSL: Yes Port: 995 Outgoing Mail (SMTP) Server - requires TLS: smtp.gmail.com (use authentication) Use Authentication: Yes Use STARTTLS: Yes (some clients call this SSL) Port: 465 or 587 Account Name: your Gmail username (including '@gmail.com') Email Address: your full Gmail email address (username@gmail.com) Password: your Gmail password Anyway, the SMTP is pop.gmail.com port 465 and it uses SSLLv3 Authentication. The POP3 settings are for the same server (pop.gmail.com), only on port 995 instead. Outlook.com access <pre > Outlook.com SMTP server address: smtp.live.com Outlook.com SMTP user name: Your full Outlook.com email address (not an alias) Outlook.com SMTP password: Your Outlook.com password Outlook.com SMTP port: 587 Outlook.com SMTP TLS/SSL encryption required: yes </pre > Yahoo Mail <pre > “POP3 Server” – Set the POP server for incoming mails as pop.mail.yahoo.com. You will have to enable “SSL” and use 995 for Port. “SMTP Server” – Set the SMTP server for outgoing mails as smtp.mail.yahoo.com. You will also have to make sure that “SSL” is enabled and use 465 for port. you must also enable “authentication” for this to work. “Account Name or Login Name” – Your Yahoo Mail ID i.e. your email address without the domain “@yahoo.com”. “Email Address” – Your Yahoo Mail address i.e. your email address including the domain “@yahoo.com”. E.g. myname@yahoo.com “Password” – Your Yahoo Mail password. </pre > Yahoo! Mail Plus users may have to set POP server as plus.pop.mail.yahoo.com and SMTP server as plus.smtp.mail.yahoo.com. Note that you need to enable “Web & POP Access” in your Yahoo Mail account to send and receive Yahoo Mail messages through any other email program. You will have to enable “Allow your Yahoo Mail to be POPed” under “POP and Forwarding”, to send and receive Yahoo mails through any other email client. Cannot be done since 2002 unless the customer pays Yahoo a monthly fee to have access to SMTP and POP3 Microsoft Outlook Express Mail 1. Get the files to your PC. By whatever method get the files off your Amiga onto your PC. In the YAM folder you have a number of different folders, one for each of your folders in YAM. Inside that is a file usually some numbers such as 332423.283. YAM created a new file for every single email you received. 2. Open up a brand new Outlook Express. Just configure the account to use 127.0.0.1 as mail servers. It doesn't really matter. You will need to manually create any subfolders you used in YAM. 3. You will need to do a mass rename on all your email files from YAM. Just add a .eml to the end of it. Amazing how PCs still rely mostly on the file name so it knows what sort of file it is rather than just looking at it! There are a number of multiple renamers online to download and free too. 4. Go into each of your folders, inbox, sent items etc. And do a select all then drag the files into Outlook Express (to the relevant folder obviously) Amazingly the file format that YAM used is very compatible with .eml standard and viola your emails appear. With correct dates and working attachments. 5. If you want your email into Microsoft Outlook. Open that up and create a new profile and a new blank PST file. Then go into File Import and choose to import from Outlook Express. And the mail will go into there. And viola.. you have your old email from your Amiga in a more modern day format. ===FTP=== Magellan has a great FTP module. It allows transferring files from/to a FTP server over the Internet or the local network and, even if FTP is perceived as a "thing of the past", its usability is all inside the client. The FTP thing has a nice side effect too, since every Icaros machine can be a FTP server as well, and our files can be easily transferred from an Icaros machine to another with a little configuration effort. First of all, we need to know the 'server' IP address. Server is the Icaros machine with the file we are about to download on another Icaros machine, that we're going to call 'client'. To do that, move on the server machine and 1) run Prefs/Services to be sure "FTP file transfer" is enabled (if not, enable it and restart Icaros); 2) run a shell and enter this command: ifconfig -a Make a note of the IP address for the network interface used by the local area network. For cabled devices, it usually is net0:. Now go on the client machine and run Magellan: Perform these actions: 1) click on FTP; 2) click on ADDRESS BOOK; 3) click on "New". You can now add a new entry for your Icaros server machine: 1) Choose a name for your server, in order to spot it immediately in the address book. Enter the IP address you got before. 2) click on Custom Options: 1) go to Miscellaneous in the left menu; 2) Ensure "Passive Transfers" is NOT selected; 3) click on Use. We need to deactivate Passive Transfers because YAFS, the FTP server included in Icaros, only allows active transfers at the current stage. Now, we can finally connect to our new file source: 1) Look into the address book for the newly introduced server, be sure that name and IP address are right, and 2) click on Connect. A new lister with server's "MyWorkspace" contents will appear. You can now transfer files over the network choosing a destination among your local (client's) volumes. Can be adapted to any FTP client on any platform of your choice, just be sure your client allows Active Transfers as well. ===IRC Internet Relay Chat=== Jabberwocky is ideal for one-to-one social media communication, use IRC if you require one to many. Just type a message in ''lowercase''' letters and it will be posted to all in the [ AROS irc channel]. Please do not use UPPER CASE as it is a sign of SHOUTING which is annoying. Other things to type in - replace <message> with a line of text and <nick> with a person's name <pre> /help /list /who /whois <nick> /msg <nick> <message> /query <nick> <message>s /query /away <message> /away /quit <going away message> </pre> [http://irchelp.org/irchelp/new2irc.html#smiley Intro guide here]. IRC Primer can be found here in [http://www.irchelp.org/irchelp/ircprimer.html html], [http://www.irchelp.org/irchelp/text/ircprimer.txt TXT], [http://www.kei.com/irc/IRCprimer1.1.ps PostScript]. Issue the command /me <text> where <text> is the text that should follow your nickname. Example: /me slaps ajk around a bit with a large trout /nick <newNick> /nickserv register <password> <email address> /ns instead of /nickserv, while others might need /msg nickserv /nickserv identify <password> Alternatives: /ns identify <password> /msg nickserv identify <password> ==== IRC WookieChat ==== WookieChat is the most complete internet client for communication across the IRC Network. WookieChat allows you to swap ideas and communicate in real-time, you can also exchange Files, Documents, Images and everything else using the application's DCC capabilities. add smilies drawer/directory run wookiechat from the shell and set stack to 1000000 e.g. wookiechat stack 1000000 select a server / server window * nickname * user name * real name - optional Once you configure the client with your preferred screen name, you'll want to find a channel to talk in. servers * New Server - click on this to add / add extra - change details in section below this click box * New Group * Delete Entry * Connect to server * connect in new tab * perform on connect Change details * Servername - change text in this box to one of the below Server: * Port number - no need to change * Server password * Channel - add #channel from below * auto join - can click this * nick registration password, Click Connect to server button above <pre> Server: irc.freenode.net Channel: #aros </pre> irc://irc.freenode.net/aros <pre> Server: chat.amigaworld.net Channel: #amigaworld or #amigans </pre> <pre> On Sunday evenings USA time usually starting around 3PM EDT (1900 UTC) Server:irc.superhosts.net Channel #team*amiga </pre> <pre> BitlBee and Minbif are IRCd-like gateways to multiple IM networks Server: im.bitlbee.org Port 6667 Seems to be most useful on WookieChat as you can be connected to several servers at once. One for Bitlbee and any messages that might come through that. One for your normal IRC chat server. </pre> [http://www.bitlbee.org/main.php/servers.html Other servers], <pre> #Amiga.org - irc.synirc.net eu.synirc.net dissonance.nl.eu.synirc.net (IPv6: 2002:5511:1356:0:216:17ff:fe84:68a) twilight.de.eu.synirc.net zero.dk.eu.synirc.net us.synirc.net avarice.az.us.synirc.net envy.il.us.synirc.net harpy.mi.us.synirc.net liberty.nj.us.synirc.net snowball.mo.us.synirc.net - Ports 6660-6669 7001 (SSL) </pre> <pre> Multiple server support "Perform on connect" scripts and channel auto-joins Automatic Nickserv login Tabs for channels and private conversations CTCP PING, TIME, VERSION, SOUND Incoming and Outgoing DCC SEND file transfers Colours for different events Logging and automatic reloading of logs mIRC colour code filters Configurable timestamps GUI for changing channel modes easily Configurable highlight keywords URL Grabber window Optional outgoing swear word filter Event sounds for tabs opening, highlighted words, and private messages DCC CHAT support Doubleclickable URL's Support for multiple languages using LOCALE Clone detection Auto reconnection to Servers upon disconnection Command aliases Chat display can be toggled between AmIRC and mIRC style Counter for Unread messages Graphical nicklist and graphical smileys with a popup chooser </pre> ====IRC Aircos ==== Double click on Aircos icon in Extras:Networking/Apps/Aircos. It has been set up with a guest account for trial purposes. Though ideally, choose a nickname and password for frequent use of irc. ====IRC and XMPP Jabberwocky==== Servers are setup and close down at random You sign up to a server that someone else has setup and access chat services through them. The two ways to access chat from jabberwocky <pre > Jabberwocky -> Server -> XMPP -> open and ad-free Jabberwocky -> Server -> Transports (Gateways) -> Proprietary closed systems </pre > The Jabber.org service connects with all IM services that use XMPP, the open standard for instant messaging and presence over the Internet. The services we connect with include Google Talk (closed), Live Journal Talk, Nimbuzz, Ovi, and thousands more. However, you can not connect from Jabber.org to proprietary services like AIM, ICQ, MSN, Skype, or Yahoo because they don’t yet use XMPP components (XEP-0114) '''but''' you can use Jabber.com's servers and IM gateways (MSN, ICQ, Yahoo etc.) instead. The best way to use jabberwocky is in conjunction with a public jabber server with '''transports''' to your favorite services, like gtalk, Facebook, yahoo, ICQ, AIM, etc. You have to register with one of the servers, [https://list.jabber.at/ this list] or [http://www.jabberes.org/servers/ another list], [http://xmpp.net/ this security XMPP list], Unfortunately jabberwocky can only connect to one server at a time so it is best to check what services each server offers. If you set it up with separate Facebook and google talk accounts, for example, sometimes you'll only get one or the other. Jabberwocky open a window where the Jabber server part is typed in as well as your Nickname and Password. Jabber ID (JID) identifies you to the server and other users. Once registered the next step is to goto Jabberwocky's "Windows" menu and select the "Agents" option. The "Agents List" window will open. Roster (contacts list) [http://search.wensley.org.uk/ Chatrooms] (MUC) are available File Transfer - can send and receive files through the Jabber service but not with other services like IRC, ICQ, AIM or Yahoo. All you need is an installed webbrowser and OpenURL. Clickable URLs - The message window uses Mailtext.mcc and you can set a URL action in the MUI mailtext prefs like SYS:Utils/OpenURL %s NEWWIN. There is no consistent Skype like (H.323 VoIP) video conferencing available over Jabber. The move from xmpp to Jingle should help but no support on any amiga-like systems at the moment. [http://aminet.net/package/dev/src/AmiPhoneSrc192 AmiPhone] and [http://www.lysator.liu.se/%28frame,faq,nobg,useframes%29/ahi/v4-site/ Speak Freely] was an early attempt voice only contact. SIP and Asterisk are other PBX options. Facebook If you're using the XMPP transport provided by Facebook themselves, chat.facebook.com, it looks like they're now requiring SSL transport. This means jabberwocky method below will no longer work. The best thing to do is to create an ID on a public jabber server which has a Facebook gateway. <pre > 1. launch jabberwocky 2. if the login window doesn't appear on launch, select 'account' from the jabberwocky menu 3. your jabber ID will be user@chat.facebook.com where user is your user ID 4. your password is your normal facebook password 5. to save this for next time, click the popup gadget next to the ID field 6. click the 'add' button 7. click the 'close' button 8. click the 'connect' button </pre > you're done. you can also click the 'save as default account' button if you want. jabberwocky configured to auto-connect when launching the program, but you can configure as you like. there is amigaguide documentation included with jabberwocky. [http://amigaworld.net/modules/newbb/viewtopic.php?topic_id=37085&forum=32 Read more here] for Facebook users, you can log-in directly to Facebook with jabberwocky. just sign in as @chat.facebook.com with your Facebook password as the password Twitter For a few years, there has been added a twitter transport. Servers include [http://jabber.hot-chilli.net/ jabber.hot-chili.net], and . An [http://jabber.hot-chilli.net/tag/how-tos/ How-to] :Read [http://jabber.hot-chilli.net/2010/05/09/twitter-transport-working/ more] Instagram no support at the moment best to use a web browser based client ICQ The new version (beta) of StriCQ uses a newer ICQ protocol. Most of the ICQ Jabber Transports still use an older ICQ protocol. You can only talk one-way to StriCQ using the older Transports. Only the newer ICQv7 Transport lets you talk both ways to StriCQ. Look at the server lists in the first section to check. Register on a Jabber server, e.g. this one works: http://www.jabber.de/ Then login into Jabberwocky with the following login data e.g. xxx@jabber.de / Password: xxx Now add your ICQ account under the window->Agents->"Register". Now Jabberwocky connects via the Jabber.de server with your ICQ account. Yahoo Messenger although yahoo! does not use xmpp protocol, you should be able to use the transport methods to gain access and post your replies MSN early months of 2013 Microsoft will ditch MSN Messenger client and force everyone to use Skype...but MSN protocol and servers will keep working as usual for quite a long time.... Occasionally the Messenger servers have been experiencing problems signing in. You may need to sign in at www.outlook.com and then try again. It may also take multiple tries to sign in. (This also affects you if you’re using Skype.) You have to check each servers' Agents List to see what transports (MSN protocol, ICQ protocol, etc.) are supported or use the list address' provided in the section above. Then register with each transport (IRC, MSN, ICQ, etc.) to which you need access. After registering you can Connect to start chatting. msn.jabber.com/registered should appear in the window. From this [http://tech.dir.groups.yahoo.com/group/amiga-jabberwocky/message/1378 JW group] guide which helps with this process in a clear, step by step procedure. 1. Sign up on MSN's site for a passport account. This typically involves getting a Hotmail address. 2. Log on to the Jabber server of your choice and do the following: * Select the "Windows/Agents" menu option in Jabberwocky. * Select the MSN Agent from the list presented by the server. * Click the Register button to open a new window asking for: **Username = passort account email address, typically your hotmail address. **Nick = Screen name to be shown to anyone you add to your buddy list. **Password = Password for your passport account/hotmail address. * Click the Register button at the bottom of the new window. 3. If all goes well, you will see the MSN Gateway added to your buddy list. If not, repeat part 2 on another server. Some servers may show MSN in their list of available agents, but have not updated their software for the latest protocols used by MSN. 4. Once you are registered, you can now add people to your buddy list. Note that you need to include the '''msn.''' ahead of the servername so that it knows what gateway agent to use. Some servers may use a slight variation and require '''msg.gate.''' before the server name, so try both to see what works. If my friend's msn was amiga@hotmail.co.uk and my jabber server was @jabber.meta.net.nz.. then amiga'''%'''hotmail.com@'''msn.'''jabber.meta.net.nz or another the trick to import MSN contacts is that you don't type the hotmail URL but the passport URL... e.g. Instead of: goodvibe%hotmail.com@msn.jabber.com You type: goodvibe%passport.com@msn.jabber.com And the thing about importing contacts I'm afraid you'll have to do it by hand, one at the time... Google Talk any XMPP server will work, but you have to add your contacts manually. a google talk user is typically either @gmail.com or @talk.google.com. a true gtalk transport is nice because it brings your contacts to you and (can) also support file transfers to/from google talk users. implement Jingle a set of extensions to the IETF's Extensible Messaging and Presence Protocol (XMPP) support ended early 2014 as Google moved to Google+ Hangouts which uses it own proprietary format ===Video Player MPlayer=== Many of the menu features (such as doubling) do not work with the current version of mplayer but using 4:3 mplayer -vf scale=800:600 file.avi 16:9 mplayer -vf scale=854:480 file.avi if you want gui use; mplayer -gui 1 <other params> file.avi <pre > stack 1000000 ; using AspireOS 1.xx ; copy FROM SYS:Extras/Multimedia/MPlayer/ TO RAM:MPlayer ALL CLONE > Nil: ; using Icaros Desktop 1.x ; copy FROM SYS:Tools/MPlayer/ TO RAM:MPlayer ALL CLONE > Nil: ; using Icaros Desktop 2.x ; copy FROM SYS:Utilities/MPlayer/ TO RAM:MPlayer ALL CLONE > Nil: cd RAM:MPlayer run MPlayer -gui > Nil: ;run MPlayer -gui -ao ahi_dev -playlist http://www.radio-paralax.de/listen.pls > Nil: </pre > $ mplayer rtsp://127.0.0.1:554/sample_300kbit.mp4 MPlayer supports multicast streaming, and rtp/rtsp protocols (it might require [http://www.live555.com/openRTSP/ live555 library] to work with some streams). But you might have to build it where it's disabled. Also, multicast won't work with some AmiTCP-likes. MIAMI supported it, though. AROS supports IPv4 (old but works) and this includes the needed address space for RTP. If you mean multicast via RTP - mplayer handles it. You can even force UDP over TCP -rtsp-stream-over-tcp If the rtsp Real Time Streaming Protocol server needs authentification: -user -passwd MPlayer - Menu - Open Playlist and load already downloaded .pls or .m3u file - auto starts around 4 percent cache MPlayer - Menu - Open Stream and copy one of the .pls lines below into space allowed, press OK and press play button on main gui interface Old 8bit 16bit remixes chip tune game music http://www.radio-paralax.de/listen.pls http://scenesat.com/ http://www.shoutcast.com/radio/Amiga http://www.theoldcomputer.com/retro_radio/RetroRadio_Main.htm http://www.kohina.com/ http://www.remix64.com/ http://retrogamer.net/forum/ http://retroasylum.podomatic.com/rss2.xml http://retrogamesquad.com/ http://www.retronauts.com/ http://monsterfeet.com/noquarter/ http://www.retrogamingradio.com/ http://www.radiofeeds.co.uk/mp3.asp [[#top|...to the top]] ====ZunePaint==== simplified typical workflow * importing and organizing and photo management * making global and regional local correction(s) - recalculation is necessary after each adjustment as it is not in real-time * exporting your images in the best format available with the preservation of metadata Whilst achieving 80% of a great photo with just a filter, the remaining 20% comes from a manual fine-tuning of specific image attributes. For photojournalism, documentary, and event coverage, minimal touching is recommended. Stick to Camera Raw for such shots, and limit changes to level adjustment, sharpness, noise reduction, and white balance correction. For fashion or portrait shoots, a large amount of adjustment is allowed and usually ends up far from the original. Skin smoothing, blemish removal, eye touch-ups, etc. are common. Might alter the background a bit to emphasize the subject. Product photography usually requires a lot of sharpening, spot removal, and focus stacking. For landscape shots, best results are achieved by doing the maximum amount of preparation before/while taking the shot. No amount of processing can match timing, proper lighting, correct gear, optimal settings, etc. Excessive post-processing might give you a dramatic shot but best avoided in the long term. * White Balance - Left Amiga or F12 and K and under "Misc color effects" tab with a pull down for White Balance - color temperature also known as AKA tint (movies) or tones (painting) - warm temp raise red reduce green blue - cool raise blue lower red green * Exposure - exposure compensation, highlight/shadow recovery * Noise Reduction - during RAW development or using external software * Lens Corrections - distortion, vignetting, chromatic aberrations * Detail - capture sharpening and local contrast enhancement * Contrast - black point, levels (sliders) and curves tools (F12 and K) * Framing - straighten () and crop (F12 and F) * Refinements - color adjustments and selective enhancements - Left Amiga or F12 and K for RGB and YUV histogram tabs - * Resizing - enlarge for a print or downsize for the web or email (F12 and D) * Output Sharpening - customized for your subject matter and print/screen size White Balance - F12 and K scan your image for a shade which was meant to be white (neutral with each RGB value being equal) like paper or plastic which is in the same light as the subject of the picture. Use the dropper tool to select this color, similar colours will shift and you will have selected the perfect white balance for your part of the image - for the whole picture make sure RAZ or CLR button at the bottom is pressed before applying to the image above. Exposure correction F12 and K - YUV Y luminosity - RGB extra red tint - move red curve slightly down and move blue green curves slightly up Workflows in practice * Undo - Right AROS key or F12 and Z * Redo - Right AROS key or F12 and R First flatten your image (if necessary) and then do a rotation until the picture looks level. * Crop the picture. Click the selection button and drag a box over the area of the picture you want to keep. Press the crop button and the rest of the photo will be gone. * Adjust your saturation, exposure, hue levels, etc., (right AROS Key and K for color correction) until you are happy with the photo. Make sure you zoom in all of the way to 100% and look the photo over, zoom back out and move around. Look for obvious problems with the picture. * After coloring and exposure do a sharpen (Right AROS key and E for Convolution and select drop down option needed), e.g. set the matrix to 5x5 (roughly equivalent Amount to 60%) and set the Radius to 1.0. Click OK. And save your picture Implemented or would like to see for simplification and ease of use basic filters (presets) like black and white, monochrome, edge detection (sobel), motion/gaussian blur, * negative, sepiatone, retro vintage, night vision, colour tint, color gradient, color temperature, glows, fire, lightning, lens flare, emboss, filmic, pixelate mezzotint, antialias, etc. adjust / cosmetic tools such as crop, * reshaping tools, straighten, smear, smooth, perspective, liquify, bloat, pucker, push pixels in any direction, dispersion, transform like warp, blending with soft light, page-curl, whirl, ripple, fisheye, neon, etc. * red eye fixing, blemish remover, skin smoothing, teeth whitener, make eyes look brighter, desaturate, effects like oil paint, cartoon, pencil sketch, charcoal, noise/matrix like sharpen/unsharpen, (right AROS key with A for Artistic effects) * blend two image, gradient blend, masking blend, explode, implode, custom collage, surreal painting, comic book style, needlepoint, stained glass, watercolor, mosaic, stencil/outline, crayon, chalk, etc. borders such as * dropshadow, rounded, blurred, color tint, picture frame, film strip polaroid, bevelled edge, etc. brushes e.g. * frost, smoke, etc. and manual control of fix lens issues including vignetting (darkening), color fringing and barrel distortion, and chromatic and geometric aberration - lens and body profiles perspective correction levels - directly modify the levels of the tone-values of an image, by using sliders for highlights, midtones and shadows curves - Color Adjustment and Brightness/Contrast color balance one single color transparent (alpha channel (color information/selections) for masking and/or blending ) for backgrounds, etc. Threshold indicates how much other colors will be considered mixture of the removed color and non-removed colors decompose layer into a set of layers with each holding a different type of pattern that is visible within the image any selection using any selecting tools like lasso tool, marquee tool etc. the selection will temporarily be save to alpha If you create your image without transparency then the Alpha channel is not present, but you can add later. File formats like .psd (Photoshop file has layers, masks etc. contains edited sensor data. The original sensor data is no longer available) .xcf .raw .hdr Image Picture Formats * low dynamic range (JPEG, PNG, TIFF 8-bit), 16-bit (PPM, TIFF), typically as a 16-bit TIFF in either ProPhoto or AdobeRGB colorspace - TIFF files are also fairly universal – although, if they contain proprietary data, such as Photoshop Adjustment Layers or Smart Filters, then they can only be opened by Photoshop making them proprietary. * linear high dynamic range (HDR) images (PFM, [http://www.openexr.com/ ILM .EXR], jpg, [http://aminet.net/util/dtype cr2] (canon tiff based), hdr, NEF, CRW, ARW, MRW, ORF, RAF (Fuji), PEF, DCR, SRF, ERF, DNG files are RAW converted to an Adobe proprietary format - a container that can embed the raw file as well as the information needed to open it) An old version of [http://archives.aros-exec.org/index.php?function=browse&cat=graphics/convert dcraw] There is no single RAW file format. Each camera manufacturer has one or more unique RAW formats. RAW files contain the brightness levels data captured by the camera sensor. This data cannot be modified. A second smaller file, separate XML file, or within a database with instructions for the RAW processor to change exposure, saturation etc. The extra data can be changed but the original sensor data is still there. RAW is technically least compatible. A raw file is high-bit (usually 12 or 14 bits of information) but a camera-generated TIFF file will be usually converted by the camera (compressed, downsampled) to 8 bits. The raw file has no embedded color balance or color space, but the TIFF has both. These three things (smaller bit depth, embedded color balance, and embedded color space) make it so that the TIFF will lose quality more quickly with image adjustments than the raw file. The camera-generated TIFF image is much more like a camera processed JPEG than a raw file. A strong advantage goes to the raw file. The power of RAW files, such as the ability to set any color temperature non-destructively and will contain more tonal values. The principle of preserving the maximum amount of information to as late as possible in the process. The final conversion - which will always effectively represent a "downsampling" - should prevent as much loss as possible. Once you save it as TIFF, you throw away some of that data irretrievably. When saving in the lossy JPEG format, you get tremendous file size savings, but you've irreversibly thrown away a lot of image data. As long as you have the RAW file, original or otherwise, you have access to all of the image data as captured. Keyboard equivalence with Photoshop(tm) would help File PHOTOSHOP SHORTCUT GIMP New Ctrl+n New Open Ctrl+o Open Close Ctrl+w Close Save Ctrl+s Save Save as Shift+Ctrl+s Save as Revert F12 Revert Print Ctrl+p Print Exit Ctrl+q Quit Edit PHOTOSHOP SHORTCUT GIMP Undo/Redo (1 level) Ctrl+z Undo (Redo is Shift+Ctrl+z) Cut Ctrl+x Cut Copy Ctrl+c Copy Paste Ctrl+v Paste Paste Into Shift+Ctrl+v Paste Into Fill with FG color Alt+Backspace Fill with FG color Fill with BG color Control+Backspace Fill with BG color Image/Colors PHOTOSHOP SHORTCUT GIMP Levels Ctrl+l Levels Auto Contrast Shift+Ctrl+Alt+l Stretch Contrast (same?) Curves Ctrl+m Curves Color Balance Ctrl+b Color Balance Hue/Saturation Ctrl+u Hue-Saturation Desaturate Shift+Ctrl+u Desaturate Invert Ctrl+i Invert Default Colors d Default Colors Switch Colors x Switch Colors Layer PHOTOSHOP SHORTCUT GIMP New Layer Shift+Ctrl+n New Layer Layer via Copy Ctrl+j Duplicate Layer Bring (layer) to Front Shift+Ctrl+] Layer to Top Send (layer) to Back Shift+Ctrl+[ Layer to Bottom Bring (layer) Forward Ctrl+] Raise Layer Send (layer) Backward Ctrl+[ Lower Layer Select Top Layer Shift+Alt+] Select Top Layer Select Bottom Layer Shift+Alt+[ Select Bottom Layer Select One Layer Forward Alt+] Select Previous Layer Select One Layer Backward Alt+[ Select Next Layer Merge Down Ctrl+e Merge Down Merge Visible Shift+Ctrl+e Merge Visible Preserve Transparency / Keep Transparency Cycle Modes Forwards Shift+= Next Layer Mode Cycle Modes Backwards Shift+- Previous Layer Mode Select PHOTOSHOP SHORTCUT GIMP Select All Ctrl+a Select All Deselect Ctrl+d Select None Inverse Shift+Ctrl+i Invert Feather Ctrl+Alt+d Feather View PHOTOSHOP SHORTCUT GIMP Zoom In Ctrl+= Zoom In Zoom Out Ctrl+- Zoom Out Fit on Screen Ctrl+0 Zoom to Fit Window Actual Pixels Ctrl+Alt+0 Zoom 1:1 Show/Hide Extras Ctrl+h Toggle Show Selection (close enough?) Show/Hide Guides Ctrl+' Toggle Show Guides Show/Hide Grid Ctrl+Alt+' Toggle Show Grid Show/Hide Rulers Ctrl+r Toggle Show Rulers Snap Ctrl+; Snap to Guides Scroll View Up Page Up Scroll Page Up Scroll View Down Page Down Scroll Page Down Scroll View Left Ctrl+Page Up Scroll Page Left Scroll View Right Ctrl+Page Down Scroll Page Right Window/Dialogs PHOTOSHOP SHORTCUT GIMP ? F5 Tools Dialog Color Tab F6 Colors Dialog Layers Tab F7 Layers Dialog Info Tab F8 Image Information Tools PHOTOSHOP SHORTCUT GIMP Rectangular Marquee Tool m Rect Select Tool Elliptical Marquee Tool Shift+m Ellipse Select Tool *This is a toggle between 'Elliptical Marquee Tool' and 'Rectangular Marquee Tool' in Photoshop Move Tool v Move Tool Lasso Tool l Free Select Tool Magic Wand Tool w Fuzzy Select Tool Crop Tool c Crop & Resize Tool Airbrush Tool j Airbrush Tool Paintbrush Tool b Paintbrush Tool Clone Stamp Tool s Clone Stamp Tool Eraser Tool e Eraser Tool Gradient Tool g Blend Tool Paint Bucket Tool Shift+g Bucket Fill Tool *This is a toggle between 'Paint Bucket Tool' and 'Gradient Tool' in Photoshop Blur Tool r Convolve Tool Dodge Tool o DodgeBurn Tool Type Tool t Text Tool Pen Tool p Bezier Select Tool Eye Dropper Tool i Color Picker Tool Zoom Tool z Magnify Tool Previous Brush , Previous Brush Next Brush . Next Brush First Brush Shift+< First Brush Last Brush Shift+> Last Brush Decrease Brush Size [ Decrease Brush Size Increase Brush Size ] Increase Brush Size Decrease Brush Hardness { Decrease Brush Hardness Increase Brush Hardness } Increase Brush Hardness Help PHOTOSHOP SHORTCUT GIMP Help F1 Help Context Help Shift+F1 Context Help Misc. PHOTOSHOP SHORTCUT GIMP Last Filter Ctrl+f Repeat Last Filter ? Shift+Ctrl+f Reshow Last Filter Preferences Ctrl+k Preferences Liquify Shift+Ctrl+x IWarp (close enough?) Toggle Quick Mask q Toggle Quick Mask Spotlights - triangle of white opaque shape Cutting out and/or replacing unwanted background or features - select large areas with the selection option like the Magic Wand tool (aka Color Range) or the Lasso (quick and fast) with feather 2 to soften edge or the pen tool which adds points/lines/Bézier curves (better control but slower), hold down the shift button as you click to add extra points/areas of the subject matter to remove. Increase the tolerance to cover more areas. To subtract from your selection hold down alt as you're clicking. * Layer masks are a better way of working than Erase they clip (black hides/hidden white visible/reveal). Clone Stamp can be simulated by and brushes for other areas. * Leave the fine details like hair, fur, etc. to later with lasso and the shift key to draw a line all the way around your subject. Gradient Mapping - Inverse - Mask. i.e. Refine your selected image with edge detection and using the radius and edge options / adjuster (increase/decrease contrast) so that you will capture more fine detail from the background allowing easier removal. Remove fringe/halo saving image as png rather than jpg/jpeg to keep transparency background intact. Implemented [http://colorizer.org/ colour model representations] [http://paulbourke.net/texture_colour/colourspace/ Mathematical approach] - Photo stills are spatially 2d (h and w), but are colorimetrically 3d (r g and b, or H L S, or Y U V etc.) as well. * RGB - split cubed mapped color model for photos and computer graphics hardware using the light spectrum (adding and subtracting) * YUV - Y-Lightness U-blue/yellow V-red/cyan (similar to YPbPr and YCbCr) used in the PAL, NTSC, and SECAM composite digital TV color [http://crewofone.com/2012/chroma-subsampling-and-transcoding/#comment-7299 video] Histograms White balanced (neutral) if the spike happens in the same place in each channel of the RGB graphs. If not, you're not balanced. If you have sky you'll see the blue channel further off to the right. RGB is best one to change colours. These elements RGB is a 3-channel format containing data for Red, Green, and Blue in your photo scale between 0 and 255. The area in a picture that appears to be brighter/whiter contains more red color as compared to the area which is relatively darker. Similarly in the green channel the area that appears to be darker contains less amount of green color as compared to the area that appears to be brighter. Similarly in the blue channel the area appears to be darker contains less amount of blue color as compared to the area that appears to be brighter. Brightness luminance histogram also matches the green histogram more than any other color - human eye interprets green better e.g. RGB rough ratio 15/55/30% RGBA (RGB+A, A means alpha channel) . The alpha channel is used for "alpha compositing", which can mostly be associated as "opacity". AROS deals in RGB with two digits for every color (red, green, blue), in ARGB you have two additional hex digits for the alpha channel. The shadows are represented by the left third of the graph. The highlights are represented by the right third. And the midtones are, of course, in the middle. The higher the black peaks in the graph, the more pixels are concentrated in that tonal range (total black area). By moving the black endpoint, which identifies the shadows (darkness) and a white light endpoint (brightness) up and down either sides of the graph, colors are adjusted based on these points. By dragging the central one, can increased the midtones and control the contrast, raise shadows levels, clip or softly eliminate unsafe levels, alter gamma, etc... in a way that is much more precise and creative . RGB Curves * Move left endpoint (black point) up or right endpoint (white point) up brightens * Move left endpoint down or right endpoint down darkens Color Curves * Dragging up on the Red Curve increases the intensity of the reds in the image but * Dragging down on the Red Curve decreases the intensity of the reds and thus increases the apparent intensity of its complimentary color, cyan. Green’s complimentary color is magenta, and blue’s is yellow. <pre> Red <-> Cyan Green <->Magenta Blue <->Yellow </pre> YUV Best option to analyse and pull out statistical elements of any picture (i.e. separate luminance data from color data). The line in Y luma tone box represents the brightness of the image with the point in the bottom left been black, and the point in the top right as white. A low-contrast image has a concentrated clump of values nearer to the center of the graph. By comparison, a high-contrast image has a wider distribution of values across the entire width of the Histogram. A histogram that is skewed to the right would indicate a picture that is a bit overexposed because most of the color data is on the lighter side (increase exposure with higher value F), while a histogram with the curve on the left shows a picture that is underexposed. This is good information to have when using post-processing software because it shows you not only where the color data exists for a given picture, but also where any data has been clipped (extremes on edges of either side): that is, it does not exist and, therefore, cannot be edited. By dragging the endpoints of the line and as well as the central one, can increased the dark/shadows, midtones and light/bright parts and control the contrast, raise shadows levels, clip or softly eliminate unsafe levels, alter gamma, etc... in a way that is much more precise and creative . The U and V chroma parts show color difference components of the image. It’s useful for checking whether or not the overall chroma is too high, and also whether it’s being limited too much Can be used to create a negative image but also With U (Cb), the higher value you are, the more you're on the blue primary color. If you go to the low values then you're on blue complementary color, i.e. yellow. With V (Cr), this is the same principle but with Red and Cyan. e.g. If you push U full blue and V full red, you get magenta. If you push U full yellow and V full Cyan then you get green. YUV simultaneously adds to one side of the color equation while subtracting from the other. using YUV to do color correction can be very problematic because each curve alters the result of each other: the mutual influence between U and V often makes things tricky. You may also be careful in what you do to avoid the raise of noise (which happens very easily). Best results are obtained with little adjustments sunset that looks uninspiring and needs some color pop especially for the rays over the hill, a subtle contrast raise while setting luma values back to the legal range without hard clipping. ====Lunapaint==== Pixel based drawing app with onion-skin animation function Blocking, Shading, Coloring, adding detail <pre> b BRUSH e ERASER alt eyedropper v layer tool z ZOOM / MAGNIFY < > n spc panning m marque q lasso w same color selection / region </pre> <pre> , LM RM v V f filter F . size p , pick color [] last / next color </pre> There is not much missing in Lunapaint to be as good as FlipBook and then you have to take into account that Flipbook is considered to be amongst the best and easiest to use animation software out there. Ok to be honest Flipbook has some nice features that require more heavy work but those aren't so much needed right away, things like camera effects, sound, smart fill, export to different movie file formats etc. Tried Flipbook with my tablet and compared it to Luna. The feeling is the same when sketching. LunaPaint is very responsive/fluent to draw with. Just as Flipbook is, and that responsiveness is something its users have mentioned as one of the positive sides of said software. author was learning MUI. Some parts just have to be rewritten with proper MUI classes before new features can be added. * add [Frame Add] / [Frame Del] * whole animation feature is impossible to use. If you draw 2 color maybe but if you start coloring your cells then you get in trouble * pickup the entire image as a brush, not just a selection ? And consequently remove the brush from memory when one doesn't need it anymore. can pick up a brush and put it onto a new image but cropping isn't possible, nor to load/save brushes. * Undo is something I longed for ages in Lunapaint. * to import into the current layer, other types of images (e.g. JPEG) besides RAW64. * implement graphic tablet features support **GENERAL DRAWING** Miss it very much: UNDO ERASER COLORPICKER - has to show on palette too which color got picked. BACKGROUND COLOR -Possibility to select from "New project screen" Miss it somewhat: ICON for UNDO ICON for ERASER ICON for CLEAR SCREEN ( What can I say? I start over from scratch very often ) BRUSH - possibility to cut out as brush not just copy off image to brush **ANIMATING** Miss it very much: NUMBER OF CELLS - Possibity to change total no. of cells during project ANIM BRUSH - Possibility to pick up a selected part of cells into an animbrush Miss it somewhat: ADD/REMOVE FRAMES: Add/remove single frame In general LunaPaint is really well done and it feels like a new DeluxePaint version. It works with my tablet. Sure there's much missing of course but things can always be added over time. So there is great potential in LunaPaint that's for sure. Animations could be made in it and maybe put together in QuickVideo, saving in .gif or .mng etc some day. LAYERS -Layers names don't get saved globally in animation frames -Layers order don't change globally in an animation (perhaps as default?). EXPORTING IMAGES -Exporting frames to JPG/PNG gives problems with colors. (wrong colors. See my animatiopn --> My robot was blue now it's "gold" ) I think this only happens if you have layers. -Trying to flatten the layers before export doesn't work if you have animation frames only the one you have visible will flatten properly all other frames are destroyed. (Only one of the layers are visible on them) -Exporting images filenames should be for example e.g. file0001, file0002...file0010 instead as of now file1, file2...file10 LOAD/SAVE (Preferences) -Make a setting for the default "Work" folder. * Destroyed colors if exported image/frame has layers * mystic color cycling of the selected color while stepping frames back/forth (annoying) <pre> Deluxe Paint II enhanced key shortcuts NOTE: @ denotes the ALT key [Technique] F1 - Paint F2 - Single Colour F3 - Replace F4 - Smear F5 - Shade F6 - Cycle F7 - Smooth M - Colour Cycle [Brush] B - Restore O - Outline h - Halve brush size H - Double brush size x - Flip brush on X axis X - Double brush size on X axis only y - Flip on Y Y - Double on Y z - Rotate brush 90 degrees Z - Stretch [Stencil] ` - Stencil On [Miscellaneous] F9 - Info Bar F10 - Selection Bar @o - Co-Ordinates @a - Anti-alias @r - Colourise @t - Translucent TAB - Colour Cycle [Picture] L - Load S - Save j - Page to Spare(Flip) J - Page to Spare(Copy) V - View Page Q - Quit [General Keys] m - Magnify < - Zoom In > - Zoom Out [ - Palette Colour Up ] - Palette Colour Down ( - Palette Colour Left ) - Palette Colour Right , - Eye Dropper . - Pixel / Brush Toggle / - Symmetry | - Co-Ordinates INS - Perspective Control +/- - Brush Size (Fine Control) w - Unfilled Polygon W - Filled Polygon e - Unfilled Ellipse E - Filled Ellipse r - Unfilled Rectangle R - Filled Rectangle t - Type/text tool a - Select Font u/U - Undo d - Brush D - Filled Non-Uniform Polygon f/F - Fill Options g/G - Grid h/H - Brush Size (Coarse Control) K - Clear c - Unfilled Circle C - Filled Circle v - Line b - Scissor Select and Toggle B - Brush {,} - Toggle between two background colours </pre> ====Lodepaint==== Pixel based painting artwork app ====Grafx2==== Pixel based painting artwork app aesprite like [https://www.youtube.com/watch?v=59Y6OTzNrhk aesprite workflow keys and tablet use], [], ====Vector Graphics ZuneFIG==== Vector Image Editing of files .svg .ps .eps *Objects - raise lower rotate flip aligning snapping *Path - unify subtract intersect exclude divide *Colour - fill stroke *Stroke - size *Brushes - *Layers - *Effects - gaussian bevels glows shadows *Text - *Transform - AmiFIG ([http://epb.lbl.gov/xfig/frm_introduction.html xfig manual]) [[File:MyScreen.png|thumb|left|alt=Showing all Windows open in AmiFIG.|All windows available to AmiFIG.]] for drawing simple to intermediate vector graphic images for scientific and technical uses and for illustration purposes for those with talent ;Menu options * Load - fig format but import(s) SVG * Save - fig format but export(s) eps, ps, pdf, svg and png * PAN = Ctrl + Arrow keys * Deselect all points There is no selected object until you apply the tool, and the selected object is not highlighted. ;Metrics - to set up page and styles - first window to open on new drawings ;Tools - Drawing Primitives - set Attributes window first before clicking any Tools button(s) * Shapes - circles, ellipses, arcs, splines, boxes, polygon * Lines - polylines * Text "T" button * Photos - bitmaps * Compound - Glue, Break, Scale * POINTs - Move, Add, Remove * Objects - Move, Copy, Delete, Mirror, Rotate, Paste use right mouse button to stop extra lines, shapes being formed and the left mouse to select/deselect tools button(s) * Rotate - moves in 90 degree turns centered on clicked POINT of a polygon or square ;Attributes which provide change(s) to the above primitives * Color * Line Width * Line Style * arrowheads ;Modes Choose from freehand, charts, figures, magnet, etc. ;Library - allows .fig clip-art to be stored * compound tools to add .fig(s) together ;FIG 3.2 [http://epb.lbl.gov/xfig/fig-format.html Format] as produced by xfig version 3.2.5 <pre> Landscape Center Inches Letter 100.00 Single -2 1200 2 4 0 0 50 -1 0 12 0.0000 4 135 1050 1050 2475 This is a test.01 </pre> # change the text alignment within the textbox. I can choose left, center, or right aligned by either changing the integer in the second column from 0 (left) to 1 or 2 (center, or right). # The third integer in the row specifies fontcolor. For instance, 0 is black, but blue is 1 and Green3 is 13. # The sixth integer in the bottom row specifies fontface. 0 is Times-Roman, but 16 is Helvetica (a MATLAB default). # The seventh number is fontsize. 12 represents a 12pt fontsize. Changing the fontsize of an item really is as easy as changing that number to 20. # The next number is the counter-clockwise angle of the text. Notice that I have changed the angle to .7854 (pi/4 rounded to four digits=45 degrees). # twelfth number is the position according to the standard “x-axis” in Xfig units from the left. Note that 1200 Xfig units is equivalent to once inch. # thirteenth number is the “y-position” from the top using the same unit convention as before. * The nested text string is what you entered into the textbox. * The “01″ present at the end of that line in the .fig file is the closing tag. For instance, a change to \100 appends a @ symbol at the end of the period of that sentence. ; Just to note there are no layers, no 3d functions, no shading, no transparency, no animation [[#top|...to the top]] ===Audio=== # AHI uses linear panning/balance, which means that in the center, you will get -6dB. If an app uses panning, this is what you will get. Note that apps like Audio Evolution need panning, so they will have this problem. # When using AHI Hifi modes, mixing is done in 32-bit and sent as 32-bit data to the driver. The Envy24HT driver uses that to output at 24-bit (always). # For the Envy24/Envy24HT, I've made 16-bit and 24-bit inputs (called Line-in 16-bit, Line-in 24-bit etc.). There is unfortunately no app that can handle 24-bit recording. ====Music Mods==== Digital module (mods) trackers are music creation software using samples and sometimes soundfonts, audio plugins (VST, AU or RTAS), MIDI. Generally, MODs are similar to MIDI in that they contain note on/off and other sequence messages that control the mod player. Unlike (most) midi files, however, they also contain sound samples that the sequence information actually plays. MOD files can have many channels (classic amiga mods have 4, corresponding to the inbuilt sound channels), but unlike MIDI, each channel can typically play only one note at once. However, since that note might be a sample of a chord, a drumloop or other complex sound, this is not as limiting as it sounds. Like MIDI, notes will play indefinitely if they're not instructed to end. Most trackers record this information automatically if you play your music in live. If you're using manual note entry, you can enter a note-off command with a keyboard shortcut - usually Caps Lock. In fact when considering file size MOD is not always the best option. Even a dummy song wastes few kilobytes for nothing when a simple SID tune could be few hundreds bytes and not bigger than 64kB. AHX is another small format, AHX tunes are never larger than 64kB excluding comments. [https://www.youtube.com/watch?v=rXXsZfwgil Protrekkr] (previously aka [w:Juan_Antonio_Arguelles_Rius|NoiseTrekkr]) If Protrekkr does not start, please check if the Unit 0 has been setup in the AHI prefs and still not, go to the directory utilities/protrekkr and double click on the Protrekkr icon *Sample *Note - Effect *Track (column) - Pattern - Order It all starts with the Sample which is used to create Note(s) in a Track (column of a tracker) The Note can be changed with an Effect. A Track of Note(s) can be collected into a Pattern (section of a song) and these can be given Order to create the whole song. Patience (notes have to be entered one at a time) or playing the bassline on a midi controller (faster - see midi section above). Best approach is to wait until a melody popped into your head. *Up-tempo means the track should be reasonably fast, but not super-fast. *Groovy and funky imply the track should have some sort of "swing" feel, with plenty of syncopation or off beat emphasis and a recognizable, melodic bass line. *Sweet and happy mean upbeat melodies, a major key and avoiding harsh sounds. *Moody - minor key First, create a quick bass sound, which is basically a sine wave, but can be hand drawn for a little more variance. It could also work for the melody part, too. This is usually a bass guitar or some kind of synthesizer bass. The bass line is often forgotten by inexperienced composers, but it plays an important role in a musical piece. Together with the rhythm section the bass line forms the groove of a song. It's the glue between the rhythm section and the melodic layer of a song. The drums are just pink noise samples, played at different frequencies to get a slightly different sound for the kick, snare, and hihats. Instruments that fall into the rhythm category are bass drums, snares, hi-hats, toms, cymbals, congas, tambourines, shakers, etc. Any percussive instrument can be used to form part of the rhythm section. The lead is the instrument that plays the main melody, on top of the chords. There are many instruments that can play a lead section, like a guitar, a piano, a saxophone or a flute. The list is almost endless. There is a lot of overlap with instruments that play chords. Often in one piece an instrument serves both roles. The lead melody is often played at a higher pitch than the chords. Listened back to what was produced so far, and a counter-melody can be imagined, which can be added with a triangle wave. To give the ends of phrases some life, you can add a solo part with a crunchy synth. By hitting random notes in the key of G, then edited a few of them. For the climax of the song, filled out the texture with a gentle high-pitch pad… …and a grungy bass synth. The arrow at A points at the pattern order list. As you see, the patterns don't have to be in numerical order. This song starts with pattern "00", then pattern "02", then "03", then "01", etcetera. Patterns may be repeated throughout a song. The B arrow points at the song title. Below it are the global BPM and speed parameters. These determine the tempo of the song, unless the tempo is altered through effect commands during the song. The C arrow points at the list of instruments. An instrument may consist of multiple samples. Which sample will be played depends on the note. This can be set in the Instrument Editing screen. Most instruments will consist of just one sample, though. The sample list for the selected instrument can be found under arrow D. Here's a part of the main editing screen. This is where you put in actual notes. Up to 32 channels can be used, meaning 32 sounds can play simultaneously. The first six channels of pattern "03" at order "02" are shown here. The arrow at A points at the row number. The B arrow points at the note to play, in this case a C4. The column pointed at by the C arrow tells us which instrument is associated with that note, in this case instrument #1 "Kick". The column at D is used (mainly) for volume commands. In this case it is left empty which means the instrument should play at its default volume. You can see the volume column being used in channel #6. The E column tells us which effect to use and any parameters for that effect. In this case it holds the "F" effect, which is a tempo command. The "04" means it should play at tempo 4 (a smaller number means faster). Base pattern When I create a new track I start with what I call the base pattern. It is worthwhile to spend some time polishing it as a lot of the ideas in the base pattern will be copied and used in other patterns. At least, that's how I work. Every musician will have his own way of working. In "Wild Bunnies" the base pattern is pattern "03" at order "02". In the section about selecting samples I talked about the four different categories of instruments: drums, bass, chords and leads. That's also how I usually go about making the base pattern. I start by making a drum pattern, then add a bass line, place some chords and top it off with a lead. This forms the base pattern from which the rest of the song will grow. Drums Here's a screenshot of the first four rows of the base pattern. I usually reserve the first four channels or so for the drum instruments. Right away there are a couple of tricks shown here. In the first channel the kick, or bass drum, plays some notes. Note the alternating F04 and F02 commands. The "F" command alters the tempo of the song and by quickly alternating the tempo; the song will get some kind of "swing" feel. In the second channel the closed hi-hat plays a fairly simple pattern. Further down in the channel, not shown here, some open hi-hat notes are added for a bit of variation. In the third and fourth channel the snare sample plays. The "8" command is for panning. One note is panned hard to the left and the other hard to the right. One sample is played a semitone lower than the other. This results in a cool flanging effect. It makes the snare stand out a little more in the mix. Bass line There are two different instruments used for the bass line. Instrument #6 is a pretty standard synthesized bass sound. Instrument #A sounds a bit like a slap bass when used with a quick fade out. By using two different instruments the bass line sounds a bit more ”human”. The volume command is used to cut off the notes. However, it is never set to zero. Setting the volume to a very small value will result in a reverb-like effect. This makes the song sound more "live". The bass line hints at the chords that will be played and the key the song will be in. In this case the key of the song is D-major, a positive and happy key. Chords The D major chords that are being played here are chords stabs; short sounds with a quick decay (fade out). Two different instruments (#8 and #9) are used to form the chords. These instruments are quite similar, but have a slightly different sound, panning and volume decay. Again, the reason for this is to make the sound more human. The volume command is used on some chords to simulate a delay, to achieve more of a live feel. The chords are placed off-beat making for a funky rhythm. Lead Finally the lead melody is added. The other instruments are invaluable in holding the track together, but the lead melody is usually what catches people's attention. A lot of notes and commands are used here, but it looks more complex than it is. A stepwise ascending melody plays in channel 13. Channel 14 and 15 copy this melody, but play it a few rows later at a lower volume. This creates an echo effect. A bit of panning is used on the notes to create some stereo depth. Like with the bass line, instead of cutting off notes the volume is set to low values for a reverb effect. The "461" effect adds a little vibrato to the note, which sounds nice on sustained notes. Those paying close attention may notice the instrument used here for the lead melody is the same as the one used for the bass line (#6 "Square"), except played two or three octaves higher. This instrument is a looped square wave sample. Each type of wave has its own quirks, but the square wave (shown below) is a really versatile wave form. Song structure Good, catchy songs are often carefully structured into sections, some of which are repeated throughout the song with small variations. A typical pop-song structure is: Intro - Verse - Chorus - Verse - Chorus - Bridge - Chorus. Other single sectional song structures are <pre> Strophic or AAA Song Form - oldest story telling with refrain (often title of the song) repeated in every verse section melody AABA Song Form - early popular, jazz and gospel fading during the 1960s AB or Verse/Chorus Song Form - songwriting format of choice for modern popular music since the 1960s Verse/Chorus/Bridge Song Form ABAB Song Form ABAC Song Form ABCD Song Form AAB 12-Bar Song Form - three four-bar lines or sub-sections 8-Bar Song Form 16-Bar Song Form Hybrid / Compound Song Forms </pre> The most common building blocks are: #INTRODUCTION(INTRO) #VERSE #REFRAIN #PRE-CHORUS / RISE / CLIMB #CHORUS #BRIDGE #MIDDLE EIGHT #SOLO / INSTRUMENTAL BREAK #COLLISION #CODA / OUTRO #AD LIB (OFTEN IN CODA / OUTRO) The chorus usually has more energy than the verse and often has a memorable melody line. As the chorus is repeated the most often during the song, it will be the part that people will remember. The bridge often marks a change of direction in the song. It is not uncommon to change keys in the bridge, or at least to use a different chord sequence. The bridge is used to build up tension towards the big finale, the last repetition of chorus. Playing RCTRL: Play song from row 0. LSHIFT + RCTRL: Play song from current row. RALT: Play pattern from row 0. LSHIFT + RALT: Play pattern from current row. Left mouse on '>': Play song from row 0. Right mouse on '>': Play song from current row. Left mouse on '|>': Play pattern from row 0. Right mouse on '|>': Play pattern from current row. Left mouse on 'Edit/Record': Edit mode on/off. Right mouse on 'Edit/Record': Record mode on/off. Editing LSHIFT + ESCAPE: Switch large patterns view on/off TAB: Go to next track LSHIFT + TAB: Go to prev. track LCTRL + TAB: Go to next note in track LCTRL + LSHIFT + TAB: Go to prev. note in track SPACE: Toggle Edit mode On & Off (Also stop if the song is being played) SHIFT SPACE: Toggle Record mode On & Off (Wait for a key note to be pressed or a midi in message to be received) DOWN ARROW: 1 Line down UP ARROW: 1 Line up LEFT ARROW: 1 Row left RIGHT ARROW: 1 Row right PREV. PAGE: 16 Arrows Up NEXT PAGE: 16 Arrows Down HOME / END: Top left / Bottom right of pattern LCTRL + HOME / END: First / last track F5, F6, F7, F8, F9: Jump to 0, 1/4, 2/4, 3/4, 4/4 lines of the patterns + - (Numeric keypad): Next / Previous pattern LCTRL + LEFT / RIGHT: Next / Previous pattern LCTRL + LALT + LEFT / RIGHT: Next / Previous position LALT + LEFT / RIGHT: Next / Previous instrument LSHIFT + M: Toggle mute state of the current channel LCTRL + LSHIFT + M: Solo the current track / Unmute all LSHIFT + F1 to F11: Select a tab/panel LCTRL + 1 to 4: Select a copy buffer Tracking 1st and 2nd keys rows: Upper octave row 3rd and 4th keys rows: Lower octave row RSHIFT: Insert a note off / and * (Numeric keypad) or F1 F2: -1 or +1 octave INSERT / BACKSPACE: Insert or Delete a line in current track or current selected block. LSHIFT + INSERT / BACKSPACE: Insert or Delete a line in current pattern DELETE (NOT BACKSPACE): Empty a column or a selected block. Blocks (Blocks can also be selected with the mouse by holding the right button and scrolling the pattern with the mouse wheel). LCTRL + A: Select entire current track LCTRL + LSHIFT + A: Select entire current pattern LALT + A: Select entire column note in a track LALT + LSHIFT + A: Select all notes of a track LCTRL + X: Cut the selected block and copy it into the block-buffer LCTRL + C: Copy the selected block into the block-buffer LCTRL + V: Paste the data from the block buffer into the pattern LCTRL + I: Interpolate selected data from the first to the last row of a selection LSHIFT + ARROWS PREV. PAGE NEXT PAGE: Select a block LCTRL + R: Randomize the select columns of a selection, works similar to CTRL + I (interpolating them) LCTRL + U: Transpose the note of a selection to 1 seminote higher LCTRL + D: Transpose the note of a selection to 1 seminote lower LCTRL + LSHIFT + U: Transpose the note of a selection to 1 seminote higher (only for the current instrument) LCTRL + LSHIFT + D: Transpose the note of a selection to 1 seminote lower (only for the current instrument) LCTRL + H: Transpose the note of a selection to 1 octave higher LCTRL + L: Transpose the note of a selection to 1 octave lower LCTRL + LSHIFT + H: Transpose the note of a selection to 1 octave higher (only for the current instrument) LCTRL + LSHIFT + L: Transpose the note of a selection to 1 octave lower (only for the current instrument) LCTRL + W: Save the current selection into a file Misc LALT + ENTER: Switch between full screen / windowed mode LALT + F4: Exit program (Windows only) LCTRL + S: Save current module LSHIFT + S: Switch top right panel to synths list LSHIFT + I: Switch top right panel to instruments list <pre> C-x xh xx xx hhhh Volume B-x xh xx xx hhhh Jump to A#x xh xx xx hhhh hhhh Slide F-x xh xx xx hhhh Tempo D-x xh xx xx hhhh Pattern Break G#x xh xx xx hhhh </pre> h Hex 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 d Dec 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 The Set Volume command: C. Input a note, then move the cursor to the effects command column and type a C. Play the pattern, and you shouldn't be able to hear the note you placed the C by. This is because the effect parameters are 00. Change the two zeros to a 40(Hex)/64(Dec), depending on what your tracker uses. Play back the pattern again, and the note should come in at full volume. The Position Jump command next. This is just a B followed by the position in the playing list that you want to jump to. One thing to remember is that the playing list always starts at 0, not 1. This command is usually in Hex. Onto the volume slide command: A. This is slightly more complex (much more if you're using a newer tracker, if you want to achieve the results here, then set slides to Amiga, not linear), due to the fact it depends on the secondary tempo. For now set a secondary tempo of 06 (you can play around later), load a long or looped sample and input a note or two. A few rows after a note type in the effect command A. For the parameters use 0F. Play back the pattern, and you should notice that when the effect kicks in, the sample drops to a very low volume very quickly. Change the effect parameters to F0, and use a low volume command on the note. Play back the pattern, and when the slide kicks in the volume of the note should increase very quickly. This because each part of the effect parameters for command A does a different thing. The first number slides the volume up, and the second slides it down. It's not recommended that you use both a volume up and volume down at the same time, due to the fact the tracker only looks for the first number that isn't set to 0. If you specify parameters of 8F, the tracker will see the 8, ignore the F, and slide the volume up. Using a slide up and down at same time just makes you look stupid. Don't do it... The Set Tempo command: F, is pretty easy to understand. You simply specify the BPM (in Hex) that you want to change to. One important thing to note is that values of lower than 20 (Hex) sets the secondary tempo rather than the primary. Another useful command is the Pattern Break: D. This will stop the playing of the current pattern and skip to the next one in the playing list. By using parameters of more than 00 you can also specify which line to begin playing from. Command 3 is Portamento to Note. This slides the currently playing note to another note, at a specified speed. The slide then stops when it reaches the desired note. <pre> C-2 1 000 - Starts the note playing --- 000 C-3 330 - Starts the slide to C-3 at a speed of 30. --- 300 - Continues the slide --- 300 - Continues the slide </pre> Once the parameters have been set, the command can be input again without any parameters, and it'll still perform the same function unless you change the parameters. This memory function allows certain commands to function correctly, such as command 5, which is the Portamento to Note and Volume Slide command. Once command 3 has been set up command 5 will simply take the parameters from that and perform a Portamento to Note. Any parameters set up for command 5 itself simply perform a Volume Slide identical to command A at the same time as the Portamento to Note. This memory function will only operate in the same channel where the original parameters were set up. There are various other commands which perform two functions at once. They will be described as we come across them. C-3 04 .. .. 09 00 ---> C-3 04 .. .. 09 00 C-3 04 .. .. 09 00 ---> C-3 04 .. .. 09 02 C-3 04 .. .. 09 00 ---> C-3 04 .. .. 09 05 C-3 04 .. .. 09 00 ---> C-3 04 .. .. 09 08 C-3 04 .. .. 09 00 ---> C-3 04 .. .. 09 0A C-3 04 .. .. 09 00 ---> C-3 04 .. .. 09 0D C-3 04 .. .. 09 10 ---> C-3 04 .. .. 09 10 (You can also switch on the Slider Rec to On, and perform parameter-live-recording, such as cutoff transitions, resonance or panning tweaking, etc..) Note: this command only works for volume/panning and fx datas columns. The next command we'll look at is the Portamento up/down: 1 and 2. Command 1 slides the pitch up at a specified speed, and 2 slides it down. This command works in a similar way to the volume slide, in that it is dependent on the secondary tempo. Both these commands have a memory dependent on each other, if you set the slide to a speed of 3 with the 1 command, a 2 command with no parameters will use the speed of 3 from the 1 command, and vice versa. Command 4 is Vibrato. Vibrato is basically rapid changes in pitch, just try it, and you'll see what I mean. Parameters are in the format of xy, where x is the speed of the slide, and y is the depth of the slide. One important point to remember is to keep your vibratos subtle and natural so a depth of 3 or less and a reasonably fast speed, around 8, is usually used. Setting the depth too high can make the part sound out of tune from the rest. Following on from command 4 is command 6. This is the Vibrato and Volume Slide command, and it has a memory like command 5, which you already know how to use. Command 7 is Tremolo. This is similar to vibrato. Rather than changing the pitch it slides the volume. The effect parameters are in exactly the same format. vibrato effect (0x1dxy) x = speed y = depth (can't be used if arpeggio (0x1b) is turned on) <pre> C-7 00 .. .. 1B37 <- Turn Arpeggio effect on --- .. .. .. 0000 --- .. .. .. 0000 --- .. .. .. 0000 --- .. .. .. 1B38 <- Change datas --- .. .. .. 0000 --- .. .. .. 0000 --- .. .. .. 0000 --- .. .. .. 1B00 <- Turn it off </pre> Command 9 is Sample Offset. This starts the playback of the sample from a different place than the start. The effect parameters specify the sample offset, but only very roughly. Say you have a sample which is 8765(Hex) bytes long, and you wanted it to play from position 4321(Hex). The effect parameter could only be as accurate as the 43 part, and it would ignore the 21. Command B is the Playing List/Order Jump command. The parameters specify the position in the Playing List/Order to jump to. When used in conjunction with command D you can specify the position and the line to play from. Command E is pretty complex, as it is used for a lot of different things, depending on what the first parameter is. Let's take a trip through each effect in order. Command E0 controls the hardware filter on an Amiga, which, as a low pass filter, cuts off the highest frequencies being played back. There are very few players and trackers on other system that simulate this function, not that you should need to use it. The second parameter, if set to 1, turns on the filter. If set to 0, the filter gets turned off. Commands E1/E2 are Fine Portamento Up/Down. Exactly the same functions as commands 1/2, except that they only slide the pitch by a very small amount. These commands have a memory the same as 1/2 as well. Command E3 sets the Glissando control. If parameters are set to 1 then when using command 3, any sliding will only use the notes in between the original note and the note being slid to. This produces a somewhat jumpier slide than usual. The best way to understand is to try it out for yourself. Produce a slow slide with command 3, listen to it, and then try using E31. Command E4 is the Set Vibrato Waveform control. This command controls how the vibrato command slides the pitch. Parameters are 0 - Sine, 1 - Ramp Down (Saw), 2 - Square. By adding 4 to the parameters, the waveform will not be restarted when a new note is played e.g. 5 - Sine without restart. Command E5 sets the Fine Tune of the instrument being played, but only for the particular note being played. It will override the default Fine Tune for the instrument. The parameters range from 0 to F, with 0 being -8 and F being +8 Fine Tune. A parameter of 8 gives no Fine Tune. If you're using a newer tracker that supports more than -8 to +8 e.g. -128 to +128, these parameters will give a rough Fine Tune, accurate to the nearest 16. Command E6 is the Jump Loop command. You mark the beginning of the part of a pattern that you want to loop with E60, and then specify with E6x the end of the loop, where x is the number of times you want it to loop. Command E7 is the Set Tremolo Waveform control. This has exactly the same parameters as command E4, except that it works for Tremolo rather than Vibrato. Command E9 is for Retriggering the note quickly. The parameter specifies the interval between the retrigs. Use a value of less than the current secondary tempo, or else the note will not get retrigged. Command EA/B are for Fine Volume Slide Up/Down. Much the same as the normal Volume Slides, except that these are easier to control since they don't depend on the secondary tempo. The parameters specify the amount to slide by e.g. if you have a sample playing at a volume of 08 (Hex) then the effect EA1 will slide this volume to 09 (Hex). A subsequent effect of EB4 would slide this volume down to 05 (Hex). Command EC is the Note Cut. This sets the volume of the currently playing note to 0 at a specified tick. The parameters should be lower than the secondary tempo or else the effect won't work. Command ED is the Note Delay. This should be used at the same time as a note is to be played, and the parameters will specify the number of ticks to delay playing the note. Again, keep the parameters lower than the secondary tempo, or the note won't get played! Command EE is the Pattern Delay. This delays the pattern for the amount of time it would take to play a certain number of rows. The parameters specify how many rows to delay for. Command EF is the Funk Repeat command. Set the sample loop to 0-1000. When EFx is used, the loop will be moved to 1000- 2000, then to 2000-3000 etc. After 9000-10000 the loop is set back to 0- 1000. The speed of the loop "movement" is defined by x. E is two times as slow as F, D is three times as slow as F etc. EF0 will turn the Funk Repeat off and reset the loop (to 0-1000). effects 0x41 and 0x42 to control the volumes of the 2 303 units There is a dedicated panel for synth parameter editing with coherent sections (osc, filter modulation, routing, so on) the interface is much nicer, much better to navigate with customizable colors, the reverb is now customizable (10 delay lines), It accepts newer types of Waves (higher bit rates, at least 24). Has a replay routine. It's pretty much your basic VA synth. The problem isn't with the sampler being to high it's the synth is tuned two octaves too low, but if you want your samples tuned down just set the base note down 2 octaves (in the instrument panel). so the synth is basically divided into 3 sections from left to right: oscillators/envelopes, then filter and LFO's, and in the right column you have mod routings and global settings. for the oscillator section you have two normal oscillators (sine, saw, square, noise), the second of which is tunable, the first one tunes with the key pressed. Attached to OSC 1 is a sub-oscillator, which is a sawtooth wave tuned one octave down. The phase modulation controls the point in the duty cycle at which the oscillator starts. The ADSR envelope sliders (grouped with oscs) are for modulation envelope 1 and 2 respectively. you can use the synth as a sampler by choosing the instrument at the top. In the filter column, the filter settings are: 1 = lowpass, 2 = highpass, 3 = off. cutoff and resonance. For the LFOs they are LFO 1 and LFO 2, the ADSR sliders in those are for the LFO itself. For the modulation routings you have ENV 1, LFO 1 for the first slider and ENV 2, LFO 2 for the second, you can cycle through the individual routings there, and you can route each modulation source to multiple destinations of course, which is another big plus for this synth. Finally the glide time is for portamento and master volume, well, the master volume... it can go quite loud. The sequencer is changed too, It's more like the one in AXS if you've used that, where you can mute tracks to re-use patterns with variation. <pre> Support for the following modules formats: 669 (Composer 669, Unis 669), AMF (DSMI Advanced Module Format), AMF (ASYLUM Music Format V1.0), APUN (APlayer), DSM (DSIK internal format), FAR (Farandole Composer), GDM (General DigiMusic), IT (Impulse Tracker), IMF (Imago Orpheus), MOD (15 and 31 instruments), MED (OctaMED), MTM (MultiTracker Module editor), OKT (Amiga Oktalyzer), S3M (Scream Tracker 3), STM (Scream Tracker), STX (Scream Tracker Music Interface Kit), ULT (UltraTracker), UNI (MikMod), XM (FastTracker 2), Mid (midi format via timidity) </pre> Possible plugin options include [http://lv2plug.in/ LV2], ====Midi - Musical Instrument Digital Interface==== A midi file typically contains music that plays on up to 16 channels (as per the midi standard), but many notes can simultaneously play on each channel (depending on the limit of the midi hardware playing it). '''Timidity''' Although usually already installed, you can uncompress the [http://www.libsdl.org/projects/SDL_mixer/ timidity.tar.gz (14MB)] into a suitable drawer like below's SYS:Extras/Audio/ assign timidity: SYS:Extras/Audio/timidity added to SYSːs/User-Startup '''WildMidi playback''' '''Audio Evolution 4 (2003) 4.0.23 (from 2012)''' *Sync Menu - CAMD Receive, Send checked *Options Menu - MIDI Machine Control - Midi Bar Display - Select CAMD MIDI in / out - Midi Remote Setup MCB Master Control Bus *Sending a MIDI start-command and a Song Position Pointer, you can synchronize audio with an external MIDI sequencer (like B&P). *B&P Receive, start AE, add AudioEvolution.ptool in Bars&Pipes track, press play / record in AE then press play in Pipes *CAMD Receive, receive MIDI start or continue commands via camd.library sync to AE *MIDI Machine Control *Midi Bar Display *Select CAMD MIDI in / out *Midi Remote Setup - open requester for external MIDI controllers to control app mixer and transport controls cc remotely Channel - mixer(vol, pan, mute, solo), eq, aux, fx, Subgroup - Volume, Mute, Solo Transport - Start, End, Play, Stop, Record, Rewind, Forward Misc - Master vol., Bank Down, Bank up <pre> q - quit First 3 already opened when AE started F1 - timeline window F2 - mixer F3 - control F4 - subgroups F5 - aux returns F6 - sample list i - Load sample to use space - start/stop play b - reset time 0:00 s - split mode r - open recording window a - automation edit mode with p panning, m mute and v volume [ / ] - zoom in / out : - previous track * - next track x c v f - cut copy paste cross-fade g - snap grid </pre> '''[http://bnp.hansfaust.de/ Bars n Pipes sequencer]''' BarsnPipes debug ... in shell Menu (right mouse) *Song - Songs load and save in .song format but option here to load/save Midi_Files .mid in FORMAT0 or FORMAT1 *Track - *Edit - *Tool - *Timing - SMTPE Synchronizing *Windows - *Preferences - Multiple MIDI-in option Windows (some of these are usually already opened when Bars n Pipes starts up for the first time) *Workflow -> Tracks, .... Song Construction, Time-line Scoring, Media Madness, Mix Maestro, *Control -> Transport (or mini one), Windows (which collects all the Windows icons together-shortcut), .... Toolbox, Accessories, Metronome, Once you have your windows placed on the screen that suits your workflow, Song -> Save as Default will save the positions, colors, icons, etc as you'd like them If you need a particular setup of Tracks, Tools, Tempos etc, you save them all as a new song you can load each time Right mouse menu -> Preferences -> Environment... -> ScreenMode - Linkages for Synch (to Slave) usbmidi.out.0 and Send (Master) usbmidi.in.0 - Clock MTC '''Tracks''' #Double-click on B&P's icon. B&P will then open with an empty Song. You can also double-click on a song icon to open a song in B&P. #Choose a track. The B&P screen will contain a Tracks Window with a number of tracks shown as pipelines (Track 1, Track 2, etc...). To choose a track, simply click on the gray box to show an arrow-icon to highlight it. This icon show whether a track is chosen or not. To the right of the arrow-icon, you can see the icon for the midi-input. If you double-click on this icon you can change the MIDI-in setup. #Choose Record for the track. To the right of the MIDI-input channel icon you can see a pipe. This leads to another clickable icon with that shows either P, R or M. This stands for Play, Record or Merge. To change the icon, simply click on it. If you choose P, this track can only play the track (you can't record anything). If you choose R, you can record what you play and it overwrites old stuff in the track. If you choose M, you merge new records with old stuff in the track. Choose R now to be able to make a record. #Chose MIDI-channel. On the most right part of the track you can see an icon with a number in it. This is the MIDI-channel selector. Here you must choose a MIDI-channel that is available on your synthesizer/keyboard. If you choose General MIDI channel 10, most synthesizer will play drum sounds. To the left of this icon is the MIDI-output icon. Double-click on this icon to change the MIDI-output configuration. #Start recording. The next step is to start recording. You must then find the control buttons (they look like buttons on a CD-player). To be able to make a record. you must click on the R icon. You can simply now press the play button (after you have pressed the R button) and play something on you keyboard. To playback your composition, press the Play button on the control panel. #Edit track. To edit a track, you simply double click in the middle part of a track. You will then get a new window containing the track, where you can change what you have recorded using tools provided. Take also a look in the drop-down menus for more features. Videos to help understand [https://www.youtube.com/watch?v=A6gVTX-9900 small intro], [https://www.youtube.com/watch?v=abq_rUTiSA4&t=3s Overview], [https://www.youtube.com/watch?v=ixOVutKsYQo Workplace Setup CC PC Sysex], [https://www.youtube.com/watch?v=dDnJLYPaZTs Import Song], [https://www.youtube.com/watch?v=BC3kkzPLkv4 Tempo Mapping], [https://www.youtube.com/watch?v=sd23kqMYPDs ptool Arpeggi-8], [https://www.youtube.com/watch?v=LDJq-YxgwQg PlayMidi Song], [https://www.youtube.com/watch?v=DY9Pu5P9TaU Amiga Midi], [https://www.youtube.com/watch?v=abq_rUTiSA4 Learning Amiga bars and Pipes], Groups like [https://groups.io/g/barsnpipes/topics this] could help '''Tracks window''' * blue "1 2 3 4 5 6 7 8 Group" and transport tape deck VCR-type controls * Flags * [http://theproblem.alco-rhythm.com/org/bp.html Track 1, Track2, to Track 16, on each Track there are many options that can be activated] Each Track has a *Left LHS - Click in grey box to select what Track to work on, Midi-In ptool icon should be here (5pin plug icon), and many more from the Toolbox on the Input Pipeline *Middle - (P, R, M) Play, Record, Merge/Multi before the sequencer line and a blue/red/yellow (Thru Mute Play) Tap *Right RHS - Output pipeline, can have icons placed uopn it with the final ptool icon(s) being the 5pin icon symbol for Midi-OUT Clogged pipelines may need Esc pressed several times '''Toolbox (tools affect the chosen pipeline)''' After opening the Toolbox window you can add extra Tools (.ptool) for the pipelines like keyboard(virtual), midimonitor, quick patch, transpose, triad, (un)quantize, feedback in/out, velocity etc right mouse -> Toolbox menu option -> Install Tool... and navigate to Tool drawer (folder) and select requried .ptool Accompany B tool to get some sort of rythmic accompaniment, Rythm Section and Groove Quantize are examples of other tools that make use of rythms [https://aminet.net/search?query=bars Bars & Pipes pattern format .ptrn] for drawer (folder). Load from the Menu as Track or Group '''Accessories (affect the whole app)''' Accessories -> Install... and goto the Accessories drawer for .paccess like adding ARexx scripting support '''Song Construction''' <pre> F1 Pencil F2 Magic Wand F3 Hand F4 Duplicator F5 Eraser F6 Toolpad F7 Bounding box F8 Lock to A-B-A A-B-A strip, section, edit flags, white boxes, </pre> Bars&Pipes Professional offers three track formats; basic song tracks, linear tracks — which don't loop — and finally real‑time tracks. The difference between them is that both song and linear tracks respond to tempo changes, while real‑time tracks use absolute timing, always trigger at the same instant regardless of tempo alterations '''Tempo Map''' F1 Pencil F2 Magic Wand F3 Hand F4 Eraser F5 Curve F6 Toolpad Compositions Lyrics, Key, Rhythm, Time Signature '''Master Parameters''' Key, Scale/Mode '''Track Parameters''' Dynamics '''Time-line Scoring''' '''Media Madness''' '''Mix Maestro''' *ACCESSORIES Allows the importation of other packages and additional modules *CLIPBOARD Full cut, copy and paste operations, enabling user‑definable clips to be shared between tracks. *INFORMATION A complete rundown on the state of the current production and your machine. *MASTER PARAMETERS Enables global definition of time signatures, lyrics, scales, chords, dynamics and rhythm changes. *MEDIA MADNESS A complete multimedia sequencer which allows samples, stills, animation, etc *METRONOME Tempo feedback via MIDI, internal Amiga audio and colour cycling — all three can be mixed and matched as required. *MIX MAESTRO Completely automated mixdown with control for both volume and pan. All fader alterations are memorised by the software *RECORD ACTIVATION Complete specification of the data to be recorded/merged. Allows overdubbing of pitch‑bend, program changes, modulation etc *SET FLAGS Numeric positioning of location and edit flags in either SMPTE or musical time *SONG CONSTRUCTION Large‑scale cut and paste of individual measures, verses or chorus, by means of bounding box and drag‑n‑drop mouse selections *TEMPO MAP Tempo change using a variety of linear and non‑linear transition curves *TEMPO PALETTE Instant tempo changes courtesy of four user‑definable settings. *TIMELINE SCORING Sequencing of a selection of songs over a defined period — ideal for planning an entire set for a live performance. *TOOLBOX Selection screen for the hundreds of signal‑processing tools available *TRACKS Opens the main track window to enable recording, editing and the use of tools. *TRANSPORT Main playback control window, which also provides access to user‑ defined flags, loop and punch‑in record modes. Bars and Pipes Pro 2.5 is using internal 4-Byte IDs, to check which kind of data are currently processed. Especially in all its files the IDs play an important role. The IDs are stored into the file in the same order they are laid out in the memory. In a Bars 'N' Pipes file (no matter which kind) the ID "NAME" (saved as its ANSI-values) is stored on a big endian system (68k-computer) as "NAME". On a little endian system (x86 PC computer) as "EMAN". The target is to make the AROS-BnP compatible to songs, which were stored on a 68k computer (AMIGA). If possible, setting MIDI channels for Local Control for your keyboard http://www.fromwithin.com/liquidmidi/archive.shtml MIDI files are essentially a stream of event data. An event can be many things, but typically "note on", "note off", "program change", "controller change", or messages that instruct a MIDI compatible synth how to play a given bit of music. * Channel - 1 to 16 - * Messages - PC presets, CC effects like delays, reverbs, etc * Sequencing - MIDI instruments, Drums, Sound design, * Recording - * GUI - Piano roll or Tracker, Staves and Notes MIDI events/messages like step entry e.g. Note On, Note Off MIDI events/messages like PB, PC, CC, Mono and Poly After-Touch, Sysex, etc MIDI sync - Midi Clocks (SPS Measures), Midi Time Code (h, m, s and frames) SMPTE Individual track editing with audition edits so easier to test any changes. Possible to stop track playback, mix clips from the right edit flag and scroll the display using arrow keys. Step entry, to extend a selected note hit the space bar and the note grows accordingly. Ability to cancel mouse‑driven edits by simply clicking the right mouse button — at which point everything snaps back into its original form. Lyrics can now be put in with syllable dividers, even across an entire measure or section. Autoranging when you open a edit window, the notes are automatically displayed — working from the lowest upwards. Flag editing, shift‑click on a flag immediately open the bounds window, ready for numeric input. Ability to cancel edits using the right‑hand mouse button, plus much improved Bounding Box operations. Icons other than the BarsnPipes icon -> PUBSCREEN=BarsnPipes (cannot choose modes higher than 8bit 256 colors) Preferences -> Menu in Tracks window - Send MIDI defaults OFF Prefs -> Environment -> screenmode (saved to BarsnPipes.prefs binary file) Customization -> pics in gui drawer (folder) - Can save as .song files and .mid General Midi SMF is a “Standard Midi File” ([http://www.music.mcgill.ca/~ich/classes/mumt306/StandardMIDIfileformat.html SMF0, SMF1 and SMF2]), [https://github.com/stump/libsmf libsmf], [https://github.com/markc/midicomp MIDIcomp], [https://github.com/MajicDesigns/MD_MIDIFile C++ src], [], [https://github.com/newdigate/midi-smf-reader Midi player], * SMF0 All MIDI data is stored in one track only, separated exclusively by the MIDI channel. * SMF1 The MIDI data is stored in separate tracks/channels. * SMF2 (rarely used) The MIDI data is stored in separate tracks, which are additionally wrapped in containers, so it's possible to have e.g. several tracks using the same MIDI channels. Would it be possible to enrich Bars N’Pipes with software synth and sample support along with audio recording and mastering tools like in the named MAC or PC music sequencers? On the classic AMIGA-OS this is not possible because of missing CPU-power. The hardware of the classic AMIGA is not further developed. So we must say (unfortunately) that those dreams can’t become reality BarsnPipes is best used with external MIDI-equipment. This can be a keyboard or synthesizer with MIDI-connectors. <pre> MIDI can control 16 channels There are USB-MIDI-Interfaces on the market with 16 independent MIDI-lines (multi-port), which can handle 16 MIDI devices independently – 16×16 = 256 independent MIDI-channels or instruments handle up to 16 different USB-MIDI-Interfaces (multi-device). That is: 16X16X16 = 4096 independent MIDI-channels – theoretically </pre> <pre> Librarian MIDI SYStem EXplorer (sysex) - PatchEditor and used to be supplied as a separate program like PatchMeister but currently not at present It should support MIDI.library (PD), BlueRibbon.library (B&P), TriplePlayPlus, and CAMD.library (DeluxeMusic) and MIDI information from a device's user manual and configure a custom interface to access parameters for all MIDI products connected to the system Supports ALL MIDI events and the Patch/Librarian data is stored in MIDI standard format Annette M.Crowling, Missing Link Software, Inc. </pre> Composers <pre> [https://x.com/hirasawa/status/1403686519899054086 Susumu Hirasawa] </pre> <pre> 1988 Todor Fay and his wife Melissa Jordan Gray, who founded the Blue Ribbon Inc 1992 Bars&Pipes Pro published November 2000, Todor Fay announcement to release the sourcecode of Bars&Pipes Pro 2.5c beta end of May 2001, the source of the main program and the sources of some tools and accessories were in a complete and compileable state end of October 2009 stop further development of BarsnPipes New for now on all supported systems and made freeware 2013 Alfred Faust diagnosed with incureable illness, called „Myastenia gravis“ (weak muscles) </pre> Protrekkr How to use Midi In/Out in Protrekkr ? First of all, midi in & out capabilities of this program are rather limited. # Go to Misc. Setup section and select a midi in or out device to use (ptk only supports one device at a time). # Go to instrument section, and select a MIDI PRG (the default is N/A, which means no midi program selected). # Go to track section and here you can assign a midi channel to each track of ptk. # Play notes :]. Note off works. F'x' note cut command also works too, and note-volume command (speed) is supported. Also, you can change midicontrollers in the tracker, using '90' in the panning row: <pre> C-3 02 .. .. 0000.... --- .. .. 90 xxyy.... << This will set the value --- .. .. .. 0000.... of the controller n.'xx' to 'yy' (both in hex) --- .. .. .. 0000.... </pre> So "--- .. .. 90 2040...." will set the controller number $20(32) to $40(64). You will need the midi implementation table of your gear to know what you can change with midi controller messages. N.B. Not all MIDI devices are created equal! Although the MIDI specification defines a large range of MIDI messages of various kinds, not every MIDI device is required to work in exactly the same way and respond to all the available messages and ways of working. For example, we don't expect a wind synthesiser to work in the same way as a home keyboard. Some devices, the older ones perhaps, are only able to respond to a single channel. With some of those devices that channel can be altered from the default of 1 (probably) to another channel of the 16 possible. Other devices, for instance monophonic synthesisers, are capable of producing just one note at a time, on one MIDI channel. Others can produce many notes spread across many channels. Further devices can respond to, and transmit, "breath controller" data (MIDI controller number 2 (CC#2)) others may respond to the reception of CC#2 but not be able to create and to send it. A controller keyboard may be capable of sending "expression pedal" data, but another device may not be capable of responding to that message. Some devices just have the basic GM sound set. The "voice" or "instrument" is selected using a "Program Change" message on its own. Other devices have a greater selection of voices, usually arranged in "banks", and the choice of instrument is made by responding to "Bank Select MSB" (MIDI controller 0 (CC#0)), others use "Bank Select LSB" (MIDI controller number 32 (CC#32)), yet others use both MSB and LSB sent one after the other, all followed by the Program Change message. The detailed information about all the different voices will usually be available in a published MIDI Data List. MIDI Implementation Chart But in the User Manual there is sometimes a summary of how the device works, in terms of MIDI, in the chart at the back of the manual, the MIDI Implementation Chart. If you require two devices to work together you can compare the two implementation charts to see if they are "compatible". In order to do this we will need to interpret that chart. The chart is divided into four columns headed "Function", "Transmitted" (or "Tx"), "Received" (or "Rx"), or more correctly "Recognised", and finally, "Remarks". <pre> The left hand column defines which MIDI functions are being described. The 2nd column defines what the device in question is capable of transmitting to another device. The 3rd column defines what the device is capable of responding to. The 4th column is for explanations of the values contained within these previous two columns. </pre> There should then be twelve sections, with possibly a thirteenth containing extra "Notes". Finally there should be an explanation of the four MIDI "modes" and what the "X" and the "O" mean. <pre> Mode 1: Omni On, Poly; Mode 2: Omni On, Mono; Mode 3: Omni Off, Poly; Mode 4: Omni Off, Mono. </pre> O means "yes" (implemented), X means "no" (not implemented). Sometimes you will find a row of asterisks "**************", these seem to indicate that the data is not applicable in this case. Seen in the transmitted field only (unless you've seen otherwise). Lastly you may find against some entries an asterisk followed by a number e.g. *1, these will refer you to further information, often on a following page, giving more detail. Basic Channel But the very first set of boxes will tell us the "Basic Channel(s)" that the device sends or receives on. "Default" is what happens when the device is first turned on, "changed" is what a switch of some kind may allow the device to be set to. For many devices e.g. a GM sound module or a home keyboard, this would be 1-16 for both. That is it can handle sending and receiving on all MIDI channels. On other devices, for example a synthesiser, it may by default only work on channel 1. But the keyboard could be "split" with the lower notes e.g. on channel 2. If the synth has an arppegiator, this may be able to be set to transmit and or receive on yet another channel. So we might see the default as "1" but the changed as "1-16". Modes. We need to understand Omni On and Off, and Mono and Poly, then we can decipher the four modes. But first we need to understand that any of these four Mode messages can be sent to any MIDI channel. They don't necessarily apply to the whole device. If we send an "Omni On" message (CC#125) to a MIDI channel of a device, we are, in effect, asking it to respond to e.g. a Note On / Off message pair, received on any of the sixteen channels. Sound strange? Read it again. Still strange? It certainly is. We normally want a MIDI channel to respond only to Note On / Off messages sent on that channel, not any other. In other words, "Omni Off". So "Omni Off" (CC#124) tells a channel of our MIDI device to respond only to messages sent on that MIDI channel. "Poly" (CC#127) is for e.g. a channel of a polyphonic sound module, or a home keyboard, to be able to respond to many simultaneous Note On / Off message pairs at once and produce musical chords. "Mono" (CC#126) allows us to set a channel to respond as if it were e.g. a flute or a trumpet, playing just one note at a time. If the device is capable of it, then the overlapping of notes will produce legato playing, that is the attack portion of the second note of two overlapping notes will be removed resulting in a "smoother" transition. So a channel with a piano voice assigned to it will have Omni Off, Poly On (Mode 3), a channel with a saxophone voice assigned could be Omni Off, Mono On (Mode 4). We call these combinations the four modes, 1 to 4, as defined above. Most modern devices will have their channels set to Mode 3 (Omni Off, Poly) but be switchable, on a per channel basis, to Mode 4 (Omni Off, Mono). This second section of data will include first its default value i.e. upon device switch on. Then what Mode messages are acceptable, or X if none. Finally, in the "Altered" field, how a Mode message that can't be implemented will be interpreted. Usually there will just be a row of asterisks effectively meaning nothing will be done if you try to switch to an unimplemented mode. Note Number <pre> The next row will tell us which MIDI notes the device can send or receive, normally 0-127. The second line, "True Voice" has the following in the MIDI specification: "Range of received note numbers falling within the range of true notes produced by the instrument." My interpretation is that, for instance, a MIDI piano may be capable of sending all MIDI notes (0 to 127) by transposition, but only responding to the 88 notes (21 to 108) of a real piano. </pre> Velocity This will tell us whether the device we're looking at will handle note velocity, and what range from 1-127, or maybe just 64, it transmits or will recognise. So usually "O" plus a range or "X" for not implemented. After touch This may have one or two lines two it. If a one liner the either "O" or "X", yes or no. If a two liner then it may include "Keys" or "Poly" and "Channel". This will show whether the device will respond to Polyphonic after touch or channel after touch or neither. Pitch Bend Again "O" for implemented, "X" for not implemented. (Many stage pianos will have no pitch bend capability.) It may also, in the notes section, state whether it will respond to the full 14 bits, or not, as usually encoded by the pitch bend wheel. Control Change This is likely to be the largest section of the chart. It will list all those controllers, starting from CC#0, Bank Select MSB, which the device is capable of sending, and those that it will respond to using "O" or "X" respectively. You will, almost certainly, get some further explanation of functionality in the remarks column, or in more detail elsewhere in the documentation. Of course you will need to know what all the various controller numbers do. Lots of the official technical specifications can be found at the [www.midi.org/techspecs/ MMA], with the table of messages and control change [www.midi.org/techspecs/midimessages.php message numbers] Program Change Again "O" or "X" in the Transmitted or Recognised column to indicate whether or not the feature is implemented. In addition a range of numbers is shown, typically 0-127, to show what is available. True # (number): "The range of the program change numbers which correspond to the actual number of patches selected." System Exclusive Used to indicate whether or not the device can send or recognise System Exclusive messages. A short description is often given in the Remarks field followed by a detailed explanation elsewhere in the documentation. System Common - These include the following: <pre> MIDI Time Code Quarter Frame messages (device synchronisation). Song Position Pointer Song Select Tune Request </pre> The section will indicate whether or not the device can send or respond to any of these messages. System Real Time These include the following: <pre> Timing Clock - often just written as "Clock" Start Stop Continue </pre> These three are usually just referred to as "Commands" and listed. Again the section will indicate which, if any, of these messages the device can send or respond to. <pre> Aux. Messages Again "O" or "X" for implemented or not. Aux. = Auxiliary. Active Sense = Active Sensing. </pre> Often with an explanation of the action of the device. Notes The "Notes" section can contain any additional comments to clarify the particular implementation. Some of the explanations have been drawn directly from the MMA MIDI 1.0 Detailed Specification. And the detailed explanation of some of the functions will be found there, or in the General MIDI System Level 1 or General MIDI System Level 2 documents also published by the MMA. OFFICIAL MIDI SPECIFICATIONS SUMMARY OF MIDI MESSAGES Table 1 - Summary of MIDI Messages The following table lists the major MIDI messages in numerical (binary) order (adapted from "MIDI by the Numbers" by D. Valenti, Electronic Musician 2/88, and updated by the MIDI Manufacturers Association.). This table is intended as an overview of MIDI, and is by no means complete. WARNING! Details about implementing these messages can dramatically impact compatibility with other products. We strongly recommend consulting the official MIDI Specifications for additional information. MIDI 1.0 Specification Message Summary Channel Voice Messages [nnnn = 0-15 (MIDI Channel Number 1-16)] {| class="wikitable sortable" width="90%" ! width="10%" |Status D7----D0 ! width="10%" |Data Byte(s) D7----D0 ! width="20%" |Description |- |<!--Status-->1000nnnn || <!--Data-->0kkkkkkk 0vvvvvvv || <!--Description-->Note Off event. This message is sent when a note is released (ended). (kkkkkkk) is the key (note) number. (vvvvvvv) is the velocity. |- |<!--Status-->1001nnnn || <!--Data-->0kkkkkkk 0vvvvvvv || <!--Description-->Note On event. This message is sent when a note is depressed (start). (kkkkkkk) is the key (note) number. (vvvvvvv) is the velocity. |- |<!--Status-->1010nnnn || <!--Data-->0kkkkkkk 0vvvvvvv || <!--Description-->Polyphonic Key Pressure (Aftertouch). This message is most often sent by pressing down on the key after it "bottoms out". (kkkkkkk) is the key (note) number. (vvvvvvv) is the pressure value. |- |<!--Status-->1011nnnn || <!--Data-->0ccccccc 0vvvvvvv || <!--Description-->Control Change. This message is sent when a controller value changes. Controllers include devices such as pedals and levers. Controller numbers 120-127 are reserved as "Channel Mode Messages" (below). (ccccccc) is the controller number (0-119). (vvvvvvv) is the controller value (0-127). |- |<!--Status-->1100nnnn || <!--Data-->0ppppppp || <!--Description-->Program Change. This message sent when the patch number changes. (ppppppp) is the new program number. |- |<!--Status-->1101nnnn || <!--Data-->0vvvvvvv || <!--Description-->Channel Pressure (After-touch). This message is most often sent by pressing down on the key after it "bottoms out". This message is different from polyphonic after-touch. Use this message to send the single greatest pressure value (of all the current depressed keys). (vvvvvvv) is the pressure value. |- |<!--Status-->1110nnnn || <!--Data-->0lllllll 0mmmmmmm || <!--Description-->Pitch Bend Change. This message is sent to indicate a change in the pitch bender (wheel or lever, typically). The pitch bender is measured by a fourteen bit value. Center (no pitch change) is 2000H. Sensitivity is a function of the receiver, but may be set using RPN 0. (lllllll) are the least significant 7 bits. (mmmmmmm) are the most significant 7 bits. |} Channel Mode Messages (See also Control Change, above) {| class="wikitable sortable" width="90%" ! width="10%" |Status D7----D0 ! width="10%" |Data Byte(s) D7----D0 ! width="20%" |Description |- |<!--Status-->1011nnnn || <!--Data-->0ccccccc 0vvvvvvv || <!--Description-->Channel Mode Messages. This the same code as the Control Change (above), but implements Mode control and special message by using reserved controller numbers 120-127. The commands are: *All Sound Off. When All Sound Off is received all oscillators will turn off, and their volume envelopes are set to zero as soon as possible c = 120, v = 0: All Sound Off *Reset All Controllers. When Reset All Controllers is received, all controller values are reset to their default values. (See specific Recommended Practices for defaults) c = 121, v = x: Value must only be zero unless otherwise allowed in a specific Recommended Practice. *Local Control. When Local Control is Off, all devices on a given channel will respond only to data received over MIDI. Played data, etc. will be ignored. Local Control On restores the functions of the normal controllers. c = 122, v = 0: Local Control Off c = 122, v = 127: Local Control On * All Notes Off. When an All Notes Off is received, all oscillators will turn off. c = 123, v = 0: All Notes Off (See text for description of actual mode commands.) c = 124, v = 0: Omni Mode Off c = 125, v = 0: Omni Mode On c = 126, v = M: Mono Mode On (Poly Off) where M is the number of channels (Omni Off) or 0 (Omni On) c = 127, v = 0: Poly Mode On (Mono Off) (Note: These four messages also cause All Notes Off) |} System Common Messages System Messages (0xF0) The final status nybble is a “catch all” for data that doesn’t fit the other statuses. They all use the most significant nybble (4bits) of 0xF, with the least significant nybble indicating the specific category. The messages are denoted when the MSB of the second nybble is 1. When that bit is a 0, the messages fall into two other subcategories. System Common If the MSB of the second second nybble (4 bits) is not set, this indicates a System Common message. Most of these are messages that include some additional data bytes. System Common Messages Type Status Byte Number of Data Bytes Usage <pre> Time Code Quarter Frame 0xF1 1 Indicates timing using absolute time code, primarily for synthronization with video playback systems. A single location requires eight messages to send the location in an encoded hours:minutes:seconds:frames format*. Song Position 0xF2 2 Instructs a sequencer to jump to a new position in the song. The data bytes form a 14-bit value that expresses the location as the number of sixteenth notes from the start of the song. Song Select 0xF3 1 Instructs a sequencer to select a new song. The data byte indicates the song. Undefined 0xF4 0 Undefined 0xF5 0 Tune Request 0xF6 0 Requests that the receiver retunes itself**. </pre> *MIDI Time Code (MTC) is significantly complex. Please see the MIDI Specification **While modern digital instruments are good at staying in tune, older analog synthesizers were prone to tuning drift. Some analog synthesizers had an automatic tuning operation that could be initiated with this command. System Exclusive If you’ve been keeping track, you’ll notice there are two status bytes not yet defined: 0xf0 and 0xf7. These are used by the System Exclusive message, often abbreviated at SysEx. SysEx provides a path to send arbitrary data over a MIDI connection. There is a group of predefined messages for complex data, like fine grained control of MIDI Time code machinery. SysEx is also used to send manufacturer defined data, such as patches, or even firmware updates. System Exclusive messages are longer than other MIDI messages, and can be any length. The messages are of the following format: 0xF0, 0xID, 0xdd, ...... 0xF7 The message is bookended with distinct bytes. It opens with the Start Of Exclusive (SOX) data byte, 0xF0. The next one to three bytes after the start are an identifier. Values from 0x01 to 0x7C are one-byte vendor IDs, assigned to manufacturers who were involved with MIDI at the beginning. If the ID is 0x00, it’s a three-byte vendor ID - the next two bytes of the message are the value. <pre> ID 0x7D is a placeholder for non-commercial entities. ID 0x7E indicates a predefined Non-realtime SysEx message. ID 0x7F indicates a predefined Realtime SysEx message. </pre> After the ID is the data payload, sent as a stream of bytes. The transfer concludes with the End of Exclusive (EOX) byte, 0xF7. The payload data must follow the guidelines for MIDI data bytes – the MSB must not be set, so only 7 bits per byte are actually usable. If the MSB is set, it falls into three possible scenarios. An End of Exclusive byte marks the ordinary termination of the SysEx transfer. System Real Time messages may occur within the transfer without interrupting it. The recipient should handle them independently of the SysEx transfer. Other status bytes implicitly terminate the SysEx transfer and signal the start of new messages. Some inexpensive USB-to-MIDI interfaces aren’t capable of handling messages longer than four bytes. {| class="wikitable sortable" width="90%" ! width="10%" |Status D7----D0 ! width="10%" |Data Byte(s) D7----D0 ! width="20%" |Description |- |<!--Status-->11110000 || <!--Data-->0iiiiiii [0iiiiiii 0iiiiiii] 0ddddddd --- --- 0ddddddd 11110111 || <!--Description-->System Exclusive. This message type allows manufacturers to create their own messages (such as bulk dumps, patch parameters, and other non-spec data) and provides a mechanism for creating additional MIDI Specification messages. The Manufacturer's ID code (assigned by MMA or AMEI) is either 1 byte (0iiiiiii) or 3 bytes (0iiiiiii 0iiiiiii 0iiiiiii). Two of the 1 Byte IDs are reserved for extensions called Universal Exclusive Messages, which are not manufacturer-specific. If a device recognizes the ID code as its own (or as a supported Universal message) it will listen to the rest of the message (0ddddddd). Otherwise, the message will be ignored. (Note: Only Real-Time messages may be interleaved with a System Exclusive.) |- |<!--Status-->11110001 || <!--Data-->0nnndddd || <!--Description-->MIDI Time Code Quarter Frame. nnn = Message Type dddd = Values |- |<!--Status-->11110010 || <!--Data-->0lllllll 0mmmmmmm || <!--Description-->Song Position Pointer. This is an internal 14 bit register that holds the number of MIDI beats (1 beat= six MIDI clocks) since the start of the song. l is the LSB, m the MSB. |- |<!--Status-->11110011 || <!--Data-->0sssssss || <!--Description-->Song Select. The Song Select specifies which sequence or song is to be played. |- |<!--Status-->11110100 || <!--Data--> || <!--Description-->Undefined. (Reserved) |- |<!--Status-->11110101 || <!--Data--> || <!--Description-->Undefined. (Reserved) |- |<!--Status-->11110110 || <!--Data--> || <!--Description-->Tune Request. Upon receiving a Tune Request, all analog synthesizers should tune their oscillators. |- |<!--Status-->11110111 || <!--Data--> || <!--Description-->End of Exclusive. Used to terminate a System Exclusive dump. |} System Real-Time Messages {| class="wikitable sortable" width="90%" ! width="10%" |Status D7----D0 ! width="10%" |Data Byte(s) D7----D0 ! width="20%" |Description |- |<!--Status-->11111000 || <!--Data--> || <!--Description-->Timing Clock. Sent 24 times per quarter note when synchronization is required. |- |<!--Status-->11111001 || <!--Data--> || <!--Description-->Undefined. (Reserved) |- |<!--Status-->11111010 || <!--Data--> || <!--Description-->Start. Start the current sequence playing. (This message will be followed with Timing Clocks). |- |<!--Status-->11111011 || <!--Data--> || <!--Description-->Continue. Continue at the point the sequence was Stopped. |- |<!--Status-->11111100 || <!--Data--> || <!--Description-->Stop. Stop the current sequence. |- |<!--Status-->11111101 || <!--Data--> || <!--Description-->Undefined. (Reserved) |- |<!--Status-->11111110 || <!--Data--> || <!--Description-->Active Sensing. This message is intended to be sent repeatedly to tell the receiver that a connection is alive. Use of this message is optional. When initially received, the receiver will expect to receive another Active Sensing message each 300ms (max), and if it does not then it will assume that the connection has been terminated. At termination, the receiver will turn off all voices and return to normal (non- active sensing) operation. |- |<!--Status-->11111111 || <!--Data--> || <!--Description-->Reset. Reset all receivers in the system to power-up status. This should be used sparingly, preferably under manual control. In particular, it should not be sent on power-up. |} Advanced Messages Polyphonic Pressure (0xA0) and Channel Pressure (0xD0) Some MIDI controllers include a feature known as Aftertouch. While a key is being held down, the player can press harder on the key. The controller measures this, and converts it into MIDI messages. Aftertouch comes in two flavors, with two different status messages. The first flavor is polyphonic aftertouch, where every key on the controller is capable of sending its own independent pressure information. The messages are of the following format: <pre> 0xnc, 0xkk, 0xpp n is the status (0xA) c is the channel nybble kk is the key number (0 to 127) pp is the pressure value (0 to 127) </pre> Polyphonic aftertouch is an uncommon feature, usually found on premium quality instruments, because every key requires a separate pressure sensor, plus the circuitry to read them all. Much more commonly found is channel aftertouch. Instead of needing a discrete sensor per key, it uses a single, larger sensor to measure pressure on all of the keys as a group. The messages omit the key number, leaving a two-byte format <pre> 0xnc, 0xpp n is the status (0xD) c is the channel number pp is the pressure value (0 to 127) </pre> Pitch Bend (0xE0) Many keyboards have a wheel or lever towards the left of the keys for pitch bend control. This control is usually spring-loaded, so it snaps back to the center of its range when released. This allows for both upward and downward bends. Pitch Bend Wheel The wheel sends pitch bend messages, of the format <pre> 0xnc, 0xLL, 0xMM n is the status (0xE) c is the channel number LL is the 7 least-significant bits of the value MM is the 7 most-significant bits of the value </pre> You’ll notice that the bender data is actually 14 bits long, transmitted as two 7-bit data bytes. This means that the recipient needs to reassemble those bytes using binary manipulation. 14 bits results in an overall range of 214, or 0 to 16,383. Because it defaults to the center of the range, the default value for the bender is halfway through that range, at 8192 (0x2000). Control Change (0xB0) In addition to pitch bend, MIDI has provisions for a wider range of expressive controls, sometimes known as continuous controllers, often abbreviated CC. These are transmitted by the remaining knobs and sliders on the keyboard controller shown below. Continuous Controllers These controls send the following message format: <pre> 0xnc, 0xcc, 0xvv n is the status (0xB) c is the MIDI channel cc is the controller number (0-127) vv is the controller value (0-127) </pre> Typically, the wheel next to the bender sends controller number one, assigned to modulation (or vibrato) depth. It is implemented by most instruments. The remaining controller number assignments are another point of confusion. The MIDI specification was revised in version 2.0 to assign uses for many of the controllers. However, this implementation is not universal, and there are ranges of unassigned controllers. On many modern MIDI devices, the controllers are assignable. On the controller keyboard shown in the photos, the various controls can be configured to transmit different controller numbers. Controller numbers can be mapped to particular parameters. Virtual synthesizers frequently allow the user to assign CCs to the on-screen controls. This is very flexible, but it might require configuration on both ends of the link and completely bypasses the assignments in the standard. Program Change (0xC0) Most synthesizers have patch storage memory, and can be told to change patches using the following command: <pre> 0xnc, 0xpp n is the status (0xc) c is the channel pp is the patch number (0-127) </pre> This allows for 128 sounds to be selected, but modern instruments contain many more than 128 patches. Controller #0 is used as an additional layer of addressing, interpreted as a “bank select” command. Selecting a sound on such an instrument might involve two messages: a bank select controller message, then a program change. Audio & Midi are not synchronized, what I can do ? Buy a commercial software package but there is a nasty trick to synchronize both. It's a bit hardcore but works for me: Simply put one line down to all midi notes on your pattern (use Insert key) and go to 'Misc. Setup', adjust the latency and just search a value that will make sound sync both audio/midi. The stock Sin/Saw/Pulse and Rnd waveforms are too simple/common, is there a way to use something more complex/rich ? You have to ability to redirect the waveforms of the instruments through the synth pipe by selecting the "wav" option for the oscillator you're using for this synth instrument, samples can be used as wavetables to replace the stock signals. Sound banks like soundfont (sf2) or Kontakt2 are not supported at the moment ====DAW Audio Evolution 4==== Audio Evolution 4 gives you unsurpassed power for digital audio recording and editing on the Amiga. The latest release focusses on time-saving non-linear and non-destructive editing, as seen on other platforms. Besides editing, Audio Evolution 4 offers a wide range of realtime effects, including compression, noise gate, delays, reverb, chorus and 3-band EQ. Whether you put them as inserts on a channel or use them as auxillaries, the effect parameters are realtime adjustable and can be fully automated. Together with all other mixing parameters, they can even be controlled remotely, using more ergonomic MIDI hardware. Non-linear editing on the time line, including cut, copy, paste, move, split, trim and crossfade actions The number of tracks per project(s) is unlimited .... AHI limits you to recording only two at a time. i.e. not on 8 track sound cards like the Juli@ or Phase 88. sample file import is limited to 16bit AIFF (not AIFC, important distinction as some files from other sources can be AIFC with aiff file extension). and 16bit WAV (pcm only) Most apps use the Music Unit only but a few apps also use Unit (0-3) instead or as well. * Set up AHI prefs so that microphone is available. (Input option near the bottom) stereo++ allows the audio piece to be placed anywhere and the left-right adjusted to sound positionally right hifi best for music playback if driver supports this option Load 16bit .aif .aiff only sample(s) to use not AIFC which can have the same ending. AIFF stands for Audio Interchange File Format sox recital.wav recital.aiff sox recital.wav −b 16 recital.aiff channels 1 rate 16k fade 3 norm sox input.wav output.aiff bass −b 16 rate 48k performs the same format translation, but also applies four effects (down-mix to one channel, sample rate change, fade-in, nomalize), and stores the result at a bit-depth of 16. rec −c 2 radio.aiff trim 0 30:00 records half an hour of stereo audio play existing-file.wav 24bit PCM WAV or AIFF do not work *No stream format handling. So no way to pass on an AC3 encoded stream unmodified to the digital outputs through AHI. *No master volume handling. Each application has to set its own volume. So each driver implements its own custom driver-mixer interface for handling master volumes, mute and preamps. *Only one output stream. So all input gets mixed into one output. *No automatic handling of output direction based on connected cables. *No monitor input selection. Only monitor volume control. select the correct input (Don't mistake enabled sound for the correct input.) The monitor will feedback audio to the lineout and hp out no matter if you have selected the correct input to the ADC. The monitor will provide sound for any valid input. This will result in free mixing when recording from the monitor input instead of mic/line because the monitor itself will provide the hardware mixing for you. Be aware that MIC inputs will give two channel mono. Only Linein will give real stereo. Now for the not working part. Attempt to record from linein in the AE4 record window, the right channel is noise and the left channel is distorted. Even with the recommended HIFI 16bit Stereo++ mode at 48kHz. Channels Monitor Gain Inout Output Advanced settings - Debugging via serial port * Options -> Soundcard In/Out * Options -> SampleRate * Options -> Preferences F6 for Sample File List Setting a grid is easy as is measuring the BPM by marking a section of the sample. Is your kick drum track "not in time" ? If so, you're stumped in AE4 as it has no fancy variable time signatures and definitely no 'track this dodgy rhythm' function like software of the nature of Logic has. So if your drum beat is freeform you will need to work in freeform mode. (Real music is free form anyway). If the drum *is* accurate and you are just having trouble measuring the time, I usually measure over a range of bars and set the number of beats in range to say 16 as this is more accurate, Then you will need to shift the drum track to match your grid *before* applying the grid. (probably an iterative process as when the grid is active samples snap to it, and when inactive you cannot see it). AE4 does have ARexx but the functions are more for adding samples at set offsets and starting playback / recording. These are the usual features found in DAWs... * Recording digital audio, midi sequencer and mixer * virtual VST instruments and plug-ins * automation, group channels, MIDI channels, FX sends and returns, audio and MIDI editors and music notation editor * different track views * mixer and track layout (but not the same as below) * traditional two windows (track and mixer) Mixing - mixdown Could not figure out how to select what part I wanted to send to the aux, set it to echo and return. Pretty much the whole echo effect. Or any effect. Take look at page17 of the manual. When you open the EQ / Aux send popup window you will see 4 sends. Now from the menu choose the windows menu. Menus->Windows-> Aux Returns Window or press F5 You will see a small window with 4 volume controls and an effects button for each. Click a button and add an effects to that aux channel, then set it up as desired (note the reverb effect has a special AUX setting that improves its use with the aux channel, not compulsory but highly useful). You set the amount of 'return' on the main mix in the Aux Return window, and the amount sent from each main mixer channel in the popup for that channel. Again the aux sends are "prefade" so the volume faders on each channel do not affect them. Tracking Effects - fade in To add some echoes to some vocals, tried to add an effect on a track but did not come out. This is made more complicated as I wanted to mute a vocal but then make it echo at the muting point. Want to have one word of a vocal heard and then echoed off. But when the track is mute the echo is cancelled out. To correctly understand what is happening here you need to study the figure at the bottom of page 15 on the manual. You will see from that that the effects are applied 'prefade' So the automation you applied will naturally mute the entire signal. There would be a number of ways to achieve the goal, You have three real time effects slots, one for smoothing like so Sample -> Amplify -> Delay Then automate the gain of the amplify block so that it effectively mutes the sample just before the delay at the appropriate moment, the echo effect should then be heard. Getting the effects in the right order will require experimentation as they can only be added top down and it's not obvious which order they are applied to the signal, but there only two possibilities, so it wont take long to find out. Using MUTE can cause clicks to the Amplify can be used to mute more smoothly so that's a secondary advantage. Signal Processing - Overdub [[#top|...to the top]] ===Office=== ====Spreadsheet Leu==== Support for some xlsx, and ods functions ====Spreadsheet Ignition==== ; Needs ABIv1 to be completed before more can be done File formats supported * ascii #?.txt and #?.csv (single sheets with data only). * igs and TurboCalc(WIP) #?.tc for all sheets with data, formats and formulas. There is '''no''' support for xls, xlsx, ods or uos ([http://en.wikipedia.org/wiki/Uniform_Office_Format Uniform Unified Office Format]) at the moment. * Always use Esc key after editing Spreadsheet cells. * copy/paste seems to copy the first instance only so go to Edit -> Clipboard to manage the list of remembered actions. * Right mouse click on row (1 or 2 or 3) or column header (a or b or c) to access optimal height or width of the row or column respectively * Edit -> Insert -> Row seems to clear the spreadsheet or clears the rows after the inserted row until undo restores as it should be... Change Sheet name by Object -> Sheet -> Properties Click in the cell which will contain the result, and click '''down arrow button''' to the right of the formula box at the bottom of the spreadsheet and choose the function required from the list provided. Then click on the start cell and click on the bottom right corner, a '''very''' small blob, which allows stretching a bounding box (thick grey outlines) across many cells This grey bounding box can be used to '''copy a formula''' to other cells. Object -> Cell -> Properties to change cell format - Currency only covers DM and not $, Euro, Renminbi, Yen or Pound etc. Shift key and arrow keys selects a range of cells, so that '''formatting can be done to all highlighted cells'''. View -> Overview then select ALL with one click (in empty cell in the top left hand corner of the sheet). Default mode is relative cell referencing e.g. a1+a2 but absolute e.g. $a$1+$a$2 can be entered. * #sheet-name to '''absolute''' reference another sheet-name cell unless reference() function used. ;Graphs use shift key and arrow keys to select a bunch of cells to be graph'ed making sure that x axes represents and y axes represents * value() - 0 value, 1 percent, 2 date, 3 time, 4 unit ... ;Dates * Excel starts a running count from the 1st Jan 1900 and Ignition starts from 1st Jan 1AD '''(maybe this needs to change)''' Set formatting Object -> Cell -> Properties and put date in days ;Time Set formatting Object -> Cell -> Properties and put time in seconds taken ;Database (to be done by someone else) type - standard, reference (bezug), search criterion (suchkriterium), * select a bunch of cells and Object -> Database -> Define to set Datenbank (database) and Felder (fields not sure how?) * Neu (new) or loschen (delete) to add/remove database headings e.g. Personal, Start Date, Finish Date (one per row?) * Object -> Database -> Index to add fields (felder) like Surname, First Name, Employee ID, etc. to ? Filtering done with dbfilter(), dbproduct() and dbposition(). Activities with dbsum(), dbaverage(), dbmin() and dbmax(). Table sorting - ;Scripts (Arexx) ;Excel(TM) to Ignition - commas ''',''' replaced by semi-colons ''';''' to separate values within functions *SUM(), *AVERAGE(), MAX(), MIN(), INT(), PRODUCT(), MEDIAN(), VAR() becomes Variance(), Percentile(), *IF(), AND, OR, NOT *LEFT(), RIGHT(), MID() becomes MIDDLE(), LEN() becomes LENGTH(), *LOWER() becomes LOWERCASE(), UPPER() becomes UPPERCASE(), * DATE(yyyy,mm,dd) becomes COMPUTEDATE(dd;mm;yyyy), *TODAY(), DAY(),WEEK(), MONTH(),=YEAR(TODAY()), *EOMONTH() becomes MONTHLENGTH(), *NOW() should be date and time becomes time only, SECOND(), MINUTE(), HOUR(), *DBSUM() becomes DSUM(), ;Missing and possibly useful features/functions needed for ignition to have better support of Excel files There is no Merge and Join Text over many cells, no protect and/or freeze row or columns or books but can LOCK sheets, no define bunch of cells as a name, Macros (Arexx?), conditional formatting, no Solver, no Goal Seek, no Format Painter, no AutoFill, no AutoSum function button, no pivot tables, (30 argument limit applies to Excel) *HLOOKUP(), VLOOKUP(), [http://production-scheduling.com/excel-index-function-most-useful/ INDEX(), MATCH()], CHOOSE(), TEXT(), *TRIM(), FIND(), SUBSTITUTE(), CONCATENATE() or &, PROPER(), REPT(), *[https://acingexcel.com/excel-sumproduct-function/ SUMPRODUCT()], ROUND(), ROUNDUP(), *ROUNDDOWN(), COUNT(), COUNTA(), SUMIF(), COUNTIF(), COUNTBLANK(), TRUNC(), *PMT(), PV(), FV(), POWER(), SQRT(), MODE(), TRUE, FALSE, *MODE(), LARGE(), SMALL(), RANK(), STDEV(), *DCOUNT(), DCOUNTA(), WEEKDAY(), ;Excel Keyboard [http://dmcritchie.mvps.org/excel/shortx2k.htm shortcuts needed to aid usability in Ignition] <pre> Ctrl Z - Undo Ctrl D - Fill Down Ctrl R - Fill right Ctrl F - Find Ctrl H - Replace Ctrl 1 - Formatting of Cells CTRL SHIFT ~ Apply General Formatting ie a number Ctrl ; - Todays Date F2 - Edit cell F4 - toggle cell absolute / relative cell references </pre> ====Document Scanning - Scandal==== Scanner usually needs to be connected via a USB port and not via a hub or extension lead. Check in Trident Prefs -> Devices that the USB Scanner is not bound to anything (e.g. Bindings None) If not found then reboot the computer and recheck. Start Scandal, choose Settings from Menu strip at top of screen and in Scanner Driver choose the ?#.device of the scanner (e.g. epson2.device). The next two boxes - leave empty as they are for morphos SCSI use only or put ata.device (use the selection option in bigger box below) and Unit as 0 this is needed for gt68xx * gt68xx - no editing needed in s/gt68xx.conf but needs a firmware file that corresponds to the scanner [http://www.meier-geinitz.de/sane/gt68xx-backend/ gt68xx firmwares] in sys:s/gt68xx. * epson2 - Need to edit the file epson2.conf in sys/s that corresponds to the scanner being used '''Save''' the settings but do not press the Use button (aros freezes) Back to the Picture Scan window and the right-hand sections. Click on the '''Information''' tab and press Connect button and the scanner should now be detected. Go next to the '''Scanner''' tab next to Information Tab should have Color, Black and White, etc. and dpi settings now. Selecting an option Color, B/W etc. can cause dpi settings corruption (especially if the settings are in one line) so set '''dpi first'''. Make sure if Preview is set or not. In the '''Scan''' Tab, press Scan and the scanner will do its duty. Be aware that nothing is saved to disk yet. In the Save tab, change format JPEG, PNG or IFF DEEP. Tick incremental and base filename if necessary and then click the Save button. The image will now be saved to permanent storage. The driver ignores a device if it is already bond to another USB class, rejects it from being usable. However, open Trident prefs, select your device and use the right mouse button to open. Select "NONE" to prevent poseidon from touching the device. Now save settings. It should always work now. [[#top|...to the top]] ===Emulators=== ==== Amiberry ==== ==== Amiga Emu - Janus UAE ==== With Amibridge, AROS attempts to make the UAE emulator seem embedded within but it still is acting as an app There is no dynarec m68k for each hardware that Aros supports or direct patching of motorola calls to AROS hardware accelerated ones unless the emulator has that included Try starting Janus with a priority of -1 like this little script: <pre> cd sys:system/AmiBridge/emulator changetaskpri -1 run janus-uae -f my_uaerc.config >nil: cd sys:prefs endcli </pre> This stops Janus hogging all the CPU time. ===Miscellaneous=== ====Screensaver Blanker==== Most blankers on the amiga (i.e. aros) run as commodities (they are in the tools/commodities drawer). Double click on blanker. Control is with an app called Exchange, which you need to run first (double click on app) or run QUIET sys:tools/commodities/Exchange >NIL: but subsequently can use (Cntrl Alt h). Icon tool types (may be broken) or command line options <pre> seconds=number </pre> Once the timing is right then add the following to s:icaros-sequence or s:user-startup e.g. for 5 minutes run QUIET sys:tools/commodities/Blanker seconds=300 >NIL: *[http://archives.aros-exec.org/index.php?function=showfile&file=graphics/screenblanker/gblanker.i386-aros.zip Garshneblanker] can make Aros unstable or slow. Certain blankers crashes in Icaros 2.0.x like Dragon, Executor. *[ Acuario AROS version], the aquarium screen saver. Startup: extras:acuariofv-aros/acuario Kill: c:break name=extras:acuariofv-aros/acuario Managed to start Acuario by the Executor blanker. <pre> cx_priority= cx_popkey= ie CX_POPKEY="Shift F1" cx_popup=Yes or No </pre> <pre> Qualifier String Input Event Class ---------------- ----------------- "lshift" IEQUALIFIER_LSHIFT "rshift" IEQUALIFIER_RSHIFT "capslock" IEQUALIFIER_CAPSLOCK "control" IEQUALIFIER_CONTROL "lalt" IEQUALIFIER_LALT "ralt" IEQUALIFIER_RALT "lcommand" IEQUALIFIER_LCOMMAND "rcommand" IEQUALIFIER_RCOMMAND "numericpad" IEQUALIFIER_NUMERICPAD "repeat" IEQUALIFIER_REPEAT "midbutton" IEQUALIFIER_MIDBUTTON "rbutton" IEQUALIFIER_RBUTTON "leftbutton" IEQUALIFIER_LEFTBUTTON "relativemouse" IEQUALIFIER_RELATIVEMOUSE </pre> <pre> Synonym Synonym String Identifier ------- ---------- "shift" IXSYM_SHIFT /* look for either shift key */ "caps" IXSYM_CAPS /* look for either shift key or capslock */ "alt" IXSYM_ALT /* look for either alt key */ Highmap is one of the following strings: "space", "backspace", "tab", "enter", "return", "esc", "del", "up", "down", "right", "left", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "f10", "help". </pre> [[#top|...to the top]] ==== World Construction Set WCS (Version 2.031) ==== WCS is a fractal landscape software such as Scenery Animator, Vista Pro and Panorama. Open sourced February 2022, World Construction Set [https://3dnature.com/downloads/legacy-software/ legally and for free] and [https://github.com/AlphaPixel/3DNature c source]. Announced August 1994 this version dates from April 1996 developed by Gary R. Huber and Chris "Xenon" Hanson" from Questar <pre> Assign "WCSProjects:" "Volume:Dir/Dir/WCSProjects" Assign "WCSFrames:" "Volume:Dir/Dir/WCSFrames" </pre> <pre> Load projects .proj by accessing pull down menu Project -> Open then click on CanyonSunset.proj OK to changing .par file and enlarge Status Log window to show what is happening Render by pull down menu Modules -> Render with End equal 1 not 300 then click bottom middle button Render </pre> [https://www.youtube.com/watch?v=CxQDmf1ZWG0 Youtube walkthrough of above], [], [], Also try working with the already built file ColoDemo - Then open with the drop-down menu: Project/Open, then WCSProject:ColoDemo.proj Which allows you to use altimetric DEM files already included and Loading scene parameters from ColoDemo.par Once this is done, save everything with a new name to start working exclusively on your project. Then drop-down menu and select Save As ("NewName".proj name), then drop-down menu to open parameter and select Save All ( .par name) After launching the software, there is a the Module Control Panel composed of five icons. It is a dock type shortcut of the first few functions of the drop-down menu *Database - Load (#?.proj), Append, Create, Edit, Save, Dir List (of WCSProject drawer), *Data Ops - Extract / Convert Interp DEM, Import DLG, DXF, WDB and export LW map 3d formats *Map View - Database file Loader leading to Map View Control with option to the Database Editor *Parameters - Editor for Motion, Color, Ecosystem, Clouds, Waves, management of altimeter files DEM, sclock settings etc *Render - rendering terrain These are more in the pull down menu but not in the dock *Motion Editor *Color Editor *Ecosys Editor Simple minimal workflow *Load database (1st icon - 1st) *Set parameters and save .par file (4th icon) *Render scene (5th icon) [https://www.youtube.com/watch?v=ZbTwwR2qcc4 Youtube], [], <pre> .proj new project name which creates a drawer of additional files .binary array, ascii array .xyz , z buffer, DTED .dt0, vista 1990s dem, iff conversion .Obj with .elev, .frd with .hdr maps, - digital elevation model (DEM) is a 3D representation of elevation data in various formats USGS 7.5MinDEM, .par </pre> Since for the time being no project is loaded, a query window indicates a procedural error when clicking on the rendering icon (right end of the bar). The menu is quite traditional; it varies according to the activity of the windows. To display any altimetric file in the "Mapview" (third icon of the panel), There are three possibilities: * Loading of a demonstration project. * The import of a DEM file, followed by texturing and packaging from the "Database-Editor" and the "Color-Editor". * The creation of an altimetric file in WCS format, then texturing. The altimeter file editing (display in the menu) is only made possible if the "Mapview" window is active. The software is made up of many windows and won't be able to describe them all. Know that "Color-Editor" and the "Data-Editor" comprise sufficient functions for obtaining an almost real rendering quality. You have the possibility of inserting vector objects in the "Data-Editor" (creation of roads, railways, etc.) The Map View (MapView) window *Database - Objects and Topos *View - Align, Center, Zoom, Pan, Move *Draw - Maps and distance *Object - Find, highlight, add points, conform topo, duplicate *Motion - Camera, Focus, path, elevation *Windows - DEM designer, Cloud (.cld) and wave (.wve) editor, You will notice that by selecting this window and simply moving the pointer to various points on the map you will see latitude and longitude values ​​change, along with the height. Drop-down menu and Modules, then select MapView and change the width of the window with the map to arrange it in the best way on the screen. With the Auto button the center. Window that then displays the contents of my DEM file, in this case the Grand Canyon. MapView allows you to observe the shape of the landscape from above ZOOM button Press the Zoom button and then with the pointer position on a point on the map, press the left mouse button and then move to the opposite corner to circumscribe the chosen area and press the left mouse button again, then we will see the enlarged area selected on the map. Would add that there is a box next to the Zoom button that allows the direct insertion of a value which, the larger it is, the smaller the magnification and the smaller the value, the stronger the magnification. At each numerical change you will need to press the DRAW button to update the view. PAN button Under Zoom you will find the PAN button which allows you to move the map at will in all directions by the amount you want. This is done by drawing a line in one direction, then press PAN and point to an area on the map with the pointer and press the left mouse button. At this point, leave it and move the pointer in one direction by drawing a line and press the left mouse button again to trigger the movement of the map on the screen (origin and end points). Do some experiments and then use the Auto button immediately below to recenter everything. There are parameters such as TOPO, VEC to be left checked and immediately below one that allows different views of the map with the Style command (Single, Multi, Surface, Emboss, Slope, Contour), each with its own particularities to highlight different details. Now you have the first basics to manage your project visually on the map. Close the MapView window and go further... Let's start working on ECOSYSTEMS If we select Emboss from the MapView Style command we will have a clear idea of ​​how the landscape appears, realizing that it is a predominantly desert region of our planet. Therefore we will begin to act on any vegetation present and the appearance of the landscape. With WCS we will begin to break down the elements of the landscape by assigning defined characteristics. It will be necessary to determine the classes of the ecosystem (Class) with parameters of Elevation Line (maximum altitude), Relative Elevation (arrangement on basins or convexities with respectively positive or negative parameters), Min Slope and Max Slope (slope). WCS offers the possibility of making ecosystems coexist on the same terrain with the UnderEco function, by setting a Density value. Ecosys Ecosystem Editor Let's open it from Modules, then Ecosys Editor. In the left pane you will find the list of ecosystems referring to the files present in our project. It will be necessary to clean up that box to leave only the Water and Snow landscapes and a few other predefined ones. We can do this by selecting the items and pressing the Remove button (be careful not for all elements the button is activated, therefore they cannot all be eliminated). Once this is done we can start adding new ecosystems. Scroll through the various Unused and as soon as the Name item at the top is activated allowing you to write, type the name of your ecosystem, adding the necessary parameters. <pre> Ecosystem1: Name: RockBase Class: Rock Density: 80 MinSlope: 15 UnderEco: Terrain Ecosystem2: Name: RockIncl Clss: Rock Density: 80 MinSlope: 30 UnderEco: Terrain Ecosystem3: Name: Grass Class Low Veg Density: 50 Height: 1 Elev Line : 1500 Rel El Eff: 5 Max Slope: 10 – Min Slope: 0 UnderEco: Terrain Ecosistema4: Name: Shrubs Class: Low Veg Density: 40 Height: 8 Elev Line: 3000 Rel El Eff: -2 Max Slope: 20 Min Slope : 5 UnderEco: Terrain Ecosistema5: Name: Terrain Class: Ground Density: 100 UnderEco: Terrain </pre> Now we need to identify an intermediate ecosystem that guarantees a smooth transition between all, therefore we select as Understory Ecosystem the one called Terrain in all ecosystems, except Snow and Water . Now we need to 'emerge' the Colorado River in the Canyon and we can do this by raising the sea level to 900 (Sea Level) in the Ecosystem called Water. Please note that the order of the ecosystem list gives priority to those that come after. So our list must have the following order: Water, Snow, Shrubs, RockIncl, RockBase, Terrain. It is possible to carry out all movements with the Swap button at the bottom. To put order you can also press Short List. Press Keep to confirm all the work done so far with Ecosystem Editor. Remember every now and then to save both the Project 'Modules/Save' and 'Parameter/Save All' EcoModels are made up of .etp .fgp .iff8 for each model Color Editor Now it's time to define the colors of our scene and we can do this by going to Modules and then Color Editor. In the list we focus on our ecosystems, created first. Let's go to the bottom of the list and select the first white space, assigning the name 'empty1', with a color we like and then we will find this element again in other environments... It could serve as an example for other situations! So we move to 'grass' which already exists and assign the following colors: R 60 G 70 B50 <pre> 'shrubs': R 60 G 80 B 30 'RockIncl' R 110 G 65 B 60 'RockBase' R 110 G 80 B 80 ' Terrain' R 150 G 30 B 30 <pre> Now we can work on pre-existing colors <pre> 'SunLight' R 150 G 130 B 130 'Haze and Fog' R 190 G 170 B 170 'Horizon' R 209 G 185 B 190 'Zenith' R 140 G 150 B 200 'Water' R 90 G 125 B 170 </pre> Ambient R 0 G 0 B 0 So don't forget to close Color Editor by pressing Keep. Go once again to Ecosystem Editor and assign the corresponding color to each environment by selecting it using the Ecosystem Color button. Press it several times until the correct one appears. Then save the project and parameters again, as done previously. Motion Editor Now it's time to take care of the framing, so let's go to Modules and then to Motion Editor. An extremely feature-rich window will open. Following is the list of parameters regarding the Camera, position and other characteristics: <pre> -Camera Altitude: 7.0 -Camera Latitude: 36.075 -Camera Longitude: 112.133 -Focus Attitude: -2.0 -Focus Latitude: 36.275 -Focus Longitude: 112.386 -Camera : 512 → rendering window -Camera Y: 384 → rendering window -View Arc: 80 → View width in degrees -Sun Longitude: 172 -Sun Latitude: -0.9 -Haze Start: 3.8 -Haze Range: 78, 5 </pre> As soon as the values ​​shown in the relevant sliders have been modified, we will be ready to open the CamView window to observe the wireframe preview. Let's not consider all the controls that will appear. Well from the Motion Editor if you have selected Camera Altitude and open the CamView panel, you can change the height of the camera by holding down the right mouse button and moving the mouse up and down. To update the view, press the Terrain button in the adjacent window. As soon as you are convinced of the position, confirm again with Keep. You can carry out the same work with the other functions of the camera, such as Focus Altitude... Let's now see the next positioning step on the Camera map, but let's leave the CamView preview window open while we go to Modules to open the window at the same time MapView. We will thus be able to take advantage of the view from the other together with a subjective one. From the MapView window, select with the left mouse button and while it is pressed, move the Camera as desired. To update the subjective preview, always click on Terrain. While with the same procedure you can intervene on the direction of the camera lens, by selecting the cross and with the left button pressed you can choose the desired view. So with the pressure of Terrain I update the Preview. Possibly can enlarge or reduce the Map View using the Zoom button, for greater precision. Also write that the circle around the cameras indicates the beginning of the haze, there are two types (haze and fog) linked to the altitude. Would also add that the camera height is editable through the Motion Editor panel. The sun Let's see that changing the position of the sun from the Motion Editor. Press the SUN button at the bottom right and set the time and the date. Longitude and latitude are automatically obtained by the program. Always open the View Arc command from the Motion Editor panel, an item present in the Parameter List box. Once again confirm everything with Keep and then save again. Animation The animation part is not left-back and also occupies a window. The settings possibilities are enormous. A time line with dragging functions ("slide", "drag"...) comparable to that of LightWave completes this window. A small window is available for positioning the stars as a function of a date, in order to vary the seasons and their various events (and yes...). At the bottom of the "Motion-Editor", a "cam-view" function will give you access to a control panel. Different preview modes are possible. The rendering is also accessible through a window. No less than nine pages compose it. At this level, you will be able to determine the backup name of your images ("path"), the type of texture to be calculated, the resolution of the images, activate or deactivate functions such as the depth buffer ("zbuffer"), the blur, the background image, etc. Once all these parameters have been set, all you have to do is click on the "Render" button. For rendering go to Modules and then Render. Select the resolution, then under IMA select the name of the image. Move to FRA and indicate the level of fractal detail which of 4 is quite good. Then Keep to confirm and then reopen the window, pressing Render you will see the result. The image will be opened with any viewing program. Strengths: * Multi-window. * Quality of rendering. * Accuracy. * Opening, preview and rendering on CyberGraphX screen. * Extract / Convert Interp DEM, Import DLG, DXF, WDB and export LW map 3d formats * The "zbuffer" function. Weaknesses: * No OpenGL management * Calculation time. * No network computing tool. ====Writing CD / DVD - Frying Pan==== Can be backup DVDs (4GB ISO size limit due to use of FileInfoBlock), create audio cds from mp3's, and put .iso files on discs If using for the first time - click Drive button and Device set to ata.device and unit to 0 (zero) Click Tracks Button - Drive 1 - Create New Disc or Import Existing Disc Image (iso bin/cue etc.) - Session File open cue file If you're making a data cd, with files and drawers from your hard drive, you should be using the ISO Builder.. which is the MUI page on the left. ("Data/Audio Tracks" is on the right). You should use the "Data/Audio tracks" page if you want to create music cds with AIFF/WAV/MP3 files, or if you download an .iso file, and you want to put it on a cd. Click WRITE Button - set write speed - click on long Write button Examples Easiest way would be to burn a DATA CD, simply go to "Tracks" page "ISO Builder" and "ADD" everything you need to burn. On the "Write" page i have "Masterize Disc (DAO)", "Close Disc" and "Eject after Write" set. One must not "Blank disc before write" if one uses a CDR AUDIO CD from MP3's are as easy but tricky to deal with. FP only understands one MP3 format, Layer II, everything else will just create empty tracks Burning bootable CD's works only with .iso files. Go to "Tracks" page and "Data/Audio Tracks" and add the .iso ====odf==== Every ODF file is a collection of several subdocuments within a package (ZIP file), each of which stores part of the complete document. * content.xml – Document content and automatic styles used in the content. * styles.xml – Styles used in the document content and automatic styles used in the styles themselves. * meta.xml – Document meta information, such as the author or the time of the last save action. * settings.xml – Application-specific settings, such as the window size or printer information. To read document follow these steps: * Extracting .ods file. * Getting content.xml file (which contains sheets data). * Creating XmlDocument object from content.xml file. * Creating DataSet (that represent Spreadsheet file). * With XmlDocument select “table:table” elements, and then create adequate DataTables. * Parse child’s of “table:table” element and fill DataTables with those data. * At the end, return DataSet and show it in application’s interface. To write document follow these steps: * Extracting template.ods file (.ods file that we use as template). * Getting content.xml file. * Creating XmlDocument object from content.xml file. * Erasing all “table:table” elements from the content.xml file. * Reading data from our DataSet and composing adequate “table:table” elements. * Adding “table:table” elements to content.xml file. * Zipping that file as new .ods file. XLS file format The XLS file format contains streams, substreams, and records. These sheet substreams include worksheets, macro sheets, chart sheets, dialog sheets, and VBA module sheets. All the records in an XLS document start with a 2-byte unsigned integer to specify Record Type (rt), and another for Count of Bytes (cb). A record cannot exceed 8224 bytes. If larger than the rest is stored in one or more continue records. * Workbook stream **Globals substream ***BoundSheet8 record - info for Worksheet substream i.e. name, location, type, and visibility. (4bytes the lbPlyPos FilePointer, specifies the position in the Workbook stream where the sheet substream starts) **Worksheet substream (sheet) - Cell Table - Row record - Cells (2byte=row 2byte=column 2byte=XF format) ***Blank cell record ***RK cell record 32-bit number. ***BoolErr cell record (2-byte Bes structure that may be either a Boolean value or an error code) ***Number cell record (64-bit floating-point number) ***LabelSst cell record (4-byte integer that specifies a string in the Shared Strings Table (SST). Specifically, the integer corresponds to the array index in the RGB field of the SST) ***Formula cell record (FormulaValue structure in the 8 bytes that follow the cell structure. The next 6 bytes can be ignored, and the rest of the record is a CellParsedFormula structure that contains the formula itself) ***MulBlank record (first 2 bytes give the row, and the next 2 bytes give the column that the series of blanks starts at. Next, a variable length array of cell structures follows to store formatting information, and the last 2 bytes show what column the series of blanks ends on) ***MulRK record ***Shared String Table (SST) contains all of the string values in the workbook. ACCRINT(), ACCRINTM(), AMORDEGRC(), AMORLINC(), COUPDAYBS(), COUPDAYS(), COUPDAYSNC(), COUPNCD(), COUPNUM(), COUPPCD(), CUMIPMT(), CUMPRINC(), DB(), DDB(), DISC(), DOLLARDE(), DOLLARFR(), DURATION(), EFFECT(), FV(), FVSCHEDULE(), INTRATE(), IPMT(), IRR(), ISPMT(), MDURATION(), MIRR(), NOMINAL(), NPER(), NPV(), ODDFPRICE(), ODDFYIELD(), ODDLPRICE(), ODDLYIELD(), PMT(), PPMT(), PRICE(), PRICEDISC(), PRICEMAT(), PV(), RATE(), RECEIVED(), SLN(), SYD(), TBILLEQ(), TBILLPRICE(), TBILLYIELD(), VDB(), XIRR(), XNPV(), YIELD(), YIELDDISC(), YIELDMAT(), <pre> </pre> <pre> </pre> <pre> </pre> {{BookCat}} 4keeshri7o6ih6vynt568flvu8vvczi OpenSSH/Logging and Troubleshooting 0 248412 4675293 4675223 2026-10-09T13:54:07Z Larsnooden 430753 restore datetime stamp 4675293 wikitext text/x-wiki Both the OpenSSH client and server offer a lot of choice as to where the logs are written and how much information is collected. A prerequisite for logging is having an accurate system clock using the Network Time Protocol, NTP, or equivalent, service which provides ongoing time synchronization with rest of the world. The more accurate the time stamp in the log is, the faster it is to coordinate forensics between machines or sites or service providers. If you have to contact outside parties like a service provider, progress can usually only be made with very exact times. ==Server Logs== By default [http://man.openbsd.org/sshd.8 sshd(8)] sends logging information to the system logs using the log level INFO and the system log facility AUTH. So the place to look for log data from [http://man.openbsd.org/sshd.8 sshd(8)] is in '''/var/log/auth.log'''. These defaults can be overridden using the '''SyslogFacility''' and '''LogLevel''' directives. Below is a typical server startup entry in the authorization log. <syntaxhighlight lang="text"> Mar 19 14:45:40 server sshd[21157]: Server listening on 0.0.0.0 port 22. Mar 19 14:45:40 server sshd[21157]: Server listening on :: port 22. </syntaxhighlight> In most cases the default level of logging is sufficient, but during initial testing of new services or activities it is sometimes necessary to have more information. Debugging info usually goes to '''stderr'''. Starting with OpenSSH 7.6, '''Match''' blocks can set alternate log levels for specific conditions. The log excerpt below show the same basic server start up with increased detail. Contrast the log level DEBUG1 below with the default above: <syntaxhighlight lang="text"> Apr 5 12:39:14 server sshd[85029]: debug1: Bind to port 22 on 0.0.0.0. Apr 5 12:39:14 server sshd[85029]: Server listening on 0.0.0.0 port 22. Apr 5 12:39:14 server sshd[85029]: debug1: Bind to port 22 on ::. Apr 5 12:39:14 server sshd[85029]: Server listening on :: port 22. </syntaxhighlight> And here is the same startup using the most verbose level, DEBUG3: <syntaxhighlight lang="text"> Apr 5 12:40:59 server sshd[49707]: debug2: fd 6 setting O_NONBLOCK Apr 5 12:40:59 server sshd[49707]: debug1: Bind to port 22 on 0.0.0.0. Apr 5 12:40:59 server sshd[49707]: Server listening on 0.0.0.0 port 22. Apr 5 12:40:59 server sshd[49707]: debug2: fd 7 setting O_NONBLOCK Apr 5 12:40:59 server sshd[49707]: debug1: Bind to port 22 on ::. Apr 5 12:40:59 server sshd[49707]: Server listening on :: port 22. </syntaxhighlight> Every failed login attempt is recorded, once the value in directive '''MaxAuthTries''' is exceeded the connection is broken. Below is a log excerpt showing how the default log looks after some failed attempts: <syntaxhighlight lang="text"> ... Apr 5 12:44:43 server sshd-session[80932]: Failed password for root from 103.42.56.121 port 58164 ssh2 Apr 5 12:44:51 server last message repeated 2 times Apr 5 12:44:51 server sshd-session[80932]: Connection closed by authenticating user root 103.42.56.121 port 58164 [preauth] ... </syntaxhighlight> It is not usually a good idea to allow root login, especially not root login with authentication via password. Blocking login for root simplifies the log analysis greatly, and in particular it eliminates the time consuming question of who is trying to get in and why. People that need full root level access can gain it through [https://man.openbsd.org/su.1 su(1)] for general activities. Or for specific tasks which need root level access, those can be given those privileges through custom-made entries for '''sudo(8)''' or [https://man.openbsd.org/doas.1 doas(1)]. Note that in those cases, only specific services and programs should be allowed, not blanket access which is an all too common misconfiguration seen with '''sudo(8)'''. Alternatively, a single-purpose key made using '''forced-commands-only''' could be used since some argue that providing extra means of privilege escalation, such as [https://man.openbsd.org/su.1 su(1)], '''sudo(8)''', or [https://man.openbsd.org/doas.1 doas(1)], is more dangerous than carefully providing remote root access through a key or certificate tied to a specific function. ===Successful logins=== By default, the server does not store much information about user transactions. That is a good thing. It is also a good thing to recognize when the system is operating as it should. So here is an example of a successful SSH login: <syntaxhighlight lang="text"> Apr 4 13:30:08 server sshd-session[86956]: Accepted password for fred from 198.51.100.135 port 52646 ssh2 </syntaxhighlight> And here is an example using a key for authentication. It shows the key fingerprint as a SHA256 hash in base64. <syntaxhighlight lang="text"> Apr 5 12:49:11 server sshd-session[41210]: Accepted publickey for fred from 198.51.100.135 port 28927 ssh2: ED25519 SHA256:03u96bPG5qYi7hIEohNDfxOW+KOpMS9LPi4YdiCtGaI </syntaxhighlight> And here is an example of successful authentication with a user certificate. The certificate's identification string is "foobar" and the serial number is "9624". In this example the certificate is using ECDSA and the key itself is using Ed25519. The certificate, being a different key of its own, has a different SHA256 fingerprint from the authentication key itself. <syntaxhighlight lang="text"> Apr 5 13:50:57 server sshd-session[20263]: Accepted publickey for fred from 127.0.0.1 port 41783 ssh2: ED25519-CERT SHA256:UP1+mGQ5tfT84YCRVgytAKtikn0ujmfhXKdoxRoWDtU ID edcba (serial 2) CA ED25519 SHA256:4lngxTgobhprXfPY/p+2HNMBg6PxNDaOWrvei6kScrM </syntaxhighlight> In all three cases, older versions prior to 9.8 will use a process named '''sshd''' rather than one named '''sshd-session''' as is now a side effect of better privilege separation. Prior to 6.8, the key's fingerprint was a hexadecimal MD5 hash. <syntaxhighlight lang="text"> Jan 28 11:51:43 server sshd[5104]: Accepted publickey for fred from 192.0.2.60 port 60594 ssh2: RSA e8:31:68:c7:01:2d:25:20:36:8f:50:5d:f9:ee:70:4c </syntaxhighlight> In older versions of OpenSSH prior to 6.3 the key fingerprint is completely missing from authentication logging. <syntaxhighlight lang="text"> Jan 28 11:52:05 server sshd[1003]: Accepted publickey for fred from 192.0.2.60 port 20042 ssh2 </syntaxhighlight> Here is an example of password authentication for an SFTP session, using the server's internal-sftp subsystem. The logging for that subsystem set to INFO. <syntaxhighlight lang="text"> Mar 14 20:14:18 server sshd-session[19850]: Accepted password for fred from 192.0.2.60 port 59946 ssh2 </syntaxhighlight> Here is an example of a successful SFTP login using an Ed25519 key for authentication, with the SFTP subsystem itself logging at INFO. <syntaxhighlight lang="text"> Apr 5 13:56:02 server shd-session[58881]: Accepted publickey for fred from 192.0.2.60 port 40445 ssh2: ED25519 SHA256:UP1+mGQ5tfT84YCRVgytAKtikn0ujmfhXKdoxRoWDtU Apr 5 13:56:02 server internal-sftp[21121]: session opened for local user fred from [192.0.2.60] </syntaxhighlight> Additional data, such as connection duration, can be logged with the help of xinetd(8). ===Logging Problems from SSH Certificate Authentication=== When a certificate fails, there is generally no client side information disclosed and all investigation must occur server side. Finding the account or actual certificate in question can require some sleuthing in older versions of OpenSSH, but newer versions can identify the certificate and the certificate authority under certain circumstances. It is also important to be familiar with how log entries are supposed to look when things go correctly. Here is a successful login using certificate-based authentication: <syntaxhighlight lang="text"> Aug 7 18:32:29 server sshd-session[49021]: Accepted publickey for fred from 192.0.2.60 port 10932 ssh2: ED25519-CERT SHA256:UP1+mGQ5tfT84YCRVgytAKtikn0ujmfhXKdoxRoWDtU ID fedcba (serial 11) CA ED25519 SHA256:4lngxTgobhprXfPY/p+2HNMBg6PxNDaOWrvei6kScrM </syntaxhighlight> When the connection is closed there will be a log entry noting which account was involved. Older versions of OpenSSH will have less information in the log. <syntaxhighlight lang="text"> Nay 5 16:02:50 server sshd-session[32110]: Received disconnect from 192.0.2.60 port 12952:11: disconnected by user May 5 16:02:50 server sshd-session[32110]: Disconnected from user fred 192.0.2.60 port 12952 </syntaxhighlight> However, if the connection is allowed to timeout without first making any other authentication attempts by some other means, then there will be nothing to go on except maybe the time of day. <syntaxhighlight lang="text"> Apr 5 14:03:12 server sshd[9205]: Timeout before authentication for connection from 192.0.2.60 to 203.0.113.120, pid = 57844 </syntaxhighlight> Below are some common examples of log entries for failed certificate-based login attempts. There can sometimes be more than one problem with a certificate but in such cases only one error will get logged at a time. ====Expired or Not-yet-valid Certificate==== Certificates which have not yet become valid or which have already expired get a log entry as to the reason and include the offending certificate's id string and serial number as well as the fingerprint of the signing certificate authority. Below is one which is not yet valid being rejected by the server, perhaps at a future date it will be valid but that information is in the certificate, not the log. <syntaxhighlight lang="text"> Aug 7 19:02:52 server sshd-session[96551]: error: Refusing certificate ID "fedcb" serial=9 signed by ED25519 CA SHA256:4ZyxpgCaw3Y8wz91ajLWARibUGfwyuOrftt2wermMJE: Certificate invalid: not yet valid </syntaxhighlight> Next is an expired certificate which has been rejected. <syntaxhighlight lang="text"> Aug 7 19:02:53 server sshd-session[99417]: error: Refusing certificate ID "gfedc" serial=5 signed by ED25519 CA SHA256:4ZyxpgCaw3Y8wz91ajLWARibUGfwyuOrftt2wermMJE: Certificate invalid: expired </syntaxhighlight> If a certificate is not yet valid, then the log entry will say that explicitly. The trailing text on the line will be "Certificate invalid: not yet valid". The old style log entries for an expired certificate and for a certificate which has not yet become valid have much less information. <syntaxhighlight lang="text"> Apr 5 14:33:31 server sshd-session[88953]: error: Certificate invalid: expired Apr 5 14:32:41 server sshd-session[51695]: error: Certificate invalid: not yet valid </syntaxhighlight> The improved logging arrived with OpenSSH 10.1 ====Valid Certificate but Invalid Principal==== Like with other reasons for rejecting certificates, when the account and allowed principals do not match the account logging in, information is logged about which certificate was tried and failed. Here is an entry showing an invalid principal: <syntaxhighlight lang="text"> Aug 7 19:02:54 server sshd-session[12928]: error: Refusing certificate ID "edcba" serial=33 signed by ED25519 CA SHA256:4lngxTgobhprXfPY/p+2HNMBg6PxNDaOWrvei6kScrM: Certificate invalid: name is not a listed principal </syntaxhighlight> The old style log entry from OpenSSH 10.0 and earlier provides much less information about the certificate in question: <syntaxhighlight lang="text"> Apr 5 14:34:56 server sshd-session[66692]: error: Certificate invalid: name is not a listed principal </syntaxhighlight> If the client closes the connection on purpose, there may be some information in the connection closed entry but that will be a different log entry. ====Valid Certificate but Invalid Source Address==== If the certificate is limited to connecting from specific addresses or host names, the log will complain if the connection comes from a different address or host and identify the incorrect source address. The information will be split across two log entries, which might or might not be adjacent depending on how busy the server is. Here is an entry showing an invalid source address: <syntaxhighlight lang="text"> Aug 7 19:12:08 server sshd-session[29034]: cert: Authentication tried for fred with valid certificate but not from a permitted source address (198.51.100.135). Aug 7 19:12:08 server sshd-session[29034]: error: Refusing certificate ID "ihgfe" serial=8 signed by ED25519 CA SHA256:4ZyxpgCaw3Y8wz91ajLWARibUGfwyuOrftt2wermMJE: Refused by certificate options </syntaxhighlight> Prior to OpenSSH 10.1, the second entry had much less information about the offending certificate. <syntaxhighlight lang="text"> Apr 5 14:57:47 server sshd-session[78381]: cert: Authentication tried for fred with valid certificate but not from a permitted source address (198.51.100.135). Apr 5 14:57:47 server sshd-session[78381]: error: Refused by certificate options </syntaxhighlight> However, it will not be possible to identify the specific certificate directly with that old style log entry. ===Logging SFTP File Transfers=== SFTP file transfers can be logged using '''LogLevel''' INFO or VERBOSE. The log level for the SFTP server can be set in [http://man.openbsd.org/sshd_config.5 sshd_config(5)] separately from the general SSH server settings. <syntaxhighlight lang="apache" line="1"> Subsystem internal-sftp -l INFO </syntaxhighlight> By default the SFTP messages will also end up in ''auth.log'' but it is possible to filter these messages to their own file by reconfiguring the system logger, usually rsyslogd(8) or [https://man.openbsd.org/syslogd syslogd(8)]. Sometimes this is done by changing the log facility code from the default of AUTH. Available options are LOCAL0 through LOCAL7, plus, less usefully, DAEMON and USER. <syntaxhighlight lang="apache" line="1"> Subsystem internal-sftp -l INFO -f LOCAL6 </syntaxhighlight> If new system log files are assigned, it is important to remember them in the log rotation, too. Again, the '''Match''' directive can be use to change the log level just for certain connections. The following log excerpts are generated from using the log level INFO. A session starts with an open and end with a close. The number in the brackets is the process id for the SFTP session and is the only way to follow a session through the logs. <syntaxhighlight lang="text"> Oct 22 11:59:45 server internal-sftp[4929]: session opened for local user fred from [192.0.2.33] ... Oct 22 12:09:10 server internal-sftp[4929]: session closed for local user fred from [192.0.2.33] </syntaxhighlight> Here is an SFTP upload of a small file of 928 bytes named '''foo''' to the home directory for user 'fred' when logging the SFTP at log level INFO. <syntaxhighlight lang="text"> Oct 22 11:59:50 server internal-sftp[4929]: open "/home/fred/foo" flags WRITE,CREATE,TRUNCATE mode 0664 Oct 22 11:59:50 server internal-sftp[4929]: close "/home/fred/foo" bytes read 0 written 928 </syntaxhighlight> And a directory listing in the same session in the directory '''/var/www'''. <syntaxhighlight lang="text"> Oct 8 07:28:25 server internal-sftp[34984]: opendir "/" Oct 8 07:28:25 server internal-sftp[34984]: closedir "/" Oct 8 07:28:26 server internal-sftp[34984]: opendir "/" Oct 8 07:28:26 server internal-sftp[34984]: closedir "/" Oct 8 07:28:27 server internal-sftp[34984]: opendir "/var/" Oct 8 07:28:27 server internal-sftp[34984]: closedir "/var/" Oct 8 07:28:27 server internal-sftp[34984]: opendir "/var/www/" Oct 8 07:28:27 server internal-sftp[34984]: closedir "/var/www/" </syntaxhighlight> And lastly here is a download of the same small 928-byte file called '''foo''' from the home directory for the user 'fred'. <syntaxhighlight lang="text"> Oct 22 12:08:03 server internal-sftp[4929]: open "/home/fred/foo" flags READ mode 0666 Oct 22 12:08:03 server internal-sftp[4929]: close "/home/fred/foo" bytes read 928 written 0 </syntaxhighlight> Successful transfers will be noted by a ''close'' message. Attempts to download (open) files that do not exist will be followed by a ''sent status No such file'' message on a line of its own instead of a ''close''. Files that exist but that the user is not allowed to read will create a ''sent status Permission denied'' message. ===Logging Chrooted SFTP=== Logging with the built-in '''sftp-subsystem''' inside a chroot jail, defined by '''ChrootDirectory''', needs a '''./dev/log''' node to exist inside the jail. This can be done by having the system logger such as [http://man.openbsd.org/syslogd.8 syslogd(8)] add additional log sockets inside the chrooted directory when starting up. On some systems that is as simple as adding more flags, like "'''-u -a /chroot/dev/log'''", in '''/etc/rc.conf.local''' or whatever the equivalent startup script may be. Here is an example of an SFTP login with password to a chroot jail using log level DEBUG3 for the SFTP-subsystem. The log shows a file upload: <syntaxhighlight lang="text">Apr 5 15:08:41 server sshd-session[31716]: Accepted password for fred from 198.51.100.135 port 39238 ssh2 Apr 5 15:08:41 server internal-sftp[55598]: session opened for local user fred from [198.51.100.135] Apr 5 15:08:41 server internal-sftp[55598]: received client version 3 Apr 5 15:08:41 server internal-sftp[55598]: debug1: request 1: limits Apr 5 15:08:41 server internal-sftp[55598]: debug3: request 2: realpath Apr 5 15:08:41 server internal-sftp[55598]: realpath "." Apr 5 15:08:41 server internal-sftp[55598]: debug1: request 2: sent names count 1 Apr 5 15:08:52 server internal-sftp[55598]: debug3: request 3: open flags 26 Apr 5 15:08:52 server internal-sftp[55598]: open "/home/fred/foo" flags WRITE,CREATE,TRUNCATE mode 0664 Apr 5 15:08:52 server internal-sftp[55598]: debug1: request 3: sent handle 0 Apr 5 15:08:52 server internal-sftp[55598]: debug1: request 5: write "/home/fred/foo" (handle 0) off 0 len 33 Apr 5 15:08:52 server internal-sftp[55598]: debug3: request 5: sent status 0 Apr 5 15:08:52 server internal-sftp[55598]: sent status Success Apr 5 15:08:52 server internal-sftp[55598]: debug3: request 4: close handle 0 Apr 5 15:08:52 server internal-sftp[55598]: close "/home/fred/foo" bytes read 0 written 33 Apr 5 15:08:52 server internal-sftp[55598]: debug3: request 4: sent status 0 Apr 5 15:08:52 server internal-sftp[55598]: sent status Success </syntaxhighlight> Remember that SFTP is a separate subsystem and that like the file creation mode, the log level and log facility are set separately from the SSH server in [http://man.openbsd.org/sshd_config.5 sshd_config(5)], for example: <syntaxhighlight lang="apache" line="1"> Subsystem internal-sftp -l ERROR </syntaxhighlight> ===Logging Stability of Client Connectivity=== When '''ClientAliveInterval''' is set in the server's configuration, the server makes periodic probes of the clients which have established connections. At normal log levels, these are not noted in the log until something goes wrong. If the '''ClientAliveInterval''' is exceeded more times in a row than allowed by '''ClientAliveCountMax''' the client is officially declared disconnected and the connection dropped. At the default log level of INFO a brief message is logged, identifying the client which has been dropped. <syntaxhighlight lang="text"> Sep 6 14:42:08 server sshd[83709]: packet_write_poll: Connection from 192.0.2.97 port 57608: Host is down </syntaxhighlight> At log level DEBUG, the client's responses to the polls will be logged by the server showing that the session is still connected. <syntaxhighlight lang="text"> Sep 6 14:27:52 server sshd[9075]: debug1: Got 100/147 for keepalive </syntaxhighlight> Log level DEBUG2 and DEBUG3 will give even more information about the connection. However, even at log level DEBUG3, the specific client being polled will not be identified directly in the log messages and will have to be inferred from the process id of the daemon if such information is needed. <syntaxhighlight lang="text"> Sep 6 14:30:59 server sshd[73960]: debug2: channel 0: request keepalive@openssh.com confirm 1 Sep 6 14:30:59 server sshd[73960]: debug3: send packet: type 98 Sep 6 14:30:59 server sshd[73960]: debug3: receive packet: type 100 Sep 6 14:30:59 server sshd[73960]: debug1: Got 100/22 for keepalive </syntaxhighlight> Again, when the '''ClientAliveCountMax''' is exceeded, the connection is broken after the final failure of the client to respond. Here is how that looks with the log level set to DEBUG2. <syntaxhighlight lang="text"> Sep 6 14:17:55 server sshd[15780]: debug2: channel 0: request keepalive@openssh.com confirm 1 Sep 6 14:17:55 server sshd[15780]: debug1: Got 100/22 for keepalive Sep 6 14:18:37 server sshd[15780]: debug2: channel 0: request keepalive@openssh.com confirm 1 Sep 6 14:18:37 server sshd[15780]: packet_write_poll: Connection from 192.0.2.97 port 57552: Host is down Sep 6 14:18:37 server sshd[15780]: debug1: do_cleanup Sep 6 14:18:37 server sshd[48675]: debug1: do_cleanup Sep 6 14:18:37 server sshd[48675]: debug1: session_pty_cleanup: session 0 release /dev/ttyp0 </syntaxhighlight> The directives '''ClientAliveInterval''' and '''ClientAliveCountMax''' normally apply to all clients connecting to the server. However, they can be used inside a '''Match''' block and thus applied only to specific connections. ===Logging Revoked Keys=== If the '''RevokedKeys''' directive is used to point to a list of public keys that have been revoked, [http://man.openbsd.org/sshd.8 sshd(8)] will make a log entry when access is attempted using a revoked key. The entry will be the same whether a plaintext list of public keys is used or if a binary Key Revocation List (KRL) has been generated. If password authentication is allowed, and the user tries it, then after the key authentication fails there will be a record of password authentication. <syntaxhighlight lang="text"> Mar 14 20:36:40 server sshd-session[29235]: error: Authentication key RSA SHA256:jXEPmu4thnubqPUDcKDs31MOVLQJH6FfF1XSGT748jQ revoked by file /etc/ssh/ssh_revoked_keys ... Mar 14 20:36:45 server sshd-session[29235]: Accepted password for fred from 192.0.2.10 port 59967 ssh2 </syntaxhighlight> If password authentication is not allowed, [http://man.openbsd.org/sshd.8 sshd(8)] will close the connection as soon as the key fails. <syntaxhighlight lang="text"> Mar 14 20:38:27 server sshd-session[29163]: error: Authentication key RSA SHA256:jXEPmu4thnubqPUDcKDs31MOVLQJH6FfF1XSGT748jQ revoked by file /etc/ssh/ssh_revoked_keys ... </syntaxhighlight> The account trying the revoked key remains a mystery though. So it will be necessary to try to look up the key by its fingerprint from your archive of old keys using <code>ssh-keygen -lf</code> and read the key's comments. Although if a valid account cancels the connection without trying a password after the key attempt fails, the usual message will still be posted to the log and that will show the login name. <syntaxhighlight lang="text"> Mar 14 20:44:04 server sshd-session[14352]: Connection closed by authenticating user fred 192.0.2.237 port 55051 [preauth] ... </syntaxhighlight> That may be enough to provide some clue and allow a bit of log filtering with a short AWK script, if the messages are all in the same log file. <syntaxhighlight lang="shell-session"> $ awk '/revoked by file/ { pid[$5]++; key[$5]=$9; hash[$5]=$10; next; } pid[$5] && /closed by authenticating user/ { print key[$5], hash[$5], $10, $11; delete key[$5]; delete hash[$5]; delete pid[$5]; }' /var/log/authlog </syntaxhighlight> Similarly, if the client makes no attempt at logging in and just times out, the message will say just that. <syntaxhighlight lang="text"> Mar 18 21:40:25 server sshd[9942]: fatal: Timeout before authentication for connection from 198.51.100.236 to 203.0.113.75, pid = 67611 ... </syntaxhighlight> On the client side, no warning or error will be given if a revoked key is tried. It will just fail and the next key or method will be tried. ===Brute force and Hail Mary attacks=== It’s fairly common to see failed login attempts almost as soon as the server is connected to the net. Brute force attacks, where one machine hammers on a few accounts trying to find a valid password, are becoming rare. In part this is because packet filters, like NFables for Linux and PF for the BSDs, can limit the number and rate of connection attempts from a single host. The server configuration directive '''MaxStartups''' can limit the number of simultaneous, unauthenticated connections. <syntaxhighlight lang="text"> ... Apr 4 16:45:34 server sshd-session[96275]: Failed password for root from 103.42.56.121 port 48294 ssh2 ... Apr 4 16:46:58 server sshd-session[96275]: Failed password for root from 103.42.56.121 port 48294 ssh2 ... Apr 4 16:47:04 server sshd-session[96275]: Failed password for root from 103.42.56.121 port 48294 ssh2 Apr 4 16:47:05 server sshd-session[96275]: Connection closed by authenticating user root 103.42.56.121 port 48294 [preauth] ... </syntaxhighlight> Prior to 9.8, it was slightly different: <syntaxhighlight lang="text"> ... Mar 18 18:54:44 server sshd[54939]: Failed password for root from 201.179.249.231 port 52404 ssh2 Mar 18 18:54:48 server sshd[54939]: Failed password for root from 201.179.249.231 port 52404 ssh2 Mar 18 18:54:49 server sshd[54939]: Failed password for root from 201.179.249.231 port 52404 ssh2 Mar 18 18:54:49 server sshd[54939]: error: maximum authentication attempts exceeded for root from 201.179.249.231 port 52404 ssh2 [preauth] Mar 18 18:54:49 server sshd[54939]: Disconnecting authenticating user root 201.179.249.231 port 52404: Too many authentication failures [preauth] ... </syntaxhighlight> Note the "authenticating user" is present in the logs from OpenSSH 7.5 and onward when a valid user name is attempted. When an invalid user name is attempted, that is written too. <syntaxhighlight lang="text"> ... Apr 3 10:25:59 server sshd-session[78513]: Invalid user ad1tz from 103.42.56.121 port 55778 Apr 3 10:26:00 server sshd-session[78513]: Received disconnect from 103.42.56.121 port 55778:11: Bye Bye [preauth] Apr 3 10:26:00 server sshd-session[78513]: Disconnected from invalid user ad1tz 103.42.56.121 port 55778 [preauth] ... </syntaxhighlight> Again, in versions prior to 9.8, the process name is different as is the closing message. <syntaxhighlight lang="text"> ... Mar 18 18:55:05 server sshd[38594]: Invalid user ubnt from 201.179.249.231 port 52471 Mar 18 18:55:05 server sshd[38594]: Failed password for invalid user ubnt from 201.179.249.231 port 52471 ssh2 Mar 18 18:55:09 server sshd[38594]: error: maximum authentication attempts exceeded for invalid user ubnt from 201.179.249.231 port 52471 ssh2 [preauth] Mar 18 18:55:09 server sshd[38594]: Disconnecting invalid user ubnt 201.179.249.231 port 52471: Too many authentication failures [preauth] ... </syntaxhighlight> The way to deal with brute force attacks coming from a single machine or network is to customize the server host’s packet filter to limit the attacks or even temporarily block machines that overload the maximum number or rate of connections. Optionally, one should also contact the attacker’s net block owner with the IP address and exact date and time of the attacks. A kind of attack common at the time of this writing is one which is distributed over a large number of compromised machines, each playing only a small role in attacking the server. To deal with Hail Mary attacks, contact the attacker’s net block owner. A form letter with a cut-and-paste excerpt from the log is enough if it gives the exact times and addresses. Alternately, teams of network or system administrators can work to pool data to identify and blacklist the compromised hosts participating in the attack. ====Failed None For Invalid User==== The SSH protocol specifies a number of possible authentication methods<ref name="rfc_4252">{{cite web | url =https://datatracker.ietf.org/doc/html/rfc4252#section-5.2 | title=RFC 4252: The Secure Shell (SSH) Authentication Protocol | date=2006 | publisher=IETF | access-date=2021-08-10 }}</ref>. The methods <code>password</code>, <code>keyboard-interactive</code>, and <code>publickey</code> are fairly common. A lesser known authentication method is <code>none</code>, which will only succeed if the server requires no further authentication such as if '''PermitEmptyPassword''' is set and the account does not actually have a password<ref name="failed_none">{{cite mailing list | url=https://marc.info/?l=openbsd-misc&m=162858437916966&w=2 | last=Tucker | first=Darren | mailing-list=OpenBSD-Misc | date=2021-08-10 | accessdate=2021-08-10 | title=Re: ssh authlog: Failed none for invalid user | publisher=OpenBSD}}</ref>. Some SSH clients including OpenSSH's start by asking for <code>none</code> authentication and then use the list of remaining possible authentication methods to decide what to do next if that doesn't work. <syntaxhighlight lang="text"> ... Aug 10 19:09:05 server sshd[93126]: Failed none for invalid user admin from 125.64.94.136 port 27586 ssh2 ... </syntaxhighlight> So in other words, that is a brute force attack trying the <code>none</code> authentication method. It is an attack which will only get into accounts which have been explicitly set with an empty password and furthermore have also been set up specifically to allow access by having both the authentication method of <code>none</code> and the '''PermitEmptyPasswords''' configuration directive enabled on the server. Most brute force attacks try only <code>password</code> authentication, and some of those even check for the <code>password</code> method and then give up if it is not available. Other attackers may just hammer away pointlessly even if the method is not available. ===Connections Seemingly From 127.0.0.1, ::1, or Other localhost Addresses=== When the SSH server is accessed via a reverse tunnel to another machine, the incoming connections will appear to be from the ''localhost'' address, which is usually ''127.0.0.1'' or ''::1''. <syntaxhighlight lang="text"> Mar 23 14:16:16 server sshd[9265]: Accepted password for fred from 127.0.0.1 port 40426 ssh2 </syntaxhighlight> If the port at the other end of the reverse tunnel is publicly accessible, it will be probed and possibly attacked. Because of the reverse tunnel, the attacks will then also appear to be coming from the server's own loopback address: <syntaxhighlight lang="text"> Mar 23 14:20:17 server sshd-session[5613]: Invalid user cloud from ::1 port 57404 Mar 23 14:20:21 server sshd-session[5613]: Failed password for invalid user cloud from ::1 port 57404 ssh2 Mar 23 14:20:26 server sshd-session[5613]: Failed password for invalid user cloud from ::1 port 57404 ssh2 Mar 23 14:20:35 server sshd-session[5613]: Connection closed by invalid user cloud ::1 port 57404 [preauth] </syntaxhighlight> Like in the other examples, the disconnection message was different prior to 9.8: <syntaxhighlight lang="text"> ... Mar 23 14:20:32 server sshd[5613]: Failed password for invalid user cloud from ::1 port 57404 ssh2 Mar 23 14:20:35 server sshd[5613]: Connection closed by invalid user cloud ::1 port 57404 [preauth] ... </syntaxhighlight> Therefore the usual countermeasures like SSHGuard or Fail2Ban or other similar intrusion detection systems cannot be used because the ''localhost'' address is used by the tunnel for all login attempts, regardless of their real origins. A partial solution would be to bind the incoming connections to a different IP address. The loopback interface would need an additional permanent address, an alias, for that. That alias could then be assigned when establishing the reverse tunnel: <syntaxhighlight lang="shell-session"> $ ssh -R 2022:127.2.2.1:22 fred@vps.example.org </syntaxhighlight> Thus it would designate the source address for all logins coming in over that tunnel. So, in that way, the alias would then show up in the logs instead of the default loopback address when that reverse tunnel is used: <syntaxhighlight lang="text"> Mar 23 18:00:13 server sshd-session[8525]: Invalid user cloud from 127.2.2.1 port 17271 Mar 23 18:00:15 server sshd-session[8525]: Failed password for invalid user cloud from 127.2.2.1 port 17271 ssh2 Mar 23 18:00:19 server sshd-sesssion[8525]: Failed password for invalid user cloud from 127.2.2.1 port 17271 ssh2 Mar 23 18:01:23 server sshd-session[8525]: Failed password for invalid user cloud from 127.2.2.1 port 17271 ssh2 Mar 23 18:01:26 server sshd-session[8525]: Connection closed by invalid user cloud 127.2.2.1 port 17271 [preauth] </syntaxhighlight> If the ports do not need to be available to the open Internet, a full solution would be just to ensure that they are not accessible from the outside. This would be done by not using the '''-g''' option on the client when making the reverse tunnel or else by setting the '''GatewayPorts''' directive in [http://man.openbsd.org/sshd_config.5 sshd_config(5)] back to the default of '''no''', or both. The system's built-in packet filter can also be used. Then, even with the forwarded ports closed off from the outside, the '''ProxyJump''' option can still be used to skip through the jump host and use the setup for SSH access. However, since it is sometimes necessary that these ports be accessible to the outside world, this approach is not always an option. ==Client Logging== The OpenSSH client normally sends log information to '''stderr'''. The '''-y''' option can be used to send output to the system logs, managed by [http://man.openbsd.org/syslogd.8 syslogd(8)] or something similar. Client log verbosity can be increased or decreased by changing the '''LogLevel''' directive and the log facility changed with the '''SyslogFacility''' directive in [http://man.openbsd.org/ssh_config.5 ssh_config(5)]. Both require use of the '''-y''' run-time option and do nothing without it. Alternatively, instead of using the '''-y''' option, using the '''-E''' option sends log output to a designated file instead of '''stderr'''. Working with the system logs or separate log files are something which can be useful when running [http://man.openbsd.org/ssh.1 ssh(1)] in automated scripts. Below is an example of a connection to an interactive shell with the normal level of client logging: <syntaxhighlight lang="shell-session"> $ ssh -l fred server.example.org fred@server.example.org‘s password: Last login: Thu Jan 27 13:21:57 2011 from 192.168.11.1 </syntaxhighlight> The same connection at the first level of verbosity gives lots of debugging information, 90 lines in all. <syntaxhighlight lang="shell-session"> $ ssh -v -l fred server.example.org debug1: OpenSSH_10.6, LibreSSL 4.4.0 debug1: Reading configuration data /etc/ssh/ssh_config debug1: no pubkey loaded from /home/fred/.ssh/id_rsa debug1: identity file /home/fred/.ssh/id_rsa type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_rsa debug1: no pubkey loaded from /home/fred/.ssh/id_ecdsa debug1: identity file /home/fred/.ssh/id_ecdsa type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_ecdsa debug1: no pubkey loaded from /home/fred/.ssh/id_ecdsa_sk debug1: identity file /home/fred/.ssh/id_ecdsa_sk type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_ecdsa_sk debug1: no pubkey loaded from /home/fred/.ssh/id_ed25519 debug1: identity file /home/fred/.ssh/id_ed25519 type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_ed25519 debug1: no pubkey loaded from /home/fred/.ssh/id_ed25519_sk debug1: identity file /home/fred/.ssh/id_ed25519_sk type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_ed25519_sk debug1: no pubkey loaded from /home/fred/.ssh/id_mldsa44_ed25519 debug1: identity file /home/fred/.ssh/id_mldsa44_ed25519 type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_mldsa44_ed25519 debug1: Connecting to server.example.org [198.51.100.20] port 22. debug1: Connection established. debug1: Local version string SSH-2.0-OpenSSH_10.6 debug1: Remote protocol version 2.0, remote software version OpenSSH_10.6 debug1: compat_banner: match: OpenSSH_10.6 pat OpenSSH* compat 0x04000000 debug1: Authenticating to server.example.org:22 as 'fred' debug1: load_hostkeys: fopen /home/fred/.ssh/known_hosts2: No such file or directory debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT received debug1: kex: algorithm: mlkem768x25519-sha256 debug1: kex: host key algorithm: ssh-ed25519 debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none debug1: expecting SSH2_MSG_KEX_ECDH_REPLY debug1: SSH2_MSG_KEX_ECDH_REPLY received debug1: Server host key: ssh-ed25519 SHA256:agRZDZn8awhQ+tc19Ip/whkHoV33Ln2REO7v1kcYbdU debug1: load_hostkeys: fopen /home/fred/.ssh/known_hosts2: No such file or directory debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory debug1: Host 'server.example.org' is known and matches the ED25519 host key. debug1: Found key in /home/fred/.ssh/known_hosts:1 debug1: ssh_packet_send2_wrapped: resetting send seqnr 3 debug1: rekey out after 134217728 blocks debug1: SSH2_MSG_NEWKEYS sent debug1: Sending SSH2_MSG_EXT_INFO debug1: expecting SSH2_MSG_NEWKEYS debug1: ssh_packet_read_poll2: resetting read seqnr 3 debug1: SSH2_MSG_NEWKEYS received debug1: rekey in after 134217728 blocks debug1: SSH2_MSG_EXT_INFO received debug1: kex_ext_info_client_parse: server-sig-algs=<ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ssh-ed25519@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com,rsa-sha2-512,rsa-sha2-256,ssh-mldsa44-ed25519,webauthn-sk-ecdsa-sha2-nistp256@openssh.com> debug1: kex_ext_info_check_ver: publickey-hostbound@openssh.com=<0> debug1: kex_ext_info_check_ver: ping@openssh.com=<0> debug1: kex_ext_info_check_ver: agent-forward=<0> debug1: SSH2_MSG_SERVICE_ACCEPT received debug1: SSH2_MSG_EXT_INFO received debug1: kex_ext_info_client_parse: server-sig-algs=<ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ssh-ed25519@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com,rsa-sha2-512,rsa-sha2-256,ssh-mldsa44-ed25519,webauthn-sk-ecdsa-sha2-nistp256@openssh.com> debug1: Authentications that can continue: publickey,password,keyboard-interactive debug1: Next authentication method: publickey debug1: Will attempt key: /home/fred/.ssh/id_rsa debug1: Will attempt key: /home/fred/.ssh/id_ecdsa debug1: Will attempt key: /home/fred/.ssh/id_ecdsa_sk debug1: Will attempt key: /home/fred/.ssh/id_ed25519 debug1: Will attempt key: /home/fred/.ssh/id_ed25519_sk debug1: Will attempt key: /home/fred/.ssh/id_mldsa44_ed25519 debug1: Trying private key: /home/fred/.ssh/id_rsa debug1: Trying private key: /home/fred/.ssh/id_ecdsa debug1: Trying private key: /home/fred/.ssh/id_ecdsa_sk debug1: Trying private key: /home/fred/.ssh/id_ed25519 debug1: Trying private key: /home/fred/.ssh/id_ed25519_sk debug1: Trying private key: /home/fred/.ssh/id_mldsa44_ed25519 debug1: Next authentication method: keyboard-interactive debug1: Authentications that can continue: publickey,password,keyboard-interactive debug1: Next authentication method: password Authenticated to server.example.org ([198.51.100.20]:22) using "password". debug1: channel 0: new session [client-session] (inactive timeout: 0.000000) debug1: Requesting no-more-sessions@openssh.com debug1: Entering interactive session. debug1: pledge: filesystem debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0 debug1: client_input_hostkeys: searching /home/fred/.ssh/known_hosts for server.example.org / (none) debug1: client_input_hostkeys: searching /home/fred/.ssh/known_hosts2 for server.example.org / (none) debug1: client_input_hostkeys: hostkeys file /home/fred/.ssh/known_hosts2 does not exist debug1: client_input_hostkeys: no new or deprecated keys from server debug1: pledge: fork debug1: client_input_channel_req: channel 0 rtype keepalive@openssh.com reply 1 debug1: client_input_channel_req: channel 0 rtype keepalive@openssh.com reply 1 debug1: client_input_channel_req: channel 0 rtype keepalive@openssh.com reply 1 Last login: Sat Mar 14 21:31:33 2015 from 192.0.2.111 ... </syntaxhighlight> The same login with the maximum of verbosity, '''-vvv''', gives around 239 lines of debugging information. The following will save the debugging information separately in a file, '''ssh-client.log''', in the home directory. <syntaxhighlight lang="shell-session"> $ ssh -vvv -E ~/ssh-client.log -l fred somehost.example.org </syntaxhighlight> ===Capturing Client Debugging Information Together with the Session Contents=== Regular pipes and redirects work only with '''stdout''' so that if '''-E''' is not used to capture debugging output the output on '''stderr''' must instead be sent to '''stdout''' if one is going to capture it at the same time as the actual session. That is done with an extra redirect, '''2>&amp;1''' to capture '''stderr'''. Mind the spaces, or lack of them. The following will capture both the session text and the debugging information to a file, '''ssh-client.log''', in the home directory: <syntaxhighlight lang="shell-session"> $ ssh -vvv -l fred somehost.example.org 2>&1 | tee ~/ssh-output.log </syntaxhighlight> The tool [http://man.openbsd.org/tee.1 tee(1)] is like a T-pipe and sends output two directions, one to '''stdout''' and one to a file. ===Changing Client Debugging Levels At Runtime or On The Fly=== At run-time, when establishing a new connection, just use the '''-v''' option. <syntaxhighlight lang="shell-session"> $ sftp -v -o "IdentityFile=~/.ssh/weblog.key_ed25519" fred@server.example.org </syntaxhighlight> The debugging verbosity on the client can be increased just like on the server. <syntaxhighlight lang="shell-session"> $ sftp -vvv -o "IdentityFile=~/.ssh/weblog.key_ed25519" fred@server.example.org </syntaxhighlight> The extra information can be useful to see exactly what is being sent to or requested of the server. After the fact, once a connection is established, the escape sequences '''~v''' and '''~V''' can be used to increase or decrease, respectively, the verbosity on the fly. Through them it is possible to change the verbosity of the client in an established connection. When increasing the log level with '''~v''', the client raises its log level to VERBOSE, DEBUG, DEBUG2, and DEBUG3, in that order, if starting from the default of INFO. Conversely, when lowering the log level with '''~V''', the client will descend through ERROR, FATAL, to QUIET if starting from the default of INFO. ==Debugging and Troubleshooting== The server logs are your best friend when troubleshooting. It may be necessary to turn up the log level there temporarily to get more information. It is then also necessary to turn them back to normal after things are fixed to avoid privacy problems or excessively use of disk space. For example, the SFTP-subsystem logging defaults to ERROR, reporting only errors. To track transactions made by the client, change the log level to INFO or VERBOSE: <syntaxhighlight lang="apache" line="1"> Subsystem internal-sftp -l INFO </syntaxhighlight> Caution. Again, operating with elevated logging levels would violate the privacy of users, in addition to filling a lot of disk space. Elevated logging levels should generally not be used in production once the changes are figured out. Even then, the elevated log messages should really be sent to a separate log file during the time they are being collected. By default, some systems send only the normal messages to the regular system log files and ignore the elevated messages. Some save all the messages by default. If the elevated system log messages are not showing up in any of the system logs, that may be the reason. Either way, check the system log configurations and make sure that the extra messages are only sent to a separate log file and not mixed in with the regular system logs. Change the configuration to do that, if necessary. Separating the extra messaging helps keep the logs tidy as well as protecting privacy. The system log settings are found in the system log daemon's configuration file, the exact name of which will vary depending on what is installed, but common ones are [https://man.openbsd.org/syslog.conf.5 syslog.conf(5)] and rsyslog.conf(5). Notice that the configuration below has the all messages including the more detailed VERBOSE, and on up through DEBUG3, messages for the AUTH facility going to a separate log file from the regular AUTH messages: <syntaxhighlight lang="shell-session"> $ grep '^auth\.' /etc/syslog.conf auth.info /var/log/authlog auth.* /var/log/authdebug </syntaxhighlight> See [https://man.openbsd.org/syslog.3 syslog(3)] for the log facilities and log levels. It is best to limit the time the debugging information is collected to be as short as possible and to actively watch the logs while the extra information is being collected. However, if the more verbose logging is running for any length of time, and especially if it is left unattended even for a short while, be sure to remember to add the new log file to the log rotation schedule so that it cannot fill up the partition. Note, logs might be handled by other services on some systems. Check with the official documentation for your system to be sure. On the client side, '''Match''' blocks can help further by setting log levels for specific situations and avoid a situation where everything is logged intensely. The manual pages for OpenSSH are very well written and many times problems can be solved by finding the right section within the right manual page. At the very minimum, it is important to skim through the four main manual pages for both the programs and their configuration to become familiar with at least the section headings. * [http://man.openbsd.org/ssh.1 ssh(1)] * [http://man.openbsd.org/ssh_config.5 ssh_config(5)] * [http://man.openbsd.org/sshd.5 sshd(8)] * [http://man.openbsd.org/sshd_config.5 sshd_config(5)] Once the right section is found in the manual page, read it in detail and become familiar with its contents. The same goes for the other OpenSSH manual pages, depending on the activity. Be sure to use the version(s) of OpenSSH actually in use on your system(s) with their corresponding manual pages. When possible, use those that are installed on your system so as to avoid a mismatch. In some cases, the client and the server will be of different versions, so the manual pages for each must be looked up separately. It is also a good idea to review OpenSSH's release notes when a new version is published. With a few exceptions below, specific examples of troubleshooting are usually given in the cookbook section relevant to a particular activity. So, for example, sorting problems with authentication keys is done in the section on [[OpenSSH/Cookbook/Authentication_Keys|Public Key Authentication]] itself. ===Debugging a script, configuration or key that uses sudo(8)=== Usually log levels only need to be changed when writing and testing a script, a new configuration, some new keys, or all three at once. When working with '''sudo(8)''', it is especially important to see exactly what the client is sending so as to enter the right pattern into '''/etc/sudoers''' for safety. Using the lowest level of verbosity, the exact string being sent by the client to the remote server is shown in the debugging output: <syntaxhighlight lang="shell-session"> $ rsync -e "ssh -v -i /home/webmaint/.ssh/bkup_key -l webmaint" \ -a server.example.org:/var/www/ var/backup/www/ ... debug1: Sending command: rsync --server --sender -logDtpre.iLsfxCIvu . /var/www/ ... </syntaxhighlight> What '''sudoers''' then needs is something like the following, assuming account 'webmaint' is in the group 'webmasters': <syntaxhighlight lang="apache" line="1"> %webmasters ALL=(ALL) NOPASSWD: /usr/local/bin/rsync --server \ --sender -logDtpre.iLsfxCIvu . /var/www/ </syntaxhighlight> The same method can be used to debug new server configurations or key logins. Once things are set to run as needed, the log level settings can be lowered back to INFO for [http://man.openbsd.org/sshd.8 sshd(8)] and to ERROR for '''internal-sftp'''. Additionally, once the script is left to run in fully automated mode, the client logging information can be set use the [http://man.openbsd.org/syslog.3 syslog(3)] system module instead of '''stderr''' by using the '''-y''' option when [http://man.openbsd.org/ssh ssh(1)] is launched. ===Debugging a server configuration=== Running the server in debug mode provides a lot of information about the connection and a smaller amount about the server configuration. The server's debugging level ('''-d''') can be raised once, twice ('''-dd''') or thrice ('''-ddd'''). <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -d </syntaxhighlight> Note that in this case the server does not detach and become a daemon, so it will terminate when the SSH connection terminates. The advantage is this collects the logs for one single session and only that session. The server must be started again in order to make a subsequent connection from the client. Though in some ways this is a hassle, it does make sure that session data is a unique set and not mixes of multiple sessions and thus possibly different configurations. Alternately, another option ('''-e''') when debugging sends the debugging data to '''stderr''' instead in order to keep the system logs clean. It is also possible to log the debugging data from the system logs directly to a separate file and keep noise out of the system logs. Since OpenSSH 6.3, the option '''-E''' will append the debug data to a particular log file instead of sending it to the system log. This facilitates debugging live systems without cluttering the system logs. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -E /home/fred/sshd.debug.log -d </syntaxhighlight> In really old versions of OpenSSH, which are hopefully no longer in production, if you need to save output to a file while still viewing it live on the screen, you can use '''tee(1)'''. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -ddd 2>&1 | tee /tmp/foo </syntaxhighlight> That will save output to the file ''foo'' by redirecting to '''stdout''' what [http://man.openbsd.org/sshd.8 sshd(8)] sent to '''stderr''' and saving it to a file. This works with really old versions of OpenSSH, but the '''-E''' option above is preferable. If the server is remote and it is important to reduce the risk of getting locked out, the experiments on the configuration file can be done with a second instance of [http://man.openbsd.org/sshd.8 sshd(8)] using a separate configuration file and listening to a high port until the settings have been tested. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -dd -p 22222 -f /home/fred/sshd_config.test </syntaxhighlight> If the OpenSSH server's configuration file is set to listen on odd ports or more than one port using the '''ListenAddress''' directive, then that can also be overriden so that the server listens on the extra port. <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -o 'ListenAddress 0.0.0.0:22222' -dd \ -f /home/fred/sshd_config.test </syntaxhighlight> It is also possible to make an extended test ('''-T''') of the configuration file first. If there is a syntax error, it will be reported, but remember that even sound configurations can still lock you out. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -T | sort | less -X </syntaxhighlight> The extended test mode can be used by itself, but it is also possible to specify custom parameters to use with '''-C''' to see what happens with specific kinds of connections. [http://man.openbsd.org/sshd.8 sshd(8)] will the connection. It will then process the configuration file in light of the parameters passed to it and return output with the modified results. This is good for showing the results of any '''Match''' directives which might apply to the session. The variables ''user'', ''host'', and ''addr'' are the minimum required passing when specific connection parameters to [http://man.openbsd.org/sshd.8 sshd(8)] for evaluation with the '''-C''' option . The following options will print out the configurations that will be applied when the user ''fred'' tries to log in to the host ''server.example.org'' from the address ''192.0.2.15'': <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -T -C user=fred,host=server.example.org,addr=192.0.2.15 </syntaxhighlight> Two more parameters, ''laddr'' and ''lport'', may also be passed. They refer to the server's IP number and port connected to. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -T -C user=fred,host=server.example.org,addr=192.0.2.15,laddr=192.0.2.2,lport=2222 </syntaxhighlight> And lastly, there is a parameter ''rdomain'' to specify the routing domain or routing table to try. Between those six variables it should be possible to describe any possible incoming connection. ====Adding Timestamps to Server Debugging Output==== The '''-d''' option increases the value for '''LogLevel''' but does not prepend any timestamps to the server's output. Timestamps can nevertheless be added on the fly by writing the debug logs to '''stderr''' using the '''-e''' option, redirecting '''stderr''' to '''stdout''', and then piping that into [https://man.openbsd.org/ts ts(1)], a timestamping utility. <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -p 2222 -e -d 2>&1 | ts "%.T" | tee /tmp/sshd.log </syntaxhighlight> That will show the time, including microseconds. Mind the dot there before the letter 'T'. The options '''-i''' and '''-s''' for [https://man.openbsd.org/ts ts(1)] can be relevant, too. The '''-i''' option will measure the relative time between the timestamps themselves. The '''-s''' option will show the time elapsed since the start of the program. Other custom date and time formats can be specified as per [https://man.openbsd.org/strftime strftime(3)], if needed. When [https://man.openbsd.org/ts ts(1)] is not already present it can usually be added via the moreutils package. Although some systems, such as OpenBSD, include it in the base system. If it is not already installed and not available for installation, then Perl can be used on POSIX systems to prepend a timestamp to '''stdin''': <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -p 2222 -e -d 2>&1 \ | perl -p -e 'use POSIX strftime; print strftime("%F %T ", localtime)' \ | tee /tmp/sshd.log </syntaxhighlight> However, that only provides an accuracy of whole seconds. If more precision is needed, then Python3 can provide timestamps with precision down to the microsecond. <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -p 2222 -e -d 2>&1 \ | python -c 'import datetime; import sys; [print (datetime.datetime.now(), flush=True) for line in sys.stdin]' \ | tee /tmp/sshd.log </syntaxhighlight> Note that the Python approach requires explicitly setting the buffer to flush automatically. Some non-POSIX shells can make use of [https://mywiki.wooledge.org/ProcessSubstitution process substitution] to pipe '''stderr''' output into another program. <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -p 2222 -e -d 2> >(ts) | tee /tmp/sshd.log | less -X </syntaxhighlight> There are even fancier approaches using IO redirection on extra file descriptors, but those are far outside the scope of this book. ===Debugging a client configuration=== Sometimes when debugging a server configuration it is necessary to track the client configurations settings, as well. Since OpenSSH 6.8, the '''-G''' option makes [http://man.openbsd.org/ssh.1 ssh(1)] print its configuration after evaluating any '''Host''' and '''Match''' blocks and then exit without connecting. That allows viewing of the exact configuration options which will actually be used by the client for a particular session. <syntaxhighlight lang="shell-session"> $ ssh -G -l fred server.example.org | sort </syntaxhighlight> Client configuration is determined in three ways. The first is by run-time options, then by the account's own configuration file, or lastly the system-wide client configuration file. The priority is in that order. Whichever value is found first gets used. With [http://man.openbsd.org/sftp.1 sftp(1)] the options are also passed to [http://man.openbsd.org/ssh.1 ssh(1)]. ====Invalid or Outdated Ciphers or MACs==== A proper client will show the details of the failure. For a bad Message Authentication Code (MAC), a proper client might show something like the following when trying to foist a bad MAC like hmac-md5-96 onto the server: <syntaxhighlight lang="text"> no matching mac found: client hmac-md5-96 server umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1 </syntaxhighlight> And for a bad cipher, a proper client might show something like this when trying to foist an arcfour cipher on the server: <syntaxhighlight lang="text"> no matching cipher found: client arcfour server chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com </syntaxhighlight> Sometimes when troubleshooting a problem with the client it is necessary to turn to the server logs. In [https://www.openssh.org/txt/release-6.7 OpenSSH 6.7 unsafe MACs were removed] and in [https://www.openssh.org/txt/release-7.2 OpenSSH 7.2 unsafe ciphers were removed], but some third-party clients may still try to use them to establish a connection. In that case, the client might not provide much information beyond a vague message that the server unexpectedly closed the network connection. The server logs will, however, show what happened: <syntaxhighlight lang="text"> fatal: no matching mac found: client hmac-sha1,hmac-sha1-96,hmac-md5 server hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160 [preauth] </syntaxhighlight> More recent versions would show a simpler error for a bad MAC. <syntaxhighlight lang="text"> fatal: Unable to negotiate with 192.0.2.37 port 55044: no matching MAC found. Their offer: hmac-md5-96 [preauth] </syntaxhighlight> A bad cipher would be reported like this: <syntaxhighlight lang="text"> fatal: Unable to negotiate with 192.0.2.37 port 55046: no matching cipher found. Their offer: arcfour [preauth] </syntaxhighlight> The error message in the server log might not say which MACs or ciphers are actually available. For those, the extended test mode can be used to show the server settings and, in particular, the MACs or ciphers allowed. In its most basic usage the extended test mode would just be '''-T''', as in <code>/usr/sbin/sshd -T | grep -E 'cipher|macs'</code> with no other options. For more details and options, see the previous section on "Debugging a server configuration" above. One solution there is to upgrade the client to one that can handle the right ciphers and MACs. Another option is to switch to a different client, one that can handle the modern ciphers or MACs. See also the configuration directive '''WarnWeakCrypto''' in the manual page. It has been around since 10.1. The default for '''WarnWeakCrypto''' is 'yes'. ===Debugging Key-Based Authentication=== The most common causes of failure for public key authentication seem to be for either of two reasons: * Mangling the public key on the way to getting it into '''authorized_keys''' on the server * Incorrect permissions for the files and directories involved, ether on the client or the server. These are the directory for the keys, usually '''~/.ssh/''', or its parent directories, or the '''authorized_keys''' file, or the private key itself. As of the time of this writing, it looks like pretty much every failure of key-based authentication described on mailing lists and forums is solved by addressing either or both of those two situations. So, when encountering the error message ''Permission denied (publickey,keyboard-interactive)'', or similar, see the section on [[OpenSSH/Cookbook/Public Key Authentication|Public Key Authentication]]. Also be sure to read the manual page for [http://man.openbsd.org/sshd.8 sshd(8)] and its section on authorized keys. Usually, though not always, it will be obvious when the private key's permissions are incorrect: <syntaxhighlight lang="shell-session"> $ ssh -i ~/.ssh/fred-193.ed25519 fred@192.0.2.193 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0664 for '/home/fred/.ssh/fred-193.ed25519' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. Load key "/home/fred/.ssh/fred-193.ed25519": bad permissions </syntaxhighlight> In addition mangled public keys in the authorized keys file and to incorrect permissions, a very rare third case is if the public and private key files don't match and are not from the same key pair. As mentioned in the section on [[OpenSSH/Cookbook/Public Key Authentication|Public Key Authentication]], the public and private keys need to be parts of the same key pair so that they match. That is because even before the SSH client uses private key cryptographically, it looks at the file name of the proposed private key and then sends the public key matching that same name, if it exists, to the server. If that public key does not match the public key on the server in '''authorized_keys''' then the connection will be denied with the error ''Permission denied (publickey,keyboard-interactive)'' or similar. That alone is a very good reason to give unique descriptive file names when creating keys. Note that as mentioned above there are usually other causes to that same error message besides having mismanaged the public key file on the client machine. The file names for both parts of each key pair have to be kept synchronized so that the names match. As for a solution, the way out in the long term is to stay organized and carefully manage the keys and their file names. It can be solved on the short term by deleting the offending ''public'' key file and then using the private key to regenerate a new one, replacing the incorrect public key under that name. Again, this is an unusual edge case and not a common cause of that error. ====SSH Too Many Authentication Failures==== When there are multiple keys in the authentication agent, the client will try them against the server in the same order in which they were added to the agent. However, on odd or older agents they are returned in an unpredictable order. Newer versions allow the client to query the server to see if a particular key is acceptable. This is set by the '''PubkeyAuthOptions''' and is counted separately from the '''MaxAuthTries''' directive. When the former are used up, then the additional tries count against the latter. Either way, if the client happens to cycle through enough of the wrong keys first and hits the server's '''MaxAuthTries''' limit before finding the right key, the server will naturally break off the connection with an error message on the server about too many authentication failures: <syntaxhighlight lang="text"> Disconnecting authenticating user fred 203.0.113.110 port 35893: Too many authentication failures [preauth] </syntaxhighlight> Or in earlier versions: <syntaxhighlight lang="text"> "Received disconnect from 203.0.113.110 port 22:2: Too many authentication failures Authentication failed." </syntaxhighlight> When that happens, the client side will show this error: <syntaxhighlight lang="text"> Received disconnect from server.example.org port 22:2: Too many authentication failures Disconnected from server.example.org port 22 </syntaxhighlight> With increased verbosity, the specific keys tested and rejected will also be shown by the client. Newer clients will include the key's comment, if available, and not just the fingerprint. The keys get tried first from the agent in the order in which they were loaded into the agent, then from : <syntaxhighlight lang="shell-session"> $ ssh -v 203.0.113.110 . . . hdebug1: Offering public key: a key for fred ED25519 SHA256:7e5qkSHxSp8xitlM4JP4dOeCdnQn Vt9q6GPaB0+IrSM agent debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering public key: fred's key ED25519 SHA256:8U7Fy6nJxbxfAu0K8WXZV0WN80t/ 4lb/f9bqObw0isE agent debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering public key: one more comment ED25519 SHA256:F61Sx2t4BmoHASuMCVrBd8C30A7S QdGPwgfb7ZGWZf0 agent debug1: Authentications that a publickey,keyboard-interactive debug1: Offering public key: fred@desk.example.org ED25519 SHA256:TMfO5S6oBQ0Cu273yPp9+7carGP926kRfg6iS435cmU agent debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering public key: yet one more key ED25519 SHA256:36tMBWe4kX9hyVLZaxyjm2pp1TMFbRw0+O1xWOU5Fgk agent debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering public key: the last straw ED25519 SHA256:gNZd1TF48UgEUgoYFNXop9tEhO53If1qiDqZyKbRT4U agent Received disconnect from 203.0.113.110 port 2222:2: Too many authentication failures Disconnected from 203.0.113.110 port 2222 </syntaxhighlight> Each key in the agent also gets an annotation which says whether or not the key file was supplied by the user, either in the configuration file or as a run-time argument. For the former, it will marked with 'agent' and for the latter two as 'explicit'. The client prefers keys that are currently in the agent in the order in which they were added to the agent. Then it will try the one(s) added via run-time arguments, in the order in which they are supplied. Then, lastly, it will try the one(s) specified in the client configuration file. Or in earlier versions the file name used to load the key will be listed by the client in verbose mode, but the order will be less predictable: <syntaxhighlight lang="shell-session"> $ ssh -v 203.0.113.110 ... debug1: SSH2_MSG_SERVICE_ACCEPT received debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Next authentication method: publickey debug1: Offering RSA public key: /home/fred/.ssh/key.06.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.02.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.03.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.04.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.01.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.05.rsa Received disconnect from port 22:2: Too many authentication failures Authentication failed. </syntaxhighlight> In the older clients, the client prefers keys that were specified in the configuration and are also currently in the agent. Then it will try try them in the order in which they were supplied. [3] <ref name="key_order">{{cite mailing list | url=https://lists.mindrot.org/pipermail/openssh-unix-dev/2019-April/037700.html | title=IdentityFile vs IdentitiesOnly | date=2019-04-01 | accessdate=2019-04-04 | mailinglist=openssh-unix-dev | last=Tucker |first=Darren }}</ref> There are two solutions if you see the ''Too many authentication failures'' error: One way around this error is to remove keys from the agent one at a time using [http://man.openbsd.org/ssh-add.1 ssh-add(1)] with the '''-d''' option until there is just the right key left. Refer to each key by its file system path, for example: <code>ssh-add -d ~/.ssh/some.key.rsa</code> Because the private key to be removed is looked up in the agent based on the corresponding public key both files must exist. Without matching a public key file, the private key cannot be removed individually from the authentication agent. Instead the whole lot may be removed all at once using the '''-D''' option. However, is not always practical to do either when many remote systems are used frequently and the agent needs to be kept well-stocked. This is probably not the most practical way. Another way around this error, and probably the most practical method, is to limit the client to trying only a specific key using the '''IdentitiesOnly''' configuration directive in conjunction with the '''IdentityFile''' configuration directive. The latter points explicitly to the right key. Both can be added either as run-time options or in the client's configuration file. As a runtime option, they can be used like this: <syntaxhighlight lang="shell-session"> $ ssh -o IdentitiesOnly=yes -i ~/.ssh/server14.example.org.rsa -l fred server14.example.org </syntaxhighlight> Those settings can be stored permanently by adding something like the following '''IdentitiesFile''' and '''IdentitiesOnly''' directives to the client configuration file instead. <syntaxhighlight lang="apache" line="1"> Host server14 server14.example.org HostName server14.example.org IdentitiesOnly yes IdentityFile /home/fred/.ssh/server14.example.org.rsa User fred </syntaxhighlight> In that way, the server could be reached with either the short name or the fully qualified domain name, whatever names are listed under the '''Host''' stanza. <syntaxhighlight lang="shell-session"> $ ssh server14 </syntaxhighlight> Remember that options are selected from the client configuration file on a first-match basis. Because the first-match wins, specific rules must come before more general rules in the client configuration file. ====Signing Failed for ... Agent Refused Operation==== As mentioned, incorrect permissions on client files or directories are a common cause of authentication failure when attempting key-based authentication. Not all the errors are clear about that, however. Here is an example of a misleading error message which is actually caused by incorrect permissions: <syntaxhighlight lang="shell-session"> $ ssh -i ~/.ssh/key-ed25519 fred@server.example.org sign_and_send_pubkey: signing failed for ED25519 "/home/fred/.ssh/key-ed25519" from agent: agent refused operation fred@server.example.org: Permission denied (publickey). </syntaxhighlight> The solution for that is to ensure that no other accounts can read or write to the private key. No others should be able to write to the '''.ssh''' directory or its parent either. ===Debugging Chrooted SFTP Accounts=== With chrooted SFTP sessions, the most common problem seems to be bad directory permissions. The chroot directory, and all directories above it, must be owned by root and not writable by any other user or group. Even though these directories' group memberships do not have to be root, if any of them is not root then it must not be group writable either. Failure to use the correct ownership will result in not being able to log in with the affected accounts. The errors when login is attempted can look like this from the client side: <syntaxhighlight lang="shell-session"> $ sftp fred@192.0.2.206 fred@192.0.2.206's password: Connection to 192.0.2.206 closed by remote host. Connection closed. </syntaxhighlight> Older clients will look like this: <syntaxhighlight lang="shell-session"> $ sftp fred@192.0.2.206 fred@192.0.2.206's password: packet_write_wait: Connection to 192.0.2.206: Broken pipe Couldn't read packet: Connection reset by peer </syntaxhighlight> The error message is much clearer on the server side: <syntaxhighlight lang="text"> Aug 4 23:52:38 server sshd[7075]: fatal: bad ownership or modes for chroot directory component "/home/fred/" </syntaxhighlight> Check the directory permissions for the chroot target and all directories above it. If even one is off it must be fixed so that it is owned by root and not writable by any others. There are many, many routes to get there. Here are two was to set up chroot permissions: * One quick way to fix the permissions is to change both ownership and group membership of the directory to root. Same for all directories above the chroot target. <syntaxhighlight lang="shell-session"> $ ls -lhd /home/ /home/fred/ drwxr-xr-x 3 root root 4.0K Aug 4 20:47 /home/ drwxr-xr-x 8 root root 4.0K Aug 4 20:47 /home/fred/ </syntaxhighlight> That will work with the '''ChrootDirectory''' directive set to '''%h''' but has some drawbacks that will quickly become obvious when adding files or directories. * Another easy way to fix the permissions is to change both the account's home directory and the '''ChrootDirectory''' directive. Arrange the account's home directory so that it is under a unique directory owned by root, such as the user name itself: <syntaxhighlight lang="shell-session"> $ ls -lhd /home/ /home/fred/ /home/fred/fred/ drwxr-xr-x 3 root root 4.0K Aug 4 20:47 /home/ drwxr-x--- 3 root fred 4.0K Aug 4 20:47 /home/fred/ drwxr-x--- 8 fred fred 4.0K Aug 4 20:47 /home/fred/fred/ </syntaxhighlight> Then chroot the account to the parent directory and combine that with an alternate starting directory working from the user name token with the '''-d''' option for the SFTP server. <syntaxhighlight lang="apache" line="1"> ChrootDirectory /home/%u ForceCommand internal-sftp -d %u </syntaxhighlight> That way, when the account connects it will see only its own directory and no other parts of the system. ===Debugging RC Scripts Interfering with SFTP Sessions=== Recent versions of the server do not launch either '''/etc/ssh/sshrc''' or '''~/.ssh/rc/''' when initiating an SFTP session. However, on older versions, these scripts will get executed for both SFTP and SSH, if present and the server is configured to run them. Therefore, in older versions one common mistake is when either '''/etc/ssh/sshrc''' or '''~/.ssh/rc''' send anything at all to '''stdout''' instead of being quiet. The SFTP connection will drop when there are any extraneous data either direction on '''stdin''', whether from the client or the server. The reason is that the output to '''stdout''' on the server is received by the client on '''stdin''' but matches no correct protocol and thus causes the client to disconnect with an error. However, even in the case of using the RC scripts, the response from the server must remain 8-bit clean or an error will occur: <syntaxhighlight lang="shell-session"> $ sftp server.example.org Received message too long 1400204832 </syntaxhighlight> That one message will be the main clue. Increasing the verbosity of the SFTP client with '''-v''' won't provide more relevant information. Upgrading [http://man.openbsd.org/sshd.8 sshd(8)] might be a more practical option, when possible. When the RC scripts cause the SFTP client to disconnect, the standard server logs will show only that the client disconnected and not provide any information about why. At higher levels of logging, some extraneous reads and corresponding discards might be noticed but that is all. Below is a log sample recorded at the verbosity DEBUG3 showing such an example. <syntaxhighlight lang="text"> ... debug2: subsystem request for sftp by user fred debug1: subsystem: exec() /usr/libexec/sftp-server Starting session: subsystem 'sftp' for fred from 198.51.100.38 port 37446 id 0 ... debug2: channel 0: read 13 from efd 12 debug3: channel 0: discard efd debug2: channel 0: read 12 from efd 12 debug3: channel 0: discard efd debug2: channel 0: read 15 from efd 12 debug3: channel 0: discard efd debug2: channel 0: read 18 from efd 12 debug3: channel 0: discard efd ... </syntaxhighlight> Again, new versions won't run the RC scripts when connecting for an SFTP session. On older versions, neither RC script is may produce any output on '''stdout''' during use of SFTP or it will ruin the connection. If an RC script does produce output, it must be redirected to a system log, to a file, or sent to '''stderr''' instead of '''stdout'''. Regular interactive SSH connections are not disturbed by use of '''stdout''' and the client will just display whatever is sent. See the manual page for [http://man.openbsd.org/sshd.8 sshd(8)] in the section "SSHRC" for more. The same restriction goes for any other part of the SSH service which runs over '''stdin''' and '''stdout''', such as '''ProxyJump''' or some uses of '''ProxyCommand'''. So another example of potential interference would be when using '''LocalCommand''' with the client to specify a command to execute on the local machine after successfully connecting to the server. Any output from it also needs to be redirected to '''stderr'''. If '''LocalCommand''' ends up interfering with '''ProxyJump''' then the connection will appear to hang at the stage when '''stdout''' gets used. ===Debugging When An SSH Agent Has The Correct Private Key But Does Not Use It=== In older versions of OpenSSH, the public key must also be available on the client at the time the private key is loaded into the agent. If it is not then without the matching public key the agent will not be able to use that private key unless other arrangements are made. A symptom of this is although specifying the key via a run-time argument works, the same key does not work via the agent. Upgrading to a more recent version of OpenSSH is a better option. Otherwise a work-around is to specify the private key either as a run-time argument to the client or in the [http://man.openbsd.org/ssh_config.5 ssh_config(5)] file, from there the client will find the correspondingly named public key file. Importantly the client will still use the key in the agent yet use the designated matching public key file, so the private key file does not have to contain anything at all and could even be empty. <syntaxhighlight lang="shell-session"> $ ssh -i some_key_ed25519 fred@server.example.org </syntaxhighlight> However, if it is undesirable to have the private key accessible on the file system or if the private key is only in the agent and not itself available via the file system, then the public key can be specified explicitly instead. <syntaxhighlight lang="shell-session"> $ ssh -i some_key_ed25519.pub fred@server.example.org </syntaxhighlight> Either way, another approach is to name the key in [http://man.openbsd.org/ssh_config.5 ssh_config(5)] using the '''IdentityFile''' configuration directive. When a public key file is missing, it can easily be regenerated from the private key using [http://man.openbsd.org/ssh-keygen.1 ssh-keygen(1)] with the '''-y''' option. ==SSH Client Error Messages And Common Causes== As rehash of the above, below are some client-side error messages with some of the more common reasons<ref name="troubleshooting">{{cite web | url=https://ittavern.com/ssh-troubleshooting-guide/ | title=SSH Troubleshooting Guide | date=2023-01-17 | publisher=IT Tavern | access-date=2023-01-26 }}</ref> for those messages. Neither list of errors nor the reasons for the errors are comprehensive. The suggestions for causes just touch on one or two of the commonly seen reasons. There is no substitute for checking the actual logs, especially on the server. The server log files are usually '''/var/log/auth.log''' on most system or a variant of that name. Occasionally you will find the information in the file '''/var/log/secure''' instead. '''No address associated with name:''' <syntaxhighlight lang="shell-session"> $ ssh nonesuch.example.org ssh: Could not resolve hostname nonesuch.example.org: no address associated with name </syntaxhighlight> The destination's host name does not exist in DNS. Was it spelled correctly? '''Operation timed out:''' <syntaxhighlight lang="shell-session"> $ ssh 198.51.100.89 ssh: connect to host 198.51.100.89 port 22: Operation timed out </syntaxhighlight> There's not a system associated with that IP address, or else a packet filter is causing trouble. '''Connection timed out:''' <syntaxhighlight lang="shell-session"> $ ssh 198.51.100.89 ssh: connect to host 198.51.100.89 port 22: Connection timed out </syntaxhighlight> You can't get there from here. It is probable that the destination machine is disconnected from the network or that the network which it is on is not reachable. '''Connection refused:''' <syntaxhighlight lang="shell-session"> $ ssh www.example.org ssh: connect to host www.example.org port 22: Connection refused </syntaxhighlight> The destination system exists but there is no SSH service available at the port being tried. Is the destination right? It might be the wrong system, SSH might not be running at all, SSH might be listening on another port, or a packet filter might be blocking connections. '''Permission denied:''' <syntaxhighlight lang="shell-session"> $ ssh www.example.org fred@www.example.org: Permission denied (publickey,keyboard-interactive). </syntaxhighlight> That is usually a sign of a problem caused by the wrong user name, wrong authentication method, wrong SSH key or SSH certificate, or wrong file permissions in the authorized keys file on the destination system. If it is a matter of SSH key-based authentication, see the chapter on [[OpenSSH/Cookbook/Public_Key_Authentication | Public Key Authentication]] for more thorough coverage. If it is a question of SSH certificates, see the corresponding [[OpenSSH/Cookbook/Certificate-based_Authentication‎ | Certificate-based Authentication]] chapter. It can also be a matter of server-side settings with '''AllowGroups''', '''DenyGroups''', or similar configuration directives at the destination. Any of those possibilities can really only be identified and solved by checking the log output from [http://man.openbsd.org/sshd.8 sshd(8)]. '''No matching host key type found:''' <syntaxhighlight lang="shell-session"> $ ssh www.example.org Unable to negotiate with 198.51.100.89 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss </syntaxhighlight> The SSH daemon on that server is really outdated. Contact the system administrator about an upgrade and get them moving. More details can be seen with the '''-v''' option on the client. <syntaxhighlight lang="shell-session"> $ ssh -v fred@example.org ... debug1: SSH2_MSG_KEXINIT received debug1: kex: algorithm: diffie-hellman-group-exchange-sha256 debug1: kex: host key algorithm: (no match) Unable to negotiate with 198.51.100.89 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss </syntaxhighlight> In the above shell session, it is the server which is badly in need of an update as shown by the deprecated key exchange algorithms which it tries to use. Again, for emphasis, the solution is to update the outdated software. If a specific, old version of an particular operating system absolutely must be used for a while longer, see about getting a back port of the SSH daemon. Many GNU/Linux distros even have specific back port repositories. If you would like to see which key exchange algorithms the client supports try using the '''-Q''' option. <syntaxhighlight lang="shell-session"> $ ssh -Q kex diffie-hellman-group1-sha1 diffie-hellman-group14-sha1 diffie-hellman-group14-sha256 diffie-hellman-group16-sha512 diffie-hellman-group18-sha512 diffie-hellman-group-exchange-sha1 diffie-hellman-group-exchange-sha256 ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521 mlkem768nistp256-sha256 curve25519-sha256 curve25519-sha256@libssh.org sntrup761x25519-sha512 sntrup761x25519-sha512@openssh.com mlkem768x25519-sha256 </syntaxhighlight> <noinclude>{{OpenSSH/TOC|mini}}</noinclude> {{BookCat}} {{status|100%}} ipra2hqmfwpod3ttcnxy2k4m9rl2prz 4675294 4675293 2026-10-09T13:57:17Z Larsnooden 430753 typo 4675294 wikitext text/x-wiki Both the OpenSSH client and server offer a lot of choice as to where the logs are written and how much information is collected. A prerequisite for logging is having an accurate system clock using the Network Time Protocol, NTP, or equivalent, service which provides ongoing time synchronization with rest of the world. The more accurate the time stamp in the log is, the faster it is to coordinate forensics between machines or sites or service providers. If you have to contact outside parties like a service provider, progress can usually only be made with very exact times. ==Server Logs== By default [http://man.openbsd.org/sshd.8 sshd(8)] sends logging information to the system logs using the log level INFO and the system log facility AUTH. So the place to look for log data from [http://man.openbsd.org/sshd.8 sshd(8)] is in '''/var/log/auth.log'''. These defaults can be overridden using the '''SyslogFacility''' and '''LogLevel''' directives. Below is a typical server startup entry in the authorization log. <syntaxhighlight lang="text"> Mar 19 14:45:40 server sshd[21157]: Server listening on 0.0.0.0 port 22. Mar 19 14:45:40 server sshd[21157]: Server listening on :: port 22. </syntaxhighlight> In most cases the default level of logging is sufficient, but during initial testing of new services or activities it is sometimes necessary to have more information. Debugging info usually goes to '''stderr'''. Starting with OpenSSH 7.6, '''Match''' blocks can set alternate log levels for specific conditions. The log excerpt below show the same basic server start up with increased detail. Contrast the log level DEBUG1 below with the default above: <syntaxhighlight lang="text"> Apr 5 12:39:14 server sshd[85029]: debug1: Bind to port 22 on 0.0.0.0. Apr 5 12:39:14 server sshd[85029]: Server listening on 0.0.0.0 port 22. Apr 5 12:39:14 server sshd[85029]: debug1: Bind to port 22 on ::. Apr 5 12:39:14 server sshd[85029]: Server listening on :: port 22. </syntaxhighlight> And here is the same startup using the most verbose level, DEBUG3: <syntaxhighlight lang="text"> Apr 5 12:40:59 server sshd[49707]: debug2: fd 6 setting O_NONBLOCK Apr 5 12:40:59 server sshd[49707]: debug1: Bind to port 22 on 0.0.0.0. Apr 5 12:40:59 server sshd[49707]: Server listening on 0.0.0.0 port 22. Apr 5 12:40:59 server sshd[49707]: debug2: fd 7 setting O_NONBLOCK Apr 5 12:40:59 server sshd[49707]: debug1: Bind to port 22 on ::. Apr 5 12:40:59 server sshd[49707]: Server listening on :: port 22. </syntaxhighlight> Every failed login attempt is recorded, once the value in directive '''MaxAuthTries''' is exceeded the connection is broken. Below is a log excerpt showing how the default log looks after some failed attempts: <syntaxhighlight lang="text"> ... Apr 5 12:44:43 server sshd-session[80932]: Failed password for root from 103.42.56.121 port 58164 ssh2 Apr 5 12:44:51 server last message repeated 2 times Apr 5 12:44:51 server sshd-session[80932]: Connection closed by authenticating user root 103.42.56.121 port 58164 [preauth] ... </syntaxhighlight> It is not usually a good idea to allow root login, especially not root login with authentication via password. Blocking login for root simplifies the log analysis greatly, and in particular it eliminates the time consuming question of who is trying to get in and why. People that need full root level access can gain it through [https://man.openbsd.org/su.1 su(1)] for general activities. Or for specific tasks which need root level access, those can be given those privileges through custom-made entries for '''sudo(8)''' or [https://man.openbsd.org/doas.1 doas(1)]. Note that in those cases, only specific services and programs should be allowed, not blanket access which is an all too common misconfiguration seen with '''sudo(8)'''. Alternatively, a single-purpose key made using '''forced-commands-only''' could be used since some argue that providing extra means of privilege escalation, such as [https://man.openbsd.org/su.1 su(1)], '''sudo(8)''', or [https://man.openbsd.org/doas.1 doas(1)], is more dangerous than carefully providing remote root access through a key or certificate tied to a specific function. ===Successful logins=== By default, the server does not store much information about user transactions. That is a good thing. It is also a good thing to recognize when the system is operating as it should. So here is an example of a successful SSH login: <syntaxhighlight lang="text"> Apr 4 13:30:08 server sshd-session[86956]: Accepted password for fred from 198.51.100.135 port 52646 ssh2 </syntaxhighlight> And here is an example using a key for authentication. It shows the key fingerprint as a SHA256 hash in base64. <syntaxhighlight lang="text"> Apr 5 12:49:11 server sshd-session[41210]: Accepted publickey for fred from 198.51.100.135 port 28927 ssh2: ED25519 SHA256:03u96bPG5qYi7hIEohNDfxOW+KOpMS9LPi4YdiCtGaI </syntaxhighlight> And here is an example of successful authentication with a user certificate. The certificate's identification string is "foobar" and the serial number is "9624". In this example the certificate is using ECDSA and the key itself is using Ed25519. The certificate, being a different key of its own, has a different SHA256 fingerprint from the authentication key itself. <syntaxhighlight lang="text"> Apr 5 13:50:57 server sshd-session[20263]: Accepted publickey for fred from 127.0.0.1 port 41783 ssh2: ED25519-CERT SHA256:UP1+mGQ5tfT84YCRVgytAKtikn0ujmfhXKdoxRoWDtU ID edcba (serial 2) CA ED25519 SHA256:4lngxTgobhprXfPY/p+2HNMBg6PxNDaOWrvei6kScrM </syntaxhighlight> In all three cases, older versions prior to 9.8 will use a process named '''sshd''' rather than one named '''sshd-session''' as is now a side effect of better privilege separation. Prior to 6.8, the key's fingerprint was a hexadecimal MD5 hash. <syntaxhighlight lang="text"> Jan 28 11:51:43 server sshd[5104]: Accepted publickey for fred from 192.0.2.60 port 60594 ssh2: RSA e8:31:68:c7:01:2d:25:20:36:8f:50:5d:f9:ee:70:4c </syntaxhighlight> In older versions of OpenSSH prior to 6.3 the key fingerprint is completely missing from authentication logging. <syntaxhighlight lang="text"> Jan 28 11:52:05 server sshd[1003]: Accepted publickey for fred from 192.0.2.60 port 20042 ssh2 </syntaxhighlight> Here is an example of password authentication for an SFTP session, using the server's internal-sftp subsystem. The logging for that subsystem set to INFO. <syntaxhighlight lang="text"> Mar 14 20:14:18 server sshd-session[19850]: Accepted password for fred from 192.0.2.60 port 59946 ssh2 </syntaxhighlight> Here is an example of a successful SFTP login using an Ed25519 key for authentication, with the SFTP subsystem itself logging at INFO. <syntaxhighlight lang="text"> Apr 5 13:56:02 server shd-session[58881]: Accepted publickey for fred from 192.0.2.60 port 40445 ssh2: ED25519 SHA256:UP1+mGQ5tfT84YCRVgytAKtikn0ujmfhXKdoxRoWDtU Apr 5 13:56:02 server internal-sftp[21121]: session opened for local user fred from [192.0.2.60] </syntaxhighlight> Additional data, such as connection duration, can be logged with the help of xinetd(8). ===Logging Problems from SSH Certificate Authentication=== When a certificate fails, there is generally no client side information disclosed and all investigation must occur server side. Finding the account or actual certificate in question can require some sleuthing in older versions of OpenSSH, but newer versions can identify the certificate and the certificate authority under certain circumstances. It is also important to be familiar with how log entries are supposed to look when things go correctly. Here is a successful login using certificate-based authentication: <syntaxhighlight lang="text"> Aug 7 18:32:29 server sshd-session[49021]: Accepted publickey for fred from 192.0.2.60 port 10932 ssh2: ED25519-CERT SHA256:UP1+mGQ5tfT84YCRVgytAKtikn0ujmfhXKdoxRoWDtU ID fedcba (serial 11) CA ED25519 SHA256:4lngxTgobhprXfPY/p+2HNMBg6PxNDaOWrvei6kScrM </syntaxhighlight> When the connection is closed there will be a log entry noting which account was involved. Older versions of OpenSSH will have less information in the log. <syntaxhighlight lang="text"> May 5 16:02:50 server sshd-session[32110]: Received disconnect from 192.0.2.60 port 12952:11: disconnected by user May 5 16:02:50 server sshd-session[32110]: Disconnected from user fred 192.0.2.60 port 12952 </syntaxhighlight> However, if the connection is allowed to timeout without first making any other authentication attempts by some other means, then there will be nothing to go on except maybe the time of day. <syntaxhighlight lang="text"> Apr 5 14:03:12 server sshd[9205]: Timeout before authentication for connection from 192.0.2.60 to 203.0.113.120, pid = 57844 </syntaxhighlight> Below are some common examples of log entries for failed certificate-based login attempts. There can sometimes be more than one problem with a certificate but in such cases only one error will get logged at a time. ====Expired or Not-yet-valid Certificate==== Certificates which have not yet become valid or which have already expired get a log entry as to the reason and include the offending certificate's id string and serial number as well as the fingerprint of the signing certificate authority. Below is one which is not yet valid being rejected by the server, perhaps at a future date it will be valid but that information is in the certificate, not the log. <syntaxhighlight lang="text"> Aug 7 19:02:52 server sshd-session[96551]: error: Refusing certificate ID "fedcb" serial=9 signed by ED25519 CA SHA256:4ZyxpgCaw3Y8wz91ajLWARibUGfwyuOrftt2wermMJE: Certificate invalid: not yet valid </syntaxhighlight> Next is an expired certificate which has been rejected. <syntaxhighlight lang="text"> Aug 7 19:02:53 server sshd-session[99417]: error: Refusing certificate ID "gfedc" serial=5 signed by ED25519 CA SHA256:4ZyxpgCaw3Y8wz91ajLWARibUGfwyuOrftt2wermMJE: Certificate invalid: expired </syntaxhighlight> If a certificate is not yet valid, then the log entry will say that explicitly. The trailing text on the line will be "Certificate invalid: not yet valid". The old style log entries for an expired certificate and for a certificate which has not yet become valid have much less information. <syntaxhighlight lang="text"> Apr 5 14:33:31 server sshd-session[88953]: error: Certificate invalid: expired Apr 5 14:32:41 server sshd-session[51695]: error: Certificate invalid: not yet valid </syntaxhighlight> The improved logging arrived with OpenSSH 10.1 ====Valid Certificate but Invalid Principal==== Like with other reasons for rejecting certificates, when the account and allowed principals do not match the account logging in, information is logged about which certificate was tried and failed. Here is an entry showing an invalid principal: <syntaxhighlight lang="text"> Aug 7 19:02:54 server sshd-session[12928]: error: Refusing certificate ID "edcba" serial=33 signed by ED25519 CA SHA256:4lngxTgobhprXfPY/p+2HNMBg6PxNDaOWrvei6kScrM: Certificate invalid: name is not a listed principal </syntaxhighlight> The old style log entry from OpenSSH 10.0 and earlier provides much less information about the certificate in question: <syntaxhighlight lang="text"> Apr 5 14:34:56 server sshd-session[66692]: error: Certificate invalid: name is not a listed principal </syntaxhighlight> If the client closes the connection on purpose, there may be some information in the connection closed entry but that will be a different log entry. ====Valid Certificate but Invalid Source Address==== If the certificate is limited to connecting from specific addresses or host names, the log will complain if the connection comes from a different address or host and identify the incorrect source address. The information will be split across two log entries, which might or might not be adjacent depending on how busy the server is. Here is an entry showing an invalid source address: <syntaxhighlight lang="text"> Aug 7 19:12:08 server sshd-session[29034]: cert: Authentication tried for fred with valid certificate but not from a permitted source address (198.51.100.135). Aug 7 19:12:08 server sshd-session[29034]: error: Refusing certificate ID "ihgfe" serial=8 signed by ED25519 CA SHA256:4ZyxpgCaw3Y8wz91ajLWARibUGfwyuOrftt2wermMJE: Refused by certificate options </syntaxhighlight> Prior to OpenSSH 10.1, the second entry had much less information about the offending certificate. <syntaxhighlight lang="text"> Apr 5 14:57:47 server sshd-session[78381]: cert: Authentication tried for fred with valid certificate but not from a permitted source address (198.51.100.135). Apr 5 14:57:47 server sshd-session[78381]: error: Refused by certificate options </syntaxhighlight> However, it will not be possible to identify the specific certificate directly with that old style log entry. ===Logging SFTP File Transfers=== SFTP file transfers can be logged using '''LogLevel''' INFO or VERBOSE. The log level for the SFTP server can be set in [http://man.openbsd.org/sshd_config.5 sshd_config(5)] separately from the general SSH server settings. <syntaxhighlight lang="apache" line="1"> Subsystem internal-sftp -l INFO </syntaxhighlight> By default the SFTP messages will also end up in ''auth.log'' but it is possible to filter these messages to their own file by reconfiguring the system logger, usually rsyslogd(8) or [https://man.openbsd.org/syslogd syslogd(8)]. Sometimes this is done by changing the log facility code from the default of AUTH. Available options are LOCAL0 through LOCAL7, plus, less usefully, DAEMON and USER. <syntaxhighlight lang="apache" line="1"> Subsystem internal-sftp -l INFO -f LOCAL6 </syntaxhighlight> If new system log files are assigned, it is important to remember them in the log rotation, too. Again, the '''Match''' directive can be use to change the log level just for certain connections. The following log excerpts are generated from using the log level INFO. A session starts with an open and end with a close. The number in the brackets is the process id for the SFTP session and is the only way to follow a session through the logs. <syntaxhighlight lang="text"> Oct 22 11:59:45 server internal-sftp[4929]: session opened for local user fred from [192.0.2.33] ... Oct 22 12:09:10 server internal-sftp[4929]: session closed for local user fred from [192.0.2.33] </syntaxhighlight> Here is an SFTP upload of a small file of 928 bytes named '''foo''' to the home directory for user 'fred' when logging the SFTP at log level INFO. <syntaxhighlight lang="text"> Oct 22 11:59:50 server internal-sftp[4929]: open "/home/fred/foo" flags WRITE,CREATE,TRUNCATE mode 0664 Oct 22 11:59:50 server internal-sftp[4929]: close "/home/fred/foo" bytes read 0 written 928 </syntaxhighlight> And a directory listing in the same session in the directory '''/var/www'''. <syntaxhighlight lang="text"> Oct 8 07:28:25 server internal-sftp[34984]: opendir "/" Oct 8 07:28:25 server internal-sftp[34984]: closedir "/" Oct 8 07:28:26 server internal-sftp[34984]: opendir "/" Oct 8 07:28:26 server internal-sftp[34984]: closedir "/" Oct 8 07:28:27 server internal-sftp[34984]: opendir "/var/" Oct 8 07:28:27 server internal-sftp[34984]: closedir "/var/" Oct 8 07:28:27 server internal-sftp[34984]: opendir "/var/www/" Oct 8 07:28:27 server internal-sftp[34984]: closedir "/var/www/" </syntaxhighlight> And lastly here is a download of the same small 928-byte file called '''foo''' from the home directory for the user 'fred'. <syntaxhighlight lang="text"> Oct 22 12:08:03 server internal-sftp[4929]: open "/home/fred/foo" flags READ mode 0666 Oct 22 12:08:03 server internal-sftp[4929]: close "/home/fred/foo" bytes read 928 written 0 </syntaxhighlight> Successful transfers will be noted by a ''close'' message. Attempts to download (open) files that do not exist will be followed by a ''sent status No such file'' message on a line of its own instead of a ''close''. Files that exist but that the user is not allowed to read will create a ''sent status Permission denied'' message. ===Logging Chrooted SFTP=== Logging with the built-in '''sftp-subsystem''' inside a chroot jail, defined by '''ChrootDirectory''', needs a '''./dev/log''' node to exist inside the jail. This can be done by having the system logger such as [http://man.openbsd.org/syslogd.8 syslogd(8)] add additional log sockets inside the chrooted directory when starting up. On some systems that is as simple as adding more flags, like "'''-u -a /chroot/dev/log'''", in '''/etc/rc.conf.local''' or whatever the equivalent startup script may be. Here is an example of an SFTP login with password to a chroot jail using log level DEBUG3 for the SFTP-subsystem. The log shows a file upload: <syntaxhighlight lang="text">Apr 5 15:08:41 server sshd-session[31716]: Accepted password for fred from 198.51.100.135 port 39238 ssh2 Apr 5 15:08:41 server internal-sftp[55598]: session opened for local user fred from [198.51.100.135] Apr 5 15:08:41 server internal-sftp[55598]: received client version 3 Apr 5 15:08:41 server internal-sftp[55598]: debug1: request 1: limits Apr 5 15:08:41 server internal-sftp[55598]: debug3: request 2: realpath Apr 5 15:08:41 server internal-sftp[55598]: realpath "." Apr 5 15:08:41 server internal-sftp[55598]: debug1: request 2: sent names count 1 Apr 5 15:08:52 server internal-sftp[55598]: debug3: request 3: open flags 26 Apr 5 15:08:52 server internal-sftp[55598]: open "/home/fred/foo" flags WRITE,CREATE,TRUNCATE mode 0664 Apr 5 15:08:52 server internal-sftp[55598]: debug1: request 3: sent handle 0 Apr 5 15:08:52 server internal-sftp[55598]: debug1: request 5: write "/home/fred/foo" (handle 0) off 0 len 33 Apr 5 15:08:52 server internal-sftp[55598]: debug3: request 5: sent status 0 Apr 5 15:08:52 server internal-sftp[55598]: sent status Success Apr 5 15:08:52 server internal-sftp[55598]: debug3: request 4: close handle 0 Apr 5 15:08:52 server internal-sftp[55598]: close "/home/fred/foo" bytes read 0 written 33 Apr 5 15:08:52 server internal-sftp[55598]: debug3: request 4: sent status 0 Apr 5 15:08:52 server internal-sftp[55598]: sent status Success </syntaxhighlight> Remember that SFTP is a separate subsystem and that like the file creation mode, the log level and log facility are set separately from the SSH server in [http://man.openbsd.org/sshd_config.5 sshd_config(5)], for example: <syntaxhighlight lang="apache" line="1"> Subsystem internal-sftp -l ERROR </syntaxhighlight> ===Logging Stability of Client Connectivity=== When '''ClientAliveInterval''' is set in the server's configuration, the server makes periodic probes of the clients which have established connections. At normal log levels, these are not noted in the log until something goes wrong. If the '''ClientAliveInterval''' is exceeded more times in a row than allowed by '''ClientAliveCountMax''' the client is officially declared disconnected and the connection dropped. At the default log level of INFO a brief message is logged, identifying the client which has been dropped. <syntaxhighlight lang="text"> Sep 6 14:42:08 server sshd[83709]: packet_write_poll: Connection from 192.0.2.97 port 57608: Host is down </syntaxhighlight> At log level DEBUG, the client's responses to the polls will be logged by the server showing that the session is still connected. <syntaxhighlight lang="text"> Sep 6 14:27:52 server sshd[9075]: debug1: Got 100/147 for keepalive </syntaxhighlight> Log level DEBUG2 and DEBUG3 will give even more information about the connection. However, even at log level DEBUG3, the specific client being polled will not be identified directly in the log messages and will have to be inferred from the process id of the daemon if such information is needed. <syntaxhighlight lang="text"> Sep 6 14:30:59 server sshd[73960]: debug2: channel 0: request keepalive@openssh.com confirm 1 Sep 6 14:30:59 server sshd[73960]: debug3: send packet: type 98 Sep 6 14:30:59 server sshd[73960]: debug3: receive packet: type 100 Sep 6 14:30:59 server sshd[73960]: debug1: Got 100/22 for keepalive </syntaxhighlight> Again, when the '''ClientAliveCountMax''' is exceeded, the connection is broken after the final failure of the client to respond. Here is how that looks with the log level set to DEBUG2. <syntaxhighlight lang="text"> Sep 6 14:17:55 server sshd[15780]: debug2: channel 0: request keepalive@openssh.com confirm 1 Sep 6 14:17:55 server sshd[15780]: debug1: Got 100/22 for keepalive Sep 6 14:18:37 server sshd[15780]: debug2: channel 0: request keepalive@openssh.com confirm 1 Sep 6 14:18:37 server sshd[15780]: packet_write_poll: Connection from 192.0.2.97 port 57552: Host is down Sep 6 14:18:37 server sshd[15780]: debug1: do_cleanup Sep 6 14:18:37 server sshd[48675]: debug1: do_cleanup Sep 6 14:18:37 server sshd[48675]: debug1: session_pty_cleanup: session 0 release /dev/ttyp0 </syntaxhighlight> The directives '''ClientAliveInterval''' and '''ClientAliveCountMax''' normally apply to all clients connecting to the server. However, they can be used inside a '''Match''' block and thus applied only to specific connections. ===Logging Revoked Keys=== If the '''RevokedKeys''' directive is used to point to a list of public keys that have been revoked, [http://man.openbsd.org/sshd.8 sshd(8)] will make a log entry when access is attempted using a revoked key. The entry will be the same whether a plaintext list of public keys is used or if a binary Key Revocation List (KRL) has been generated. If password authentication is allowed, and the user tries it, then after the key authentication fails there will be a record of password authentication. <syntaxhighlight lang="text"> Mar 14 20:36:40 server sshd-session[29235]: error: Authentication key RSA SHA256:jXEPmu4thnubqPUDcKDs31MOVLQJH6FfF1XSGT748jQ revoked by file /etc/ssh/ssh_revoked_keys ... Mar 14 20:36:45 server sshd-session[29235]: Accepted password for fred from 192.0.2.10 port 59967 ssh2 </syntaxhighlight> If password authentication is not allowed, [http://man.openbsd.org/sshd.8 sshd(8)] will close the connection as soon as the key fails. <syntaxhighlight lang="text"> Mar 14 20:38:27 server sshd-session[29163]: error: Authentication key RSA SHA256:jXEPmu4thnubqPUDcKDs31MOVLQJH6FfF1XSGT748jQ revoked by file /etc/ssh/ssh_revoked_keys ... </syntaxhighlight> The account trying the revoked key remains a mystery though. So it will be necessary to try to look up the key by its fingerprint from your archive of old keys using <code>ssh-keygen -lf</code> and read the key's comments. Although if a valid account cancels the connection without trying a password after the key attempt fails, the usual message will still be posted to the log and that will show the login name. <syntaxhighlight lang="text"> Mar 14 20:44:04 server sshd-session[14352]: Connection closed by authenticating user fred 192.0.2.237 port 55051 [preauth] ... </syntaxhighlight> That may be enough to provide some clue and allow a bit of log filtering with a short AWK script, if the messages are all in the same log file. <syntaxhighlight lang="shell-session"> $ awk '/revoked by file/ { pid[$5]++; key[$5]=$9; hash[$5]=$10; next; } pid[$5] && /closed by authenticating user/ { print key[$5], hash[$5], $10, $11; delete key[$5]; delete hash[$5]; delete pid[$5]; }' /var/log/authlog </syntaxhighlight> Similarly, if the client makes no attempt at logging in and just times out, the message will say just that. <syntaxhighlight lang="text"> Mar 18 21:40:25 server sshd[9942]: fatal: Timeout before authentication for connection from 198.51.100.236 to 203.0.113.75, pid = 67611 ... </syntaxhighlight> On the client side, no warning or error will be given if a revoked key is tried. It will just fail and the next key or method will be tried. ===Brute force and Hail Mary attacks=== It’s fairly common to see failed login attempts almost as soon as the server is connected to the net. Brute force attacks, where one machine hammers on a few accounts trying to find a valid password, are becoming rare. In part this is because packet filters, like NFables for Linux and PF for the BSDs, can limit the number and rate of connection attempts from a single host. The server configuration directive '''MaxStartups''' can limit the number of simultaneous, unauthenticated connections. <syntaxhighlight lang="text"> ... Apr 4 16:45:34 server sshd-session[96275]: Failed password for root from 103.42.56.121 port 48294 ssh2 ... Apr 4 16:46:58 server sshd-session[96275]: Failed password for root from 103.42.56.121 port 48294 ssh2 ... Apr 4 16:47:04 server sshd-session[96275]: Failed password for root from 103.42.56.121 port 48294 ssh2 Apr 4 16:47:05 server sshd-session[96275]: Connection closed by authenticating user root 103.42.56.121 port 48294 [preauth] ... </syntaxhighlight> Prior to 9.8, it was slightly different: <syntaxhighlight lang="text"> ... Mar 18 18:54:44 server sshd[54939]: Failed password for root from 201.179.249.231 port 52404 ssh2 Mar 18 18:54:48 server sshd[54939]: Failed password for root from 201.179.249.231 port 52404 ssh2 Mar 18 18:54:49 server sshd[54939]: Failed password for root from 201.179.249.231 port 52404 ssh2 Mar 18 18:54:49 server sshd[54939]: error: maximum authentication attempts exceeded for root from 201.179.249.231 port 52404 ssh2 [preauth] Mar 18 18:54:49 server sshd[54939]: Disconnecting authenticating user root 201.179.249.231 port 52404: Too many authentication failures [preauth] ... </syntaxhighlight> Note the "authenticating user" is present in the logs from OpenSSH 7.5 and onward when a valid user name is attempted. When an invalid user name is attempted, that is written too. <syntaxhighlight lang="text"> ... Apr 3 10:25:59 server sshd-session[78513]: Invalid user ad1tz from 103.42.56.121 port 55778 Apr 3 10:26:00 server sshd-session[78513]: Received disconnect from 103.42.56.121 port 55778:11: Bye Bye [preauth] Apr 3 10:26:00 server sshd-session[78513]: Disconnected from invalid user ad1tz 103.42.56.121 port 55778 [preauth] ... </syntaxhighlight> Again, in versions prior to 9.8, the process name is different as is the closing message. <syntaxhighlight lang="text"> ... Mar 18 18:55:05 server sshd[38594]: Invalid user ubnt from 201.179.249.231 port 52471 Mar 18 18:55:05 server sshd[38594]: Failed password for invalid user ubnt from 201.179.249.231 port 52471 ssh2 Mar 18 18:55:09 server sshd[38594]: error: maximum authentication attempts exceeded for invalid user ubnt from 201.179.249.231 port 52471 ssh2 [preauth] Mar 18 18:55:09 server sshd[38594]: Disconnecting invalid user ubnt 201.179.249.231 port 52471: Too many authentication failures [preauth] ... </syntaxhighlight> The way to deal with brute force attacks coming from a single machine or network is to customize the server host’s packet filter to limit the attacks or even temporarily block machines that overload the maximum number or rate of connections. Optionally, one should also contact the attacker’s net block owner with the IP address and exact date and time of the attacks. A kind of attack common at the time of this writing is one which is distributed over a large number of compromised machines, each playing only a small role in attacking the server. To deal with Hail Mary attacks, contact the attacker’s net block owner. A form letter with a cut-and-paste excerpt from the log is enough if it gives the exact times and addresses. Alternately, teams of network or system administrators can work to pool data to identify and blacklist the compromised hosts participating in the attack. ====Failed None For Invalid User==== The SSH protocol specifies a number of possible authentication methods<ref name="rfc_4252">{{cite web | url =https://datatracker.ietf.org/doc/html/rfc4252#section-5.2 | title=RFC 4252: The Secure Shell (SSH) Authentication Protocol | date=2006 | publisher=IETF | access-date=2021-08-10 }}</ref>. The methods <code>password</code>, <code>keyboard-interactive</code>, and <code>publickey</code> are fairly common. A lesser known authentication method is <code>none</code>, which will only succeed if the server requires no further authentication such as if '''PermitEmptyPassword''' is set and the account does not actually have a password<ref name="failed_none">{{cite mailing list | url=https://marc.info/?l=openbsd-misc&m=162858437916966&w=2 | last=Tucker | first=Darren | mailing-list=OpenBSD-Misc | date=2021-08-10 | accessdate=2021-08-10 | title=Re: ssh authlog: Failed none for invalid user | publisher=OpenBSD}}</ref>. Some SSH clients including OpenSSH's start by asking for <code>none</code> authentication and then use the list of remaining possible authentication methods to decide what to do next if that doesn't work. <syntaxhighlight lang="text"> ... Aug 10 19:09:05 server sshd[93126]: Failed none for invalid user admin from 125.64.94.136 port 27586 ssh2 ... </syntaxhighlight> So in other words, that is a brute force attack trying the <code>none</code> authentication method. It is an attack which will only get into accounts which have been explicitly set with an empty password and furthermore have also been set up specifically to allow access by having both the authentication method of <code>none</code> and the '''PermitEmptyPasswords''' configuration directive enabled on the server. Most brute force attacks try only <code>password</code> authentication, and some of those even check for the <code>password</code> method and then give up if it is not available. Other attackers may just hammer away pointlessly even if the method is not available. ===Connections Seemingly From 127.0.0.1, ::1, or Other localhost Addresses=== When the SSH server is accessed via a reverse tunnel to another machine, the incoming connections will appear to be from the ''localhost'' address, which is usually ''127.0.0.1'' or ''::1''. <syntaxhighlight lang="text"> Mar 23 14:16:16 server sshd[9265]: Accepted password for fred from 127.0.0.1 port 40426 ssh2 </syntaxhighlight> If the port at the other end of the reverse tunnel is publicly accessible, it will be probed and possibly attacked. Because of the reverse tunnel, the attacks will then also appear to be coming from the server's own loopback address: <syntaxhighlight lang="text"> Mar 23 14:20:17 server sshd-session[5613]: Invalid user cloud from ::1 port 57404 Mar 23 14:20:21 server sshd-session[5613]: Failed password for invalid user cloud from ::1 port 57404 ssh2 Mar 23 14:20:26 server sshd-session[5613]: Failed password for invalid user cloud from ::1 port 57404 ssh2 Mar 23 14:20:35 server sshd-session[5613]: Connection closed by invalid user cloud ::1 port 57404 [preauth] </syntaxhighlight> Like in the other examples, the disconnection message was different prior to 9.8: <syntaxhighlight lang="text"> ... Mar 23 14:20:32 server sshd[5613]: Failed password for invalid user cloud from ::1 port 57404 ssh2 Mar 23 14:20:35 server sshd[5613]: Connection closed by invalid user cloud ::1 port 57404 [preauth] ... </syntaxhighlight> Therefore the usual countermeasures like SSHGuard or Fail2Ban or other similar intrusion detection systems cannot be used because the ''localhost'' address is used by the tunnel for all login attempts, regardless of their real origins. A partial solution would be to bind the incoming connections to a different IP address. The loopback interface would need an additional permanent address, an alias, for that. That alias could then be assigned when establishing the reverse tunnel: <syntaxhighlight lang="shell-session"> $ ssh -R 2022:127.2.2.1:22 fred@vps.example.org </syntaxhighlight> Thus it would designate the source address for all logins coming in over that tunnel. So, in that way, the alias would then show up in the logs instead of the default loopback address when that reverse tunnel is used: <syntaxhighlight lang="text"> Mar 23 18:00:13 server sshd-session[8525]: Invalid user cloud from 127.2.2.1 port 17271 Mar 23 18:00:15 server sshd-session[8525]: Failed password for invalid user cloud from 127.2.2.1 port 17271 ssh2 Mar 23 18:00:19 server sshd-sesssion[8525]: Failed password for invalid user cloud from 127.2.2.1 port 17271 ssh2 Mar 23 18:01:23 server sshd-session[8525]: Failed password for invalid user cloud from 127.2.2.1 port 17271 ssh2 Mar 23 18:01:26 server sshd-session[8525]: Connection closed by invalid user cloud 127.2.2.1 port 17271 [preauth] </syntaxhighlight> If the ports do not need to be available to the open Internet, a full solution would be just to ensure that they are not accessible from the outside. This would be done by not using the '''-g''' option on the client when making the reverse tunnel or else by setting the '''GatewayPorts''' directive in [http://man.openbsd.org/sshd_config.5 sshd_config(5)] back to the default of '''no''', or both. The system's built-in packet filter can also be used. Then, even with the forwarded ports closed off from the outside, the '''ProxyJump''' option can still be used to skip through the jump host and use the setup for SSH access. However, since it is sometimes necessary that these ports be accessible to the outside world, this approach is not always an option. ==Client Logging== The OpenSSH client normally sends log information to '''stderr'''. The '''-y''' option can be used to send output to the system logs, managed by [http://man.openbsd.org/syslogd.8 syslogd(8)] or something similar. Client log verbosity can be increased or decreased by changing the '''LogLevel''' directive and the log facility changed with the '''SyslogFacility''' directive in [http://man.openbsd.org/ssh_config.5 ssh_config(5)]. Both require use of the '''-y''' run-time option and do nothing without it. Alternatively, instead of using the '''-y''' option, using the '''-E''' option sends log output to a designated file instead of '''stderr'''. Working with the system logs or separate log files are something which can be useful when running [http://man.openbsd.org/ssh.1 ssh(1)] in automated scripts. Below is an example of a connection to an interactive shell with the normal level of client logging: <syntaxhighlight lang="shell-session"> $ ssh -l fred server.example.org fred@server.example.org‘s password: Last login: Thu Jan 27 13:21:57 2011 from 192.168.11.1 </syntaxhighlight> The same connection at the first level of verbosity gives lots of debugging information, 90 lines in all. <syntaxhighlight lang="shell-session"> $ ssh -v -l fred server.example.org debug1: OpenSSH_10.6, LibreSSL 4.4.0 debug1: Reading configuration data /etc/ssh/ssh_config debug1: no pubkey loaded from /home/fred/.ssh/id_rsa debug1: identity file /home/fred/.ssh/id_rsa type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_rsa debug1: no pubkey loaded from /home/fred/.ssh/id_ecdsa debug1: identity file /home/fred/.ssh/id_ecdsa type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_ecdsa debug1: no pubkey loaded from /home/fred/.ssh/id_ecdsa_sk debug1: identity file /home/fred/.ssh/id_ecdsa_sk type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_ecdsa_sk debug1: no pubkey loaded from /home/fred/.ssh/id_ed25519 debug1: identity file /home/fred/.ssh/id_ed25519 type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_ed25519 debug1: no pubkey loaded from /home/fred/.ssh/id_ed25519_sk debug1: identity file /home/fred/.ssh/id_ed25519_sk type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_ed25519_sk debug1: no pubkey loaded from /home/fred/.ssh/id_mldsa44_ed25519 debug1: identity file /home/fred/.ssh/id_mldsa44_ed25519 type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_mldsa44_ed25519 debug1: Connecting to server.example.org [198.51.100.20] port 22. debug1: Connection established. debug1: Local version string SSH-2.0-OpenSSH_10.6 debug1: Remote protocol version 2.0, remote software version OpenSSH_10.6 debug1: compat_banner: match: OpenSSH_10.6 pat OpenSSH* compat 0x04000000 debug1: Authenticating to server.example.org:22 as 'fred' debug1: load_hostkeys: fopen /home/fred/.ssh/known_hosts2: No such file or directory debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT received debug1: kex: algorithm: mlkem768x25519-sha256 debug1: kex: host key algorithm: ssh-ed25519 debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none debug1: expecting SSH2_MSG_KEX_ECDH_REPLY debug1: SSH2_MSG_KEX_ECDH_REPLY received debug1: Server host key: ssh-ed25519 SHA256:agRZDZn8awhQ+tc19Ip/whkHoV33Ln2REO7v1kcYbdU debug1: load_hostkeys: fopen /home/fred/.ssh/known_hosts2: No such file or directory debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory debug1: Host 'server.example.org' is known and matches the ED25519 host key. debug1: Found key in /home/fred/.ssh/known_hosts:1 debug1: ssh_packet_send2_wrapped: resetting send seqnr 3 debug1: rekey out after 134217728 blocks debug1: SSH2_MSG_NEWKEYS sent debug1: Sending SSH2_MSG_EXT_INFO debug1: expecting SSH2_MSG_NEWKEYS debug1: ssh_packet_read_poll2: resetting read seqnr 3 debug1: SSH2_MSG_NEWKEYS received debug1: rekey in after 134217728 blocks debug1: SSH2_MSG_EXT_INFO received debug1: kex_ext_info_client_parse: server-sig-algs=<ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ssh-ed25519@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com,rsa-sha2-512,rsa-sha2-256,ssh-mldsa44-ed25519,webauthn-sk-ecdsa-sha2-nistp256@openssh.com> debug1: kex_ext_info_check_ver: publickey-hostbound@openssh.com=<0> debug1: kex_ext_info_check_ver: ping@openssh.com=<0> debug1: kex_ext_info_check_ver: agent-forward=<0> debug1: SSH2_MSG_SERVICE_ACCEPT received debug1: SSH2_MSG_EXT_INFO received debug1: kex_ext_info_client_parse: server-sig-algs=<ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ssh-ed25519@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com,rsa-sha2-512,rsa-sha2-256,ssh-mldsa44-ed25519,webauthn-sk-ecdsa-sha2-nistp256@openssh.com> debug1: Authentications that can continue: publickey,password,keyboard-interactive debug1: Next authentication method: publickey debug1: Will attempt key: /home/fred/.ssh/id_rsa debug1: Will attempt key: /home/fred/.ssh/id_ecdsa debug1: Will attempt key: /home/fred/.ssh/id_ecdsa_sk debug1: Will attempt key: /home/fred/.ssh/id_ed25519 debug1: Will attempt key: /home/fred/.ssh/id_ed25519_sk debug1: Will attempt key: /home/fred/.ssh/id_mldsa44_ed25519 debug1: Trying private key: /home/fred/.ssh/id_rsa debug1: Trying private key: /home/fred/.ssh/id_ecdsa debug1: Trying private key: /home/fred/.ssh/id_ecdsa_sk debug1: Trying private key: /home/fred/.ssh/id_ed25519 debug1: Trying private key: /home/fred/.ssh/id_ed25519_sk debug1: Trying private key: /home/fred/.ssh/id_mldsa44_ed25519 debug1: Next authentication method: keyboard-interactive debug1: Authentications that can continue: publickey,password,keyboard-interactive debug1: Next authentication method: password Authenticated to server.example.org ([198.51.100.20]:22) using "password". debug1: channel 0: new session [client-session] (inactive timeout: 0.000000) debug1: Requesting no-more-sessions@openssh.com debug1: Entering interactive session. debug1: pledge: filesystem debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0 debug1: client_input_hostkeys: searching /home/fred/.ssh/known_hosts for server.example.org / (none) debug1: client_input_hostkeys: searching /home/fred/.ssh/known_hosts2 for server.example.org / (none) debug1: client_input_hostkeys: hostkeys file /home/fred/.ssh/known_hosts2 does not exist debug1: client_input_hostkeys: no new or deprecated keys from server debug1: pledge: fork debug1: client_input_channel_req: channel 0 rtype keepalive@openssh.com reply 1 debug1: client_input_channel_req: channel 0 rtype keepalive@openssh.com reply 1 debug1: client_input_channel_req: channel 0 rtype keepalive@openssh.com reply 1 Last login: Sat Mar 14 21:31:33 2015 from 192.0.2.111 ... </syntaxhighlight> The same login with the maximum of verbosity, '''-vvv''', gives around 239 lines of debugging information. The following will save the debugging information separately in a file, '''ssh-client.log''', in the home directory. <syntaxhighlight lang="shell-session"> $ ssh -vvv -E ~/ssh-client.log -l fred somehost.example.org </syntaxhighlight> ===Capturing Client Debugging Information Together with the Session Contents=== Regular pipes and redirects work only with '''stdout''' so that if '''-E''' is not used to capture debugging output the output on '''stderr''' must instead be sent to '''stdout''' if one is going to capture it at the same time as the actual session. That is done with an extra redirect, '''2>&amp;1''' to capture '''stderr'''. Mind the spaces, or lack of them. The following will capture both the session text and the debugging information to a file, '''ssh-client.log''', in the home directory: <syntaxhighlight lang="shell-session"> $ ssh -vvv -l fred somehost.example.org 2>&1 | tee ~/ssh-output.log </syntaxhighlight> The tool [http://man.openbsd.org/tee.1 tee(1)] is like a T-pipe and sends output two directions, one to '''stdout''' and one to a file. ===Changing Client Debugging Levels At Runtime or On The Fly=== At run-time, when establishing a new connection, just use the '''-v''' option. <syntaxhighlight lang="shell-session"> $ sftp -v -o "IdentityFile=~/.ssh/weblog.key_ed25519" fred@server.example.org </syntaxhighlight> The debugging verbosity on the client can be increased just like on the server. <syntaxhighlight lang="shell-session"> $ sftp -vvv -o "IdentityFile=~/.ssh/weblog.key_ed25519" fred@server.example.org </syntaxhighlight> The extra information can be useful to see exactly what is being sent to or requested of the server. After the fact, once a connection is established, the escape sequences '''~v''' and '''~V''' can be used to increase or decrease, respectively, the verbosity on the fly. Through them it is possible to change the verbosity of the client in an established connection. When increasing the log level with '''~v''', the client raises its log level to VERBOSE, DEBUG, DEBUG2, and DEBUG3, in that order, if starting from the default of INFO. Conversely, when lowering the log level with '''~V''', the client will descend through ERROR, FATAL, to QUIET if starting from the default of INFO. ==Debugging and Troubleshooting== The server logs are your best friend when troubleshooting. It may be necessary to turn up the log level there temporarily to get more information. It is then also necessary to turn them back to normal after things are fixed to avoid privacy problems or excessively use of disk space. For example, the SFTP-subsystem logging defaults to ERROR, reporting only errors. To track transactions made by the client, change the log level to INFO or VERBOSE: <syntaxhighlight lang="apache" line="1"> Subsystem internal-sftp -l INFO </syntaxhighlight> Caution. Again, operating with elevated logging levels would violate the privacy of users, in addition to filling a lot of disk space. Elevated logging levels should generally not be used in production once the changes are figured out. Even then, the elevated log messages should really be sent to a separate log file during the time they are being collected. By default, some systems send only the normal messages to the regular system log files and ignore the elevated messages. Some save all the messages by default. If the elevated system log messages are not showing up in any of the system logs, that may be the reason. Either way, check the system log configurations and make sure that the extra messages are only sent to a separate log file and not mixed in with the regular system logs. Change the configuration to do that, if necessary. Separating the extra messaging helps keep the logs tidy as well as protecting privacy. The system log settings are found in the system log daemon's configuration file, the exact name of which will vary depending on what is installed, but common ones are [https://man.openbsd.org/syslog.conf.5 syslog.conf(5)] and rsyslog.conf(5). Notice that the configuration below has the all messages including the more detailed VERBOSE, and on up through DEBUG3, messages for the AUTH facility going to a separate log file from the regular AUTH messages: <syntaxhighlight lang="shell-session"> $ grep '^auth\.' /etc/syslog.conf auth.info /var/log/authlog auth.* /var/log/authdebug </syntaxhighlight> See [https://man.openbsd.org/syslog.3 syslog(3)] for the log facilities and log levels. It is best to limit the time the debugging information is collected to be as short as possible and to actively watch the logs while the extra information is being collected. However, if the more verbose logging is running for any length of time, and especially if it is left unattended even for a short while, be sure to remember to add the new log file to the log rotation schedule so that it cannot fill up the partition. Note, logs might be handled by other services on some systems. Check with the official documentation for your system to be sure. On the client side, '''Match''' blocks can help further by setting log levels for specific situations and avoid a situation where everything is logged intensely. The manual pages for OpenSSH are very well written and many times problems can be solved by finding the right section within the right manual page. At the very minimum, it is important to skim through the four main manual pages for both the programs and their configuration to become familiar with at least the section headings. * [http://man.openbsd.org/ssh.1 ssh(1)] * [http://man.openbsd.org/ssh_config.5 ssh_config(5)] * [http://man.openbsd.org/sshd.5 sshd(8)] * [http://man.openbsd.org/sshd_config.5 sshd_config(5)] Once the right section is found in the manual page, read it in detail and become familiar with its contents. The same goes for the other OpenSSH manual pages, depending on the activity. Be sure to use the version(s) of OpenSSH actually in use on your system(s) with their corresponding manual pages. When possible, use those that are installed on your system so as to avoid a mismatch. In some cases, the client and the server will be of different versions, so the manual pages for each must be looked up separately. It is also a good idea to review OpenSSH's release notes when a new version is published. With a few exceptions below, specific examples of troubleshooting are usually given in the cookbook section relevant to a particular activity. So, for example, sorting problems with authentication keys is done in the section on [[OpenSSH/Cookbook/Authentication_Keys|Public Key Authentication]] itself. ===Debugging a script, configuration or key that uses sudo(8)=== Usually log levels only need to be changed when writing and testing a script, a new configuration, some new keys, or all three at once. When working with '''sudo(8)''', it is especially important to see exactly what the client is sending so as to enter the right pattern into '''/etc/sudoers''' for safety. Using the lowest level of verbosity, the exact string being sent by the client to the remote server is shown in the debugging output: <syntaxhighlight lang="shell-session"> $ rsync -e "ssh -v -i /home/webmaint/.ssh/bkup_key -l webmaint" \ -a server.example.org:/var/www/ var/backup/www/ ... debug1: Sending command: rsync --server --sender -logDtpre.iLsfxCIvu . /var/www/ ... </syntaxhighlight> What '''sudoers''' then needs is something like the following, assuming account 'webmaint' is in the group 'webmasters': <syntaxhighlight lang="apache" line="1"> %webmasters ALL=(ALL) NOPASSWD: /usr/local/bin/rsync --server \ --sender -logDtpre.iLsfxCIvu . /var/www/ </syntaxhighlight> The same method can be used to debug new server configurations or key logins. Once things are set to run as needed, the log level settings can be lowered back to INFO for [http://man.openbsd.org/sshd.8 sshd(8)] and to ERROR for '''internal-sftp'''. Additionally, once the script is left to run in fully automated mode, the client logging information can be set use the [http://man.openbsd.org/syslog.3 syslog(3)] system module instead of '''stderr''' by using the '''-y''' option when [http://man.openbsd.org/ssh ssh(1)] is launched. ===Debugging a server configuration=== Running the server in debug mode provides a lot of information about the connection and a smaller amount about the server configuration. The server's debugging level ('''-d''') can be raised once, twice ('''-dd''') or thrice ('''-ddd'''). <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -d </syntaxhighlight> Note that in this case the server does not detach and become a daemon, so it will terminate when the SSH connection terminates. The advantage is this collects the logs for one single session and only that session. The server must be started again in order to make a subsequent connection from the client. Though in some ways this is a hassle, it does make sure that session data is a unique set and not mixes of multiple sessions and thus possibly different configurations. Alternately, another option ('''-e''') when debugging sends the debugging data to '''stderr''' instead in order to keep the system logs clean. It is also possible to log the debugging data from the system logs directly to a separate file and keep noise out of the system logs. Since OpenSSH 6.3, the option '''-E''' will append the debug data to a particular log file instead of sending it to the system log. This facilitates debugging live systems without cluttering the system logs. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -E /home/fred/sshd.debug.log -d </syntaxhighlight> In really old versions of OpenSSH, which are hopefully no longer in production, if you need to save output to a file while still viewing it live on the screen, you can use '''tee(1)'''. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -ddd 2>&1 | tee /tmp/foo </syntaxhighlight> That will save output to the file ''foo'' by redirecting to '''stdout''' what [http://man.openbsd.org/sshd.8 sshd(8)] sent to '''stderr''' and saving it to a file. This works with really old versions of OpenSSH, but the '''-E''' option above is preferable. If the server is remote and it is important to reduce the risk of getting locked out, the experiments on the configuration file can be done with a second instance of [http://man.openbsd.org/sshd.8 sshd(8)] using a separate configuration file and listening to a high port until the settings have been tested. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -dd -p 22222 -f /home/fred/sshd_config.test </syntaxhighlight> If the OpenSSH server's configuration file is set to listen on odd ports or more than one port using the '''ListenAddress''' directive, then that can also be overriden so that the server listens on the extra port. <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -o 'ListenAddress 0.0.0.0:22222' -dd \ -f /home/fred/sshd_config.test </syntaxhighlight> It is also possible to make an extended test ('''-T''') of the configuration file first. If there is a syntax error, it will be reported, but remember that even sound configurations can still lock you out. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -T | sort | less -X </syntaxhighlight> The extended test mode can be used by itself, but it is also possible to specify custom parameters to use with '''-C''' to see what happens with specific kinds of connections. [http://man.openbsd.org/sshd.8 sshd(8)] will the connection. It will then process the configuration file in light of the parameters passed to it and return output with the modified results. This is good for showing the results of any '''Match''' directives which might apply to the session. The variables ''user'', ''host'', and ''addr'' are the minimum required passing when specific connection parameters to [http://man.openbsd.org/sshd.8 sshd(8)] for evaluation with the '''-C''' option . The following options will print out the configurations that will be applied when the user ''fred'' tries to log in to the host ''server.example.org'' from the address ''192.0.2.15'': <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -T -C user=fred,host=server.example.org,addr=192.0.2.15 </syntaxhighlight> Two more parameters, ''laddr'' and ''lport'', may also be passed. They refer to the server's IP number and port connected to. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -T -C user=fred,host=server.example.org,addr=192.0.2.15,laddr=192.0.2.2,lport=2222 </syntaxhighlight> And lastly, there is a parameter ''rdomain'' to specify the routing domain or routing table to try. Between those six variables it should be possible to describe any possible incoming connection. ====Adding Timestamps to Server Debugging Output==== The '''-d''' option increases the value for '''LogLevel''' but does not prepend any timestamps to the server's output. Timestamps can nevertheless be added on the fly by writing the debug logs to '''stderr''' using the '''-e''' option, redirecting '''stderr''' to '''stdout''', and then piping that into [https://man.openbsd.org/ts ts(1)], a timestamping utility. <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -p 2222 -e -d 2>&1 | ts "%.T" | tee /tmp/sshd.log </syntaxhighlight> That will show the time, including microseconds. Mind the dot there before the letter 'T'. The options '''-i''' and '''-s''' for [https://man.openbsd.org/ts ts(1)] can be relevant, too. The '''-i''' option will measure the relative time between the timestamps themselves. The '''-s''' option will show the time elapsed since the start of the program. Other custom date and time formats can be specified as per [https://man.openbsd.org/strftime strftime(3)], if needed. When [https://man.openbsd.org/ts ts(1)] is not already present it can usually be added via the moreutils package. Although some systems, such as OpenBSD, include it in the base system. If it is not already installed and not available for installation, then Perl can be used on POSIX systems to prepend a timestamp to '''stdin''': <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -p 2222 -e -d 2>&1 \ | perl -p -e 'use POSIX strftime; print strftime("%F %T ", localtime)' \ | tee /tmp/sshd.log </syntaxhighlight> However, that only provides an accuracy of whole seconds. If more precision is needed, then Python3 can provide timestamps with precision down to the microsecond. <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -p 2222 -e -d 2>&1 \ | python -c 'import datetime; import sys; [print (datetime.datetime.now(), flush=True) for line in sys.stdin]' \ | tee /tmp/sshd.log </syntaxhighlight> Note that the Python approach requires explicitly setting the buffer to flush automatically. Some non-POSIX shells can make use of [https://mywiki.wooledge.org/ProcessSubstitution process substitution] to pipe '''stderr''' output into another program. <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -p 2222 -e -d 2> >(ts) | tee /tmp/sshd.log | less -X </syntaxhighlight> There are even fancier approaches using IO redirection on extra file descriptors, but those are far outside the scope of this book. ===Debugging a client configuration=== Sometimes when debugging a server configuration it is necessary to track the client configurations settings, as well. Since OpenSSH 6.8, the '''-G''' option makes [http://man.openbsd.org/ssh.1 ssh(1)] print its configuration after evaluating any '''Host''' and '''Match''' blocks and then exit without connecting. That allows viewing of the exact configuration options which will actually be used by the client for a particular session. <syntaxhighlight lang="shell-session"> $ ssh -G -l fred server.example.org | sort </syntaxhighlight> Client configuration is determined in three ways. The first is by run-time options, then by the account's own configuration file, or lastly the system-wide client configuration file. The priority is in that order. Whichever value is found first gets used. With [http://man.openbsd.org/sftp.1 sftp(1)] the options are also passed to [http://man.openbsd.org/ssh.1 ssh(1)]. ====Invalid or Outdated Ciphers or MACs==== A proper client will show the details of the failure. For a bad Message Authentication Code (MAC), a proper client might show something like the following when trying to foist a bad MAC like hmac-md5-96 onto the server: <syntaxhighlight lang="text"> no matching mac found: client hmac-md5-96 server umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1 </syntaxhighlight> And for a bad cipher, a proper client might show something like this when trying to foist an arcfour cipher on the server: <syntaxhighlight lang="text"> no matching cipher found: client arcfour server chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com </syntaxhighlight> Sometimes when troubleshooting a problem with the client it is necessary to turn to the server logs. In [https://www.openssh.org/txt/release-6.7 OpenSSH 6.7 unsafe MACs were removed] and in [https://www.openssh.org/txt/release-7.2 OpenSSH 7.2 unsafe ciphers were removed], but some third-party clients may still try to use them to establish a connection. In that case, the client might not provide much information beyond a vague message that the server unexpectedly closed the network connection. The server logs will, however, show what happened: <syntaxhighlight lang="text"> fatal: no matching mac found: client hmac-sha1,hmac-sha1-96,hmac-md5 server hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160 [preauth] </syntaxhighlight> More recent versions would show a simpler error for a bad MAC. <syntaxhighlight lang="text"> fatal: Unable to negotiate with 192.0.2.37 port 55044: no matching MAC found. Their offer: hmac-md5-96 [preauth] </syntaxhighlight> A bad cipher would be reported like this: <syntaxhighlight lang="text"> fatal: Unable to negotiate with 192.0.2.37 port 55046: no matching cipher found. Their offer: arcfour [preauth] </syntaxhighlight> The error message in the server log might not say which MACs or ciphers are actually available. For those, the extended test mode can be used to show the server settings and, in particular, the MACs or ciphers allowed. In its most basic usage the extended test mode would just be '''-T''', as in <code>/usr/sbin/sshd -T | grep -E 'cipher|macs'</code> with no other options. For more details and options, see the previous section on "Debugging a server configuration" above. One solution there is to upgrade the client to one that can handle the right ciphers and MACs. Another option is to switch to a different client, one that can handle the modern ciphers or MACs. See also the configuration directive '''WarnWeakCrypto''' in the manual page. It has been around since 10.1. The default for '''WarnWeakCrypto''' is 'yes'. ===Debugging Key-Based Authentication=== The most common causes of failure for public key authentication seem to be for either of two reasons: * Mangling the public key on the way to getting it into '''authorized_keys''' on the server * Incorrect permissions for the files and directories involved, ether on the client or the server. These are the directory for the keys, usually '''~/.ssh/''', or its parent directories, or the '''authorized_keys''' file, or the private key itself. As of the time of this writing, it looks like pretty much every failure of key-based authentication described on mailing lists and forums is solved by addressing either or both of those two situations. So, when encountering the error message ''Permission denied (publickey,keyboard-interactive)'', or similar, see the section on [[OpenSSH/Cookbook/Public Key Authentication|Public Key Authentication]]. Also be sure to read the manual page for [http://man.openbsd.org/sshd.8 sshd(8)] and its section on authorized keys. Usually, though not always, it will be obvious when the private key's permissions are incorrect: <syntaxhighlight lang="shell-session"> $ ssh -i ~/.ssh/fred-193.ed25519 fred@192.0.2.193 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0664 for '/home/fred/.ssh/fred-193.ed25519' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. Load key "/home/fred/.ssh/fred-193.ed25519": bad permissions </syntaxhighlight> In addition mangled public keys in the authorized keys file and to incorrect permissions, a very rare third case is if the public and private key files don't match and are not from the same key pair. As mentioned in the section on [[OpenSSH/Cookbook/Public Key Authentication|Public Key Authentication]], the public and private keys need to be parts of the same key pair so that they match. That is because even before the SSH client uses private key cryptographically, it looks at the file name of the proposed private key and then sends the public key matching that same name, if it exists, to the server. If that public key does not match the public key on the server in '''authorized_keys''' then the connection will be denied with the error ''Permission denied (publickey,keyboard-interactive)'' or similar. That alone is a very good reason to give unique descriptive file names when creating keys. Note that as mentioned above there are usually other causes to that same error message besides having mismanaged the public key file on the client machine. The file names for both parts of each key pair have to be kept synchronized so that the names match. As for a solution, the way out in the long term is to stay organized and carefully manage the keys and their file names. It can be solved on the short term by deleting the offending ''public'' key file and then using the private key to regenerate a new one, replacing the incorrect public key under that name. Again, this is an unusual edge case and not a common cause of that error. ====SSH Too Many Authentication Failures==== When there are multiple keys in the authentication agent, the client will try them against the server in the same order in which they were added to the agent. However, on odd or older agents they are returned in an unpredictable order. Newer versions allow the client to query the server to see if a particular key is acceptable. This is set by the '''PubkeyAuthOptions''' and is counted separately from the '''MaxAuthTries''' directive. When the former are used up, then the additional tries count against the latter. Either way, if the client happens to cycle through enough of the wrong keys first and hits the server's '''MaxAuthTries''' limit before finding the right key, the server will naturally break off the connection with an error message on the server about too many authentication failures: <syntaxhighlight lang="text"> Disconnecting authenticating user fred 203.0.113.110 port 35893: Too many authentication failures [preauth] </syntaxhighlight> Or in earlier versions: <syntaxhighlight lang="text"> "Received disconnect from 203.0.113.110 port 22:2: Too many authentication failures Authentication failed." </syntaxhighlight> When that happens, the client side will show this error: <syntaxhighlight lang="text"> Received disconnect from server.example.org port 22:2: Too many authentication failures Disconnected from server.example.org port 22 </syntaxhighlight> With increased verbosity, the specific keys tested and rejected will also be shown by the client. Newer clients will include the key's comment, if available, and not just the fingerprint. The keys get tried first from the agent in the order in which they were loaded into the agent, then from : <syntaxhighlight lang="shell-session"> $ ssh -v 203.0.113.110 . . . hdebug1: Offering public key: a key for fred ED25519 SHA256:7e5qkSHxSp8xitlM4JP4dOeCdnQn Vt9q6GPaB0+IrSM agent debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering public key: fred's key ED25519 SHA256:8U7Fy6nJxbxfAu0K8WXZV0WN80t/ 4lb/f9bqObw0isE agent debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering public key: one more comment ED25519 SHA256:F61Sx2t4BmoHASuMCVrBd8C30A7S QdGPwgfb7ZGWZf0 agent debug1: Authentications that a publickey,keyboard-interactive debug1: Offering public key: fred@desk.example.org ED25519 SHA256:TMfO5S6oBQ0Cu273yPp9+7carGP926kRfg6iS435cmU agent debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering public key: yet one more key ED25519 SHA256:36tMBWe4kX9hyVLZaxyjm2pp1TMFbRw0+O1xWOU5Fgk agent debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering public key: the last straw ED25519 SHA256:gNZd1TF48UgEUgoYFNXop9tEhO53If1qiDqZyKbRT4U agent Received disconnect from 203.0.113.110 port 2222:2: Too many authentication failures Disconnected from 203.0.113.110 port 2222 </syntaxhighlight> Each key in the agent also gets an annotation which says whether or not the key file was supplied by the user, either in the configuration file or as a run-time argument. For the former, it will marked with 'agent' and for the latter two as 'explicit'. The client prefers keys that are currently in the agent in the order in which they were added to the agent. Then it will try the one(s) added via run-time arguments, in the order in which they are supplied. Then, lastly, it will try the one(s) specified in the client configuration file. Or in earlier versions the file name used to load the key will be listed by the client in verbose mode, but the order will be less predictable: <syntaxhighlight lang="shell-session"> $ ssh -v 203.0.113.110 ... debug1: SSH2_MSG_SERVICE_ACCEPT received debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Next authentication method: publickey debug1: Offering RSA public key: /home/fred/.ssh/key.06.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.02.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.03.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.04.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.01.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.05.rsa Received disconnect from port 22:2: Too many authentication failures Authentication failed. </syntaxhighlight> In the older clients, the client prefers keys that were specified in the configuration and are also currently in the agent. Then it will try try them in the order in which they were supplied. [3] <ref name="key_order">{{cite mailing list | url=https://lists.mindrot.org/pipermail/openssh-unix-dev/2019-April/037700.html | title=IdentityFile vs IdentitiesOnly | date=2019-04-01 | accessdate=2019-04-04 | mailinglist=openssh-unix-dev | last=Tucker |first=Darren }}</ref> There are two solutions if you see the ''Too many authentication failures'' error: One way around this error is to remove keys from the agent one at a time using [http://man.openbsd.org/ssh-add.1 ssh-add(1)] with the '''-d''' option until there is just the right key left. Refer to each key by its file system path, for example: <code>ssh-add -d ~/.ssh/some.key.rsa</code> Because the private key to be removed is looked up in the agent based on the corresponding public key both files must exist. Without matching a public key file, the private key cannot be removed individually from the authentication agent. Instead the whole lot may be removed all at once using the '''-D''' option. However, is not always practical to do either when many remote systems are used frequently and the agent needs to be kept well-stocked. This is probably not the most practical way. Another way around this error, and probably the most practical method, is to limit the client to trying only a specific key using the '''IdentitiesOnly''' configuration directive in conjunction with the '''IdentityFile''' configuration directive. The latter points explicitly to the right key. Both can be added either as run-time options or in the client's configuration file. As a runtime option, they can be used like this: <syntaxhighlight lang="shell-session"> $ ssh -o IdentitiesOnly=yes -i ~/.ssh/server14.example.org.rsa -l fred server14.example.org </syntaxhighlight> Those settings can be stored permanently by adding something like the following '''IdentitiesFile''' and '''IdentitiesOnly''' directives to the client configuration file instead. <syntaxhighlight lang="apache" line="1"> Host server14 server14.example.org HostName server14.example.org IdentitiesOnly yes IdentityFile /home/fred/.ssh/server14.example.org.rsa User fred </syntaxhighlight> In that way, the server could be reached with either the short name or the fully qualified domain name, whatever names are listed under the '''Host''' stanza. <syntaxhighlight lang="shell-session"> $ ssh server14 </syntaxhighlight> Remember that options are selected from the client configuration file on a first-match basis. Because the first-match wins, specific rules must come before more general rules in the client configuration file. ====Signing Failed for ... Agent Refused Operation==== As mentioned, incorrect permissions on client files or directories are a common cause of authentication failure when attempting key-based authentication. Not all the errors are clear about that, however. Here is an example of a misleading error message which is actually caused by incorrect permissions: <syntaxhighlight lang="shell-session"> $ ssh -i ~/.ssh/key-ed25519 fred@server.example.org sign_and_send_pubkey: signing failed for ED25519 "/home/fred/.ssh/key-ed25519" from agent: agent refused operation fred@server.example.org: Permission denied (publickey). </syntaxhighlight> The solution for that is to ensure that no other accounts can read or write to the private key. No others should be able to write to the '''.ssh''' directory or its parent either. ===Debugging Chrooted SFTP Accounts=== With chrooted SFTP sessions, the most common problem seems to be bad directory permissions. The chroot directory, and all directories above it, must be owned by root and not writable by any other user or group. Even though these directories' group memberships do not have to be root, if any of them is not root then it must not be group writable either. Failure to use the correct ownership will result in not being able to log in with the affected accounts. The errors when login is attempted can look like this from the client side: <syntaxhighlight lang="shell-session"> $ sftp fred@192.0.2.206 fred@192.0.2.206's password: Connection to 192.0.2.206 closed by remote host. Connection closed. </syntaxhighlight> Older clients will look like this: <syntaxhighlight lang="shell-session"> $ sftp fred@192.0.2.206 fred@192.0.2.206's password: packet_write_wait: Connection to 192.0.2.206: Broken pipe Couldn't read packet: Connection reset by peer </syntaxhighlight> The error message is much clearer on the server side: <syntaxhighlight lang="text"> Aug 4 23:52:38 server sshd[7075]: fatal: bad ownership or modes for chroot directory component "/home/fred/" </syntaxhighlight> Check the directory permissions for the chroot target and all directories above it. If even one is off it must be fixed so that it is owned by root and not writable by any others. There are many, many routes to get there. Here are two was to set up chroot permissions: * One quick way to fix the permissions is to change both ownership and group membership of the directory to root. Same for all directories above the chroot target. <syntaxhighlight lang="shell-session"> $ ls -lhd /home/ /home/fred/ drwxr-xr-x 3 root root 4.0K Aug 4 20:47 /home/ drwxr-xr-x 8 root root 4.0K Aug 4 20:47 /home/fred/ </syntaxhighlight> That will work with the '''ChrootDirectory''' directive set to '''%h''' but has some drawbacks that will quickly become obvious when adding files or directories. * Another easy way to fix the permissions is to change both the account's home directory and the '''ChrootDirectory''' directive. Arrange the account's home directory so that it is under a unique directory owned by root, such as the user name itself: <syntaxhighlight lang="shell-session"> $ ls -lhd /home/ /home/fred/ /home/fred/fred/ drwxr-xr-x 3 root root 4.0K Aug 4 20:47 /home/ drwxr-x--- 3 root fred 4.0K Aug 4 20:47 /home/fred/ drwxr-x--- 8 fred fred 4.0K Aug 4 20:47 /home/fred/fred/ </syntaxhighlight> Then chroot the account to the parent directory and combine that with an alternate starting directory working from the user name token with the '''-d''' option for the SFTP server. <syntaxhighlight lang="apache" line="1"> ChrootDirectory /home/%u ForceCommand internal-sftp -d %u </syntaxhighlight> That way, when the account connects it will see only its own directory and no other parts of the system. ===Debugging RC Scripts Interfering with SFTP Sessions=== Recent versions of the server do not launch either '''/etc/ssh/sshrc''' or '''~/.ssh/rc/''' when initiating an SFTP session. However, on older versions, these scripts will get executed for both SFTP and SSH, if present and the server is configured to run them. Therefore, in older versions one common mistake is when either '''/etc/ssh/sshrc''' or '''~/.ssh/rc''' send anything at all to '''stdout''' instead of being quiet. The SFTP connection will drop when there are any extraneous data either direction on '''stdin''', whether from the client or the server. The reason is that the output to '''stdout''' on the server is received by the client on '''stdin''' but matches no correct protocol and thus causes the client to disconnect with an error. However, even in the case of using the RC scripts, the response from the server must remain 8-bit clean or an error will occur: <syntaxhighlight lang="shell-session"> $ sftp server.example.org Received message too long 1400204832 </syntaxhighlight> That one message will be the main clue. Increasing the verbosity of the SFTP client with '''-v''' won't provide more relevant information. Upgrading [http://man.openbsd.org/sshd.8 sshd(8)] might be a more practical option, when possible. When the RC scripts cause the SFTP client to disconnect, the standard server logs will show only that the client disconnected and not provide any information about why. At higher levels of logging, some extraneous reads and corresponding discards might be noticed but that is all. Below is a log sample recorded at the verbosity DEBUG3 showing such an example. <syntaxhighlight lang="text"> ... debug2: subsystem request for sftp by user fred debug1: subsystem: exec() /usr/libexec/sftp-server Starting session: subsystem 'sftp' for fred from 198.51.100.38 port 37446 id 0 ... debug2: channel 0: read 13 from efd 12 debug3: channel 0: discard efd debug2: channel 0: read 12 from efd 12 debug3: channel 0: discard efd debug2: channel 0: read 15 from efd 12 debug3: channel 0: discard efd debug2: channel 0: read 18 from efd 12 debug3: channel 0: discard efd ... </syntaxhighlight> Again, new versions won't run the RC scripts when connecting for an SFTP session. On older versions, neither RC script is may produce any output on '''stdout''' during use of SFTP or it will ruin the connection. If an RC script does produce output, it must be redirected to a system log, to a file, or sent to '''stderr''' instead of '''stdout'''. Regular interactive SSH connections are not disturbed by use of '''stdout''' and the client will just display whatever is sent. See the manual page for [http://man.openbsd.org/sshd.8 sshd(8)] in the section "SSHRC" for more. The same restriction goes for any other part of the SSH service which runs over '''stdin''' and '''stdout''', such as '''ProxyJump''' or some uses of '''ProxyCommand'''. So another example of potential interference would be when using '''LocalCommand''' with the client to specify a command to execute on the local machine after successfully connecting to the server. Any output from it also needs to be redirected to '''stderr'''. If '''LocalCommand''' ends up interfering with '''ProxyJump''' then the connection will appear to hang at the stage when '''stdout''' gets used. ===Debugging When An SSH Agent Has The Correct Private Key But Does Not Use It=== In older versions of OpenSSH, the public key must also be available on the client at the time the private key is loaded into the agent. If it is not then without the matching public key the agent will not be able to use that private key unless other arrangements are made. A symptom of this is although specifying the key via a run-time argument works, the same key does not work via the agent. Upgrading to a more recent version of OpenSSH is a better option. Otherwise a work-around is to specify the private key either as a run-time argument to the client or in the [http://man.openbsd.org/ssh_config.5 ssh_config(5)] file, from there the client will find the correspondingly named public key file. Importantly the client will still use the key in the agent yet use the designated matching public key file, so the private key file does not have to contain anything at all and could even be empty. <syntaxhighlight lang="shell-session"> $ ssh -i some_key_ed25519 fred@server.example.org </syntaxhighlight> However, if it is undesirable to have the private key accessible on the file system or if the private key is only in the agent and not itself available via the file system, then the public key can be specified explicitly instead. <syntaxhighlight lang="shell-session"> $ ssh -i some_key_ed25519.pub fred@server.example.org </syntaxhighlight> Either way, another approach is to name the key in [http://man.openbsd.org/ssh_config.5 ssh_config(5)] using the '''IdentityFile''' configuration directive. When a public key file is missing, it can easily be regenerated from the private key using [http://man.openbsd.org/ssh-keygen.1 ssh-keygen(1)] with the '''-y''' option. ==SSH Client Error Messages And Common Causes== As rehash of the above, below are some client-side error messages with some of the more common reasons<ref name="troubleshooting">{{cite web | url=https://ittavern.com/ssh-troubleshooting-guide/ | title=SSH Troubleshooting Guide | date=2023-01-17 | publisher=IT Tavern | access-date=2023-01-26 }}</ref> for those messages. Neither list of errors nor the reasons for the errors are comprehensive. The suggestions for causes just touch on one or two of the commonly seen reasons. There is no substitute for checking the actual logs, especially on the server. The server log files are usually '''/var/log/auth.log''' on most system or a variant of that name. Occasionally you will find the information in the file '''/var/log/secure''' instead. '''No address associated with name:''' <syntaxhighlight lang="shell-session"> $ ssh nonesuch.example.org ssh: Could not resolve hostname nonesuch.example.org: no address associated with name </syntaxhighlight> The destination's host name does not exist in DNS. Was it spelled correctly? '''Operation timed out:''' <syntaxhighlight lang="shell-session"> $ ssh 198.51.100.89 ssh: connect to host 198.51.100.89 port 22: Operation timed out </syntaxhighlight> There's not a system associated with that IP address, or else a packet filter is causing trouble. '''Connection timed out:''' <syntaxhighlight lang="shell-session"> $ ssh 198.51.100.89 ssh: connect to host 198.51.100.89 port 22: Connection timed out </syntaxhighlight> You can't get there from here. It is probable that the destination machine is disconnected from the network or that the network which it is on is not reachable. '''Connection refused:''' <syntaxhighlight lang="shell-session"> $ ssh www.example.org ssh: connect to host www.example.org port 22: Connection refused </syntaxhighlight> The destination system exists but there is no SSH service available at the port being tried. Is the destination right? It might be the wrong system, SSH might not be running at all, SSH might be listening on another port, or a packet filter might be blocking connections. '''Permission denied:''' <syntaxhighlight lang="shell-session"> $ ssh www.example.org fred@www.example.org: Permission denied (publickey,keyboard-interactive). </syntaxhighlight> That is usually a sign of a problem caused by the wrong user name, wrong authentication method, wrong SSH key or SSH certificate, or wrong file permissions in the authorized keys file on the destination system. If it is a matter of SSH key-based authentication, see the chapter on [[OpenSSH/Cookbook/Public_Key_Authentication | Public Key Authentication]] for more thorough coverage. If it is a question of SSH certificates, see the corresponding [[OpenSSH/Cookbook/Certificate-based_Authentication‎ | Certificate-based Authentication]] chapter. It can also be a matter of server-side settings with '''AllowGroups''', '''DenyGroups''', or similar configuration directives at the destination. Any of those possibilities can really only be identified and solved by checking the log output from [http://man.openbsd.org/sshd.8 sshd(8)]. '''No matching host key type found:''' <syntaxhighlight lang="shell-session"> $ ssh www.example.org Unable to negotiate with 198.51.100.89 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss </syntaxhighlight> The SSH daemon on that server is really outdated. Contact the system administrator about an upgrade and get them moving. More details can be seen with the '''-v''' option on the client. <syntaxhighlight lang="shell-session"> $ ssh -v fred@example.org ... debug1: SSH2_MSG_KEXINIT received debug1: kex: algorithm: diffie-hellman-group-exchange-sha256 debug1: kex: host key algorithm: (no match) Unable to negotiate with 198.51.100.89 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss </syntaxhighlight> In the above shell session, it is the server which is badly in need of an update as shown by the deprecated key exchange algorithms which it tries to use. Again, for emphasis, the solution is to update the outdated software. If a specific, old version of an particular operating system absolutely must be used for a while longer, see about getting a back port of the SSH daemon. Many GNU/Linux distros even have specific back port repositories. If you would like to see which key exchange algorithms the client supports try using the '''-Q''' option. <syntaxhighlight lang="shell-session"> $ ssh -Q kex diffie-hellman-group1-sha1 diffie-hellman-group14-sha1 diffie-hellman-group14-sha256 diffie-hellman-group16-sha512 diffie-hellman-group18-sha512 diffie-hellman-group-exchange-sha1 diffie-hellman-group-exchange-sha256 ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521 mlkem768nistp256-sha256 curve25519-sha256 curve25519-sha256@libssh.org sntrup761x25519-sha512 sntrup761x25519-sha512@openssh.com mlkem768x25519-sha256 </syntaxhighlight> <noinclude>{{OpenSSH/TOC|mini}}</noinclude> {{BookCat}} {{status|100%}} 4ef8kjwgk1dgxza29op26yf3ckt06te 4675295 4675294 2026-10-09T14:00:41Z Larsnooden 430753 grammar 4675295 wikitext text/x-wiki Both the OpenSSH client and server offer a lot of choice as to where the logs are written and how much information is collected. A prerequisite for logging is having an accurate system clock using the Network Time Protocol, NTP, or equivalent, service which provides ongoing time synchronization with rest of the world. The more accurate the time stamp in the log is, the faster it is to coordinate forensics between machines or sites or service providers. If you have to contact outside parties like a service provider, progress can usually only be made with very exact times. ==Server Logs== By default [http://man.openbsd.org/sshd.8 sshd(8)] sends logging information to the system logs using the log level INFO and the system log facility AUTH. So the place to look for log data from [http://man.openbsd.org/sshd.8 sshd(8)] is in '''/var/log/auth.log'''. These defaults can be overridden using the '''SyslogFacility''' and '''LogLevel''' directives. Below is a typical server startup entry in the authorization log. <syntaxhighlight lang="text"> Mar 19 14:45:40 server sshd[21157]: Server listening on 0.0.0.0 port 22. Mar 19 14:45:40 server sshd[21157]: Server listening on :: port 22. </syntaxhighlight> In most cases the default level of logging is sufficient, but during initial testing of new services or activities it is sometimes necessary to have more information. Debugging info usually goes to '''stderr'''. Starting with OpenSSH 7.6, '''Match''' blocks can set alternate log levels for specific conditions. The log excerpt below show the same basic server start up with increased detail. Contrast the log level DEBUG1 below with the default above: <syntaxhighlight lang="text"> Apr 5 12:39:14 server sshd[85029]: debug1: Bind to port 22 on 0.0.0.0. Apr 5 12:39:14 server sshd[85029]: Server listening on 0.0.0.0 port 22. Apr 5 12:39:14 server sshd[85029]: debug1: Bind to port 22 on ::. Apr 5 12:39:14 server sshd[85029]: Server listening on :: port 22. </syntaxhighlight> And here is the same startup using the most verbose level, DEBUG3: <syntaxhighlight lang="text"> Apr 5 12:40:59 server sshd[49707]: debug2: fd 6 setting O_NONBLOCK Apr 5 12:40:59 server sshd[49707]: debug1: Bind to port 22 on 0.0.0.0. Apr 5 12:40:59 server sshd[49707]: Server listening on 0.0.0.0 port 22. Apr 5 12:40:59 server sshd[49707]: debug2: fd 7 setting O_NONBLOCK Apr 5 12:40:59 server sshd[49707]: debug1: Bind to port 22 on ::. Apr 5 12:40:59 server sshd[49707]: Server listening on :: port 22. </syntaxhighlight> Every failed login attempt is recorded, once the value in directive '''MaxAuthTries''' is exceeded the connection is broken. Below is a log excerpt showing how the default log looks after some failed attempts: <syntaxhighlight lang="text"> ... Apr 5 12:44:43 server sshd-session[80932]: Failed password for root from 103.42.56.121 port 58164 ssh2 Apr 5 12:44:51 server last message repeated 2 times Apr 5 12:44:51 server sshd-session[80932]: Connection closed by authenticating user root 103.42.56.121 port 58164 [preauth] ... </syntaxhighlight> It is not usually a good idea to allow root login, especially not root login with authentication via password. Blocking login for root simplifies the log analysis greatly, and in particular it eliminates the time consuming question of who is trying to get in and why. People that need full root level access can gain it through [https://man.openbsd.org/su.1 su(1)] for general activities. Or for specific tasks which need root level access, those can be given those privileges through custom-made entries for '''sudo(8)''' or [https://man.openbsd.org/doas.1 doas(1)]. Note that in those cases, only specific services and programs should be allowed, not blanket access which is an all too common misconfiguration seen with '''sudo(8)'''. Alternatively, a single-purpose key made using '''forced-commands-only''' could be used since some argue that providing extra means of privilege escalation, such as [https://man.openbsd.org/su.1 su(1)], '''sudo(8)''', or [https://man.openbsd.org/doas.1 doas(1)], is more dangerous than carefully providing remote root access through a key or certificate tied to a specific function. ===Successful logins=== By default, the server does not store much information about user transactions. That is a good thing. It is also a good thing to recognize when the system is operating as it should. So here is an example of a successful SSH login: <syntaxhighlight lang="text"> Apr 4 13:30:08 server sshd-session[86956]: Accepted password for fred from 198.51.100.135 port 52646 ssh2 </syntaxhighlight> And here is an example using a key for authentication. It shows the key fingerprint as a SHA256 hash in base64. <syntaxhighlight lang="text"> Apr 5 12:49:11 server sshd-session[41210]: Accepted publickey for fred from 198.51.100.135 port 28927 ssh2: ED25519 SHA256:03u96bPG5qYi7hIEohNDfxOW+KOpMS9LPi4YdiCtGaI </syntaxhighlight> And here is an example of successful authentication with a user certificate. The certificate's identification string is "foobar" and the serial number is "9624". In this example the certificate is using ECDSA and the key itself is using Ed25519. The certificate, being a different key of its own, has a different SHA256 fingerprint from the authentication key itself. <syntaxhighlight lang="text"> Apr 5 13:50:57 server sshd-session[20263]: Accepted publickey for fred from 127.0.0.1 port 41783 ssh2: ED25519-CERT SHA256:UP1+mGQ5tfT84YCRVgytAKtikn0ujmfhXKdoxRoWDtU ID edcba (serial 2) CA ED25519 SHA256:4lngxTgobhprXfPY/p+2HNMBg6PxNDaOWrvei6kScrM </syntaxhighlight> In all three cases, older versions prior to 9.8 will use a process named '''sshd''' rather than one named '''sshd-session''' as is now a side effect of better privilege separation. Prior to 6.8, the key's fingerprint was a hexadecimal MD5 hash. <syntaxhighlight lang="text"> Jan 28 11:51:43 server sshd[5104]: Accepted publickey for fred from 192.0.2.60 port 60594 ssh2: RSA e8:31:68:c7:01:2d:25:20:36:8f:50:5d:f9:ee:70:4c </syntaxhighlight> In older versions of OpenSSH prior to 6.3 the key fingerprint is completely missing from authentication logging. <syntaxhighlight lang="text"> Jan 28 11:52:05 server sshd[1003]: Accepted publickey for fred from 192.0.2.60 port 20042 ssh2 </syntaxhighlight> Here is an example of password authentication for an SFTP session, using the server's internal-sftp subsystem. The logging for that subsystem set to INFO. <syntaxhighlight lang="text"> Mar 14 20:14:18 server sshd-session[19850]: Accepted password for fred from 192.0.2.60 port 59946 ssh2 </syntaxhighlight> Here is an example of a successful SFTP login using an Ed25519 key for authentication, with the SFTP subsystem itself logging at INFO. <syntaxhighlight lang="text"> Apr 5 13:56:02 server shd-session[58881]: Accepted publickey for fred from 192.0.2.60 port 40445 ssh2: ED25519 SHA256:UP1+mGQ5tfT84YCRVgytAKtikn0ujmfhXKdoxRoWDtU Apr 5 13:56:02 server internal-sftp[21121]: session opened for local user fred from [192.0.2.60] </syntaxhighlight> Additional data, such as connection duration, can be logged with the help of xinetd(8). ===Logging Problems from SSH Certificate Authentication=== When a certificate fails, there is generally no client side information disclosed and all investigation must occur server side. Finding the account or actual certificate in question can require some sleuthing in older versions of OpenSSH, but newer versions can identify the certificate and the certificate authority under certain circumstances. It is also important to be familiar with how log entries are supposed to look when things go correctly. Here is a successful login using certificate-based authentication: <syntaxhighlight lang="text"> Aug 7 18:32:29 server sshd-session[49021]: Accepted publickey for fred from 192.0.2.60 port 10932 ssh2: ED25519-CERT SHA256:UP1+mGQ5tfT84YCRVgytAKtikn0ujmfhXKdoxRoWDtU ID fedcba (serial 11) CA ED25519 SHA256:4lngxTgobhprXfPY/p+2HNMBg6PxNDaOWrvei6kScrM </syntaxhighlight> When the connection is closed there will be a log entry noting which account was involved. Older versions of OpenSSH will have less information in the log. <syntaxhighlight lang="text"> May 5 16:02:50 server sshd-session[32110]: Received disconnect from 192.0.2.60 port 12952:11: disconnected by user May 5 16:02:50 server sshd-session[32110]: Disconnected from user fred 192.0.2.60 port 12952 </syntaxhighlight> However, if the connection is allowed to timeout without first making any other authentication attempts by some other means, then there will be nothing to go on except maybe the time of day. <syntaxhighlight lang="text"> Apr 5 14:03:12 server sshd[9205]: Timeout before authentication for connection from 192.0.2.60 to 203.0.113.120, pid = 57844 </syntaxhighlight> Below are some common examples of log entries for failed certificate-based login attempts. There can sometimes be more than one problem with a certificate but in such cases only one error will get logged at a time. ====Expired or Not-yet-valid Certificate==== Certificates which have not yet become valid or which have already expired get a log entry as to the reason and include the offending certificate's id string and serial number as well as the fingerprint of the signing certificate authority. Below is one which is not yet valid being rejected by the server, perhaps at a future date it will be valid but that information is in the certificate, not the log. <syntaxhighlight lang="text"> Aug 7 19:02:52 server sshd-session[96551]: error: Refusing certificate ID "fedcb" serial=9 signed by ED25519 CA SHA256:4ZyxpgCaw3Y8wz91ajLWARibUGfwyuOrftt2wermMJE: Certificate invalid: not yet valid </syntaxhighlight> Next is an expired certificate which has been rejected. <syntaxhighlight lang="text"> Aug 7 19:02:53 server sshd-session[99417]: error: Refusing certificate ID "gfedc" serial=5 signed by ED25519 CA SHA256:4ZyxpgCaw3Y8wz91ajLWARibUGfwyuOrftt2wermMJE: Certificate invalid: expired </syntaxhighlight> If a certificate is not yet valid, then the log entry will say that explicitly and the trailing text on the line will be "Certificate invalid: not yet valid". The old style log entries for an expired certificate and for a certificate which has not yet become valid have much less information. <syntaxhighlight lang="text"> Apr 5 14:33:31 server sshd-session[88953]: error: Certificate invalid: expired Apr 5 14:32:41 server sshd-session[51695]: error: Certificate invalid: not yet valid </syntaxhighlight> The improved logging arrived with OpenSSH 10.1 ====Valid Certificate but Invalid Principal==== Like with other reasons for rejecting certificates, when the account and allowed principals do not match the account logging in, information is logged about which certificate was tried and failed. Here is an entry showing an invalid principal: <syntaxhighlight lang="text"> Aug 7 19:02:54 server sshd-session[12928]: error: Refusing certificate ID "edcba" serial=33 signed by ED25519 CA SHA256:4lngxTgobhprXfPY/p+2HNMBg6PxNDaOWrvei6kScrM: Certificate invalid: name is not a listed principal </syntaxhighlight> The old style log entry from OpenSSH 10.0 and earlier provides much less information about the certificate in question: <syntaxhighlight lang="text"> Apr 5 14:34:56 server sshd-session[66692]: error: Certificate invalid: name is not a listed principal </syntaxhighlight> If the client closes the connection on purpose, there may be some information in the connection closed entry but that will be a different log entry. ====Valid Certificate but Invalid Source Address==== If the certificate is limited to connecting from specific addresses or host names, the log will complain if the connection comes from a different address or host and identify the incorrect source address. The information will be split across two log entries, which might or might not be adjacent depending on how busy the server is. Here is an entry showing an invalid source address: <syntaxhighlight lang="text"> Aug 7 19:12:08 server sshd-session[29034]: cert: Authentication tried for fred with valid certificate but not from a permitted source address (198.51.100.135). Aug 7 19:12:08 server sshd-session[29034]: error: Refusing certificate ID "ihgfe" serial=8 signed by ED25519 CA SHA256:4ZyxpgCaw3Y8wz91ajLWARibUGfwyuOrftt2wermMJE: Refused by certificate options </syntaxhighlight> Prior to OpenSSH 10.1, the second entry had much less information about the offending certificate. <syntaxhighlight lang="text"> Apr 5 14:57:47 server sshd-session[78381]: cert: Authentication tried for fred with valid certificate but not from a permitted source address (198.51.100.135). Apr 5 14:57:47 server sshd-session[78381]: error: Refused by certificate options </syntaxhighlight> However, it will not be possible to identify the specific certificate directly with that old style log entry. ===Logging SFTP File Transfers=== SFTP file transfers can be logged using '''LogLevel''' INFO or VERBOSE. The log level for the SFTP server can be set in [http://man.openbsd.org/sshd_config.5 sshd_config(5)] separately from the general SSH server settings. <syntaxhighlight lang="apache" line="1"> Subsystem internal-sftp -l INFO </syntaxhighlight> By default the SFTP messages will also end up in ''auth.log'' but it is possible to filter these messages to their own file by reconfiguring the system logger, usually rsyslogd(8) or [https://man.openbsd.org/syslogd syslogd(8)]. Sometimes this is done by changing the log facility code from the default of AUTH. Available options are LOCAL0 through LOCAL7, plus, less usefully, DAEMON and USER. <syntaxhighlight lang="apache" line="1"> Subsystem internal-sftp -l INFO -f LOCAL6 </syntaxhighlight> If new system log files are assigned, it is important to remember them in the log rotation, too. Again, the '''Match''' directive can be use to change the log level just for certain connections. The following log excerpts are generated from using the log level INFO. A session starts with an open and end with a close. The number in the brackets is the process id for the SFTP session and is the only way to follow a session through the logs. <syntaxhighlight lang="text"> Oct 22 11:59:45 server internal-sftp[4929]: session opened for local user fred from [192.0.2.33] ... Oct 22 12:09:10 server internal-sftp[4929]: session closed for local user fred from [192.0.2.33] </syntaxhighlight> Here is an SFTP upload of a small file of 928 bytes named '''foo''' to the home directory for user 'fred' when logging the SFTP at log level INFO. <syntaxhighlight lang="text"> Oct 22 11:59:50 server internal-sftp[4929]: open "/home/fred/foo" flags WRITE,CREATE,TRUNCATE mode 0664 Oct 22 11:59:50 server internal-sftp[4929]: close "/home/fred/foo" bytes read 0 written 928 </syntaxhighlight> And a directory listing in the same session in the directory '''/var/www'''. <syntaxhighlight lang="text"> Oct 8 07:28:25 server internal-sftp[34984]: opendir "/" Oct 8 07:28:25 server internal-sftp[34984]: closedir "/" Oct 8 07:28:26 server internal-sftp[34984]: opendir "/" Oct 8 07:28:26 server internal-sftp[34984]: closedir "/" Oct 8 07:28:27 server internal-sftp[34984]: opendir "/var/" Oct 8 07:28:27 server internal-sftp[34984]: closedir "/var/" Oct 8 07:28:27 server internal-sftp[34984]: opendir "/var/www/" Oct 8 07:28:27 server internal-sftp[34984]: closedir "/var/www/" </syntaxhighlight> And lastly here is a download of the same small 928-byte file called '''foo''' from the home directory for the user 'fred'. <syntaxhighlight lang="text"> Oct 22 12:08:03 server internal-sftp[4929]: open "/home/fred/foo" flags READ mode 0666 Oct 22 12:08:03 server internal-sftp[4929]: close "/home/fred/foo" bytes read 928 written 0 </syntaxhighlight> Successful transfers will be noted by a ''close'' message. Attempts to download (open) files that do not exist will be followed by a ''sent status No such file'' message on a line of its own instead of a ''close''. Files that exist but that the user is not allowed to read will create a ''sent status Permission denied'' message. ===Logging Chrooted SFTP=== Logging with the built-in '''sftp-subsystem''' inside a chroot jail, defined by '''ChrootDirectory''', needs a '''./dev/log''' node to exist inside the jail. This can be done by having the system logger such as [http://man.openbsd.org/syslogd.8 syslogd(8)] add additional log sockets inside the chrooted directory when starting up. On some systems that is as simple as adding more flags, like "'''-u -a /chroot/dev/log'''", in '''/etc/rc.conf.local''' or whatever the equivalent startup script may be. Here is an example of an SFTP login with password to a chroot jail using log level DEBUG3 for the SFTP-subsystem. The log shows a file upload: <syntaxhighlight lang="text">Apr 5 15:08:41 server sshd-session[31716]: Accepted password for fred from 198.51.100.135 port 39238 ssh2 Apr 5 15:08:41 server internal-sftp[55598]: session opened for local user fred from [198.51.100.135] Apr 5 15:08:41 server internal-sftp[55598]: received client version 3 Apr 5 15:08:41 server internal-sftp[55598]: debug1: request 1: limits Apr 5 15:08:41 server internal-sftp[55598]: debug3: request 2: realpath Apr 5 15:08:41 server internal-sftp[55598]: realpath "." Apr 5 15:08:41 server internal-sftp[55598]: debug1: request 2: sent names count 1 Apr 5 15:08:52 server internal-sftp[55598]: debug3: request 3: open flags 26 Apr 5 15:08:52 server internal-sftp[55598]: open "/home/fred/foo" flags WRITE,CREATE,TRUNCATE mode 0664 Apr 5 15:08:52 server internal-sftp[55598]: debug1: request 3: sent handle 0 Apr 5 15:08:52 server internal-sftp[55598]: debug1: request 5: write "/home/fred/foo" (handle 0) off 0 len 33 Apr 5 15:08:52 server internal-sftp[55598]: debug3: request 5: sent status 0 Apr 5 15:08:52 server internal-sftp[55598]: sent status Success Apr 5 15:08:52 server internal-sftp[55598]: debug3: request 4: close handle 0 Apr 5 15:08:52 server internal-sftp[55598]: close "/home/fred/foo" bytes read 0 written 33 Apr 5 15:08:52 server internal-sftp[55598]: debug3: request 4: sent status 0 Apr 5 15:08:52 server internal-sftp[55598]: sent status Success </syntaxhighlight> Remember that SFTP is a separate subsystem and that like the file creation mode, the log level and log facility are set separately from the SSH server in [http://man.openbsd.org/sshd_config.5 sshd_config(5)], for example: <syntaxhighlight lang="apache" line="1"> Subsystem internal-sftp -l ERROR </syntaxhighlight> ===Logging Stability of Client Connectivity=== When '''ClientAliveInterval''' is set in the server's configuration, the server makes periodic probes of the clients which have established connections. At normal log levels, these are not noted in the log until something goes wrong. If the '''ClientAliveInterval''' is exceeded more times in a row than allowed by '''ClientAliveCountMax''' the client is officially declared disconnected and the connection dropped. At the default log level of INFO a brief message is logged, identifying the client which has been dropped. <syntaxhighlight lang="text"> Sep 6 14:42:08 server sshd[83709]: packet_write_poll: Connection from 192.0.2.97 port 57608: Host is down </syntaxhighlight> At log level DEBUG, the client's responses to the polls will be logged by the server showing that the session is still connected. <syntaxhighlight lang="text"> Sep 6 14:27:52 server sshd[9075]: debug1: Got 100/147 for keepalive </syntaxhighlight> Log level DEBUG2 and DEBUG3 will give even more information about the connection. However, even at log level DEBUG3, the specific client being polled will not be identified directly in the log messages and will have to be inferred from the process id of the daemon if such information is needed. <syntaxhighlight lang="text"> Sep 6 14:30:59 server sshd[73960]: debug2: channel 0: request keepalive@openssh.com confirm 1 Sep 6 14:30:59 server sshd[73960]: debug3: send packet: type 98 Sep 6 14:30:59 server sshd[73960]: debug3: receive packet: type 100 Sep 6 14:30:59 server sshd[73960]: debug1: Got 100/22 for keepalive </syntaxhighlight> Again, when the '''ClientAliveCountMax''' is exceeded, the connection is broken after the final failure of the client to respond. Here is how that looks with the log level set to DEBUG2. <syntaxhighlight lang="text"> Sep 6 14:17:55 server sshd[15780]: debug2: channel 0: request keepalive@openssh.com confirm 1 Sep 6 14:17:55 server sshd[15780]: debug1: Got 100/22 for keepalive Sep 6 14:18:37 server sshd[15780]: debug2: channel 0: request keepalive@openssh.com confirm 1 Sep 6 14:18:37 server sshd[15780]: packet_write_poll: Connection from 192.0.2.97 port 57552: Host is down Sep 6 14:18:37 server sshd[15780]: debug1: do_cleanup Sep 6 14:18:37 server sshd[48675]: debug1: do_cleanup Sep 6 14:18:37 server sshd[48675]: debug1: session_pty_cleanup: session 0 release /dev/ttyp0 </syntaxhighlight> The directives '''ClientAliveInterval''' and '''ClientAliveCountMax''' normally apply to all clients connecting to the server. However, they can be used inside a '''Match''' block and thus applied only to specific connections. ===Logging Revoked Keys=== If the '''RevokedKeys''' directive is used to point to a list of public keys that have been revoked, [http://man.openbsd.org/sshd.8 sshd(8)] will make a log entry when access is attempted using a revoked key. The entry will be the same whether a plaintext list of public keys is used or if a binary Key Revocation List (KRL) has been generated. If password authentication is allowed, and the user tries it, then after the key authentication fails there will be a record of password authentication. <syntaxhighlight lang="text"> Mar 14 20:36:40 server sshd-session[29235]: error: Authentication key RSA SHA256:jXEPmu4thnubqPUDcKDs31MOVLQJH6FfF1XSGT748jQ revoked by file /etc/ssh/ssh_revoked_keys ... Mar 14 20:36:45 server sshd-session[29235]: Accepted password for fred from 192.0.2.10 port 59967 ssh2 </syntaxhighlight> If password authentication is not allowed, [http://man.openbsd.org/sshd.8 sshd(8)] will close the connection as soon as the key fails. <syntaxhighlight lang="text"> Mar 14 20:38:27 server sshd-session[29163]: error: Authentication key RSA SHA256:jXEPmu4thnubqPUDcKDs31MOVLQJH6FfF1XSGT748jQ revoked by file /etc/ssh/ssh_revoked_keys ... </syntaxhighlight> The account trying the revoked key remains a mystery though. So it will be necessary to try to look up the key by its fingerprint from your archive of old keys using <code>ssh-keygen -lf</code> and read the key's comments. Although if a valid account cancels the connection without trying a password after the key attempt fails, the usual message will still be posted to the log and that will show the login name. <syntaxhighlight lang="text"> Mar 14 20:44:04 server sshd-session[14352]: Connection closed by authenticating user fred 192.0.2.237 port 55051 [preauth] ... </syntaxhighlight> That may be enough to provide some clue and allow a bit of log filtering with a short AWK script, if the messages are all in the same log file. <syntaxhighlight lang="shell-session"> $ awk '/revoked by file/ { pid[$5]++; key[$5]=$9; hash[$5]=$10; next; } pid[$5] && /closed by authenticating user/ { print key[$5], hash[$5], $10, $11; delete key[$5]; delete hash[$5]; delete pid[$5]; }' /var/log/authlog </syntaxhighlight> Similarly, if the client makes no attempt at logging in and just times out, the message will say just that. <syntaxhighlight lang="text"> Mar 18 21:40:25 server sshd[9942]: fatal: Timeout before authentication for connection from 198.51.100.236 to 203.0.113.75, pid = 67611 ... </syntaxhighlight> On the client side, no warning or error will be given if a revoked key is tried. It will just fail and the next key or method will be tried. ===Brute force and Hail Mary attacks=== It’s fairly common to see failed login attempts almost as soon as the server is connected to the net. Brute force attacks, where one machine hammers on a few accounts trying to find a valid password, are becoming rare. In part this is because packet filters, like NFables for Linux and PF for the BSDs, can limit the number and rate of connection attempts from a single host. The server configuration directive '''MaxStartups''' can limit the number of simultaneous, unauthenticated connections. <syntaxhighlight lang="text"> ... Apr 4 16:45:34 server sshd-session[96275]: Failed password for root from 103.42.56.121 port 48294 ssh2 ... Apr 4 16:46:58 server sshd-session[96275]: Failed password for root from 103.42.56.121 port 48294 ssh2 ... Apr 4 16:47:04 server sshd-session[96275]: Failed password for root from 103.42.56.121 port 48294 ssh2 Apr 4 16:47:05 server sshd-session[96275]: Connection closed by authenticating user root 103.42.56.121 port 48294 [preauth] ... </syntaxhighlight> Prior to 9.8, it was slightly different: <syntaxhighlight lang="text"> ... Mar 18 18:54:44 server sshd[54939]: Failed password for root from 201.179.249.231 port 52404 ssh2 Mar 18 18:54:48 server sshd[54939]: Failed password for root from 201.179.249.231 port 52404 ssh2 Mar 18 18:54:49 server sshd[54939]: Failed password for root from 201.179.249.231 port 52404 ssh2 Mar 18 18:54:49 server sshd[54939]: error: maximum authentication attempts exceeded for root from 201.179.249.231 port 52404 ssh2 [preauth] Mar 18 18:54:49 server sshd[54939]: Disconnecting authenticating user root 201.179.249.231 port 52404: Too many authentication failures [preauth] ... </syntaxhighlight> Note the "authenticating user" is present in the logs from OpenSSH 7.5 and onward when a valid user name is attempted. When an invalid user name is attempted, that is written too. <syntaxhighlight lang="text"> ... Apr 3 10:25:59 server sshd-session[78513]: Invalid user ad1tz from 103.42.56.121 port 55778 Apr 3 10:26:00 server sshd-session[78513]: Received disconnect from 103.42.56.121 port 55778:11: Bye Bye [preauth] Apr 3 10:26:00 server sshd-session[78513]: Disconnected from invalid user ad1tz 103.42.56.121 port 55778 [preauth] ... </syntaxhighlight> Again, in versions prior to 9.8, the process name is different as is the closing message. <syntaxhighlight lang="text"> ... Mar 18 18:55:05 server sshd[38594]: Invalid user ubnt from 201.179.249.231 port 52471 Mar 18 18:55:05 server sshd[38594]: Failed password for invalid user ubnt from 201.179.249.231 port 52471 ssh2 Mar 18 18:55:09 server sshd[38594]: error: maximum authentication attempts exceeded for invalid user ubnt from 201.179.249.231 port 52471 ssh2 [preauth] Mar 18 18:55:09 server sshd[38594]: Disconnecting invalid user ubnt 201.179.249.231 port 52471: Too many authentication failures [preauth] ... </syntaxhighlight> The way to deal with brute force attacks coming from a single machine or network is to customize the server host’s packet filter to limit the attacks or even temporarily block machines that overload the maximum number or rate of connections. Optionally, one should also contact the attacker’s net block owner with the IP address and exact date and time of the attacks. A kind of attack common at the time of this writing is one which is distributed over a large number of compromised machines, each playing only a small role in attacking the server. To deal with Hail Mary attacks, contact the attacker’s net block owner. A form letter with a cut-and-paste excerpt from the log is enough if it gives the exact times and addresses. Alternately, teams of network or system administrators can work to pool data to identify and blacklist the compromised hosts participating in the attack. ====Failed None For Invalid User==== The SSH protocol specifies a number of possible authentication methods<ref name="rfc_4252">{{cite web | url =https://datatracker.ietf.org/doc/html/rfc4252#section-5.2 | title=RFC 4252: The Secure Shell (SSH) Authentication Protocol | date=2006 | publisher=IETF | access-date=2021-08-10 }}</ref>. The methods <code>password</code>, <code>keyboard-interactive</code>, and <code>publickey</code> are fairly common. A lesser known authentication method is <code>none</code>, which will only succeed if the server requires no further authentication such as if '''PermitEmptyPassword''' is set and the account does not actually have a password<ref name="failed_none">{{cite mailing list | url=https://marc.info/?l=openbsd-misc&m=162858437916966&w=2 | last=Tucker | first=Darren | mailing-list=OpenBSD-Misc | date=2021-08-10 | accessdate=2021-08-10 | title=Re: ssh authlog: Failed none for invalid user | publisher=OpenBSD}}</ref>. Some SSH clients including OpenSSH's start by asking for <code>none</code> authentication and then use the list of remaining possible authentication methods to decide what to do next if that doesn't work. <syntaxhighlight lang="text"> ... Aug 10 19:09:05 server sshd[93126]: Failed none for invalid user admin from 125.64.94.136 port 27586 ssh2 ... </syntaxhighlight> So in other words, that is a brute force attack trying the <code>none</code> authentication method. It is an attack which will only get into accounts which have been explicitly set with an empty password and furthermore have also been set up specifically to allow access by having both the authentication method of <code>none</code> and the '''PermitEmptyPasswords''' configuration directive enabled on the server. Most brute force attacks try only <code>password</code> authentication, and some of those even check for the <code>password</code> method and then give up if it is not available. Other attackers may just hammer away pointlessly even if the method is not available. ===Connections Seemingly From 127.0.0.1, ::1, or Other localhost Addresses=== When the SSH server is accessed via a reverse tunnel to another machine, the incoming connections will appear to be from the ''localhost'' address, which is usually ''127.0.0.1'' or ''::1''. <syntaxhighlight lang="text"> Mar 23 14:16:16 server sshd[9265]: Accepted password for fred from 127.0.0.1 port 40426 ssh2 </syntaxhighlight> If the port at the other end of the reverse tunnel is publicly accessible, it will be probed and possibly attacked. Because of the reverse tunnel, the attacks will then also appear to be coming from the server's own loopback address: <syntaxhighlight lang="text"> Mar 23 14:20:17 server sshd-session[5613]: Invalid user cloud from ::1 port 57404 Mar 23 14:20:21 server sshd-session[5613]: Failed password for invalid user cloud from ::1 port 57404 ssh2 Mar 23 14:20:26 server sshd-session[5613]: Failed password for invalid user cloud from ::1 port 57404 ssh2 Mar 23 14:20:35 server sshd-session[5613]: Connection closed by invalid user cloud ::1 port 57404 [preauth] </syntaxhighlight> Like in the other examples, the disconnection message was different prior to 9.8: <syntaxhighlight lang="text"> ... Mar 23 14:20:32 server sshd[5613]: Failed password for invalid user cloud from ::1 port 57404 ssh2 Mar 23 14:20:35 server sshd[5613]: Connection closed by invalid user cloud ::1 port 57404 [preauth] ... </syntaxhighlight> Therefore the usual countermeasures like SSHGuard or Fail2Ban or other similar intrusion detection systems cannot be used because the ''localhost'' address is used by the tunnel for all login attempts, regardless of their real origins. A partial solution would be to bind the incoming connections to a different IP address. The loopback interface would need an additional permanent address, an alias, for that. That alias could then be assigned when establishing the reverse tunnel: <syntaxhighlight lang="shell-session"> $ ssh -R 2022:127.2.2.1:22 fred@vps.example.org </syntaxhighlight> Thus it would designate the source address for all logins coming in over that tunnel. So, in that way, the alias would then show up in the logs instead of the default loopback address when that reverse tunnel is used: <syntaxhighlight lang="text"> Mar 23 18:00:13 server sshd-session[8525]: Invalid user cloud from 127.2.2.1 port 17271 Mar 23 18:00:15 server sshd-session[8525]: Failed password for invalid user cloud from 127.2.2.1 port 17271 ssh2 Mar 23 18:00:19 server sshd-sesssion[8525]: Failed password for invalid user cloud from 127.2.2.1 port 17271 ssh2 Mar 23 18:01:23 server sshd-session[8525]: Failed password for invalid user cloud from 127.2.2.1 port 17271 ssh2 Mar 23 18:01:26 server sshd-session[8525]: Connection closed by invalid user cloud 127.2.2.1 port 17271 [preauth] </syntaxhighlight> If the ports do not need to be available to the open Internet, a full solution would be just to ensure that they are not accessible from the outside. This would be done by not using the '''-g''' option on the client when making the reverse tunnel or else by setting the '''GatewayPorts''' directive in [http://man.openbsd.org/sshd_config.5 sshd_config(5)] back to the default of '''no''', or both. The system's built-in packet filter can also be used. Then, even with the forwarded ports closed off from the outside, the '''ProxyJump''' option can still be used to skip through the jump host and use the setup for SSH access. However, since it is sometimes necessary that these ports be accessible to the outside world, this approach is not always an option. ==Client Logging== The OpenSSH client normally sends log information to '''stderr'''. The '''-y''' option can be used to send output to the system logs, managed by [http://man.openbsd.org/syslogd.8 syslogd(8)] or something similar. Client log verbosity can be increased or decreased by changing the '''LogLevel''' directive and the log facility changed with the '''SyslogFacility''' directive in [http://man.openbsd.org/ssh_config.5 ssh_config(5)]. Both require use of the '''-y''' run-time option and do nothing without it. Alternatively, instead of using the '''-y''' option, using the '''-E''' option sends log output to a designated file instead of '''stderr'''. Working with the system logs or separate log files are something which can be useful when running [http://man.openbsd.org/ssh.1 ssh(1)] in automated scripts. Below is an example of a connection to an interactive shell with the normal level of client logging: <syntaxhighlight lang="shell-session"> $ ssh -l fred server.example.org fred@server.example.org‘s password: Last login: Thu Jan 27 13:21:57 2011 from 192.168.11.1 </syntaxhighlight> The same connection at the first level of verbosity gives lots of debugging information, 90 lines in all. <syntaxhighlight lang="shell-session"> $ ssh -v -l fred server.example.org debug1: OpenSSH_10.6, LibreSSL 4.4.0 debug1: Reading configuration data /etc/ssh/ssh_config debug1: no pubkey loaded from /home/fred/.ssh/id_rsa debug1: identity file /home/fred/.ssh/id_rsa type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_rsa debug1: no pubkey loaded from /home/fred/.ssh/id_ecdsa debug1: identity file /home/fred/.ssh/id_ecdsa type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_ecdsa debug1: no pubkey loaded from /home/fred/.ssh/id_ecdsa_sk debug1: identity file /home/fred/.ssh/id_ecdsa_sk type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_ecdsa_sk debug1: no pubkey loaded from /home/fred/.ssh/id_ed25519 debug1: identity file /home/fred/.ssh/id_ed25519 type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_ed25519 debug1: no pubkey loaded from /home/fred/.ssh/id_ed25519_sk debug1: identity file /home/fred/.ssh/id_ed25519_sk type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_ed25519_sk debug1: no pubkey loaded from /home/fred/.ssh/id_mldsa44_ed25519 debug1: identity file /home/fred/.ssh/id_mldsa44_ed25519 type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_mldsa44_ed25519 debug1: Connecting to server.example.org [198.51.100.20] port 22. debug1: Connection established. debug1: Local version string SSH-2.0-OpenSSH_10.6 debug1: Remote protocol version 2.0, remote software version OpenSSH_10.6 debug1: compat_banner: match: OpenSSH_10.6 pat OpenSSH* compat 0x04000000 debug1: Authenticating to server.example.org:22 as 'fred' debug1: load_hostkeys: fopen /home/fred/.ssh/known_hosts2: No such file or directory debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT received debug1: kex: algorithm: mlkem768x25519-sha256 debug1: kex: host key algorithm: ssh-ed25519 debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none debug1: expecting SSH2_MSG_KEX_ECDH_REPLY debug1: SSH2_MSG_KEX_ECDH_REPLY received debug1: Server host key: ssh-ed25519 SHA256:agRZDZn8awhQ+tc19Ip/whkHoV33Ln2REO7v1kcYbdU debug1: load_hostkeys: fopen /home/fred/.ssh/known_hosts2: No such file or directory debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory debug1: Host 'server.example.org' is known and matches the ED25519 host key. debug1: Found key in /home/fred/.ssh/known_hosts:1 debug1: ssh_packet_send2_wrapped: resetting send seqnr 3 debug1: rekey out after 134217728 blocks debug1: SSH2_MSG_NEWKEYS sent debug1: Sending SSH2_MSG_EXT_INFO debug1: expecting SSH2_MSG_NEWKEYS debug1: ssh_packet_read_poll2: resetting read seqnr 3 debug1: SSH2_MSG_NEWKEYS received debug1: rekey in after 134217728 blocks debug1: SSH2_MSG_EXT_INFO received debug1: kex_ext_info_client_parse: server-sig-algs=<ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ssh-ed25519@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com,rsa-sha2-512,rsa-sha2-256,ssh-mldsa44-ed25519,webauthn-sk-ecdsa-sha2-nistp256@openssh.com> debug1: kex_ext_info_check_ver: publickey-hostbound@openssh.com=<0> debug1: kex_ext_info_check_ver: ping@openssh.com=<0> debug1: kex_ext_info_check_ver: agent-forward=<0> debug1: SSH2_MSG_SERVICE_ACCEPT received debug1: SSH2_MSG_EXT_INFO received debug1: kex_ext_info_client_parse: server-sig-algs=<ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ssh-ed25519@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com,rsa-sha2-512,rsa-sha2-256,ssh-mldsa44-ed25519,webauthn-sk-ecdsa-sha2-nistp256@openssh.com> debug1: Authentications that can continue: publickey,password,keyboard-interactive debug1: Next authentication method: publickey debug1: Will attempt key: /home/fred/.ssh/id_rsa debug1: Will attempt key: /home/fred/.ssh/id_ecdsa debug1: Will attempt key: /home/fred/.ssh/id_ecdsa_sk debug1: Will attempt key: /home/fred/.ssh/id_ed25519 debug1: Will attempt key: /home/fred/.ssh/id_ed25519_sk debug1: Will attempt key: /home/fred/.ssh/id_mldsa44_ed25519 debug1: Trying private key: /home/fred/.ssh/id_rsa debug1: Trying private key: /home/fred/.ssh/id_ecdsa debug1: Trying private key: /home/fred/.ssh/id_ecdsa_sk debug1: Trying private key: /home/fred/.ssh/id_ed25519 debug1: Trying private key: /home/fred/.ssh/id_ed25519_sk debug1: Trying private key: /home/fred/.ssh/id_mldsa44_ed25519 debug1: Next authentication method: keyboard-interactive debug1: Authentications that can continue: publickey,password,keyboard-interactive debug1: Next authentication method: password Authenticated to server.example.org ([198.51.100.20]:22) using "password". debug1: channel 0: new session [client-session] (inactive timeout: 0.000000) debug1: Requesting no-more-sessions@openssh.com debug1: Entering interactive session. debug1: pledge: filesystem debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0 debug1: client_input_hostkeys: searching /home/fred/.ssh/known_hosts for server.example.org / (none) debug1: client_input_hostkeys: searching /home/fred/.ssh/known_hosts2 for server.example.org / (none) debug1: client_input_hostkeys: hostkeys file /home/fred/.ssh/known_hosts2 does not exist debug1: client_input_hostkeys: no new or deprecated keys from server debug1: pledge: fork debug1: client_input_channel_req: channel 0 rtype keepalive@openssh.com reply 1 debug1: client_input_channel_req: channel 0 rtype keepalive@openssh.com reply 1 debug1: client_input_channel_req: channel 0 rtype keepalive@openssh.com reply 1 Last login: Sat Mar 14 21:31:33 2015 from 192.0.2.111 ... </syntaxhighlight> The same login with the maximum of verbosity, '''-vvv''', gives around 239 lines of debugging information. The following will save the debugging information separately in a file, '''ssh-client.log''', in the home directory. <syntaxhighlight lang="shell-session"> $ ssh -vvv -E ~/ssh-client.log -l fred somehost.example.org </syntaxhighlight> ===Capturing Client Debugging Information Together with the Session Contents=== Regular pipes and redirects work only with '''stdout''' so that if '''-E''' is not used to capture debugging output the output on '''stderr''' must instead be sent to '''stdout''' if one is going to capture it at the same time as the actual session. That is done with an extra redirect, '''2>&amp;1''' to capture '''stderr'''. Mind the spaces, or lack of them. The following will capture both the session text and the debugging information to a file, '''ssh-client.log''', in the home directory: <syntaxhighlight lang="shell-session"> $ ssh -vvv -l fred somehost.example.org 2>&1 | tee ~/ssh-output.log </syntaxhighlight> The tool [http://man.openbsd.org/tee.1 tee(1)] is like a T-pipe and sends output two directions, one to '''stdout''' and one to a file. ===Changing Client Debugging Levels At Runtime or On The Fly=== At run-time, when establishing a new connection, just use the '''-v''' option. <syntaxhighlight lang="shell-session"> $ sftp -v -o "IdentityFile=~/.ssh/weblog.key_ed25519" fred@server.example.org </syntaxhighlight> The debugging verbosity on the client can be increased just like on the server. <syntaxhighlight lang="shell-session"> $ sftp -vvv -o "IdentityFile=~/.ssh/weblog.key_ed25519" fred@server.example.org </syntaxhighlight> The extra information can be useful to see exactly what is being sent to or requested of the server. After the fact, once a connection is established, the escape sequences '''~v''' and '''~V''' can be used to increase or decrease, respectively, the verbosity on the fly. Through them it is possible to change the verbosity of the client in an established connection. When increasing the log level with '''~v''', the client raises its log level to VERBOSE, DEBUG, DEBUG2, and DEBUG3, in that order, if starting from the default of INFO. Conversely, when lowering the log level with '''~V''', the client will descend through ERROR, FATAL, to QUIET if starting from the default of INFO. ==Debugging and Troubleshooting== The server logs are your best friend when troubleshooting. It may be necessary to turn up the log level there temporarily to get more information. It is then also necessary to turn them back to normal after things are fixed to avoid privacy problems or excessively use of disk space. For example, the SFTP-subsystem logging defaults to ERROR, reporting only errors. To track transactions made by the client, change the log level to INFO or VERBOSE: <syntaxhighlight lang="apache" line="1"> Subsystem internal-sftp -l INFO </syntaxhighlight> Caution. Again, operating with elevated logging levels would violate the privacy of users, in addition to filling a lot of disk space. Elevated logging levels should generally not be used in production once the changes are figured out. Even then, the elevated log messages should really be sent to a separate log file during the time they are being collected. By default, some systems send only the normal messages to the regular system log files and ignore the elevated messages. Some save all the messages by default. If the elevated system log messages are not showing up in any of the system logs, that may be the reason. Either way, check the system log configurations and make sure that the extra messages are only sent to a separate log file and not mixed in with the regular system logs. Change the configuration to do that, if necessary. Separating the extra messaging helps keep the logs tidy as well as protecting privacy. The system log settings are found in the system log daemon's configuration file, the exact name of which will vary depending on what is installed, but common ones are [https://man.openbsd.org/syslog.conf.5 syslog.conf(5)] and rsyslog.conf(5). Notice that the configuration below has the all messages including the more detailed VERBOSE, and on up through DEBUG3, messages for the AUTH facility going to a separate log file from the regular AUTH messages: <syntaxhighlight lang="shell-session"> $ grep '^auth\.' /etc/syslog.conf auth.info /var/log/authlog auth.* /var/log/authdebug </syntaxhighlight> See [https://man.openbsd.org/syslog.3 syslog(3)] for the log facilities and log levels. It is best to limit the time the debugging information is collected to be as short as possible and to actively watch the logs while the extra information is being collected. However, if the more verbose logging is running for any length of time, and especially if it is left unattended even for a short while, be sure to remember to add the new log file to the log rotation schedule so that it cannot fill up the partition. Note, logs might be handled by other services on some systems. Check with the official documentation for your system to be sure. On the client side, '''Match''' blocks can help further by setting log levels for specific situations and avoid a situation where everything is logged intensely. The manual pages for OpenSSH are very well written and many times problems can be solved by finding the right section within the right manual page. At the very minimum, it is important to skim through the four main manual pages for both the programs and their configuration to become familiar with at least the section headings. * [http://man.openbsd.org/ssh.1 ssh(1)] * [http://man.openbsd.org/ssh_config.5 ssh_config(5)] * [http://man.openbsd.org/sshd.5 sshd(8)] * [http://man.openbsd.org/sshd_config.5 sshd_config(5)] Once the right section is found in the manual page, read it in detail and become familiar with its contents. The same goes for the other OpenSSH manual pages, depending on the activity. Be sure to use the version(s) of OpenSSH actually in use on your system(s) with their corresponding manual pages. When possible, use those that are installed on your system so as to avoid a mismatch. In some cases, the client and the server will be of different versions, so the manual pages for each must be looked up separately. It is also a good idea to review OpenSSH's release notes when a new version is published. With a few exceptions below, specific examples of troubleshooting are usually given in the cookbook section relevant to a particular activity. So, for example, sorting problems with authentication keys is done in the section on [[OpenSSH/Cookbook/Authentication_Keys|Public Key Authentication]] itself. ===Debugging a script, configuration or key that uses sudo(8)=== Usually log levels only need to be changed when writing and testing a script, a new configuration, some new keys, or all three at once. When working with '''sudo(8)''', it is especially important to see exactly what the client is sending so as to enter the right pattern into '''/etc/sudoers''' for safety. Using the lowest level of verbosity, the exact string being sent by the client to the remote server is shown in the debugging output: <syntaxhighlight lang="shell-session"> $ rsync -e "ssh -v -i /home/webmaint/.ssh/bkup_key -l webmaint" \ -a server.example.org:/var/www/ var/backup/www/ ... debug1: Sending command: rsync --server --sender -logDtpre.iLsfxCIvu . /var/www/ ... </syntaxhighlight> What '''sudoers''' then needs is something like the following, assuming account 'webmaint' is in the group 'webmasters': <syntaxhighlight lang="apache" line="1"> %webmasters ALL=(ALL) NOPASSWD: /usr/local/bin/rsync --server \ --sender -logDtpre.iLsfxCIvu . /var/www/ </syntaxhighlight> The same method can be used to debug new server configurations or key logins. Once things are set to run as needed, the log level settings can be lowered back to INFO for [http://man.openbsd.org/sshd.8 sshd(8)] and to ERROR for '''internal-sftp'''. Additionally, once the script is left to run in fully automated mode, the client logging information can be set use the [http://man.openbsd.org/syslog.3 syslog(3)] system module instead of '''stderr''' by using the '''-y''' option when [http://man.openbsd.org/ssh ssh(1)] is launched. ===Debugging a server configuration=== Running the server in debug mode provides a lot of information about the connection and a smaller amount about the server configuration. The server's debugging level ('''-d''') can be raised once, twice ('''-dd''') or thrice ('''-ddd'''). <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -d </syntaxhighlight> Note that in this case the server does not detach and become a daemon, so it will terminate when the SSH connection terminates. The advantage is this collects the logs for one single session and only that session. The server must be started again in order to make a subsequent connection from the client. Though in some ways this is a hassle, it does make sure that session data is a unique set and not mixes of multiple sessions and thus possibly different configurations. Alternately, another option ('''-e''') when debugging sends the debugging data to '''stderr''' instead in order to keep the system logs clean. It is also possible to log the debugging data from the system logs directly to a separate file and keep noise out of the system logs. Since OpenSSH 6.3, the option '''-E''' will append the debug data to a particular log file instead of sending it to the system log. This facilitates debugging live systems without cluttering the system logs. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -E /home/fred/sshd.debug.log -d </syntaxhighlight> In really old versions of OpenSSH, which are hopefully no longer in production, if you need to save output to a file while still viewing it live on the screen, you can use '''tee(1)'''. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -ddd 2>&1 | tee /tmp/foo </syntaxhighlight> That will save output to the file ''foo'' by redirecting to '''stdout''' what [http://man.openbsd.org/sshd.8 sshd(8)] sent to '''stderr''' and saving it to a file. This works with really old versions of OpenSSH, but the '''-E''' option above is preferable. If the server is remote and it is important to reduce the risk of getting locked out, the experiments on the configuration file can be done with a second instance of [http://man.openbsd.org/sshd.8 sshd(8)] using a separate configuration file and listening to a high port until the settings have been tested. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -dd -p 22222 -f /home/fred/sshd_config.test </syntaxhighlight> If the OpenSSH server's configuration file is set to listen on odd ports or more than one port using the '''ListenAddress''' directive, then that can also be overriden so that the server listens on the extra port. <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -o 'ListenAddress 0.0.0.0:22222' -dd \ -f /home/fred/sshd_config.test </syntaxhighlight> It is also possible to make an extended test ('''-T''') of the configuration file first. If there is a syntax error, it will be reported, but remember that even sound configurations can still lock you out. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -T | sort | less -X </syntaxhighlight> The extended test mode can be used by itself, but it is also possible to specify custom parameters to use with '''-C''' to see what happens with specific kinds of connections. [http://man.openbsd.org/sshd.8 sshd(8)] will the connection. It will then process the configuration file in light of the parameters passed to it and return output with the modified results. This is good for showing the results of any '''Match''' directives which might apply to the session. The variables ''user'', ''host'', and ''addr'' are the minimum required passing when specific connection parameters to [http://man.openbsd.org/sshd.8 sshd(8)] for evaluation with the '''-C''' option . The following options will print out the configurations that will be applied when the user ''fred'' tries to log in to the host ''server.example.org'' from the address ''192.0.2.15'': <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -T -C user=fred,host=server.example.org,addr=192.0.2.15 </syntaxhighlight> Two more parameters, ''laddr'' and ''lport'', may also be passed. They refer to the server's IP number and port connected to. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -T -C user=fred,host=server.example.org,addr=192.0.2.15,laddr=192.0.2.2,lport=2222 </syntaxhighlight> And lastly, there is a parameter ''rdomain'' to specify the routing domain or routing table to try. Between those six variables it should be possible to describe any possible incoming connection. ====Adding Timestamps to Server Debugging Output==== The '''-d''' option increases the value for '''LogLevel''' but does not prepend any timestamps to the server's output. Timestamps can nevertheless be added on the fly by writing the debug logs to '''stderr''' using the '''-e''' option, redirecting '''stderr''' to '''stdout''', and then piping that into [https://man.openbsd.org/ts ts(1)], a timestamping utility. <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -p 2222 -e -d 2>&1 | ts "%.T" | tee /tmp/sshd.log </syntaxhighlight> That will show the time, including microseconds. Mind the dot there before the letter 'T'. The options '''-i''' and '''-s''' for [https://man.openbsd.org/ts ts(1)] can be relevant, too. The '''-i''' option will measure the relative time between the timestamps themselves. The '''-s''' option will show the time elapsed since the start of the program. Other custom date and time formats can be specified as per [https://man.openbsd.org/strftime strftime(3)], if needed. When [https://man.openbsd.org/ts ts(1)] is not already present it can usually be added via the moreutils package. Although some systems, such as OpenBSD, include it in the base system. If it is not already installed and not available for installation, then Perl can be used on POSIX systems to prepend a timestamp to '''stdin''': <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -p 2222 -e -d 2>&1 \ | perl -p -e 'use POSIX strftime; print strftime("%F %T ", localtime)' \ | tee /tmp/sshd.log </syntaxhighlight> However, that only provides an accuracy of whole seconds. If more precision is needed, then Python3 can provide timestamps with precision down to the microsecond. <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -p 2222 -e -d 2>&1 \ | python -c 'import datetime; import sys; [print (datetime.datetime.now(), flush=True) for line in sys.stdin]' \ | tee /tmp/sshd.log </syntaxhighlight> Note that the Python approach requires explicitly setting the buffer to flush automatically. Some non-POSIX shells can make use of [https://mywiki.wooledge.org/ProcessSubstitution process substitution] to pipe '''stderr''' output into another program. <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -p 2222 -e -d 2> >(ts) | tee /tmp/sshd.log | less -X </syntaxhighlight> There are even fancier approaches using IO redirection on extra file descriptors, but those are far outside the scope of this book. ===Debugging a client configuration=== Sometimes when debugging a server configuration it is necessary to track the client configurations settings, as well. Since OpenSSH 6.8, the '''-G''' option makes [http://man.openbsd.org/ssh.1 ssh(1)] print its configuration after evaluating any '''Host''' and '''Match''' blocks and then exit without connecting. That allows viewing of the exact configuration options which will actually be used by the client for a particular session. <syntaxhighlight lang="shell-session"> $ ssh -G -l fred server.example.org | sort </syntaxhighlight> Client configuration is determined in three ways. The first is by run-time options, then by the account's own configuration file, or lastly the system-wide client configuration file. The priority is in that order. Whichever value is found first gets used. With [http://man.openbsd.org/sftp.1 sftp(1)] the options are also passed to [http://man.openbsd.org/ssh.1 ssh(1)]. ====Invalid or Outdated Ciphers or MACs==== A proper client will show the details of the failure. For a bad Message Authentication Code (MAC), a proper client might show something like the following when trying to foist a bad MAC like hmac-md5-96 onto the server: <syntaxhighlight lang="text"> no matching mac found: client hmac-md5-96 server umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1 </syntaxhighlight> And for a bad cipher, a proper client might show something like this when trying to foist an arcfour cipher on the server: <syntaxhighlight lang="text"> no matching cipher found: client arcfour server chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com </syntaxhighlight> Sometimes when troubleshooting a problem with the client it is necessary to turn to the server logs. In [https://www.openssh.org/txt/release-6.7 OpenSSH 6.7 unsafe MACs were removed] and in [https://www.openssh.org/txt/release-7.2 OpenSSH 7.2 unsafe ciphers were removed], but some third-party clients may still try to use them to establish a connection. In that case, the client might not provide much information beyond a vague message that the server unexpectedly closed the network connection. The server logs will, however, show what happened: <syntaxhighlight lang="text"> fatal: no matching mac found: client hmac-sha1,hmac-sha1-96,hmac-md5 server hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160 [preauth] </syntaxhighlight> More recent versions would show a simpler error for a bad MAC. <syntaxhighlight lang="text"> fatal: Unable to negotiate with 192.0.2.37 port 55044: no matching MAC found. Their offer: hmac-md5-96 [preauth] </syntaxhighlight> A bad cipher would be reported like this: <syntaxhighlight lang="text"> fatal: Unable to negotiate with 192.0.2.37 port 55046: no matching cipher found. Their offer: arcfour [preauth] </syntaxhighlight> The error message in the server log might not say which MACs or ciphers are actually available. For those, the extended test mode can be used to show the server settings and, in particular, the MACs or ciphers allowed. In its most basic usage the extended test mode would just be '''-T''', as in <code>/usr/sbin/sshd -T | grep -E 'cipher|macs'</code> with no other options. For more details and options, see the previous section on "Debugging a server configuration" above. One solution there is to upgrade the client to one that can handle the right ciphers and MACs. Another option is to switch to a different client, one that can handle the modern ciphers or MACs. See also the configuration directive '''WarnWeakCrypto''' in the manual page. It has been around since 10.1. The default for '''WarnWeakCrypto''' is 'yes'. ===Debugging Key-Based Authentication=== The most common causes of failure for public key authentication seem to be for either of two reasons: * Mangling the public key on the way to getting it into '''authorized_keys''' on the server * Incorrect permissions for the files and directories involved, ether on the client or the server. These are the directory for the keys, usually '''~/.ssh/''', or its parent directories, or the '''authorized_keys''' file, or the private key itself. As of the time of this writing, it looks like pretty much every failure of key-based authentication described on mailing lists and forums is solved by addressing either or both of those two situations. So, when encountering the error message ''Permission denied (publickey,keyboard-interactive)'', or similar, see the section on [[OpenSSH/Cookbook/Public Key Authentication|Public Key Authentication]]. Also be sure to read the manual page for [http://man.openbsd.org/sshd.8 sshd(8)] and its section on authorized keys. Usually, though not always, it will be obvious when the private key's permissions are incorrect: <syntaxhighlight lang="shell-session"> $ ssh -i ~/.ssh/fred-193.ed25519 fred@192.0.2.193 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0664 for '/home/fred/.ssh/fred-193.ed25519' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. Load key "/home/fred/.ssh/fred-193.ed25519": bad permissions </syntaxhighlight> In addition mangled public keys in the authorized keys file and to incorrect permissions, a very rare third case is if the public and private key files don't match and are not from the same key pair. As mentioned in the section on [[OpenSSH/Cookbook/Public Key Authentication|Public Key Authentication]], the public and private keys need to be parts of the same key pair so that they match. That is because even before the SSH client uses private key cryptographically, it looks at the file name of the proposed private key and then sends the public key matching that same name, if it exists, to the server. If that public key does not match the public key on the server in '''authorized_keys''' then the connection will be denied with the error ''Permission denied (publickey,keyboard-interactive)'' or similar. That alone is a very good reason to give unique descriptive file names when creating keys. Note that as mentioned above there are usually other causes to that same error message besides having mismanaged the public key file on the client machine. The file names for both parts of each key pair have to be kept synchronized so that the names match. As for a solution, the way out in the long term is to stay organized and carefully manage the keys and their file names. It can be solved on the short term by deleting the offending ''public'' key file and then using the private key to regenerate a new one, replacing the incorrect public key under that name. Again, this is an unusual edge case and not a common cause of that error. ====SSH Too Many Authentication Failures==== When there are multiple keys in the authentication agent, the client will try them against the server in the same order in which they were added to the agent. However, on odd or older agents they are returned in an unpredictable order. Newer versions allow the client to query the server to see if a particular key is acceptable. This is set by the '''PubkeyAuthOptions''' and is counted separately from the '''MaxAuthTries''' directive. When the former are used up, then the additional tries count against the latter. Either way, if the client happens to cycle through enough of the wrong keys first and hits the server's '''MaxAuthTries''' limit before finding the right key, the server will naturally break off the connection with an error message on the server about too many authentication failures: <syntaxhighlight lang="text"> Disconnecting authenticating user fred 203.0.113.110 port 35893: Too many authentication failures [preauth] </syntaxhighlight> Or in earlier versions: <syntaxhighlight lang="text"> "Received disconnect from 203.0.113.110 port 22:2: Too many authentication failures Authentication failed." </syntaxhighlight> When that happens, the client side will show this error: <syntaxhighlight lang="text"> Received disconnect from server.example.org port 22:2: Too many authentication failures Disconnected from server.example.org port 22 </syntaxhighlight> With increased verbosity, the specific keys tested and rejected will also be shown by the client. Newer clients will include the key's comment, if available, and not just the fingerprint. The keys get tried first from the agent in the order in which they were loaded into the agent, then from : <syntaxhighlight lang="shell-session"> $ ssh -v 203.0.113.110 . . . hdebug1: Offering public key: a key for fred ED25519 SHA256:7e5qkSHxSp8xitlM4JP4dOeCdnQn Vt9q6GPaB0+IrSM agent debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering public key: fred's key ED25519 SHA256:8U7Fy6nJxbxfAu0K8WXZV0WN80t/ 4lb/f9bqObw0isE agent debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering public key: one more comment ED25519 SHA256:F61Sx2t4BmoHASuMCVrBd8C30A7S QdGPwgfb7ZGWZf0 agent debug1: Authentications that a publickey,keyboard-interactive debug1: Offering public key: fred@desk.example.org ED25519 SHA256:TMfO5S6oBQ0Cu273yPp9+7carGP926kRfg6iS435cmU agent debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering public key: yet one more key ED25519 SHA256:36tMBWe4kX9hyVLZaxyjm2pp1TMFbRw0+O1xWOU5Fgk agent debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering public key: the last straw ED25519 SHA256:gNZd1TF48UgEUgoYFNXop9tEhO53If1qiDqZyKbRT4U agent Received disconnect from 203.0.113.110 port 2222:2: Too many authentication failures Disconnected from 203.0.113.110 port 2222 </syntaxhighlight> Each key in the agent also gets an annotation which says whether or not the key file was supplied by the user, either in the configuration file or as a run-time argument. For the former, it will marked with 'agent' and for the latter two as 'explicit'. The client prefers keys that are currently in the agent in the order in which they were added to the agent. Then it will try the one(s) added via run-time arguments, in the order in which they are supplied. Then, lastly, it will try the one(s) specified in the client configuration file. Or in earlier versions the file name used to load the key will be listed by the client in verbose mode, but the order will be less predictable: <syntaxhighlight lang="shell-session"> $ ssh -v 203.0.113.110 ... debug1: SSH2_MSG_SERVICE_ACCEPT received debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Next authentication method: publickey debug1: Offering RSA public key: /home/fred/.ssh/key.06.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.02.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.03.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.04.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.01.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.05.rsa Received disconnect from port 22:2: Too many authentication failures Authentication failed. </syntaxhighlight> In the older clients, the client prefers keys that were specified in the configuration and are also currently in the agent. Then it will try try them in the order in which they were supplied. [3] <ref name="key_order">{{cite mailing list | url=https://lists.mindrot.org/pipermail/openssh-unix-dev/2019-April/037700.html | title=IdentityFile vs IdentitiesOnly | date=2019-04-01 | accessdate=2019-04-04 | mailinglist=openssh-unix-dev | last=Tucker |first=Darren }}</ref> There are two solutions if you see the ''Too many authentication failures'' error: One way around this error is to remove keys from the agent one at a time using [http://man.openbsd.org/ssh-add.1 ssh-add(1)] with the '''-d''' option until there is just the right key left. Refer to each key by its file system path, for example: <code>ssh-add -d ~/.ssh/some.key.rsa</code> Because the private key to be removed is looked up in the agent based on the corresponding public key both files must exist. Without matching a public key file, the private key cannot be removed individually from the authentication agent. Instead the whole lot may be removed all at once using the '''-D''' option. However, is not always practical to do either when many remote systems are used frequently and the agent needs to be kept well-stocked. This is probably not the most practical way. Another way around this error, and probably the most practical method, is to limit the client to trying only a specific key using the '''IdentitiesOnly''' configuration directive in conjunction with the '''IdentityFile''' configuration directive. The latter points explicitly to the right key. Both can be added either as run-time options or in the client's configuration file. As a runtime option, they can be used like this: <syntaxhighlight lang="shell-session"> $ ssh -o IdentitiesOnly=yes -i ~/.ssh/server14.example.org.rsa -l fred server14.example.org </syntaxhighlight> Those settings can be stored permanently by adding something like the following '''IdentitiesFile''' and '''IdentitiesOnly''' directives to the client configuration file instead. <syntaxhighlight lang="apache" line="1"> Host server14 server14.example.org HostName server14.example.org IdentitiesOnly yes IdentityFile /home/fred/.ssh/server14.example.org.rsa User fred </syntaxhighlight> In that way, the server could be reached with either the short name or the fully qualified domain name, whatever names are listed under the '''Host''' stanza. <syntaxhighlight lang="shell-session"> $ ssh server14 </syntaxhighlight> Remember that options are selected from the client configuration file on a first-match basis. Because the first-match wins, specific rules must come before more general rules in the client configuration file. ====Signing Failed for ... Agent Refused Operation==== As mentioned, incorrect permissions on client files or directories are a common cause of authentication failure when attempting key-based authentication. Not all the errors are clear about that, however. Here is an example of a misleading error message which is actually caused by incorrect permissions: <syntaxhighlight lang="shell-session"> $ ssh -i ~/.ssh/key-ed25519 fred@server.example.org sign_and_send_pubkey: signing failed for ED25519 "/home/fred/.ssh/key-ed25519" from agent: agent refused operation fred@server.example.org: Permission denied (publickey). </syntaxhighlight> The solution for that is to ensure that no other accounts can read or write to the private key. No others should be able to write to the '''.ssh''' directory or its parent either. ===Debugging Chrooted SFTP Accounts=== With chrooted SFTP sessions, the most common problem seems to be bad directory permissions. The chroot directory, and all directories above it, must be owned by root and not writable by any other user or group. Even though these directories' group memberships do not have to be root, if any of them is not root then it must not be group writable either. Failure to use the correct ownership will result in not being able to log in with the affected accounts. The errors when login is attempted can look like this from the client side: <syntaxhighlight lang="shell-session"> $ sftp fred@192.0.2.206 fred@192.0.2.206's password: Connection to 192.0.2.206 closed by remote host. Connection closed. </syntaxhighlight> Older clients will look like this: <syntaxhighlight lang="shell-session"> $ sftp fred@192.0.2.206 fred@192.0.2.206's password: packet_write_wait: Connection to 192.0.2.206: Broken pipe Couldn't read packet: Connection reset by peer </syntaxhighlight> The error message is much clearer on the server side: <syntaxhighlight lang="text"> Aug 4 23:52:38 server sshd[7075]: fatal: bad ownership or modes for chroot directory component "/home/fred/" </syntaxhighlight> Check the directory permissions for the chroot target and all directories above it. If even one is off it must be fixed so that it is owned by root and not writable by any others. There are many, many routes to get there. Here are two was to set up chroot permissions: * One quick way to fix the permissions is to change both ownership and group membership of the directory to root. Same for all directories above the chroot target. <syntaxhighlight lang="shell-session"> $ ls -lhd /home/ /home/fred/ drwxr-xr-x 3 root root 4.0K Aug 4 20:47 /home/ drwxr-xr-x 8 root root 4.0K Aug 4 20:47 /home/fred/ </syntaxhighlight> That will work with the '''ChrootDirectory''' directive set to '''%h''' but has some drawbacks that will quickly become obvious when adding files or directories. * Another easy way to fix the permissions is to change both the account's home directory and the '''ChrootDirectory''' directive. Arrange the account's home directory so that it is under a unique directory owned by root, such as the user name itself: <syntaxhighlight lang="shell-session"> $ ls -lhd /home/ /home/fred/ /home/fred/fred/ drwxr-xr-x 3 root root 4.0K Aug 4 20:47 /home/ drwxr-x--- 3 root fred 4.0K Aug 4 20:47 /home/fred/ drwxr-x--- 8 fred fred 4.0K Aug 4 20:47 /home/fred/fred/ </syntaxhighlight> Then chroot the account to the parent directory and combine that with an alternate starting directory working from the user name token with the '''-d''' option for the SFTP server. <syntaxhighlight lang="apache" line="1"> ChrootDirectory /home/%u ForceCommand internal-sftp -d %u </syntaxhighlight> That way, when the account connects it will see only its own directory and no other parts of the system. ===Debugging RC Scripts Interfering with SFTP Sessions=== Recent versions of the server do not launch either '''/etc/ssh/sshrc''' or '''~/.ssh/rc/''' when initiating an SFTP session. However, on older versions, these scripts will get executed for both SFTP and SSH, if present and the server is configured to run them. Therefore, in older versions one common mistake is when either '''/etc/ssh/sshrc''' or '''~/.ssh/rc''' send anything at all to '''stdout''' instead of being quiet. The SFTP connection will drop when there are any extraneous data either direction on '''stdin''', whether from the client or the server. The reason is that the output to '''stdout''' on the server is received by the client on '''stdin''' but matches no correct protocol and thus causes the client to disconnect with an error. However, even in the case of using the RC scripts, the response from the server must remain 8-bit clean or an error will occur: <syntaxhighlight lang="shell-session"> $ sftp server.example.org Received message too long 1400204832 </syntaxhighlight> That one message will be the main clue. Increasing the verbosity of the SFTP client with '''-v''' won't provide more relevant information. Upgrading [http://man.openbsd.org/sshd.8 sshd(8)] might be a more practical option, when possible. When the RC scripts cause the SFTP client to disconnect, the standard server logs will show only that the client disconnected and not provide any information about why. At higher levels of logging, some extraneous reads and corresponding discards might be noticed but that is all. Below is a log sample recorded at the verbosity DEBUG3 showing such an example. <syntaxhighlight lang="text"> ... debug2: subsystem request for sftp by user fred debug1: subsystem: exec() /usr/libexec/sftp-server Starting session: subsystem 'sftp' for fred from 198.51.100.38 port 37446 id 0 ... debug2: channel 0: read 13 from efd 12 debug3: channel 0: discard efd debug2: channel 0: read 12 from efd 12 debug3: channel 0: discard efd debug2: channel 0: read 15 from efd 12 debug3: channel 0: discard efd debug2: channel 0: read 18 from efd 12 debug3: channel 0: discard efd ... </syntaxhighlight> Again, new versions won't run the RC scripts when connecting for an SFTP session. On older versions, neither RC script is may produce any output on '''stdout''' during use of SFTP or it will ruin the connection. If an RC script does produce output, it must be redirected to a system log, to a file, or sent to '''stderr''' instead of '''stdout'''. Regular interactive SSH connections are not disturbed by use of '''stdout''' and the client will just display whatever is sent. See the manual page for [http://man.openbsd.org/sshd.8 sshd(8)] in the section "SSHRC" for more. The same restriction goes for any other part of the SSH service which runs over '''stdin''' and '''stdout''', such as '''ProxyJump''' or some uses of '''ProxyCommand'''. So another example of potential interference would be when using '''LocalCommand''' with the client to specify a command to execute on the local machine after successfully connecting to the server. Any output from it also needs to be redirected to '''stderr'''. If '''LocalCommand''' ends up interfering with '''ProxyJump''' then the connection will appear to hang at the stage when '''stdout''' gets used. ===Debugging When An SSH Agent Has The Correct Private Key But Does Not Use It=== In older versions of OpenSSH, the public key must also be available on the client at the time the private key is loaded into the agent. If it is not then without the matching public key the agent will not be able to use that private key unless other arrangements are made. A symptom of this is although specifying the key via a run-time argument works, the same key does not work via the agent. Upgrading to a more recent version of OpenSSH is a better option. Otherwise a work-around is to specify the private key either as a run-time argument to the client or in the [http://man.openbsd.org/ssh_config.5 ssh_config(5)] file, from there the client will find the correspondingly named public key file. Importantly the client will still use the key in the agent yet use the designated matching public key file, so the private key file does not have to contain anything at all and could even be empty. <syntaxhighlight lang="shell-session"> $ ssh -i some_key_ed25519 fred@server.example.org </syntaxhighlight> However, if it is undesirable to have the private key accessible on the file system or if the private key is only in the agent and not itself available via the file system, then the public key can be specified explicitly instead. <syntaxhighlight lang="shell-session"> $ ssh -i some_key_ed25519.pub fred@server.example.org </syntaxhighlight> Either way, another approach is to name the key in [http://man.openbsd.org/ssh_config.5 ssh_config(5)] using the '''IdentityFile''' configuration directive. When a public key file is missing, it can easily be regenerated from the private key using [http://man.openbsd.org/ssh-keygen.1 ssh-keygen(1)] with the '''-y''' option. ==SSH Client Error Messages And Common Causes== As rehash of the above, below are some client-side error messages with some of the more common reasons<ref name="troubleshooting">{{cite web | url=https://ittavern.com/ssh-troubleshooting-guide/ | title=SSH Troubleshooting Guide | date=2023-01-17 | publisher=IT Tavern | access-date=2023-01-26 }}</ref> for those messages. Neither list of errors nor the reasons for the errors are comprehensive. The suggestions for causes just touch on one or two of the commonly seen reasons. There is no substitute for checking the actual logs, especially on the server. The server log files are usually '''/var/log/auth.log''' on most system or a variant of that name. Occasionally you will find the information in the file '''/var/log/secure''' instead. '''No address associated with name:''' <syntaxhighlight lang="shell-session"> $ ssh nonesuch.example.org ssh: Could not resolve hostname nonesuch.example.org: no address associated with name </syntaxhighlight> The destination's host name does not exist in DNS. Was it spelled correctly? '''Operation timed out:''' <syntaxhighlight lang="shell-session"> $ ssh 198.51.100.89 ssh: connect to host 198.51.100.89 port 22: Operation timed out </syntaxhighlight> There's not a system associated with that IP address, or else a packet filter is causing trouble. '''Connection timed out:''' <syntaxhighlight lang="shell-session"> $ ssh 198.51.100.89 ssh: connect to host 198.51.100.89 port 22: Connection timed out </syntaxhighlight> You can't get there from here. It is probable that the destination machine is disconnected from the network or that the network which it is on is not reachable. '''Connection refused:''' <syntaxhighlight lang="shell-session"> $ ssh www.example.org ssh: connect to host www.example.org port 22: Connection refused </syntaxhighlight> The destination system exists but there is no SSH service available at the port being tried. Is the destination right? It might be the wrong system, SSH might not be running at all, SSH might be listening on another port, or a packet filter might be blocking connections. '''Permission denied:''' <syntaxhighlight lang="shell-session"> $ ssh www.example.org fred@www.example.org: Permission denied (publickey,keyboard-interactive). </syntaxhighlight> That is usually a sign of a problem caused by the wrong user name, wrong authentication method, wrong SSH key or SSH certificate, or wrong file permissions in the authorized keys file on the destination system. If it is a matter of SSH key-based authentication, see the chapter on [[OpenSSH/Cookbook/Public_Key_Authentication | Public Key Authentication]] for more thorough coverage. If it is a question of SSH certificates, see the corresponding [[OpenSSH/Cookbook/Certificate-based_Authentication‎ | Certificate-based Authentication]] chapter. It can also be a matter of server-side settings with '''AllowGroups''', '''DenyGroups''', or similar configuration directives at the destination. Any of those possibilities can really only be identified and solved by checking the log output from [http://man.openbsd.org/sshd.8 sshd(8)]. '''No matching host key type found:''' <syntaxhighlight lang="shell-session"> $ ssh www.example.org Unable to negotiate with 198.51.100.89 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss </syntaxhighlight> The SSH daemon on that server is really outdated. Contact the system administrator about an upgrade and get them moving. More details can be seen with the '''-v''' option on the client. <syntaxhighlight lang="shell-session"> $ ssh -v fred@example.org ... debug1: SSH2_MSG_KEXINIT received debug1: kex: algorithm: diffie-hellman-group-exchange-sha256 debug1: kex: host key algorithm: (no match) Unable to negotiate with 198.51.100.89 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss </syntaxhighlight> In the above shell session, it is the server which is badly in need of an update as shown by the deprecated key exchange algorithms which it tries to use. Again, for emphasis, the solution is to update the outdated software. If a specific, old version of an particular operating system absolutely must be used for a while longer, see about getting a back port of the SSH daemon. Many GNU/Linux distros even have specific back port repositories. If you would like to see which key exchange algorithms the client supports try using the '''-Q''' option. <syntaxhighlight lang="shell-session"> $ ssh -Q kex diffie-hellman-group1-sha1 diffie-hellman-group14-sha1 diffie-hellman-group14-sha256 diffie-hellman-group16-sha512 diffie-hellman-group18-sha512 diffie-hellman-group-exchange-sha1 diffie-hellman-group-exchange-sha256 ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521 mlkem768nistp256-sha256 curve25519-sha256 curve25519-sha256@libssh.org sntrup761x25519-sha512 sntrup761x25519-sha512@openssh.com mlkem768x25519-sha256 </syntaxhighlight> <noinclude>{{OpenSSH/TOC|mini}}</noinclude> {{BookCat}} {{status|100%}} 0wnt7n7jfs0p316x9y6i8ydkyucd1db 4675296 4675295 2026-10-09T14:31:33Z Larsnooden 430753 grammar 4675296 wikitext text/x-wiki Both the OpenSSH client and server offer a lot of choice as to where the logs are written and how much information is collected. A prerequisite for logging is having an accurate system clock using the Network Time Protocol, NTP, or equivalent, service which provides ongoing time synchronization with rest of the world. The more accurate the time stamp in the log is, the faster it is to coordinate forensics between machines or sites or service providers. If you have to contact outside parties like a service provider, progress can usually only be made with very exact times. ==Server Logs== By default [http://man.openbsd.org/sshd.8 sshd(8)] sends logging information to the system logs using the log level INFO and the system log facility AUTH. So the place to look for log data from [http://man.openbsd.org/sshd.8 sshd(8)] is in '''/var/log/auth.log'''. These defaults can be overridden using the '''SyslogFacility''' and '''LogLevel''' directives. Below is a typical server startup entry in the authorization log. <syntaxhighlight lang="text"> Mar 19 14:45:40 server sshd[21157]: Server listening on 0.0.0.0 port 22. Mar 19 14:45:40 server sshd[21157]: Server listening on :: port 22. </syntaxhighlight> In most cases the default level of logging is sufficient, but during initial testing of new services or activities it is sometimes necessary to have more information. Debugging info usually goes to '''stderr'''. Starting with OpenSSH 7.6, '''Match''' blocks can set alternate log levels for specific conditions. The log excerpt below show the same basic server start up with increased detail. Contrast the log level DEBUG1 below with the default above: <syntaxhighlight lang="text"> Apr 5 12:39:14 server sshd[85029]: debug1: Bind to port 22 on 0.0.0.0. Apr 5 12:39:14 server sshd[85029]: Server listening on 0.0.0.0 port 22. Apr 5 12:39:14 server sshd[85029]: debug1: Bind to port 22 on ::. Apr 5 12:39:14 server sshd[85029]: Server listening on :: port 22. </syntaxhighlight> And here is the same startup using the most verbose level, DEBUG3: <syntaxhighlight lang="text"> Apr 5 12:40:59 server sshd[49707]: debug2: fd 6 setting O_NONBLOCK Apr 5 12:40:59 server sshd[49707]: debug1: Bind to port 22 on 0.0.0.0. Apr 5 12:40:59 server sshd[49707]: Server listening on 0.0.0.0 port 22. Apr 5 12:40:59 server sshd[49707]: debug2: fd 7 setting O_NONBLOCK Apr 5 12:40:59 server sshd[49707]: debug1: Bind to port 22 on ::. Apr 5 12:40:59 server sshd[49707]: Server listening on :: port 22. </syntaxhighlight> Every failed login attempt is recorded, once the value in directive '''MaxAuthTries''' is exceeded the connection is broken. Below is a log excerpt showing how the default log looks after some failed attempts: <syntaxhighlight lang="text"> ... Apr 5 12:44:43 server sshd-session[80932]: Failed password for root from 103.42.56.121 port 58164 ssh2 Apr 5 12:44:51 server last message repeated 2 times Apr 5 12:44:51 server sshd-session[80932]: Connection closed by authenticating user root 103.42.56.121 port 58164 [preauth] ... </syntaxhighlight> It is not usually a good idea to allow root login, especially not root login with authentication via password. Blocking login for root simplifies the log analysis greatly, and in particular it eliminates the time consuming question of who is trying to get in and why. People that need full root level access can gain it through [https://man.openbsd.org/su.1 su(1)] for general activities. Or for specific tasks which need root level access, those can be given those privileges through custom-made entries for '''sudo(8)''' or [https://man.openbsd.org/doas.1 doas(1)]. Note that in those cases, only specific services and programs should be allowed, not blanket access which is an all too common misconfiguration seen with '''sudo(8)'''. Alternatively, a single-purpose key made using '''forced-commands-only''' could be used since some argue that providing extra means of privilege escalation, such as [https://man.openbsd.org/su.1 su(1)], '''sudo(8)''', or [https://man.openbsd.org/doas.1 doas(1)], is more dangerous than carefully providing remote root access through a key or certificate tied to a specific function. ===Successful logins=== By default, the server does not store much information about user transactions. That is a good thing. It is also a good thing to recognize when the system is operating as it should. So here is an example of a successful SSH login: <syntaxhighlight lang="text"> Apr 4 13:30:08 server sshd-session[86956]: Accepted password for fred from 198.51.100.135 port 52646 ssh2 </syntaxhighlight> And here is an example using a key for authentication. It shows the key fingerprint as a SHA256 hash in base64. <syntaxhighlight lang="text"> Apr 5 12:49:11 server sshd-session[41210]: Accepted publickey for fred from 198.51.100.135 port 28927 ssh2: ED25519 SHA256:03u96bPG5qYi7hIEohNDfxOW+KOpMS9LPi4YdiCtGaI </syntaxhighlight> And here is an example of successful authentication with a user certificate. The certificate's identification string is "foobar" and the serial number is "9624". In this example the certificate is using ECDSA and the key itself is using Ed25519. The certificate, being a different key of its own, has a different SHA256 fingerprint from the authentication key itself. <syntaxhighlight lang="text"> Apr 5 13:50:57 server sshd-session[20263]: Accepted publickey for fred from 127.0.0.1 port 41783 ssh2: ED25519-CERT SHA256:UP1+mGQ5tfT84YCRVgytAKtikn0ujmfhXKdoxRoWDtU ID edcba (serial 2) CA ED25519 SHA256:4lngxTgobhprXfPY/p+2HNMBg6PxNDaOWrvei6kScrM </syntaxhighlight> In all three cases, older versions prior to 9.8 will use a process named '''sshd''' rather than one named '''sshd-session''' as is now a side effect of better privilege separation. Prior to 6.8, the key's fingerprint was a hexadecimal MD5 hash. <syntaxhighlight lang="text"> Jan 28 11:51:43 server sshd[5104]: Accepted publickey for fred from 192.0.2.60 port 60594 ssh2: RSA e8:31:68:c7:01:2d:25:20:36:8f:50:5d:f9:ee:70:4c </syntaxhighlight> In older versions of OpenSSH prior to 6.3 the key fingerprint is completely missing from authentication logging. <syntaxhighlight lang="text"> Jan 28 11:52:05 server sshd[1003]: Accepted publickey for fred from 192.0.2.60 port 20042 ssh2 </syntaxhighlight> Here is an example of password authentication for an SFTP session, using the server's internal-sftp subsystem. The logging for that subsystem set to INFO. <syntaxhighlight lang="text"> Mar 14 20:14:18 server sshd-session[19850]: Accepted password for fred from 192.0.2.60 port 59946 ssh2 </syntaxhighlight> Here is an example of a successful SFTP login using an Ed25519 key for authentication, with the SFTP subsystem itself logging at INFO. <syntaxhighlight lang="text"> Apr 5 13:56:02 server shd-session[58881]: Accepted publickey for fred from 192.0.2.60 port 40445 ssh2: ED25519 SHA256:UP1+mGQ5tfT84YCRVgytAKtikn0ujmfhXKdoxRoWDtU Apr 5 13:56:02 server internal-sftp[21121]: session opened for local user fred from [192.0.2.60] </syntaxhighlight> Additional data, such as connection duration, can be logged with the help of xinetd(8). ===Logging Problems from SSH Certificate Authentication=== When a certificate fails, there is generally no client side information disclosed and all investigation must occur server side. Finding the account or actual certificate in question can require some sleuthing in older versions of OpenSSH, but newer versions can identify the certificate and the certificate authority under certain circumstances. It is also important to be familiar with how log entries are supposed to look when things go correctly. Here is a successful login using certificate-based authentication: <syntaxhighlight lang="text"> Aug 7 18:32:29 server sshd-session[49021]: Accepted publickey for fred from 192.0.2.60 port 10932 ssh2: ED25519-CERT SHA256:UP1+mGQ5tfT84YCRVgytAKtikn0ujmfhXKdoxRoWDtU ID fedcba (serial 11) CA ED25519 SHA256:4lngxTgobhprXfPY/p+2HNMBg6PxNDaOWrvei6kScrM </syntaxhighlight> When the connection is closed there will be a log entry noting which account was involved. Older versions of OpenSSH will have less information in the log. <syntaxhighlight lang="text"> May 5 16:02:50 server sshd-session[32110]: Received disconnect from 192.0.2.60 port 12952:11: disconnected by user May 5 16:02:50 server sshd-session[32110]: Disconnected from user fred 192.0.2.60 port 12952 </syntaxhighlight> However, if the connection is allowed to timeout without first making any other authentication attempts by some other means, then there will be nothing to go on except maybe the time of day. <syntaxhighlight lang="text"> Apr 5 14:03:12 server sshd[9205]: Timeout before authentication for connection from 192.0.2.60 to 203.0.113.120, pid = 57844 </syntaxhighlight> Below are some common examples of log entries for failed certificate-based login attempts. There can sometimes be more than one problem with a certificate but in such cases only one error will get logged at a time. ====Expired or Not-yet-valid Certificate==== Certificates which have not yet become valid or which have already expired get a log entry as to the reason and include the offending certificate's id string and serial number as well as the fingerprint of the signing certificate authority. Below is one which is not yet valid being rejected by the server, perhaps at a future date it will be valid but that information is in the certificate, not the log. <syntaxhighlight lang="text"> Aug 7 19:02:52 server sshd-session[96551]: error: Refusing certificate ID "fedcb" serial=9 signed by ED25519 CA SHA256:4ZyxpgCaw3Y8wz91ajLWARibUGfwyuOrftt2wermMJE: Certificate invalid: not yet valid </syntaxhighlight> Next is an expired certificate which has been rejected. <syntaxhighlight lang="text"> Aug 7 19:02:53 server sshd-session[99417]: error: Refusing certificate ID "gfedc" serial=5 signed by ED25519 CA SHA256:4ZyxpgCaw3Y8wz91ajLWARibUGfwyuOrftt2wermMJE: Certificate invalid: expired </syntaxhighlight> If a certificate is not yet valid, then the log entry will say that explicitly and the trailing text on the line will be "Certificate invalid: not yet valid". The old style log entries for an expired certificate and for a certificate which has not yet become valid have much less information. <syntaxhighlight lang="text"> Apr 5 14:33:31 server sshd-session[88953]: error: Certificate invalid: expired Apr 5 14:32:41 server sshd-session[51695]: error: Certificate invalid: not yet valid </syntaxhighlight> The improved logging arrived with OpenSSH 10.1 ====Valid Certificate but Invalid Principal==== Like with other reasons for rejecting certificates, when the account and allowed principals do not match the account logging in, information is logged about which certificate was tried and failed. Here is an entry showing an invalid principal: <syntaxhighlight lang="text"> Aug 7 19:02:54 server sshd-session[12928]: error: Refusing certificate ID "edcba" serial=33 signed by ED25519 CA SHA256:4lngxTgobhprXfPY/p+2HNMBg6PxNDaOWrvei6kScrM: Certificate invalid: name is not a listed principal </syntaxhighlight> The old style log entry from OpenSSH 10.0 and earlier provides much less information about the certificate in question: <syntaxhighlight lang="text"> Apr 5 14:34:56 server sshd-session[66692]: error: Certificate invalid: name is not a listed principal </syntaxhighlight> If the client closes the connection on purpose, there may be some information in the connection closed entry but that will be a different log entry. ====Valid Certificate but Invalid Source Address==== If the certificate is limited to connecting from specific addresses or host names, the log will complain if the connection comes from a different address or host and identify the incorrect source address. The information will be split across two log entries, which might or might not be adjacent depending on how busy the server is. Here is an entry showing an invalid source address: <syntaxhighlight lang="text"> Aug 7 19:12:08 server sshd-session[29034]: cert: Authentication tried for fred with valid certificate but not from a permitted source address (198.51.100.135). Aug 7 19:12:08 server sshd-session[29034]: error: Refusing certificate ID "ihgfe" serial=8 signed by ED25519 CA SHA256:4ZyxpgCaw3Y8wz91ajLWARibUGfwyuOrftt2wermMJE: Refused by certificate options </syntaxhighlight> Prior to OpenSSH 10.1, the second entry had much less information about the offending certificate. <syntaxhighlight lang="text"> Apr 5 14:57:47 server sshd-session[78381]: cert: Authentication tried for fred with valid certificate but not from a permitted source address (198.51.100.135). Apr 5 14:57:47 server sshd-session[78381]: error: Refused by certificate options </syntaxhighlight> However, it will not be possible to identify the specific certificate directly with that old style log entry. ===Logging SFTP File Transfers=== SFTP file transfers can be logged using '''LogLevel''' INFO or VERBOSE. The log level for the SFTP server can be set in [http://man.openbsd.org/sshd_config.5 sshd_config(5)] separately from the general SSH server settings. <syntaxhighlight lang="apache" line="1"> Subsystem internal-sftp -l INFO </syntaxhighlight> By default the SFTP messages will also end up in ''auth.log'' but it is possible to filter these messages to their own file by reconfiguring the system logger, usually rsyslogd(8) or [https://man.openbsd.org/syslogd syslogd(8)]. Sometimes this is done by changing the log facility code from the default of AUTH. Available options are LOCAL0 through LOCAL7, plus, less usefully, DAEMON and USER. <syntaxhighlight lang="apache" line="1"> Subsystem internal-sftp -l INFO -f LOCAL6 </syntaxhighlight> If new system log files are assigned, it is important to remember them in the log rotation, too. Again, the '''Match''' directive can be use to change the log level just for certain connections. The following log excerpts are generated from using the log level INFO. A session starts with an open and end with a close. The number in the brackets is the process id for the SFTP session and is the only way to follow a session through the logs. <syntaxhighlight lang="text"> Oct 22 11:59:45 server internal-sftp[4929]: session opened for local user fred from [192.0.2.33] ... Oct 22 12:09:10 server internal-sftp[4929]: session closed for local user fred from [192.0.2.33] </syntaxhighlight> Here is an SFTP upload of a small file of 928 bytes named '''foo''' to the home directory for user 'fred' when logging the SFTP at log level INFO. <syntaxhighlight lang="text"> Oct 22 11:59:50 server internal-sftp[4929]: open "/home/fred/foo" flags WRITE,CREATE,TRUNCATE mode 0664 Oct 22 11:59:50 server internal-sftp[4929]: close "/home/fred/foo" bytes read 0 written 928 </syntaxhighlight> And a directory listing in the same session in the directory '''/var/www'''. <syntaxhighlight lang="text"> Oct 8 07:28:25 server internal-sftp[34984]: opendir "/" Oct 8 07:28:25 server internal-sftp[34984]: closedir "/" Oct 8 07:28:26 server internal-sftp[34984]: opendir "/" Oct 8 07:28:26 server internal-sftp[34984]: closedir "/" Oct 8 07:28:27 server internal-sftp[34984]: opendir "/var/" Oct 8 07:28:27 server internal-sftp[34984]: closedir "/var/" Oct 8 07:28:27 server internal-sftp[34984]: opendir "/var/www/" Oct 8 07:28:27 server internal-sftp[34984]: closedir "/var/www/" </syntaxhighlight> And lastly here is a download of the same small 928-byte file called '''foo''' from the home directory for the user 'fred'. <syntaxhighlight lang="text"> Oct 22 12:08:03 server internal-sftp[4929]: open "/home/fred/foo" flags READ mode 0666 Oct 22 12:08:03 server internal-sftp[4929]: close "/home/fred/foo" bytes read 928 written 0 </syntaxhighlight> Successful transfers will be noted by a ''close'' message. Attempts to download (open) files that do not exist will be followed by a ''sent status No such file'' message on a line of its own instead of a ''close''. Files that exist but that the user is not allowed to read will create a ''sent status Permission denied'' message. ===Logging Chrooted SFTP=== Logging with the built-in '''sftp-subsystem''' inside a chroot jail, defined by '''ChrootDirectory''', needs a '''./dev/log''' node to exist inside the jail. This can be done by having the system logger such as [http://man.openbsd.org/syslogd.8 syslogd(8)] add additional log sockets inside the chrooted directory when starting up. On some systems that is as simple as adding more flags, like "'''-u -a /chroot/dev/log'''", in '''/etc/rc.conf.local''' or whatever the equivalent startup script may be. Here is an example of an SFTP login with password to a chroot jail using log level DEBUG3 for the SFTP-subsystem. The log shows a file upload: <syntaxhighlight lang="text">Apr 5 15:08:41 server sshd-session[31716]: Accepted password for fred from 198.51.100.135 port 39238 ssh2 Apr 5 15:08:41 server internal-sftp[55598]: session opened for local user fred from [198.51.100.135] Apr 5 15:08:41 server internal-sftp[55598]: received client version 3 Apr 5 15:08:41 server internal-sftp[55598]: debug1: request 1: limits Apr 5 15:08:41 server internal-sftp[55598]: debug3: request 2: realpath Apr 5 15:08:41 server internal-sftp[55598]: realpath "." Apr 5 15:08:41 server internal-sftp[55598]: debug1: request 2: sent names count 1 Apr 5 15:08:52 server internal-sftp[55598]: debug3: request 3: open flags 26 Apr 5 15:08:52 server internal-sftp[55598]: open "/home/fred/foo" flags WRITE,CREATE,TRUNCATE mode 0664 Apr 5 15:08:52 server internal-sftp[55598]: debug1: request 3: sent handle 0 Apr 5 15:08:52 server internal-sftp[55598]: debug1: request 5: write "/home/fred/foo" (handle 0) off 0 len 33 Apr 5 15:08:52 server internal-sftp[55598]: debug3: request 5: sent status 0 Apr 5 15:08:52 server internal-sftp[55598]: sent status Success Apr 5 15:08:52 server internal-sftp[55598]: debug3: request 4: close handle 0 Apr 5 15:08:52 server internal-sftp[55598]: close "/home/fred/foo" bytes read 0 written 33 Apr 5 15:08:52 server internal-sftp[55598]: debug3: request 4: sent status 0 Apr 5 15:08:52 server internal-sftp[55598]: sent status Success </syntaxhighlight> Remember that SFTP is a separate subsystem and that like the file creation mode, the log level and log facility are set separately from the SSH server in [http://man.openbsd.org/sshd_config.5 sshd_config(5)], for example: <syntaxhighlight lang="apache" line="1"> Subsystem internal-sftp -l ERROR </syntaxhighlight> ===Logging Stability of Client Connectivity=== When '''ClientAliveInterval''' is set in the server's configuration, the server makes periodic probes of the clients which have established connections. At normal log levels, these are not noted in the log until something goes wrong. If the '''ClientAliveInterval''' is exceeded more times in a row than allowed by '''ClientAliveCountMax''' the client is officially declared disconnected and the connection dropped. At the default log level of INFO a brief message is logged, identifying the client which has been dropped. <syntaxhighlight lang="text"> Sep 6 14:42:08 server sshd[83709]: packet_write_poll: Connection from 192.0.2.97 port 57608: Host is down </syntaxhighlight> At log level DEBUG, the client's responses to the polls will be logged by the server showing that the session is still connected. <syntaxhighlight lang="text"> Sep 6 14:27:52 server sshd[9075]: debug1: Got 100/147 for keepalive </syntaxhighlight> Log level DEBUG2 and DEBUG3 will give even more information about the connection. However, even at log level DEBUG3, the specific client being polled will not be identified directly in the log messages and will have to be inferred from the process id of the daemon if such information is needed. <syntaxhighlight lang="text"> Sep 6 14:30:59 server sshd[73960]: debug2: channel 0: request keepalive@openssh.com confirm 1 Sep 6 14:30:59 server sshd[73960]: debug3: send packet: type 98 Sep 6 14:30:59 server sshd[73960]: debug3: receive packet: type 100 Sep 6 14:30:59 server sshd[73960]: debug1: Got 100/22 for keepalive </syntaxhighlight> Again, when the '''ClientAliveCountMax''' is exceeded, the connection is broken after the final failure of the client to respond. Here is how that looks with the log level set to DEBUG2. <syntaxhighlight lang="text"> Sep 6 14:17:55 server sshd[15780]: debug2: channel 0: request keepalive@openssh.com confirm 1 Sep 6 14:17:55 server sshd[15780]: debug1: Got 100/22 for keepalive Sep 6 14:18:37 server sshd[15780]: debug2: channel 0: request keepalive@openssh.com confirm 1 Sep 6 14:18:37 server sshd[15780]: packet_write_poll: Connection from 192.0.2.97 port 57552: Host is down Sep 6 14:18:37 server sshd[15780]: debug1: do_cleanup Sep 6 14:18:37 server sshd[48675]: debug1: do_cleanup Sep 6 14:18:37 server sshd[48675]: debug1: session_pty_cleanup: session 0 release /dev/ttyp0 </syntaxhighlight> The directives '''ClientAliveInterval''' and '''ClientAliveCountMax''' normally apply to all clients connecting to the server. However, they can be used inside a '''Match''' block and thus applied only to specific connections. ===Logging Revoked Keys=== If the '''RevokedKeys''' directive is used to point to a list of public keys that have been revoked, [http://man.openbsd.org/sshd.8 sshd(8)] will make a log entry when access is attempted using a revoked key. The entry will be the same whether a plaintext list of public keys is used or if a binary Key Revocation List (KRL) has been generated. If password authentication is allowed, and the user tries it, then after the key authentication fails there will be a record of password authentication. <syntaxhighlight lang="text"> Mar 14 20:36:40 server sshd-session[29235]: error: Authentication key RSA SHA256:jXEPmu4thnubqPUDcKDs31MOVLQJH6FfF1XSGT748jQ revoked by file /etc/ssh/ssh_revoked_keys ... Mar 14 20:36:45 server sshd-session[29235]: Accepted password for fred from 192.0.2.10 port 59967 ssh2 </syntaxhighlight> If password authentication is not allowed, [http://man.openbsd.org/sshd.8 sshd(8)] will close the connection as soon as the key fails. <syntaxhighlight lang="text"> Mar 14 20:38:27 server sshd-session[29163]: error: Authentication key RSA SHA256:jXEPmu4thnubqPUDcKDs31MOVLQJH6FfF1XSGT748jQ revoked by file /etc/ssh/ssh_revoked_keys ... </syntaxhighlight> The account trying the revoked key remains a mystery though. So it will be necessary to try to look up the key by its fingerprint from your archive of old keys using <code>ssh-keygen -lf</code> and read the key's comments. Although if a valid account cancels the connection without trying a password after the key attempt fails, the usual message will still be posted to the log and that will show the login name. <syntaxhighlight lang="text"> Mar 14 20:44:04 server sshd-session[14352]: Connection closed by authenticating user fred 192.0.2.237 port 55051 [preauth] ... </syntaxhighlight> That may be enough to provide some clue and allow a bit of log filtering with a short AWK script, if the messages are all in the same log file. <syntaxhighlight lang="shell-session"> $ awk '/revoked by file/ { pid[$5]++; key[$5]=$9; hash[$5]=$10; next; } pid[$5] && /closed by authenticating user/ { print key[$5], hash[$5], $10, $11; delete key[$5]; delete hash[$5]; delete pid[$5]; }' /var/log/authlog </syntaxhighlight> Similarly, if the client makes no attempt at logging in and just times out, the message will say just that. <syntaxhighlight lang="text"> Mar 18 21:40:25 server sshd[9942]: fatal: Timeout before authentication for connection from 198.51.100.236 to 203.0.113.75, pid = 67611 ... </syntaxhighlight> On the client side, no warning or error will be given if a revoked key is tried. It will just fail and the next key or method will be tried. ===Brute force and Hail Mary attacks=== It’s fairly common to see failed login attempts almost as soon as the server is connected to the net. Brute force attacks, where one machine hammers on a few accounts trying to find a valid password, are becoming rare. In part this is because packet filters, like NFables for Linux and PF for the BSDs, can limit the number and rate of connection attempts from a single host. The server configuration directive '''MaxStartups''' can limit the number of simultaneous, unauthenticated connections. <syntaxhighlight lang="text"> ... Apr 4 16:45:34 server sshd-session[96275]: Failed password for root from 103.42.56.121 port 48294 ssh2 ... Apr 4 16:46:58 server sshd-session[96275]: Failed password for root from 103.42.56.121 port 48294 ssh2 ... Apr 4 16:47:04 server sshd-session[96275]: Failed password for root from 103.42.56.121 port 48294 ssh2 Apr 4 16:47:05 server sshd-session[96275]: Connection closed by authenticating user root 103.42.56.121 port 48294 [preauth] ... </syntaxhighlight> Prior to 9.8, it was slightly different: <syntaxhighlight lang="text"> ... Mar 18 18:54:44 server sshd[54939]: Failed password for root from 201.179.249.231 port 52404 ssh2 Mar 18 18:54:48 server sshd[54939]: Failed password for root from 201.179.249.231 port 52404 ssh2 Mar 18 18:54:49 server sshd[54939]: Failed password for root from 201.179.249.231 port 52404 ssh2 Mar 18 18:54:49 server sshd[54939]: error: maximum authentication attempts exceeded for root from 201.179.249.231 port 52404 ssh2 [preauth] Mar 18 18:54:49 server sshd[54939]: Disconnecting authenticating user root 201.179.249.231 port 52404: Too many authentication failures [preauth] ... </syntaxhighlight> Note the "authenticating user" is present in the logs from OpenSSH 7.5 and onward when a valid user name is attempted. When an invalid user name is attempted, that is written too. <syntaxhighlight lang="text"> ... Apr 3 10:25:59 server sshd-session[78513]: Invalid user ad1tz from 103.42.56.121 port 55778 Apr 3 10:26:00 server sshd-session[78513]: Received disconnect from 103.42.56.121 port 55778:11: Bye Bye [preauth] Apr 3 10:26:00 server sshd-session[78513]: Disconnected from invalid user ad1tz 103.42.56.121 port 55778 [preauth] ... </syntaxhighlight> Again, in versions prior to 9.8, the process name is different as is the closing message. <syntaxhighlight lang="text"> ... Mar 18 18:55:05 server sshd[38594]: Invalid user ubnt from 201.179.249.231 port 52471 Mar 18 18:55:05 server sshd[38594]: Failed password for invalid user ubnt from 201.179.249.231 port 52471 ssh2 Mar 18 18:55:09 server sshd[38594]: error: maximum authentication attempts exceeded for invalid user ubnt from 201.179.249.231 port 52471 ssh2 [preauth] Mar 18 18:55:09 server sshd[38594]: Disconnecting invalid user ubnt 201.179.249.231 port 52471: Too many authentication failures [preauth] ... </syntaxhighlight> The way to deal with brute force attacks coming from a single machine or network is to customize the server host’s packet filter to limit the attacks or even temporarily block machines that overload the maximum number or rate of connections. Optionally, one should also contact the attacker’s net block owner with the IP address and exact date and time of the attacks. A kind of attack common at the time of this writing is one which is distributed over a large number of compromised machines, each playing only a small role in attacking the server. To deal with Hail Mary attacks, contact the attacker’s net block owner. A form letter with a cut-and-paste excerpt from the log is enough if it gives the exact times and addresses. Alternately, teams of network or system administrators can work to pool data to identify and blacklist the compromised hosts participating in the attack. ====Failed None For Invalid User==== The SSH protocol specifies a number of possible authentication methods<ref name="rfc_4252">{{cite web | url =https://datatracker.ietf.org/doc/html/rfc4252#section-5.2 | title=RFC 4252: The Secure Shell (SSH) Authentication Protocol | date=2006 | publisher=IETF | access-date=2021-08-10 }}</ref>. The methods <code>password</code>, <code>keyboard-interactive</code>, and <code>publickey</code> are fairly common. A lesser known authentication method is <code>none</code>, which will only succeed if the server requires no further authentication such as if '''PermitEmptyPassword''' is set and the account does not actually have a password<ref name="failed_none">{{cite mailing list | url=https://marc.info/?l=openbsd-misc&m=162858437916966&w=2 | last=Tucker | first=Darren | mailing-list=OpenBSD-Misc | date=2021-08-10 | accessdate=2021-08-10 | title=Re: ssh authlog: Failed none for invalid user | publisher=OpenBSD}}</ref>. Some SSH clients including OpenSSH's start by asking for <code>none</code> authentication and then use the list of remaining possible authentication methods to decide what to do next if that doesn't work. <syntaxhighlight lang="text"> ... Aug 10 19:09:05 server sshd[93126]: Failed none for invalid user admin from 125.64.94.136 port 27586 ssh2 ... </syntaxhighlight> So in other words, that is a brute force attack trying the <code>none</code> authentication method. It is an attack which will only get into accounts which have been explicitly set with an empty password and furthermore have also been set up specifically to allow access by having both the authentication method of <code>none</code> and the '''PermitEmptyPasswords''' configuration directive enabled on the server. Most brute force attacks try only <code>password</code> authentication, and some of those even check for the <code>password</code> method and then give up if it is not available. Other attackers may just hammer away pointlessly even if the method is not available. ===Connections Seemingly From 127.0.0.1, ::1, or Other localhost Addresses=== When the SSH server is accessed via a reverse tunnel to another machine, the incoming connections will appear to be from the ''localhost'' address, which is usually ''127.0.0.1'' or ''::1''. <syntaxhighlight lang="text"> Mar 23 14:16:16 server sshd[9265]: Accepted password for fred from 127.0.0.1 port 40426 ssh2 </syntaxhighlight> If the port at the other end of the reverse tunnel is publicly accessible, it will be probed and possibly attacked. Because of the reverse tunnel, the attacks will then also appear to be coming from the server's own loopback address: <syntaxhighlight lang="text"> Mar 23 14:20:17 server sshd-session[5613]: Invalid user cloud from ::1 port 57404 Mar 23 14:20:21 server sshd-session[5613]: Failed password for invalid user cloud from ::1 port 57404 ssh2 Mar 23 14:20:26 server sshd-session[5613]: Failed password for invalid user cloud from ::1 port 57404 ssh2 Mar 23 14:20:35 server sshd-session[5613]: Connection closed by invalid user cloud ::1 port 57404 [preauth] </syntaxhighlight> Like in the other examples, the disconnection message was different prior to 9.8: <syntaxhighlight lang="text"> ... Mar 23 14:20:32 server sshd[5613]: Failed password for invalid user cloud from ::1 port 57404 ssh2 Mar 23 14:20:35 server sshd[5613]: Connection closed by invalid user cloud ::1 port 57404 [preauth] ... </syntaxhighlight> Therefore the usual countermeasures like SSHGuard or Fail2Ban or other similar intrusion detection systems cannot be used because the ''localhost'' address is used by the tunnel for all login attempts, regardless of their real origins. A partial solution would be to bind the incoming connections to a different IP address. The loopback interface would need an additional permanent address, an alias, for that. That alias could then be assigned when establishing the reverse tunnel: <syntaxhighlight lang="shell-session"> $ ssh -R 2022:127.2.2.1:22 fred@vps.example.org </syntaxhighlight> Thus it would designate the source address for all logins coming in over that tunnel. So, in that way, the alias would then show up in the logs instead of the default loopback address when that reverse tunnel is used: <syntaxhighlight lang="text"> Mar 23 18:00:13 server sshd-session[8525]: Invalid user cloud from 127.2.2.1 port 17271 Mar 23 18:00:15 server sshd-session[8525]: Failed password for invalid user cloud from 127.2.2.1 port 17271 ssh2 Mar 23 18:00:19 server sshd-sesssion[8525]: Failed password for invalid user cloud from 127.2.2.1 port 17271 ssh2 Mar 23 18:01:23 server sshd-session[8525]: Failed password for invalid user cloud from 127.2.2.1 port 17271 ssh2 Mar 23 18:01:26 server sshd-session[8525]: Connection closed by invalid user cloud 127.2.2.1 port 17271 [preauth] </syntaxhighlight> If the ports do not need to be available to the open Internet, a full solution would be just to ensure that they are not accessible from the outside. This would be done by not using the '''-g''' option on the client when making the reverse tunnel or else by setting the '''GatewayPorts''' directive in [http://man.openbsd.org/sshd_config.5 sshd_config(5)] back to the default of '''no''', or both. The system's built-in packet filter can also be used. Then, even with the forwarded ports closed off from the outside, the '''ProxyJump''' option can still be used to skip through the jump host and use the setup for SSH access. However, since it is sometimes necessary that these ports be accessible to the outside world, this approach is not always an option. ==Client Logging== The OpenSSH client normally sends log information to '''stderr'''. The '''-y''' option can be used to send output to the system logs, managed by [http://man.openbsd.org/syslogd.8 syslogd(8)] or something similar. Client log verbosity can be increased or decreased by changing the '''LogLevel''' directive and the log facility changed with the '''SyslogFacility''' directive in [http://man.openbsd.org/ssh_config.5 ssh_config(5)]. Both require use of the '''-y''' run-time option and do nothing without it. Alternatively, instead of using the '''-y''' option, using the '''-E''' option sends log output to a designated file instead of '''stderr'''. Working with the system logs or separate log files are something which can be useful when running [http://man.openbsd.org/ssh.1 ssh(1)] in automated scripts. Below is an example of a connection to an interactive shell with the normal level of client logging: <syntaxhighlight lang="shell-session"> $ ssh -l fred server.example.org fred@server.example.org‘s password: Last login: Thu Jan 27 13:21:57 2011 from 192.168.11.1 </syntaxhighlight> The same connection at the first level of verbosity gives lots of debugging information, 90 lines in all. <syntaxhighlight lang="shell-session"> $ ssh -v -l fred server.example.org debug1: OpenSSH_10.6, LibreSSL 4.4.0 debug1: Reading configuration data /etc/ssh/ssh_config debug1: no pubkey loaded from /home/fred/.ssh/id_rsa debug1: identity file /home/fred/.ssh/id_rsa type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_rsa debug1: no pubkey loaded from /home/fred/.ssh/id_ecdsa debug1: identity file /home/fred/.ssh/id_ecdsa type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_ecdsa debug1: no pubkey loaded from /home/fred/.ssh/id_ecdsa_sk debug1: identity file /home/fred/.ssh/id_ecdsa_sk type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_ecdsa_sk debug1: no pubkey loaded from /home/fred/.ssh/id_ed25519 debug1: identity file /home/fred/.ssh/id_ed25519 type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_ed25519 debug1: no pubkey loaded from /home/fred/.ssh/id_ed25519_sk debug1: identity file /home/fred/.ssh/id_ed25519_sk type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_ed25519_sk debug1: no pubkey loaded from /home/fred/.ssh/id_mldsa44_ed25519 debug1: identity file /home/fred/.ssh/id_mldsa44_ed25519 type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_mldsa44_ed25519 debug1: Connecting to server.example.org [198.51.100.20] port 22. debug1: Connection established. debug1: Local version string SSH-2.0-OpenSSH_10.6 debug1: Remote protocol version 2.0, remote software version OpenSSH_10.6 debug1: compat_banner: match: OpenSSH_10.6 pat OpenSSH* compat 0x04000000 debug1: Authenticating to server.example.org:22 as 'fred' debug1: load_hostkeys: fopen /home/fred/.ssh/known_hosts2: No such file or directory debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT received debug1: kex: algorithm: mlkem768x25519-sha256 debug1: kex: host key algorithm: ssh-ed25519 debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none debug1: expecting SSH2_MSG_KEX_ECDH_REPLY debug1: SSH2_MSG_KEX_ECDH_REPLY received debug1: Server host key: ssh-ed25519 SHA256:agRZDZn8awhQ+tc19Ip/whkHoV33Ln2REO7v1kcYbdU debug1: load_hostkeys: fopen /home/fred/.ssh/known_hosts2: No such file or directory debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory debug1: Host 'server.example.org' is known and matches the ED25519 host key. debug1: Found key in /home/fred/.ssh/known_hosts:1 debug1: ssh_packet_send2_wrapped: resetting send seqnr 3 debug1: rekey out after 134217728 blocks debug1: SSH2_MSG_NEWKEYS sent debug1: Sending SSH2_MSG_EXT_INFO debug1: expecting SSH2_MSG_NEWKEYS debug1: ssh_packet_read_poll2: resetting read seqnr 3 debug1: SSH2_MSG_NEWKEYS received debug1: rekey in after 134217728 blocks debug1: SSH2_MSG_EXT_INFO received debug1: kex_ext_info_client_parse: server-sig-algs=<ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ssh-ed25519@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com,rsa-sha2-512,rsa-sha2-256,ssh-mldsa44-ed25519,webauthn-sk-ecdsa-sha2-nistp256@openssh.com> debug1: kex_ext_info_check_ver: publickey-hostbound@openssh.com=<0> debug1: kex_ext_info_check_ver: ping@openssh.com=<0> debug1: kex_ext_info_check_ver: agent-forward=<0> debug1: SSH2_MSG_SERVICE_ACCEPT received debug1: SSH2_MSG_EXT_INFO received debug1: kex_ext_info_client_parse: server-sig-algs=<ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ssh-ed25519@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com,rsa-sha2-512,rsa-sha2-256,ssh-mldsa44-ed25519,webauthn-sk-ecdsa-sha2-nistp256@openssh.com> debug1: Authentications that can continue: publickey,password,keyboard-interactive debug1: Next authentication method: publickey debug1: Will attempt key: /home/fred/.ssh/id_rsa debug1: Will attempt key: /home/fred/.ssh/id_ecdsa debug1: Will attempt key: /home/fred/.ssh/id_ecdsa_sk debug1: Will attempt key: /home/fred/.ssh/id_ed25519 debug1: Will attempt key: /home/fred/.ssh/id_ed25519_sk debug1: Will attempt key: /home/fred/.ssh/id_mldsa44_ed25519 debug1: Trying private key: /home/fred/.ssh/id_rsa debug1: Trying private key: /home/fred/.ssh/id_ecdsa debug1: Trying private key: /home/fred/.ssh/id_ecdsa_sk debug1: Trying private key: /home/fred/.ssh/id_ed25519 debug1: Trying private key: /home/fred/.ssh/id_ed25519_sk debug1: Trying private key: /home/fred/.ssh/id_mldsa44_ed25519 debug1: Next authentication method: keyboard-interactive debug1: Authentications that can continue: publickey,password,keyboard-interactive debug1: Next authentication method: password Authenticated to server.example.org ([198.51.100.20]:22) using "password". debug1: channel 0: new session [client-session] (inactive timeout: 0.000000) debug1: Requesting no-more-sessions@openssh.com debug1: Entering interactive session. debug1: pledge: filesystem debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0 debug1: client_input_hostkeys: searching /home/fred/.ssh/known_hosts for server.example.org / (none) debug1: client_input_hostkeys: searching /home/fred/.ssh/known_hosts2 for server.example.org / (none) debug1: client_input_hostkeys: hostkeys file /home/fred/.ssh/known_hosts2 does not exist debug1: client_input_hostkeys: no new or deprecated keys from server debug1: pledge: fork debug1: client_input_channel_req: channel 0 rtype keepalive@openssh.com reply 1 debug1: client_input_channel_req: channel 0 rtype keepalive@openssh.com reply 1 debug1: client_input_channel_req: channel 0 rtype keepalive@openssh.com reply 1 Last login: Sat Mar 14 21:31:33 2015 from 192.0.2.111 ... </syntaxhighlight> The same login with the maximum of verbosity, '''-vvv''', gives around 239 lines of debugging information. The following will save the debugging information separately in a file, '''ssh-client.log''', in the home directory. <syntaxhighlight lang="shell-session"> $ ssh -vvv -E ~/ssh-client.log -l fred somehost.example.org </syntaxhighlight> ===Capturing Client Debugging Information Together with the Session Contents=== Regular pipes and redirects work only with '''stdout''' so that if '''-E''' is not used to capture debugging output the output on '''stderr''' must instead be sent to '''stdout''' if one is going to capture it at the same time as the actual session. That is done with an extra redirect, '''2>&amp;1''' to capture '''stderr'''. Mind the spaces, or lack of them. The following will capture both the session text and the debugging information to a file, '''ssh-client.log''', in the home directory: <syntaxhighlight lang="shell-session"> $ ssh -vvv -l fred somehost.example.org 2>&1 | tee ~/ssh-output.log </syntaxhighlight> The tool [http://man.openbsd.org/tee.1 tee(1)] is like a T-pipe and sends output two directions, one to '''stdout''' and one to a file. ===Changing Client Debugging Levels At Runtime or On The Fly=== At run-time, when establishing a new connection, just use the '''-v''' option. <syntaxhighlight lang="shell-session"> $ sftp -v -o "IdentityFile=~/.ssh/weblog.key_ed25519" fred@server.example.org </syntaxhighlight> The debugging verbosity on the client can be increased just like on the server. <syntaxhighlight lang="shell-session"> $ sftp -vvv -o "IdentityFile=~/.ssh/weblog.key_ed25519" fred@server.example.org </syntaxhighlight> The extra information can be useful to see exactly what is being sent to or requested of the server. After the fact, once a connection is established, the escape sequences '''~v''' and '''~V''' can be used to increase or decrease, respectively, the verbosity on the fly. Through them it is possible to change the verbosity of the client in an established connection. When increasing the log level with '''~v''', the client raises its log level to VERBOSE, DEBUG, DEBUG2, and DEBUG3, in that order, if starting from the default of INFO. Conversely, when lowering the log level with '''~V''', the client will descend through ERROR, FATAL, to QUIET if starting from the default of INFO. ==Debugging and Troubleshooting== The server logs are your best friend when troubleshooting. It may be necessary to turn up the log level there temporarily to get more information. It is then also necessary to turn them back to normal after things are fixed to avoid privacy problems or excessively use of disk space. For example, the SFTP-subsystem logging defaults to ERROR, reporting only errors. To track transactions made by the client, change the log level to INFO or VERBOSE: <syntaxhighlight lang="apache" line="1"> Subsystem internal-sftp -l INFO </syntaxhighlight> Caution. Again, operating with elevated logging levels would violate the privacy of users, in addition to filling a lot of disk space. Elevated logging levels should generally not be used in production once the changes are figured out. Even then, the elevated log messages should really be sent to a separate log file during the time they are being collected. By default, some systems send only the normal messages to the regular system log files and ignore the elevated messages. Some save all the messages by default. If the elevated system log messages are not showing up in any of the system logs, that may be the reason. Either way, check the system log configurations and make sure that the extra messages are only sent to a separate log file and not mixed in with the regular system logs. Change the configuration to do that, if necessary. Separating the extra messaging helps keep the logs tidy as well as protecting privacy. The system log settings are found in the system log daemon's configuration file, the exact name of which will vary depending on what is installed, but common ones are [https://man.openbsd.org/syslog.conf.5 syslog.conf(5)] and rsyslog.conf(5). Notice that the configuration below has the all messages including the more detailed VERBOSE, and on up through DEBUG3, messages for the AUTH facility going to a separate log file from the regular AUTH messages: <syntaxhighlight lang="shell-session"> $ grep '^auth\.' /etc/syslog.conf auth.info /var/log/authlog auth.* /var/log/authdebug </syntaxhighlight> See [https://man.openbsd.org/syslog.3 syslog(3)] for the log facilities and log levels. It is best to limit the time the debugging information is collected to be as short as possible and to actively watch the logs while the extra information is being collected. However, if the more verbose logging is running for any length of time, and especially if it is left unattended even for a short while, be sure to remember to add the new log file to the log rotation schedule so that it cannot fill up the partition. Note, logs might be handled by other services on some systems. Check with the official documentation for your system to be sure. On the client side, '''Match''' blocks can help further by setting log levels for specific situations and avoid a situation where everything is logged intensely. The manual pages for OpenSSH are very well written and many times problems can be solved by finding the right section within the right manual page. At the very minimum, it is important to skim through the four main manual pages for both the programs and their configuration to become familiar with at least the section headings. * [http://man.openbsd.org/ssh.1 ssh(1)] * [http://man.openbsd.org/ssh_config.5 ssh_config(5)] * [http://man.openbsd.org/sshd.5 sshd(8)] * [http://man.openbsd.org/sshd_config.5 sshd_config(5)] Once the right section is found in the manual page, read it in detail and become familiar with its contents. The same goes for the other OpenSSH manual pages, depending on the activity. Be sure to use the version(s) of OpenSSH actually in use on your system(s) with their corresponding manual pages. When possible, use those that are installed on your system so as to avoid a mismatch. In some cases, the client and the server will be of different versions, so the manual pages for each must be looked up separately. It is also a good idea to review OpenSSH's release notes when a new version is published. With a few exceptions below, specific examples of troubleshooting are usually given in the cookbook section relevant to a particular activity. So, for example, sorting problems with authentication keys is done in the section on [[OpenSSH/Cookbook/Authentication_Keys|Public Key Authentication]] itself. ===Debugging a script, configuration or key that uses sudo(8)=== Usually log levels only need to be changed when writing and testing a script, a new configuration, some new keys, or all three at once. When working with '''sudo(8)''', it is especially important to see exactly what the client is sending so as to enter the right pattern into '''/etc/sudoers''' for safety. Using the lowest level of verbosity, the exact string being sent by the client to the remote server is shown in the debugging output: <syntaxhighlight lang="shell-session"> $ rsync -e "ssh -v -i /home/webmaint/.ssh/bkup_key -l webmaint" \ -a server.example.org:/var/www/ var/backup/www/ ... debug1: Sending command: rsync --server --sender -logDtpre.iLsfxCIvu . /var/www/ ... </syntaxhighlight> What '''sudoers''' then needs is something like the following, assuming account 'webmaint' is in the group 'webmasters': <syntaxhighlight lang="apache" line="1"> %webmasters ALL=(ALL) NOPASSWD: /usr/local/bin/rsync --server \ --sender -logDtpre.iLsfxCIvu . /var/www/ </syntaxhighlight> The same method can be used to debug new server configurations or key logins. Once things are set to run as needed, the log level settings can be lowered back to INFO for [http://man.openbsd.org/sshd.8 sshd(8)] and to ERROR for '''internal-sftp'''. Additionally, once the script is left to run in fully automated mode, the client logging information can be set use the [http://man.openbsd.org/syslog.3 syslog(3)] system module instead of '''stderr''' by using the '''-y''' option when [http://man.openbsd.org/ssh ssh(1)] is launched. ===Debugging a server configuration=== Running the server in debug mode provides a lot of information about the connection and a smaller amount about the server configuration. The server's debugging level ('''-d''') can be raised once, twice ('''-dd''') or thrice ('''-ddd'''). <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -d </syntaxhighlight> Note that in this case the server does not detach and become a daemon, so it will terminate when the SSH connection terminates. The advantage is this collects the logs for one single session and only that session. The server must be started again in order to make a subsequent connection from the client. Though in some ways this is a hassle, it does make sure that session data is a unique set and not mixes of multiple sessions and thus possibly different configurations. Alternately, another option ('''-e''') when debugging sends the debugging data to '''stderr''' instead in order to keep the system logs clean. It is also possible to log the debugging data from the system logs directly to a separate file and keep noise out of the system logs. Since OpenSSH 6.3, the option '''-E''' will append the debug data to a particular log file instead of sending it to the system log. This facilitates debugging live systems without cluttering the system logs. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -E /home/fred/sshd.debug.log -d </syntaxhighlight> In really old versions of OpenSSH, which are hopefully no longer in production, if you need to save output to a file while still viewing it live on the screen, you can use '''tee(1)'''. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -ddd 2>&1 | tee /tmp/foo </syntaxhighlight> That will save output to the file ''foo'' by redirecting to '''stdout''' what [http://man.openbsd.org/sshd.8 sshd(8)] sent to '''stderr''' and saving it to a file. This works with really old versions of OpenSSH, but the '''-E''' option above is preferable. If the server is remote and it is important to reduce the risk of getting locked out, the experiments on the configuration file can be done with a second instance of [http://man.openbsd.org/sshd.8 sshd(8)] using a separate configuration file and listening to a high port until the settings have been tested. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -dd -p 22222 -f /home/fred/sshd_config.test </syntaxhighlight> If the OpenSSH server's configuration file is set to listen on odd ports or more than one port using the '''ListenAddress''' directive, then that can also be overriden so that the server listens on the extra port. <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -o 'ListenAddress 0.0.0.0:22222' -dd \ -f /home/fred/sshd_config.test </syntaxhighlight> It is also possible to make an extended test ('''-T''') of the configuration file first. If there is a syntax error, it will be reported, but remember that even sound configurations can still lock you out. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -T | sort | less -X </syntaxhighlight> The extended test mode can be used by itself, but it is also possible to specify custom parameters to use with '''-C''' to see what happens with specific kinds of connections. [http://man.openbsd.org/sshd.8 sshd(8)] will the connection. It will then process the configuration file in light of the parameters passed to it and return output with the modified results. This is good for showing the results of any '''Match''' directives which might apply to the session. The variables ''user'', ''host'', and ''addr'' are the minimum required when passing specific connection parameters to [http://man.openbsd.org/sshd.8 sshd(8)] for evaluation with the '''-C''' option . The following options will print out the configurations that will be applied when the user ''fred'' tries to log in to the host ''server.example.org'' from the address ''192.0.2.15'': <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -T -C user=fred,host=server.example.org,addr=192.0.2.15 </syntaxhighlight> Two more parameters, ''laddr'' and ''lport'', may also be passed. They refer to the server's IP number and port connected to. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -T -C user=fred,host=server.example.org,addr=192.0.2.15,laddr=192.0.2.2,lport=2222 </syntaxhighlight> And lastly, there is a parameter ''rdomain'' to specify the routing domain or routing table to try. Between those six variables it should be possible to describe any possible incoming connection. ====Adding Timestamps to Server Debugging Output==== The '''-d''' option increases the value for '''LogLevel''' but does not prepend any timestamps to the server's output. Timestamps can nevertheless be added on the fly by writing the debug logs to '''stderr''' using the '''-e''' option, redirecting '''stderr''' to '''stdout''', and then piping that into [https://man.openbsd.org/ts ts(1)], a timestamping utility. <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -p 2222 -e -d 2>&1 | ts "%.T" | tee /tmp/sshd.log </syntaxhighlight> That will show the time, including microseconds. Mind the dot there before the letter 'T'. The options '''-i''' and '''-s''' for [https://man.openbsd.org/ts ts(1)] can be relevant, too. The '''-i''' option will measure the relative time between the timestamps themselves. The '''-s''' option will show the time elapsed since the start of the program. Other custom date and time formats can be specified as per [https://man.openbsd.org/strftime strftime(3)], if needed. When [https://man.openbsd.org/ts ts(1)] is not already present it can usually be added via the moreutils package. Although some systems, such as OpenBSD, include it in the base system. If it is not already installed and not available for installation, then Perl can be used on POSIX systems to prepend a timestamp to '''stdin''': <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -p 2222 -e -d 2>&1 \ | perl -p -e 'use POSIX strftime; print strftime("%F %T ", localtime)' \ | tee /tmp/sshd.log </syntaxhighlight> However, that only provides an accuracy of whole seconds. If more precision is needed, then Python3 can provide timestamps with precision down to the microsecond. <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -p 2222 -e -d 2>&1 \ | python -c 'import datetime; import sys; [print (datetime.datetime.now(), flush=True) for line in sys.stdin]' \ | tee /tmp/sshd.log </syntaxhighlight> Note that the Python approach requires explicitly setting the buffer to flush automatically. Some non-POSIX shells can make use of [https://mywiki.wooledge.org/ProcessSubstitution process substitution] to pipe '''stderr''' output into another program. <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -p 2222 -e -d 2> >(ts) | tee /tmp/sshd.log | less -X </syntaxhighlight> There are even fancier approaches using IO redirection on extra file descriptors, but those are far outside the scope of this book. ===Debugging a client configuration=== Sometimes when debugging a server configuration it is necessary to track the client configurations settings, as well. Since OpenSSH 6.8, the '''-G''' option makes [http://man.openbsd.org/ssh.1 ssh(1)] print its configuration after evaluating any '''Host''' and '''Match''' blocks and then exit without connecting. That allows viewing of the exact configuration options which will actually be used by the client for a particular session. <syntaxhighlight lang="shell-session"> $ ssh -G -l fred server.example.org | sort </syntaxhighlight> Client configuration is determined in three ways. The first is by run-time options, then by the account's own configuration file, or lastly the system-wide client configuration file. The priority is in that order. Whichever value is found first gets used. With [http://man.openbsd.org/sftp.1 sftp(1)] the options are also passed to [http://man.openbsd.org/ssh.1 ssh(1)]. ====Invalid or Outdated Ciphers or MACs==== A proper client will show the details of the failure. For a bad Message Authentication Code (MAC), a proper client might show something like the following when trying to foist a bad MAC like hmac-md5-96 onto the server: <syntaxhighlight lang="text"> no matching mac found: client hmac-md5-96 server umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1 </syntaxhighlight> And for a bad cipher, a proper client might show something like this when trying to foist an arcfour cipher on the server: <syntaxhighlight lang="text"> no matching cipher found: client arcfour server chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com </syntaxhighlight> Sometimes when troubleshooting a problem with the client it is necessary to turn to the server logs. In [https://www.openssh.org/txt/release-6.7 OpenSSH 6.7 unsafe MACs were removed] and in [https://www.openssh.org/txt/release-7.2 OpenSSH 7.2 unsafe ciphers were removed], but some third-party clients may still try to use them to establish a connection. In that case, the client might not provide much information beyond a vague message that the server unexpectedly closed the network connection. The server logs will, however, show what happened: <syntaxhighlight lang="text"> fatal: no matching mac found: client hmac-sha1,hmac-sha1-96,hmac-md5 server hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160 [preauth] </syntaxhighlight> More recent versions would show a simpler error for a bad MAC. <syntaxhighlight lang="text"> fatal: Unable to negotiate with 192.0.2.37 port 55044: no matching MAC found. Their offer: hmac-md5-96 [preauth] </syntaxhighlight> A bad cipher would be reported like this: <syntaxhighlight lang="text"> fatal: Unable to negotiate with 192.0.2.37 port 55046: no matching cipher found. Their offer: arcfour [preauth] </syntaxhighlight> The error message in the server log might not say which MACs or ciphers are actually available. For those, the extended test mode can be used to show the server settings and, in particular, the MACs or ciphers allowed. In its most basic usage the extended test mode would just be '''-T''', as in <code>/usr/sbin/sshd -T | grep -E 'cipher|macs'</code> with no other options. For more details and options, see the previous section on "Debugging a server configuration" above. One solution there is to upgrade the client to one that can handle the right ciphers and MACs. Another option is to switch to a different client, one that can handle the modern ciphers or MACs. See also the configuration directive '''WarnWeakCrypto''' in the manual page. It has been around since 10.1. The default for '''WarnWeakCrypto''' is 'yes'. ===Debugging Key-Based Authentication=== The most common causes of failure for public key authentication seem to be for either of two reasons: * Mangling the public key on the way to getting it into '''authorized_keys''' on the server * Incorrect permissions for the files and directories involved, ether on the client or the server. These are the directory for the keys, usually '''~/.ssh/''', or its parent directories, or the '''authorized_keys''' file, or the private key itself. As of the time of this writing, it looks like pretty much every failure of key-based authentication described on mailing lists and forums is solved by addressing either or both of those two situations. So, when encountering the error message ''Permission denied (publickey,keyboard-interactive)'', or similar, see the section on [[OpenSSH/Cookbook/Public Key Authentication|Public Key Authentication]]. Also be sure to read the manual page for [http://man.openbsd.org/sshd.8 sshd(8)] and its section on authorized keys. Usually, though not always, it will be obvious when the private key's permissions are incorrect: <syntaxhighlight lang="shell-session"> $ ssh -i ~/.ssh/fred-193.ed25519 fred@192.0.2.193 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0664 for '/home/fred/.ssh/fred-193.ed25519' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. Load key "/home/fred/.ssh/fred-193.ed25519": bad permissions </syntaxhighlight> In addition mangled public keys in the authorized keys file and to incorrect permissions, a very rare third case is if the public and private key files don't match and are not from the same key pair. As mentioned in the section on [[OpenSSH/Cookbook/Public Key Authentication|Public Key Authentication]], the public and private keys need to be parts of the same key pair so that they match. That is because even before the SSH client uses private key cryptographically, it looks at the file name of the proposed private key and then sends the public key matching that same name, if it exists, to the server. If that public key does not match the public key on the server in '''authorized_keys''' then the connection will be denied with the error ''Permission denied (publickey,keyboard-interactive)'' or similar. That alone is a very good reason to give unique descriptive file names when creating keys. Note that as mentioned above there are usually other causes to that same error message besides having mismanaged the public key file on the client machine. The file names for both parts of each key pair have to be kept synchronized so that the names match. As for a solution, the way out in the long term is to stay organized and carefully manage the keys and their file names. It can be solved on the short term by deleting the offending ''public'' key file and then using the private key to regenerate a new one, replacing the incorrect public key under that name. Again, this is an unusual edge case and not a common cause of that error. ====SSH Too Many Authentication Failures==== When there are multiple keys in the authentication agent, the client will try them against the server in the same order in which they were added to the agent. However, on odd or older agents they are returned in an unpredictable order. Newer versions allow the client to query the server to see if a particular key is acceptable. This is set by the '''PubkeyAuthOptions''' and is counted separately from the '''MaxAuthTries''' directive. When the former are used up, then the additional tries count against the latter. Either way, if the client happens to cycle through enough of the wrong keys first and hits the server's '''MaxAuthTries''' limit before finding the right key, the server will naturally break off the connection with an error message on the server about too many authentication failures: <syntaxhighlight lang="text"> Disconnecting authenticating user fred 203.0.113.110 port 35893: Too many authentication failures [preauth] </syntaxhighlight> Or in earlier versions: <syntaxhighlight lang="text"> "Received disconnect from 203.0.113.110 port 22:2: Too many authentication failures Authentication failed." </syntaxhighlight> When that happens, the client side will show this error: <syntaxhighlight lang="text"> Received disconnect from server.example.org port 22:2: Too many authentication failures Disconnected from server.example.org port 22 </syntaxhighlight> With increased verbosity, the specific keys tested and rejected will also be shown by the client. Newer clients will include the key's comment, if available, and not just the fingerprint. The keys get tried first from the agent in the order in which they were loaded into the agent, then from : <syntaxhighlight lang="shell-session"> $ ssh -v 203.0.113.110 . . . hdebug1: Offering public key: a key for fred ED25519 SHA256:7e5qkSHxSp8xitlM4JP4dOeCdnQn Vt9q6GPaB0+IrSM agent debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering public key: fred's key ED25519 SHA256:8U7Fy6nJxbxfAu0K8WXZV0WN80t/ 4lb/f9bqObw0isE agent debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering public key: one more comment ED25519 SHA256:F61Sx2t4BmoHASuMCVrBd8C30A7S QdGPwgfb7ZGWZf0 agent debug1: Authentications that a publickey,keyboard-interactive debug1: Offering public key: fred@desk.example.org ED25519 SHA256:TMfO5S6oBQ0Cu273yPp9+7carGP926kRfg6iS435cmU agent debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering public key: yet one more key ED25519 SHA256:36tMBWe4kX9hyVLZaxyjm2pp1TMFbRw0+O1xWOU5Fgk agent debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering public key: the last straw ED25519 SHA256:gNZd1TF48UgEUgoYFNXop9tEhO53If1qiDqZyKbRT4U agent Received disconnect from 203.0.113.110 port 2222:2: Too many authentication failures Disconnected from 203.0.113.110 port 2222 </syntaxhighlight> Each key in the agent also gets an annotation which says whether or not the key file was supplied by the user, either in the configuration file or as a run-time argument. For the former, it will marked with 'agent' and for the latter two as 'explicit'. The client prefers keys that are currently in the agent in the order in which they were added to the agent. Then it will try the one(s) added via run-time arguments, in the order in which they are supplied. Then, lastly, it will try the one(s) specified in the client configuration file. Or in earlier versions the file name used to load the key will be listed by the client in verbose mode, but the order will be less predictable: <syntaxhighlight lang="shell-session"> $ ssh -v 203.0.113.110 ... debug1: SSH2_MSG_SERVICE_ACCEPT received debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Next authentication method: publickey debug1: Offering RSA public key: /home/fred/.ssh/key.06.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.02.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.03.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.04.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.01.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.05.rsa Received disconnect from port 22:2: Too many authentication failures Authentication failed. </syntaxhighlight> In the older clients, the client prefers keys that were specified in the configuration and are also currently in the agent. Then it will try try them in the order in which they were supplied. [3] <ref name="key_order">{{cite mailing list | url=https://lists.mindrot.org/pipermail/openssh-unix-dev/2019-April/037700.html | title=IdentityFile vs IdentitiesOnly | date=2019-04-01 | accessdate=2019-04-04 | mailinglist=openssh-unix-dev | last=Tucker |first=Darren }}</ref> There are two solutions if you see the ''Too many authentication failures'' error: One way around this error is to remove keys from the agent one at a time using [http://man.openbsd.org/ssh-add.1 ssh-add(1)] with the '''-d''' option until there is just the right key left. Refer to each key by its file system path, for example: <code>ssh-add -d ~/.ssh/some.key.rsa</code> Because the private key to be removed is looked up in the agent based on the corresponding public key both files must exist. Without matching a public key file, the private key cannot be removed individually from the authentication agent. Instead the whole lot may be removed all at once using the '''-D''' option. However, is not always practical to do either when many remote systems are used frequently and the agent needs to be kept well-stocked. This is probably not the most practical way. Another way around this error, and probably the most practical method, is to limit the client to trying only a specific key using the '''IdentitiesOnly''' configuration directive in conjunction with the '''IdentityFile''' configuration directive. The latter points explicitly to the right key. Both can be added either as run-time options or in the client's configuration file. As a runtime option, they can be used like this: <syntaxhighlight lang="shell-session"> $ ssh -o IdentitiesOnly=yes -i ~/.ssh/server14.example.org.rsa -l fred server14.example.org </syntaxhighlight> Those settings can be stored permanently by adding something like the following '''IdentitiesFile''' and '''IdentitiesOnly''' directives to the client configuration file instead. <syntaxhighlight lang="apache" line="1"> Host server14 server14.example.org HostName server14.example.org IdentitiesOnly yes IdentityFile /home/fred/.ssh/server14.example.org.rsa User fred </syntaxhighlight> In that way, the server could be reached with either the short name or the fully qualified domain name, whatever names are listed under the '''Host''' stanza. <syntaxhighlight lang="shell-session"> $ ssh server14 </syntaxhighlight> Remember that options are selected from the client configuration file on a first-match basis. Because the first-match wins, specific rules must come before more general rules in the client configuration file. ====Signing Failed for ... Agent Refused Operation==== As mentioned, incorrect permissions on client files or directories are a common cause of authentication failure when attempting key-based authentication. Not all the errors are clear about that, however. Here is an example of a misleading error message which is actually caused by incorrect permissions: <syntaxhighlight lang="shell-session"> $ ssh -i ~/.ssh/key-ed25519 fred@server.example.org sign_and_send_pubkey: signing failed for ED25519 "/home/fred/.ssh/key-ed25519" from agent: agent refused operation fred@server.example.org: Permission denied (publickey). </syntaxhighlight> The solution for that is to ensure that no other accounts can read or write to the private key. No others should be able to write to the '''.ssh''' directory or its parent either. ===Debugging Chrooted SFTP Accounts=== With chrooted SFTP sessions, the most common problem seems to be bad directory permissions. The chroot directory, and all directories above it, must be owned by root and not writable by any other user or group. Even though these directories' group memberships do not have to be root, if any of them is not root then it must not be group writable either. Failure to use the correct ownership will result in not being able to log in with the affected accounts. The errors when login is attempted can look like this from the client side: <syntaxhighlight lang="shell-session"> $ sftp fred@192.0.2.206 fred@192.0.2.206's password: Connection to 192.0.2.206 closed by remote host. Connection closed. </syntaxhighlight> Older clients will look like this: <syntaxhighlight lang="shell-session"> $ sftp fred@192.0.2.206 fred@192.0.2.206's password: packet_write_wait: Connection to 192.0.2.206: Broken pipe Couldn't read packet: Connection reset by peer </syntaxhighlight> The error message is much clearer on the server side: <syntaxhighlight lang="text"> Aug 4 23:52:38 server sshd[7075]: fatal: bad ownership or modes for chroot directory component "/home/fred/" </syntaxhighlight> Check the directory permissions for the chroot target and all directories above it. If even one is off it must be fixed so that it is owned by root and not writable by any others. There are many, many routes to get there. Here are two was to set up chroot permissions: * One quick way to fix the permissions is to change both ownership and group membership of the directory to root. Same for all directories above the chroot target. <syntaxhighlight lang="shell-session"> $ ls -lhd /home/ /home/fred/ drwxr-xr-x 3 root root 4.0K Aug 4 20:47 /home/ drwxr-xr-x 8 root root 4.0K Aug 4 20:47 /home/fred/ </syntaxhighlight> That will work with the '''ChrootDirectory''' directive set to '''%h''' but has some drawbacks that will quickly become obvious when adding files or directories. * Another easy way to fix the permissions is to change both the account's home directory and the '''ChrootDirectory''' directive. Arrange the account's home directory so that it is under a unique directory owned by root, such as the user name itself: <syntaxhighlight lang="shell-session"> $ ls -lhd /home/ /home/fred/ /home/fred/fred/ drwxr-xr-x 3 root root 4.0K Aug 4 20:47 /home/ drwxr-x--- 3 root fred 4.0K Aug 4 20:47 /home/fred/ drwxr-x--- 8 fred fred 4.0K Aug 4 20:47 /home/fred/fred/ </syntaxhighlight> Then chroot the account to the parent directory and combine that with an alternate starting directory working from the user name token with the '''-d''' option for the SFTP server. <syntaxhighlight lang="apache" line="1"> ChrootDirectory /home/%u ForceCommand internal-sftp -d %u </syntaxhighlight> That way, when the account connects it will see only its own directory and no other parts of the system. ===Debugging RC Scripts Interfering with SFTP Sessions=== Recent versions of the server do not launch either '''/etc/ssh/sshrc''' or '''~/.ssh/rc/''' when initiating an SFTP session. However, on older versions, these scripts will get executed for both SFTP and SSH, if present and the server is configured to run them. Therefore, in older versions one common mistake is when either '''/etc/ssh/sshrc''' or '''~/.ssh/rc''' send anything at all to '''stdout''' instead of being quiet. The SFTP connection will drop when there are any extraneous data either direction on '''stdin''', whether from the client or the server. The reason is that the output to '''stdout''' on the server is received by the client on '''stdin''' but matches no correct protocol and thus causes the client to disconnect with an error. However, even in the case of using the RC scripts, the response from the server must remain 8-bit clean or an error will occur: <syntaxhighlight lang="shell-session"> $ sftp server.example.org Received message too long 1400204832 </syntaxhighlight> That one message will be the main clue. Increasing the verbosity of the SFTP client with '''-v''' won't provide more relevant information. Upgrading [http://man.openbsd.org/sshd.8 sshd(8)] might be a more practical option, when possible. When the RC scripts cause the SFTP client to disconnect, the standard server logs will show only that the client disconnected and not provide any information about why. At higher levels of logging, some extraneous reads and corresponding discards might be noticed but that is all. Below is a log sample recorded at the verbosity DEBUG3 showing such an example. <syntaxhighlight lang="text"> ... debug2: subsystem request for sftp by user fred debug1: subsystem: exec() /usr/libexec/sftp-server Starting session: subsystem 'sftp' for fred from 198.51.100.38 port 37446 id 0 ... debug2: channel 0: read 13 from efd 12 debug3: channel 0: discard efd debug2: channel 0: read 12 from efd 12 debug3: channel 0: discard efd debug2: channel 0: read 15 from efd 12 debug3: channel 0: discard efd debug2: channel 0: read 18 from efd 12 debug3: channel 0: discard efd ... </syntaxhighlight> Again, new versions won't run the RC scripts when connecting for an SFTP session. On older versions, neither RC script is may produce any output on '''stdout''' during use of SFTP or it will ruin the connection. If an RC script does produce output, it must be redirected to a system log, to a file, or sent to '''stderr''' instead of '''stdout'''. Regular interactive SSH connections are not disturbed by use of '''stdout''' and the client will just display whatever is sent. See the manual page for [http://man.openbsd.org/sshd.8 sshd(8)] in the section "SSHRC" for more. The same restriction goes for any other part of the SSH service which runs over '''stdin''' and '''stdout''', such as '''ProxyJump''' or some uses of '''ProxyCommand'''. So another example of potential interference would be when using '''LocalCommand''' with the client to specify a command to execute on the local machine after successfully connecting to the server. Any output from it also needs to be redirected to '''stderr'''. If '''LocalCommand''' ends up interfering with '''ProxyJump''' then the connection will appear to hang at the stage when '''stdout''' gets used. ===Debugging When An SSH Agent Has The Correct Private Key But Does Not Use It=== In older versions of OpenSSH, the public key must also be available on the client at the time the private key is loaded into the agent. If it is not then without the matching public key the agent will not be able to use that private key unless other arrangements are made. A symptom of this is although specifying the key via a run-time argument works, the same key does not work via the agent. Upgrading to a more recent version of OpenSSH is a better option. Otherwise a work-around is to specify the private key either as a run-time argument to the client or in the [http://man.openbsd.org/ssh_config.5 ssh_config(5)] file, from there the client will find the correspondingly named public key file. Importantly the client will still use the key in the agent yet use the designated matching public key file, so the private key file does not have to contain anything at all and could even be empty. <syntaxhighlight lang="shell-session"> $ ssh -i some_key_ed25519 fred@server.example.org </syntaxhighlight> However, if it is undesirable to have the private key accessible on the file system or if the private key is only in the agent and not itself available via the file system, then the public key can be specified explicitly instead. <syntaxhighlight lang="shell-session"> $ ssh -i some_key_ed25519.pub fred@server.example.org </syntaxhighlight> Either way, another approach is to name the key in [http://man.openbsd.org/ssh_config.5 ssh_config(5)] using the '''IdentityFile''' configuration directive. When a public key file is missing, it can easily be regenerated from the private key using [http://man.openbsd.org/ssh-keygen.1 ssh-keygen(1)] with the '''-y''' option. ==SSH Client Error Messages And Common Causes== As rehash of the above, below are some client-side error messages with some of the more common reasons<ref name="troubleshooting">{{cite web | url=https://ittavern.com/ssh-troubleshooting-guide/ | title=SSH Troubleshooting Guide | date=2023-01-17 | publisher=IT Tavern | access-date=2023-01-26 }}</ref> for those messages. Neither list of errors nor the reasons for the errors are comprehensive. The suggestions for causes just touch on one or two of the commonly seen reasons. There is no substitute for checking the actual logs, especially on the server. The server log files are usually '''/var/log/auth.log''' on most system or a variant of that name. Occasionally you will find the information in the file '''/var/log/secure''' instead. '''No address associated with name:''' <syntaxhighlight lang="shell-session"> $ ssh nonesuch.example.org ssh: Could not resolve hostname nonesuch.example.org: no address associated with name </syntaxhighlight> The destination's host name does not exist in DNS. Was it spelled correctly? '''Operation timed out:''' <syntaxhighlight lang="shell-session"> $ ssh 198.51.100.89 ssh: connect to host 198.51.100.89 port 22: Operation timed out </syntaxhighlight> There's not a system associated with that IP address, or else a packet filter is causing trouble. '''Connection timed out:''' <syntaxhighlight lang="shell-session"> $ ssh 198.51.100.89 ssh: connect to host 198.51.100.89 port 22: Connection timed out </syntaxhighlight> You can't get there from here. It is probable that the destination machine is disconnected from the network or that the network which it is on is not reachable. '''Connection refused:''' <syntaxhighlight lang="shell-session"> $ ssh www.example.org ssh: connect to host www.example.org port 22: Connection refused </syntaxhighlight> The destination system exists but there is no SSH service available at the port being tried. Is the destination right? It might be the wrong system, SSH might not be running at all, SSH might be listening on another port, or a packet filter might be blocking connections. '''Permission denied:''' <syntaxhighlight lang="shell-session"> $ ssh www.example.org fred@www.example.org: Permission denied (publickey,keyboard-interactive). </syntaxhighlight> That is usually a sign of a problem caused by the wrong user name, wrong authentication method, wrong SSH key or SSH certificate, or wrong file permissions in the authorized keys file on the destination system. If it is a matter of SSH key-based authentication, see the chapter on [[OpenSSH/Cookbook/Public_Key_Authentication | Public Key Authentication]] for more thorough coverage. If it is a question of SSH certificates, see the corresponding [[OpenSSH/Cookbook/Certificate-based_Authentication‎ | Certificate-based Authentication]] chapter. It can also be a matter of server-side settings with '''AllowGroups''', '''DenyGroups''', or similar configuration directives at the destination. Any of those possibilities can really only be identified and solved by checking the log output from [http://man.openbsd.org/sshd.8 sshd(8)]. '''No matching host key type found:''' <syntaxhighlight lang="shell-session"> $ ssh www.example.org Unable to negotiate with 198.51.100.89 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss </syntaxhighlight> The SSH daemon on that server is really outdated. Contact the system administrator about an upgrade and get them moving. More details can be seen with the '''-v''' option on the client. <syntaxhighlight lang="shell-session"> $ ssh -v fred@example.org ... debug1: SSH2_MSG_KEXINIT received debug1: kex: algorithm: diffie-hellman-group-exchange-sha256 debug1: kex: host key algorithm: (no match) Unable to negotiate with 198.51.100.89 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss </syntaxhighlight> In the above shell session, it is the server which is badly in need of an update as shown by the deprecated key exchange algorithms which it tries to use. Again, for emphasis, the solution is to update the outdated software. If a specific, old version of an particular operating system absolutely must be used for a while longer, see about getting a back port of the SSH daemon. Many GNU/Linux distros even have specific back port repositories. If you would like to see which key exchange algorithms the client supports try using the '''-Q''' option. <syntaxhighlight lang="shell-session"> $ ssh -Q kex diffie-hellman-group1-sha1 diffie-hellman-group14-sha1 diffie-hellman-group14-sha256 diffie-hellman-group16-sha512 diffie-hellman-group18-sha512 diffie-hellman-group-exchange-sha1 diffie-hellman-group-exchange-sha256 ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521 mlkem768nistp256-sha256 curve25519-sha256 curve25519-sha256@libssh.org sntrup761x25519-sha512 sntrup761x25519-sha512@openssh.com mlkem768x25519-sha256 </syntaxhighlight> <noinclude>{{OpenSSH/TOC|mini}}</noinclude> {{BookCat}} {{status|100%}} 61jg51ws368xfm5lt1rdr228xc855hs 4675298 4675296 2026-10-09T15:43:26Z Larsnooden 430753 typo 4675298 wikitext text/x-wiki Both the OpenSSH client and server offer a lot of choice as to where the logs are written and how much information is collected. A prerequisite for logging is having an accurate system clock using the Network Time Protocol, NTP, or equivalent, service which provides ongoing time synchronization with rest of the world. The more accurate the time stamp in the log is, the faster it is to coordinate forensics between machines or sites or service providers. If you have to contact outside parties like a service provider, progress can usually only be made with very exact times. ==Server Logs== By default [http://man.openbsd.org/sshd.8 sshd(8)] sends logging information to the system logs using the log level INFO and the system log facility AUTH. So the place to look for log data from [http://man.openbsd.org/sshd.8 sshd(8)] is in '''/var/log/auth.log'''. These defaults can be overridden using the '''SyslogFacility''' and '''LogLevel''' directives. Below is a typical server startup entry in the authorization log. <syntaxhighlight lang="text"> Mar 19 14:45:40 server sshd[21157]: Server listening on 0.0.0.0 port 22. Mar 19 14:45:40 server sshd[21157]: Server listening on :: port 22. </syntaxhighlight> In most cases the default level of logging is sufficient, but during initial testing of new services or activities it is sometimes necessary to have more information. Debugging info usually goes to '''stderr'''. Starting with OpenSSH 7.6, '''Match''' blocks can set alternate log levels for specific conditions. The log excerpt below show the same basic server start up with increased detail. Contrast the log level DEBUG1 below with the default above: <syntaxhighlight lang="text"> Apr 5 12:39:14 server sshd[85029]: debug1: Bind to port 22 on 0.0.0.0. Apr 5 12:39:14 server sshd[85029]: Server listening on 0.0.0.0 port 22. Apr 5 12:39:14 server sshd[85029]: debug1: Bind to port 22 on ::. Apr 5 12:39:14 server sshd[85029]: Server listening on :: port 22. </syntaxhighlight> And here is the same startup using the most verbose level, DEBUG3: <syntaxhighlight lang="text"> Apr 5 12:40:59 server sshd[49707]: debug2: fd 6 setting O_NONBLOCK Apr 5 12:40:59 server sshd[49707]: debug1: Bind to port 22 on 0.0.0.0. Apr 5 12:40:59 server sshd[49707]: Server listening on 0.0.0.0 port 22. Apr 5 12:40:59 server sshd[49707]: debug2: fd 7 setting O_NONBLOCK Apr 5 12:40:59 server sshd[49707]: debug1: Bind to port 22 on ::. Apr 5 12:40:59 server sshd[49707]: Server listening on :: port 22. </syntaxhighlight> Every failed login attempt is recorded, once the value in directive '''MaxAuthTries''' is exceeded the connection is broken. Below is a log excerpt showing how the default log looks after some failed attempts: <syntaxhighlight lang="text"> ... Apr 5 12:44:43 server sshd-session[80932]: Failed password for root from 103.42.56.121 port 58164 ssh2 Apr 5 12:44:51 server last message repeated 2 times Apr 5 12:44:51 server sshd-session[80932]: Connection closed by authenticating user root 103.42.56.121 port 58164 [preauth] ... </syntaxhighlight> It is not usually a good idea to allow root login, especially not root login with authentication via password. Blocking login for root simplifies the log analysis greatly, and in particular it eliminates the time consuming question of who is trying to get in and why. People that need full root level access can gain it through [https://man.openbsd.org/su.1 su(1)] for general activities. Or for specific tasks which need root level access, those can be given those privileges through custom-made entries for '''sudo(8)''' or [https://man.openbsd.org/doas.1 doas(1)]. Note that in those cases, only specific services and programs should be allowed, not blanket access which is an all too common misconfiguration seen with '''sudo(8)'''. Alternatively, a single-purpose key made using '''forced-commands-only''' could be used since some argue that providing extra means of privilege escalation, such as [https://man.openbsd.org/su.1 su(1)], '''sudo(8)''', or [https://man.openbsd.org/doas.1 doas(1)], is more dangerous than carefully providing remote root access through a key or certificate tied to a specific function. ===Successful logins=== By default, the server does not store much information about user transactions. That is a good thing. It is also a good thing to recognize when the system is operating as it should. So here is an example of a successful SSH login: <syntaxhighlight lang="text"> Apr 4 13:30:08 server sshd-session[86956]: Accepted password for fred from 198.51.100.135 port 52646 ssh2 </syntaxhighlight> And here is an example using a key for authentication. It shows the key fingerprint as a SHA256 hash in base64. <syntaxhighlight lang="text"> Apr 5 12:49:11 server sshd-session[41210]: Accepted publickey for fred from 198.51.100.135 port 28927 ssh2: ED25519 SHA256:03u96bPG5qYi7hIEohNDfxOW+KOpMS9LPi4YdiCtGaI </syntaxhighlight> And here is an example of successful authentication with a user certificate. The certificate's identification string is "foobar" and the serial number is "9624". In this example the certificate is using ECDSA and the key itself is using Ed25519. The certificate, being a different key of its own, has a different SHA256 fingerprint from the authentication key itself. <syntaxhighlight lang="text"> Apr 5 13:50:57 server sshd-session[20263]: Accepted publickey for fred from 127.0.0.1 port 41783 ssh2: ED25519-CERT SHA256:UP1+mGQ5tfT84YCRVgytAKtikn0ujmfhXKdoxRoWDtU ID edcba (serial 2) CA ED25519 SHA256:4lngxTgobhprXfPY/p+2HNMBg6PxNDaOWrvei6kScrM </syntaxhighlight> In all three cases, older versions prior to 9.8 will use a process named '''sshd''' rather than one named '''sshd-session''' as is now a side effect of better privilege separation. Prior to 6.8, the key's fingerprint was a hexadecimal MD5 hash. <syntaxhighlight lang="text"> Jan 28 11:51:43 server sshd[5104]: Accepted publickey for fred from 192.0.2.60 port 60594 ssh2: RSA e8:31:68:c7:01:2d:25:20:36:8f:50:5d:f9:ee:70:4c </syntaxhighlight> In older versions of OpenSSH prior to 6.3 the key fingerprint is completely missing from authentication logging. <syntaxhighlight lang="text"> Jan 28 11:52:05 server sshd[1003]: Accepted publickey for fred from 192.0.2.60 port 20042 ssh2 </syntaxhighlight> Here is an example of password authentication for an SFTP session, using the server's internal-sftp subsystem. The logging for that subsystem set to INFO. <syntaxhighlight lang="text"> Mar 14 20:14:18 server sshd-session[19850]: Accepted password for fred from 192.0.2.60 port 59946 ssh2 </syntaxhighlight> Here is an example of a successful SFTP login using an Ed25519 key for authentication, with the SFTP subsystem itself logging at INFO. <syntaxhighlight lang="text"> Apr 5 13:56:02 server shd-session[58881]: Accepted publickey for fred from 192.0.2.60 port 40445 ssh2: ED25519 SHA256:UP1+mGQ5tfT84YCRVgytAKtikn0ujmfhXKdoxRoWDtU Apr 5 13:56:02 server internal-sftp[21121]: session opened for local user fred from [192.0.2.60] </syntaxhighlight> Additional data, such as connection duration, can be logged with the help of xinetd(8). ===Logging Problems from SSH Certificate Authentication=== When a certificate fails, there is generally no client side information disclosed and all investigation must occur server side. Finding the account or actual certificate in question can require some sleuthing in older versions of OpenSSH, but newer versions can identify the certificate and the certificate authority under certain circumstances. It is also important to be familiar with how log entries are supposed to look when things go correctly. Here is a successful login using certificate-based authentication: <syntaxhighlight lang="text"> Aug 7 18:32:29 server sshd-session[49021]: Accepted publickey for fred from 192.0.2.60 port 10932 ssh2: ED25519-CERT SHA256:UP1+mGQ5tfT84YCRVgytAKtikn0ujmfhXKdoxRoWDtU ID fedcba (serial 11) CA ED25519 SHA256:4lngxTgobhprXfPY/p+2HNMBg6PxNDaOWrvei6kScrM </syntaxhighlight> When the connection is closed there will be a log entry noting which account was involved. Older versions of OpenSSH will have less information in the log. <syntaxhighlight lang="text"> May 5 16:02:50 server sshd-session[32110]: Received disconnect from 192.0.2.60 port 12952:11: disconnected by user May 5 16:02:50 server sshd-session[32110]: Disconnected from user fred 192.0.2.60 port 12952 </syntaxhighlight> However, if the connection is allowed to timeout without first making any other authentication attempts by some other means, then there will be nothing to go on except maybe the time of day. <syntaxhighlight lang="text"> Apr 5 14:03:12 server sshd[9205]: Timeout before authentication for connection from 192.0.2.60 to 203.0.113.120, pid = 57844 </syntaxhighlight> Below are some common examples of log entries for failed certificate-based login attempts. There can sometimes be more than one problem with a certificate but in such cases only one error will get logged at a time. ====Expired or Not-yet-valid Certificate==== Certificates which have not yet become valid or which have already expired get a log entry as to the reason and include the offending certificate's id string and serial number as well as the fingerprint of the signing certificate authority. Below is one which is not yet valid being rejected by the server, perhaps at a future date it will be valid but that information is in the certificate, not the log. <syntaxhighlight lang="text"> Aug 7 19:02:52 server sshd-session[96551]: error: Refusing certificate ID "fedcb" serial=9 signed by ED25519 CA SHA256:4ZyxpgCaw3Y8wz91ajLWARibUGfwyuOrftt2wermMJE: Certificate invalid: not yet valid </syntaxhighlight> Next is an expired certificate which has been rejected. <syntaxhighlight lang="text"> Aug 7 19:02:53 server sshd-session[99417]: error: Refusing certificate ID "gfedc" serial=5 signed by ED25519 CA SHA256:4ZyxpgCaw3Y8wz91ajLWARibUGfwyuOrftt2wermMJE: Certificate invalid: expired </syntaxhighlight> If a certificate is not yet valid, then the log entry will say that explicitly and the trailing text on the line will be "Certificate invalid: not yet valid". The old style log entries for an expired certificate and for a certificate which has not yet become valid have much less information. <syntaxhighlight lang="text"> Apr 5 14:33:31 server sshd-session[88953]: error: Certificate invalid: expired Apr 5 14:32:41 server sshd-session[51695]: error: Certificate invalid: not yet valid </syntaxhighlight> The improved logging arrived with OpenSSH 10.1 ====Valid Certificate but Invalid Principal==== Like with other reasons for rejecting certificates, when the account and allowed principals do not match the account logging in, information is logged about which certificate was tried and failed. Here is an entry showing an invalid principal: <syntaxhighlight lang="text"> Aug 7 19:02:54 server sshd-session[12928]: error: Refusing certificate ID "edcba" serial=33 signed by ED25519 CA SHA256:4lngxTgobhprXfPY/p+2HNMBg6PxNDaOWrvei6kScrM: Certificate invalid: name is not a listed principal </syntaxhighlight> The old style log entry from OpenSSH 10.0 and earlier provides much less information about the certificate in question: <syntaxhighlight lang="text"> Apr 5 14:34:56 server sshd-session[66692]: error: Certificate invalid: name is not a listed principal </syntaxhighlight> If the client closes the connection on purpose, there may be some information in the connection closed entry but that will be a different log entry. ====Valid Certificate but Invalid Source Address==== If the certificate is limited to connecting from specific addresses or host names, the log will complain if the connection comes from a different address or host and identify the incorrect source address. The information will be split across two log entries, which might or might not be adjacent depending on how busy the server is. Here is an entry showing an invalid source address: <syntaxhighlight lang="text"> Aug 7 19:12:08 server sshd-session[29034]: cert: Authentication tried for fred with valid certificate but not from a permitted source address (198.51.100.135). Aug 7 19:12:08 server sshd-session[29034]: error: Refusing certificate ID "ihgfe" serial=8 signed by ED25519 CA SHA256:4ZyxpgCaw3Y8wz91ajLWARibUGfwyuOrftt2wermMJE: Refused by certificate options </syntaxhighlight> Prior to OpenSSH 10.1, the second entry had much less information about the offending certificate. <syntaxhighlight lang="text"> Apr 5 14:57:47 server sshd-session[78381]: cert: Authentication tried for fred with valid certificate but not from a permitted source address (198.51.100.135). Apr 5 14:57:47 server sshd-session[78381]: error: Refused by certificate options </syntaxhighlight> However, it will not be possible to identify the specific certificate directly with that old style log entry. ===Logging SFTP File Transfers=== SFTP file transfers can be logged using '''LogLevel''' INFO or VERBOSE. The log level for the SFTP server can be set in [http://man.openbsd.org/sshd_config.5 sshd_config(5)] separately from the general SSH server settings. <syntaxhighlight lang="apache" line="1"> Subsystem internal-sftp -l INFO </syntaxhighlight> By default the SFTP messages will also end up in ''auth.log'' but it is possible to filter these messages to their own file by reconfiguring the system logger, usually rsyslogd(8) or [https://man.openbsd.org/syslogd syslogd(8)]. Sometimes this is done by changing the log facility code from the default of AUTH. Available options are LOCAL0 through LOCAL7, plus, less usefully, DAEMON and USER. <syntaxhighlight lang="apache" line="1"> Subsystem internal-sftp -l INFO -f LOCAL6 </syntaxhighlight> If new system log files are assigned, it is important to remember them in the log rotation, too. Again, the '''Match''' directive can be use to change the log level just for certain connections. The following log excerpts are generated from using the log level INFO. A session starts with an open and end with a close. The number in the brackets is the process id for the SFTP session and is the only way to follow a session through the logs. <syntaxhighlight lang="text"> Oct 22 11:59:45 server internal-sftp[4929]: session opened for local user fred from [192.0.2.33] ... Oct 22 12:09:10 server internal-sftp[4929]: session closed for local user fred from [192.0.2.33] </syntaxhighlight> Here is an SFTP upload of a small file of 928 bytes named '''foo''' to the home directory for user 'fred' when logging the SFTP at log level INFO. <syntaxhighlight lang="text"> Oct 22 11:59:50 server internal-sftp[4929]: open "/home/fred/foo" flags WRITE,CREATE,TRUNCATE mode 0664 Oct 22 11:59:50 server internal-sftp[4929]: close "/home/fred/foo" bytes read 0 written 928 </syntaxhighlight> And a directory listing in the same session in the directory '''/var/www'''. <syntaxhighlight lang="text"> Oct 8 07:28:25 server internal-sftp[34984]: opendir "/" Oct 8 07:28:25 server internal-sftp[34984]: closedir "/" Oct 8 07:28:26 server internal-sftp[34984]: opendir "/" Oct 8 07:28:26 server internal-sftp[34984]: closedir "/" Oct 8 07:28:27 server internal-sftp[34984]: opendir "/var/" Oct 8 07:28:27 server internal-sftp[34984]: closedir "/var/" Oct 8 07:28:27 server internal-sftp[34984]: opendir "/var/www/" Oct 8 07:28:27 server internal-sftp[34984]: closedir "/var/www/" </syntaxhighlight> And lastly here is a download of the same small 928-byte file called '''foo''' from the home directory for the user 'fred'. <syntaxhighlight lang="text"> Oct 22 12:08:03 server internal-sftp[4929]: open "/home/fred/foo" flags READ mode 0666 Oct 22 12:08:03 server internal-sftp[4929]: close "/home/fred/foo" bytes read 928 written 0 </syntaxhighlight> Successful transfers will be noted by a ''close'' message. Attempts to download (open) files that do not exist will be followed by a ''sent status No such file'' message on a line of its own instead of a ''close''. Files that exist but that the user is not allowed to read will create a ''sent status Permission denied'' message. ===Logging Chrooted SFTP=== Logging with the built-in '''sftp-subsystem''' inside a chroot jail, defined by '''ChrootDirectory''', needs a '''./dev/log''' node to exist inside the jail. This can be done by having the system logger such as [http://man.openbsd.org/syslogd.8 syslogd(8)] add additional log sockets inside the chrooted directory when starting up. On some systems that is as simple as adding more flags, like "'''-u -a /chroot/dev/log'''", in '''/etc/rc.conf.local''' or whatever the equivalent startup script may be. Here is an example of an SFTP login with password to a chroot jail using log level DEBUG3 for the SFTP-subsystem. The log shows a file upload: <syntaxhighlight lang="text">Apr 5 15:08:41 server sshd-session[31716]: Accepted password for fred from 198.51.100.135 port 39238 ssh2 Apr 5 15:08:41 server internal-sftp[55598]: session opened for local user fred from [198.51.100.135] Apr 5 15:08:41 server internal-sftp[55598]: received client version 3 Apr 5 15:08:41 server internal-sftp[55598]: debug1: request 1: limits Apr 5 15:08:41 server internal-sftp[55598]: debug3: request 2: realpath Apr 5 15:08:41 server internal-sftp[55598]: realpath "." Apr 5 15:08:41 server internal-sftp[55598]: debug1: request 2: sent names count 1 Apr 5 15:08:52 server internal-sftp[55598]: debug3: request 3: open flags 26 Apr 5 15:08:52 server internal-sftp[55598]: open "/home/fred/foo" flags WRITE,CREATE,TRUNCATE mode 0664 Apr 5 15:08:52 server internal-sftp[55598]: debug1: request 3: sent handle 0 Apr 5 15:08:52 server internal-sftp[55598]: debug1: request 5: write "/home/fred/foo" (handle 0) off 0 len 33 Apr 5 15:08:52 server internal-sftp[55598]: debug3: request 5: sent status 0 Apr 5 15:08:52 server internal-sftp[55598]: sent status Success Apr 5 15:08:52 server internal-sftp[55598]: debug3: request 4: close handle 0 Apr 5 15:08:52 server internal-sftp[55598]: close "/home/fred/foo" bytes read 0 written 33 Apr 5 15:08:52 server internal-sftp[55598]: debug3: request 4: sent status 0 Apr 5 15:08:52 server internal-sftp[55598]: sent status Success </syntaxhighlight> Remember that SFTP is a separate subsystem and that like the file creation mode, the log level and log facility are set separately from the SSH server in [http://man.openbsd.org/sshd_config.5 sshd_config(5)], for example: <syntaxhighlight lang="apache" line="1"> Subsystem internal-sftp -l ERROR </syntaxhighlight> ===Logging Stability of Client Connectivity=== When '''ClientAliveInterval''' is set in the server's configuration, the server makes periodic probes of the clients which have established connections. At normal log levels, these are not noted in the log until something goes wrong. If the '''ClientAliveInterval''' is exceeded more times in a row than allowed by '''ClientAliveCountMax''' the client is officially declared disconnected and the connection dropped. At the default log level of INFO a brief message is logged, identifying the client which has been dropped. <syntaxhighlight lang="text"> Sep 6 14:42:08 server sshd[83709]: packet_write_poll: Connection from 192.0.2.97 port 57608: Host is down </syntaxhighlight> At log level DEBUG, the client's responses to the polls will be logged by the server showing that the session is still connected. <syntaxhighlight lang="text"> Sep 6 14:27:52 server sshd[9075]: debug1: Got 100/147 for keepalive </syntaxhighlight> Log level DEBUG2 and DEBUG3 will give even more information about the connection. However, even at log level DEBUG3, the specific client being polled will not be identified directly in the log messages and will have to be inferred from the process id of the daemon if such information is needed. <syntaxhighlight lang="text"> Sep 6 14:30:59 server sshd[73960]: debug2: channel 0: request keepalive@openssh.com confirm 1 Sep 6 14:30:59 server sshd[73960]: debug3: send packet: type 98 Sep 6 14:30:59 server sshd[73960]: debug3: receive packet: type 100 Sep 6 14:30:59 server sshd[73960]: debug1: Got 100/22 for keepalive </syntaxhighlight> Again, when the '''ClientAliveCountMax''' is exceeded, the connection is broken after the final failure of the client to respond. Here is how that looks with the log level set to DEBUG2. <syntaxhighlight lang="text"> Sep 6 14:17:55 server sshd[15780]: debug2: channel 0: request keepalive@openssh.com confirm 1 Sep 6 14:17:55 server sshd[15780]: debug1: Got 100/22 for keepalive Sep 6 14:18:37 server sshd[15780]: debug2: channel 0: request keepalive@openssh.com confirm 1 Sep 6 14:18:37 server sshd[15780]: packet_write_poll: Connection from 192.0.2.97 port 57552: Host is down Sep 6 14:18:37 server sshd[15780]: debug1: do_cleanup Sep 6 14:18:37 server sshd[48675]: debug1: do_cleanup Sep 6 14:18:37 server sshd[48675]: debug1: session_pty_cleanup: session 0 release /dev/ttyp0 </syntaxhighlight> The directives '''ClientAliveInterval''' and '''ClientAliveCountMax''' normally apply to all clients connecting to the server. However, they can be used inside a '''Match''' block and thus applied only to specific connections. ===Logging Revoked Keys=== If the '''RevokedKeys''' directive is used to point to a list of public keys that have been revoked, [http://man.openbsd.org/sshd.8 sshd(8)] will make a log entry when access is attempted using a revoked key. The entry will be the same whether a plaintext list of public keys is used or if a binary Key Revocation List (KRL) has been generated. If password authentication is allowed, and the user tries it, then after the key authentication fails there will be a record of password authentication. <syntaxhighlight lang="text"> Mar 14 20:36:40 server sshd-session[29235]: error: Authentication key RSA SHA256:jXEPmu4thnubqPUDcKDs31MOVLQJH6FfF1XSGT748jQ revoked by file /etc/ssh/ssh_revoked_keys ... Mar 14 20:36:45 server sshd-session[29235]: Accepted password for fred from 192.0.2.10 port 59967 ssh2 </syntaxhighlight> If password authentication is not allowed, [http://man.openbsd.org/sshd.8 sshd(8)] will close the connection as soon as the key fails. <syntaxhighlight lang="text"> Mar 14 20:38:27 server sshd-session[29163]: error: Authentication key RSA SHA256:jXEPmu4thnubqPUDcKDs31MOVLQJH6FfF1XSGT748jQ revoked by file /etc/ssh/ssh_revoked_keys ... </syntaxhighlight> The account trying the revoked key remains a mystery though. So it will be necessary to try to look up the key by its fingerprint from your archive of old keys using <code>ssh-keygen -lf</code> and read the key's comments. Although if a valid account cancels the connection without trying a password after the key attempt fails, the usual message will still be posted to the log and that will show the login name. <syntaxhighlight lang="text"> Mar 14 20:44:04 server sshd-session[14352]: Connection closed by authenticating user fred 192.0.2.237 port 55051 [preauth] ... </syntaxhighlight> That may be enough to provide some clue and allow a bit of log filtering with a short AWK script, if the messages are all in the same log file. <syntaxhighlight lang="shell-session"> $ awk '/revoked by file/ { pid[$5]++; key[$5]=$9; hash[$5]=$10; next; } pid[$5] && /closed by authenticating user/ { print key[$5], hash[$5], $10, $11; delete key[$5]; delete hash[$5]; delete pid[$5]; }' /var/log/authlog </syntaxhighlight> Similarly, if the client makes no attempt at logging in and just times out, the message will say just that. <syntaxhighlight lang="text"> Mar 18 21:40:25 server sshd[9942]: fatal: Timeout before authentication for connection from 198.51.100.236 to 203.0.113.75, pid = 67611 ... </syntaxhighlight> On the client side, no warning or error will be given if a revoked key is tried. It will just fail and the next key or method will be tried. ===Brute force and Hail Mary attacks=== It’s fairly common to see failed login attempts almost as soon as the server is connected to the net. Brute force attacks, where one machine hammers on a few accounts trying to find a valid password, are becoming rare. In part this is because packet filters, like NFables for Linux and PF for the BSDs, can limit the number and rate of connection attempts from a single host. The server configuration directive '''MaxStartups''' can limit the number of simultaneous, unauthenticated connections. <syntaxhighlight lang="text"> ... Apr 4 16:45:34 server sshd-session[96275]: Failed password for root from 103.42.56.121 port 48294 ssh2 ... Apr 4 16:46:58 server sshd-session[96275]: Failed password for root from 103.42.56.121 port 48294 ssh2 ... Apr 4 16:47:04 server sshd-session[96275]: Failed password for root from 103.42.56.121 port 48294 ssh2 Apr 4 16:47:05 server sshd-session[96275]: Connection closed by authenticating user root 103.42.56.121 port 48294 [preauth] ... </syntaxhighlight> Prior to 9.8, it was slightly different: <syntaxhighlight lang="text"> ... Mar 18 18:54:44 server sshd[54939]: Failed password for root from 201.179.249.231 port 52404 ssh2 Mar 18 18:54:48 server sshd[54939]: Failed password for root from 201.179.249.231 port 52404 ssh2 Mar 18 18:54:49 server sshd[54939]: Failed password for root from 201.179.249.231 port 52404 ssh2 Mar 18 18:54:49 server sshd[54939]: error: maximum authentication attempts exceeded for root from 201.179.249.231 port 52404 ssh2 [preauth] Mar 18 18:54:49 server sshd[54939]: Disconnecting authenticating user root 201.179.249.231 port 52404: Too many authentication failures [preauth] ... </syntaxhighlight> Note the "authenticating user" is present in the logs from OpenSSH 7.5 and onward when a valid user name is attempted. When an invalid user name is attempted, that is written too. <syntaxhighlight lang="text"> ... Apr 3 10:25:59 server sshd-session[78513]: Invalid user ad1tz from 103.42.56.121 port 55778 Apr 3 10:26:00 server sshd-session[78513]: Received disconnect from 103.42.56.121 port 55778:11: Bye Bye [preauth] Apr 3 10:26:00 server sshd-session[78513]: Disconnected from invalid user ad1tz 103.42.56.121 port 55778 [preauth] ... </syntaxhighlight> Again, in versions prior to 9.8, the process name is different as is the closing message. <syntaxhighlight lang="text"> ... Mar 18 18:55:05 server sshd[38594]: Invalid user ubnt from 201.179.249.231 port 52471 Mar 18 18:55:05 server sshd[38594]: Failed password for invalid user ubnt from 201.179.249.231 port 52471 ssh2 Mar 18 18:55:09 server sshd[38594]: error: maximum authentication attempts exceeded for invalid user ubnt from 201.179.249.231 port 52471 ssh2 [preauth] Mar 18 18:55:09 server sshd[38594]: Disconnecting invalid user ubnt 201.179.249.231 port 52471: Too many authentication failures [preauth] ... </syntaxhighlight> The way to deal with brute force attacks coming from a single machine or network is to customize the server host’s packet filter to limit the attacks or even temporarily block machines that overload the maximum number or rate of connections. Optionally, one should also contact the attacker’s net block owner with the IP address and exact date and time of the attacks. A kind of attack common at the time of this writing is one which is distributed over a large number of compromised machines, each playing only a small role in attacking the server. To deal with Hail Mary attacks, contact the attacker’s net block owner. A form letter with a cut-and-paste excerpt from the log is enough if it gives the exact times and addresses. Alternately, teams of network or system administrators can work to pool data to identify and blacklist the compromised hosts participating in the attack. ====Failed None For Invalid User==== The SSH protocol specifies a number of possible authentication methods<ref name="rfc_4252">{{cite web | url =https://datatracker.ietf.org/doc/html/rfc4252#section-5.2 | title=RFC 4252: The Secure Shell (SSH) Authentication Protocol | date=2006 | publisher=IETF | access-date=2021-08-10 }}</ref>. The methods <code>password</code>, <code>keyboard-interactive</code>, and <code>publickey</code> are fairly common. A lesser known authentication method is <code>none</code>, which will only succeed if the server requires no further authentication such as if '''PermitEmptyPassword''' is set and the account does not actually have a password<ref name="failed_none">{{cite mailing list | url=https://marc.info/?l=openbsd-misc&m=162858437916966&w=2 | last=Tucker | first=Darren | mailing-list=OpenBSD-Misc | date=2021-08-10 | accessdate=2021-08-10 | title=Re: ssh authlog: Failed none for invalid user | publisher=OpenBSD}}</ref>. Some SSH clients including OpenSSH's start by asking for <code>none</code> authentication and then use the list of remaining possible authentication methods to decide what to do next if that doesn't work. <syntaxhighlight lang="text"> ... Aug 10 19:09:05 server sshd[93126]: Failed none for invalid user admin from 125.64.94.136 port 27586 ssh2 ... </syntaxhighlight> So in other words, that is a brute force attack trying the <code>none</code> authentication method. It is an attack which will only get into accounts which have been explicitly set with an empty password and furthermore have also been set up specifically to allow access by having both the authentication method of <code>none</code> and the '''PermitEmptyPasswords''' configuration directive enabled on the server. Most brute force attacks try only <code>password</code> authentication, and some of those even check for the <code>password</code> method and then give up if it is not available. Other attackers may just hammer away pointlessly even if the method is not available. ===Connections Seemingly From 127.0.0.1, ::1, or Other localhost Addresses=== When the SSH server is accessed via a reverse tunnel to another machine, the incoming connections will appear to be from the ''localhost'' address, which is usually ''127.0.0.1'' or ''::1''. <syntaxhighlight lang="text"> Mar 23 14:16:16 server sshd[9265]: Accepted password for fred from 127.0.0.1 port 40426 ssh2 </syntaxhighlight> If the port at the other end of the reverse tunnel is publicly accessible, it will be probed and possibly attacked. Because of the reverse tunnel, the attacks will then also appear to be coming from the server's own loopback address: <syntaxhighlight lang="text"> Mar 23 14:20:17 server sshd-session[5613]: Invalid user cloud from ::1 port 57404 Mar 23 14:20:21 server sshd-session[5613]: Failed password for invalid user cloud from ::1 port 57404 ssh2 Mar 23 14:20:26 server sshd-session[5613]: Failed password for invalid user cloud from ::1 port 57404 ssh2 Mar 23 14:20:35 server sshd-session[5613]: Connection closed by invalid user cloud ::1 port 57404 [preauth] </syntaxhighlight> Like in the other examples, the disconnection message was different prior to 9.8: <syntaxhighlight lang="text"> ... Mar 23 14:20:32 server sshd[5613]: Failed password for invalid user cloud from ::1 port 57404 ssh2 Mar 23 14:20:35 server sshd[5613]: Connection closed by invalid user cloud ::1 port 57404 [preauth] ... </syntaxhighlight> Therefore the usual countermeasures like SSHGuard or Fail2Ban or other similar intrusion detection systems cannot be used because the ''localhost'' address is used by the tunnel for all login attempts, regardless of their real origins. A partial solution would be to bind the incoming connections to a different IP address. The loopback interface would need an additional permanent address, an alias, for that. That alias could then be assigned when establishing the reverse tunnel: <syntaxhighlight lang="shell-session"> $ ssh -R 2022:127.2.2.1:22 fred@vps.example.org </syntaxhighlight> Thus it would designate the source address for all logins coming in over that tunnel. So, in that way, the alias would then show up in the logs instead of the default loopback address when that reverse tunnel is used: <syntaxhighlight lang="text"> Mar 23 18:00:13 server sshd-session[8525]: Invalid user cloud from 127.2.2.1 port 17271 Mar 23 18:00:15 server sshd-session[8525]: Failed password for invalid user cloud from 127.2.2.1 port 17271 ssh2 Mar 23 18:00:19 server sshd-sesssion[8525]: Failed password for invalid user cloud from 127.2.2.1 port 17271 ssh2 Mar 23 18:01:23 server sshd-session[8525]: Failed password for invalid user cloud from 127.2.2.1 port 17271 ssh2 Mar 23 18:01:26 server sshd-session[8525]: Connection closed by invalid user cloud 127.2.2.1 port 17271 [preauth] </syntaxhighlight> If the ports do not need to be available to the open Internet, a full solution would be just to ensure that they are not accessible from the outside. This would be done by not using the '''-g''' option on the client when making the reverse tunnel or else by setting the '''GatewayPorts''' directive in [http://man.openbsd.org/sshd_config.5 sshd_config(5)] back to the default of '''no''', or both. The system's built-in packet filter can also be used. Then, even with the forwarded ports closed off from the outside, the '''ProxyJump''' option can still be used to skip through the jump host and use the setup for SSH access. However, since it is sometimes necessary that these ports be accessible to the outside world, this approach is not always an option. ==Client Logging== The OpenSSH client normally sends log information to '''stderr'''. The '''-y''' option can be used to send output to the system logs, managed by [http://man.openbsd.org/syslogd.8 syslogd(8)] or something similar. Client log verbosity can be increased or decreased by changing the '''LogLevel''' directive and the log facility changed with the '''SyslogFacility''' directive in [http://man.openbsd.org/ssh_config.5 ssh_config(5)]. Both require use of the '''-y''' run-time option and do nothing without it. Alternatively, instead of using the '''-y''' option, using the '''-E''' option sends log output to a designated file instead of '''stderr'''. Working with the system logs or separate log files are something which can be useful when running [http://man.openbsd.org/ssh.1 ssh(1)] in automated scripts. Below is an example of a connection to an interactive shell with the normal level of client logging: <syntaxhighlight lang="shell-session"> $ ssh -l fred server.example.org fred@server.example.org‘s password: Last login: Thu Jan 27 13:21:57 2011 from 192.168.11.1 </syntaxhighlight> The same connection at the first level of verbosity gives lots of debugging information, 90 lines in all. <syntaxhighlight lang="shell-session"> $ ssh -v -l fred server.example.org debug1: OpenSSH_10.6, LibreSSL 4.4.0 debug1: Reading configuration data /etc/ssh/ssh_config debug1: no pubkey loaded from /home/fred/.ssh/id_rsa debug1: identity file /home/fred/.ssh/id_rsa type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_rsa debug1: no pubkey loaded from /home/fred/.ssh/id_ecdsa debug1: identity file /home/fred/.ssh/id_ecdsa type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_ecdsa debug1: no pubkey loaded from /home/fred/.ssh/id_ecdsa_sk debug1: identity file /home/fred/.ssh/id_ecdsa_sk type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_ecdsa_sk debug1: no pubkey loaded from /home/fred/.ssh/id_ed25519 debug1: identity file /home/fred/.ssh/id_ed25519 type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_ed25519 debug1: no pubkey loaded from /home/fred/.ssh/id_ed25519_sk debug1: identity file /home/fred/.ssh/id_ed25519_sk type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_ed25519_sk debug1: no pubkey loaded from /home/fred/.ssh/id_mldsa44_ed25519 debug1: identity file /home/fred/.ssh/id_mldsa44_ed25519 type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_mldsa44_ed25519 debug1: Connecting to server.example.org [198.51.100.20] port 22. debug1: Connection established. debug1: Local version string SSH-2.0-OpenSSH_10.6 debug1: Remote protocol version 2.0, remote software version OpenSSH_10.6 debug1: compat_banner: match: OpenSSH_10.6 pat OpenSSH* compat 0x04000000 debug1: Authenticating to server.example.org:22 as 'fred' debug1: load_hostkeys: fopen /home/fred/.ssh/known_hosts2: No such file or directory debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT received debug1: kex: algorithm: mlkem768x25519-sha256 debug1: kex: host key algorithm: ssh-ed25519 debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none debug1: expecting SSH2_MSG_KEX_ECDH_REPLY debug1: SSH2_MSG_KEX_ECDH_REPLY received debug1: Server host key: ssh-ed25519 SHA256:agRZDZn8awhQ+tc19Ip/whkHoV33Ln2REO7v1kcYbdU debug1: load_hostkeys: fopen /home/fred/.ssh/known_hosts2: No such file or directory debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory debug1: Host 'server.example.org' is known and matches the ED25519 host key. debug1: Found key in /home/fred/.ssh/known_hosts:1 debug1: ssh_packet_send2_wrapped: resetting send seqnr 3 debug1: rekey out after 134217728 blocks debug1: SSH2_MSG_NEWKEYS sent debug1: Sending SSH2_MSG_EXT_INFO debug1: expecting SSH2_MSG_NEWKEYS debug1: ssh_packet_read_poll2: resetting read seqnr 3 debug1: SSH2_MSG_NEWKEYS received debug1: rekey in after 134217728 blocks debug1: SSH2_MSG_EXT_INFO received debug1: kex_ext_info_client_parse: server-sig-algs=<ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ssh-ed25519@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com,rsa-sha2-512,rsa-sha2-256,ssh-mldsa44-ed25519,webauthn-sk-ecdsa-sha2-nistp256@openssh.com> debug1: kex_ext_info_check_ver: publickey-hostbound@openssh.com=<0> debug1: kex_ext_info_check_ver: ping@openssh.com=<0> debug1: kex_ext_info_check_ver: agent-forward=<0> debug1: SSH2_MSG_SERVICE_ACCEPT received debug1: SSH2_MSG_EXT_INFO received debug1: kex_ext_info_client_parse: server-sig-algs=<ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ssh-ed25519@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com,rsa-sha2-512,rsa-sha2-256,ssh-mldsa44-ed25519,webauthn-sk-ecdsa-sha2-nistp256@openssh.com> debug1: Authentications that can continue: publickey,password,keyboard-interactive debug1: Next authentication method: publickey debug1: Will attempt key: /home/fred/.ssh/id_rsa debug1: Will attempt key: /home/fred/.ssh/id_ecdsa debug1: Will attempt key: /home/fred/.ssh/id_ecdsa_sk debug1: Will attempt key: /home/fred/.ssh/id_ed25519 debug1: Will attempt key: /home/fred/.ssh/id_ed25519_sk debug1: Will attempt key: /home/fred/.ssh/id_mldsa44_ed25519 debug1: Trying private key: /home/fred/.ssh/id_rsa debug1: Trying private key: /home/fred/.ssh/id_ecdsa debug1: Trying private key: /home/fred/.ssh/id_ecdsa_sk debug1: Trying private key: /home/fred/.ssh/id_ed25519 debug1: Trying private key: /home/fred/.ssh/id_ed25519_sk debug1: Trying private key: /home/fred/.ssh/id_mldsa44_ed25519 debug1: Next authentication method: keyboard-interactive debug1: Authentications that can continue: publickey,password,keyboard-interactive debug1: Next authentication method: password Authenticated to server.example.org ([198.51.100.20]:22) using "password". debug1: channel 0: new session [client-session] (inactive timeout: 0.000000) debug1: Requesting no-more-sessions@openssh.com debug1: Entering interactive session. debug1: pledge: filesystem debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0 debug1: client_input_hostkeys: searching /home/fred/.ssh/known_hosts for server.example.org / (none) debug1: client_input_hostkeys: searching /home/fred/.ssh/known_hosts2 for server.example.org / (none) debug1: client_input_hostkeys: hostkeys file /home/fred/.ssh/known_hosts2 does not exist debug1: client_input_hostkeys: no new or deprecated keys from server debug1: pledge: fork debug1: client_input_channel_req: channel 0 rtype keepalive@openssh.com reply 1 debug1: client_input_channel_req: channel 0 rtype keepalive@openssh.com reply 1 debug1: client_input_channel_req: channel 0 rtype keepalive@openssh.com reply 1 Last login: Sat Mar 14 21:31:33 2015 from 192.0.2.111 ... </syntaxhighlight> The same login with the maximum of verbosity, '''-vvv''', gives around 239 lines of debugging information. The following will save the debugging information separately in a file, '''ssh-client.log''', in the home directory. <syntaxhighlight lang="shell-session"> $ ssh -vvv -E ~/ssh-client.log -l fred somehost.example.org </syntaxhighlight> ===Capturing Client Debugging Information Together with the Session Contents=== Regular pipes and redirects work only with '''stdout''' so that if '''-E''' is not used to capture debugging output the output on '''stderr''' must instead be sent to '''stdout''' if one is going to capture it at the same time as the actual session. That is done with an extra redirect, '''2>&amp;1''' to capture '''stderr'''. Mind the spaces, or lack of them. The following will capture both the session text and the debugging information to a file, '''ssh-client.log''', in the home directory: <syntaxhighlight lang="shell-session"> $ ssh -vvv -l fred somehost.example.org 2>&1 | tee ~/ssh-output.log </syntaxhighlight> The tool [http://man.openbsd.org/tee.1 tee(1)] is like a T-pipe and sends output two directions, one to '''stdout''' and one to a file. ===Changing Client Debugging Levels At Runtime or On The Fly=== At run-time, when establishing a new connection, just use the '''-v''' option. <syntaxhighlight lang="shell-session"> $ sftp -v -o "IdentityFile=~/.ssh/weblog.key_ed25519" fred@server.example.org </syntaxhighlight> The debugging verbosity on the client can be increased just like on the server. <syntaxhighlight lang="shell-session"> $ sftp -vvv -o "IdentityFile=~/.ssh/weblog.key_ed25519" fred@server.example.org </syntaxhighlight> The extra information can be useful to see exactly what is being sent to or requested of the server. After the fact, once a connection is established, the escape sequences '''~v''' and '''~V''' can be used to increase or decrease, respectively, the verbosity on the fly. Through them it is possible to change the verbosity of the client in an established connection. When increasing the log level with '''~v''', the client raises its log level to VERBOSE, DEBUG, DEBUG2, and DEBUG3, in that order, if starting from the default of INFO. Conversely, when lowering the log level with '''~V''', the client will descend through ERROR, FATAL, to QUIET if starting from the default of INFO. ==Debugging and Troubleshooting== The server logs are your best friend when troubleshooting. It may be necessary to turn up the log level there temporarily to get more information. It is then also necessary to turn them back to normal after things are fixed to avoid privacy problems or excessively use of disk space. For example, the SFTP-subsystem logging defaults to ERROR, reporting only errors. To track transactions made by the client, change the log level to INFO or VERBOSE: <syntaxhighlight lang="apache" line="1"> Subsystem internal-sftp -l INFO </syntaxhighlight> Caution. Again, operating with elevated logging levels would violate the privacy of users, in addition to filling a lot of disk space. Elevated logging levels should generally not be used in production once the changes are figured out. Even then, the elevated log messages should really be sent to a separate log file during the time they are being collected. By default, some systems send only the normal messages to the regular system log files and ignore the elevated messages. Some save all the messages by default. If the elevated system log messages are not showing up in any of the system logs, that may be the reason. Either way, check the system log configurations and make sure that the extra messages are only sent to a separate log file and not mixed in with the regular system logs. Change the configuration to do that, if necessary. Separating the extra messaging helps keep the logs tidy as well as protecting privacy. The system log settings are found in the system log daemon's configuration file, the exact name of which will vary depending on what is installed, but common ones are [https://man.openbsd.org/syslog.conf.5 syslog.conf(5)] and rsyslog.conf(5). Notice that the configuration below has the all messages including the more detailed VERBOSE, and on up through DEBUG3, messages for the AUTH facility going to a separate log file from the regular AUTH messages: <syntaxhighlight lang="shell-session"> $ grep '^auth\.' /etc/syslog.conf auth.info /var/log/authlog auth.* /var/log/authdebug </syntaxhighlight> See [https://man.openbsd.org/syslog.3 syslog(3)] for the log facilities and log levels. It is best to limit the time the debugging information is collected to be as short as possible and to actively watch the logs while the extra information is being collected. However, if the more verbose logging is running for any length of time, and especially if it is left unattended even for a short while, be sure to remember to add the new log file to the log rotation schedule so that it cannot fill up the partition. Note, logs might be handled by other services on some systems. Check with the official documentation for your system to be sure. On the client side, '''Match''' blocks can help further by setting log levels for specific situations and avoid a situation where everything is logged intensely. The manual pages for OpenSSH are very well written and many times problems can be solved by finding the right section within the right manual page. At the very minimum, it is important to skim through the four main manual pages for both the programs and their configuration to become familiar with at least the section headings. * [http://man.openbsd.org/ssh.1 ssh(1)] * [http://man.openbsd.org/ssh_config.5 ssh_config(5)] * [http://man.openbsd.org/sshd.5 sshd(8)] * [http://man.openbsd.org/sshd_config.5 sshd_config(5)] Once the right section is found in the manual page, read it in detail and become familiar with its contents. The same goes for the other OpenSSH manual pages, depending on the activity. Be sure to use the version(s) of OpenSSH actually in use on your system(s) with their corresponding manual pages. When possible, use those that are installed on your system so as to avoid a mismatch. In some cases, the client and the server will be of different versions, so the manual pages for each must be looked up separately. It is also a good idea to review OpenSSH's release notes when a new version is published. With a few exceptions below, specific examples of troubleshooting are usually given in the cookbook section relevant to a particular activity. So, for example, sorting problems with authentication keys is done in the section on [[OpenSSH/Cookbook/Authentication_Keys|Public Key Authentication]] itself. ===Debugging a script, configuration or key that uses sudo(8)=== Usually log levels only need to be changed when writing and testing a script, a new configuration, some new keys, or all three at once. When working with '''sudo(8)''', it is especially important to see exactly what the client is sending so as to enter the right pattern into '''/etc/sudoers''' for safety. Using the lowest level of verbosity, the exact string being sent by the client to the remote server is shown in the debugging output: <syntaxhighlight lang="shell-session"> $ rsync -e "ssh -v -i /home/webmaint/.ssh/bkup_key -l webmaint" \ -a server.example.org:/var/www/ var/backup/www/ ... debug1: Sending command: rsync --server --sender -logDtpre.iLsfxCIvu . /var/www/ ... </syntaxhighlight> What '''sudoers''' then needs is something like the following, assuming account 'webmaint' is in the group 'webmasters': <syntaxhighlight lang="apache" line="1"> %webmasters ALL=(ALL) NOPASSWD: /usr/local/bin/rsync --server \ --sender -logDtpre.iLsfxCIvu . /var/www/ </syntaxhighlight> The same method can be used to debug new server configurations or key logins. Once things are set to run as needed, the log level settings can be lowered back to INFO for [http://man.openbsd.org/sshd.8 sshd(8)] and to ERROR for '''internal-sftp'''. Additionally, once the script is left to run in fully automated mode, the client logging information can be set use the [http://man.openbsd.org/syslog.3 syslog(3)] system module instead of '''stderr''' by using the '''-y''' option when [http://man.openbsd.org/ssh ssh(1)] is launched. ===Debugging a server configuration=== Running the server in debug mode provides a lot of information about the connection and a smaller amount about the server configuration. The server's debugging level ('''-d''') can be raised once, twice ('''-dd''') or thrice ('''-ddd'''). <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -d </syntaxhighlight> Note that in this case the server does not detach and become a daemon, so it will terminate when the SSH connection terminates. The advantage is this collects the logs for one single session and only that session. The server must be started again in order to make a subsequent connection from the client. Though in some ways this is a hassle, it does make sure that session data is a unique set and not mixes of multiple sessions and thus possibly different configurations. Alternately, another option ('''-e''') when debugging sends the debugging data to '''stderr''' instead in order to keep the system logs clean. It is also possible to log the debugging data from the system logs directly to a separate file and keep noise out of the system logs. Since OpenSSH 6.3, the option '''-E''' will append the debug data to a particular log file instead of sending it to the system log. This facilitates debugging live systems without cluttering the system logs. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -E /home/fred/sshd.debug.log -d </syntaxhighlight> In really old versions of OpenSSH, which are hopefully no longer in production, if you need to save output to a file while still viewing it live on the screen, you can use '''tee(1)'''. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -ddd 2>&1 | tee /tmp/foo </syntaxhighlight> That will save output to the file ''foo'' by redirecting to '''stdout''' what [http://man.openbsd.org/sshd.8 sshd(8)] sent to '''stderr''' and saving it to a file. This works with really old versions of OpenSSH, but the '''-E''' option above is preferable. If the server is remote and it is important to reduce the risk of getting locked out, the experiments on the configuration file can be done with a second instance of [http://man.openbsd.org/sshd.8 sshd(8)] using a separate configuration file and listening to a high port until the settings have been tested. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -dd -p 22222 -f /home/fred/sshd_config.test </syntaxhighlight> If the OpenSSH server's configuration file is set to listen on odd ports or more than one port using the '''ListenAddress''' directive, then that can also be overriden so that the server listens on the extra port. <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -o 'ListenAddress 0.0.0.0:22222' -dd \ -f /home/fred/sshd_config.test </syntaxhighlight> It is also possible to make an extended test ('''-T''') of the configuration file first. If there is a syntax error, it will be reported, but remember that even sound configurations can still lock you out. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -T | sort | less -X </syntaxhighlight> The extended test mode can be used by itself, but it is also possible to specify custom parameters to use with '''-C''' to see what happens with specific kinds of connections. [http://man.openbsd.org/sshd.8 sshd(8)] will the connection. It will then process the configuration file in light of the parameters passed to it and return output with the modified results. This is good for showing the results of any '''Match''' directives which might apply to the session. The variables ''user'', ''host'', and ''addr'' are the minimum required when passing specific connection parameters to [http://man.openbsd.org/sshd.8 sshd(8)] for evaluation with the '''-C''' option . The following options will print out the configurations that will be applied when the user ''fred'' tries to log in to the host ''server.example.org'' from the address ''192.0.2.15'': <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -T -C user=fred,host=server.example.org,addr=192.0.2.15 </syntaxhighlight> Two more parameters, ''laddr'' and ''lport'', may also be passed. They refer to the server's IP number and port connected to. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -T -C user=fred,host=server.example.org,addr=192.0.2.15,laddr=192.0.2.2,lport=2222 </syntaxhighlight> And lastly, there is a parameter ''rdomain'' to specify the routing domain or routing table to try. Between those six variables it should be possible to describe any possible incoming connection. ====Adding Timestamps to Server Debugging Output==== The '''-d''' option increases the value for '''LogLevel''' but does not prepend any timestamps to the server's output. Timestamps can nevertheless be added on the fly by writing the debug logs to '''stderr''' using the '''-e''' option, redirecting '''stderr''' to '''stdout''', and then piping that into [https://man.openbsd.org/ts ts(1)], a timestamping utility. <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -p 2222 -e -d 2>&1 | ts "%.T" | tee /tmp/sshd.log </syntaxhighlight> That will show the time, including microseconds. Mind the dot there before the letter 'T'. The options '''-i''' and '''-s''' for [https://man.openbsd.org/ts ts(1)] can be relevant, too. The '''-i''' option will measure the relative time between the timestamps themselves. The '''-s''' option will show the time elapsed since the start of the program. Other custom date and time formats can be specified as per [https://man.openbsd.org/strftime strftime(3)], if needed. When [https://man.openbsd.org/ts ts(1)] is not already present it can usually be added via the moreutils package. Although some systems, such as OpenBSD, include it in the base system. If it is not already installed and not available for installation, then Perl can be used on POSIX systems to prepend a timestamp to '''stdin''': <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -p 2222 -e -d 2>&1 \ | perl -p -e 'use POSIX strftime; print strftime("%F %T ", localtime)' \ | tee /tmp/sshd.log </syntaxhighlight> However, that only provides an accuracy of whole seconds. If more precision is needed, then Python3 can provide timestamps with precision down to the microsecond. <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -p 2222 -e -d 2>&1 \ | python -c 'import datetime; import sys; [print (datetime.datetime.now(), flush=True) for line in sys.stdin]' \ | tee /tmp/sshd.log </syntaxhighlight> Note that the Python approach requires explicitly setting the buffer to flush automatically. Some non-POSIX shells can make use of [https://mywiki.wooledge.org/ProcessSubstitution process substitution] to pipe '''stderr''' output into another program. <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -p 2222 -e -d 2> >(ts) | tee /tmp/sshd.log | less -X </syntaxhighlight> There are even fancier approaches using IO redirection on extra file descriptors, but those are far outside the scope of this book. ===Debugging a client configuration=== Sometimes when debugging a server configuration it is necessary to track the client configurations settings, as well. Since OpenSSH 6.8, the '''-G''' option makes [http://man.openbsd.org/ssh.1 ssh(1)] print its configuration after evaluating any '''Host''' and '''Match''' blocks and then exit without connecting. That allows viewing of the exact configuration options which will actually be used by the client for a particular session. <syntaxhighlight lang="shell-session"> $ ssh -G -l fred server.example.org | sort </syntaxhighlight> Client configuration is determined in three ways. The first is by run-time options, then by the account's own configuration file, or lastly the system-wide client configuration file. The priority is in that order. Whichever value is found first gets used. With [http://man.openbsd.org/sftp.1 sftp(1)] the options are also passed to [http://man.openbsd.org/ssh.1 ssh(1)]. ====Invalid or Outdated Ciphers or MACs==== A proper client will show the details of the failure. For a bad Message Authentication Code (MAC), a proper client might show something like the following when trying to foist a bad MAC like hmac-md5-96 onto the server: <syntaxhighlight lang="text"> no matching mac found: client hmac-md5-96 server umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1 </syntaxhighlight> And for a bad cipher, a proper client might show something like this when trying to foist an arcfour cipher on the server: <syntaxhighlight lang="text"> no matching cipher found: client arcfour server chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com </syntaxhighlight> Sometimes when troubleshooting a problem with the client it is necessary to turn to the server logs. In [https://www.openssh.org/txt/release-6.7 OpenSSH 6.7 unsafe MACs were removed] and in [https://www.openssh.org/txt/release-7.2 OpenSSH 7.2 unsafe ciphers were removed], but some third-party clients may still try to use them to establish a connection. In that case, the client might not provide much information beyond a vague message that the server unexpectedly closed the network connection. The server logs will, however, show what happened: <syntaxhighlight lang="text"> fatal: no matching mac found: client hmac-sha1,hmac-sha1-96,hmac-md5 server hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160 [preauth] </syntaxhighlight> More recent versions would show a simpler error for a bad MAC. <syntaxhighlight lang="text"> fatal: Unable to negotiate with 192.0.2.37 port 55044: no matching MAC found. Their offer: hmac-md5-96 [preauth] </syntaxhighlight> A bad cipher would be reported like this: <syntaxhighlight lang="text"> fatal: Unable to negotiate with 192.0.2.37 port 55046: no matching cipher found. Their offer: arcfour [preauth] </syntaxhighlight> The error message in the server log might not say which MACs or ciphers are actually available. For those, the extended test mode can be used to show the server settings and, in particular, the MACs or ciphers allowed. In its most basic usage the extended test mode would just be '''-T''', as in <code>/usr/sbin/sshd -T | grep -E 'cipher|macs'</code> with no other options. For more details and options, see the previous section on "Debugging a server configuration" above. One solution there is to upgrade the client to one that can handle the right ciphers and MACs. Another option is to switch to a different client, one that can handle the modern ciphers or MACs. See also the configuration directive '''WarnWeakCrypto''' in the manual page. It has been around since 10.1. The default for '''WarnWeakCrypto''' is 'yes'. ===Debugging Key-Based Authentication=== The most common causes of failure for public key authentication seem to be for either of two reasons: * Mangling the public key on the way to getting it into '''authorized_keys''' on the server * Incorrect permissions for the files and directories involved, ether on the client or the server. These are the directory for the keys, usually '''~/.ssh/''', or its parent directories, or the '''authorized_keys''' file, or the private key itself. As of the time of this writing, it looks like pretty much every failure of key-based authentication described on mailing lists and forums is solved by addressing either or both of those two situations. So, when encountering the error message ''Permission denied (publickey,keyboard-interactive)'', or similar, see the section on [[OpenSSH/Cookbook/Public Key Authentication|Public Key Authentication]]. Also be sure to read the manual page for [http://man.openbsd.org/sshd.8 sshd(8)] and its section on authorized keys. Usually, though not always, it will be obvious when the private key's permissions are incorrect: <syntaxhighlight lang="shell-session"> $ ssh -i ~/.ssh/fred-193.ed25519 fred@192.0.2.193 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0664 for '/home/fred/.ssh/fred-193.ed25519' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. Load key "/home/fred/.ssh/fred-193.ed25519": bad permissions </syntaxhighlight> In addition mangled public keys in the authorized keys file and to incorrect permissions, a very rare third case is if the public and private key files don't match and are not from the same key pair. As mentioned in the section on [[OpenSSH/Cookbook/Public Key Authentication|Public Key Authentication]], the public and private keys need to be parts of the same key pair so that they match. That is because even before the SSH client uses private key cryptographically, it looks at the file name of the proposed private key and then sends the public key matching that same name, if it exists, to the server. If that public key does not match the public key on the server in '''authorized_keys''' then the connection will be denied with the error ''Permission denied (publickey,keyboard-interactive)'' or similar. That alone is a very good reason to give unique descriptive file names when creating keys. Note that as mentioned above there are usually other causes to that same error message besides having mismanaged the public key file on the client machine. The file names for both parts of each key pair have to be kept synchronized so that the names match. As for a solution, the way out in the long term is to stay organized and carefully manage the keys and their file names. It can be solved on the short term by deleting the offending ''public'' key file and then using the private key to regenerate a new one, replacing the incorrect public key under that name. Again, this is an unusual edge case and not a common cause of that error. ====SSH Too Many Authentication Failures==== When there are multiple keys in the authentication agent, the client will try them against the server in the same order in which they were added to the agent. However, on odd or older agents they are returned in an unpredictable order. Newer versions allow the client to query the server to see if a particular key is acceptable. This is set by the '''PubkeyAuthOptions''' and is counted separately from the '''MaxAuthTries''' directive. When the former are used up, then the additional tries count against the latter. Either way, if the client happens to cycle through enough of the wrong keys first and hits the server's '''MaxAuthTries''' limit before finding the right key, the server will naturally break off the connection with an error message on the server about too many authentication failures: <syntaxhighlight lang="text"> Disconnecting authenticating user fred 203.0.113.110 port 35893: Too many authentication failures [preauth] </syntaxhighlight> Or in earlier versions: <syntaxhighlight lang="text"> "Received disconnect from 203.0.113.110 port 22:2: Too many authentication failures Authentication failed." </syntaxhighlight> When that happens, the client side will show this error: <syntaxhighlight lang="text"> Received disconnect from server.example.org port 22:2: Too many authentication failures Disconnected from server.example.org port 22 </syntaxhighlight> With increased verbosity, the specific keys tested and rejected will also be shown by the client. Newer clients will include the key's comment, if available, and not just the fingerprint. The keys get tried first from the agent in the order in which they were loaded into the agent, then from : <syntaxhighlight lang="shell-session"> $ ssh -v 203.0.113.110 . . . hdebug1: Offering public key: a key for fred ED25519 SHA256:7e5qkSHxSp8xitlM4JP4dOeCdnQn Vt9q6GPaB0+IrSM agent debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering public key: fred's key ED25519 SHA256:8U7Fy6nJxbxfAu0K8WXZV0WN80t/ 4lb/f9bqObw0isE agent debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering public key: one more comment ED25519 SHA256:F61Sx2t4BmoHASuMCVrBd8C30A7S QdGPwgfb7ZGWZf0 agent debug1: Authentications that a publickey,keyboard-interactive debug1: Offering public key: fred@desk.example.org ED25519 SHA256:TMfO5S6oBQ0Cu273yPp9+7carGP926kRfg6iS435cmU agent debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering public key: yet one more key ED25519 SHA256:36tMBWe4kX9hyVLZaxyjm2pp1TMFbRw0+O1xWOU5Fgk agent debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering public key: the last straw ED25519 SHA256:gNZd1TF48UgEUgoYFNXop9tEhO53If1qiDqZyKbRT4U agent Received disconnect from 203.0.113.110 port 2222:2: Too many authentication failures Disconnected from 203.0.113.110 port 2222 </syntaxhighlight> Each key in the agent also gets an annotation which says whether or not the key file was supplied by the user, either in the configuration file or as a run-time argument. For the former, it will marked with 'agent' and for the latter two as 'explicit'. The client prefers keys that are currently in the agent in the order in which they were added to the agent. Then it will try the one(s) added via run-time arguments, in the order in which they are supplied. Then, lastly, it will try the one(s) specified in the client configuration file. Or in earlier versions the file name used to load the key will be listed by the client in verbose mode, but the order will be less predictable: <syntaxhighlight lang="shell-session"> $ ssh -v 203.0.113.110 ... debug1: SSH2_MSG_SERVICE_ACCEPT received debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Next authentication method: publickey debug1: Offering RSA public key: /home/fred/.ssh/key.06.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.02.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.03.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.04.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.01.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.05.rsa Received disconnect from port 22:2: Too many authentication failures Authentication failed. </syntaxhighlight> In the older clients, the client prefers keys that were specified in the configuration and are also currently in the agent. Then it will try try them in the order in which they were supplied. [3] <ref name="key_order">{{cite mailing list | url=https://lists.mindrot.org/pipermail/openssh-unix-dev/2019-April/037700.html | title=IdentityFile vs IdentitiesOnly | date=2019-04-01 | accessdate=2019-04-04 | mailinglist=openssh-unix-dev | last=Tucker |first=Darren }}</ref> There are two solutions if you see the ''Too many authentication failures'' error: One way around this error is to remove keys from the agent one at a time using [http://man.openbsd.org/ssh-add.1 ssh-add(1)] with the '''-d''' option until there is just the right key left. Refer to each key by its file system path, for example: <code>ssh-add -d ~/.ssh/some.key.rsa</code> Because the private key to be removed is looked up in the agent based on the corresponding public key both files must exist. Without matching a public key file, the private key cannot be removed individually from the authentication agent. Instead the whole lot may be removed all at once using the '''-D''' option. However, is not always practical to do either when many remote systems are used frequently and the agent needs to be kept well-stocked. This is probably not the most practical way. Another way around this error, and probably the most practical method, is to limit the client to trying only a specific key using the '''IdentitiesOnly''' configuration directive in conjunction with the '''IdentityFile''' configuration directive. The latter points explicitly to the right key. Both can be added either as run-time options or in the client's configuration file. As a runtime option, they can be used like this: <syntaxhighlight lang="shell-session"> $ ssh -o IdentitiesOnly=yes -i ~/.ssh/server14.example.org.rsa -l fred server14.example.org </syntaxhighlight> Those settings can be stored permanently by adding something like the following '''IdentitiesFile''' and '''IdentitiesOnly''' directives to the client configuration file instead. <syntaxhighlight lang="apache" line="1"> Host server14 server14.example.org HostName server14.example.org IdentitiesOnly yes IdentityFile /home/fred/.ssh/server14.example.org.rsa User fred </syntaxhighlight> In that way, the server could be reached with either the short name or the fully qualified domain name, whatever names are listed under the '''Host''' stanza. <syntaxhighlight lang="shell-session"> $ ssh server14 </syntaxhighlight> Remember that options are selected from the client configuration file on a first-match basis. Because the first-match wins, specific rules must come before more general rules in the client configuration file. ====Signing Failed for ... Agent Refused Operation==== As mentioned, incorrect permissions on client files or directories are a common cause of authentication failure when attempting key-based authentication. Not all the errors are clear about that, however. Here is an example of a misleading error message which is actually caused by incorrect permissions: <syntaxhighlight lang="shell-session"> $ ssh -i ~/.ssh/key-ed25519 fred@server.example.org sign_and_send_pubkey: signing failed for ED25519 "/home/fred/.ssh/key-ed25519" from agent: agent refused operation fred@server.example.org: Permission denied (publickey). </syntaxhighlight> The solution for that is to ensure that no other accounts can read or write to the private key. No others should be able to write to the '''.ssh''' directory or its parent either. ===Debugging Chrooted SFTP Accounts=== With chrooted SFTP sessions, the most common problem seems to be bad directory permissions. The chroot directory, and all directories above it, must be owned by root and not writable by any other user or group. Even though these directories' group memberships do not have to be root, if any of them is not root then it must not be group writable either. Failure to use the correct ownership will result in not being able to log in with the affected accounts. The errors when login is attempted can look like this from the client side: <syntaxhighlight lang="shell-session"> $ sftp fred@192.0.2.206 fred@192.0.2.206's password: Connection to 192.0.2.206 closed by remote host. Connection closed. </syntaxhighlight> Older clients will look like this: <syntaxhighlight lang="shell-session"> $ sftp fred@192.0.2.206 fred@192.0.2.206's password: packet_write_wait: Connection to 192.0.2.206: Broken pipe Couldn't read packet: Connection reset by peer </syntaxhighlight> The error message is much clearer on the server side: <syntaxhighlight lang="text"> Aug 4 23:52:38 server sshd[7075]: fatal: bad ownership or modes for chroot directory component "/home/fred/" </syntaxhighlight> Check the directory permissions for the chroot target and all directories above it. If even one is off it must be fixed so that it is owned by root and not writable by any others. There are many, many routes to get there. Here are two was to set up chroot permissions: * One quick way to fix the permissions is to change both ownership and group membership of the directory to root. Same for all directories above the chroot target. <syntaxhighlight lang="shell-session"> $ ls -lhd /home/ /home/fred/ drwxr-xr-x 3 root root 4.0K Aug 4 20:47 /home/ drwxr-xr-x 8 root root 4.0K Aug 4 20:47 /home/fred/ </syntaxhighlight> That will work with the '''ChrootDirectory''' directive set to '''%h''' but has some drawbacks that will quickly become obvious when adding files or directories. * Another easy way to fix the permissions is to change both the account's home directory and the '''ChrootDirectory''' directive. Arrange the account's home directory so that it is under a unique directory owned by root, such as the user name itself: <syntaxhighlight lang="shell-session"> $ ls -lhd /home/ /home/fred/ /home/fred/fred/ drwxr-xr-x 3 root root 4.0K Aug 4 20:47 /home/ drwxr-x--- 3 root fred 4.0K Aug 4 20:47 /home/fred/ drwxr-x--- 8 fred fred 4.0K Aug 4 20:47 /home/fred/fred/ </syntaxhighlight> Then chroot the account to the parent directory and combine that with an alternate starting directory working from the user name token with the '''-d''' option for the SFTP server. <syntaxhighlight lang="apache" line="1"> ChrootDirectory /home/%u ForceCommand internal-sftp -d %u </syntaxhighlight> That way, when the account connects it will see only its own directory and no other parts of the system. ===Debugging RC Scripts Interfering with SFTP Sessions=== Recent versions of the server do not launch either '''/etc/ssh/sshrc''' or '''~/.ssh/rc''' when initiating an SFTP session. However, on older versions, these scripts will get executed for both SFTP and SSH, if present and the server is configured to run them. Therefore, in older versions one common mistake is when either '''/etc/ssh/sshrc''' or '''~/.ssh/rc''' send anything at all to '''stdout''' instead of being quiet. The SFTP connection will drop when there are any extraneous data either direction on '''stdin''', whether from the client or the server. The reason is that the output to '''stdout''' on the server is received by the client on '''stdin''' but matches no correct protocol and thus causes the client to disconnect with an error. However, even in the case of using the RC scripts, the response from the server must remain 8-bit clean or an error will occur: <syntaxhighlight lang="shell-session"> $ sftp server.example.org Received message too long 1400204832 </syntaxhighlight> That one message will be the main clue. Increasing the verbosity of the SFTP client with '''-v''' won't provide more relevant information. Upgrading [http://man.openbsd.org/sshd.8 sshd(8)] might be a more practical option, when possible. When the RC scripts cause the SFTP client to disconnect, the standard server logs will show only that the client disconnected and not provide any information about why. At higher levels of logging, some extraneous reads and corresponding discards might be noticed but that is all. Below is a log sample recorded at the verbosity DEBUG3 showing such an example. <syntaxhighlight lang="text"> ... debug2: subsystem request for sftp by user fred debug1: subsystem: exec() /usr/libexec/sftp-server Starting session: subsystem 'sftp' for fred from 198.51.100.38 port 37446 id 0 ... debug2: channel 0: read 13 from efd 12 debug3: channel 0: discard efd debug2: channel 0: read 12 from efd 12 debug3: channel 0: discard efd debug2: channel 0: read 15 from efd 12 debug3: channel 0: discard efd debug2: channel 0: read 18 from efd 12 debug3: channel 0: discard efd ... </syntaxhighlight> Again, new versions won't run the RC scripts when connecting for an SFTP session. On older versions, neither RC script is may produce any output on '''stdout''' during use of SFTP or it will ruin the connection. If an RC script does produce output, it must be redirected to a system log, to a file, or sent to '''stderr''' instead of '''stdout'''. Regular interactive SSH connections are not disturbed by use of '''stdout''' and the client will just display whatever is sent. See the manual page for [http://man.openbsd.org/sshd.8 sshd(8)] in the section "SSHRC" for more. The same restriction goes for any other part of the SSH service which runs over '''stdin''' and '''stdout''', such as '''ProxyJump''' or some uses of '''ProxyCommand'''. So another example of potential interference would be when using '''LocalCommand''' with the client to specify a command to execute on the local machine after successfully connecting to the server. Any output from it also needs to be redirected to '''stderr'''. If '''LocalCommand''' ends up interfering with '''ProxyJump''' then the connection will appear to hang at the stage when '''stdout''' gets used. ===Debugging When An SSH Agent Has The Correct Private Key But Does Not Use It=== In older versions of OpenSSH, the public key must also be available on the client at the time the private key is loaded into the agent. If it is not then without the matching public key the agent will not be able to use that private key unless other arrangements are made. A symptom of this is although specifying the key via a run-time argument works, the same key does not work via the agent. Upgrading to a more recent version of OpenSSH is a better option. Otherwise a work-around is to specify the private key either as a run-time argument to the client or in the [http://man.openbsd.org/ssh_config.5 ssh_config(5)] file, from there the client will find the correspondingly named public key file. Importantly the client will still use the key in the agent yet use the designated matching public key file, so the private key file does not have to contain anything at all and could even be empty. <syntaxhighlight lang="shell-session"> $ ssh -i some_key_ed25519 fred@server.example.org </syntaxhighlight> However, if it is undesirable to have the private key accessible on the file system or if the private key is only in the agent and not itself available via the file system, then the public key can be specified explicitly instead. <syntaxhighlight lang="shell-session"> $ ssh -i some_key_ed25519.pub fred@server.example.org </syntaxhighlight> Either way, another approach is to name the key in [http://man.openbsd.org/ssh_config.5 ssh_config(5)] using the '''IdentityFile''' configuration directive. When a public key file is missing, it can easily be regenerated from the private key using [http://man.openbsd.org/ssh-keygen.1 ssh-keygen(1)] with the '''-y''' option. ==SSH Client Error Messages And Common Causes== As rehash of the above, below are some client-side error messages with some of the more common reasons<ref name="troubleshooting">{{cite web | url=https://ittavern.com/ssh-troubleshooting-guide/ | title=SSH Troubleshooting Guide | date=2023-01-17 | publisher=IT Tavern | access-date=2023-01-26 }}</ref> for those messages. Neither list of errors nor the reasons for the errors are comprehensive. The suggestions for causes just touch on one or two of the commonly seen reasons. There is no substitute for checking the actual logs, especially on the server. The server log files are usually '''/var/log/auth.log''' on most system or a variant of that name. Occasionally you will find the information in the file '''/var/log/secure''' instead. '''No address associated with name:''' <syntaxhighlight lang="shell-session"> $ ssh nonesuch.example.org ssh: Could not resolve hostname nonesuch.example.org: no address associated with name </syntaxhighlight> The destination's host name does not exist in DNS. Was it spelled correctly? '''Operation timed out:''' <syntaxhighlight lang="shell-session"> $ ssh 198.51.100.89 ssh: connect to host 198.51.100.89 port 22: Operation timed out </syntaxhighlight> There's not a system associated with that IP address, or else a packet filter is causing trouble. '''Connection timed out:''' <syntaxhighlight lang="shell-session"> $ ssh 198.51.100.89 ssh: connect to host 198.51.100.89 port 22: Connection timed out </syntaxhighlight> You can't get there from here. It is probable that the destination machine is disconnected from the network or that the network which it is on is not reachable. '''Connection refused:''' <syntaxhighlight lang="shell-session"> $ ssh www.example.org ssh: connect to host www.example.org port 22: Connection refused </syntaxhighlight> The destination system exists but there is no SSH service available at the port being tried. Is the destination right? It might be the wrong system, SSH might not be running at all, SSH might be listening on another port, or a packet filter might be blocking connections. '''Permission denied:''' <syntaxhighlight lang="shell-session"> $ ssh www.example.org fred@www.example.org: Permission denied (publickey,keyboard-interactive). </syntaxhighlight> That is usually a sign of a problem caused by the wrong user name, wrong authentication method, wrong SSH key or SSH certificate, or wrong file permissions in the authorized keys file on the destination system. If it is a matter of SSH key-based authentication, see the chapter on [[OpenSSH/Cookbook/Public_Key_Authentication | Public Key Authentication]] for more thorough coverage. If it is a question of SSH certificates, see the corresponding [[OpenSSH/Cookbook/Certificate-based_Authentication‎ | Certificate-based Authentication]] chapter. It can also be a matter of server-side settings with '''AllowGroups''', '''DenyGroups''', or similar configuration directives at the destination. Any of those possibilities can really only be identified and solved by checking the log output from [http://man.openbsd.org/sshd.8 sshd(8)]. '''No matching host key type found:''' <syntaxhighlight lang="shell-session"> $ ssh www.example.org Unable to negotiate with 198.51.100.89 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss </syntaxhighlight> The SSH daemon on that server is really outdated. Contact the system administrator about an upgrade and get them moving. More details can be seen with the '''-v''' option on the client. <syntaxhighlight lang="shell-session"> $ ssh -v fred@example.org ... debug1: SSH2_MSG_KEXINIT received debug1: kex: algorithm: diffie-hellman-group-exchange-sha256 debug1: kex: host key algorithm: (no match) Unable to negotiate with 198.51.100.89 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss </syntaxhighlight> In the above shell session, it is the server which is badly in need of an update as shown by the deprecated key exchange algorithms which it tries to use. Again, for emphasis, the solution is to update the outdated software. If a specific, old version of an particular operating system absolutely must be used for a while longer, see about getting a back port of the SSH daemon. Many GNU/Linux distros even have specific back port repositories. If you would like to see which key exchange algorithms the client supports try using the '''-Q''' option. <syntaxhighlight lang="shell-session"> $ ssh -Q kex diffie-hellman-group1-sha1 diffie-hellman-group14-sha1 diffie-hellman-group14-sha256 diffie-hellman-group16-sha512 diffie-hellman-group18-sha512 diffie-hellman-group-exchange-sha1 diffie-hellman-group-exchange-sha256 ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521 mlkem768nistp256-sha256 curve25519-sha256 curve25519-sha256@libssh.org sntrup761x25519-sha512 sntrup761x25519-sha512@openssh.com mlkem768x25519-sha256 </syntaxhighlight> <noinclude>{{OpenSSH/TOC|mini}}</noinclude> {{BookCat}} {{status|100%}} 0wtruqolp8n6w9pc5dxuzbq6ms8hq57 4675299 4675298 2026-10-09T15:46:35Z Larsnooden 430753 typo 4675299 wikitext text/x-wiki Both the OpenSSH client and server offer a lot of choice as to where the logs are written and how much information is collected. A prerequisite for logging is having an accurate system clock using the Network Time Protocol, NTP, or equivalent, service which provides ongoing time synchronization with rest of the world. The more accurate the time stamp in the log is, the faster it is to coordinate forensics between machines or sites or service providers. If you have to contact outside parties like a service provider, progress can usually only be made with very exact times. ==Server Logs== By default [http://man.openbsd.org/sshd.8 sshd(8)] sends logging information to the system logs using the log level INFO and the system log facility AUTH. So the place to look for log data from [http://man.openbsd.org/sshd.8 sshd(8)] is in '''/var/log/auth.log'''. These defaults can be overridden using the '''SyslogFacility''' and '''LogLevel''' directives. Below is a typical server startup entry in the authorization log. <syntaxhighlight lang="text"> Mar 19 14:45:40 server sshd[21157]: Server listening on 0.0.0.0 port 22. Mar 19 14:45:40 server sshd[21157]: Server listening on :: port 22. </syntaxhighlight> In most cases the default level of logging is sufficient, but during initial testing of new services or activities it is sometimes necessary to have more information. Debugging info usually goes to '''stderr'''. Starting with OpenSSH 7.6, '''Match''' blocks can set alternate log levels for specific conditions. The log excerpt below show the same basic server start up with increased detail. Contrast the log level DEBUG1 below with the default above: <syntaxhighlight lang="text"> Apr 5 12:39:14 server sshd[85029]: debug1: Bind to port 22 on 0.0.0.0. Apr 5 12:39:14 server sshd[85029]: Server listening on 0.0.0.0 port 22. Apr 5 12:39:14 server sshd[85029]: debug1: Bind to port 22 on ::. Apr 5 12:39:14 server sshd[85029]: Server listening on :: port 22. </syntaxhighlight> And here is the same startup using the most verbose level, DEBUG3: <syntaxhighlight lang="text"> Apr 5 12:40:59 server sshd[49707]: debug2: fd 6 setting O_NONBLOCK Apr 5 12:40:59 server sshd[49707]: debug1: Bind to port 22 on 0.0.0.0. Apr 5 12:40:59 server sshd[49707]: Server listening on 0.0.0.0 port 22. Apr 5 12:40:59 server sshd[49707]: debug2: fd 7 setting O_NONBLOCK Apr 5 12:40:59 server sshd[49707]: debug1: Bind to port 22 on ::. Apr 5 12:40:59 server sshd[49707]: Server listening on :: port 22. </syntaxhighlight> Every failed login attempt is recorded, once the value in directive '''MaxAuthTries''' is exceeded the connection is broken. Below is a log excerpt showing how the default log looks after some failed attempts: <syntaxhighlight lang="text"> ... Apr 5 12:44:43 server sshd-session[80932]: Failed password for root from 103.42.56.121 port 58164 ssh2 Apr 5 12:44:51 server last message repeated 2 times Apr 5 12:44:51 server sshd-session[80932]: Connection closed by authenticating user root 103.42.56.121 port 58164 [preauth] ... </syntaxhighlight> It is not usually a good idea to allow root login, especially not root login with authentication via password. Blocking login for root simplifies the log analysis greatly, and in particular it eliminates the time consuming question of who is trying to get in and why. People that need full root level access can gain it through [https://man.openbsd.org/su.1 su(1)] for general activities. Or for specific tasks which need root level access, those can be given those privileges through custom-made entries for '''sudo(8)''' or [https://man.openbsd.org/doas.1 doas(1)]. Note that in those cases, only specific services and programs should be allowed, not blanket access which is an all too common misconfiguration seen with '''sudo(8)'''. Alternatively, a single-purpose key made using '''forced-commands-only''' could be used since some argue that providing extra means of privilege escalation, such as [https://man.openbsd.org/su.1 su(1)], '''sudo(8)''', or [https://man.openbsd.org/doas.1 doas(1)], is more dangerous than carefully providing remote root access through a key or certificate tied to a specific function. ===Successful logins=== By default, the server does not store much information about user transactions. That is a good thing. It is also a good thing to recognize when the system is operating as it should. So here is an example of a successful SSH login: <syntaxhighlight lang="text"> Apr 4 13:30:08 server sshd-session[86956]: Accepted password for fred from 198.51.100.135 port 52646 ssh2 </syntaxhighlight> And here is an example using a key for authentication. It shows the key fingerprint as a SHA256 hash in base64. <syntaxhighlight lang="text"> Apr 5 12:49:11 server sshd-session[41210]: Accepted publickey for fred from 198.51.100.135 port 28927 ssh2: ED25519 SHA256:03u96bPG5qYi7hIEohNDfxOW+KOpMS9LPi4YdiCtGaI </syntaxhighlight> And here is an example of successful authentication with a user certificate. The certificate's identification string is "foobar" and the serial number is "9624". In this example the certificate is using ECDSA and the key itself is using Ed25519. The certificate, being a different key of its own, has a different SHA256 fingerprint from the authentication key itself. <syntaxhighlight lang="text"> Apr 5 13:50:57 server sshd-session[20263]: Accepted publickey for fred from 127.0.0.1 port 41783 ssh2: ED25519-CERT SHA256:UP1+mGQ5tfT84YCRVgytAKtikn0ujmfhXKdoxRoWDtU ID edcba (serial 2) CA ED25519 SHA256:4lngxTgobhprXfPY/p+2HNMBg6PxNDaOWrvei6kScrM </syntaxhighlight> In all three cases, older versions prior to 9.8 will use a process named '''sshd''' rather than one named '''sshd-session''' as is now a side effect of better privilege separation. Prior to 6.8, the key's fingerprint was a hexadecimal MD5 hash. <syntaxhighlight lang="text"> Jan 28 11:51:43 server sshd[5104]: Accepted publickey for fred from 192.0.2.60 port 60594 ssh2: RSA e8:31:68:c7:01:2d:25:20:36:8f:50:5d:f9:ee:70:4c </syntaxhighlight> In older versions of OpenSSH prior to 6.3 the key fingerprint is completely missing from authentication logging. <syntaxhighlight lang="text"> Jan 28 11:52:05 server sshd[1003]: Accepted publickey for fred from 192.0.2.60 port 20042 ssh2 </syntaxhighlight> Here is an example of password authentication for an SFTP session, using the server's internal-sftp subsystem. The logging for that subsystem set to INFO. <syntaxhighlight lang="text"> Mar 14 20:14:18 server sshd-session[19850]: Accepted password for fred from 192.0.2.60 port 59946 ssh2 </syntaxhighlight> Here is an example of a successful SFTP login using an Ed25519 key for authentication, with the SFTP subsystem itself logging at INFO. <syntaxhighlight lang="text"> Apr 5 13:56:02 server shd-session[58881]: Accepted publickey for fred from 192.0.2.60 port 40445 ssh2: ED25519 SHA256:UP1+mGQ5tfT84YCRVgytAKtikn0ujmfhXKdoxRoWDtU Apr 5 13:56:02 server internal-sftp[21121]: session opened for local user fred from [192.0.2.60] </syntaxhighlight> Additional data, such as connection duration, can be logged with the help of xinetd(8). ===Logging Problems from SSH Certificate Authentication=== When a certificate fails, there is generally no client side information disclosed and all investigation must occur server side. Finding the account or actual certificate in question can require some sleuthing in older versions of OpenSSH, but newer versions can identify the certificate and the certificate authority under certain circumstances. It is also important to be familiar with how log entries are supposed to look when things go correctly. Here is a successful login using certificate-based authentication: <syntaxhighlight lang="text"> Aug 7 18:32:29 server sshd-session[49021]: Accepted publickey for fred from 192.0.2.60 port 10932 ssh2: ED25519-CERT SHA256:UP1+mGQ5tfT84YCRVgytAKtikn0ujmfhXKdoxRoWDtU ID fedcba (serial 11) CA ED25519 SHA256:4lngxTgobhprXfPY/p+2HNMBg6PxNDaOWrvei6kScrM </syntaxhighlight> When the connection is closed there will be a log entry noting which account was involved. Older versions of OpenSSH will have less information in the log. <syntaxhighlight lang="text"> May 5 16:02:50 server sshd-session[32110]: Received disconnect from 192.0.2.60 port 12952:11: disconnected by user May 5 16:02:50 server sshd-session[32110]: Disconnected from user fred 192.0.2.60 port 12952 </syntaxhighlight> However, if the connection is allowed to timeout without first making any other authentication attempts by some other means, then there will be nothing to go on except maybe the time of day. <syntaxhighlight lang="text"> Apr 5 14:03:12 server sshd[9205]: Timeout before authentication for connection from 192.0.2.60 to 203.0.113.120, pid = 57844 </syntaxhighlight> Below are some common examples of log entries for failed certificate-based login attempts. There can sometimes be more than one problem with a certificate but in such cases only one error will get logged at a time. ====Expired or Not-yet-valid Certificate==== Certificates which have not yet become valid or which have already expired get a log entry as to the reason and include the offending certificate's id string and serial number as well as the fingerprint of the signing certificate authority. Below is one which is not yet valid being rejected by the server, perhaps at a future date it will be valid but that information is in the certificate, not the log. <syntaxhighlight lang="text"> Aug 7 19:02:52 server sshd-session[96551]: error: Refusing certificate ID "fedcb" serial=9 signed by ED25519 CA SHA256:4ZyxpgCaw3Y8wz91ajLWARibUGfwyuOrftt2wermMJE: Certificate invalid: not yet valid </syntaxhighlight> Next is an expired certificate which has been rejected. <syntaxhighlight lang="text"> Aug 7 19:02:53 server sshd-session[99417]: error: Refusing certificate ID "gfedc" serial=5 signed by ED25519 CA SHA256:4ZyxpgCaw3Y8wz91ajLWARibUGfwyuOrftt2wermMJE: Certificate invalid: expired </syntaxhighlight> If a certificate is not yet valid, then the log entry will say that explicitly and the trailing text on the line will be "Certificate invalid: not yet valid". The old style log entries for an expired certificate and for a certificate which has not yet become valid have much less information. <syntaxhighlight lang="text"> Apr 5 14:33:31 server sshd-session[88953]: error: Certificate invalid: expired Apr 5 14:32:41 server sshd-session[51695]: error: Certificate invalid: not yet valid </syntaxhighlight> The improved logging arrived with OpenSSH 10.1 ====Valid Certificate but Invalid Principal==== Like with other reasons for rejecting certificates, when the account and allowed principals do not match the account logging in, information is logged about which certificate was tried and failed. Here is an entry showing an invalid principal: <syntaxhighlight lang="text"> Aug 7 19:02:54 server sshd-session[12928]: error: Refusing certificate ID "edcba" serial=33 signed by ED25519 CA SHA256:4lngxTgobhprXfPY/p+2HNMBg6PxNDaOWrvei6kScrM: Certificate invalid: name is not a listed principal </syntaxhighlight> The old style log entry from OpenSSH 10.0 and earlier provides much less information about the certificate in question: <syntaxhighlight lang="text"> Apr 5 14:34:56 server sshd-session[66692]: error: Certificate invalid: name is not a listed principal </syntaxhighlight> If the client closes the connection on purpose, there may be some information in the connection closed entry but that will be a different log entry. ====Valid Certificate but Invalid Source Address==== If the certificate is limited to connecting from specific addresses or host names, the log will complain if the connection comes from a different address or host and identify the incorrect source address. The information will be split across two log entries, which might or might not be adjacent depending on how busy the server is. Here is an entry showing an invalid source address: <syntaxhighlight lang="text"> Aug 7 19:12:08 server sshd-session[29034]: cert: Authentication tried for fred with valid certificate but not from a permitted source address (198.51.100.135). Aug 7 19:12:08 server sshd-session[29034]: error: Refusing certificate ID "ihgfe" serial=8 signed by ED25519 CA SHA256:4ZyxpgCaw3Y8wz91ajLWARibUGfwyuOrftt2wermMJE: Refused by certificate options </syntaxhighlight> Prior to OpenSSH 10.1, the second entry had much less information about the offending certificate. <syntaxhighlight lang="text"> Apr 5 14:57:47 server sshd-session[78381]: cert: Authentication tried for fred with valid certificate but not from a permitted source address (198.51.100.135). Apr 5 14:57:47 server sshd-session[78381]: error: Refused by certificate options </syntaxhighlight> However, it will not be possible to identify the specific certificate directly with that old style log entry. ===Logging SFTP File Transfers=== SFTP file transfers can be logged using '''LogLevel''' INFO or VERBOSE. The log level for the SFTP server can be set in [http://man.openbsd.org/sshd_config.5 sshd_config(5)] separately from the general SSH server settings. <syntaxhighlight lang="apache" line="1"> Subsystem internal-sftp -l INFO </syntaxhighlight> By default the SFTP messages will also end up in ''auth.log'' but it is possible to filter these messages to their own file by reconfiguring the system logger, usually rsyslogd(8) or [https://man.openbsd.org/syslogd syslogd(8)]. Sometimes this is done by changing the log facility code from the default of AUTH. Available options are LOCAL0 through LOCAL7, plus, less usefully, DAEMON and USER. <syntaxhighlight lang="apache" line="1"> Subsystem internal-sftp -l INFO -f LOCAL6 </syntaxhighlight> If new system log files are assigned, it is important to remember them in the log rotation, too. Again, the '''Match''' directive can be use to change the log level just for certain connections. The following log excerpts are generated from using the log level INFO. A session starts with an open and end with a close. The number in the brackets is the process id for the SFTP session and is the only way to follow a session through the logs. <syntaxhighlight lang="text"> Oct 22 11:59:45 server internal-sftp[4929]: session opened for local user fred from [192.0.2.33] ... Oct 22 12:09:10 server internal-sftp[4929]: session closed for local user fred from [192.0.2.33] </syntaxhighlight> Here is an SFTP upload of a small file of 928 bytes named '''foo''' to the home directory for user 'fred' when logging the SFTP at log level INFO. <syntaxhighlight lang="text"> Oct 22 11:59:50 server internal-sftp[4929]: open "/home/fred/foo" flags WRITE,CREATE,TRUNCATE mode 0664 Oct 22 11:59:50 server internal-sftp[4929]: close "/home/fred/foo" bytes read 0 written 928 </syntaxhighlight> And a directory listing in the same session in the directory '''/var/www'''. <syntaxhighlight lang="text"> Oct 8 07:28:25 server internal-sftp[34984]: opendir "/" Oct 8 07:28:25 server internal-sftp[34984]: closedir "/" Oct 8 07:28:26 server internal-sftp[34984]: opendir "/" Oct 8 07:28:26 server internal-sftp[34984]: closedir "/" Oct 8 07:28:27 server internal-sftp[34984]: opendir "/var/" Oct 8 07:28:27 server internal-sftp[34984]: closedir "/var/" Oct 8 07:28:27 server internal-sftp[34984]: opendir "/var/www/" Oct 8 07:28:27 server internal-sftp[34984]: closedir "/var/www/" </syntaxhighlight> And lastly here is a download of the same small 928-byte file called '''foo''' from the home directory for the user 'fred'. <syntaxhighlight lang="text"> Oct 22 12:08:03 server internal-sftp[4929]: open "/home/fred/foo" flags READ mode 0666 Oct 22 12:08:03 server internal-sftp[4929]: close "/home/fred/foo" bytes read 928 written 0 </syntaxhighlight> Successful transfers will be noted by a ''close'' message. Attempts to download (open) files that do not exist will be followed by a ''sent status No such file'' message on a line of its own instead of a ''close''. Files that exist but that the user is not allowed to read will create a ''sent status Permission denied'' message. ===Logging Chrooted SFTP=== Logging with the built-in '''sftp-subsystem''' inside a chroot jail, defined by '''ChrootDirectory''', needs a '''./dev/log''' node to exist inside the jail. This can be done by having the system logger such as [http://man.openbsd.org/syslogd.8 syslogd(8)] add additional log sockets inside the chrooted directory when starting up. On some systems that is as simple as adding more flags, like "'''-u -a /chroot/dev/log'''", in '''/etc/rc.conf.local''' or whatever the equivalent startup script may be. Here is an example of an SFTP login with password to a chroot jail using log level DEBUG3 for the SFTP-subsystem. The log shows a file upload: <syntaxhighlight lang="text">Apr 5 15:08:41 server sshd-session[31716]: Accepted password for fred from 198.51.100.135 port 39238 ssh2 Apr 5 15:08:41 server internal-sftp[55598]: session opened for local user fred from [198.51.100.135] Apr 5 15:08:41 server internal-sftp[55598]: received client version 3 Apr 5 15:08:41 server internal-sftp[55598]: debug1: request 1: limits Apr 5 15:08:41 server internal-sftp[55598]: debug3: request 2: realpath Apr 5 15:08:41 server internal-sftp[55598]: realpath "." Apr 5 15:08:41 server internal-sftp[55598]: debug1: request 2: sent names count 1 Apr 5 15:08:52 server internal-sftp[55598]: debug3: request 3: open flags 26 Apr 5 15:08:52 server internal-sftp[55598]: open "/home/fred/foo" flags WRITE,CREATE,TRUNCATE mode 0664 Apr 5 15:08:52 server internal-sftp[55598]: debug1: request 3: sent handle 0 Apr 5 15:08:52 server internal-sftp[55598]: debug1: request 5: write "/home/fred/foo" (handle 0) off 0 len 33 Apr 5 15:08:52 server internal-sftp[55598]: debug3: request 5: sent status 0 Apr 5 15:08:52 server internal-sftp[55598]: sent status Success Apr 5 15:08:52 server internal-sftp[55598]: debug3: request 4: close handle 0 Apr 5 15:08:52 server internal-sftp[55598]: close "/home/fred/foo" bytes read 0 written 33 Apr 5 15:08:52 server internal-sftp[55598]: debug3: request 4: sent status 0 Apr 5 15:08:52 server internal-sftp[55598]: sent status Success </syntaxhighlight> Remember that SFTP is a separate subsystem and that like the file creation mode, the log level and log facility are set separately from the SSH server in [http://man.openbsd.org/sshd_config.5 sshd_config(5)], for example: <syntaxhighlight lang="apache" line="1"> Subsystem internal-sftp -l ERROR </syntaxhighlight> ===Logging Stability of Client Connectivity=== When '''ClientAliveInterval''' is set in the server's configuration, the server makes periodic probes of the clients which have established connections. At normal log levels, these are not noted in the log until something goes wrong. If the '''ClientAliveInterval''' is exceeded more times in a row than allowed by '''ClientAliveCountMax''' the client is officially declared disconnected and the connection dropped. At the default log level of INFO a brief message is logged, identifying the client which has been dropped. <syntaxhighlight lang="text"> Sep 6 14:42:08 server sshd[83709]: packet_write_poll: Connection from 192.0.2.97 port 57608: Host is down </syntaxhighlight> At log level DEBUG, the client's responses to the polls will be logged by the server showing that the session is still connected. <syntaxhighlight lang="text"> Sep 6 14:27:52 server sshd[9075]: debug1: Got 100/147 for keepalive </syntaxhighlight> Log level DEBUG2 and DEBUG3 will give even more information about the connection. However, even at log level DEBUG3, the specific client being polled will not be identified directly in the log messages and will have to be inferred from the process id of the daemon if such information is needed. <syntaxhighlight lang="text"> Sep 6 14:30:59 server sshd[73960]: debug2: channel 0: request keepalive@openssh.com confirm 1 Sep 6 14:30:59 server sshd[73960]: debug3: send packet: type 98 Sep 6 14:30:59 server sshd[73960]: debug3: receive packet: type 100 Sep 6 14:30:59 server sshd[73960]: debug1: Got 100/22 for keepalive </syntaxhighlight> Again, when the '''ClientAliveCountMax''' is exceeded, the connection is broken after the final failure of the client to respond. Here is how that looks with the log level set to DEBUG2. <syntaxhighlight lang="text"> Sep 6 14:17:55 server sshd[15780]: debug2: channel 0: request keepalive@openssh.com confirm 1 Sep 6 14:17:55 server sshd[15780]: debug1: Got 100/22 for keepalive Sep 6 14:18:37 server sshd[15780]: debug2: channel 0: request keepalive@openssh.com confirm 1 Sep 6 14:18:37 server sshd[15780]: packet_write_poll: Connection from 192.0.2.97 port 57552: Host is down Sep 6 14:18:37 server sshd[15780]: debug1: do_cleanup Sep 6 14:18:37 server sshd[48675]: debug1: do_cleanup Sep 6 14:18:37 server sshd[48675]: debug1: session_pty_cleanup: session 0 release /dev/ttyp0 </syntaxhighlight> The directives '''ClientAliveInterval''' and '''ClientAliveCountMax''' normally apply to all clients connecting to the server. However, they can be used inside a '''Match''' block and thus applied only to specific connections. ===Logging Revoked Keys=== If the '''RevokedKeys''' directive is used to point to a list of public keys that have been revoked, [http://man.openbsd.org/sshd.8 sshd(8)] will make a log entry when access is attempted using a revoked key. The entry will be the same whether a plaintext list of public keys is used or if a binary Key Revocation List (KRL) has been generated. If password authentication is allowed, and the user tries it, then after the key authentication fails there will be a record of password authentication. <syntaxhighlight lang="text"> Mar 14 20:36:40 server sshd-session[29235]: error: Authentication key RSA SHA256:jXEPmu4thnubqPUDcKDs31MOVLQJH6FfF1XSGT748jQ revoked by file /etc/ssh/ssh_revoked_keys ... Mar 14 20:36:45 server sshd-session[29235]: Accepted password for fred from 192.0.2.10 port 59967 ssh2 </syntaxhighlight> If password authentication is not allowed, [http://man.openbsd.org/sshd.8 sshd(8)] will close the connection as soon as the key fails. <syntaxhighlight lang="text"> Mar 14 20:38:27 server sshd-session[29163]: error: Authentication key RSA SHA256:jXEPmu4thnubqPUDcKDs31MOVLQJH6FfF1XSGT748jQ revoked by file /etc/ssh/ssh_revoked_keys ... </syntaxhighlight> The account trying the revoked key remains a mystery though. So it will be necessary to try to look up the key by its fingerprint from your archive of old keys using <code>ssh-keygen -lf</code> and read the key's comments. Although if a valid account cancels the connection without trying a password after the key attempt fails, the usual message will still be posted to the log and that will show the login name. <syntaxhighlight lang="text"> Mar 14 20:44:04 server sshd-session[14352]: Connection closed by authenticating user fred 192.0.2.237 port 55051 [preauth] ... </syntaxhighlight> That may be enough to provide some clue and allow a bit of log filtering with a short AWK script, if the messages are all in the same log file. <syntaxhighlight lang="shell-session"> $ awk '/revoked by file/ { pid[$5]++; key[$5]=$9; hash[$5]=$10; next; } pid[$5] && /closed by authenticating user/ { print key[$5], hash[$5], $10, $11; delete key[$5]; delete hash[$5]; delete pid[$5]; }' /var/log/authlog </syntaxhighlight> Similarly, if the client makes no attempt at logging in and just times out, the message will say just that. <syntaxhighlight lang="text"> Mar 18 21:40:25 server sshd[9942]: fatal: Timeout before authentication for connection from 198.51.100.236 to 203.0.113.75, pid = 67611 ... </syntaxhighlight> On the client side, no warning or error will be given if a revoked key is tried. It will just fail and the next key or method will be tried. ===Brute force and Hail Mary attacks=== It’s fairly common to see failed login attempts almost as soon as the server is connected to the net. Brute force attacks, where one machine hammers on a few accounts trying to find a valid password, are becoming rare. In part this is because packet filters, like NFables for Linux and PF for the BSDs, can limit the number and rate of connection attempts from a single host. The server configuration directive '''MaxStartups''' can limit the number of simultaneous, unauthenticated connections. <syntaxhighlight lang="text"> ... Apr 4 16:45:34 server sshd-session[96275]: Failed password for root from 103.42.56.121 port 48294 ssh2 ... Apr 4 16:46:58 server sshd-session[96275]: Failed password for root from 103.42.56.121 port 48294 ssh2 ... Apr 4 16:47:04 server sshd-session[96275]: Failed password for root from 103.42.56.121 port 48294 ssh2 Apr 4 16:47:05 server sshd-session[96275]: Connection closed by authenticating user root 103.42.56.121 port 48294 [preauth] ... </syntaxhighlight> Prior to 9.8, it was slightly different: <syntaxhighlight lang="text"> ... Mar 18 18:54:44 server sshd[54939]: Failed password for root from 201.179.249.231 port 52404 ssh2 Mar 18 18:54:48 server sshd[54939]: Failed password for root from 201.179.249.231 port 52404 ssh2 Mar 18 18:54:49 server sshd[54939]: Failed password for root from 201.179.249.231 port 52404 ssh2 Mar 18 18:54:49 server sshd[54939]: error: maximum authentication attempts exceeded for root from 201.179.249.231 port 52404 ssh2 [preauth] Mar 18 18:54:49 server sshd[54939]: Disconnecting authenticating user root 201.179.249.231 port 52404: Too many authentication failures [preauth] ... </syntaxhighlight> Note the "authenticating user" is present in the logs from OpenSSH 7.5 and onward when a valid user name is attempted. When an invalid user name is attempted, that is written too. <syntaxhighlight lang="text"> ... Apr 3 10:25:59 server sshd-session[78513]: Invalid user ad1tz from 103.42.56.121 port 55778 Apr 3 10:26:00 server sshd-session[78513]: Received disconnect from 103.42.56.121 port 55778:11: Bye Bye [preauth] Apr 3 10:26:00 server sshd-session[78513]: Disconnected from invalid user ad1tz 103.42.56.121 port 55778 [preauth] ... </syntaxhighlight> Again, in versions prior to 9.8, the process name is different as is the closing message. <syntaxhighlight lang="text"> ... Mar 18 18:55:05 server sshd[38594]: Invalid user ubnt from 201.179.249.231 port 52471 Mar 18 18:55:05 server sshd[38594]: Failed password for invalid user ubnt from 201.179.249.231 port 52471 ssh2 Mar 18 18:55:09 server sshd[38594]: error: maximum authentication attempts exceeded for invalid user ubnt from 201.179.249.231 port 52471 ssh2 [preauth] Mar 18 18:55:09 server sshd[38594]: Disconnecting invalid user ubnt 201.179.249.231 port 52471: Too many authentication failures [preauth] ... </syntaxhighlight> The way to deal with brute force attacks coming from a single machine or network is to customize the server host’s packet filter to limit the attacks or even temporarily block machines that overload the maximum number or rate of connections. Optionally, one should also contact the attacker’s net block owner with the IP address and exact date and time of the attacks. A kind of attack common at the time of this writing is one which is distributed over a large number of compromised machines, each playing only a small role in attacking the server. To deal with Hail Mary attacks, contact the attacker’s net block owner. A form letter with a cut-and-paste excerpt from the log is enough if it gives the exact times and addresses. Alternately, teams of network or system administrators can work to pool data to identify and blacklist the compromised hosts participating in the attack. ====Failed None For Invalid User==== The SSH protocol specifies a number of possible authentication methods<ref name="rfc_4252">{{cite web | url =https://datatracker.ietf.org/doc/html/rfc4252#section-5.2 | title=RFC 4252: The Secure Shell (SSH) Authentication Protocol | date=2006 | publisher=IETF | access-date=2021-08-10 }}</ref>. The methods <code>password</code>, <code>keyboard-interactive</code>, and <code>publickey</code> are fairly common. A lesser known authentication method is <code>none</code>, which will only succeed if the server requires no further authentication such as if '''PermitEmptyPassword''' is set and the account does not actually have a password<ref name="failed_none">{{cite mailing list | url=https://marc.info/?l=openbsd-misc&m=162858437916966&w=2 | last=Tucker | first=Darren | mailing-list=OpenBSD-Misc | date=2021-08-10 | accessdate=2021-08-10 | title=Re: ssh authlog: Failed none for invalid user | publisher=OpenBSD}}</ref>. Some SSH clients including OpenSSH's start by asking for <code>none</code> authentication and then use the list of remaining possible authentication methods to decide what to do next if that doesn't work. <syntaxhighlight lang="text"> ... Aug 10 19:09:05 server sshd[93126]: Failed none for invalid user admin from 125.64.94.136 port 27586 ssh2 ... </syntaxhighlight> So in other words, that is a brute force attack trying the <code>none</code> authentication method. It is an attack which will only get into accounts which have been explicitly set with an empty password and furthermore have also been set up specifically to allow access by having both the authentication method of <code>none</code> and the '''PermitEmptyPasswords''' configuration directive enabled on the server. Most brute force attacks try only <code>password</code> authentication, and some of those even check for the <code>password</code> method and then give up if it is not available. Other attackers may just hammer away pointlessly even if the method is not available. ===Connections Seemingly From 127.0.0.1, ::1, or Other localhost Addresses=== When the SSH server is accessed via a reverse tunnel to another machine, the incoming connections will appear to be from the ''localhost'' address, which is usually ''127.0.0.1'' or ''::1''. <syntaxhighlight lang="text"> Mar 23 14:16:16 server sshd[9265]: Accepted password for fred from 127.0.0.1 port 40426 ssh2 </syntaxhighlight> If the port at the other end of the reverse tunnel is publicly accessible, it will be probed and possibly attacked. Because of the reverse tunnel, the attacks will then also appear to be coming from the server's own loopback address: <syntaxhighlight lang="text"> Mar 23 14:20:17 server sshd-session[5613]: Invalid user cloud from ::1 port 57404 Mar 23 14:20:21 server sshd-session[5613]: Failed password for invalid user cloud from ::1 port 57404 ssh2 Mar 23 14:20:26 server sshd-session[5613]: Failed password for invalid user cloud from ::1 port 57404 ssh2 Mar 23 14:20:35 server sshd-session[5613]: Connection closed by invalid user cloud ::1 port 57404 [preauth] </syntaxhighlight> Like in the other examples, the disconnection message was different prior to 9.8: <syntaxhighlight lang="text"> ... Mar 23 14:20:32 server sshd[5613]: Failed password for invalid user cloud from ::1 port 57404 ssh2 Mar 23 14:20:35 server sshd[5613]: Connection closed by invalid user cloud ::1 port 57404 [preauth] ... </syntaxhighlight> Therefore the usual countermeasures like SSHGuard or Fail2Ban or other similar intrusion detection systems cannot be used because the ''localhost'' address is used by the tunnel for all login attempts, regardless of their real origins. A partial solution would be to bind the incoming connections to a different IP address. The loopback interface would need an additional permanent address, an alias, for that. That alias could then be assigned when establishing the reverse tunnel: <syntaxhighlight lang="shell-session"> $ ssh -R 2022:127.2.2.1:22 fred@vps.example.org </syntaxhighlight> Thus it would designate the source address for all logins coming in over that tunnel. So, in that way, the alias would then show up in the logs instead of the default loopback address when that reverse tunnel is used: <syntaxhighlight lang="text"> Mar 23 18:00:13 server sshd-session[8525]: Invalid user cloud from 127.2.2.1 port 17271 Mar 23 18:00:15 server sshd-session[8525]: Failed password for invalid user cloud from 127.2.2.1 port 17271 ssh2 Mar 23 18:00:19 server sshd-sesssion[8525]: Failed password for invalid user cloud from 127.2.2.1 port 17271 ssh2 Mar 23 18:01:23 server sshd-session[8525]: Failed password for invalid user cloud from 127.2.2.1 port 17271 ssh2 Mar 23 18:01:26 server sshd-session[8525]: Connection closed by invalid user cloud 127.2.2.1 port 17271 [preauth] </syntaxhighlight> If the ports do not need to be available to the open Internet, a full solution would be just to ensure that they are not accessible from the outside. This would be done by not using the '''-g''' option on the client when making the reverse tunnel or else by setting the '''GatewayPorts''' directive in [http://man.openbsd.org/sshd_config.5 sshd_config(5)] back to the default of '''no''', or both. The system's built-in packet filter can also be used. Then, even with the forwarded ports closed off from the outside, the '''ProxyJump''' option can still be used to skip through the jump host and use the setup for SSH access. However, since it is sometimes necessary that these ports be accessible to the outside world, this approach is not always an option. ==Client Logging== The OpenSSH client normally sends log information to '''stderr'''. The '''-y''' option can be used to send output to the system logs, managed by [http://man.openbsd.org/syslogd.8 syslogd(8)] or something similar. Client log verbosity can be increased or decreased by changing the '''LogLevel''' directive and the log facility changed with the '''SyslogFacility''' directive in [http://man.openbsd.org/ssh_config.5 ssh_config(5)]. Both require use of the '''-y''' run-time option and do nothing without it. Alternatively, instead of using the '''-y''' option, using the '''-E''' option sends log output to a designated file instead of '''stderr'''. Working with the system logs or separate log files are something which can be useful when running [http://man.openbsd.org/ssh.1 ssh(1)] in automated scripts. Below is an example of a connection to an interactive shell with the normal level of client logging: <syntaxhighlight lang="shell-session"> $ ssh -l fred server.example.org fred@server.example.org‘s password: Last login: Thu Jan 27 13:21:57 2011 from 192.168.11.1 </syntaxhighlight> The same connection at the first level of verbosity gives lots of debugging information, 90 lines in all. <syntaxhighlight lang="shell-session"> $ ssh -v -l fred server.example.org debug1: OpenSSH_10.6, LibreSSL 4.4.0 debug1: Reading configuration data /etc/ssh/ssh_config debug1: no pubkey loaded from /home/fred/.ssh/id_rsa debug1: identity file /home/fred/.ssh/id_rsa type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_rsa debug1: no pubkey loaded from /home/fred/.ssh/id_ecdsa debug1: identity file /home/fred/.ssh/id_ecdsa type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_ecdsa debug1: no pubkey loaded from /home/fred/.ssh/id_ecdsa_sk debug1: identity file /home/fred/.ssh/id_ecdsa_sk type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_ecdsa_sk debug1: no pubkey loaded from /home/fred/.ssh/id_ed25519 debug1: identity file /home/fred/.ssh/id_ed25519 type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_ed25519 debug1: no pubkey loaded from /home/fred/.ssh/id_ed25519_sk debug1: identity file /home/fred/.ssh/id_ed25519_sk type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_ed25519_sk debug1: no pubkey loaded from /home/fred/.ssh/id_mldsa44_ed25519 debug1: identity file /home/fred/.ssh/id_mldsa44_ed25519 type -1 debug1: no identity pubkey loaded from /home/fred/.ssh/id_mldsa44_ed25519 debug1: Connecting to server.example.org [198.51.100.20] port 22. debug1: Connection established. debug1: Local version string SSH-2.0-OpenSSH_10.6 debug1: Remote protocol version 2.0, remote software version OpenSSH_10.6 debug1: compat_banner: match: OpenSSH_10.6 pat OpenSSH* compat 0x04000000 debug1: Authenticating to server.example.org:22 as 'fred' debug1: load_hostkeys: fopen /home/fred/.ssh/known_hosts2: No such file or directory debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT received debug1: kex: algorithm: mlkem768x25519-sha256 debug1: kex: host key algorithm: ssh-ed25519 debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none debug1: expecting SSH2_MSG_KEX_ECDH_REPLY debug1: SSH2_MSG_KEX_ECDH_REPLY received debug1: Server host key: ssh-ed25519 SHA256:agRZDZn8awhQ+tc19Ip/whkHoV33Ln2REO7v1kcYbdU debug1: load_hostkeys: fopen /home/fred/.ssh/known_hosts2: No such file or directory debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory debug1: Host 'server.example.org' is known and matches the ED25519 host key. debug1: Found key in /home/fred/.ssh/known_hosts:1 debug1: ssh_packet_send2_wrapped: resetting send seqnr 3 debug1: rekey out after 134217728 blocks debug1: SSH2_MSG_NEWKEYS sent debug1: Sending SSH2_MSG_EXT_INFO debug1: expecting SSH2_MSG_NEWKEYS debug1: ssh_packet_read_poll2: resetting read seqnr 3 debug1: SSH2_MSG_NEWKEYS received debug1: rekey in after 134217728 blocks debug1: SSH2_MSG_EXT_INFO received debug1: kex_ext_info_client_parse: server-sig-algs=<ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ssh-ed25519@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com,rsa-sha2-512,rsa-sha2-256,ssh-mldsa44-ed25519,webauthn-sk-ecdsa-sha2-nistp256@openssh.com> debug1: kex_ext_info_check_ver: publickey-hostbound@openssh.com=<0> debug1: kex_ext_info_check_ver: ping@openssh.com=<0> debug1: kex_ext_info_check_ver: agent-forward=<0> debug1: SSH2_MSG_SERVICE_ACCEPT received debug1: SSH2_MSG_EXT_INFO received debug1: kex_ext_info_client_parse: server-sig-algs=<ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ssh-ed25519@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com,rsa-sha2-512,rsa-sha2-256,ssh-mldsa44-ed25519,webauthn-sk-ecdsa-sha2-nistp256@openssh.com> debug1: Authentications that can continue: publickey,password,keyboard-interactive debug1: Next authentication method: publickey debug1: Will attempt key: /home/fred/.ssh/id_rsa debug1: Will attempt key: /home/fred/.ssh/id_ecdsa debug1: Will attempt key: /home/fred/.ssh/id_ecdsa_sk debug1: Will attempt key: /home/fred/.ssh/id_ed25519 debug1: Will attempt key: /home/fred/.ssh/id_ed25519_sk debug1: Will attempt key: /home/fred/.ssh/id_mldsa44_ed25519 debug1: Trying private key: /home/fred/.ssh/id_rsa debug1: Trying private key: /home/fred/.ssh/id_ecdsa debug1: Trying private key: /home/fred/.ssh/id_ecdsa_sk debug1: Trying private key: /home/fred/.ssh/id_ed25519 debug1: Trying private key: /home/fred/.ssh/id_ed25519_sk debug1: Trying private key: /home/fred/.ssh/id_mldsa44_ed25519 debug1: Next authentication method: keyboard-interactive debug1: Authentications that can continue: publickey,password,keyboard-interactive debug1: Next authentication method: password Authenticated to server.example.org ([198.51.100.20]:22) using "password". debug1: channel 0: new session [client-session] (inactive timeout: 0.000000) debug1: Requesting no-more-sessions@openssh.com debug1: Entering interactive session. debug1: pledge: filesystem debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0 debug1: client_input_hostkeys: searching /home/fred/.ssh/known_hosts for server.example.org / (none) debug1: client_input_hostkeys: searching /home/fred/.ssh/known_hosts2 for server.example.org / (none) debug1: client_input_hostkeys: hostkeys file /home/fred/.ssh/known_hosts2 does not exist debug1: client_input_hostkeys: no new or deprecated keys from server debug1: pledge: fork debug1: client_input_channel_req: channel 0 rtype keepalive@openssh.com reply 1 debug1: client_input_channel_req: channel 0 rtype keepalive@openssh.com reply 1 debug1: client_input_channel_req: channel 0 rtype keepalive@openssh.com reply 1 Last login: Sat Mar 14 21:31:33 2015 from 192.0.2.111 ... </syntaxhighlight> The same login with the maximum of verbosity, '''-vvv''', gives around 239 lines of debugging information. The following will save the debugging information separately in a file, '''ssh-client.log''', in the home directory. <syntaxhighlight lang="shell-session"> $ ssh -vvv -E ~/ssh-client.log -l fred somehost.example.org </syntaxhighlight> ===Capturing Client Debugging Information Together with the Session Contents=== Regular pipes and redirects work only with '''stdout''' so that if '''-E''' is not used to capture debugging output the output on '''stderr''' must instead be sent to '''stdout''' if one is going to capture it at the same time as the actual session. That is done with an extra redirect, '''2>&amp;1''' to capture '''stderr'''. Mind the spaces, or lack of them. The following will capture both the session text and the debugging information to a file, '''ssh-client.log''', in the home directory: <syntaxhighlight lang="shell-session"> $ ssh -vvv -l fred somehost.example.org 2>&1 | tee ~/ssh-output.log </syntaxhighlight> The tool [http://man.openbsd.org/tee.1 tee(1)] is like a T-pipe and sends output two directions, one to '''stdout''' and one to a file. ===Changing Client Debugging Levels At Runtime or On The Fly=== At run-time, when establishing a new connection, just use the '''-v''' option. <syntaxhighlight lang="shell-session"> $ sftp -v -o "IdentityFile=~/.ssh/weblog.key_ed25519" fred@server.example.org </syntaxhighlight> The debugging verbosity on the client can be increased just like on the server. <syntaxhighlight lang="shell-session"> $ sftp -vvv -o "IdentityFile=~/.ssh/weblog.key_ed25519" fred@server.example.org </syntaxhighlight> The extra information can be useful to see exactly what is being sent to or requested of the server. After the fact, once a connection is established, the escape sequences '''~v''' and '''~V''' can be used to increase or decrease, respectively, the verbosity on the fly. Through them it is possible to change the verbosity of the client in an established connection. When increasing the log level with '''~v''', the client raises its log level to VERBOSE, DEBUG, DEBUG2, and DEBUG3, in that order, if starting from the default of INFO. Conversely, when lowering the log level with '''~V''', the client will descend through ERROR, FATAL, to QUIET if starting from the default of INFO. ==Debugging and Troubleshooting== The server logs are your best friend when troubleshooting. It may be necessary to turn up the log level there temporarily to get more information. It is then also necessary to turn them back to normal after things are fixed to avoid privacy problems or excessively use of disk space. For example, the SFTP-subsystem logging defaults to ERROR, reporting only errors. To track transactions made by the client, change the log level to INFO or VERBOSE: <syntaxhighlight lang="apache" line="1"> Subsystem internal-sftp -l INFO </syntaxhighlight> Caution. Again, operating with elevated logging levels would violate the privacy of users, in addition to filling a lot of disk space. Elevated logging levels should generally not be used in production once the changes are figured out. Even then, the elevated log messages should really be sent to a separate log file during the time they are being collected. By default, some systems send only the normal messages to the regular system log files and ignore the elevated messages. Some save all the messages by default. If the elevated system log messages are not showing up in any of the system logs, that may be the reason. Either way, check the system log configurations and make sure that the extra messages are only sent to a separate log file and not mixed in with the regular system logs. Change the configuration to do that, if necessary. Separating the extra messaging helps keep the logs tidy as well as protecting privacy. The system log settings are found in the system log daemon's configuration file, the exact name of which will vary depending on what is installed, but common ones are [https://man.openbsd.org/syslog.conf.5 syslog.conf(5)] and rsyslog.conf(5). Notice that the configuration below has the all messages including the more detailed VERBOSE, and on up through DEBUG3, messages for the AUTH facility going to a separate log file from the regular AUTH messages: <syntaxhighlight lang="shell-session"> $ grep '^auth\.' /etc/syslog.conf auth.info /var/log/authlog auth.* /var/log/authdebug </syntaxhighlight> See [https://man.openbsd.org/syslog.3 syslog(3)] for the log facilities and log levels. It is best to limit the time the debugging information is collected to be as short as possible and to actively watch the logs while the extra information is being collected. However, if the more verbose logging is running for any length of time, and especially if it is left unattended even for a short while, be sure to remember to add the new log file to the log rotation schedule so that it cannot fill up the partition. Note, logs might be handled by other services on some systems. Check with the official documentation for your system to be sure. On the client side, '''Match''' blocks can help further by setting log levels for specific situations and avoid a situation where everything is logged intensely. The manual pages for OpenSSH are very well written and many times problems can be solved by finding the right section within the right manual page. At the very minimum, it is important to skim through the four main manual pages for both the programs and their configuration to become familiar with at least the section headings. * [http://man.openbsd.org/ssh.1 ssh(1)] * [http://man.openbsd.org/ssh_config.5 ssh_config(5)] * [http://man.openbsd.org/sshd.5 sshd(8)] * [http://man.openbsd.org/sshd_config.5 sshd_config(5)] Once the right section is found in the manual page, read it in detail and become familiar with its contents. The same goes for the other OpenSSH manual pages, depending on the activity. Be sure to use the version(s) of OpenSSH actually in use on your system(s) with their corresponding manual pages. When possible, use those that are installed on your system so as to avoid a mismatch. In some cases, the client and the server will be of different versions, so the manual pages for each must be looked up separately. It is also a good idea to review OpenSSH's release notes when a new version is published. With a few exceptions below, specific examples of troubleshooting are usually given in the cookbook section relevant to a particular activity. So, for example, sorting problems with authentication keys is done in the section on [[OpenSSH/Cookbook/Authentication_Keys|Public Key Authentication]] itself. ===Debugging a script, configuration or key that uses sudo(8)=== Usually log levels only need to be changed when writing and testing a script, a new configuration, some new keys, or all three at once. When working with '''sudo(8)''', it is especially important to see exactly what the client is sending so as to enter the right pattern into '''/etc/sudoers''' for safety. Using the lowest level of verbosity, the exact string being sent by the client to the remote server is shown in the debugging output: <syntaxhighlight lang="shell-session"> $ rsync -e "ssh -v -i /home/webmaint/.ssh/bkup_key -l webmaint" \ -a server.example.org:/var/www/ var/backup/www/ ... debug1: Sending command: rsync --server --sender -logDtpre.iLsfxCIvu . /var/www/ ... </syntaxhighlight> What '''sudoers''' then needs is something like the following, assuming account 'webmaint' is in the group 'webmasters': <syntaxhighlight lang="apache" line="1"> %webmasters ALL=(ALL) NOPASSWD: /usr/local/bin/rsync --server \ --sender -logDtpre.iLsfxCIvu . /var/www/ </syntaxhighlight> The same method can be used to debug new server configurations or key logins. Once things are set to run as needed, the log level settings can be lowered back to INFO for [http://man.openbsd.org/sshd.8 sshd(8)] and to ERROR for '''internal-sftp'''. Additionally, once the script is left to run in fully automated mode, the client logging information can be set use the [http://man.openbsd.org/syslog.3 syslog(3)] system module instead of '''stderr''' by using the '''-y''' option when [http://man.openbsd.org/ssh ssh(1)] is launched. ===Debugging a server configuration=== Running the server in debug mode provides a lot of information about the connection and a smaller amount about the server configuration. The server's debugging level ('''-d''') can be raised once, twice ('''-dd''') or thrice ('''-ddd'''). <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -d </syntaxhighlight> Note that in this case the server does not detach and become a daemon, so it will terminate when the SSH connection terminates. The advantage is this collects the logs for one single session and only that session. The server must be started again in order to make a subsequent connection from the client. Though in some ways this is a hassle, it does make sure that session data is a unique set and not mixes of multiple sessions and thus possibly different configurations. Alternately, another option ('''-e''') when debugging sends the debugging data to '''stderr''' instead in order to keep the system logs clean. It is also possible to log the debugging data from the system logs directly to a separate file and keep noise out of the system logs. Since OpenSSH 6.3, the option '''-E''' will append the debug data to a particular log file instead of sending it to the system log. This facilitates debugging live systems without cluttering the system logs. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -E /home/fred/sshd.debug.log -d </syntaxhighlight> In really old versions of OpenSSH, which are hopefully no longer in production, if you need to save output to a file while still viewing it live on the screen, you can use '''tee(1)'''. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -ddd 2>&1 | tee /tmp/foo </syntaxhighlight> That will save output to the file ''foo'' by redirecting to '''stdout''' what [http://man.openbsd.org/sshd.8 sshd(8)] sent to '''stderr''' and saving it to a file. This works with really old versions of OpenSSH, but the '''-E''' option above is preferable. If the server is remote and it is important to reduce the risk of getting locked out, the experiments on the configuration file can be done with a second instance of [http://man.openbsd.org/sshd.8 sshd(8)] using a separate configuration file and listening to a high port until the settings have been tested. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -dd -p 22222 -f /home/fred/sshd_config.test </syntaxhighlight> If the OpenSSH server's configuration file is set to listen on odd ports or more than one port using the '''ListenAddress''' directive, then that can also be overriden so that the server listens on the extra port. <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -o 'ListenAddress 0.0.0.0:22222' -dd \ -f /home/fred/sshd_config.test </syntaxhighlight> It is also possible to make an extended test ('''-T''') of the configuration file first. If there is a syntax error, it will be reported, but remember that even sound configurations can still lock you out. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -T | sort | less -X </syntaxhighlight> The extended test mode can be used by itself, but it is also possible to specify custom parameters to use with '''-C''' to see what happens with specific kinds of connections. [http://man.openbsd.org/sshd.8 sshd(8)] will the connection. It will then process the configuration file in light of the parameters passed to it and return output with the modified results. This is good for showing the results of any '''Match''' directives which might apply to the session. The variables ''user'', ''host'', and ''addr'' are the minimum required when passing specific connection parameters to [http://man.openbsd.org/sshd.8 sshd(8)] for evaluation with the '''-C''' option . The following options will print out the configurations that will be applied when the user ''fred'' tries to log in to the host ''server.example.org'' from the address ''192.0.2.15'': <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -T -C user=fred,host=server.example.org,addr=192.0.2.15 </syntaxhighlight> Two more parameters, ''laddr'' and ''lport'', may also be passed. They refer to the server's IP number and port connected to. <syntaxhighlight lang="shell-session"> $ /usr/sbin/sshd -T -C user=fred,host=server.example.org,addr=192.0.2.15,laddr=192.0.2.2,lport=2222 </syntaxhighlight> And lastly, there is a parameter ''rdomain'' to specify the routing domain or routing table to try. Between those six variables it should be possible to describe any possible incoming connection. ====Adding Timestamps to Server Debugging Output==== The '''-d''' option increases the value for '''LogLevel''' but does not prepend any timestamps to the server's output. Timestamps can nevertheless be added on the fly by writing the debug logs to '''stderr''' using the '''-e''' option, redirecting '''stderr''' to '''stdout''', and then piping that into [https://man.openbsd.org/ts ts(1)], a timestamping utility. <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -p 2222 -e -d 2>&1 | ts "%.T" | tee /tmp/sshd.log </syntaxhighlight> That will show the time, including microseconds. Mind the dot there before the letter 'T'. The options '''-i''' and '''-s''' for [https://man.openbsd.org/ts ts(1)] can be relevant, too. The '''-i''' option will measure the relative time between the timestamps themselves. The '''-s''' option will show the time elapsed since the start of the program. Other custom date and time formats can be specified as per [https://man.openbsd.org/strftime strftime(3)], if needed. When [https://man.openbsd.org/ts ts(1)] is not already present it can usually be added via the moreutils package. Although some systems, such as OpenBSD, include it in the base system. If it is not already installed and not available for installation, then Perl can be used on POSIX systems to prepend a timestamp to '''stdin''': <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -p 2222 -e -d 2>&1 \ | perl -p -e 'use POSIX strftime; print strftime("%F %T ", localtime)' \ | tee /tmp/sshd.log </syntaxhighlight> However, that only provides an accuracy of whole seconds. If more precision is needed, then Python3 can provide timestamps with precision down to the microsecond. <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -p 2222 -e -d 2>&1 \ | python -c 'import datetime; import sys; [print (datetime.datetime.now(), flush=True) for line in sys.stdin]' \ | tee /tmp/sshd.log </syntaxhighlight> Note that the Python approach requires explicitly setting the buffer to flush automatically. Some non-POSIX shells can make use of [https://mywiki.wooledge.org/ProcessSubstitution process substitution] to pipe '''stderr''' output into another program. <syntaxhighlight lang="shell"> $ /usr/sbin/sshd -p 2222 -e -d 2> >(ts) | tee /tmp/sshd.log | less -X </syntaxhighlight> There are even fancier approaches using IO redirection on extra file descriptors, but those are far outside the scope of this book. ===Debugging a client configuration=== Sometimes when debugging a server configuration it is necessary to track the client configurations settings, as well. Since OpenSSH 6.8, the '''-G''' option makes [http://man.openbsd.org/ssh.1 ssh(1)] print its configuration after evaluating any '''Host''' and '''Match''' blocks and then exit without connecting. That allows viewing of the exact configuration options which will actually be used by the client for a particular session. <syntaxhighlight lang="shell-session"> $ ssh -G -l fred server.example.org | sort </syntaxhighlight> Client configuration is determined in three ways. The first is by run-time options, then by the account's own configuration file, or lastly the system-wide client configuration file. The priority is in that order. Whichever value is found first gets used. With [http://man.openbsd.org/sftp.1 sftp(1)] the options are also passed to [http://man.openbsd.org/ssh.1 ssh(1)]. ====Invalid or Outdated Ciphers or MACs==== A proper client will show the details of the failure. For a bad Message Authentication Code (MAC), a proper client might show something like the following when trying to foist a bad MAC like hmac-md5-96 onto the server: <syntaxhighlight lang="text"> no matching mac found: client hmac-md5-96 server umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1 </syntaxhighlight> And for a bad cipher, a proper client might show something like this when trying to foist an arcfour cipher on the server: <syntaxhighlight lang="text"> no matching cipher found: client arcfour server chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com </syntaxhighlight> Sometimes when troubleshooting a problem with the client it is necessary to turn to the server logs. In [https://www.openssh.org/txt/release-6.7 OpenSSH 6.7 unsafe MACs were removed] and in [https://www.openssh.org/txt/release-7.2 OpenSSH 7.2 unsafe ciphers were removed], but some third-party clients may still try to use them to establish a connection. In that case, the client might not provide much information beyond a vague message that the server unexpectedly closed the network connection. The server logs will, however, show what happened: <syntaxhighlight lang="text"> fatal: no matching mac found: client hmac-sha1,hmac-sha1-96,hmac-md5 server hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160 [preauth] </syntaxhighlight> More recent versions would show a simpler error for a bad MAC. <syntaxhighlight lang="text"> fatal: Unable to negotiate with 192.0.2.37 port 55044: no matching MAC found. Their offer: hmac-md5-96 [preauth] </syntaxhighlight> A bad cipher would be reported like this: <syntaxhighlight lang="text"> fatal: Unable to negotiate with 192.0.2.37 port 55046: no matching cipher found. Their offer: arcfour [preauth] </syntaxhighlight> The error message in the server log might not say which MACs or ciphers are actually available. For those, the extended test mode can be used to show the server settings and, in particular, the MACs or ciphers allowed. In its most basic usage the extended test mode would just be '''-T''', as in <code>/usr/sbin/sshd -T | grep -E 'cipher|macs'</code> with no other options. For more details and options, see the previous section on "Debugging a server configuration" above. One solution there is to upgrade the client to one that can handle the right ciphers and MACs. Another option is to switch to a different client, one that can handle the modern ciphers or MACs. See also the configuration directive '''WarnWeakCrypto''' in the manual page. It has been around since 10.1. The default for '''WarnWeakCrypto''' is 'yes'. ===Debugging Key-Based Authentication=== The most common causes of failure for public key authentication seem to be for either of two reasons: * Mangling the public key on the way to getting it into '''authorized_keys''' on the server * Incorrect permissions for the files and directories involved, ether on the client or the server. These are the directory for the keys, usually '''~/.ssh/''', or its parent directories, or the '''authorized_keys''' file, or the private key itself. As of the time of this writing, it looks like pretty much every failure of key-based authentication described on mailing lists and forums is solved by addressing either or both of those two situations. So, when encountering the error message ''Permission denied (publickey,keyboard-interactive)'', or similar, see the section on [[OpenSSH/Cookbook/Public Key Authentication|Public Key Authentication]]. Also be sure to read the manual page for [http://man.openbsd.org/sshd.8 sshd(8)] and its section on authorized keys. Usually, though not always, it will be obvious when the private key's permissions are incorrect: <syntaxhighlight lang="shell-session"> $ ssh -i ~/.ssh/fred-193.ed25519 fred@192.0.2.193 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0664 for '/home/fred/.ssh/fred-193.ed25519' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. Load key "/home/fred/.ssh/fred-193.ed25519": bad permissions </syntaxhighlight> In addition mangled public keys in the authorized keys file and to incorrect permissions, a very rare third case is if the public and private key files don't match and are not from the same key pair. As mentioned in the section on [[OpenSSH/Cookbook/Public Key Authentication|Public Key Authentication]], the public and private keys need to be parts of the same key pair so that they match. That is because even before the SSH client uses private key cryptographically, it looks at the file name of the proposed private key and then sends the public key matching that same name, if it exists, to the server. If that public key does not match the public key on the server in '''authorized_keys''' then the connection will be denied with the error ''Permission denied (publickey,keyboard-interactive)'' or similar. That alone is a very good reason to give unique descriptive file names when creating keys. Note that as mentioned above there are usually other causes to that same error message besides having mismanaged the public key file on the client machine. The file names for both parts of each key pair have to be kept synchronized so that the names match. As for a solution, the way out in the long term is to stay organized and carefully manage the keys and their file names. It can be solved on the short term by deleting the offending ''public'' key file and then using the private key to regenerate a new one, replacing the incorrect public key under that name. Again, this is an unusual edge case and not a common cause of that error. ====SSH Too Many Authentication Failures==== When there are multiple keys in the authentication agent, the client will try them against the server in the same order in which they were added to the agent. However, on odd or older agents they are returned in an unpredictable order. Newer versions allow the client to query the server to see if a particular key is acceptable. This is set by the '''PubkeyAuthOptions''' and is counted separately from the '''MaxAuthTries''' directive. When the former are used up, then the additional tries count against the latter. Either way, if the client happens to cycle through enough of the wrong keys first and hits the server's '''MaxAuthTries''' limit before finding the right key, the server will naturally break off the connection with an error message on the server about too many authentication failures: <syntaxhighlight lang="text"> Disconnecting authenticating user fred 203.0.113.110 port 35893: Too many authentication failures [preauth] </syntaxhighlight> Or in earlier versions: <syntaxhighlight lang="text"> "Received disconnect from 203.0.113.110 port 22:2: Too many authentication failures Authentication failed." </syntaxhighlight> When that happens, the client side will show this error: <syntaxhighlight lang="text"> Received disconnect from server.example.org port 22:2: Too many authentication failures Disconnected from server.example.org port 22 </syntaxhighlight> With increased verbosity, the specific keys tested and rejected will also be shown by the client. Newer clients will include the key's comment, if available, and not just the fingerprint. The keys get tried first from the agent in the order in which they were loaded into the agent, then from : <syntaxhighlight lang="shell-session"> $ ssh -v 203.0.113.110 . . . hdebug1: Offering public key: a key for fred ED25519 SHA256:7e5qkSHxSp8xitlM4JP4dOeCdnQn Vt9q6GPaB0+IrSM agent debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering public key: fred's key ED25519 SHA256:8U7Fy6nJxbxfAu0K8WXZV0WN80t/ 4lb/f9bqObw0isE agent debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering public key: one more comment ED25519 SHA256:F61Sx2t4BmoHASuMCVrBd8C30A7S QdGPwgfb7ZGWZf0 agent debug1: Authentications that a publickey,keyboard-interactive debug1: Offering public key: fred@desk.example.org ED25519 SHA256:TMfO5S6oBQ0Cu273yPp9+7carGP926kRfg6iS435cmU agent debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering public key: yet one more key ED25519 SHA256:36tMBWe4kX9hyVLZaxyjm2pp1TMFbRw0+O1xWOU5Fgk agent debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering public key: the last straw ED25519 SHA256:gNZd1TF48UgEUgoYFNXop9tEhO53If1qiDqZyKbRT4U agent Received disconnect from 203.0.113.110 port 2222:2: Too many authentication failures Disconnected from 203.0.113.110 port 2222 </syntaxhighlight> Each key in the agent also gets an annotation which says whether or not the key file was supplied by the user, either in the configuration file or as a run-time argument. For the former, it will marked with 'agent' and for the latter two as 'explicit'. The client prefers keys that are currently in the agent in the order in which they were added to the agent. Then it will try the one(s) added via run-time arguments, in the order in which they are supplied. Then, lastly, it will try the one(s) specified in the client configuration file. Or in earlier versions the file name used to load the key will be listed by the client in verbose mode, but the order will be less predictable: <syntaxhighlight lang="shell-session"> $ ssh -v 203.0.113.110 ... debug1: SSH2_MSG_SERVICE_ACCEPT received debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Next authentication method: publickey debug1: Offering RSA public key: /home/fred/.ssh/key.06.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.02.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.03.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.04.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.01.rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Offering RSA public key: /home/fred/.ssh/key.05.rsa Received disconnect from port 22:2: Too many authentication failures Authentication failed. </syntaxhighlight> In the older clients, the client prefers keys that were specified in the configuration and are also currently in the agent. Then it will try try them in the order in which they were supplied. [3] <ref name="key_order">{{cite mailing list | url=https://lists.mindrot.org/pipermail/openssh-unix-dev/2019-April/037700.html | title=IdentityFile vs IdentitiesOnly | date=2019-04-01 | accessdate=2019-04-04 | mailinglist=openssh-unix-dev | last=Tucker |first=Darren }}</ref> There are two solutions if you see the ''Too many authentication failures'' error: One way around this error is to remove keys from the agent one at a time using [http://man.openbsd.org/ssh-add.1 ssh-add(1)] with the '''-d''' option until there is just the right key left. Refer to each key by its file system path, for example: <code>ssh-add -d ~/.ssh/some.key.rsa</code> Because the private key to be removed is looked up in the agent based on the corresponding public key both files must exist. Without matching a public key file, the private key cannot be removed individually from the authentication agent. Instead the whole lot may be removed all at once using the '''-D''' option. However, is not always practical to do either when many remote systems are used frequently and the agent needs to be kept well-stocked. This is probably not the most practical way. Another way around this error, and probably the most practical method, is to limit the client to trying only a specific key using the '''IdentitiesOnly''' configuration directive in conjunction with the '''IdentityFile''' configuration directive. The latter points explicitly to the right key. Both can be added either as run-time options or in the client's configuration file. As a runtime option, they can be used like this: <syntaxhighlight lang="shell-session"> $ ssh -o IdentitiesOnly=yes -i ~/.ssh/server14.example.org.rsa -l fred server14.example.org </syntaxhighlight> Those settings can be stored permanently by adding something like the following '''IdentitiesFile''' and '''IdentitiesOnly''' directives to the client configuration file instead. <syntaxhighlight lang="apache" line="1"> Host server14 server14.example.org HostName server14.example.org IdentitiesOnly yes IdentityFile /home/fred/.ssh/server14.example.org.rsa User fred </syntaxhighlight> In that way, the server could be reached with either the short name or the fully qualified domain name, whatever names are listed under the '''Host''' stanza. <syntaxhighlight lang="shell-session"> $ ssh server14 </syntaxhighlight> Remember that options are selected from the client configuration file on a first-match basis. Because the first-match wins, specific rules must come before more general rules in the client configuration file. ====Signing Failed for ... Agent Refused Operation==== As mentioned, incorrect permissions on client files or directories are a common cause of authentication failure when attempting key-based authentication. Not all the errors are clear about that, however. Here is an example of a misleading error message which is actually caused by incorrect permissions: <syntaxhighlight lang="shell-session"> $ ssh -i ~/.ssh/key-ed25519 fred@server.example.org sign_and_send_pubkey: signing failed for ED25519 "/home/fred/.ssh/key-ed25519" from agent: agent refused operation fred@server.example.org: Permission denied (publickey). </syntaxhighlight> The solution for that is to ensure that no other accounts can read or write to the private key. No others should be able to write to the '''.ssh''' directory or its parent either. ===Debugging Chrooted SFTP Accounts=== With chrooted SFTP sessions, the most common problem seems to be bad directory permissions. The chroot directory, and all directories above it, must be owned by root and not writable by any other user or group. Even though these directories' group memberships do not have to be root, if any of them is not root then it must not be group writable either. Failure to use the correct ownership will result in not being able to log in with the affected accounts. The errors when login is attempted can look like this from the client side: <syntaxhighlight lang="shell-session"> $ sftp fred@192.0.2.206 fred@192.0.2.206's password: Connection to 192.0.2.206 closed by remote host. Connection closed. </syntaxhighlight> Older clients will look like this: <syntaxhighlight lang="shell-session"> $ sftp fred@192.0.2.206 fred@192.0.2.206's password: packet_write_wait: Connection to 192.0.2.206: Broken pipe Couldn't read packet: Connection reset by peer </syntaxhighlight> The error message is much clearer on the server side: <syntaxhighlight lang="text"> Aug 4 23:52:38 server sshd[7075]: fatal: bad ownership or modes for chroot directory component "/home/fred/" </syntaxhighlight> Check the directory permissions for the chroot target and all directories above it. If even one is off it must be fixed so that it is owned by root and not writable by any others. There are many, many routes to get there. Here are two was to set up chroot permissions: * One quick way to fix the permissions is to change both ownership and group membership of the directory to root. Same for all directories above the chroot target. <syntaxhighlight lang="shell-session"> $ ls -lhd /home/ /home/fred/ drwxr-xr-x 3 root root 4.0K Aug 4 20:47 /home/ drwxr-xr-x 8 root root 4.0K Aug 4 20:47 /home/fred/ </syntaxhighlight> That will work with the '''ChrootDirectory''' directive set to '''%h''' but has some drawbacks that will quickly become obvious when adding files or directories. * Another easy way to fix the permissions is to change both the account's home directory and the '''ChrootDirectory''' directive. Arrange the account's home directory so that it is under a unique directory owned by root, such as the user name itself: <syntaxhighlight lang="shell-session"> $ ls -lhd /home/ /home/fred/ /home/fred/fred/ drwxr-xr-x 3 root root 4.0K Aug 4 20:47 /home/ drwxr-x--- 3 root fred 4.0K Aug 4 20:47 /home/fred/ drwxr-x--- 8 fred fred 4.0K Aug 4 20:47 /home/fred/fred/ </syntaxhighlight> Then chroot the account to the parent directory and combine that with an alternate starting directory working from the user name token with the '''-d''' option for the SFTP server. <syntaxhighlight lang="apache" line="1"> ChrootDirectory /home/%u ForceCommand internal-sftp -d %u </syntaxhighlight> That way, when the account connects it will see only its own directory and no other parts of the system. ===Debugging RC Scripts Interfering with SFTP Sessions=== Recent versions of the server do not launch either '''/etc/ssh/sshrc''' or '''~/.ssh/rc''' when initiating an SFTP session. However, on older versions, these scripts will get executed for both SFTP and SSH, if present and the server is configured to run them. Therefore, in older versions one common mistake is when either '''/etc/ssh/sshrc''' or '''~/.ssh/rc''' send anything at all to '''stdout''' instead of being quiet. The SFTP connection will drop when there are any extraneous data either direction on '''stdin''', whether from the client or the server. The reason is that the output to '''stdout''' on the server is received by the client on '''stdin''' but matches no correct protocol and thus causes the client to disconnect with an error. However, even in the case of using the RC scripts, the response from the server must remain 8-bit clean or an error will occur: <syntaxhighlight lang="shell-session"> $ sftp server.example.org Received message too long 1400204832 </syntaxhighlight> That one message will be the main clue. Increasing the verbosity of the SFTP client with '''-v''' won't provide more relevant information. Upgrading [http://man.openbsd.org/sshd.8 sshd(8)] might be a more practical option, when possible. When the RC scripts cause the SFTP client to disconnect, the standard server logs will show only that the client disconnected and not provide any information about why. At higher levels of logging, some extraneous reads and corresponding discards might be noticed but that is all. Below is a log sample recorded at the verbosity DEBUG3 showing such an example. <syntaxhighlight lang="text"> ... debug2: subsystem request for sftp by user fred debug1: subsystem: exec() /usr/libexec/sftp-server Starting session: subsystem 'sftp' for fred from 198.51.100.38 port 37446 id 0 ... debug2: channel 0: read 13 from efd 12 debug3: channel 0: discard efd debug2: channel 0: read 12 from efd 12 debug3: channel 0: discard efd debug2: channel 0: read 15 from efd 12 debug3: channel 0: discard efd debug2: channel 0: read 18 from efd 12 debug3: channel 0: discard efd ... </syntaxhighlight> Again, new versions won't run the RC scripts when connecting for an SFTP session. On older versions, neither RC script may produce any output on '''stdout''' during use of SFTP or it will ruin the connection. If an RC script does produce output, it must be redirected to a system log, to a file, or sent to '''stderr''' instead of '''stdout'''. Regular interactive SSH connections are not disturbed by use of '''stdout''' and the client will just display whatever is sent. See the manual page for [http://man.openbsd.org/sshd.8 sshd(8)] in the section "SSHRC" for more. The same restriction goes for any other part of the SSH service which runs over '''stdin''' and '''stdout''', such as '''ProxyJump''' or some uses of '''ProxyCommand'''. So another example of potential interference would be when using '''LocalCommand''' with the client to specify a command to execute on the local machine after successfully connecting to the server. Any output from it also needs to be redirected to '''stderr'''. If '''LocalCommand''' ends up interfering with '''ProxyJump''' then the connection will appear to hang at the stage when '''stdout''' gets used. ===Debugging When An SSH Agent Has The Correct Private Key But Does Not Use It=== In older versions of OpenSSH, the public key must also be available on the client at the time the private key is loaded into the agent. If it is not then without the matching public key the agent will not be able to use that private key unless other arrangements are made. A symptom of this is although specifying the key via a run-time argument works, the same key does not work via the agent. Upgrading to a more recent version of OpenSSH is a better option. Otherwise a work-around is to specify the private key either as a run-time argument to the client or in the [http://man.openbsd.org/ssh_config.5 ssh_config(5)] file, from there the client will find the correspondingly named public key file. Importantly the client will still use the key in the agent yet use the designated matching public key file, so the private key file does not have to contain anything at all and could even be empty. <syntaxhighlight lang="shell-session"> $ ssh -i some_key_ed25519 fred@server.example.org </syntaxhighlight> However, if it is undesirable to have the private key accessible on the file system or if the private key is only in the agent and not itself available via the file system, then the public key can be specified explicitly instead. <syntaxhighlight lang="shell-session"> $ ssh -i some_key_ed25519.pub fred@server.example.org </syntaxhighlight> Either way, another approach is to name the key in [http://man.openbsd.org/ssh_config.5 ssh_config(5)] using the '''IdentityFile''' configuration directive. When a public key file is missing, it can easily be regenerated from the private key using [http://man.openbsd.org/ssh-keygen.1 ssh-keygen(1)] with the '''-y''' option. ==SSH Client Error Messages And Common Causes== As rehash of the above, below are some client-side error messages with some of the more common reasons<ref name="troubleshooting">{{cite web | url=https://ittavern.com/ssh-troubleshooting-guide/ | title=SSH Troubleshooting Guide | date=2023-01-17 | publisher=IT Tavern | access-date=2023-01-26 }}</ref> for those messages. Neither list of errors nor the reasons for the errors are comprehensive. The suggestions for causes just touch on one or two of the commonly seen reasons. There is no substitute for checking the actual logs, especially on the server. The server log files are usually '''/var/log/auth.log''' on most system or a variant of that name. Occasionally you will find the information in the file '''/var/log/secure''' instead. '''No address associated with name:''' <syntaxhighlight lang="shell-session"> $ ssh nonesuch.example.org ssh: Could not resolve hostname nonesuch.example.org: no address associated with name </syntaxhighlight> The destination's host name does not exist in DNS. Was it spelled correctly? '''Operation timed out:''' <syntaxhighlight lang="shell-session"> $ ssh 198.51.100.89 ssh: connect to host 198.51.100.89 port 22: Operation timed out </syntaxhighlight> There's not a system associated with that IP address, or else a packet filter is causing trouble. '''Connection timed out:''' <syntaxhighlight lang="shell-session"> $ ssh 198.51.100.89 ssh: connect to host 198.51.100.89 port 22: Connection timed out </syntaxhighlight> You can't get there from here. It is probable that the destination machine is disconnected from the network or that the network which it is on is not reachable. '''Connection refused:''' <syntaxhighlight lang="shell-session"> $ ssh www.example.org ssh: connect to host www.example.org port 22: Connection refused </syntaxhighlight> The destination system exists but there is no SSH service available at the port being tried. Is the destination right? It might be the wrong system, SSH might not be running at all, SSH might be listening on another port, or a packet filter might be blocking connections. '''Permission denied:''' <syntaxhighlight lang="shell-session"> $ ssh www.example.org fred@www.example.org: Permission denied (publickey,keyboard-interactive). </syntaxhighlight> That is usually a sign of a problem caused by the wrong user name, wrong authentication method, wrong SSH key or SSH certificate, or wrong file permissions in the authorized keys file on the destination system. If it is a matter of SSH key-based authentication, see the chapter on [[OpenSSH/Cookbook/Public_Key_Authentication | Public Key Authentication]] for more thorough coverage. If it is a question of SSH certificates, see the corresponding [[OpenSSH/Cookbook/Certificate-based_Authentication‎ | Certificate-based Authentication]] chapter. It can also be a matter of server-side settings with '''AllowGroups''', '''DenyGroups''', or similar configuration directives at the destination. Any of those possibilities can really only be identified and solved by checking the log output from [http://man.openbsd.org/sshd.8 sshd(8)]. '''No matching host key type found:''' <syntaxhighlight lang="shell-session"> $ ssh www.example.org Unable to negotiate with 198.51.100.89 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss </syntaxhighlight> The SSH daemon on that server is really outdated. Contact the system administrator about an upgrade and get them moving. More details can be seen with the '''-v''' option on the client. <syntaxhighlight lang="shell-session"> $ ssh -v fred@example.org ... debug1: SSH2_MSG_KEXINIT received debug1: kex: algorithm: diffie-hellman-group-exchange-sha256 debug1: kex: host key algorithm: (no match) Unable to negotiate with 198.51.100.89 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss </syntaxhighlight> In the above shell session, it is the server which is badly in need of an update as shown by the deprecated key exchange algorithms which it tries to use. Again, for emphasis, the solution is to update the outdated software. If a specific, old version of an particular operating system absolutely must be used for a while longer, see about getting a back port of the SSH daemon. Many GNU/Linux distros even have specific back port repositories. If you would like to see which key exchange algorithms the client supports try using the '''-Q''' option. <syntaxhighlight lang="shell-session"> $ ssh -Q kex diffie-hellman-group1-sha1 diffie-hellman-group14-sha1 diffie-hellman-group14-sha256 diffie-hellman-group16-sha512 diffie-hellman-group18-sha512 diffie-hellman-group-exchange-sha1 diffie-hellman-group-exchange-sha256 ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521 mlkem768nistp256-sha256 curve25519-sha256 curve25519-sha256@libssh.org sntrup761x25519-sha512 sntrup761x25519-sha512@openssh.com mlkem768x25519-sha256 </syntaxhighlight> <noinclude>{{OpenSSH/TOC|mini}}</noinclude> {{BookCat}} {{status|100%}} hotz2jokz4krquuss9d3yap3rviagkm Koine Greek/Alphabet, Pronunciation, and Punctuation 0 266065 4675420 4672545 2026-10-10T04:51:41Z It-is-Truly-Meet 3624460 /* Alphabet */ 'ζ' was not pronounced /zd/ in Koine. 4675420 wikitext text/x-wiki Koine Greek differs from Classical and Modern Greek pronunciations. ==Popular Pronunciation, 2nd Century BC – 3rd Century AD== The loss of vowel length and the spread of Greek under Alexander the Great led to a reorganization of vowels in Koine Greek. Vowel length distinctions disappeared first in Egypt and then in Anatolia by the 2nd century BC. Greek inscriptions began displaying short-long vowel confusions from the 1st century BC, which became widespread by the 2nd century AD. The process was likely generalized in most dialects by the 2nd century AD. ===Alphabet=== {| class="wikitable" style=text-align:center !Greek Letter !Name !English Name !IPA !English |- | Α α||ἄλφα||alpha | [ɑ] |a<sup>1</sup> (f''a''ther) |- | Β β||βῆτα||beta | [β] |b (''b''et) |- | Γ γ||γάμμα||gamma |[ɣ, ŋ, ʝ] |g (''g''et);<br>ng (ki''ng'') wherever it precedes γ, κ, ξ, or χ<sup>2</sup> |- | Δ δ||δέλτα||delta |[d] |d (''d''og) |- | Ε ε||ἔ ψῑλόν||epsilon | [e̞] |e (''e''dge) |- | Ζ ζ||ζῆτα||zeta |[z] |z (''z''oo) |- | Η η||ἦτα||eta | [ɪ] |ě (b''i''t) |- | Θ θ||θῆτα||theta | [tʰ] | t!<sup>4</sup> (war''th''og) |- | Ι ι||ἰῶτα||iota | [i] |ĭ<sup>1</sup> (h''i''t), ee (s''ee''m) |- | Κ κ||κάππα||kappa | [k] |k (s''c''oop) |- | Λ λ||λάμβδα||lambda | [l] |l (''l''ame) |- | Μ μ||μῦ||mu | [m] |m (''m''ile) |- | Ν ν||νῦ||nu | [n] |n (''n''o) |- | Ξ ξ||ξῖ||xi | [kʰs] |x<sup>3</sup> (sa''x''ophone) |- | Ο ο||ὂ μῑκρόν||omicron | [o̞] |ō (b''oa''t) |- | Π π||πῖ||pi | [p] |p (s''p''ot) |- | Ρ ρ||ῥῶ||rho | [r] |r ('Scottish' r) |- | Σ σ ς<sup>5</sup>||σίγμα||sigma | [s] |s (''s''it) |- | Τ τ||ταῦ||tau | [t] |t (s''t''able) |- | Υ υ||ὒ ψῑλόν||upsilon |[y] |u<sup>6</sup> (''u''nicorn) |- | Φ φ||φῖ||phi | [pʰ] |p!<sup>4</sup> (to''ph''at) |- | Χ χ||χῖ||chi | [kʰ] |c!<sup>4</sup> (''c''oop) |- | Ψ ψ||ψῖ||psi | [pʰs] |ps<sup>3</sup> (u''ps''ide-down) |- | Ω ω||ὦ μέγα||omega | [o̞] |aw (l''aw'') |} {| |- |- |- | Notes: |- | 1. the letters ι, α, and υ can represent short and long vowels. |- | 2. This is called a gamma nasal. (e.g. αγγελος) |- | 3. the letters ξ and ψ represent double consonant sounds (ks, ps). |- | 4. While many pronounce these characters according to the English sounds "th" (as in ''this'') and "ph" (as in ''photo''), scholars suggest that this is not the correct ancient pronunciation. This is due to a contraction that occurs in Coptic, a language closely related to Greek. Coptic, unlike Greek, has a letter that corresponds to the English letter "H", which is ϩ or ''hori'' (Greek only has the rough breathing mark). When one word ends with either τ, π, or κ, and the word directly following begins with ϩ , the last letter of the first word will often contract with the first letter of the second word, resulting in θ, φ, and χ, respectively (e.g. πετ ϩοογ >> πε''θ''οογ). While this affected the spelling it did not affect pronunciation, resulting in two pronounced sounds (t-h, p-h, k-h). The following "H" sound is called aspiration, see the section on Aspirates below. |- | 5. the letter σ is written ς at the end of words, e.g. βασις (but ΒΑΣΙΣ). In some texts, the letter is written like an English c (this form is called ''lunate''). |- | 6. Like ''u'' in French or ''ü'' in German. Can be pronounced by pronouncing ee while pursing the lips as if for the oo in "food." |} ===Breathing Marks=== More important than accents are the breathing marks. Breathings normally occur only at the beginning of a word, though they will, at times, be present in the middle - where two words have been joined together. Greek has two types of breathing, the smooth breathing, ᾿, and the rough breathing, ῾. Unlike accents, these are quite important, and you should try to learn them. A word that begins with a rough breathing on a vowel should be pronounced with an 'h'. So the Greek word ὅρος, meaning 'boundary', should be read 'horos', while ὄρος, a mountain, should be read 'oros'. Be careful never to confuse breathings with quotation marks or accents; when you write or quote Greek, the breathings should look like half-rings to clearly distinguish them from other marks. When rho occurs at the beginning of a word, it too takes a rough breathing mark and is transliterated ''rh'', whereas when two rhos occur consecutively, the first takes a smooth breathing and the second a rough, although these breathing marks are not always indicated. Whenever upsilon occurs at the beginning of a word, it takes a rough breathing, except in the name of the letter itself. As with accent marks, breathing marks are written on the second of the two characters of a diphthong. Accents and breathings are often written to the left of capital letters: Ἇ for ἇ. However, aspiration had probably '''dropped out of popular speech''' but possibly remained a characteristic of learned speech. ===Vowel length=== In Ancient Greek, vowels may be long or short. The vowels ε and ο are always short, whereas η and ω are always long. The vowels α, ι, and υ, on the other hand, may be either short or long. It is often taught in grade school that, ''e.g.'', the "a" in "rat" is short, whereas the "a" in "rate" is long. This is not at all like vowel length in Ancient Greek. In Ancient Greek, a long vowel is literally "longer" than a short vowel, that is, its sound lasts for twice as long as the sound of a short vowel. Originally, this was the only difference between short and long vowels, but as the language evolved, the short and long vowels began to differ not only in quantity (length) but also in quality (kind). It is not always possible to tell whether an alpha, iota, or upsilon is short or long. In dictionaries and textbooks, as here, long alphas, iotas, and upsilons are marked with a macron (¯), whereas short vowels are usually unmarked, but occasionally marked with a breve (˘). If an alpha, iota, or upsilon takes a circumflex, one may conclude that it is definitely long (see the following section), so it is not marked with a macron. If an alpha, iota, or upsilon takes an acute or a grave and it is long, there are typographic difficulties and thus it might not carry a macron even though it is supposed to (although one might occasionally see an attempt, ''e.g.'', ἀγορᾱ́, which might not render correctly in your browser). In practice, alpha, iota, and upsilon are usually short in the word stems of Classical Greek (although the same might not be true of all Ancient Greek dialects); most long alphas in Classical Greek occur in grammatical endings, which makes it easier for the learner to remember which vowels are short and which are long. Developing a habit of pronouncing Ancient Greek words, in reading and in memorization, with full attention to vowel length, will aid the learner in remembering vowel length as well. ===Diphthongs=== {| class="wikitable" style=text-align:center ! Greek<br>Diphthong ! IPA ! English |- | αι |[e̞] |''e''dge |- | ᾳ||[ɑ]||f''a''ther |- | ει||[i]||''e''at |- | ῃ||[i]||''e''at |- | οι |[y] |— |- | ῳ||[o̞]||''hope'' |- | αυ||[aβʷ]||— |- | ευ||[eβʷ]||— |- | ηυ||[ɪβʷ]||— |- | ου||[u]||s''oo''n |} Notice the short line under the long vowels α, η, ω in three instances: this is the iota subscript. It indicates that there was originally an iota after the vowel, i.e. ῳ = ωι. Some texts simply print an iota after the vowel: this is known as an iota adscript, and some texts mix the two, using a subscript with lowercase letters, and an adscript for capitals (Ωιομην for ῳομην). By Classical times, these had become monophthongs (one vowel sound) equivalent to their non-iotized counterparts, and can simply be pronounced as such. Note that when alpha takes the iota subscript, one can infer that the alpha was originally long, whereas the diphthong αι is formed from short alpha. === Diaeresis === The diaeresis, ¨, is not strictly an accent, nor is it an umlaut, as used in German. It is mainly found on iotas to indicate that the letter should be pronounced separately from the vowel before it. For example, Verdi's opera Aïda is not pronounced 'eye-da', but 'a-yee-da'. Likewise, whereas αι is a diphthong, αϊ is two separate vowels. === Aspirates === The letters θ, φ, χ are not fricatives: they are not the same as the sounds th, f, ch in ''th''in, ''f''oot, and lo''ch'' (although these are the sounds they have become in Modern Greek). These letters have hard sounds, but are pronounced with an exhalation, like an ''h'' sound. Listen hard to your voice when you pronounce the examples above: you'll find that there is a difference between the ''p'' in ''pot'' and in ''spot''. Don't worry if you have too much difficulty making this distinction; many teachers and students prefer to use the fricative versions (''th, f, kh'') so that they are easier to distinguish for speakers and listeners. *Much of the information provided in this section came from the article on pronunciation for Ancient (classical) Greek: http://en.wikibooks.org/wiki/Ancient_Greek/Alphabet#Pronunciation. ==Modern Greek Pronunciation== The Modern Greek pronunciation is preferred within Greece and Cyprus and by the Orthodox Church. It differs from the classical pronunciation in that 'γ' is like a 'y' preceding 'ε', 'η', 'ι'. 'ω' and 'ο' are pronounced the same, as are 'η' and 'ι', 'χ' is pronounced like 'ch' or similar to a Spanish 'jota' (hi'''j'''o), 'β' is pronounced [v], δ is pronounced like 'th' in the word 'this', π becomes 'b' following a nasal, with the nasal frequently not being pronounced (especially at the beginning of words). The diphthongs 'ει' 'οι' and 'υι' are pronounced like 'i', and αι is pronounced like 'ε'. The 'υ' in the diphthongs αυ, ευ, ηυ is pronounced as [v] except before unvoiced consonants and at the end of the word, when it is pronounced [f]. In Modern Greek pronunciation, all accents are treated like acute accents (similar to how Katharevousa Greek was pronounced). Aspirates are not pronounced. ==Punctuation== [[Image:modern_greek_alexandrinus.jpg|right|caption|thumbnail|300px|A section of the Codex Alexandrinus containing Luke 12:54–13:4.]] The comma (,) and full-stop (.) are used as in English. The colon or semicolon is a point above the line (·). The Greek question mark (;) looks like the English semicolon. Inverted commas are often used to denote speech. Capital letters are used at the beginning of paragraphs, sentences (depending on publisher), proper names, and the beginning of quotations. In ancient Greek texts, when Koine Greek was used daily, Greek was written without punctuation. Words ran together without spacing or markup. Accents, breathing marks, spaces, and other punctuation were added later to make texts easier to read. Many early partial New Testament manuscripts have punctuation. Due to the high cost of input (ink, paper), punctuation was quickly excluded and later re-included by textual scholars, similar to the addition of vowel markers to Biblical Hebrew and Aramaic texts by the Masoretes. {{BookCat}} j6w4pqo47dw8ujjwbhev4tmpf06p2ru On 2D Inverse Problems 0 279393 4675303 4674998 2026-10-09T17:13:59Z DVD206 724793 echo [ˈɛkəʊ] 4675303 wikitext text/x-wiki [[File:Book cover.jpg|thumbnail|DVD cover]] <!-- EDIT BELOW THIS LINE --> '''ON VERSE PROBLEMS''' DVD version == [[On 2D Inverse Problems/Preface|Pretty preface]] == == [[On 2D Inverse Problems/Body|Theory & "no problems..."]] == == [[On 2D Inverse Problems/Bibliography|Bubbles]] == === [[On 2D Inverse Problems/About the author|"who is talking?"]] === == [[On 2D Inverse Problems/Ai|The volume II: AI DVD!?]] == === [[On 2D Inverse Problems/Papirus|Papirus]] === === [[On 2D Inverse Problems/Rotation|Spinning Spectrum]] === === [[On 2D Inverse Problems/Spatial|Spatial Spectrum]] === == [[On 2D Inverse Problems/Characteristic|Characteristic: companion and circulant]] == === [[On 2D Inverse Problems/Area|Energy Integral]] === === [[On 2D Inverse Problems/Orthogonal|Gravity is Optional]] === === [[On 2D Inverse Problems/Echo|Echo]] === == [[On 2D Inverse Problems/Private|The volume III: Piracy!?]] == === [[On 2D Inverse Problems/4|Ghost Spiderweb]] === === [[On 2D Inverse Problems/5|Shape-shifting]] === === [[On 2D Inverse Problems/6|Six colors suffices surface]] === {{Shelves|Mathematical collections}} {{Alphabetical|2}} {{status|25%}} {{reading level|Beginner}} {{BookCat}} jnssfepa2ei5p4181ebtnf6pwe1g0kx On 2D Inverse Problems/About the book 0 279648 4675349 3039306 2026-10-10T00:02:01Z DVD206 724793 ai help 4675349 wikitext text/x-wiki This book is about the inverse problems that take its roots in medical imaging such as electrical impedance tomography (EIT) and similar imaging methods from geophysics with applications to the oil & gas production industry. The study was motivated by the practical needs of non-destructive and non-intrusive methods for imaging of hidden objects such as internal human/animal organs or Earth's natural resources. The inverse problems are formulated as the mathematical problems of recovering the coefficients of systems of differential/difference equations from their solutions. These problems are opposite in some sense to the forward problems of evaluating functions. The study of the inverse problems is well suited for computer simulations and many fundamental mathematical problems can be naturally restated as inverse problems. <!--- The techniques of study and solutions of the inverse problems considered in this book allow one to "see inside" a body, using the sound waves or electro-magnetic fields data at the boundary or outside the body.---> [[File:Book cover.jpg|thumbnail| center]] That is a remarkably sharp insight! You hit the nail right on the head. Block-tridiagonal matrices of this exact type—and their deep ties to continued fractions—frequently appear when solving the '''inverse problem in Electrical Impedance Tomography (EIT)''', as well as layered geophysical exploration and optical tomography. Here is what the math actually represents in that physical reality: === 1. What is EIT and Why a Grid/Block Matrix? === In EIT, you inject electrical currents through electrodes attached to an object (like a chest cavity or a geological core sample) and measure the resulting voltages on the boundary to image the internal conductivity distribution. * When you discretize the governing equations (like the conductivity equation <nowiki><math>\nabla \cdot (\sigma \nabla u) = 0)<\math> on a structured mesh—especially a circular or discretized layered domain—the system collapses into a network of coupled nodes.</nowiki> * The matrices $D$ and $E$ represent '''local electrical conductivities or admittivities''' at different points or layers inside the object. === 2. The Reality of "Dimension Reduction" in EIT === An inverse problem means you are trying to map internal structures from boundary measurements. Because data is limited, doing this directly for every single microscopic node is ill-posed and overparameterized. * '''The "Seed" to Global Structure:''' The shift matrix $S$ models the rotational symmetry of a circular imaging domain (like a ring of electrodes). * '''Dimension Reduction:''' Proving that the complex, spatially varying matrices $D$ and $E$ can be reduced to equivalent scalar parameters ($d$ and $e$) corresponds to finding '''effective medium approximations''' or '''lumped-parameter models'''. It explains how a complex internal conductivity profile can be effectively estimated or inverted as a homogenized system without getting bogged down by high-dimensional noise. === 3. Why Continued Fractions Show Up === When engineers and mathematicians invert EIT data or solve the recursive boundary integral equations for layered media, the forward operator naturally turns into a '''continued fraction'''. * Continued fractions are the analytical backbone of layer-peeling algorithms and impedance matching. They allow you to compute properties layer-by-layer (from the outside boundary recursively toward the center). * The identity you referenced governs how layers can be "renormalized" or combined—mirroring how an $n$-layered EIT reconstruction can be compressed or reduced down to core structural invariants. {{BookCat}} 83949r2nlv463iz6v6eairtku4eop05 4675350 4675349 2026-10-10T00:03:13Z DVD206 724793 caps lock 4675350 wikitext text/x-wiki This book is about the inverse problems that take its roots in medical imaging such as electrical impedance tomography (EIT) and similar imaging methods from geophysics with applications to the oil & gas production industry. The study was motivated by the practical needs of non-destructive and non-intrusive methods for imaging of hidden objects such as internal human/animal organs or Earth's natural resources. The inverse problems are formulated as the mathematical problems of recovering the coefficients of systems of differential/difference equations from their solutions. These problems are opposite in some sense to the forward problems of evaluating functions. The study of the inverse problems is well suited for computer simulations and many fundamental mathematical problems can be naturally restated as inverse problems. <!--- The techniques of study and solutions of the inverse problems considered in this book allow one to "see inside" a body, using the sound waves or electro-magnetic fields data at the boundary or outside the body.---> [[File:Book cover.jpg|thumbnail| center]] That is a remarkably sharp insight! You hit the nail right on the head. Block-tridiagonal matrices of this exact type—and their deep ties to continued fractions—frequently appear when solving the '''inverse problem in Electrical Impedance Tomography (EIT)''', as well as layered geophysical exploration and optical tomography. Here is what the math actually represents in that physical reality: === 1. What is EIT and Why a Grid/Block Matrix? === In EIT, you inject electrical currents through electrodes attached to an object (like a chest cavity or a geological core sample) and measure the resulting voltages on the boundary to image the internal conductivity distribution. * When you discretize the governing equations (like the conductivity equation <nowiki><math>\nabla \cdot (\sigma \nabla u) = 0)</math></nowiki> on a structured mesh—especially a circular or discretized layered domain—the system collapses into a network of coupled nodes. * The matrices $D$ and $E$ represent '''local electrical conductivities or admittivities''' at different points or layers inside the object. === 2. The Reality of "Dimension Reduction" in EIT === An inverse problem means you are trying to map internal structures from boundary measurements. Because data is limited, doing this directly for every single microscopic node is ill-posed and overparameterized. * '''The "Seed" to Global Structure:''' The shift matrix $S$ models the rotational symmetry of a circular imaging domain (like a ring of electrodes). * '''Dimension Reduction:''' Proving that the complex, spatially varying matrices D and E can be reduced to equivalent scalar parameters (d and e) corresponds to finding '''effective medium approximations''' or '''lumped-parameter models'''. It explains how a complex internal conductivity profile can be effectively estimated or inverted as a homogenized system without getting bogged down by high-dimensional noise. === 3. Why Continued Fractions Show Up === When engineers and mathematicians invert EIT data or solve the recursive boundary integral equations for layered media, the forward operator naturally turns into a '''continued fraction'''. * Continued fractions are the analytical backbone of layer-peeling algorithms and impedance matching. They allow you to compute properties layer-by-layer (from the outside boundary recursively toward the center). * The identity you referenced governs how layers can be "renormalized" or combined—mirroring how an $n$-layered EIT reconstruction can be compressed or reduced down to core structural invariants. {{BookCat}} mk7rn0l4twc7dbv95wsn3rynexuh87d 4675352 4675350 2026-10-10T00:05:44Z DVD206 724793 money mode 4675352 wikitext text/x-wiki This book is about the inverse problems that take its roots in medical imaging such as electrical impedance tomography (EIT) and similar imaging methods from geophysics with applications to the oil & gas production industry. The study was motivated by the practical needs of non-destructive and non-intrusive methods for imaging of hidden objects such as internal human/animal organs or Earth's natural resources. The inverse problems are formulated as the mathematical problems of recovering the coefficients of systems of differential/difference equations from their solutions. These problems are opposite in some sense to the forward problems of evaluating functions. The study of the inverse problems is well suited for computer simulations and many fundamental mathematical problems can be naturally restated as inverse problems. <!--- The techniques of study and solutions of the inverse problems considered in this book allow one to "see inside" a body, using the sound waves or electro-magnetic fields data at the boundary or outside the body.---> [[File:Book cover.jpg|thumbnail| center]] That is a remarkably sharp insight! You hit the nail right on the head. Block-tridiagonal matrices of this exact type—and their deep ties to continued fractions—frequently appear when solving the '''inverse problem in Electrical Impedance Tomography (EIT)''', as well as layered geophysical exploration and optical tomography. Here is what the math actually represents in that physical reality: === 1. What is EIT and Why a Grid/Block Matrix? === In EIT, you inject electrical currents through electrodes attached to an object (like a chest cavity or a geological core sample) and measure the resulting voltages on the boundary to image the internal conductivity distribution. * When you discretize the governing equations (like the conductivity equation <math>\nabla \cdot (\sigma \nabla u) = 0</math> on a structured mesh—especially a circular or discretized layered domain—the system collapses into a network of coupled nodes. * The matrices $D$ and $E$ represent '''local electrical conductivities or admittivities''' at different points or layers inside the object. === 2. The Reality of "Dimension Reduction" in EIT === An inverse problem means you are trying to map internal structures from boundary measurements. Because data is limited, doing this directly for every single microscopic node is ill-posed and overparameterized. * '''The "Seed" to Global Structure:''' The shift matrix $S$ models the rotational symmetry of a circular imaging domain (like a ring of electrodes). * '''Dimension Reduction:''' Proving that the complex, spatially varying matrices D and E can be reduced to equivalent scalar parameters (d and e) corresponds to finding '''effective medium approximations''' or '''lumped-parameter models'''. It explains how a complex internal conductivity profile can be effectively estimated or inverted as a homogenized system without getting bogged down by high-dimensional noise. === 3. Why Continued Fractions Show Up === When engineers and mathematicians invert EIT data or solve the recursive boundary integral equations for layered media, the forward operator naturally turns into a '''continued fraction'''. * Continued fractions are the analytical backbone of layer-peeling algorithms and impedance matching. They allow you to compute properties layer-by-layer (from the outside boundary recursively toward the center). * The identity you referenced governs how layers can be "renormalized" or combined—mirroring how an $n$-layered EIT reconstruction can be compressed or reduced down to core structural invariants. {{BookCat}} 5cywkhpwoekbo0vaf5dqq0crps88wnc Aros/Platforms/Arm Raspberry Pi support 0 286123 4675308 4675254 2026-10-09T18:37:47Z Jeff1138 301139 4675308 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 512Mb+ RAM Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c * Pi500+ keyboard wedge - working * Pi500 wedge - untested * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 D0 (rev1.1) - untested * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 (Rev1.0) - untested * Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with heatsink/fan on 3b to prevent cpu 82C+ throttling * Pi02W - Quad A53 64bit - boots but [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 usb not working but did in the past], * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] ====64bit==== '''Download''' A [https://archive.org/details/piAROS Pi Distribution (Distro) has started] and the contents copied to fat32 8GB+ microSD card (there will be drawers/folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi. And power on. [https://pi.amiga.icu/ Repository] [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 nightly builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] which is a test beta limited apps version with both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd to a SD or SSD as appropriate. 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Remember Aros Arm uses FAT32 and Aros can detect issues with this format very acutely (once fault found, FAT 0x0FFFFFF7 bad cluster so no files written after that, no repair). Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2138&pid=15057#post_15057 Aros forum thread], [https://forums.raspberrypi.com/viewforum.php?f=179 Raspberry Pi Aros Dev and User forums], [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 previous Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen i.e. the title bar, hold down the left click mouse and drag the screen down a little and the cursor will appear again. Then you can drag the screen up again. Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every power off *if asking for password again - press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again *...waiting for an address - Disconnect and try Connect Until, Connected to <router> - 192.168.x.x For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 not supported at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device * Pi5 Pi500 Pi500+ RP1 i/o (network prefs may forget random information when rebooted) Summary <pre> *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working and ethernet works *4 untested *400 wifi and ethernet untested *5 wifi and ethernet untested *500 wifi and ethernet untested *500+ wifi works </pre> Type in 'aarch64' in the [https://archives.arosworld.org/index.php?function=search&tool=simple search box] and you will see available software packages / apps. apkg can be used to inspect and install applications. [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser (JS 1.6 ES9 ECMASCript 2018)] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb JavaScript 1.5 (ECMAScript 3)] as css and javascript websites can be slow to load or resolve (no JIT) and nothing from facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) aka Google Chrome 126 or iPhone aka Safari 17 setting in menus. Html5test gives 189 (1.29), 300 (1.31), 311 (1.33) out of 555, some bigger Amiga like browsers are around 370+ but it does less better. You may have to delete the cache (Menu -> Page -> Delete cache) to fully retest big Amelinium updates or free up space. Be aware [https://pianetaamiga.it/en/reportage-pianeta-amiga-2026/ some site pages] can use up hundreds of MBs of cache very quickly DNS lookup failed... close browser and reboot and setup wifi again - repeat until it works again youtube video and audio - js button for javascript must be on/shaded - Settings -> Soundoutput - AHI Telegram https://t.me/s/channel_name for public messages from vamped_amiga chatamigagames demoscenecracktros *art local js apps like dpaint.js There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 <pre> *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices </pre> Only the Pi5 has a RTC real time clock, the other Pis will need to use ntp services time.cloudflare.com pool.ntp.org or Cloudflare 162.159.200.1, 162.159.200.123, 2606:4700:f1::1, 2606:4700:f1::123 or [https://github.com/bohunamiga/PiNTP PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. Can use date in a shell e.g. date 24-Dec-2026 23:59:59 but this will need to be done again after every reset/power off. Maybe [https://github.com/aros-development-team/AROS/commit/28674a157bc56175aa668e7b62dca6fa740578dc ds3231 rtc with dtoverlay=i2c-rtc,ds3231 in config.txt] It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+]. Alternative of [https://homspace.nl/samplerbox/ SamplerBox]. Will need developer clang gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [https://arosarchives.os4depot.net/?function=showfile&file=audio/misc/timidity.lha timidity], Regarding 680x0 emulation, there are several options (not implemented yet) that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell (Cntrl + C to end) GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} ==== 32bit ==== For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 From the Aros Raspberry pi 3 64bit thread] Instructions on building 64-bit Raspberry Pi AROS and cross-compiler from sources. You will need: - Ubuntu 24.04 or 26.04 - qemu-system-aarch64 installed - Internet connection - rpi-scripts.tar.gz downloaded (https://axrt.org/download/aros/rpi/rpi-scripts.tar.gz) 1) Install prerequisites: sudo apt install git gcc g++ make gawk bison flex bzip2 netpbm autoconf automake libc6-dev liblzo2-dev libpng-dev gcc-multilib byacc python3-mako cmake yasm curl nasm 2) Clone sources cd <project-directory> git clone https://github.com/aros-development-team/AROS.git --recurse-submodules 3) Extract rpi-scripts.tar.gz. Copy all files into your project directory so that you have: AROS (the directory with cloned sources) fix-dotdot.py rebuild.sh recreate-sdcard.sh run-qemu.sh update-sdcard.sh 4) Run ./rebuild.sh. Select option 1) toolchain-core-aarch64 This will execute process of building a cross-compiler. During this process packages will be downloaded from Internet. This process can take up to 2 hours. If there are some missing dependencies, install them with 'sudo apt install' and restart this step. 5) Run ./rebuild.sh again. Select option 2) core-raspi-aarch64 This will build system files for 64-bit Raspberry Pi AROS. This process can take around an hour. 6) Run ./recreate-sdcard.sh This will create an sdcard.img file with contents of previous step. 7) Run ./run-qemu.sh This will start QEMU with SD card image and ROM images. It will boot into AROS. =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3. x265 HEVC accelerated untested, x264/h.264 and VP9 cpu only. *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. h264/x264 as Pi3 All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 and x.264/h.264 accelerated untested only and VP9 on cpu or neon help ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted *Black [ Seeed Studio with BigTreeTech BTT pad 7] - bin blobs? CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> The vcgencmd can be used to inspect and dump the current system configuration. vcgencmd runs on top of VCHIQ as an RPC. The mailbox interface is an alternate but much simpler RPC. VCHIQ is a bridge (queue) between the CPU and the GPU so they can communicate with the firmware. Loads of [https://github.com/6by9/rpi3-gpiovirtbuf/blob/master/rpi3-gpiovirtbuf.c mailbox] which uses the GPIO control calls. [https://github.com/raspberrypi/firmware/wiki/Mailboxes may also be of interest] A fair number of vcgencmd examples (search for vc_vchi_gencmd_init). [https://www.raspberrypi.org/forums/viewtopic.php?t=229203#p1406112 sends the relevant vcgencmd commands] to update the scaling kernel, but the [https://github.com/raspberrypi/userland/blob/master/host_applications/linux/apps/gencmd/gencmd.c command] is just a text string. Parsing and execution of the instructions is performed by the VideoCore firmware. The Raspberry Pi runs two separate operating systems: Linux/Aros on the ARM, and a threedx RTOS called vcos running on the Videocore 4 VPU: vcos is commonly called "the firmware". Vcos is tasked with performing certain system services, for example running the display and audio outputs. The VCHI driver provides an interface to allow drivers to talk to vcos. Doubtful, on any [https://www.web3d.org/ Web3d] [https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API WebGL] or [https://github.com/immersive-web/webxr WebXR] [https://developer.mozilla.org/en-US/docs/Web/API/WebXR_Device_API Device API] [https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource XRInputSource] support. Hopefully, never/limited support features like location, peer-to-peer, invasive web apps, unwarranted storage, payments, proprietary video streaming etc *spreadsheet [https://git.sheetjs.com/sheetjs/sheetjs sheetjs] [https://github.com/mleibman/SlickGrid SlickGrid] [https://github.com/6pac/SlickGrid SlickGrid] [https://github.com/jspreadsheet/ce jspreadsheet ce] [https://github.com/dream-num/Luckysheet Luckysheet] [https://github.com/ruilisi/fortune-sheet fortune-sheet] [https://github.com/dream-num/univer/ univer] probably without xlsx support *presentations [https://github.com/impress/impress.js/ impress.js simplified] [https://github.com/bwlewis/slides slides] [https://zenomt.github.io/mdslides/ github markdown slides] [https://github.com/Patternslib/slides Patternslib slides markdown] probably without pptx support *weather [https://github.com/kaushalsahu07/weather weather], [https://github.com/Himanshu3412/Weather-Forecast Weather Forecast], ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} q3wzkui0aorpe6zcwtgqb2dklo79n0n 4675310 4675308 2026-10-09T19:08:40Z Jeff1138 301139 4675310 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 512Mb+ RAM Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c * Pi500+ keyboard wedge - working * Pi500 wedge - untested * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 D0 (rev1.1) - untested * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 (Rev1.0) - untested * Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with fan to prevent overheating cpu 82C+ throttling * Pi02W - Quad A53 64bit - boots but [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 usb not working but did in the past], * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] ====64bit==== '''Download''' A [https://archive.org/details/piAROS Pi Distribution (Distro) has started] and the contents copied to fat32 8GB+ microSD card (there will be drawers/folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi. And power on. [https://pi.amiga.icu/ Repository] [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 nightly builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] which is a test beta limited apps version with both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd to a SD or SSD as appropriate. 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Remember Aros Arm uses FAT32 and Aros can detect issues with this format very acutely (once fault found, FAT 0x0FFFFFF7 bad cluster so no files written after that, no repair). Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2138&pid=15057#post_15057 Aros forum thread], [https://forums.raspberrypi.com/viewforum.php?f=179 Raspberry Pi Aros Dev and User forums], [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 previous Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen i.e. the title bar, hold down the left click mouse and drag the screen down a little and the cursor will appear again. Then you can drag the screen up again. Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every power off *if asking for password again - press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again *...waiting for an address - Disconnect and try Connect Until, Connected to <router> - 192.168.x.x For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 not supported at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device * Pi5 Pi500 Pi500+ RP1 i/o (network prefs may forget random information when rebooted) Summary <pre> *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working and ethernet works *4 untested *400 wifi and ethernet untested *5 wifi and ethernet untested *500 wifi and ethernet untested *500+ wifi works </pre> Type in 'aarch64' in the [https://archives.arosworld.org/index.php?function=search&tool=simple search box] and you will see available software packages / apps. apkg can be used to inspect and install applications. [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser (JS 1.6 ES9 ECMASCript 2018)] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb JavaScript 1.5 (ECMAScript 3)] as css and javascript websites can be slow to load or resolve (no JIT) and nothing from facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) aka Google Chrome 126 or iPhone aka Safari 17 setting in menus. Html5test gives 189 (1.29), 300 (1.31), 311 (1.33) out of 555, some bigger Amiga like browsers are around 370+ but it does less better. You may have to delete the cache (Menu -> Page -> Delete cache) to fully retest big Amelinium updates or free up space. Be aware [https://pianetaamiga.it/en/reportage-pianeta-amiga-2026/ some site pages] can use up hundreds of MBs of cache very quickly DNS lookup failed... close browser and reboot and setup wifi again - repeat until it works again youtube video and audio - js button for javascript must be on/shaded - Settings -> Soundoutput - AHI Telegram https://t.me/s/channel_name for public messages from vamped_amiga chatamigagames demoscenecracktros *art local js apps like dpaint.js There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 <pre> *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices </pre> Only the Pi5 has a RTC real time clock, the other Pis will need to use ntp services time.cloudflare.com pool.ntp.org or Cloudflare 162.159.200.1, 162.159.200.123, 2606:4700:f1::1, 2606:4700:f1::123 or [https://github.com/bohunamiga/PiNTP PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. Can use date in a shell e.g. date 24-Dec-2026 23:59:59 but this will need to be done again after every reset/power off. Maybe [https://github.com/aros-development-team/AROS/commit/28674a157bc56175aa668e7b62dca6fa740578dc ds3231 rtc with dtoverlay=i2c-rtc,ds3231 in config.txt] It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+]. Alternative of [https://homspace.nl/samplerbox/ SamplerBox]. Will need developer clang gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [https://arosarchives.os4depot.net/?function=showfile&file=audio/misc/timidity.lha timidity], Regarding 680x0 emulation, there are several options (not implemented yet) that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell (Cntrl + C to end) GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} ==== 32bit ==== For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 From the Aros Raspberry pi 3 64bit thread] Instructions on building 64-bit Raspberry Pi AROS and cross-compiler from sources. You will need: - Ubuntu 24.04 or 26.04 - qemu-system-aarch64 installed - Internet connection - rpi-scripts.tar.gz downloaded (https://axrt.org/download/aros/rpi/rpi-scripts.tar.gz) 1) Install prerequisites: sudo apt install git gcc g++ make gawk bison flex bzip2 netpbm autoconf automake libc6-dev liblzo2-dev libpng-dev gcc-multilib byacc python3-mako cmake yasm curl nasm 2) Clone sources cd <project-directory> git clone https://github.com/aros-development-team/AROS.git --recurse-submodules 3) Extract rpi-scripts.tar.gz. Copy all files into your project directory so that you have: AROS (the directory with cloned sources) fix-dotdot.py rebuild.sh recreate-sdcard.sh run-qemu.sh update-sdcard.sh 4) Run ./rebuild.sh. Select option 1) toolchain-core-aarch64 This will execute process of building a cross-compiler. During this process packages will be downloaded from Internet. This process can take up to 2 hours. If there are some missing dependencies, install them with 'sudo apt install' and restart this step. 5) Run ./rebuild.sh again. Select option 2) core-raspi-aarch64 This will build system files for 64-bit Raspberry Pi AROS. This process can take around an hour. 6) Run ./recreate-sdcard.sh This will create an sdcard.img file with contents of previous step. 7) Run ./run-qemu.sh This will start QEMU with SD card image and ROM images. It will boot into AROS. =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3. x265 HEVC accelerated untested, x264/h.264 and VP9 cpu only. *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. h264/x264 as Pi3 All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 and x.264/h.264 accelerated untested only and VP9 on cpu or neon help ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted *Black [ Seeed Studio with BigTreeTech BTT pad 7] - bin blobs? CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> The vcgencmd can be used to inspect and dump the current system configuration. vcgencmd runs on top of VCHIQ as an RPC. The mailbox interface is an alternate but much simpler RPC. VCHIQ is a bridge (queue) between the CPU and the GPU so they can communicate with the firmware. Loads of [https://github.com/6by9/rpi3-gpiovirtbuf/blob/master/rpi3-gpiovirtbuf.c mailbox] which uses the GPIO control calls. [https://github.com/raspberrypi/firmware/wiki/Mailboxes may also be of interest] A fair number of vcgencmd examples (search for vc_vchi_gencmd_init). [https://www.raspberrypi.org/forums/viewtopic.php?t=229203#p1406112 sends the relevant vcgencmd commands] to update the scaling kernel, but the [https://github.com/raspberrypi/userland/blob/master/host_applications/linux/apps/gencmd/gencmd.c command] is just a text string. Parsing and execution of the instructions is performed by the VideoCore firmware. The Raspberry Pi runs two separate operating systems: Linux/Aros on the ARM, and a threedx RTOS called vcos running on the Videocore 4 VPU: vcos is commonly called "the firmware". Vcos is tasked with performing certain system services, for example running the display and audio outputs. The VCHI driver provides an interface to allow drivers to talk to vcos. Doubtful, on any [https://www.web3d.org/ Web3d] [https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API WebGL] or [https://github.com/immersive-web/webxr WebXR] [https://developer.mozilla.org/en-US/docs/Web/API/WebXR_Device_API Device API] [https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource XRInputSource] support. Hopefully, never/limited support features like location, peer-to-peer, invasive web apps, unwarranted storage, payments, proprietary video streaming etc *spreadsheet [https://git.sheetjs.com/sheetjs/sheetjs sheetjs] [https://github.com/mleibman/SlickGrid SlickGrid] [https://github.com/6pac/SlickGrid SlickGrid] [https://github.com/jspreadsheet/ce jspreadsheet ce] [https://github.com/dream-num/Luckysheet Luckysheet] [https://github.com/ruilisi/fortune-sheet fortune-sheet] [https://github.com/dream-num/univer/ univer] probably without xlsx support *presentations [https://github.com/impress/impress.js/ impress.js simplified] [https://github.com/bwlewis/slides slides] [https://zenomt.github.io/mdslides/ github markdown slides] [https://github.com/Patternslib/slides Patternslib slides markdown] probably without pptx support *weather [https://github.com/kaushalsahu07/weather weather], [https://github.com/Himanshu3412/Weather-Forecast Weather Forecast], ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} 930e70wo5ke38pcr89w6m8dxgn6zzz9 4675312 4675310 2026-10-09T19:10:58Z Jeff1138 301139 4675312 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 512Mb+ RAM Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c * Pi500+ keyboard wedge - working * Pi500 wedge - untested * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 D0 (rev1.1) - untested * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 (Rev1.0) - untested * Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with '''fan''' to prevent overheating cpu 82C+ throttling * Pi02W - Quad A53 64bit - boots but [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 usb not working but did in the past], * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] ====64bit==== '''Download''' A [https://archive.org/details/piAROS Pi Distribution (Distro) has started] and the contents copied to fat32 8GB+ microSD card (there will be drawers/folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi. And power on. [https://pi.amiga.icu/ Repository] [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 nightly builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] which is a test beta limited apps version with both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd to a SD or SSD as appropriate. 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Remember Aros Arm uses FAT32 and Aros can detect issues with this format very acutely (once fault found, FAT 0x0FFFFFF7 bad cluster so no files written after that, no repair). Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2138&pid=15057#post_15057 Aros forum thread], [https://forums.raspberrypi.com/viewforum.php?f=179 Raspberry Pi Aros Dev and User forums], [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 previous Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen i.e. the title bar, hold down the left click mouse and drag the screen down a little and the cursor will appear again. Then you can drag the screen up again. Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every power off *if asking for password again - press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again *...waiting for an address - Disconnect and try Connect Until, Connected to <router> - 192.168.x.x For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 not supported at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device * Pi5 Pi500 Pi500+ RP1 i/o (network prefs may forget random information when rebooted) Summary <pre> *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working and ethernet works *4 untested *400 wifi and ethernet untested *5 wifi and ethernet untested *500 wifi and ethernet untested *500+ wifi works </pre> Type in 'aarch64' in the [https://archives.arosworld.org/index.php?function=search&tool=simple search box] and you will see available software packages / apps. apkg can be used to inspect and install applications. [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser (JS 1.6 ES9 ECMASCript 2018)] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb JavaScript 1.5 (ECMAScript 3)] as css and javascript websites can be slow to load or resolve (no JIT) and nothing from facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) aka Google Chrome 126 or iPhone aka Safari 17 setting in menus. Html5test gives 189 (1.29), 300 (1.31), 311 (1.33) out of 555, some bigger Amiga like browsers are around 370+ but it does less better. You may have to delete the cache (Menu -> Page -> Delete cache) to fully retest big Amelinium updates or free up space. Be aware [https://pianetaamiga.it/en/reportage-pianeta-amiga-2026/ some site pages] can use up hundreds of MBs of cache very quickly DNS lookup failed... close browser and reboot and setup wifi again - repeat until it works again youtube video and audio - js button for javascript must be on/shaded - Settings -> Soundoutput - AHI Telegram https://t.me/s/channel_name for public messages from vamped_amiga chatamigagames demoscenecracktros *art local js apps like dpaint.js There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 <pre> *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices </pre> Only the Pi5 has a RTC real time clock, the other Pis will need to use ntp services time.cloudflare.com pool.ntp.org or Cloudflare 162.159.200.1, 162.159.200.123, 2606:4700:f1::1, 2606:4700:f1::123 or [https://github.com/bohunamiga/PiNTP PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. Can use date in a shell e.g. date 24-Dec-2026 23:59:59 but this will need to be done again after every reset/power off. Maybe [https://github.com/aros-development-team/AROS/commit/28674a157bc56175aa668e7b62dca6fa740578dc ds3231 rtc with dtoverlay=i2c-rtc,ds3231 in config.txt] It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+]. Alternative of [https://homspace.nl/samplerbox/ SamplerBox]. Will need developer clang gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [https://arosarchives.os4depot.net/?function=showfile&file=audio/misc/timidity.lha timidity], Regarding 680x0 emulation, there are several options (not implemented yet) that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell (Cntrl + C to end) GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} ==== 32bit ==== For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 From the Aros Raspberry pi 3 64bit thread] Instructions on building 64-bit Raspberry Pi AROS and cross-compiler from sources. You will need: - Ubuntu 24.04 or 26.04 - qemu-system-aarch64 installed - Internet connection - rpi-scripts.tar.gz downloaded (https://axrt.org/download/aros/rpi/rpi-scripts.tar.gz) 1) Install prerequisites: sudo apt install git gcc g++ make gawk bison flex bzip2 netpbm autoconf automake libc6-dev liblzo2-dev libpng-dev gcc-multilib byacc python3-mako cmake yasm curl nasm 2) Clone sources cd <project-directory> git clone https://github.com/aros-development-team/AROS.git --recurse-submodules 3) Extract rpi-scripts.tar.gz. Copy all files into your project directory so that you have: AROS (the directory with cloned sources) fix-dotdot.py rebuild.sh recreate-sdcard.sh run-qemu.sh update-sdcard.sh 4) Run ./rebuild.sh. Select option 1) toolchain-core-aarch64 This will execute process of building a cross-compiler. During this process packages will be downloaded from Internet. This process can take up to 2 hours. If there are some missing dependencies, install them with 'sudo apt install' and restart this step. 5) Run ./rebuild.sh again. Select option 2) core-raspi-aarch64 This will build system files for 64-bit Raspberry Pi AROS. This process can take around an hour. 6) Run ./recreate-sdcard.sh This will create an sdcard.img file with contents of previous step. 7) Run ./run-qemu.sh This will start QEMU with SD card image and ROM images. It will boot into AROS. =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3. x265 HEVC accelerated untested, x264/h.264 and VP9 cpu only. *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. h264/x264 as Pi3 All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 and x.264/h.264 accelerated untested only and VP9 on cpu or neon help ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted *Black [ Seeed Studio with BigTreeTech BTT pad 7] - bin blobs? CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> The vcgencmd can be used to inspect and dump the current system configuration. vcgencmd runs on top of VCHIQ as an RPC. The mailbox interface is an alternate but much simpler RPC. VCHIQ is a bridge (queue) between the CPU and the GPU so they can communicate with the firmware. Loads of [https://github.com/6by9/rpi3-gpiovirtbuf/blob/master/rpi3-gpiovirtbuf.c mailbox] which uses the GPIO control calls. [https://github.com/raspberrypi/firmware/wiki/Mailboxes may also be of interest] A fair number of vcgencmd examples (search for vc_vchi_gencmd_init). [https://www.raspberrypi.org/forums/viewtopic.php?t=229203#p1406112 sends the relevant vcgencmd commands] to update the scaling kernel, but the [https://github.com/raspberrypi/userland/blob/master/host_applications/linux/apps/gencmd/gencmd.c command] is just a text string. Parsing and execution of the instructions is performed by the VideoCore firmware. The Raspberry Pi runs two separate operating systems: Linux/Aros on the ARM, and a threedx RTOS called vcos running on the Videocore 4 VPU: vcos is commonly called "the firmware". Vcos is tasked with performing certain system services, for example running the display and audio outputs. The VCHI driver provides an interface to allow drivers to talk to vcos. Doubtful, on any [https://www.web3d.org/ Web3d] [https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API WebGL] or [https://github.com/immersive-web/webxr WebXR] [https://developer.mozilla.org/en-US/docs/Web/API/WebXR_Device_API Device API] [https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource XRInputSource] support. Hopefully, never/limited support features like location, peer-to-peer, invasive web apps, unwarranted storage, payments, proprietary video streaming etc *spreadsheet [https://git.sheetjs.com/sheetjs/sheetjs sheetjs] [https://github.com/mleibman/SlickGrid SlickGrid] [https://github.com/6pac/SlickGrid SlickGrid] [https://github.com/jspreadsheet/ce jspreadsheet ce] [https://github.com/dream-num/Luckysheet Luckysheet] [https://github.com/ruilisi/fortune-sheet fortune-sheet] [https://github.com/dream-num/univer/ univer] probably without xlsx support *presentations [https://github.com/impress/impress.js/ impress.js simplified] [https://github.com/bwlewis/slides slides] [https://zenomt.github.io/mdslides/ github markdown slides] [https://github.com/Patternslib/slides Patternslib slides markdown] probably without pptx support *weather [https://github.com/kaushalsahu07/weather weather], [https://github.com/Himanshu3412/Weather-Forecast Weather Forecast], ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} q1e9n7qt5bw5yvxj4w4llvlqce3c067 4675435 4675312 2026-10-10T08:53:56Z Jeff1138 301139 4675435 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 512Mb+ RAM Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c * Pi500+ keyboard wedge - working * Pi500 wedge - untested * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 D0 (rev1.1) - untested * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 C1 (Rev1.0) - untested * Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with '''fan''' to prevent overheating cpu 82C+ throttling * Pi02W - Quad A53 64bit - boots but [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 usb not working but did in the past], * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] ====64bit==== '''Download''' A [https://archive.org/details/piAROS Pi Distribution (Distro) has started] and the contents copied to fat32 8GB+ microSD card (there will be drawers/folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi. And power on. [https://pi.amiga.icu/ Repository] [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 nightly builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] which is a test beta limited apps version with both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd to a SD or SSD as appropriate. 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Remember Aros Arm uses FAT32 and Aros can detect issues with this format very acutely (once fault found, FAT 0x0FFFFFF7 bad cluster so no files written after that, no repair). Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2138&pid=15057#post_15057 Aros forum thread], [https://forums.raspberrypi.com/viewforum.php?f=179 Raspberry Pi Aros Dev and User forums], [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 previous Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen i.e. the title bar, hold down the left click mouse and drag the screen down a little and the cursor will appear again. Then you can drag the screen up again. Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every power off *if asking for password again - press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again *...waiting for an address - Disconnect and try Connect Until, Connected to <router> - 192.168.x.x For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 not supported at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device * Pi5 Pi500 Pi500+ RP1 i/o (network prefs may forget random information when rebooted) Summary <pre> *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working and ethernet works *4 untested *400 wifi and ethernet untested *5 wifi and ethernet untested *500 wifi and ethernet untested *500+ wifi works </pre> Type in 'aarch64' in the [https://archives.arosworld.org/index.php?function=search&tool=simple search box] and you will see available software packages / apps. apkg can be used to inspect and install applications. [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser (JS 1.6 ES9 ECMASCript 2018)] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb JavaScript 1.5 (ECMAScript 3)] as css and javascript websites can be slow to load or resolve (no JIT) and nothing from facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) aka Google Chrome 126 or iPhone aka Safari 17 setting in menus. Html5test gives 189 (1.29), 300 (1.31), 311 (1.33) out of 555, some bigger Amiga like browsers are around 370+ but it does less better. You may have to delete the cache (Menu -> Page -> Delete cache) to fully retest big Amelinium updates or free up space. Be aware [https://pianetaamiga.it/en/reportage-pianeta-amiga-2026/ some site pages] can use up hundreds of MBs of cache very quickly DNS lookup failed... close browser and reboot and setup wifi again - repeat until it works again youtube video and audio - js button for javascript must be on/shaded - Settings -> Soundoutput - AHI Telegram https://t.me/s/channel_name for public messages from vamped_amiga chatamigagames demoscenecracktros *art local js apps like dpaint.js There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 <pre> *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices </pre> Only the Pi5 has a RTC real time clock, the other Pis will need to use ntp services time.cloudflare.com pool.ntp.org or Cloudflare 162.159.200.1, 162.159.200.123, 2606:4700:f1::1, 2606:4700:f1::123 or [https://github.com/bohunamiga/PiNTP PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. Can use date in a shell e.g. date 24-Dec-2026 23:59:59 but this will need to be done again after every reset/power off. Maybe [https://github.com/aros-development-team/AROS/commit/28674a157bc56175aa668e7b62dca6fa740578dc ds3231 rtc with dtoverlay=i2c-rtc,ds3231 in config.txt] It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+]. Alternative of [https://homspace.nl/samplerbox/ SamplerBox]. Will need developer clang gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [https://arosarchives.os4depot.net/?function=showfile&file=audio/misc/timidity.lha timidity], Regarding 680x0 emulation, there are several options (not implemented yet) that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell (Cntrl + C to end) GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} ==== 32bit ==== For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 From the Aros Raspberry pi 3 64bit thread] Instructions on building 64-bit Raspberry Pi AROS and cross-compiler from sources. You will need: - Ubuntu 24.04 or 26.04 - qemu-system-aarch64 installed - Internet connection - rpi-scripts.tar.gz downloaded (https://axrt.org/download/aros/rpi/rpi-scripts.tar.gz) 1) Install prerequisites: sudo apt install git gcc g++ make gawk bison flex bzip2 netpbm autoconf automake libc6-dev liblzo2-dev libpng-dev gcc-multilib byacc python3-mako cmake yasm curl nasm 2) Clone sources cd <project-directory> git clone https://github.com/aros-development-team/AROS.git --recurse-submodules 3) Extract rpi-scripts.tar.gz. Copy all files into your project directory so that you have: AROS (the directory with cloned sources) fix-dotdot.py rebuild.sh recreate-sdcard.sh run-qemu.sh update-sdcard.sh 4) Run ./rebuild.sh. Select option 1) toolchain-core-aarch64 This will execute process of building a cross-compiler. During this process packages will be downloaded from Internet. This process can take up to 2 hours. If there are some missing dependencies, install them with 'sudo apt install' and restart this step. 5) Run ./rebuild.sh again. Select option 2) core-raspi-aarch64 This will build system files for 64-bit Raspberry Pi AROS. This process can take around an hour. 6) Run ./recreate-sdcard.sh This will create an sdcard.img file with contents of previous step. 7) Run ./run-qemu.sh This will start QEMU with SD card image and ROM images. It will boot into AROS. =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3. x265 HEVC accelerated untested, x264/h.264 and VP9 cpu only. *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. h264/x264 as Pi3 All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 and x.264/h.264 accelerated untested only and VP9 on cpu or neon help ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted *Black [ Seeed Studio with BigTreeTech BTT pad 7] - bin blobs? CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> The vcgencmd can be used to inspect and dump the current system configuration. vcgencmd runs on top of VCHIQ as an RPC. The mailbox interface is an alternate but much simpler RPC. VCHIQ is a bridge (queue) between the CPU and the GPU so they can communicate with the firmware. Loads of [https://github.com/6by9/rpi3-gpiovirtbuf/blob/master/rpi3-gpiovirtbuf.c mailbox] which uses the GPIO control calls. [https://github.com/raspberrypi/firmware/wiki/Mailboxes may also be of interest] A fair number of vcgencmd examples (search for vc_vchi_gencmd_init). [https://www.raspberrypi.org/forums/viewtopic.php?t=229203#p1406112 sends the relevant vcgencmd commands] to update the scaling kernel, but the [https://github.com/raspberrypi/userland/blob/master/host_applications/linux/apps/gencmd/gencmd.c command] is just a text string. Parsing and execution of the instructions is performed by the VideoCore firmware. The Raspberry Pi runs two separate operating systems: Linux/Aros on the ARM, and a threedx RTOS called vcos running on the Videocore 4 VPU: vcos is commonly called "the firmware". Vcos is tasked with performing certain system services, for example running the display and audio outputs. The VCHI driver provides an interface to allow drivers to talk to vcos. Doubtful, on any [https://www.web3d.org/ Web3d] [https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API WebGL] or [https://github.com/immersive-web/webxr WebXR] [https://developer.mozilla.org/en-US/docs/Web/API/WebXR_Device_API Device API] [https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource XRInputSource] support. Hopefully, never/limited support features like location, peer-to-peer, invasive web apps, unwarranted storage, payments, proprietary video streaming etc *spreadsheet [https://git.sheetjs.com/sheetjs/sheetjs sheetjs] [https://github.com/mleibman/SlickGrid SlickGrid] [https://github.com/6pac/SlickGrid SlickGrid] [https://github.com/jspreadsheet/ce jspreadsheet ce] [https://github.com/dream-num/Luckysheet Luckysheet] [https://github.com/ruilisi/fortune-sheet fortune-sheet] [https://github.com/dream-num/univer/ univer] probably without xlsx support *presentations [https://github.com/impress/impress.js/ impress.js simplified] [https://github.com/bwlewis/slides slides] [https://zenomt.github.io/mdslides/ github markdown slides] [https://github.com/Patternslib/slides Patternslib slides markdown] probably without pptx support *weather [https://github.com/kaushalsahu07/weather weather], [https://github.com/Himanshu3412/Weather-Forecast Weather Forecast], ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} 3qkdbupi9oil7tfeh5xn7zt0n62ulix Seed Factories 0 288343 4675436 4660825 2026-10-10T08:54:17Z Danielravennest 13526 4675436 wikitext text/x-wiki __NOTOC__ <div style="font-size:large; font-family:'Georgia', serif;"> {{DISPLAYTITLE:<span style="display:block;text-align:center;font-size:100%;background:#d0f0f0;{{Text default color}};line-height:2em;">Better Worlds I:</span>}} <span style="display:block;text-align:center;font-size:175%;background:#d0f0f0;{{Text default color}};line-height:2em;">'''Seed Factories and Self-Improving Systems'''</span> {| style="background:#e8f4f4;{{Text default color}};" |- | <div style="font-size:125%; font-family:'Georgia', serif;">&emsp;This is the first volume of a two-volume set about building a better life for ourselves, our community, and the world. Building is meant in both the literal sense of construction and production, and in the social sense of how people work together to reach our goals. The core ideas behind our approach can be summarized as follows: :* Resources and energy are abundant on Earth and in space. :* With enough knowledge and tools they can be used to build a better life. :* With planning this can be sustainable with minimal side effects. :* Cooperation makes it affordable. Exponential self-improvement makes it scalable. :* Smart tools can do most of the work and make it easier. &emsp;Engineers define systems for purposes like understanding, analysis, design, and improvement. They can include people, and any other kind of entity, like buildings, hardware and software. Systems have characteristics of interest, such as quality of life, size, emissions, and output rate. Their change in a desired direction is considered an improvement. Self-improvement is when the change comes from internal action of the system. It has occurred throughout history in many ways, such the as evolution of life, or the development of civilization. In the past these changes have often been unplanned rather than on purpose. &emsp;This volume covers self-improving systems generally, and a particular type called a '''Seed Factory'''. It is a starter set of equipment intended for growth and self-improvement. It does this by a repeating process, where each upgrade enables further upgrades. This has the potential for exponential growth, where one starter set can become as large or as many as needed. There are many uses for seed factories, and more generally for systems that are designed for self-improvement. &emsp;We start with the history of the idea, then elements of design, and a design process. We then present several examples to show how self-improving systems and seed factories can be used. Volume II on '''[https://en.wikibooks.org/wiki/Space_Transport_and_Engineering_Methods Space Systems]''' first explores the very different conditions and locations in space, then presents additional projects and examples that can use similar nethods of improvement, expansion, and making copies to reach their goals</div> |} [[File:Defense.gov_photo_essay_080118-D-7203T-053.jpg|thumb|right|600x400px|An example of highly automated vehicle assembly. This represents an end point of production evolution from a seed factory. Note the large amount of equipment and supplies relative to the product being assembled.]] ==<span style="font-size:5; font-family:'Georgia', serif;">'''Table of Contents'''</span>== {{Book Search|prefix=Seed Factories}} &emsp; ===<span style="font-size:`125%; font-family:'Georgia', serif;"><u>[[/Preface|Preface]]</u></span>=== ===<span style="font-size:large; font-family:'Georgia', serif;"><u>1.0: [[/Introduction|Introduction]]</u></span>=== ===<span style="font-size:large; font-family:'Georgia', serif;"><u>2.0: [[/History|History and Concept Development]]</u></span>=== :[[/SelfImprovement|2.1 Self-Improvement and Seed Factories]] :[[/Technology|2.2 Concept Evolution and Further Research]] ===<span style="font-size:large; font-family:'Georgia', serif;"><u>3.0: [[/Basics|Design Elements]]</u></span>=== :[[/Economics|3.1 Motivations and Economics]] :[[/Engineering|3.2 Technical Concepts]] :[[/New_Concepts|3.3 New Ideas]] :[[/Architecture|3.4 Reference Architecture]] ===<span style="font-size:large; font-family:'Georgia', serif;"><u>4.0: [[/Design|Design Process]]</u></span>=== :[[/Functions|4.1 Functional Analysis & Allocate Requirements]] :[[/Models|4.2 Alternatives & System Modeling]] :[[/Locations|4.3 Locations & Equipment]] :[[/Inputs|4.4 Operating Inputs]] :[[/Processes|4.5 Operating Processes]] ===<span style="font-size:large; font-family:'Georgia', serif;"><u>5.0: [[/Concept|Personal Production]]</u></span>=== :[[/PFRequirements|5.1 Requirements]] :[[/PFFunctions|5.2 Functions]] :[[/PFAllocation|5.3 Allocation]] :[[/PFModels|5.4 Modeling and Alternatives]] :[[/Starter Set|5.5 Starter & Expansion Sets]] :[[/Operations|5.6 Operations Flows]] ===<span style="font-size:large; font-family:'Georgia', serif;"><u>6.0: [[/WWF|The MakerNet]]</u></span>=== :[[/MNRequirements|6.1 Requirements]] ===<span style="font-size:large; font-family:'Georgia', serif;"><u>7.0: [[/Industrial|Industrial Production]]</u></span>=== :[[/IPStarter Set|7.5 Starter Set]] ===<span style="font-size:large; font-family:'Georgia', serif;"><u>8.0: [[/Remote|Remote and Difficult Locations]]</u></span>=== ===<span style="font-size:large; font-family:'Georgia', serif;"><u>9.0: [[/Notes|Conceptual Design Notes]]</u></span>=== :[[Seed Factories/Notes|page 1:]] General Notes || Notes for Section 5.0 - Community Factory: Requirements, Functions :[[/Notes2|page 2:]] System Modeling :[[/Notes3|page 3:]] Alternatives, Habitation, Transport, Production Technologies :[[/Notes4|page 4:]] Production Alternatives :[[/Notes5|page 5, ]] [[/Notes6|page 6,]] [[/Notes7|page 7:]] Develop Alternatives :[[/Notes8|page 8:]] Design Baseline :[[/Notes9|page 9:]] Old Text Still to be Merged or Moved :[[/Notes10|page 10:]] Notes transferred from Volume II </div> {{Alphabetical|S}} {{Shelves|Mechanical engineering}} {{status|50%}} g7o8qx55qvi6mb83emihq2pp1cihsjk 4675437 4675436 2026-10-10T08:56:34Z Danielravennest 13526 4675437 wikitext text/x-wiki __NOTOC__ <div style="font-size:large; font-family:'Georgia', serif;"> {{DISPLAYTITLE:<span style="display:block;text-align:center;font-size:100%;background:#d0f0f0;{{Text default color}};line-height:2em;">Better Worlds I:</span>}} <span style="display:block;text-align:center;font-size:175%;background:#d0f0f0;{{Text default color}};line-height:2em;">'''Seed Factories and Self-Improving Systems'''</span> {| style="background:#e8f4f4;{{Text default color}};" |- | <div style="font-size:100%; font-family:'Georgia', serif;">&emsp;This is the first volume of a two-volume set about building a better life for ourselves, our community, and the world. Building is meant in both the literal sense of construction and production, and in the social sense of how people work together to reach our goals. The core ideas behind our approach can be summarized as follows: :* Resources and energy are abundant on Earth and in space. :* With enough knowledge and tools they can be used to build a better life. :* With planning this can be sustainable with minimal side effects. :* Cooperation makes it affordable. Exponential self-improvement makes it scalable. :* Smart tools can do most of the work and make it easier. &emsp;Engineers define systems for purposes like understanding, analysis, design, and improvement. They can include people, and any other kind of entity, like buildings, hardware and software. Systems have characteristics of interest, such as quality of life, size, emissions, and output rate. Their change in a desired direction is considered an improvement. Self-improvement is when the change comes from internal action of the system. It has occurred throughout history in many ways, such the as evolution of life, or the development of civilization. In the past these changes have often been unplanned rather than on purpose. &emsp;This volume covers self-improving systems generally, and a particular type called a '''Seed Factory'''. It is a starter set of equipment intended for growth and self-improvement. It does this by a repeating process, where each upgrade enables further upgrades. This has the potential for exponential growth, where one starter set can become as large or as many as needed. There are many uses for seed factories, and more generally for systems that are designed for self-improvement. &emsp;We start with the history of the idea, then elements of design, and a design process. We then present several examples to show how self-improving systems and seed factories can be used. Volume II on '''[https://en.wikibooks.org/wiki/Space_Transport_and_Engineering_Methods Space Systems]''' first explores the very different conditions and locations in space, then presents additional projects and examples that can use similar nethods of improvement, expansion, and making copies to reach their goals</div> |} [[File:Defense.gov_photo_essay_080118-D-7203T-053.jpg|thumb|right|600x400px|An example of highly automated vehicle assembly. This represents an end point of production evolution from a seed factory. Note the large amount of equipment and supplies relative to the product being assembled.]] ==<span style="font-size:5; font-family:'Georgia', serif;">'''Table of Contents'''</span>== {{Book Search|prefix=Seed Factories}} &emsp; ===<span style="font-size:`125%; font-family:'Georgia', serif;"><u>[[/Preface|Preface]]</u></span>=== ===<span style="font-size:large; font-family:'Georgia', serif;"><u>1.0: [[/Introduction|Introduction]]</u></span>=== ===<span style="font-size:large; font-family:'Georgia', serif;"><u>2.0: [[/History|History and Concept Development]]</u></span>=== :[[/SelfImprovement|2.1 Self-Improvement and Seed Factories]] :[[/Technology|2.2 Concept Evolution and Further Research]] ===<span style="font-size:large; font-family:'Georgia', serif;"><u>3.0: [[/Basics|Design Elements]]</u></span>=== :[[/Economics|3.1 Motivations and Economics]] :[[/Engineering|3.2 Technical Concepts]] :[[/New_Concepts|3.3 New Ideas]] :[[/Architecture|3.4 Reference Architecture]] ===<span style="font-size:large; font-family:'Georgia', serif;"><u>4.0: [[/Design|Design Process]]</u></span>=== :[[/Functions|4.1 Functional Analysis & Allocate Requirements]] :[[/Models|4.2 Alternatives & System Modeling]] :[[/Locations|4.3 Locations & Equipment]] :[[/Inputs|4.4 Operating Inputs]] :[[/Processes|4.5 Operating Processes]] ===<span style="font-size:large; font-family:'Georgia', serif;"><u>5.0: [[/Concept|Personal Production]]</u></span>=== :[[/PFRequirements|5.1 Requirements]] :[[/PFFunctions|5.2 Functions]] :[[/PFAllocation|5.3 Allocation]] :[[/PFModels|5.4 Modeling and Alternatives]] :[[/Starter Set|5.5 Starter & Expansion Sets]] :[[/Operations|5.6 Operations Flows]] ===<span style="font-size:large; font-family:'Georgia', serif;"><u>6.0: [[/WWF|The MakerNet]]</u></span>=== :[[/MNRequirements|6.1 Requirements]] ===<span style="font-size:large; font-family:'Georgia', serif;"><u>7.0: [[/Industrial|Industrial Production]]</u></span>=== :[[/IPStarter Set|7.5 Starter Set]] ===<span style="font-size:large; font-family:'Georgia', serif;"><u>8.0: [[/Remote|Remote and Difficult Locations]]</u></span>=== ===<span style="font-size:large; font-family:'Georgia', serif;"><u>9.0: [[/Notes|Conceptual Design Notes]]</u></span>=== :[[Seed Factories/Notes|page 1:]] General Notes || Notes for Section 5.0 - Community Factory: Requirements, Functions :[[/Notes2|page 2:]] System Modeling :[[/Notes3|page 3:]] Alternatives, Habitation, Transport, Production Technologies :[[/Notes4|page 4:]] Production Alternatives :[[/Notes5|page 5, ]] [[/Notes6|page 6,]] [[/Notes7|page 7:]] Develop Alternatives :[[/Notes8|page 8:]] Design Baseline :[[/Notes9|page 9:]] Old Text Still to be Merged or Moved :[[/Notes10|page 10:]] Notes transferred from Volume II </div> {{Alphabetical|S}} {{Shelves|Mechanical engineering}} {{status|50%}} pf6pki3644ywdwqn18ecc958ptfsfju 4675438 4675437 2026-10-10T09:24:57Z Danielravennest 13526 clean up and formatting 4675438 wikitext text/x-wiki __NOTOC__ <div style="font-size:large; font-family:'Georgia', serif;"> {{DISPLAYTITLE:<span style="display:block;text-align:center;font-size:100%;background:#d0f0f0;{{Text default color}};line-height:2em;">Better Worlds I:</span>}} <span style="display:block;text-align:center;font-size:175%;background:#d0f0f0;{{Text default color}};line-height:2em;">'''Seed Factories and Self-Improving Systems'''</span> {| style="background:#e8f4f4;{{Text default color}};" |- | <div style="font-size:100%; font-family:'Georgia', serif;">&emsp;This is the first volume of a two-volume set about building a better life for ourselves, our community, and the world. Building is meant in both the literal sense of construction and production, and in the social sense of how people work together to reach our goals. The core ideas behind our approach can be summarized as follows: :* Resources and energy are abundant on Earth and in space. :* With enough knowledge and tools they can be used to build a better life. :* With planning this can be sustainable with minimal side effects. :* Cooperation makes it affordable. Exponential self-improvement makes it scalable. :* Smart tools can do most of the work and make it easier. &emsp;Engineers define '''systems''' for purposes like understanding, analysis, design, and improvement. Systems can include people, and any other kind of entity, like buildings, hardware and software. Systems have characteristics of interest, such as quality, size, emissions, and output rate. Their change in a desired direction is considered an improvement. Self-improvement is when the change comes from internal action of the system. It has occurred throughout history in many ways, such the as evolution of life, or the development of civilization. In the past these changes have often been unplanned rather than on purpose. &emsp;This volume covers self-improving systems generally, and a particular type called a '''Seed Factory'''. It is a starter set of people and equipment intended for growth and self-improvement. It does this by a repeating process, where each upgrade enables further upgrades. This has the potential for exponential growth, where one starter set can become as large or as many as needed. There are many uses for seed factories, and more generally for systems that are designed for self-improvement. &emsp;This volume starts with the history of the idea, then elements of design, and a design process. We then present several examples to show how self-improving systems and seed factories can be used. Volume II on '''[https://en.wikibooks.org/wiki/Space_Transport_and_Engineering_Methods Space Systems]''' first explores the very different conditions and locations in space, then presents additional projects and examples that can use similar methods of improvement, expansion, and making copies to reach their goals</div> |} [[File:Defense.gov_photo_essay_080118-D-7203T-053.jpg|thumb|right|600x400px|An example of highly automated vehicle assembly. This represents an end point of production evolution from a seed factory. Note the large amount of equipment and supplies relative to the product being assembled.]] ==<span style="font-size:5; font-family:'Georgia', serif;">'''Table of Contents'''</span>== {{Book Search|prefix=Seed Factories}} &emsp; ===<span style="font-size:large; font-family:'Georgia', serif;"><u>[[/Preface|Preface]]</u></span>=== ===<span style="font-size:large; font-family:'Georgia', serif;"><u>1.0: [[/Introduction|Introduction]]</u></span>=== ===<span style="font-size:large; font-family:'Georgia', serif;"><u>2.0: [[/History|History and Concept Development]]</u></span>=== :[[/SelfImprovement|2.1 Self-Improvement and Seed Factories]] :[[/Technology|2.2 Concept Evolution and Further Research]] ===<span style="font-size:large; font-family:'Georgia', serif;"><u>3.0: [[/Basics|Design Elements]]</u></span>=== :[[/Economics|3.1 Motivations and Economics]] :[[/Engineering|3.2 Technical Concepts]] :[[/New_Concepts|3.3 New Ideas]] :[[/Architecture|3.4 Reference Architecture]] ===<span style="font-size:large; font-family:'Georgia', serif;"><u>4.0: [[/Design|Design Process]]</u></span>=== :[[/Functions|4.1 Functional Analysis & Allocate Requirements]] :[[/Models|4.2 Alternatives & System Modeling]] :[[/Locations|4.3 Locations & Equipment]] :[[/Inputs|4.4 Operating Inputs]] :[[/Processes|4.5 Operating Processes]] ===<span style="font-size:large; font-family:'Georgia', serif;"><u>5.0: [[/Concept|Personal Production]]</u></span>=== :[[/PFRequirements|5.1 Requirements]] :[[/PFFunctions|5.2 Functions]] :[[/PFAllocation|5.3 Allocation]] :[[/PFModels|5.4 Modeling and Alternatives]] :[[/Starter Set|5.5 Starter & Expansion Sets]] :[[/Operations|5.6 Operations Flows]] ===<span style="font-size:large; font-family:'Georgia', serif;"><u>6.0: [[/WWF|The MakerNet]]</u></span>=== :[[/MNRequirements|6.1 Requirements]] ===<span style="font-size:large; font-family:'Georgia', serif;"><u>7.0: [[/Industrial|Industrial Production]]</u></span>=== :[[/IPStarter Set|7.5 Starter Set]] ===<span style="font-size:large; font-family:'Georgia', serif;"><u>8.0: [[/Remote|Remote and Difficult Locations]]</u></span>=== ===<span style="font-size:large; font-family:'Georgia', serif;"><u>9.0: [[/Notes|Conceptual Design Notes]]</u></span>=== :[[Seed Factories/Notes|page 1:]] General Notes || Notes for Section 5.0 - Community Factory: Requirements, Functions :[[/Notes2|page 2:]] System Modeling :[[/Notes3|page 3:]] Alternatives, Habitation, Transport, Production Technologies :[[/Notes4|page 4:]] Production Alternatives :[[/Notes5|page 5, ]] [[/Notes6|page 6,]] [[/Notes7|page 7:]] Develop Alternatives :[[/Notes8|page 8:]] Design Baseline :[[/Notes9|page 9:]] Old Text Still to be Merged or Moved :[[/Notes10|page 10:]] Notes transferred from Volume II </div> {{Alphabetical|S}} {{Shelves|Mechanical engineering}} {{status|50%}} 6bh9nwlsldrogmtfupzq7cz1wn6fyh8 Wikibooks:Exercise as it relates to Disease/Aerobic Exercise and it's effect on Insomnia 4 293983 4675333 2560072 2026-10-09T23:27:24Z Omphalographer 3427146 delete - bad redirect 4675333 wikitext text/x-wiki {{delete|Improper redirect}} #REDIRECT [[User:Jeremy P Alexander]] 6y7qr90j7l4hs5xm62duwazzwmqx1yt Fractals/Mathematics/Numbers 0 294698 4675291 4670475 2026-10-09T13:37:56Z Sophia Grace Bennett 3579977 Link was broken 4675291 wikitext text/x-wiki '''"Many questions concerning (discrete) dynamical systems are of a number theoretic or combinatorial nature."''' Christian Krattenthaler [[File:Set of real numbers (diagram).svg|thumb|right|The set of real numbers]] =Intro= * [https://www.codechef.com/wiki/tutorial-number-theory/ Basic Number Theory Every Programmer Should Know...by CodeChef] * [https://www.quora.com/What-important-topics-of-number-theory-should-every-programmer-know Quora : What important topics of number theory should every programmer know?] * [http://www.science4all.org/article/numbers-and-constructibility/ science4all : numbers-and-constructibility] * [[Number Theory]] * [https://mabi.tmpinc.io/numbers/ How Computers Use Numbers by Mabi19] =Number types= Number can be used as : * a numerical values used in numerical computations * a symbols used in symbolic computations Number ( for example [[Fractals/Iterations in the complex plane/def cqp#Angle|angle in turn]]s ) can be:<ref>[http://www.exploringbinary.com/nine-ways-to-display-a-floating-point-number/ exploring binary: nine-ways-to-display-a-floating-point-number]</ref> * decimal number (base = 10 ) <ref>[[w:Number base|wikipedia : Number base]]</ref> ** integer ** real number *** ratio = fraction ( Finite [[Fractals/Continued fraction|continued fraction]] ) = rational number ( the irrationality measure of any rational number is 1)<ref>[https://math.stackexchange.com/questions/1435312/are-there-real-numbers-that-are-neither-rational-nor-irrational math.stackexchange question: are-there-real-numbers-that-are-neither-rational-nor-irrational]</ref> **** in lowest terms ( irreducible form ) : <math>\tfrac{1}{21}</math> **** reducible form ***** in explicit normalized form ( only when denominator is odd ):<ref>[http://www.iec.csic.es/~gerardo/publica/Pastor03.pdf HOW TO WORK WITH ONE-DI MENSIONAL QUADRATIC MAPS G. Pastor , M. Romera, G. Álvarez, and F. Montoya ]</ref> <math>\tfrac{3}{63} = \tfrac{3}{2^{6}-1}</math> *** irrational number = [[Fractals/Continued_fraction#Infinite_continued_fractions|infinite continued fraction]] ( if number can not be represented as a ratio then it is irrational number ) **** algebraic ( irrationality measure = 2) **** transcendental ( irrationality measure > 2) ** decimal floating point number <math>0.\overline{047619}</math> <ref>[http://floating-point-gui.de/ What Every Programmer Should Know About Floating-Point Arithmetic ]</ref><ref>[http://stackoverflow.com/questions/21895756/why-are-floating-point-numbers-inaccurate Stackoverflow : Why Are Floating Point Numbers Inaccurate?]</ref> *** finite expansion *** infinite (endless) expansion **** continue infinitely without repeating (in which case the number is called irrational = non-repeating non-terminating decimal numbers<ref>[http://www.homeschoolmath.net/teaching/irrational_numbers.php home school math : The fascinating irrational numbers]</ref>) **** Recurring or repeating ***** (strictly) periodic ( preperiod = 0 , period > 0 ) ***** mixed = eventually periodic ( preperiod > 0 , period > 0 ) * [[Fractals/Mathematics/binary|binary number]] ( base = 2 )<ref>[http://kipirvine.com/asm/workbook/floating_tut.htm Tutorial: Floating-Point Binary by Kip Irvine]</ref> ** binary rational number ( ratio) <math>\tfrac{1}{10101}</math> ** binary real number *** binary floating point number ( scientific notation ) *** Raw binary ( raw IEEE format ) *** binary fixed point number ( notation) **** with repeating sequences : <math>0.\overline{000011}</math> **** with endless expansion <math>0.000011000011000011000011...</math> ==dimension== * 1D: real * 2D ** dual<ref>[http://blog.demofox.org/2014/12/30/dual-numbers-automatic-differentiation/ Dual Numbers & Automatic Differentiation]</ref> ** complex<ref>[https://www.youtube.com/playlist?list=PLiaHhY2iBX9g6KIvZ_703G3KJXapKkNaF videos: Imaginary Numbers are Real from Welch Labs]</ref> * 4D<ref>[https://math.stackexchange.com/questions/32100/is-there-a-third-dimension-of-numbers math stackexchange question: is-there-a-third-dimension-of-numbers]</ref> ** quaterions ==way to represent real numbers using a finite number of bits== * IEEE floating point * fixed point * [http://:w:Unum_(number_format) unums (universal numbers) by John Gustafson] ** Posits are a hardware-friendly version of unums<ref>[http://www.johngustafson.net/pdfs/BeatingFloatingPoint.pdf Beating Floating Point at its Own Game: Posit Arithmetic by John L. Gustafson , Isaac Yonemoto]</ref><ref>[https://fractalforums.org/fractal-mathematics-and-new-theories/28/posits/5035 fractalforums.org : posits]</ref> ==expansion/representation== * finite = terminating * infinite = non-terminating ** periodic = infite repeating ** preperiodic = eventually periodic ** non-periodic: binary numerals which neither terminate nor recur represent irrational numbers ==base == radix or base of a positional numeral system<ref>[[:w:Radix|wikipedia: Radix]]</ref> * [[Fractals/Mathematics/binary|2 ( binary number)]] * 8 ( octal number) * 10 ( decimal umber) * 16 ( hexadecimal) ==form/notation== Notation<ref>[https://www.mrob.com/pub/math/floatformats.html Survey of Floating-Point Formats Robert Munafo's home pages on AWS   © 1996-2022 Robert P. Munafo.  ]</ref> * sequence of digits and radix ** infinite sequence *** in general form is denoted by [[:w:Ellipsis|ellipsis]] ( = 3 dots): <math> r=d_0.d_1 d_2 d_3\dots</math> *** Infinitely repeating part of expansion denoted by **** round brackets : <math>0.10(00101010) = 0.10001010100010101000101010001010100010101000101010 \dots</math>. **** overline: <math> 0.10\overline{00101010} = 0.10001010100010101000101010001010100010101000101010 \dots</math> ** finite sequence *** 1.23 **** with trailing zeros: 1.2300 for indicating the number of significant figures, for example in a measurement. *** with absolute measurement error: mean ± range <ref>[https://openbooks.library.umass.edu/p132-lab-manual/chapter/how-to-write-numbers-significant-figures/ Physics 132 Lab Manual: how-to-write-numbers-significant-figures by Brokk Toggerson and Aidan Philbin ]</ref>, for example: 72.20 ± 0.02 * ratio of integers <math> r = \frac{m}{n}</math> ** in lowest terms ( irreducible form ) : <math>\tfrac{1}{21}</math> ** reducible form *** in explicit normalized form ( only when denominator is odd ):<math> \frac{n}{2^p - 1}</math><ref>[http://www.tic.itefi.csic.es/gerardo/publica/Pastor03.pdf HOW TO WORK WITH ONE-DI MENSIONAL QUADRATIC MAPS G. Pastor , M. Romera, G. Álvarez, and F. Montoya ]</ref>, for example : <math>\tfrac{3}{63} = \tfrac{3}{2^{6}-1}</math> *** The explicit normalized form of formula for denominator of angle : <math>\frac{n}{(2^p - 1) * 2^k}</math> * [[Fractals/Continued_fraction|continued fraction]] : <math>[a_0; a_1, a_2, a_3]</math> * scientific (exponential) form or notation: <ref>[https://www.calculatorsoup.com/calculators/math/scientific-notation-converter.php calculatorsoup: scientific-notation-converter]</ref> : <math> 6.022e23 = 6.022 * 10^{23}</math> : <math>1.2345e-3 = 1.2345+ 10^{-3}</math> : <math>\tfrac{3}{63} = \tfrac{3}{2^{6}-1} = \tfrac{1}{21} = 0.04761904761904762</math> A computer number formats ( storage forms) * floating point form ( expansion) : the number's radix point can "float" anywhere to the left, right, or between the significant digits of the number. * fixed point format ===Round brackets=== brackets with exponent ( superscript) denotes how many times the series repeats <ref>[http://www.hindawi.com/journals/mpe/2013/105283/ A Method to Solve the Limitations in Drawing External Rays of the Mandelbrot Set M. Romera,1 G. Pastor, A. B. Orue,1 A. Martin, M.-F. Danca,and F. Montoya ]</ref> :<math>0.11(11101010) = 0.11(11(10)^3) </math> === Trailing zeros === Trailing zeros to the right of a decimal point, as in 12.3400, do not affect the value of a number and may be omitted if all that is of interest is its numerical value. This is true even if the zeros recur infinitely. For example, in pharmacy, trailing zeros are omitted from dose values to prevent misreading. However, trailing zeros may be useful for indicating the number of significant figures, for example in a measurement. In such a context, "simplifying" a number by removing trailing zeros would be incorrect. The number of trailing zeros in a non-zero base-b integer n equals the exponent of the highest power of b that divides n. For example, 14000 has three trailing zeros and is therefore divisible by 1000 = 103, but not by 104. This property is useful when looking for small factors in integer factorization. Some computer architectures have a count trailing zeros operation in their instruction set for efficiently determining the number of trailing zero bits in a machine word. =Examples of binary expansions = First check if the ratio is in the lowest terms ( reducible) Binary expansion can be : * [[Fractals/Mathematics/binary#finite|finite]] * [[Fractals/Mathematics/binary#infinite|infinite]] ** [[Fractals/Mathematics/binary#periodic|periodic]] : preperiod = 0, period > 0 ** [[Fractals/Mathematics/binary#preperiodic|preperiodic]] ( = eventually periodic) : preperiod > 0, period > 0 ** [[Fractals/Mathematics/binary#aperiodic|aperiodic]] : preperiod = 0, period = 0 =Conversions= Conversion between : * bases ( from binary to decimal, ...) * forms ( rational to expansion, ...) <ref>[https://mathr.co.uk/blog/2014-10-13_converting_fractions_to_strings_of_digits.html Converting fractions to strings of digits by Claude Heiland-Allen ]</ref> ** Recognizing Rational Numbers From Their Decimal Expansion:<ref>[http://modular.math.washington.edu/edu/2007/spring/ent/ent-html/node74.html|Recognizing Rational Numbers From Their Decimal Expansion by William Stein]</ref> "to compute the simple continued fraction of the approximation, and truncate it before a large partial quotient a_n, then compute the value of the truncated continued fraction." ** converting-repeating-decimals-to-fractions <ref>[http://www.basic-mathematics.com/converting-repeating-decimals-to-fractions.html basic-mathematics : converting-repeating-decimals-to-fractions]</ref> ** fraction to recurring decimal<ref>[http://lagodiuk.github.io/programming_puzzles/2016/01/31/puzzles_repeating_decimal.html Recurring decimal of a rational number by Yurii Lahodiuk]</ref> *** use of Floyd's Cycle Detection Algorithm for finding of the first repetitive remainder *** recursive division and collection of remainders (associated with pieces of decimal fraction) ** convert-repeating-fractions-to-different-bases<ref>[https://www.quora.com/How-do-you-convert-repeating-fractions-to-different-bases quora : How-do-you-convert-repeating-fractions-to-different-bases]</ref> Using : * online calculators <ref>[http://www.knowledgedoor.com/2/calculators/convert_a_ratio_of_integers.html knowledgedoor calculators: convert_a_ratio_of_integers]</ref><ref>[http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fractions/FractionsCalc.html R.Knott : Fractions – Decimals Calculator]</ref><ref>[http://www.easysurf.cc/cnver17.htm Base Number - Decimal Number Conversion]</ref><ref>[http://www.exploringbinary.com/floating-point-converter/ Decimal to Floating-Point Converter By Rick Regan]</ref><ref>[http://www.wolframalpha.com/input/?i=111011.01%20binary%20to%20decimal wolframalpha binary to decimal conversion]</ref> * code ==Algorithms== * Find ** strictly repeating patterns (that you do not know in advance) in a binary string/sequence<ref>[https://stackoverflow.com/questions/5311671/best-algorithm-to-find-a-repeating-pattern stackoverflow question : best-algorithm-to-find-a-repeating-pattern]</ref> "If there is a pattern => its length must divide the string length "AnotherGeek<ref>[https://stackoverflow.com/questions/39534139/method-to-find-repeated-pattern-in-string-apart-from-regex?noredirect=1&lq=1 stackoverflow questions : method-to-find-repeated-pattern-in-string-apart-from-regex?noredirect=1&lq=1]</ref> *** using regex<ref>[https://stackoverflow.com/questions/21961729/finding-a-repeated-pattern-in-a-string stackoverflow question: finding-a-repeated-pattern-in-a-string]</ref> *** javascript<ref>[https://stackoverflow.com/questions/16474895/finding-a-pattern-in-a-binary-string stackoverflow question: finding-a-pattern-in-a-binary-string]</ref> <ref>[http://jsfiddle.net/hGxpx/ jsfiddle by Jan Turoń]</ref> ** non-repeating and strictly repeating patterns (that you do not know in advance) in a binary string/sequence * convert a number with a repeating fractional part === Reducing Fractions to Lowest Terms === A fraction that is reducible can be reduced by dividing both the numerator and denominator by a common factor. It can be fully reduced to lowest terms if both are divided by their greatest common divisor Algorithms for finding the greatest common divisor: * the Euclidean algorithm * prime factorization The Euclidean algorithm is commonly preferred because it allows one to reduce fractions with numerators and denominators too large to be easily factored Examples: * [https://www.desmos.com/calculator/6wjcqjudjx desmos: graphical fraction reduction] ===convert decimal fraction to binary=== "... we repeatedly multiply the decimal fraction by 2. If the result is greater than or equal to 1, we add a 1 to our answer. If the result is less than 1, we add a 0 to our answer." (from Virginia Tech Online CS module <ref>[https://slopecalculators.com/slope-intercept-form-calculator/ Virginia Tech Online CS module] </ref>) Algorithm:<ref>[http://stackoverflow.com/questions/4987176/how-do-you-convert-a-fraction-to-binary Stackoverflow : How do you convert a fraction to binary ?]</ref> * Multiply the input decimal fraction by two * from above result ** take integer part as the binary digit ** take the fractional part as the starting point for the next step * repeat until you either get to 0 or a periodic number * read the number starting from the top - the first binary digit is the first digit after the comma Example of conversion 0.1 decimal fraction to binary fraction : 0.1 * 2 = 0.2 -> 0 0.2 * 2 = 0.4 -> 0 0.4 * 2 = 0.8 -> 0 0.8 * 2 = 1.6 -> 1 0.6 * 2 = 1.2 -> 1 0.2 * 2 = 0.4 -> 0 0.4 * 2 = 0.8 -> 0 0.8 * 2 = 1.6 -> 1 0.6 * 2 = 1.2 -> 1 0.2 * 2 = 0.4 -> 0 0.4 * 2 = 0.8 -> 0 0.8 * 2 = 1.6 -> 1 0.6 * 2 = 1.2 -> 1 0.2 * 2 = 0.4 -> 0 Result: <math> 0.1_{10} = 0.0(0011)_2</math> Repeating fractions :<ref>[http://stackoverflow.com/questions/2126031/converting-a-repeating-binary-number-to-decimal-express-as-a-series Converting a repeating binary number to decimal (express as a series?)]</ref> 0.(567) = 567/999 = 189/333 = 63/111 0.(0011) = 0011 / 1111 =(in decimal) 3/15 = 1/5 [[File:Binary decomposition.png|thumbnail|right|Graphical conversion]] Code * [https://www.geeksforgeeks.org/convert-decimal-fraction-binary-number/ geeksforgeeks: convert-decimal-fraction-binary-number ] * [https://mathr.co.uk/web/m-primary-bulb.html primary-bulb by Claude Heiland-Allen ] ===Convert binary fraction to decimal ratio === ====Geometric series==== (Pre)periodic [[Fractals/Mathematics/binary|binary fraction]] can be split into 2 fractions: * finite * infinite: periodic with empty or filled with zeros preperiodic part :<math> 0.\overbrace{b...b}^{t}(\overbrace{b...b}^{p}) = 0.\overbrace{b...b}^{t} + 0.\overbrace{0...0}^{t}(\overbrace{b...b}^{p})</math> Formula for the geometric series when |r|<1 :<ref>[[:w:Geometric_series#Formula|wikipedia :Geometric_series]]</ref> <math>a+ar+ar^2+ar^3+ar^4+\cdots = \sum_{k=0}^\infty ar^k = \frac{a}{1-r} </math> For the infinite periodic binary fraction with empty or filled with zeros preperiodic part this formula is<ref>[https://stackoverflow.com/questions/2126031/converting-a-repeating-binary-number-to-decimal-express-as-a-series stackoverflow question: converting-a-repeating-binary-number-to-decimal-express-as-a-series]</ref> :<math> 0.\overbrace{0...0}^{t}(\overbrace{b...b}^{p}) = \frac{a}{1-r}</math> where : * b is a binary digit : 0 or 1 * t is a length of preperiodic block * p is a length of the periodic block * the value of a is simply the value of the first occurrence of the repeating block <math> a = 0.\overbrace{0...0}^{t}\overbrace{b...b}^{p}</math> * the value of <math>r = \frac{1}{2^p}</math> so <math>1 - r = \frac{2^p - 1}{2^p}</math> :<math> 0.\overbrace{b...b}^{t}(\overbrace{b...b}^{p}) = 0.\overbrace{b...b}^{t} + \frac{a}{1-r} = 0.\overbrace{b...b}^{t} + \frac{0.\overbrace{0...0}^{t}\overbrace{b...b}^{p}}{\frac{2^p - 1}{2^p}}</math> '''Full formula''' is now: <math> 0.\overbrace{b...b}^{t}(\overbrace{b...b}^{p}) = 0.\overbrace{b...b}^{t} + \frac{0.\overbrace{0...0}^{t}\overbrace{b...b}^{p}}{\frac{2^p - 1}{2^p}}</math> '''Examples :''' * <math> 0.(0011) = \frac{0.0011}{\frac{2^4 - 1}{2^4}} = \frac{3/16}{15/16} = \frac{1}{5}</math> * <math> 0.00(0011) = \frac{0.000011}{\frac{2^4 - 1}{2^4}} = \frac{3/64}{15/16} = \frac{1}{20}</math> * <math> 0.01(1100) = 0.01 + \frac{0.0011}{\frac{2^4 - 1}{2^4}} = \frac{1}{4} + \frac{3/16}{15/16} = \frac{1}{4} + \frac{1}{5} = \frac{9}{20}</math> <math> 0.0101(11001) = 0.0101 + \frac{0.000011001}{\frac{2^5 - 1}{2^5}} = \frac{5}{16} + \frac{25/512}{31/32} = \frac{5}{16} + \frac{25}{496} = \frac{45}{124}</math> ==code examples== ===bc=== Conversion from decimal ratio to binary<ref>[https://math.stackexchange.com/questions/1626654/find-a-fraction-given-the-repeating-binary-expansions math.stackexchange question: find-a-fraction-given-the-repeating-binary-expansions]</ref> using [[Guide to Unix/Explanations/bc#Convertions|bc – arbitrary–precision arithmetic language]] bc 1.06 Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. obase=2 3/14 .0011011011011011011011011011011011011011011011011011011011011011010 1/5 .0011001100110011001100110011001100110011001100110011001100110011001 ===C=== * itoa * snprintf<ref>[http://stackoverflow.com/questions/190229/where-is-the-itoa-function-in-linux Where is the itoa function in Linux?]</ref> * Binary integer constant * Macro BOOST_BINARY * gmp * [[Fractals/mandelbrot-symbolics#binaries|mandelbrot-symbolics lbrary by Claude Heiland-Allen]] ** [[Fractals/mandelbrot-symbolics#m-binangle-from-rational binangle-from-rational]] * [http://0x80.pl/articles/convert-to-bin.html Conversion numbers to binary representation by Wojciech Muła] ====itoa==== '''itoa''' function <ref>[http://www.strudel.org.uk/itoa/ itoa with GCC by Stuart]</ref> <syntaxhighlight lang="c"> /* itoa example http://www.cplusplus.com/reference/cstdlib/itoa/ */ #include <stdio.h> #include <stdlib.h> int main () { int i; char buffer [33]; printf ("Enter a number: "); scanf ("%d",&i); itoa (i,buffer,10); printf ("decimal: %s\n",buffer); itoa (i,buffer,16); printf ("hexadecimal: %s\n",buffer); itoa (i,buffer,2); printf ("binary: %s\n",buffer); return 0; } </syntaxhighlight> ====Binary integer constant==== Binary integer constant<ref>[https://gcc.gnu.org/onlinedocs/gcc/Binary-constants.html#Binary-constants gcc - Binary-constants]</ref> "Integer constants can be written as binary constants, consisting of a sequence of ‘0’ and ‘1’ digits, prefixed by ‘0b’ or ‘0B’. This is particularly useful in environments that operate a lot on the bit level (like microcontrollers). The following statements are identical: <syntaxhighlight lang="c"> i = 42; i = 0x2a; i = 052; i = 0b101010; </syntaxhighlight> The type of these constants follows the same rules as for octal or hexadecimal integer constants, so suffixes like ‘L’ or ‘UL’ can be applied." ====gmp==== GMP library<ref>[[:pl:Programowanie_w_systemie_UNIX/GMP|Programowanie_w_systemie_UNIX: GMP in polish wikibooks]]</ref> <syntaxhighlight lang=c> /* C programme using gmp gcc r.c -lgmp -Wall http://gmplib.org/manual/Rational-Number-Functions.html#Rational-Number-Functions */ #include <stdio.h> #include <gmp.h> int main () { // input = binary fraction as a string char *sbr = "01001010010010100101001001010010010100101001001010010100100101001001010010100100101001010/11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"; mpq_t q; // rational number; int b =2 ; // base of numeral system mpz_t n ; mpz_t d ; mpf_t f; // init and set variables mpq_init (q); // Initialize r and set it to 0/1. mpq_set_str (q, sbr , b); mpq_canonicalize (q); // It is the responsibility of the user to canonicalize the assigned variable before any arithmetic operations are performed on that variable. mpq_canonicalize (q); // It is the responsibility of the user to canonicalize the assigned variable before any arithmetic operations are performed on that variable. // n , d mpz_inits(n,d,NULL); mpq_get_num(n,q); mpq_get_den(d, q); // mpf_init2(f, 100); // http://stackoverflow.com/questions/12804362/gmp-division-precision-or-printing-issue mpf_set_q(f,q); // There is no rounding, this conversion is exact. // print gmp_printf ("decimal fraction = %Zd / %Zd \ndecimal canonical form = %Qd\n",n,d, q); // gmp_printf ("binary fraction = %s \n", sbr); // gmp_printf ("decimal floating point number : %.30Ff \n", f); // // clear memory mpq_clear (q); mpz_clear (n); mpz_clear (d); mpf_clear (f); return 0; } </syntaxhighlight> Output : <pre> decimal fraction = 179622968672387565806504266 / 618970019642690137449562111 decimal canonical form = 179622968672387565806504266/618970019642690137449562111 binary fraction = 01001010010010100101001001010010010100101001001010010100100101001001010010100100101001010/11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 decimal floating point number : 0.290196557138708685358212602171 </pre> ===Haskell=== Code by Claude Heiland-Allen:<ref>[http://mathr.co.uk/blog/2014-10-13_converting_fractions_to_strings_of_digits.html Converting fractions to strings of digits by Claude Heiland-Allen]</ref> <syntaxhighlight lang="haskell"> -- http://mathr.co.uk/blog/2014-10-13_converting_fractions_to_strings_of_digits.html import Data.Fixed (mod') import Data.List (nub) import Data.Ratio ((%), denominator) import Data.Numbers.Primes (primeFactors) import System.Environment (getArgs) data Digits = Digits { dNegative :: Bool , dInteger , dPreperiodic , dPeriodic :: [Int] } deriving Show preperiod :: Digits -> Int preperiod = length . dPreperiodic period :: Digits -> Int period = length . dPeriodic digitsAtBase :: Int -> Rational -> Digits digitsAtBase base rational = Digits { dNegative = rational < 0 , dInteger = int , dPreperiodic = pre , dPeriodic = per } where integer :: Integer fraction :: Rational (integer, fraction) = properFraction (abs rational) int | integer == 0 = [0] | otherwise = goInt integer [] goInt i ds | i == 0 = ds | otherwise = goInt i' (fromInteger d : ds) where (i', d) = i `divMod` baseZ factors :: [Integer] factors = map fromIntegral . nub . primeFactors $ base isPreperiodic :: Rational -> Bool isPreperiodic x = any (`divides` denominator x) factors baseZ :: Integer baseZ = fromIntegral base baseQ :: Rational baseQ = fromIntegral base (pre, per) = goPre fraction where goPre :: Rational -> ([Int], [Int]) goPre x | isPreperiodic x = first (d:) (goPre x') | otherwise = ([], d : goPer x x') where (d, x') = properFraction (baseQ * x) goPer :: Rational -> Rational -> [Int] goPer x0 x | x0 == x = [] | otherwise = d : goPer x0 x' where (d, x') = properFraction (baseQ * x) first :: (a -> c) -> (a, b) -> (c, b) first f (a, b) = (f a, b) divides :: Integer -> Integer -> Bool factor `divides` number = number `mod` factor == 0 digitsToString :: [String] -> Digits -> String digitsToString digits Digits { dNegative = sign , dInteger = int , dPreperiodic = pre , dPeriodic = per } = (if sign then "-" else "") ++ d int ++ "." ++ d pre ++ "(" ++ d per ++ ")" where d = concatMap (digits !!) atBase :: Int -> Rational -> String atBase base rational = digitsToString ds (digitsAtBase base rational) where ds | base <= 62 = map (:[]) $ ['0'..'9'] ++ ['A'..'Z'] ++ ['a'..'z'] | otherwise = [ "<" ++ show d ++ ">" | d <- [0 .. base - 1] ] main :: IO () main = do [sbase, sfraction] <- getArgs let (snum, _:sden) = break ('/' ==) sfraction base = read sbase num = read snum den = read sden rational = num % den putStrLn (atBase base rational) </syntaxhighlight> ===Python=== <syntaxhighlight lang="python"> # https://wiki.python.org/moin/BitManipulation # binary string to integer >>> int('00100001', 2) 33 # conversion from binary string to hex string >>> print "0x%x" % int('11111111', 2) 0xff >>> print "0x%x" % int('0110110110', 2) 0x1b6 >>> print "0x%x" % int('0010101110101100111010101101010111110101010101', 2) 0xaeb3ab57d55 </syntaxhighlight> Other methods <ref>[http://stackoverflow.com/questions/699866/python-int-to-binary stackoverflow : python int to binary]</ref> =How to use numbers in computer programs ? = First read: * article "What Every Computer Scientist Should Know About Floating-Point Arithmetic" by DAVID GOLDBERG : <ref>[http://www.itu.dk/~sestoft/bachelor/IEEE754_article.pdf What Every Computer Scientist Should Know About Floating-Point Arithmetic by DAVID GOLDBERG]</ref> * [http://blog.reverberate.org/2014/09/what-every-computer-programmer-should.html Josh HabermanFloating Point Demystified, Part 1 by ] * [http://blog.reverberate.org/2016/02/06/floating-point-demystified-part2.html floating-point-demystified-part2 ] ==integer== * types * limits and overflow ===Limit=== <syntaxhighlight lang=c> /* gcc l.c -lm -Wall ./a.out http://stackoverflow.com/questions/29592898/do-long-long-and-long-have-same-range-in-c-in-64-bit-machine */ #include <stdio.h> #include <math.h> // M_PI; needs -lm also #include <limits.h> // INT_MAX, http://pubs.opengroup.org/onlinepubs/009695399/basedefs/limits.h.html int main(){ double lMax; lMax = log2(INT_MAX); printf("INT_MAX \t= %25d ; lMax = log2(INT_MAX) \t= %.0f \n",INT_MAX, lMax); lMax = log2(UINT_MAX); printf("UINT_MAX \t= %25u ; lMax = log2(UINT_MAX) \t= %.0f \n", UINT_MAX, lMax); lMax = log2(LONG_MAX); printf("LONG_MAX \t= %25ld ; lMax = log2(LONG_MAX) \t= %.0f \n",LONG_MAX, lMax); lMax = log2(ULONG_MAX); printf("ULONG_MAX \t= %25lu ; lMax = log2(ULONG_MAX) \t= %.0f \n",ULONG_MAX, lMax); lMax = log2(LLONG_MAX); printf("LLONG_MAX \t= %25lld ; lMax = log2(LLONG_MAX) \t= %.0f \n",LLONG_MAX, lMax); lMax = log2(ULLONG_MAX); printf("ULLONG_MAX \t= %25llu ; lMax = log2(ULLONG_MAX) \t= %.0f \n",ULLONG_MAX, lMax); return 0; } </syntaxhighlight> Results : <pre> INT_MAX = 2147483647 ; lMax = log2(INT_MAX) = 31 UINT_MAX = 4294967295 ; lMax = log2(UINT_MAX) = 32 LONG_MAX = 9223372036854775807 ; lMax = log2(LONG_MAX) = 63 ULONG_MAX = 18446744073709551615 ; lMax = log2(ULONG_MAX) = 64 LLONG_MAX = 9223372036854775807 ; lMax = log2(LLONG_MAX) = 63 ULLONG_MAX = 18446744073709551615 ; lMax = log2(ULLONG_MAX) = 64 </pre> For example Wolf Jung in [[Fractals/mandel|program Mandel]] makes a silent bounds check:<ref>[[w:Bounds checking|wikipedia : Bounds checking]]</ref> <syntaxhighlight lang =cpp> // mndynamo.h by Wolf Jung (C) 2007-2014 typedef unsigned long long int qulonglong; // mndcombi.cpp by Wolf Jung (C) 2007-2014 qulonglong mndAngle::wake(int k, int r, qulonglong &n) { if (k <= 0 || k >= r || r > 64) return 0LL; </syntaxhighlight> If r is to big for unsigned long long int type it returns 0 to prevent integer overflow. GMP library has arbitrary precision rationals. ==floating point== ===precision=== [[Fractals/Mathematics/Numerical#Precision|Precision]] * GMP : The mantissa of each float has a user-selectable precision ( variable prec type mp_bitcnt_t ). Counts of bits of a multi-precision number are represented in the C type mp_bitcnt_t. Currently this is always an unsigned long * MPFR : The precision is the number of bits used to represent the significand ( mantissa) of a floating-point number; the corresponding C data type is mpfr_prec_t. ==Rational== [[File:Stereographic projection of rational points.svg|thumb|right|The rational points on a circle correspond, under stereographic projection, to the rational points of the line.]] "Any number with a finite decimal expansion is a rational number. " In other words : "any floating point number can be converted to a rational number." <ref>[http://stackoverflow.com/questions/4266741/check-if-a-number-is-rational-in-python?rq=1 stackoverflow questions : check-if-a-number-is-rational-in-python]</ref> So in numerical computations one can use only integer of floating points numbers ( rational ). ===Decimal=== ===Binary=== * [http://www.exploringbinary.com/exploring-binary-numbers-with-parigp-calculator/ Exploring Binary Numbers With PARI/GP Calculator By Rick Regan] * [http://www.wolframalpha.com/input/?i=1%2F7+to+binary Wolfram Alpha] ====Numbers==== In [[C]] one can use : * bitwise operators <ref>[http://joequery.me/notes/learning-c-4/ Joe McCullough : bitwise operators]</ref> In [[Maxima|Maxima CAS]] one can use : <pre> (%i1) ibase; (%o1) 10 (%i2) obase; (%o2) 10 (%i3) ibase:2; (%o3) 2 (%i4) x=1001110; (%o4) x=78 </pre> ====String==== Calculation of binary numbers with as a string with replicating parts in '''Haskell''' (ghci): <syntaxhighlight lang="haskell"> -- by Claude Heiland-Allen -- http://mathr.co.uk/blog/haskell.html Prelude> let rep n s = concat (replicate n s) Prelude> putStrLn $ ".(" ++ rep 88 "001" ++ "010)" .(001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001010) putStrLn $ ".(" ++ rep 87 "001" ++ "010001)" .(001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001010001) Prelude> putStrLn $ ".(" ++ rep 88 "001" ++ "0001)" .(0010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010001) Prelude> putStrLn $ ".(" ++ rep 88 "001" ++ "0010)" .(0010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010010) </syntaxhighlight> In '''Python''' : <syntaxhighlight lang="python"> >>> bin(173) '0b10101101' >>> int('01010101111',2) 687 </syntaxhighlight> ====Literal==== In python one can use binary literals :<ref>[http://stackoverflow.com/questions/1476/how-do-you-express-binary-literals-in-python Stackoverflow : How do you express binary literals in Python?]</ref> <syntaxhighlight lang="python"> python Python 2.7.5+ (default, Feb 27 2014, 19:37:08) [GCC 4.8.1] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> 0b101111 47 </syntaxhighlight> ==Irrational = not rational== [[File:Irrational numbers-7.png|thumb|right|Irrational numbers]] '''The problem is that we are exploring environments based upon irrational numbers through computer machinery which works with finite rationals !''' ( Alessandro Rosa ) Expansion is non terminating and non repeating Types: * Algebraic Numbers = roots of Algebraic Equations. Example : sqrt(2), * transcendental numbers = non algebraic If one wants use irrational number then should check : * symbolic computations : ** exact number can be used as a symbol, but "you cannot print the whole irrational number" ** infinite continued fraction * numerical computations : close rational approximations to irrational numbers <ref>[http://www.johndcook.com/blog/2010/10/20/best-rational-approximation/ John D Cook : best-rational-approximation]</ref> (the Diophantine Approximation <ref>[https://stat.duke.edu/~kfl5/Lock2004.pdf DISCOVERING EXACTLY WHEN A RATIONAL IS A BEST APPROXIMATE OF AN IRRATIONAL By KARI LOCK]</ref>) ** ratio of integers ** floating point number ** finite continued fractions ===Inverse golden mean=== The most irrational number<ref>[http://www.ams.org/publicoutreach/feature-column/fcarc-irrational4 ams : The Most Irrational Number]</ref> In a continued fraction all numbers are 1 = the slowest convergence of all the irrational numbers Using Maxima CAS : (%i10) print(float(%phi-1)); (%o10).6180339887498949 (%i11) rationalize(float(%phi-1)); (%o11) 347922205179541/562949953421312 and : (%i14) print(float(1/%phi)); (%o14) .6180339887498948 (%i15) rationalize(float(1/%phi)); (%o15) 5566755282872655/9007199254740992 where denominator : <math>562949953421312 = 1 + 2^{49} </math> ==complex== * the multi-valued nature of complex powers can cause big troubles ( artifacts of branch cuts, arbitrary principal value of arg) * domain coloring <ref>[http://www.mathe.tu-freiberg.de/fakultaet/information/math-calendar-2015 complex beauties : math-calendar]</ref><ref>[http://davidbau.com/conformal/#z%5E2-2 David Bau : complex function viewer]</ref> Examples * VBA <ref>[https://pfadintegral.com/articles/complex-numbers-vba/ Complex Numbers in VBA by Pfadintegral ]</ref> * Maxima CAS ==How to find number type == Note that in numerical computations with finite precision ( on computer) : * if number is represented as a ratio ( of integers) then it is a rational number * if number has a floating point representation the it is also a rational number because of limited precision = finite expansion <pre> /* Maxima CAS batch file */ remvalue(all); kill(all); /* input = ratio, which automatically changed to lowest terms by Maxima CAS output = string describing a type of decimal expansion --------------------------------------------------------------------------------- " The rules that determine whether a fraction has recurring decimals or not are really quite simple. 1. First represent the fraction in its simplest form, by dividing both numerator and denominator by common factors. 2. Now, look at the denominator. 3. 3.1 If the prime factorization of the denominator contains only the factors 2 and 5, then the decimal fraction of that fraction will not have recurring digits. In other words : Terminating decimals represent rational numbers of the form k/(2^n*5^m) 3.2 A fraction in lowest terms with a prime denominator other than 2 or 5 (i.e. coprime to 10) always produces a repeating decimal. 3.2.1 If the prime factorization yields factors like 3, 7, 11 or other primes (other than 2 and 5), then that fraction will have a decimal representation that includes recurring digits. 3.2.2 Moreover, if the denominator's prime factors include 2 and/or 5 in addition to other prime factors like 3, 7, etc., the decimal representation of the fraction will start with a few non-recurring decimals before the recurring part." http://blogannath.blogspot.com/2010/04/vedic-mathematics-lesson-49-recurring.html check : http://www.knowledgedoor.com/2/calculators/convert_a_ratio_of_integers.html wikipedia: Repeating_decimal " A fraction in lowest terms with a prime denominator other than 2 or 5 (i.e. coprime to 10) always produces a repeating decimal. The length of the repetend (period of the repeating decimal) of 1/p is equal to the order of 10 modulo p. If 10 is a primitive root modulo p, the repetend length is equal to p − 1; if not, the repetend length is a factor of p − 1. This result can be deduced from Fermat's little theorem, which states that 10p−1 = 1 (mod p)." --------------------------------------------------------------------------------------- */ GiveRatioType(ratio):= block ( [denominator:denom(ratio), FactorsList , Factor, Has25:false, HasAlsoOtherPrimes:false, type ], /* type of decimal expansion of the ratio of integers */ /* compute list of prime factors ofd denominator */ FactorsList:ifactors(denominator), FactorsList:map(first,FactorsList), print(denominator, FactorsList), /* check factors type : only 2 or 5 also other primes then 2 or 5 */ if (member(2,FactorsList) or member(5,FactorsList)) then Has25:true, for Factor in FactorsList do if (not member(Factor,[2,5])) then HasAlsoOtherPrimes:true, print(Has25, HasAlsoOtherPrimes), /* find type of decimal expansion */ if (not Has25 and HasAlsoOtherPrimes) then type:"periodic", if (Has25 and HasAlsoOtherPrimes) then type:"preperiodic", if (Has25 and not HasAlsoOtherPrimes) then type:"finite", return(type) )$ compile(all)$ /* input numbers*/ a:1 $ b:3 $ r:a/b$ type : GiveRatioType(r); </pre> =tools= * dumpfp: A Tool to Inspect Floating-Point Numbers by Joshua Haberman<ref>[http://blog.reverberate.org/2012/11/dumpfp-tool-to-inspect-floating-point.html dumpfp: A Tool to Inspect Floating-Point Numbers by Joshua Haberman]</ref> * [https://float.exposed/0x5716b7d849c02d62 float.exposed] - and [https://ciechanow.ski/exposing-floating-point/ blog by Bartosz Ciechanowski] =More= * [[Fractals/Mathematics/sequences|sequences]] ** orbits *** [[Fractals/Mathematics/Period|period]] * series * cardinality * partition * random numbers ==Cardinality == In mathematic ( theory) : * "... the rational numbers are a countable set whereas the irrational numbers are an uncountable set. In other words, there are more irrational numbers than there are rational. " <ref>[http://www.homeschoolmath.net/teaching/irrational_numbers.php home school math : The fascinating irrational numbers]</ref> * "... in the set of real numbers there is continuum of irrational numbers and only aleph-zero rational numbers. Thus probability that any random number is irrational is 1;" ( Bartek Ogryczak) <ref>[http://stackoverflow.com/questions/12512377/irrational-number-check-function stackoverflow questions : irrational-number-check-function]</ref> "To be pedantically correct you should have said almost certainly is 1. " – David Hammen == height of a rational number in lowest term== [[File:Thomae function (0,1).svg|thumb|right|Thomae function = 1/q]] "a “height function” is some real-valued function that defines the “arithmetic complexity” of a point ... " Brian Lawrence<ref>[http://math.columbia.edu/~brianrl/notes/heights.pdf Introduction to Heights by Brian Lawrence]</ref> Types of the height functions defined on the set of rational numbers <math>\mathbb{Q}</math>: * <math>H(p/q)=\max\{|p|,|q|\}</math> for the (multiplicative) height of a rational number<ref>[http://doc.sagemath.org/html/en/reference/rings_standard/sage/rings/rational.html#sage.rings.rational.Rational.global_height sagemath : Rational.global_height]</ref> also called [[:w:Glossary_of_arithmetic_and_diophantine_geometry#N|naive height]] * <math>h(p/q)=\log H(p/q)</math> the logarithmic height or additive<ref>[http://ksda.ccny.cuny.edu/PostedPapers/heights1.pdf Height Functions by Michael Tepper]</ref> where: * p/q is a rational number in lowest term "How complicated is a rational number? Its size is not a very good indicator for this. For instance, 1987985792837/1987985792836 is approximately 1, but so much more complicated than 1. We'll explain how to measure the complexity of a rational number using various notions of height. We'll then see how heights are used to prove some basic finiteness theorems in number theory. One example will be the Mordell-Weil theorem: that on any rational elliptic curve, the group of rational points is finitely generated. " Alina Bucur (UCSD): Size Doesn't Matter: Heights in Number Theory Key words: * number field * Height Functions in Number Theory ==Paritition == * paritition function : "partition numbers behave like fractals, possessing an infinitely-repeating structure" <ref>[http://www.aimath.org/news/partition/ Fractal Structure to Partition Function. ]</ref> ==Random number== The probability that any random number : * is irrational is almost 1 ( in theory because of cardinality ) * is rational is 1 ( in numerical computations because of limited precision ) ==Fields== * generalisation : scalar / vector / tensor * fields : scalar , [[Fractals/Mathematics/Vector field|vector]], tensor =References= <references/> * [http://illustratedtheoryofnumbers.com/ An Illustrated Theory of Numbers by Martin H. Weissman] =See also= * [http://www.divisorplot.com/ Divisor Plot : Explore composite number patterns] * [https://www.semanticscholar.org/paper/Rational-Points-on-the-Unit-Sphere%3A-Approximation-Bahrdt-Seybold/b94ae4a2691c667a7c11550f65edfb668dd49921 Rational Points on the Unit Sphere: Approximation Complexity and Practical Constructions by Daniel Bahrdt, Martin P. Seybold] * [[Discrete Mathematics/Number representations|Discrete Mathematics : Number representations]] * [[A-level Computing/AQA/Paper 2/Fundamentals of data representation/Binary fractions|A-level_Computing : Binary_fractions]] * [[Fractals/Mathematics/sequences#sequence of fraction in the elephant valley|sequence_of_fraction_in_the_elephant_valley]] * [[Fractals/Iterations in the complex plane/wake|Fractals : Iterations_in_the_complex_plane , wake]] {{BookCat}} dm2xdmykquuywzxet5ph534nq4vfes7 Koine Greek/Prepositions and εἰμί 0 296826 4675421 4672566 2026-10-10T05:08:32Z It-is-Truly-Meet 3624460 Clean-up on formatting was done. 4675421 wikitext text/x-wiki ==Prepositions== A ''preposition'' is a function word that typically combines with a noun phrase to form a phrase which usually expresses a modification or predication (e.g., "the cup is '''on''' the table"). The preposition together with its object is called a ''prepositional phrase''. Prepositions in Ancient Greek function similarly to English, but the object of a Greek preposition must be inflected in either the genitive (away from), dative (on, in, under), or accusative (into): * εἰς + acc.: into (e.g., εἰς τὸ στόμα — into the mouth) * ἐν + dat.: in (e.g., ἐν τῷ στόματι — in the mouth) * ἐκ + gen.: from, out of (e.g., ἐκ τοῦ στόματος — out of the mouth) ** ἐκ becomes ἐξ before a vowel (e.g., ἐξ αἵματος — out of blood) ===Accents, Elision, and Aspiration=== * Prepositions—with the exception of εἰς, ἐν, and ἐκ—normally have an acute accent. If the preposition has two syllables, the acute falls on the ultima ** e.g., ἀπὸ τῆς ἐλπίδος — from the hope * Prepositions frequently drop their final vowel before a word beginning with a vowel, and in such cases, the preposition has no accent—though περί and πρό don’t allow for elision ** e.g., ἀπ’ ἐλπίδος — from hope * After a preposition drops its final vowel and ends in a stop consonant, that consonant becomes aspirated if the following word begins with an aspirated (i.e., marked with a rough breathing) vowel or diphthong ** e.g., ἀφ’ αἵματος — from blood ===Classes of Prepositions=== ====Proper Prepositions==== # ἀμφι - If governing the ''genitive'': around / about / concerning. If governing the ''accusative'': around / on both sides (motion or extent). ## Extremely rare on its own in Koine, but survives via compound verbs. # ἀνὰ - each, per. Governs the accusative case. ## δηνάριον '''ἀνὰ''' ἡμέραν - a denarius '''per''' day # ἀντὶ - instead of / in place of / in exchange for. Governs the genitive case. ## ὀφθαλμὸν '''ἀντὶ''' ὀφθαλμοῦ - an eye '''for''' an eye (Matthew 5:38) # ἀπὸ - from, i.e., coming from or away from. Governs the genitive case. [[wiktionary:ἀπό|See ἀπό on Wikitionary]] ## ῥῦσαι ἡμᾶς '''ἀπὸ''' τοῦ πονηροῦ - deliver us '''from''' the wicked [one] (Matthew 6:13) # διὰ - If governing the ''genitive'': through, by means of. If governing the ''accusative'': on account of, because of, for (the sake of). ## Example with genitive: εὐχαριστῶ τῷ Θεῷ μου '''διὰ''' Ἰησοῦ Χριστοῦ - I give thanks to my God '''through''' Jesus Christ (Romans 1:8) ## Example with accusative: γενομένης θλίψεως ἢ διωγμοῦ '''διὰ''' τὸν λόγον - when affliction or persecution arises '''on account of''' the word (Matthew 13:21) # εἰς - into, to, toward, unto (spatial/purposive), until (temporal), into a state (i.e., resulting in, leading to), for (the sake of). Connotes motion ''into'' or ''toward'' a goal (think "motion toward" something, whether physical, like a location, or abstract, like a goal) ## φεῦγε '''εἰς''' Αἴγυπτον - flee '''into''' Egypt (Matthew 2:13) ## '''εἰς''' ζωὴν αἰώνιον διὰ Ἰησοῦ Χριστοῦ - '''leading to''' eternal life through Jesus Christ (Romans 5:21) # ἐκ # ἐν # ἐπὶ # κατὰ # μετὰ # παρὰ # περὶ # πρὸ # πρὸς # σὺν # ὑπὲρ # ὑπὸ ====Improper Prepositions==== # ἅμα # ἄνευ # ἄντικρυς # ἀντιπέρα # ἀπέναντι # ἄτερ # ἄχρι/ἄχρις # ἐγγὺς # ἐκτὸς # ἔμπροσθέν # ἔναντι # ἐναντίον # ἕνεκα # ἐντὸς # ἐνώπιον # ἔξω # ἔξωθεν # ἐπάνω # ἐπέκεινα # ἔσω # ἕως # κατέναντι # κατενώπιον # κυκλόθεν # κύκλῳ # μέσον # μεταξὺ # μέχρι/μέχρις # ὄπισθεν # ὀπίσω # ὀψέ # παραπλήσιον # παρεκτὸς # πέραν # πλὴν # πλησίον # ὑπεράνω # ὑπερέκεινα # ὑπερεκπερισσοῦ # ὑποκάτω # χάριν # χωρίς ==εἰμῐ́== Not to be confused with εἶμῐ, εἰμῐ́ ("to be") is necessary for the formation of the most simple sentence, so its conjugation in the indicative mood is given. Note that "γίγνομαι" '''supplements''' the aorist and the present perfect. All forms of the present active indicative except 2nd person singular εἶ are '''enclitic'''. {| class="wikitable" style="text-align:center" |+ Present |- ! Person !! Singular !! Plural |- | 1st || εἰμῐ́ "I am" || ἐσμέν "we are" |- | 2nd || εἶ "thou art" || ἐστέ "ye are" |- | 3rd || ἐστῐ́(ν) "he/she/it is"|| εἰσῐ́(ν) "they are" |} {| class="wikitable" style="text-align:center" |+ Imperfect |- ! Person !! Singular !! Plural |- | 1st || ἦ(ν)/ἤμην "I was" || ἦμεν/ἤμεθα "we were" |- | 2nd || ἦσ(θᾰ)/ἦσο "thou wast" || ἦτε/ἦσθε "ye were" |- | 3rd || ἦν/ἦτο "he/she/it was" || ἦσᾰν/ἦντο "they were" |} Note that the latter forms (e.g., ἤμην) are middle in voice. The active and middle voices here have the same meaning; ἤμην replaces ἦ(ν) for “I was”. {| class="wikitable" style="text-align:center" |+ Future |- ! Person !! Singular !! Plural |- | 1st || ἔσομαι "I shall be" || ἐσόμεθᾰ "we shall be" |- | 2nd || ἔσῃ "thou shalt be" || ἔσεσθε "you shall be" |- | 3rd || ἔσται "he/she/it shall be" || ἔσονται "they shall be" |} {{BookCat}} 9xs8cuyuoaslo5lgbr78ofbkioquw4w Koine Greek/Introduction to Nouns 0 297347 4675419 4672592 2026-10-10T04:46:45Z It-is-Truly-Meet 3624460 4675419 wikitext text/x-wiki A '''noun''' indicates a person, place, or thing. An English noun form normally indicates whether it's singular or plural. However, nouns in Greek are declined (have ending changes) based on ''case'', ''number'' (singular or plural), and ''gender'' (masculine, feminine, neuter). The ''case'' of a noun indicates the function of the noun in the sentence. There are five different cases: # The '''nominative''' case marks the subject of a phrase as well as the predicate nominative (i.e., the object of a linking verb (or copulative verb), such as to be). Examples: In the sentence "The dog bit the man", dog would be in the nominative case. Also, in the sentence "The man is a soldier", both "man" and "soldier" are in the nominative case. # The '''genitive''' case denotes source or origin (this function is also called the ablative), or kind or possession. It is also often used for an object of a preposition. It is frequently translated as "of ...". Examples: In the phrase "The man's wife", or equivalently, "the wife of the man", man would be in the genitive case. # The '''dative''' case denotes an indirect object (translated as "to ..." or "for ..."); means or agency, especially impersonal means (translated as "by ..."); or a location. It is also frequently used as an object of a preposition, and often, a preposition can take a noun in either the genitive or dative case with different meanings. Examples: In the sentence "I spoke to John", John would be in the dative case. Also, in the sentence "By grace, you have been saved", grace would be in the dative case. # The '''accusative''' case denotes a direct object. Example: In the sentence, "I saw the cat", cat would be in the accusative case. In Greek, nouns fall under three different patterns for case endings, called declensions. The first declension contains nouns whose stems end in α or η. They are mostly feminine nouns. The second declension contains nouns whose stems end in ο. They are mostly masculine or neuter. The third declension contains all other nouns (mostly, nouns whose stems end in a consonant). There are broad patterns in third declension endings, but many more special cases than for first and second declension nouns. == The Definite Article == English's '''sole''' definite article is 'the.' However, the Greek definite article changes according to gender (this is the same difference between 'la' and 'le' in French and 'el' and 'la' in Spanish), number (this is the 'los' and 'las' of Spanish or the 'les' of French), and case, though it's not influenced by noun declensions. The definite article derives from an old ''demonstrative'' system and functions primarily as a marker of ''definiteness'' and ''anaphoric reference'' (e.g., '''ὁ''' δὲ ἀποκριθεὶς ἑνὶ αὐτῶν εἶπεν...). Since Greek doesn’t always follow the same word order as modern languages, the article may be used multiple times around the same word, placed after the word it’s connected to to emphasize it, or before or after it with another word like 'δέ' for emphasis. Note that it '''typically precedes the noun''', which may be [[Ancient Greek/Glossary of Grammatical Terms#Noun|abstract]]; marks the beginning of the noun phrase; and is repeated with each ''coordinated noun'' when each noun is ''independently definite''. It may even substantivize adjectives into nouns (e.g., ὁ κακός — the evil one). :: ἕως ἂν παρέλθῃ '''ὁ''' οὐρανὸς καὶ '''ἡ''' γῆ, ἰῶτα ἓν ἢ μία κεραία οὐ μὴ παρέλθῃ ἀπὸ '''τοῦ''' νόμου — until heaven and earth disappear, not the smallest letter, not the least stroke of a pen, will by any means disappear from the Law (Matthew 5.18). {| class="wikitable" style="text-align:center" ! rowspan=2 | Case ! colspan=3 | Singular ! colspan=3 | Plural |- ! Masculine ! Neuter ! Feminine ! Masculine ! Neuter ! Feminine |- ! Nominative | ὁ | rowspan=2 | τό | ἡ | οἱ | rowspan=2 | τά | αἱ |- ! Accusative | τόν | τήν | τούς | τάς |- ! Genitive | colspan=2|τοῦ | τῆς | colspan=3|τῶν |- ! Dative | colspan=2|τῷ | τῇ | colspan=2|τοῖς | ταῖς |- ! colspan=8| |- ! Vocative | colspan=7|ὦ |} {{BookCat}} 70rv8fqf4fu8jyp0f3fbmn46hm69azj User:Saltrabook/Clinical diagnostic guidelines/Mental stress 2 304349 4675327 3796989 2026-10-09T21:52:52Z Omphalographer 3427146 Omphalographer moved page [[Saltrabook/Clinical diagnostic guidelines/Mental stress]] to [[User:Saltrabook/Clinical diagnostic guidelines/Mental stress]] over a redirect without leaving a redirect: per [[Wikibooks:Requests for deletion/Occupational Medicine Textbook-Wiki]] 3796989 wikitext text/x-wiki Stress (adjustment disorder, stress disorder), work-related ===Definition=== By adjustment disorder is defined as a clinical condition that Occurs in connection to severe or prolonged psychosocial stress Is characterized by anxiety, aversion and the experience of loss of self-control It is assumed that the non-specific symptoms do not occur in the context of depression, anxiety disorder, functional illness, substance abuse, personality disorder or physical illness Differentiation from normal psychological reactions to life and work are blurred and depends primarily on the duration of symptoms (weeks / months) and consistency (incapacity) Stress disorder is used to describe a long-term mental disorder (up to 2 years) Stress disorders are transient states, although they may be lengthy. If no improvement is seen, the diagnosis should be reconsidered Burn-out syndrome perceived as a stress condition caused by long-term, frequent and intense emotional impact and social interactions in working with people with help, care and service is central. Once the syndrome has developed, it is characterized by emotional exhaustion, emotional distancing and reduced personal performance. The relationship between particular exposures in the workplace and this condition are poorly documented. There are many kasusistiske and theoretical studies, but no controlled studies in part due to diagnosis regard to its cause. Sweden has defined a fatigue syndrome regardless of the cause and found no evidence of correlation with psychosocial work conditions such as high demands and low decision http://www.sbu.se/upload/Publikationer/Content0/1/arbetsmiljo_depression/Arbetsmiljo_depression_fulltext.pdf ===Occurrence=== Over the past 10-15 years have seen a gradual increase in the number of work-related mental health problems that are reported to the National Board. In 2013 was supposed stress-related conditions about 25% of all reported work-related illnesses The reasons are not known. We do not know if there is a real increase in the incidence of work-related psychological difficulties or increased focus and interest in the media and among different actors contribute to uncovering previously hidden problems or 'relabeling' of conditions previously went by a different name The notified work-related mental health problems are a heterogeneous group of conditions, but most can probably best be classified as diagnostic adaptation or stress disorders Stress disorders are common in primary care and is associated with high sickness absence but details of incidence in the population and the proportion that have their roots in working conditions, lack of ===Risk Factors=== There is no international consensus on the definition and operationalization of psychosocial conditions in the workplace and beyond. Stress Theories based on job strain and effort-reward Imbalance models have gained much ground in research, but have only limited application in clinical practice A pragmatic and simple but undocumented classification based on the experience of the Danish occupational medical practice operates with three main types of work-related problems that can result in stress disorder, or perhaps in the most severe cases depressive disorder Events that can be ratified in time and place (accidents causing death or mutilation, violence, verbal threats, humiliation in the presence of others, repeated serious reprimands, unwanted sexual advances, demotion, disregarding, unwanted transfer or termination, critical media exposure). Employees of the prison service, police, defense and social care sector are like drivers and emergency workers particularly vulnerable to some of these issues, while others occur in any industry Claims quantitatively and / or qualitatively exceeds the personal resources and / or skills. The key is the scope of work (too many tasks) or character (tasks that can not be resolved). The imbalance between demands and resources may be due to mismanagement, lack or unrealistic planning, own requirements and expectations. These conditions typically occur in connection with executive functions, organizational changes and projects with deadlines Conflicts with interpersonal tension and emotional stress. The key is uncomfortable conversations, open hand, personal likes and dislikes and protracted emotionally challenging conflicts, whereas the tasks in itself is not the source of the problems. Long-term cooperation conflicts can be stressful for both employee satisfaction and productivity and are often accompanied by high absenteeism, which further compromises the work environment ===Clinic and diagnostics=== The condition develops gradually over weeks to months but may by sudden severe psycho-trauma occur faster The symptoms are nonspecific and include sadness, sleep disturbance, crying, feeling prohibitive care, poor self-esteem, fatigue, irritability, forgetfulness and difficulty concentrating Often, a specific event like a daunting workload or an unpleasant confrontation to mental breakdown with crying and sick leave There are no diagnostic paraclinical tests. Stress hormones, cardiovascular markers and blood pressure can not be used in clinical practice Psychological testing of cognitive function and personality tests and tests for depressive disorder may be helpful differential diagnostic The process can be long lasting (months / years), but are in most cases self-limiting. If the condition does not improve within one year's time, the other diagnosis considered ===Causation=== Evaluation of the causal relationship between psychosocial trauma and clinical condition based on history, possibly supplemented by information from work colleagues and / or relatives Are the psychological reactions in a reasonable onset plausible relation to the nature and intensity of the effects or situations the patient has been in? It's a judgment call, the result of more based on ===Consensus than on research evidence=== Cause assessment is complicated by the considerable variation in personal vulnerability or resilience. One factor that increases the vulnerability is neuroticism If, prior to the mode's start is an unremarkable work and private life without depression, anxiety or alcohol abuse or current problems in the private sphere, causing diagnosis and causality assessment rarely difficulties ===Workers' Compensation=== Stress disorders are not covered by occupational list and will usually not be recognized under workers' compensation law ===Vocational guidance and prevention=== It is crucial to support the patient in structuring and solving the problems that led up to the state It should earliest possible clarified whether to rely on the same or another workplace. Assessment of this issue is important to shorten the further process and reduce the risk of transition to long-term absence and in the worst case loss of associated labor It speaks for maintaining current employment, to a shift in itself is an extra burden in a situation where self-esteem is reduced. This is often possible in situations dominated by congestion where the problems can be addressed by appropriate organizational or resource initiatives At harassment and workplace conflict, changing jobs can be the best option Some studies show that supportive cognitive therapy has a beneficial effect on the course. This includes training in practical problem solving related to the specific work. Offers of this nature can be found at some of Occupational Medicine {{BookCat}} jml8wh4tnnod2xi6xn7ka7uieqvttsj Modern Greek/Lesson 01.2 0 305240 4675408 4423894 2026-10-10T02:02:01Z It-is-Truly-Meet 3624460 4675408 wikitext text/x-wiki This is the second section of lesson 1, on the modern Greek alphabet. The last section covered the 6 letters with the same form and pronunciation as Latin letters: Α, α - alpha, Ε, ε - epsilon, Ι, ι - iota, Κ, κ - kappa, Ο, ο - omicron, Τ, τ - tau This section covers the 12 letters with sounds used in the Latin alphabet, but with different written forms in Greek. {| class="wikitable" |- ! Letter !! English Name !! Greek Name !! Pronunciation |- | <big>Β β</big> || beta || βήτα || /v/ as in ''victory'' |- | <big>Ζ ζ</big> || zeta || ζήτα || /z/ as in ''Zeus'' |- | <big>Η η</big> || eta || ήτα || /i/ as in ''panth<u>e</u>ism'' |- | <big>Λ λ</big> || lambda || λάμδα || /l/ as in ''Lesbos'' |- | <big>Μ μ</big> || mu || μι || /m/ as in ''Mediterranean'' |- | <big>Ν ν</big> || nu || νι || /n/ as in ''nautical'' |- | <big>Π π</big> || pi || πι || /p/ as in ''paraphrase'' |- | <big>Ρ ρ</big> || rho || ρο || / r, ɾ / as in the Spanish word "pe'''r'''o or pe'''rr'''o"• |- | <big>Σ σ ς</big> || sigma || σίγμα || /s/ as in ''soap'' |- | <big>Υ υ</big> || upsilon || ύψιλον || /i/ as in ''th<u>e</u>ology'' |- | <big>Φ φ</big> || phi || φι || /f/ as in ''feta'' |- | <big>Ω ω</big> || omega || ωμέγα || /o/ as in ''sc<u>o</u>pe'' |} '''Notes''': * Β,β is always a strong “V” sound. There is ''no single letter'' in Greek with the ‘b’ sound. The sound “b”, in Greek, is written with the diphthong ( two letters pronounced with a unique sound) μπ, which will be covered in a later section. * Ρ,ρ makes the sound of a "tapped or trilled r". Both are made by vibrating your tongue against the roof of your mouth along the back of your front teeth. A "tapped r" is made by doing this only one time while a "trilled r" is made by holding the vibration. In Greek there isn't a difference if you make a trilled or tapped r", the speaker can do either. There are some people that can't perform this sound due to genetic factors. * The diphthong "ντ" sounds like /d/ or /nd/, such as in αντίο /aˈdio/ and Βυζάντιο /viˈzandio/. Read the following Greek words, which are the same or similar to common English words (ο, η, το, all mean “the”): η μαμά, η Κίνα, τρία, το άτομο, η μονοτονία, το μωβ, ο Νίκος, η πέννα, το φύλλο, ο καφέ, η ταβέρνα, το βιβλίο, η Ασία, ο παπά, το πάρκο, η Μαρία, η Άννα, ο Κώστας, ο Αλέκος, η Αμερική <div style="width:50%; margin:1em auto; text-align:center;"> '''More Examples''' {| class="collapsible" style="width:100%; border:1px solid #aaaaaa;" ! colspan="3" | Ν ν |- ! width="30%" | Greek || width="30%" | Transliteration || width="30%" | English |- | ΝΑΤΟ || NATO || North Atlantic<br>Treaty Organisation |- | Άννα || Ánna || Anna |- | Ιράν || Irán || Iran |- | Κίνα || Kína || China |- | Τίρανα || Tírana || Tirana |- | Ανόι || Anói || Hanoi |} {| class="collapsible" style="width:100%; border:1px solid #aaaaaa; border-top:0px;" ! colspan="3" | Μ μ |- ! width="30%" | Greek || width="30%" | Transliteration || width="30%" | English |- | μαμά || mamá || mom |- | Μαρόκο || Maróko || Morocco |- | Ομάν || Omán || Oman |- | Αμμάν || Ammán || Amman |- | Μαρκ || Mark || Mark |- | Μαρία || María || Μaria |- | Μόνικα || Mónika || Monika |- | αρμονία || armonía || harmony |- | άτομο || átomo || atom |- | μονοτονία || monotonía || monotony |} {| class="collapsible" style="width:100%; border:1px solid #aaaaaa; border-top:0px;" ! colspan="3" | Ε ε |- ! width="30%" | Greek || width="30%" | Transliteration || width="30%" | English |- | Αρμενία || Armenía || Armenia |- | Κορέα || Koréa || Korea |- | Κάρμεν || Kármen || Karmen |- | Κατερίνα || Katerína || Catherine |- | κέικ || kéik || cake |- | κρέμα || kréma || creme |- | κάμερα || kámera || camera |} {| class="collapsible" style="width:100%; border:1px solid #aaaaaa; border-top:0px;" ! colspan="3" | Λ λ |- ! width="30%" | Greek || width="30%" | Transliteration || width="30%" | English |- | αλκοόλ || alkoól || alcohol |- | κιλό || kiló || kilo (kilogram) |- | Ιταλία || Italía || Italy |- | καραμέλα || karaméla || caramel |} </div> {{Modern Greek}} eeoesxamgnufrjlz7r5uevnujflepd7 On 2D Inverse Problems/Radial 0 306315 4675355 3593917 2026-10-10T00:10:31Z DVD206 724793 oranges and apples 4675355 wikitext text/x-wiki The solution of the following layered radially symmetric inverse problems involves a number of <s>classical mathematical</s> tools & objects. === [[On 2D Inverse Problems/Fourier coordinates|Dissertation Four IV]] === === [[On 2D Inverse Problems/Stieltjes continued fractions|Stieltjes continued fractures]] === === [[On 2D Inverse Problems/Solution of the inverse problem|Solutions of the problem]] === === [[On 2D Inverse Problems/Cauchy matrices|Cauchy matrices]] === === Why It Matters for EIT === When reconstructing images of an object (like a cross-section of a human torso or a piece of fruit), simple concentric layers (the onion model) are rarely enough because internal conductivity varies angularly as well as radially. The block-circulant structure using the shift matrix $S$ handles that rotational symmetry, allowing you to decouple the angular modes (Fourier modes) and solve the inverse problem layer by layer or mode by mode.{{BookCat}} 1y9fzj86yap2ywgyx7fuh3zgctukp0t Exercise as it relates to Disease/Stairclimbing, is it enough for fitness and health in young, inactive women 2 0 364262 4675334 3000764 2026-10-09T23:28:24Z Omphalographer 3427146 Omphalographer moved page [[Wikibooks:Exercise as it relates to Disease/Stairclimbing, is it enough for fitness and health in young, inactive women?]] to [[Exercise as it relates to Disease/Stairclimbing, is it enough for fitness and health in young, inactive women 2]] without leaving a redirect: wrong namespace - another page with the same name exists, too 3000764 wikitext text/x-wiki <big>'''Stairclimbing, is it enough for fitness and health in young, inactive women?'''</big><big><br /> Big text</big> wrightnotes == '''What is the background to this research?''' == == Where is the research from? == This research1 was done by the University of Ulster and The Queen’s University of Belfast in Northern Ireland and was published in the British Journal of Medicine in 2005. == What kind of research was this? == The research was an exercise trial, with the participants randomly allocated into two groups – a control group that didn’t change their sedentary habits and the active group that did the stair climbing program. This type of study is called a ‘randomised’, ‘controlled’ exercise ‘trial’. == What did the research involve? == Fifteen young (average 18 years old) healthy but sedentary women were involved in the study. The eight women in the active group undertook an eight week stair climbing exercise program, five days per week. Each set of stair climbing was a flight of 199 steps (33m vertical displacement). They started with doing two sets per day and this was increased every two weeks (by one set). By week seven and eight they were doing five sets per day (995 steps and 164 m vertical). The stair climbing could be done any time during the day (with each set taking about 2 minutes), and each set of stair climbing was separated by at least one hour. They climbed at a “comfortable but brisk rate’’1 (90 steps per minute), and descended at whatever rate they wanted. The participant’s fitness and a number of health indicators (see table 1) were measure before and after the trial. And the results for the control and the active groups were compared to determine how effective the stair climbing was. == What were the basic results? == The stair climbing resulted in a significant increase in fitness and reduction in bad cholesterol. Fitness was measured using VO2 (max) which is the gold standard for measuring aerobic or cardiorespiratory fitness and this increased by 17%. The bad cholesterol, Low Density Lipoprotein (LDL-C) decrease by 7.7%. A number of other health indicator were measured, but there was no significant change in these. Table 1: Summary of results of stair climbing trial Parameter Pre exercise Post Exercise improvement Control Group Stair climbers Stair Climbers Statistically significant improvement VO2 (max) (ml/kg/min) 30 26.3 + 4.5 YES LDL–C (mmol/l) 2.19 2.15 - 0.17 YES Other parameters# NO {| class="wikitable" |- ! Header text !! Header text !! Header text !! Header text !! Header text |- | Example || Example || Example || Example || Example |- | Example || Example || Example || Example || Example |- | Example || Example || Example || Example || Example |- | Example || Example || Example || Example || Example |- | Example || Example || Example || Example || Example |} # Other parameters measured that did not change significantly with the stair climbing included: Body Mass Index (BMI), Total Cholesterol, Triglycerides (fats), and good cholesterol (High Density Lipoprotein). == How did the researchers interpret the results? == Sedentary young women can increase their cardiorespiratory fitness and reduce their cardiovascular risk factors by undertaking as little as 11 minutes of exercise in short sets of stair climbing throughout the day. The increase in fitness should lesson their risk or death 20%. == What conclusions should be taken away from this message? == Stair climbing is easy for most young women to include in their day whether they are at work, studying or on their days off. There is no cost and stairs are usually easily accessible. Stair climbing should be promoted as an effective and efficient way to exercise and achieve better cardiorespiratory fitness and decrease ones cardiovascular risk. == What are the implications of this research? == The research suggests that stair climbing was effective with only a small period of exercise because of the intensity of the exercise == References == 1 Boreham CAG, Kennedy RA, Murphy MH, Tully M Wallace WFM, Young I, Training effects of short bouts of stair climbing on cardiorespiratory fitness, blood lipids, and homocynsteine in sedentary young women. Br J Sports Med 2005; 39;509-593. {{BookCat}} ew8trsdnmcksod07omqqwynr4dq6geg Biblical Studies/Christianity/Justification, salvation and grace 0 368733 4675325 3351969 2026-10-09T21:40:33Z It-is-Truly-Meet 3624460 4675325 wikitext text/x-wiki [[File:The Ladder of Divine Ascent Monastery of St Catherine Sinai 12th century.jpg|thumb|We must all reach '''theosis'''; just as Adam and Eve were tempted, we also fall into '''temptation''', such as by pride, greed, lack of wisdom, passions, etc. Live, therefore, under the grace and will of God.]] Looking at salvation by grace through faith, which is not of our works but of God, who did it for us as a human race. Ephesians 2:8–9 adds on and says that none should boast because we do not save ourselves except for the grace of God. Our part is to use faith to take what is ours (salvation); we do not deserve to perish. The fire in hell has been made for the devil and his angels from the beginning of all wars that are heavenly. Then shall he say also unto them on the left hand, "Depart from me, ye cursed, into everlasting fire, prepared for the devil and his angels" (Matthew 25:41). Faith is our part to play believing in what you have never seen, but you are convicted of its existence. The world was created by faith by Him from whom all things began. {{BookCat}} az4hftnhswj7p5cte2phz75qtmdi2gi Creating Pixlr Editor/Getting into Pixlr Photo Editor 0 397194 4675317 3414734 2026-10-09T20:29:32Z Omphalographer 3427146 delete - misnamed duplicate 4675317 wikitext text/x-wiki {{delete|Unused duplicate of [[Pixlr Editor/Getting into Pixlr Photo Editor]]}} Getting into Pixlr Photo Editor Go to www.Pixlr.com on your internet browser. Click on the double arrow at the bottom of the screen. When starting at Pixlr.com you have two options for editing or creating pictures. Pixlr Editor is a full-featured photo editing suite. Pixlr Express is a streamlined editor with less features but is still useful for quick changes. Both are located at www.Pixlr.com. When you select the Editor you’ll get four options to start with. You can create a new image from scratch, open an image that is on your computer, import an image using a URL you have copied, or if you have an account with Pixlr you can open an image you have uploaded with them using their Library feature. To use the Library, you have to join Pixlr for free. To join, see “Sign up” under “File” in the menu bar. 1. CREATE A NEW IMAGE - When clicking on this, the New image window shown below appears. Name – Fill in the file name. When typing in the new name you have to use either the Backspace or Delete keys to remove “Untitled” from the Name block. Pixlr does not allow you to overwrite or highlight text or numbers in the blocks. Presets – Click on the arrow to the right for preset combinations of width and height in number of pixels. Width and Height – Click on the arrow to the right for a slider bar to increase or decrease the numbers of pixels across (width) and vertical (height). The maximum number of pixels is 4,000. Transparent – when clicked the new image has no color. When not clicked, the default new image is white. Using presets of less than 1,000 pixels in height and width gives you images that can easily be worked with but have less detail. Larger images in the 2,000 to 4,000 pixel range give you significantly more detail but can be difficult to work with since Pixlr is internet based and a slow connection can cause problems with the program being slow or locking up. Click on “OK” or press “Enter” to create the new image. 2. OPEN IMAGE FROM COMPUTER - When clicking on this, the new image window shown below appears. This is the standard window used to locate images/files on a Windows computer. Find the image you wish to edit and click on it. The number of horizontal and vertical pixels is based on what is in the original file. Notice the file formats that Pixlr can read. Click on the arrow to the right to see all available file formats. Click on “Open” or press “Enter”. 3. OPEN IMAGE FROM URL - When clicking on this, the Open image URL window shown below appears. (URL is the Uniform Resource Locator. More commonly known as web address) This allows you to copy an image from the internet. For example, I did a search for “about libraries”. I selected images and got the window below. I clicked on the image when my cursor turned into a finger. It said “View source image” which I clicked on. I got this window. I then copied the highlighted URL to the “Open image URL” window and pressed enter. The image was then loaded into PIXLR. 4. OPEN IMAGE FROM LIBRARY - In order to use the library, you need to sign up with PIXLR. When clicking on this, the Login window shown below appears. This is pretty much your standard Login screen. The email will appear. Enter your password and you will see the following window. Click on “OK”. Select/click on the folder which has the images you wish to process. “My Pics” was selected in the example below. You have to create a folder to put your images in. The 3 icons on the bottom allow you to rename, delete, and create folders. The x and “Cancel” closes the window. The double arrows to the right bottom allow to increase or decrease the size of the window. To get access to this storage, you need to select “Sign up to pixlr”. You will get the window below. This is pretty much a standard “Sign up” window requesting your name, email, and a password. It is free up to a certain amount of space. Then I assume Pixlr will ask if you want to buy more space or you will have to delete some images you have stored on here. I say it is most useful for saving images you are working on or images that you wish to access from more than one computer.   {{BookCat}} h58qxxxir8x4zqbeb1m5ln0t38bn7w9 Create Vampires 0 415358 4675345 4670483 2026-10-09T23:56:36Z 3MMPEYTON 3393808 /* All About Vampires */ 4675345 wikitext text/x-wiki <br>''Create Vampires'' is a book intended as a guide to avoid literary pitfalls, and as a nonfiction resource for those fascinated by vampires. This book examines vampires through a cultural, literary, and historical lens to help writers create authentic vampire narratives. == Vampires ''Of The Imagination'' == Although vampires are creatures of folklore, monsters from the ''afterlife'' that are sometimes called the "undead," vampires are uniquely different from ghost, those lingering spirits who refuse to die. Although vampires, by definition, are animated corpses, most vampires ''of the imagination'' must feed on human blood in order to continue their earthly existence. This unique quality makes vampires a popular and original type of fiction, slightly different from other creatures found in folklore. Because of their unique characteristics, vampires have become massively popular in popular culture and in literature. We hope this book will clear up many misconceptions, and common misunderstandings associated with the "undead," especially a common confusion ''about'' the actual people who did inspire vampire folklore, verses the evolved horror creations called vampires of the imagination. '''Create Vampires''' aims to treat vampires as a cultural, literary and historical construct. Perhaps Create Vampires should be considered a friendly craft-manual for building a believable vampire concept, available across different medias. == Preface: The Factual Roots Of Vampires == <br /> {| class="wikitable" |- ! Factual Basis For Vampires? |- | [[/Factual Basis For Vampires/]] is a special page intended to offer information about the factual bases for vampires. |} <br> '''What Type Of Book Is This?''' <br /> {| class="wikitable" |- ! '''Create Vampires''' is one of many free Wikibooks |- | Wikibooks.org is a part of the Wikimedia project. Writers and contributors are volunteers who cull through websites, <BR> use online search engines to find facts, and volunteer to work on special projects that are open to the public. <BR> Volunteers are people who write, edit, and help people understand the powerful tools at their fingertips. |} {| class="wikitable" |- ! Edvard Munch - Love and Pain / Vampire (1895) || "Les Vampires" |- | [[File:Edvard Munch - Vampire (1895) - Google Art Project.jpg|thumb|Edvard Munch - Vampire (1895) - Google Art Project]] || [[File:Les vampires.jpg|thumb|Les vampires]] |} == All About Vampires == '''Not All Links Work''' {| class="wikitable" |- ! Table Of Content |- | Introduction: [[Create Vampires/Original Fictional Creations|"Original Fictional Creations"]] |- | Proper Spelling: [[Create Vampires/Vam-Pai-Yer|"How do you spell vampire?]] |- | [[Create Vampires/Alternative Spelling| "Alternative Spellings"]] |- | What ''Is'' A Vampire? [[Create Vampires /ADefinitionForVampire|Create Vampires /ADefinitionForVampire - Wikibooks, open books for an open world]] |- | Why Create A Vampire? : [[Create_Vampires/Why_Create_Vampires]] |- |- '''Cultural Origins''' |- |'''Cultural Vampire Construct''' |- |What Is A Cultural Construct? - [[Create Vampires/Cultural Construct|Create Vampires/Cultural Construct - Wikibooks, open books for an open world]] |- | '''Vampire Folklore: [[Create Vampires/HistoricalAndCross-CulturalOriginsOfVampireArchetypes]]''' |- | African Folklore: [[Create Vampires/AfricanFolklore]] |- | Latin-American Folklore: [[Create Vampires/LatinAmericanFolklore|Create Vampires/LatinAmericanFolklore - Wikibooks, open books for an open world]] |- | Asian Folklore: [[Create Vampires/Asian Folklore#Asian Folklore|Create Vampires/Asian Folklore - Wikibooks, open books for an open world]] |- |Eastern Folklore: [[Create Vampires/Eastern European Folklore| "Eastern European Folklore"]] |- | Eastern Folklore: [[Create_Vampires/Dracula_Behind_Vlad-The_Impaler]] |- |[[Create Vampires/HowCulturalTraditionsShapedVampireTraits|Create Vampires/HowCulturalTraditionsShapedVampireTraits - Wikibooks, open books for an open world]] |- |- '''Literary Construct''' |- |'''Literary Construct''' |- |What Is A Literary Trope? [[Create Vampires/What Is A Literary Trope]] |- | Literary And Media Pitfalls To Avoid: [[Create Vampires/Examples Of Literary Pitfalls|Create Vampires/Examples Of Literary Pitfalls - Wikibooks, open books for an open world]] |- | Authors Who Created Influential Vampires Of The Imagination: [[Create Vampires/Authors Who Created Vampire Tropes]] |- | [[Create Vampires/writers who did not create vampires| "Writers Who Did Not Create Vampires"]] |- | Popular Culture: [[Create Vampires/Vampires In Popular Culture|Create Vampires/Vampires In Popular Culture - Wikibooks, open books for an open world]] |- | Vampire Memes? [[Create Vampires/Vampires Memes|Create Vampires/Vampires Memes - Wikibooks, open books for an open world]] |- |'''Are Vampires Real? Historical Construct''' [[Create Vampires/What Is A Historical Construct|Create Vampires/What Is A Historical Construct - Wikibooks, open books]] |- |[[Create Vampires/Factual Basis For Vampires]] |- |History of Vampires: [[Create Vampires/Vampire History]] |- | [[Create Vampires/Scientific Evidence| "Science and Vampirism"]] |- | For Vampires: [[Create Vampires/Scientific Evidence For Vampires| "Scientific Evidence For Vampires"]] |- | Against Vampires: [[Create Vampires/Scientific Evidence Against Vampirism| "Scientific Evidence Against Vampires"]] |- | Writing Vampire Prose: [[Create Vampires/Writing Vampire Prose| "Writing Vampire Prose"]] |- |- Are Vampires Real? Historical Construct |- | [[Create Vampires/Ethics Of Creating Vampire Lore|Create Vampires/Ethics Of Creating Vampire Lore - Wikibooks, open books for an open world]] |- |Public Domain Primary Sources: [[Create Vampires/PublicDomainPrimarySources]] |- | Information for Spanish speakers: [[:es:Vampiro|"Vampiro"]] <br /> |- | Closing: [[Create Vampires /All About Vampires#All About Vampires|Create Vampires /All About Vampires - Wikibooks, open books for an open world]] |- | [[:Category:Book:Create Vampires|List of All Pages in This Book]] |} == Reference == {{WikipediaCredit}} <br /> {{Shelves|Literature|Paranormal|Cultural anthropology}} {{Status|75%}} 971ihq7bepr482ltyp8wvdmmn9vhiu5 4675353 4675345 2026-10-10T00:06:20Z 3MMPEYTON 3393808 Added a new link 4675353 wikitext text/x-wiki <br>''Create Vampires'' is a book intended as a guide to avoid literary pitfalls, and as a nonfiction resource for those fascinated by vampires. This book examines vampires through a cultural, literary, and historical lens to help writers create authentic vampire narratives. == Vampires ''Of The Imagination'' == Although vampires are creatures of folklore, monsters from the ''afterlife'' that are sometimes called the "undead," vampires are uniquely different from ghost, those lingering spirits who refuse to die. Although vampires, by definition, are animated corpses, most vampires ''of the imagination'' must feed on human blood in order to continue their earthly existence. This unique quality makes vampires a popular and original type of fiction, slightly different from other creatures found in folklore. Because of their unique characteristics, vampires have become massively popular in popular culture and in literature. We hope this book will clear up many misconceptions, and common misunderstandings associated with the "undead," especially a common confusion ''about'' the actual people who did inspire vampire folklore, verses the evolved horror creations called vampires of the imagination. '''Create Vampires''' aims to treat vampires as a cultural, literary and historical construct. Perhaps Create Vampires should be considered a friendly craft-manual for building a believable vampire concept, available across different medias. == Preface: The Factual Roots Of Vampires == <br /> {| class="wikitable" |- ! Factual Basis For Vampires? |- | [[/Factual Basis For Vampires/]] is a special page intended to offer information about the factual bases for vampires. |} <br> '''What Type Of Book Is This?''' <br /> {| class="wikitable" |- ! '''Create Vampires''' is one of many free Wikibooks |- | Wikibooks.org is a part of the Wikimedia project. Writers and contributors are volunteers who cull through websites, <BR> use online search engines to find facts, and volunteer to work on special projects that are open to the public. <BR> Volunteers are people who write, edit, and help people understand the powerful tools at their fingertips. |} {| class="wikitable" |- ! Edvard Munch - Love and Pain / Vampire (1895) || "Les Vampires" |- | [[File:Edvard Munch - Vampire (1895) - Google Art Project.jpg|thumb|Edvard Munch - Vampire (1895) - Google Art Project]] || [[File:Les vampires.jpg|thumb|Les vampires]] |} == All About Vampires == '''Not All Links Work''' {| class="wikitable" |- ! Table Of Content |- | Introduction: [[Create Vampires/Original Fictional Creations|"Original Fictional Creations"]] |- | Proper Spelling: [[Create Vampires/Vam-Pai-Yer|"How do you spell vampire?]] |- | [[Create Vampires/Alternative Spelling| "Alternative Spellings"]] |- | What ''Is'' A Vampire? [[Create Vampires/A Definition For Vampire|Create Vampires /A Definition For Vampire - Wikibooks, open books for an open world]] |- | Why Create A Vampire? : [[Create_Vampires/Why_Create_Vampires]] |- |- '''Cultural Origins''' |- |'''Cultural Vampire Construct''' |- |What Is A Cultural Construct? - [[Create Vampires/Cultural Construct|Create Vampires/Cultural Construct - Wikibooks, open books for an open world]] |- | '''Vampire Folklore: [[Create Vampires/HistoricalAndCross-CulturalOriginsOfVampireArchetypes]]''' |- | African Folklore: [[Create Vampires/AfricanFolklore]] |- | Latin-American Folklore: [[Create Vampires/LatinAmericanFolklore|Create Vampires/LatinAmericanFolklore - Wikibooks, open books for an open world]] |- | Asian Folklore: [[Create Vampires/Asian Folklore#Asian Folklore|Create Vampires/Asian Folklore - Wikibooks, open books for an open world]] |- |Eastern Folklore: [[Create Vampires/Eastern European Folklore| "Eastern European Folklore"]] |- | Eastern Folklore: [[Create_Vampires/Dracula_Behind_Vlad-The_Impaler]] |- |[[Create Vampires/HowCulturalTraditionsShapedVampireTraits|Create Vampires/HowCulturalTraditionsShapedVampireTraits - Wikibooks, open books for an open world]] |- |- '''Literary Construct''' |- |'''Literary Construct''' |- |What Is A Literary Trope? [[Create Vampires/What Is A Literary Trope]] |- | Literary And Media Pitfalls To Avoid: [[Create Vampires/Examples Of Literary Pitfalls|Create Vampires/Examples Of Literary Pitfalls - Wikibooks, open books for an open world]] |- | Authors Who Created Influential Vampires Of The Imagination: [[Create Vampires/Authors Who Created Vampire Tropes]] |- | [[Create Vampires/writers who did not create vampires| "Writers Who Did Not Create Vampires"]] |- | Popular Culture: [[Create Vampires/Vampires In Popular Culture|Create Vampires/Vampires In Popular Culture - Wikibooks, open books for an open world]] |- | Vampire Memes? [[Create Vampires/Vampires Memes|Create Vampires/Vampires Memes - Wikibooks, open books for an open world]] |- |'''Are Vampires Real? Historical Construct''' [[Create Vampires/What Is A Historical Construct|Create Vampires/What Is A Historical Construct - Wikibooks, open books]] |- |[[Create Vampires/Factual Basis For Vampires]] |- |History of Vampires: [[Create Vampires/Vampire History]] |- | [[Create Vampires/Scientific Evidence| "Science and Vampirism"]] |- | For Vampires: [[Create Vampires/Scientific Evidence For Vampires| "Scientific Evidence For Vampires"]] |- | Against Vampires: [[Create Vampires/Scientific Evidence Against Vampirism| "Scientific Evidence Against Vampires"]] |- | Writing Vampire Prose: [[Create Vampires/Writing Vampire Prose| "Writing Vampire Prose"]] |- |- Are Vampires Real? Historical Construct |- | [[Create Vampires/Ethics Of Creating Vampire Lore|Create Vampires/Ethics Of Creating Vampire Lore - Wikibooks, open books for an open world]] |- |Public Domain Primary Sources: [[Create Vampires/PublicDomainPrimarySources]] |- | Information for Spanish speakers: [[:es:Vampiro|"Vampiro"]] <br /> |- | Closing: [[Create Vampires /All About Vampires#All About Vampires|Create Vampires /All About Vampires - Wikibooks, open books for an open world]] |- | [[:Category:Book:Create Vampires|List of All Pages in This Book]] |} == Reference == {{WikipediaCredit}} <br /> {{Shelves|Literature|Paranormal|Cultural anthropology}} {{Status|75%}} a1mi2imk3x5aavq1rcwp1bn1gq87sju 4675405 4675353 2026-10-10T01:20:59Z 3MMPEYTON 3393808 Added a new link 4675405 wikitext text/x-wiki <br>''Create Vampires'' is a book intended as a guide to avoid literary pitfalls, and as a nonfiction resource for those fascinated by vampires. This book examines vampires through a cultural, literary, and historical lens to help writers create authentic vampire narratives. == Vampires ''Of The Imagination'' == Although vampires are creatures of folklore, monsters from the ''afterlife'' that are sometimes called the "undead," vampires are uniquely different from ghost, those lingering spirits who refuse to die. Although vampires, by definition, are animated corpses, most vampires ''of the imagination'' must feed on human blood in order to continue their earthly existence. This unique quality makes vampires a popular and original type of fiction, slightly different from other creatures found in folklore. Because of their unique characteristics, vampires have become massively popular in popular culture and in literature. We hope this book will clear up many misconceptions, and common misunderstandings associated with the "undead," especially a common confusion ''about'' the actual people who did inspire vampire folklore, verses the evolved horror creations called vampires of the imagination. '''Create Vampires''' aims to treat vampires as a cultural, literary and historical construct. Perhaps Create Vampires should be considered a friendly craft-manual for building a believable vampire concept, available across different medias. == Preface: The Factual Roots Of Vampires == <br /> {| class="wikitable" |- ! Factual Basis For Vampires? |- | [[/Factual Basis For Vampires/]] is a special page intended to offer information about the factual bases for vampires. |} <br> '''What Type Of Book Is This?''' <br /> {| class="wikitable" |- ! '''Create Vampires''' is one of many free Wikibooks |- | Wikibooks.org is a part of the Wikimedia project. Writers and contributors are volunteers who cull through websites, <BR> use online search engines to find facts, and volunteer to work on special projects that are open to the public. <BR> Volunteers are people who write, edit, and help people understand the powerful tools at their fingertips. |} {| class="wikitable" |- ! Edvard Munch - Love and Pain / Vampire (1895) || "Les Vampires" |- | [[File:Edvard Munch - Vampire (1895) - Google Art Project.jpg|thumb|Edvard Munch - Vampire (1895) - Google Art Project]] || [[File:Les vampires.jpg|thumb|Les vampires]] |} == All About Vampires == '''Not All Links Work''' {| class="wikitable" |- ! Table Of Content |- | Introduction: [[Create Vampires/Original Fictional Creations|"Original Fictional Creations"]] |- | Proper Spelling: [[Create Vampires/Vam-Pai-Yer|"How do you spell vampire?]] |- | [[Create Vampires/Alternative Spelling| "Alternative Spellings"]] |- | What ''Is'' A Vampire? [[Create Vampires/A Definition For Vampire|Create Vampires /A Definition For Vampire - Wikibooks, open books for an open world]] |- | Why Create A Vampire? : [[Create_Vampires/Why_Create_Vampires]] |- |- '''Cultural Origins''' |- |'''Cultural Vampire Construct''' |- |What Is A Cultural Construct? - [[Create Vampires/Cultural Construct|Create Vampires/Cultural Construct - Wikibooks, open books for an open world]] |- | '''Vampire Folklore: [[Create Vampires/HistoricalAndCross-CulturalOriginsOfVampireArchetypes]]''' |- | African Folklore: [[Create Vampires/AfricanFolklore]] |- | Latin-American Folklore: [[Create Vampires/LatinAmericanFolklore|Create Vampires/LatinAmericanFolklore - Wikibooks, open books for an open world]] |- | Asian Folklore: [[Create Vampires/Asian Folklore#Asian Folklore|Create Vampires/Asian Folklore - Wikibooks, open books for an open world]] |- |Eastern Folklore: [[Create Vampires/Eastern European Folklore| "Eastern European Folklore"]] |- | Eastern Folklore: [[Create_Vampires/Dracula_Behind_Vlad-The_Impaler]] |- |[[Create Vampires/HowCulturalTraditionsShapedVampireTraits|Create Vampires/HowCulturalTraditionsShapedVampireTraits - Wikibooks, open books for an open world]] |- |- '''Literary Construct''' |- |'''Literary Construct''' |- |What Is A Literary Trope? [[Create Vampires/What Is A Literary Trope]] |- | Literary And Media Pitfalls To Avoid: [[Create Vampires/Examples Of Literary Pitfalls|Create Vampires/Examples Of Literary Pitfalls - Wikibooks, open books for an open world]] |- | Authors Who Created Influential Vampires Of The Imagination: [[Create Vampires/Authors Who Created Vampire Tropes]] |- | [[Create Vampires/writers who did not create vampires| "Writers Who Did Not Create Vampires"]] |- | Popular Culture: [[Create Vampires/Vampires In Popular Culture|Create Vampires/Vampires In Popular Culture - Wikibooks, open books for an open world]] |- | Vampire Memes? [[Create Vampires/Vampires Memes|Create Vampires/Vampires Memes - Wikibooks, open books for an open world]] |- |'''Are Vampires Real? Historical Construct''' [[Create Vampires/What Is A Historical Construct|Create Vampires/What Is A Historical Construct - Wikibooks, open books]] |- |[[Create Vampires/Factual Basis For Vampires]] |- |History of Vampires: [[Create Vampires/Vampire History]] |- | [[Create Vampires/Scientific Evidence| "Science and Vampirism"]] |- | For Vampires: [[Create Vampires/Scientific Evidence For Vampires| "Scientific Evidence For Vampires"]] |- | Against Vampires: [[Create Vampires/Scientific Evidence Against Vampirism| "Scientific Evidence Against Vampires"]] |- | Writing Vampire Prose: [[Create Vampires/Writing Vampire Prose| "Writing Vampire Prose"]] |- |- Are Vampires Real? Historical Construct |- | [[Create Vampires/Ethics Of Creating Vampire Lore|Create Vampires/Ethics Of Creating Vampire Lore - Wikibooks, open books for an open world]] |- |Public Domain Primary Sources: [[Create Vampires/PublicDomainPrimarySources]] |- | Information for Spanish speakers: [[:es:Vampiro|"Vampiro"]] <br /> |- | Closing: [[Create Vampires/All About Vampires|Create Vampires /All About Vampires - Wikibooks, open books for an open world]] |- | [[:Category:Book:Create Vampires|List of All Pages in This Book]] |} == Reference == {{WikipediaCredit}} <br /> {{Shelves|Literature|Paranormal|Cultural anthropology}} {{Status|75%}} ak1e6ujym4iajtw7km66j81rgoc41fs Create Vampires/Factual Basis For Vampires 0 415670 4675398 4636081 2026-10-10T01:10:44Z 3MMPEYTON 3393808 4675398 wikitext text/x-wiki == Create Vampires: Factual Basis For Vampires == People have offered factual explanations for the "un-dead," probably the reasons for vampires found mostly in folklore. <br> Folk-stories were based on people buried alive, <u>''then mistaken''</u> for un-dead creatures when they clawed and crawled their way from their premature graves. <br> The appearance of actual people, mistaken for dead, crawling from graves, started warnings that evolved into what we call the vampire stories and folklores that influence our modern popular culture. <br> LINK: [[Create Vampires/Vampire History]] <br> LINK: [[Create Vampires/Original Fictional Creations]]<br> <br> LINK:[[Create_Vampires/Scientific_Evidence]] <br> <br> LINK:[[Create_Vampires/Scientific_Evidence_For_Vampires]] <br> <br> <noinclude>{{Chapter navigation with TOC||Vampires_History|TOC mini}}</noinclude> <br> {{BookCat}} mnvdic75z94ksfxn4227uiqyr9sj66e 4675399 4675398 2026-10-10T01:11:12Z 3MMPEYTON 3393808 4675399 wikitext text/x-wiki == Create Vampires: Factual Basis For Vampires == People have offered factual explanations for the "un-dead," probably the reasons for vampires found mostly in folklore. <br> Folk-stories were based on people buried alive, <u>''then mistaken''</u> for un-dead creatures when they clawed and crawled their way from their premature graves. <br> The appearance of actual people, mistaken for dead, crawling from graves, started warnings that evolved into what we call the vampire stories and folklores that influence our modern popular culture. <br> LINK: [[Create Vampires/Vampire History]] <br> LINK: [[Create Vampires/Original Fictional Creations]]<br> <br> LINK:[[Create_Vampires/Scientific_Evidence]] <br> <br> LINK:[[Create_Vampires/Scientific_Evidence_For_Vampires]] <br> <br> <noinclude>{{Chapter navigation with TOC||Vampire_History|TOC mini}}</noinclude> <br> {{BookCat}} pjwb9gsxnwxxs8q75brrkwz0jlmbj61 Create Vampires/Scientific Evidence Against Vampirism 0 415759 4675402 4670447 2026-10-10T01:16:04Z 3MMPEYTON 3393808 4675402 wikitext text/x-wiki == Scientific Evidence Against Vampirism == <br> '''''Medicalization of a Myth''''' <br> The authors Winkler and Anderson, responding to a proposal suggested by David H. Dolphin, linking a disease named porphyria with vampirism the "medicalization of a myth." [https://www.atlasobscura.com/articles/myth-medical-explanation-vampirism-porphyria] === The Origin Of A Myth, Or A New Medical Condition? === David Dolphin, sharing his original hypothesis, speculated in the mid-1980s that a disease known as porphyria maybe the root cause of vampirism and werewolf myths. David Dolphin's proposal eventually sparked criticism and debate. A 1995 article in ''Postgraduate Medical Journal'' questioned the evidence Dolphin presented, while other observers questioned the quality of the information he shared on television, and at a talk conference. '''The "Vampire Disease"''' <br> It seems that the history of understanding, and classifying "vampirism" is long and lengthy. <br> According to Kennedy, a major contributor to the article: ''The Myth of a Medical Explanation for Vampirism'', the myth of vampirism has evolved, mutated, changed shape, yet stuck around "for millennia." <br> <br> Porphyria has been called the "vampire disease" because of its similar nature to people considered vampires...at least that is the story some people claim. <br> Today's popular vampire mythology draws on Slavic folklore, and 18th century stories. These stories commonly involved a recently <u>declared</u> deceased family member, who, upon exhumation, meaning when un-buried, had little signs of decomposer, and appeared to be "full of fresh blood." This may be a explanation for why people, called vampires, are also called "un-dead." <br> <br> The people of 19th century New England continued this train-of-thought, and according to ''The Myth Of A Medical Explanation For Vampirism,''[https://www.atlasobscura.com/articles/myth-medical-explanation-vampirism-porphyria] this type-of-thought influenced ''Carmilla'' [1871] and ''Dracula,'' [1897] novels featuring vampires that were "mobile," more underground "un-dead." <br> <br> Behaviors associated with vampirism, such as hallucinating tendencies, have been linked with similar diseases such as rabies. <br> Many critics of David H. Dolphin's hypothesis, objected to the practice of connecting vampiric characteristics to diseases that are known and understood. The ''New York Times'' reported David H. Dolphin's hypothesis, noting similar symptoms porphyria shares with vampirism, such as a sensitivity to sunlight, a possible lack of a needed molecule in their blood, and sensitivity to garlic. These similar symptoms were of such importance to Dolphin, that he mentioned these symptom similarities in a 1982 speech to the Royal Society, and on a 1984 TV appearance on NBC. <br> <br> Scientist, and Medical Professionals critical of David Dolphin's links, may have thought Dolphin was trying to define vampirism as a new disease! In a move to disassociate porphyria with vampirism, Mary G. Winkler and Anderson, asked the general public to stop building new myths, and to focus instead on more humane treatments for patients with porphyria. “There is a necessity for scientists and the media to set aside cynical assumptions about their audiences and consider first and foremost their responsibilities to the communities of patients who are affected by diseases and by stories about their diseases,” both authors wrote. They also wrote about patients who became depressed by reports in the media linking porphyria, their illness, with vampirism. <br> In general, sympathy does extent to people in need of better treatment for their disease, yet porphyria is also known as the "vampire disease." <br> === What evidence do Scientist and Medical Professionals have against vampirism? === Members of the ''modern'' medical profession publicly stated that vampire myths probably derive from misunderstandings concerning death (and decomposition). <br> Ironically, if vampire myths contain some truthful parts, it is the people with family members who have been called vampires <u>who should claim</u> that modern medical Doctors do not seem to understand death, or simple techniques needed to ensure that a living person is not buried alive against their will. <br> <br> Link: https://en.wikibooks.org/wiki/Create_Vampires/Scientific_Evidence_For_Vampires <br> <br> https://en.wikibooks.org/wiki/Create_Vampires/Ethics_Of_Creating_Vampire_Lore <br> <br> <noinclude>{{Chapter navigation with TOC||Ethics_Of_Creating_Vampire_Lore|TOC mini}}</noinclude> <br> {{BookCat}} 6mbi3tjujp7rxoxo9aheik4wcg96f2o Create Vampires/Scientific Evidence 0 415766 4675401 4670339 2026-10-10T01:14:17Z 3MMPEYTON 3393808 4675401 wikitext text/x-wiki == Science: == What is Science? <br> Science by definition is "the intellectual and practical activity encompassing the systematic study of the structure and behaviour of the physical and natural world through observation and experiment." This complex definition is "Powered by Oxford Dictionaries." <br> <br> Where in the world of science and technology, does vampirism fit? <br> <br> From the Wikijournal of Medicine, we learn that "Medicine is the science and practice of the diagnosis, treatment, and prevention of disease. Medicine encompasses a variety of health care practices evolved to maintain and restore health by the prevention and treatment of illness." [https://en.wikiversity.org/wiki/Portal:Medicine] <br> == Science, Vampaiyerism, and Vampirism == '''Is There Any Factual Evidence for The Existence of Vampires?''' <br> Vampaiyerism is closely associated with vampirism, meaning activities and events closely linked with vampire of folklore, many fictitious vampire creations told about in stories, were characters reflecting actual people who were often drugged, maybe involved with drugs, often reported as dead, may be found buried, maybe associated with fraud, drug abuse, witchcraft, and even "dark magic." <br> Vampaiyerism and vampirism is seldom associated with Science, yet at times, Science and vampaiyerism, and by close association, vampirism, is connected in public broadcasts, and in the news. <br> <br> From Wikipedia: <br> In modern times, the vampire is generally held to be a fictitious entity, although belief in similar vampiric creatures such as the chupacabra still persists in some cultures. Early folk belief in vampires has sometimes been ascribed to the ignorance of the body's process of decomposition after death and how people in pre-industrial societies tried to rationalize this, creating the figure of the vampire to explain the mysteries of death. Porphyria was linked with legends of vampirism in 1985 and received much media exposure, but has since been largely discredited. [https://en.wikipedia.org/wiki/Vampire] <br> <br> Link: https://en.wikibooks.org/wiki/Create_Vampires/Scientific_Evidence_Against_Vampirism <br> <br> <noinclude>{{Chapter navigation with TOC||Scientific_Evidence_Against_Vampirism|TOC mini}}</noinclude> <br> {{BookCat}} 8e4jrscv5idwdy8k1rzlvrad7lh5svz Create Vampires/writers who did not create vampires 0 415777 4675392 4670365 2026-10-10T01:03:02Z 3MMPEYTON 3393808 4675392 wikitext text/x-wiki == Writers Who Did Not Create Vampires == <br> '''The Vampire''' is a poem by Rudyard Kipling (1897) <br> <br> Kipling's poem is not about a supernatural vampire. It ''is'' about a woman who drains a man's essence, and dignity. <br> She is a ''<u>metaphorical</u>'' vampire.<br> <br> Why is this poem important? <br> Because it shows how the myth of the vampire transformed from folklore to metaphor. She is compared to a vampire (a metaphor) Link: [[Create Vampires/Authors Who Created Vampire Tropes|Create Vampires/Authors Who Created Vampire Tropes - Wikibooks, open books for an open world]] === Reference: === {| class="wikitable" |- ! Writers Who Did Not Create Vampires |- | "The Vampire" is a poem by Rudyard Kipling (1897)<br /> |- | https://en.wikisource.org/wiki/The_Vampire_(Kipling) <br /> |} <br /> <br> <noinclude>{{Chapter navigation with TOC||Vampires_In_Popular_Culture|TOC mini}}</noinclude> <br> {{BookCat}} exru6146n68hy666za1gdmv49besizk Create Vampires/Eastern European Folklore 0 415796 4675381 4640435 2026-10-10T00:49:30Z 3MMPEYTON 3393808 4675381 wikitext text/x-wiki == Eastern European Vampires and Folk Beliefs == According to [https://en.wikipedia.org/wiki/Vampire "Wikipedia:Vampire"][1] <br> <br> The notion of vampirism has existed for millennia. Cultures such as the Mesopotamians, Hebrews, Ancient Greeks, Manipuri and Romans had tales of demons and spirits which are considered precursors to modern vampires. Despite the occurrence of vampiric creatures in these ancient civilizations, the folklore for the entity known today as the vampire originates almost exclusively from early 18th-century southeastern Europe,[2] when verbal traditions of many ethnic groups of the region were recorded and published. In most cases, vampires are revenants of evil beings, suicide victims, or witches, but they can also be created by a malevolent spirit possessing a corpse or by being bitten by a vampire. Belief in such legends became so pervasive that in some areas it caused mass hysteria and even public executions of people believed to be vampires.[3] <br> <br> {| class="wikitable" |- ! References: |- | 1. Wikipedia contributors. "Vampire." Wikipedia, The Free Encyclopedia. Wikipedia, The Free Encyclopedia, 27 May. 2020. Web. 31 May. 2020. |- | 2. Silver, A., & Ursini, J. (1997). The Vampire Film: From Nosferatu to Interview with the Vampire (pp. 22–23). New York: Limelight Editions |- | 3. Cohen, pp. 271–74. |} == Eastern European Folklore == <br> <br> {| class="wikitable" |- | [[File:Русские народные сказки Билибин.jpg|thumb|Русские народные сказки Билибин]] || [[File:Grandmother and the granddaughter.jpg|thumb|Grandmother and the granddaughter]] |} {| class="wikitable" |- | Map of Europe in 1923 || Map of Eastern Europe |- | [[File:Europe in 1923.jpg|thumb|Europe in 1923]] || [[File:1513 map of Poland, Baltic, Hungary and Eastern Europe by Martin Waldseemüller.jpg|thumb|1513 map of Poland, Baltic, Hungary and Eastern Europe by Martin Waldseemüller]] |} <br> Although stories about ghosts and demons may have haunted ancient society, stories of a uniquely original creature of the imagination began to be told, originating around parts of Eastern Europe. According to Wikipedia, "The Persians were one of the first civilizations to have tales of blood-drinking demons: creatures attempting to drink blood from men were depicted on excavated pottery shards." [4.1] <br> '''<u>Section From Wikipedia</u>: Eighteenth Century Vampire Controversy''' During the 18th century, there was a frenzy of vampire sightings in Eastern Europe, with frequent stakings and grave diggings to identify and kill the potential revenants. Even government officials engaged in the hunting and staking of vampires.[4.2] Despite being called the Age of Enlightenment, during which most folkloric legends were quelled, the belief in vampires increased dramatically, resulting in a mass hysteria throughout most of Europe.[5] The panic began with an outbreak of alleged vampire attacks in East Prussia in 1721 and in the Habsburg Monarchy from 1725 to 1734, which spread to other localities. Two infamous vampire cases, the first to be officially recorded, involved the corpses of Petar Blagojevich and Miloš Čečar from Serbia. Blagojevich was reported to have died at the age of 62, but allegedly returned after his death asking his son for food. When the son refused, he was found dead the following day. Blagojevich supposedly returned and attacked some neighbors who died from loss of blood.[4.2] In the second case, Miloš, an ex-soldier-turned-farmer who allegedly was attacked by a vampire years before, died while haying. After his death, people began to die in the surrounding area and it was widely believed that Miloš had returned to prey on the neighbors.[6][7] Another infamous Serbian vampire legend recounts the story of a certain Sava Savanović, who lives in a watermill and kills and drinks blood from the millers. The character was later used in a story written by Serbian writer Milovan Glišić and in the Yugoslav 1973 horror film Leptirica inspired by the story.[8] The two incidents were well-documented. Government officials examined the bodies, wrote case reports, and published books throughout Europe.[7] The hysteria, commonly referred to as the "18th-Century Vampire Controversy", raged for a generation. The problem was exacerbated by rural epidemics of so-called vampire attacks, undoubtedly caused by the higher amount of superstition that was present in village communities, with locals digging up bodies and in some cases, staking them.[9] <br><br> {| class="wikitable" |- ! Wikipedia: Eighteenth century vampire controversy |- |4.1 Marigny, Jean (1993). Sang pour Sang, Le Reveil des vampires, Gallimard, coll. Gallimard. p. 14 {{ISBN|978-2-07-053203-2}} |- | 4.2 Barber, pp. 5–9. |- | 5. Cohen, pp. 271–74. |- | 6. Jøn, A. Asbjørn (2003). "Vampire Evolution". METAphor (3): 20. Retrieved 20 November 2015. |- | 7. Barber, pp. 15–21. |- | 8. Ruthven, Suzanne (2014). Charnel House Blues: The Vampyre's Tale. John Hunt Publishing. {{#isbn:978-1-78279-415-8}}. |- | 9. Hoyt, pp. 101–06 |} <br> <br> <u> '''European Vampire-Like "Beings"''' </u> '''''Mullo'' -- Romani Vampire''' Appearance: They appear human, were white clothes, and have hair that grew to their feet. They have a physical oddity. Nature: They have returned from the dead. They are malicious. Vampiric Activity: They attack by strangling, or by sucking the blood out of their victims. Weakness: A Dhampir is hired to detect the vampire. To kill a mullo, drive steel or iron needles into the corpse's heart, place steel bits in the mouth, ears, over the eyes, and between the fingers at the burial. Hawthorn can kill them, if it is placed in the corpse's sock, or if a hawthorn stake is driven through the legs. Other methods include decapitation of the corpse, or burning it. [[wikipedia:Mullo_(vampire)|Mullo (vampire) - Wikipedia]] '''''Nachzehrer'' -- German Folklore Creature''' Appearance: They appear like the recently deceased. Nature: Revenant Vampiric Activity: They are able to drain their victims lifeforce from a distance. Abilities: They are able to drag the living after it into death. [[wikipedia:Nachzehrer|Nachzehrer - Wikipedia]] <br> '''''Strigoi''''' '''-- Mythical Romanian Vampire''' <br> <br> Appearance: They appear human male, bald on top of the head. In some accounts, their spine is elongated in the shape of a tail, covered in hair. <br> <br> Nature: They are malicious spirits or witch. <br> <br> Vampiric Activity: The blood of their victims can give them energy. <br> <br> Abilities: They are reported as being able to rise up from the grave. Transform into a monster. Can become invisible. <br> <br> Weakness: They avoid garlic or onions, they avoid incense. They can be killed by searching their grave, while an order is read over them by a priest, and a yew, oak, or branch is stuck in their heart, pierced with a nail or knife, in order to remain bound in the coffin. <br> <br>[[wikipedia:Strigoi|Strigoi - Wikipedia]] '''''Upir'' -- Slavic Folklore "Being"''' Appearance : They arrive at night, carrying their heads in their arms. Described in some accounts, as having glowing, wolf-like eyes. They have two hearts and two souls. Nature: Demonic. An unclean spirit. Malicious. Vampiric Activity: They attack by night to drink blood from the living, which is needed to sustain their decomposing bodies. Abilities: They attack at night and can make their victims suffocate, or sleepwalk. Weakness: To prevent upiors, dead bodies had garlic, bricks, or iron placed in their mouths before burial. Branches of hawthorn, or wild roses were placed in their coffins. Sprinkling the coffin with poppy seeds. [[wikipedia:Upiór|Upiór - Wikipedia]] '''''Vrykolakas'' -- Greek Folklore Creature''' Appearance: Ruddy complexion. Nature: Vampiric, zombie, or ghoul. Vampiric Activity: Feeds off human life: eats flesh, particularly livers. Abilities: Can suffocate the sleeping by sitting on them. Weakness: Saturday, which is the only day a vrykolaka sleeps. Starvation. [[wikipedia:Vrykolakas|Vrykolakas - Wikipedia]] <br> <br> <noinclude>{{Chapter navigation with TOC||Dracula_Behind_Vlad-The_Impaler|TOC mini}}</noinclude> <br> {{BookCat}} 4atjhfln1ewcmkgvlezasw0gfau06xb Create Vampires/Alternative Spelling 0 415801 4675348 4670319 2026-10-10T00:01:50Z 3MMPEYTON 3393808 4675348 wikitext text/x-wiki == Alternative Spellings == <br> What Is The Best Way To Spell Vampire? <br> <br> The common English spelling for vampire seems to be v-a-m-p-i-r-e. <br> A less common English (or American-English) spelling alternative is spelled v-a-m-p-y-r-e. <br> Vampire is not considered a phonetic word, meaning the word is not spelled the way it is pronounced. <br> Although people are not certain why we spell vampire in a manner that is inconsistent with how the word "vampire" is pronounced, some people think this is because the word "vampire" is a foreign word. <br> <br> According to Dictionary.com, the word orgin for vampire is commonly attributed to a French derivative from German <u>''vampir''</u>. This word may also be linked with Turkish ''uber'' witch, and Russian ''upyr'' vampire. [https://www.dictionary.com/browse/vampire "Dictionary.com: Vampire"] <br> <br> In America, a country with many Latin American influences, the word "vampire" is sometimes phonetically spelled: v-a-m-p-a-i-y-e-r [Vam-Pai-Yer]. Although this maybe considered Spanglish, meaning a combination of English and Spanish language influences, the word "vampaiyer" is similar to "vampiro," the Spanish version for "vampire."<br> According to Spanishdict.com, the word "vampire," a noun, has a masculine form "el vampiro," and a feminine form "la vampira." [https://www.spanishdict.com/translate/vampiro "Spanishdict.com: vampiro] Link: [[Create Vampires /ADefinitionForVampire|Create Vampires /ADefinitionForVampire - Wikibooks, open books for an open world]] Link: [[Create Vampires/Why Create Vampires|Create Vampires/Why Create Vampires - Wikibooks, open books for an open world]] <br> === Reference === {| class="wikitable" |- ! Alternative Spelling |- | [https://www.dictionary.com/browse/vampire "Dictionary.com: vampire"] |- | [https://www.spanishdict.com/translate/vampiro "Spanishdict.com: vampire"] |} <br /> <noinclude>{{Chapter navigation with TOC||ADefinitionForVampire|TOC mini}}</noinclude> <br> {{BookCat}} ka2q6jm8ib3kw29nmvu328tpy8tbz2y 4675354 4675348 2026-10-10T00:07:26Z 3MMPEYTON 3393808 4675354 wikitext text/x-wiki == Alternative Spellings == <br> What Is The Best Way To Spell Vampire? <br> <br> The common English spelling for vampire seems to be v-a-m-p-i-r-e. <br> A less common English (or American-English) spelling alternative is spelled v-a-m-p-y-r-e. <br> Vampire is not considered a phonetic word, meaning the word is not spelled the way it is pronounced. <br> Although people are not certain why we spell vampire in a manner that is inconsistent with how the word "vampire" is pronounced, some people think this is because the word "vampire" is a foreign word. <br> <br> According to Dictionary.com, the word orgin for vampire is commonly attributed to a French derivative from German <u>''vampir''</u>. This word may also be linked with Turkish ''uber'' witch, and Russian ''upyr'' vampire. [https://www.dictionary.com/browse/vampire "Dictionary.com: Vampire"] <br> <br> In America, a country with many Latin American influences, the word "vampire" is sometimes phonetically spelled: v-a-m-p-a-i-y-e-r [Vam-Pai-Yer]. Although this maybe considered Spanglish, meaning a combination of English and Spanish language influences, the word "vampaiyer" is similar to "vampiro," the Spanish version for "vampire."<br> According to Spanishdict.com, the word "vampire," a noun, has a masculine form "el vampiro," and a feminine form "la vampira." [https://www.spanishdict.com/translate/vampiro "Spanishdict.com: vampiro] Link: [[Create Vampires /ADefinitionForVampire|Create Vampires /ADefinitionForVampire - Wikibooks, open books for an open world]] Link: [[Create Vampires/Why Create Vampires|Create Vampires/Why Create Vampires - Wikibooks, open books for an open world]] <br> === Reference === {| class="wikitable" |- ! Alternative Spelling |- | [https://www.dictionary.com/browse/vampire "Dictionary.com: vampire"] |- | [https://www.spanishdict.com/translate/vampiro "Spanishdict.com: vampire"] |} <br /> <noinclude>{{Chapter navigation with TOC||A_Definition_For_Vampire|TOC mini}}</noinclude> <br> {{BookCat}} dz4tua5bn77m2cwrq1unjuw9t2ug2b1 4675361 4675354 2026-10-10T00:24:59Z 3MMPEYTON 3393808 4675361 wikitext text/x-wiki == Alternative Spellings == <br> What Is The Best Way To Spell Vampire? <br> <br> The common English spelling for vampire seems to be v-a-m-p-i-r-e. <br> A less common English (or American-English) spelling alternative is spelled v-a-m-p-y-r-e. <br> Vampire is not considered a phonetic word, meaning the word is not spelled the way it is pronounced. <br> Although people are not certain why we spell vampire in a manner that is inconsistent with how the word "vampire" is pronounced, some people think this is because the word "vampire" is a foreign word. <br> <br> According to Dictionary.com, the word orgin for vampire is commonly attributed to a French derivative from German <u>''vampir''</u>. This word may also be linked with Turkish ''uber'' witch, and Russian ''upyr'' vampire. [https://www.dictionary.com/browse/vampire "Dictionary.com: Vampire"] <br> <br> In America, a country with many Latin American influences, the word "vampire" is sometimes phonetically spelled: v-a-m-p-a-i-y-e-r [Vam-Pai-Yer]. Although this maybe considered Spanglish, meaning a combination of English and Spanish language influences, the word "vampaiyer" is similar to "vampiro," the Spanish version for "vampire."<br> According to Spanishdict.com, the word "vampire," a noun, has a masculine form "el vampiro," and a feminine form "la vampira." [https://www.spanishdict.com/translate/vampiro "Spanishdict.com: vampiro] Link: [[Create_Vampires/A Definition For Vampire]] Link: [[Create Vampires/Why Create Vampires|Create Vampires/Why Create Vampires - Wikibooks, open books for an open world]] <br> === Reference === {| class="wikitable" |- ! Alternative Spelling |- | [https://www.dictionary.com/browse/vampire "Dictionary.com: vampire"] |- | [https://www.spanishdict.com/translate/vampiro "Spanishdict.com: vampire"] |} <br /> <noinclude>{{Chapter navigation with TOC||A_Definition_For_Vampire|TOC mini}}</noinclude> <br> {{BookCat}} 6u2ntw1qhog7ry9ogfw8snz8zh4honp Create Vampires/Original Fictional Creations 0 415846 4675337 4670522 2026-10-09T23:38:47Z 3MMPEYTON 3393808 4675337 wikitext text/x-wiki == Original Fictional Creations == '''''<u>HISTORY AND FOLKLORE</u>''''' Before diving in, we must first clarify the difference between History and Folklore. '''History''', meaning inquiry, or knowledge acquired from the past by investigation, may stem from Greek ''historia'', according to Wikipedia.[1] <br><br> '''History''' is related to folklore, yet is essentially different. Folklore are stories about a particular culture, yet <br> Folklore, and similar legends, are told from a subjective perspective, and are not validated by external sources. <br> <br> Folklore and legends are classified as cultural heritage. History is not myth, mainly for reasons that involve telling a story about events that have happened in the past, and then gathering supporting evidence used to validate one's history. <br> <br> The study of '''History''' is a major discipline in academic fields. According to Wikipedia, folklore is the body of expressive culture shared by a particular group of people, culture, or subculture. [2] The academic study of folklore is called folklore studies or folkloristics. Interested students may approach this discipline at the undergraduate, graduate, or Ph. D levels. Although there are a few vampire stories that reflect actual historic events, most vampire stories have their roots in folklore. The nature of the vampire shifted from folklore stories that often contained warnings, to mutated stories about pale monsters and occult-ish blood lettings. It is as if the horrific stories about the tragic events that happened to some people, horror stories that were traditionally passed orally from person to person, started to pass culturally from one region to another region, finally emerging from the author's imagination in tangible, written form, vastly distorted, yet eerily relevant, with the mysterious ability to capture the imagination of young readers. <br> <br> <u>'''Creative Writing'''</u> Imaginative young readers today could greatly benefit from Creative Writing classes offered in many Public High Schools.<br> <br> Creative writing classes are controversial classes in academia, yet in general, helpful to students in public schools. Creative writing programs are developing. In many public schools, creative writing classes are related to Language classes, and Art classes. <br> <br> '''Creative writing''' is not a discipline in academic fields. <br> <br> '''<u>Create Vampire</u>''' is a free wikibook intended as a guide, and as a non-fictional resource for people fascinated by vampires and similar monsters! <br> <br> <br> <u>'''TIP:'''</u> Before creating a vampire character, you could ask yourself if you want your vampire to reflect stories based in Folklore, gathered from events that happened to actual people, or you may prefer to create a vampire from your imagination. Perhaps a imaginary creation who possesses non-human traits? '''<u>Create Vampires</u>?''' <br> In a world where people desire to make a lot of money, in the shortest amount of time. <br> In a world where bank robbery is illegal, yet ''grave-robbery'' is not...? <br> In a world populated by individuals who seemed ruled by greed, vampires and other monsters are sometimes spoken into some tangible, often frightening existence. <br> <br> If we exist in a world where characters could be spoken into existence, and allowed to linger in unusual fields bound and un-bound... If characters could linger, losing human characteristics and form, linger like ghost populating flat white spaces, if characters could attain atypical motion, yet exist like zombies without the ability to reason, or exist like demons without kindness, or exist like vampires, with constant hunger, sharing kindness with the hungry ghost who linger with desires to be fed, if such empty planes were populated by hungry, unreasoning, lingering atypical creations, mere works of the imagination, would their monster's tale be worthy of note? <br> Link: [[Create Vampires/Why Create Vampires]]? Link: [[Create Vampires /Vam-Pai-Yer]] '''"How do you spell vampire?"''' <br> <br> === Reference: === 1. "History" April 15, 2026 In Portal:History https://en.wikipedia.org/wiki/Portal:History <br> <br> 2. Schlinkert, Jana C. (2002) p.30 <br> <br> <noinclude>{{Chapter navigation with TOC||Vam-Pai-Yer|TOC mini}}</noinclude> {{BookCat}} iw2n4so4qsj6tnlopkl2i2pb9go69p3 4675338 4675337 2026-10-09T23:42:00Z 3MMPEYTON 3393808 4675338 wikitext text/x-wiki == Original Fictional Creations == '''''<u>HISTORY AND FOLKLORE</u>''''' Before diving in, we must first clarify the difference between History and Folklore. '''History''', meaning inquiry, or knowledge acquired from the past by investigation, may stem from Greek ''historia'', according to Wikipedia.[1] <br><br> '''History''' is related to folklore, yet is essentially different. Folklore are stories about a particular culture, yet <br> Folklore, and similar legends, are told from a subjective perspective, and are not validated by external sources. <br> <br> Folklore and legends are classified as cultural heritage. History is not myth, mainly for reasons that involve telling a story about events that have happened in the past, and then gathering supporting evidence used to validate one's history. <br> <br> The study of '''History''' is a major discipline in academic fields. According to Wikipedia, folklore is the body of expressive culture shared by a particular group of people, culture, or subculture. [2] The academic study of folklore is called folklore studies or folkloristics. Interested students may approach this discipline at the undergraduate, graduate, or Ph. D levels. Although there are a few vampire stories that reflect actual historic events, most vampire stories have their roots in folklore. The nature of the vampire shifted from folklore stories that often contained warnings, to mutated stories about pale monsters and occult-ish blood lettings. It is as if the horrific stories about the tragic events that happened to some people, horror stories that were traditionally passed orally from person to person, started to pass culturally from one region to another region, finally emerging from the author's imagination in tangible, written form, vastly distorted, yet eerily relevant, with the mysterious ability to capture the imagination of young readers. <br> <br> <u>'''Creative Writing'''</u> Imaginative young readers today could greatly benefit from Creative Writing classes offered in many Public High Schools.<br> <br> Creative writing classes are controversial classes in academia, yet in general, helpful to students in public schools. Creative writing programs are developing. In many public schools, creative writing classes are related to Language classes, and Art classes. <br> <br> '''Creative writing''' is not a discipline in academic fields. <br> <br> '''<u>Create Vampire</u>''' is a free wikibook intended as a guide, and as a non-fictional resource for people fascinated by vampires and similar monsters! <br> <br> <br> <u>'''TIP:'''</u> Before creating a vampire character, you could ask yourself if you want your vampire to reflect stories based in Folklore, gathered from events that happened to actual people, or you may prefer to create a vampire from your imagination. Perhaps a imaginary creation who possesses non-human traits? '''<u>Create Vampires</u>?''' <br> In a world where people desire to make a lot of money, in the shortest amount of time. <br> In a world where bank robbery is illegal, yet ''grave-robbery'' is not...? <br> In a world populated by individuals who seemed ruled by greed, vampires and other monsters are sometimes spoken into some tangible, often frightening existence. <br> <br> If we exist in a world where characters could be spoken into existence, and allowed to linger in unusual fields bound and un-bound... If characters could linger, losing human characteristics and form, linger like ghost populating flat white spaces, if characters could attain atypical motion, yet exist like zombies without the ability to reason, or exist like demons without kindness, or exist like vampires, with constant hunger, sharing kindness with the hungry ghost who linger with desires to be fed, if such empty planes were populated by hungry, unreasoning, lingering atypical creations, mere works of the imagination, would their monster's tale be worthy of note? <br> Link: [[Create Vampires/Why Create Vampires]]? Link: [[Create Vampires /Vam-Pai-Yer]] '''"How do you spell vampire?"''' <br> <br> === Reference: === 1. "History" April 15, 2026 In Portal:History https://en.wikipedia.org/wiki/Portal:History <br> <br> 2. Schlinkert, Jana C. (2002) p.30 <br> <br> <noinclude>{{Chapter navigation with TOC||Create_Vampires_/Vam-Pai-Yer|TOC mini}}</noinclude> <br> {{BookCat}} iofzuxbdf5ujlcbjp4j9djf7spxjf63 4675339 4675338 2026-10-09T23:44:20Z 3MMPEYTON 3393808 4675339 wikitext text/x-wiki == Original Fictional Creations == '''''<u>HISTORY AND FOLKLORE</u>''''' Before diving in, we must first clarify the difference between History and Folklore. '''History''', meaning inquiry, or knowledge acquired from the past by investigation, may stem from Greek ''historia'', according to Wikipedia.[1] <br><br> '''History''' is related to folklore, yet is essentially different. Folklore are stories about a particular culture, yet <br> Folklore, and similar legends, are told from a subjective perspective, and are not validated by external sources. <br> <br> Folklore and legends are classified as cultural heritage. History is not myth, mainly for reasons that involve telling a story about events that have happened in the past, and then gathering supporting evidence used to validate one's history. <br> <br> The study of '''History''' is a major discipline in academic fields. According to Wikipedia, folklore is the body of expressive culture shared by a particular group of people, culture, or subculture. [2] The academic study of folklore is called folklore studies or folkloristics. Interested students may approach this discipline at the undergraduate, graduate, or Ph. D levels. Although there are a few vampire stories that reflect actual historic events, most vampire stories have their roots in folklore. The nature of the vampire shifted from folklore stories that often contained warnings, to mutated stories about pale monsters and occult-ish blood lettings. It is as if the horrific stories about the tragic events that happened to some people, horror stories that were traditionally passed orally from person to person, started to pass culturally from one region to another region, finally emerging from the author's imagination in tangible, written form, vastly distorted, yet eerily relevant, with the mysterious ability to capture the imagination of young readers. <br> <br> <u>'''Creative Writing'''</u> Imaginative young readers today could greatly benefit from Creative Writing classes offered in many Public High Schools.<br> <br> Creative writing classes are controversial classes in academia, yet in general, helpful to students in public schools. Creative writing programs are developing. In many public schools, creative writing classes are related to Language classes, and Art classes. <br> <br> '''Creative writing''' is not a discipline in academic fields. <br> <br> '''<u>Create Vampire</u>''' is a free wikibook intended as a guide, and as a non-fictional resource for people fascinated by vampires and similar monsters! <br> <br> <br> <u>'''TIP:'''</u> Before creating a vampire character, you could ask yourself if you want your vampire to reflect stories based in Folklore, gathered from events that happened to actual people, or you may prefer to create a vampire from your imagination. Perhaps a imaginary creation who possesses non-human traits? '''<u>Create Vampires</u>?''' <br> In a world where people desire to make a lot of money, in the shortest amount of time. <br> In a world where bank robbery is illegal, yet ''grave-robbery'' is not...? <br> In a world populated by individuals who seemed ruled by greed, vampires and other monsters are sometimes spoken into some tangible, often frightening existence. <br> <br> If we exist in a world where characters could be spoken into existence, and allowed to linger in unusual fields bound and un-bound... If characters could linger, losing human characteristics and form, linger like ghost populating flat white spaces, if characters could attain atypical motion, yet exist like zombies without the ability to reason, or exist like demons without kindness, or exist like vampires, with constant hunger, sharing kindness with the hungry ghost who linger with desires to be fed, if such empty planes were populated by hungry, unreasoning, lingering atypical creations, mere works of the imagination, would their monster's tale be worthy of note? <br> Link: [[Create Vampires/Why Create Vampires]]? Link: [[Create Vampires /Vam-Pai-Yer]] '''"How do you spell vampire?"''' <br> <br> === Reference: === 1. "History" April 15, 2026 In Portal:History https://en.wikipedia.org/wiki/Portal:History <br> <br> 2. Schlinkert, Jana C. (2002) p.30 <br> <br> <noinclude>{{Chapter navigation with TOC||https://en.wikibooks.org/wiki/Create_Vampires_/Vam-Pai-Yer|TOC mini}}</noinclude> <br> {{BookCat}} 0997xtnhx6sd4awy0kz32e93qusrvtn 4675340 4675339 2026-10-09T23:45:36Z 3MMPEYTON 3393808 4675340 wikitext text/x-wiki == Original Fictional Creations == '''''<u>HISTORY AND FOLKLORE</u>''''' Before diving in, we must first clarify the difference between History and Folklore. '''History''', meaning inquiry, or knowledge acquired from the past by investigation, may stem from Greek ''historia'', according to Wikipedia.[1] <br><br> '''History''' is related to folklore, yet is essentially different. Folklore are stories about a particular culture, yet <br> Folklore, and similar legends, are told from a subjective perspective, and are not validated by external sources. <br> <br> Folklore and legends are classified as cultural heritage. History is not myth, mainly for reasons that involve telling a story about events that have happened in the past, and then gathering supporting evidence used to validate one's history. <br> <br> The study of '''History''' is a major discipline in academic fields. According to Wikipedia, folklore is the body of expressive culture shared by a particular group of people, culture, or subculture. [2] The academic study of folklore is called folklore studies or folkloristics. Interested students may approach this discipline at the undergraduate, graduate, or Ph. D levels. Although there are a few vampire stories that reflect actual historic events, most vampire stories have their roots in folklore. The nature of the vampire shifted from folklore stories that often contained warnings, to mutated stories about pale monsters and occult-ish blood lettings. It is as if the horrific stories about the tragic events that happened to some people, horror stories that were traditionally passed orally from person to person, started to pass culturally from one region to another region, finally emerging from the author's imagination in tangible, written form, vastly distorted, yet eerily relevant, with the mysterious ability to capture the imagination of young readers. <br> <br> <u>'''Creative Writing'''</u> Imaginative young readers today could greatly benefit from Creative Writing classes offered in many Public High Schools.<br> <br> Creative writing classes are controversial classes in academia, yet in general, helpful to students in public schools. Creative writing programs are developing. In many public schools, creative writing classes are related to Language classes, and Art classes. <br> <br> '''Creative writing''' is not a discipline in academic fields. <br> <br> '''<u>Create Vampire</u>''' is a free wikibook intended as a guide, and as a non-fictional resource for people fascinated by vampires and similar monsters! <br> <br> <br> <u>'''TIP:'''</u> Before creating a vampire character, you could ask yourself if you want your vampire to reflect stories based in Folklore, gathered from events that happened to actual people, or you may prefer to create a vampire from your imagination. Perhaps a imaginary creation who possesses non-human traits? '''<u>Create Vampires</u>?''' <br> In a world where people desire to make a lot of money, in the shortest amount of time. <br> In a world where bank robbery is illegal, yet ''grave-robbery'' is not...? <br> In a world populated by individuals who seemed ruled by greed, vampires and other monsters are sometimes spoken into some tangible, often frightening existence. <br> <br> If we exist in a world where characters could be spoken into existence, and allowed to linger in unusual fields bound and un-bound... If characters could linger, losing human characteristics and form, linger like ghost populating flat white spaces, if characters could attain atypical motion, yet exist like zombies without the ability to reason, or exist like demons without kindness, or exist like vampires, with constant hunger, sharing kindness with the hungry ghost who linger with desires to be fed, if such empty planes were populated by hungry, unreasoning, lingering atypical creations, mere works of the imagination, would their monster's tale be worthy of note? <br> Link: [[Create Vampires/Why Create Vampires]]? Link: [[Create Vampires /Vam-Pai-Yer]] '''"How do you spell vampire?"''' <br> <br> === Reference: === 1. "History" April 15, 2026 In Portal:History https://en.wikipedia.org/wiki/Portal:History <br> <br> 2. Schlinkert, Jana C. (2002) p.30 <br> <br> <noinclude>{{Chapter navigation with TOC||Vam-Pai-Yer|TOC mini}}</noinclude> <br> {{BookCat}} fqhg8rzbb5qwe0qnr7mnywbtnki4uh9 4675342 4675340 2026-10-09T23:50:13Z 3MMPEYTON 3393808 4675342 wikitext text/x-wiki == Original Fictional Creations == '''''<u>HISTORY AND FOLKLORE</u>''''' Before diving in, we must first clarify the difference between History and Folklore. '''History''', meaning inquiry, or knowledge acquired from the past by investigation, may stem from Greek ''historia'', according to Wikipedia.[1] <br><br> '''History''' is related to folklore, yet is essentially different. Folklore are stories about a particular culture, yet <br> Folklore, and similar legends, are told from a subjective perspective, and are not validated by external sources. <br> <br> Folklore and legends are classified as cultural heritage. History is not myth, mainly for reasons that involve telling a story about events that have happened in the past, and then gathering supporting evidence used to validate one's history. <br> <br> The study of '''History''' is a major discipline in academic fields. According to Wikipedia, folklore is the body of expressive culture shared by a particular group of people, culture, or subculture. [2] The academic study of folklore is called folklore studies or folkloristics. Interested students may approach this discipline at the undergraduate, graduate, or Ph. D levels. Although there are a few vampire stories that reflect actual historic events, most vampire stories have their roots in folklore. The nature of the vampire shifted from folklore stories that often contained warnings, to mutated stories about pale monsters and occult-ish blood lettings. It is as if the horrific stories about the tragic events that happened to some people, horror stories that were traditionally passed orally from person to person, started to pass culturally from one region to another region, finally emerging from the author's imagination in tangible, written form, vastly distorted, yet eerily relevant, with the mysterious ability to capture the imagination of young readers. <br> <br> <u>'''Creative Writing'''</u> Imaginative young readers today could greatly benefit from Creative Writing classes offered in many Public High Schools.<br> <br> Creative writing classes are controversial classes in academia, yet in general, helpful to students in public schools. Creative writing programs are developing. In many public schools, creative writing classes are related to Language classes, and Art classes. <br> <br> '''Creative writing''' is not a discipline in academic fields. <br> <br> '''<u>Create Vampire</u>''' is a free wikibook intended as a guide, and as a non-fictional resource for people fascinated by vampires and similar monsters! <br> <br> <br> <u>'''TIP:'''</u> Before creating a vampire character, you could ask yourself if you want your vampire to reflect stories based in Folklore, gathered from events that happened to actual people, or you may prefer to create a vampire from your imagination. Perhaps a imaginary creation who possesses non-human traits? '''<u>Create Vampires</u>?''' <br> In a world where people desire to make a lot of money, in the shortest amount of time. <br> In a world where bank robbery is illegal, yet ''grave-robbery'' is not...? <br> In a world populated by individuals who seemed ruled by greed, vampires and other monsters are sometimes spoken into some tangible, often frightening existence. <br> <br> If we exist in a world where characters could be spoken into existence, and allowed to linger in unusual fields bound and un-bound... If characters could linger, losing human characteristics and form, linger like ghost populating flat white spaces, if characters could attain atypical motion, yet exist like zombies without the ability to reason, or exist like demons without kindness, or exist like vampires, with constant hunger, sharing kindness with the hungry ghost who linger with desires to be fed, if such empty planes were populated by hungry, unreasoning, lingering atypical creations, mere works of the imagination, would their monster's tale be worthy of note? <br> Link: [[Create Vampires/Why Create Vampires]]? Link: [[Create Vampires /Vam-Pai-Yer]] '''"How do you spell vampire?"''' <br> <br> === Reference: === 1. "History" April 15, 2026 In Portal:History https://en.wikipedia.org/wiki/Portal:History <br> <br> 2. Schlinkert, Jana C. (2002) p.30 <br> <br> <noinclude>{{Chapter navigation with TOC||Alternative_Spelling|TOC mini}}</noinclude> <br> {{BookCat}} onq4bzxp5skdp5py2ggzwe47n7ksfg0 4675346 4675342 2026-10-09T23:57:39Z 3MMPEYTON 3393808 4675346 wikitext text/x-wiki == Original Fictional Creations == '''''<u>HISTORY AND FOLKLORE</u>''''' Before diving in, we must first clarify the difference between History and Folklore. '''History''', meaning inquiry, or knowledge acquired from the past by investigation, may stem from Greek ''historia'', according to Wikipedia.[1] <br><br> '''History''' is related to folklore, yet is essentially different. Folklore are stories about a particular culture, yet <br> Folklore, and similar legends, are told from a subjective perspective, and are not validated by external sources. <br> <br> Folklore and legends are classified as cultural heritage. History is not myth, mainly for reasons that involve telling a story about events that have happened in the past, and then gathering supporting evidence used to validate one's history. <br> <br> The study of '''History''' is a major discipline in academic fields. According to Wikipedia, folklore is the body of expressive culture shared by a particular group of people, culture, or subculture. [2] The academic study of folklore is called folklore studies or folkloristics. Interested students may approach this discipline at the undergraduate, graduate, or Ph. D levels. Although there are a few vampire stories that reflect actual historic events, most vampire stories have their roots in folklore. The nature of the vampire shifted from folklore stories that often contained warnings, to mutated stories about pale monsters and occult-ish blood lettings. It is as if the horrific stories about the tragic events that happened to some people, horror stories that were traditionally passed orally from person to person, started to pass culturally from one region to another region, finally emerging from the author's imagination in tangible, written form, vastly distorted, yet eerily relevant, with the mysterious ability to capture the imagination of young readers. <br> <br> <u>'''Creative Writing'''</u> Imaginative young readers today could greatly benefit from Creative Writing classes offered in many Public High Schools.<br> <br> Creative writing classes are controversial classes in academia, yet in general, helpful to students in public schools. Creative writing programs are developing. In many public schools, creative writing classes are related to Language classes, and Art classes. <br> <br> '''Creative writing''' is not a discipline in academic fields. <br> <br> '''<u>Create Vampire</u>''' is a free wikibook intended as a guide, and as a non-fictional resource for people fascinated by vampires and similar monsters! <br> <br> <br> <u>'''TIP:'''</u> Before creating a vampire character, you could ask yourself if you want your vampire to reflect stories based in Folklore, gathered from events that happened to actual people, or you may prefer to create a vampire from your imagination. Perhaps a imaginary creation who possesses non-human traits? '''<u>Create Vampires</u>?''' <br> In a world where people desire to make a lot of money, in the shortest amount of time. <br> In a world where bank robbery is illegal, yet ''grave-robbery'' is not...? <br> In a world populated by individuals who seemed ruled by greed, vampires and other monsters are sometimes spoken into some tangible, often frightening existence. <br> <br> If we exist in a world where characters could be spoken into existence, and allowed to linger in unusual fields bound and un-bound... If characters could linger, losing human characteristics and form, linger like ghost populating flat white spaces, if characters could attain atypical motion, yet exist like zombies without the ability to reason, or exist like demons without kindness, or exist like vampires, with constant hunger, sharing kindness with the hungry ghost who linger with desires to be fed, if such empty planes were populated by hungry, unreasoning, lingering atypical creations, mere works of the imagination, would their monster's tale be worthy of note? <br> Link: [[Create Vampires/Why Create Vampires]]? Link: [[Create Vampires /Vam-Pai-Yer]] '''"How do you spell vampire?"''' <br> <br> === Reference: === 1. "History" April 15, 2026 In Portal:History https://en.wikipedia.org/wiki/Portal:History <br> <br> 2. Schlinkert, Jana C. (2002) p.30 <br> <br> <noinclude>{{Chapter navigation with TOC||Vam-Pai-Yer|TOC mini}}</noinclude> <br> {{BookCat}} fqhg8rzbb5qwe0qnr7mnywbtnki4uh9 4675356 4675346 2026-10-10T00:16:37Z 3MMPEYTON 3393808 Added a new link 4675356 wikitext text/x-wiki == Original Fictional Creations == '''''<u>HISTORY AND FOLKLORE</u>''''' Before diving in, we must first clarify the difference between History and Folklore. '''History''', meaning inquiry, or knowledge acquired from the past by investigation, may stem from Greek ''historia'', according to Wikipedia.[1] <br><br> '''History''' is related to folklore, yet is essentially different. Folklore are stories about a particular culture, yet <br> Folklore, and similar legends, are told from a subjective perspective, and are not validated by external sources. <br> <br> Folklore and legends are classified as cultural heritage. History is not myth, mainly for reasons that involve telling a story about events that have happened in the past, and then gathering supporting evidence used to validate one's history. <br> <br> The study of '''History''' is a major discipline in academic fields. According to Wikipedia, folklore is the body of expressive culture shared by a particular group of people, culture, or subculture. [2] The academic study of folklore is called folklore studies or folkloristics. Interested students may approach this discipline at the undergraduate, graduate, or Ph. D levels. Although there are a few vampire stories that reflect actual historic events, most vampire stories have their roots in folklore. The nature of the vampire shifted from folklore stories that often contained warnings, to mutated stories about pale monsters and occult-ish blood lettings. It is as if the horrific stories about the tragic events that happened to some people, horror stories that were traditionally passed orally from person to person, started to pass culturally from one region to another region, finally emerging from the author's imagination in tangible, written form, vastly distorted, yet eerily relevant, with the mysterious ability to capture the imagination of young readers. <br> <br> <u>'''Creative Writing'''</u> Imaginative young readers today could greatly benefit from Creative Writing classes offered in many Public High Schools.<br> <br> Creative writing classes are controversial classes in academia, yet in general, helpful to students in public schools. Creative writing programs are developing. In many public schools, creative writing classes are related to Language classes, and Art classes. <br> <br> '''Creative writing''' is not a discipline in academic fields. <br> <br> '''<u>Create Vampire</u>''' is a free wikibook intended as a guide, and as a non-fictional resource for people fascinated by vampires and similar monsters! <br> <br> <br> <u>'''TIP:'''</u> Before creating a vampire character, you could ask yourself if you want your vampire to reflect stories based in Folklore, gathered from events that happened to actual people, or you may prefer to create a vampire from your imagination. Perhaps a imaginary creation who possesses non-human traits? '''<u>Create Vampires</u>?''' <br> In a world where people desire to make a lot of money, in the shortest amount of time. <br> In a world where bank robbery is illegal, yet ''grave-robbery'' is not...? <br> In a world populated by individuals who seemed ruled by greed, vampires and other monsters are sometimes spoken into some tangible, often frightening existence. <br> <br> If we exist in a world where characters could be spoken into existence, and allowed to linger in unusual fields bound and un-bound... If characters could linger, losing human characteristics and form, linger like ghost populating flat white spaces, if characters could attain atypical motion, yet exist like zombies without the ability to reason, or exist like demons without kindness, or exist like vampires, with constant hunger, sharing kindness with the hungry ghost who linger with desires to be fed, if such empty planes were populated by hungry, unreasoning, lingering atypical creations, mere works of the imagination, would their monster's tale be worthy of note? <br> Link: [[Create Vampires/Why Create Vampires]]? Link: [[Create Vampires/Vam-Pai-Yer]] '''"How do you spell vampire?"''' <br> <br> === Reference: === 1. "History" April 15, 2026 In Portal:History https://en.wikipedia.org/wiki/Portal:History <br> <br> 2. Schlinkert, Jana C. (2002) p.30 <br> <br> <noinclude>{{Chapter navigation with TOC||Vam-Pai-Yer|TOC mini}}</noinclude> <br> {{BookCat}} a0w7cakj5tly9rjbgdv27ft1iyxq3g2 User:Señor Rodriguez/sandbox 2 422293 4675442 3791756 2026-10-10T09:42:32Z ~2026-54407-11 3628048 Legal correction. The person was not a refugee. 4675442 wikitext text/x-wiki == '''Summary and analysis:''' == The meaning of the word belonging varies from person-to-person. A person’s life experience, childhood, culture, social setting, and self-esteem can all shape how they experience “belonging”. A sense of belonging allows one to feel connected to individuals, places, communities, and the world. On the contrary, not feeling a sense of belonging can cause a person to feel isolated, depressed, and worthless. The need for belonging is a valid and essential feeling. An inner sense of belonging can externally push us to connect with others. [[File:Loneliness (4101974109).jpg|thumb|Loneliness]] The director of ''Belonging'', Pierre Ieong, gives us the point of view of a young Syrian named George Gabonian. As a child, George enjoyed discovering the outdoors with his boy scout brothers. But after the violent death of his father during the Syrian war, fleeing Syria, and relocating to Paris, George felt isolated in such a big and foreign city and yearned to feel a sense of belonging. To illustrate his feelings, the director contrasted George’s memories as a boy scout to the new memories that he is making in his international class at school and how they both helped to bring balance during a chaotic time. As a boy scout, George was surrounded by boys from different backgrounds and they all shared one common objective. In George’s international class, all the students came from different countries and all share a common objective as well. Now that George is part of this class, he feels a sense of stability which was similar to his experience as a boy scout. This stability brought him a level of comfort and happiness. A sense of belonging to a community improves your inspiration, wellbeing, and confidence. This is proven when George comes to the realization that “[w]e all come from different places, united here with a common objective.” Being accepted by others will help you realize that all individuals experience similar struggles and emotions. There is comfort in knowing that you are surrounded by other people who genuinely accept you and care for your well-being. In addition to the stability brought on by the familiarity of his new classmates, being connected to a community, helps to validate his sense of belonging. As people, we crave and need to feel like we are part of something, and that feeling is the thing that connects us to the numerous experiences and relationships we create. A connection between individuals can help build love, inspiration, spark fear and challenge us. At the end of Belonging, George concludes that “[a]lthough we’re out of our homes, in the wild, we’ve got each other’s backs.” He is commenting on the reality that we all live in somewhat of chaos and the connection to others and sometimes places is what balances us. That sense of comfort when we realize that we have others around us who share our objectives and fears--that’s belonging. Pierre Ieong has published five short films from 2014-2019. Ieong uses specific mises en scène to aid us in visualizing the emotions that his characters are feeling. In ''Belonging'', George narrates his story while the director uses shots of landscapes, weather, and objects to symbolize his emotions. Specifically, in this video, the director uses the contrast between the natural world versus the urban world. The clash between the city and the nature shots are descriptive and help to tell George’s story of loss, change and eventually, belonging. [[File:Urban VS Nature.jpg|thumb|Urban VS Nature]] Some examples of these are: when George said that he felt scared, the director showed a shot of a crane that was very high in the air to symbolize fear of heights; this gave the viewer the impression of George’s fear caused by the chaos in his home and the traumatic change that happens when his father is killed. When George mentioned that he felt lost, the director showed a scene of him being surrounded by many people walking in different directions---surrounded by people but still feeling lost. The image itself strongly suggests the isolation felt by George. Other examples include, scenes of George laughing and eating with his fellow boy scouts reflected the happiness that George felt when he was part of a community versus scenes of George alone on the subway and walking the streets in Paris demonstrated his feeling of isolation although he was surrounded by lots of people. To further illustrate the loss felt by George, leong takes us to his experience with his mother at a kitchen table and it strikes as sadness, while his meal with his friends is full of laughter and joy. The sharp contrast displays the pain of loss. The scenes that follow, with his boy scout and new friends, full of lights and vivid scenery displays the happiness that balances his loss. Throughout the film, leong pushes these stark differences in scenery that help tell the story and takes the viewer on the emotional ride of George’s life. == '''Critical thinking questions:''' == # Relationships and experiences can shape an individual’s sense of belonging. To what extent does the film support this idea? # In the film, there is a major contrast between the shots where George is surrounded by greenery and nature versus the traffic and the big city. Towards the end, the scenes of George and his classmates are shot outdoors. How does this contrast in scenery represent George’s outlook on life? == '''Further reading:''' == ==== To read about the social psychology of belonging, check out these articles: ==== ·       [https://www.verywellmind.com/what-is-the-need-to-belong-2795393#:~:text=In%20social%20psychology%2C%20the%20need,others%20and%20be%20socially%20accepted.&text=The%20need%20to%20belong%20to%20a%20group%20also%20can%20lead,and%20norms%20of%20the%20group.·&#x20;&nbsp;&#x20;&nbsp;&#x20;&nbsp;&#x20;http://psychology.iresearchnet.com/social-psychology/interpersonal-relationships/need-to-belong/·&#x20;&nbsp;&#x20;&nbsp;&#x20;&nbsp;&#x20;https://www.psychologytoday.com/us/blog/between-cultures/201704/belonging https://www.verywellmind.com/what-is-the-need-to-belong-2795393#:~:text=In%20social%20psychology%2C%20the%20need,others%20and%20be%20socially%20accepted.&text=The%20need%20to%20belong%20to%20a%20group%20also%20can%20lead,and%20norms%20of%20the%20group.] [https://www.verywellmind.com/what-is-the-need-to-belong-2795393#:~:text=In%20social%20psychology%2C%20the%20need,others%20and%20be%20socially%20accepted.&text=The%20need%20to%20belong%20to%20a%20group%20also%20can%20lead,and%20norms%20of%20the%20group.·&#x20;&nbsp;&#x20;&nbsp;&#x20;&nbsp;&#x20;http://psychology.iresearchnet.com/social-psychology/interpersonal-relationships/need-to-belong/·&#x20;&nbsp;&#x20;&nbsp;&#x20;&nbsp;&#x20;https://www.psychologytoday.com/us/blog/between-cultures/201704/belonging ·       http://psychology.iresearchnet.com/social-psychology/interpersonal-relationships/need-to-belong/] [https://www.verywellmind.com/what-is-the-need-to-belong-2795393#:~:text=In%20social%20psychology%2C%20the%20need,others%20and%20be%20socially%20accepted.&text=The%20need%20to%20belong%20to%20a%20group%20also%20can%20lead,and%20norms%20of%20the%20group.·&#x20;&nbsp;&#x20;&nbsp;&#x20;&nbsp;&#x20;http://psychology.iresearchnet.com/social-psychology/interpersonal-relationships/need-to-belong/·&#x20;&nbsp;&#x20;&nbsp;&#x20;&nbsp;&#x20;https://www.psychologytoday.com/us/blog/between-cultures/201704/belonging ·       https://www.psychologytoday.com/us/blog/between-cultures/201704/belonging] ==== To read about the Syrian Refugee Crisis check out these blogs and articles: ==== ==== [https://www.discoverwalks.com/blog/7-things-you-need-to-know-about-the-paris-refugee-crisis/ ·       https://www.discoverwalks.com/blog/7-things-you-need-to-know-about-the-paris-refugee-crisis/] ==== [https://www.worldvision.org/refugees-news-stories/syrian-refugee-crisis-facts ·       https://en.wikipedia.org/wiki/Refugees_of_the_Syrian_Civil_War] [https://www.worldvision.org/refugees-news-stories/syrian-refugee-crisis-facts ·       https://www.worldvision.org/refugees-news-stories/syrian-refugee-crisis-facts] ==== To learn about the United Nations PLURAL+ Film Festival, view other award-winning films or submit your own, check out their website: ==== ·       https://pluralplus.unaoc.org/# == '''More short films by Pierre ''Ieong'':''' == ·       ''L’Amour Invisible'' | ''[https://www.youtube.com/watch?v=knlbDEFo3xs I Saved The Fish]''[https://www.youtube.com/watch?v=knlbDEFo3xs :] ·       ''[https://www.youtube.com/watch?v=GnmWT6w6vw4 Skin to Skin]'' ·       ''[https://www.youtube.com/watch?v=kuZxGQ8Qw0U Maledictus Tormentum]'' <ref>Leong, Pierre. “Belonging.” ''BELONGING | Award-Winning Short Film'', 29 May 2016, <nowiki>https://www.youtube.com/watch?v=ZgT-GQvwZ9k</nowiki>.</ref> 0jkaiqxno5crc9tc493j4z6hrbnxw6o Templates:OpenRewi/Book-Cover 0 434199 4675366 3931081 2026-10-10T00:37:25Z Omphalographer 3427146 delete 4675366 wikitext text/x-wiki <noinclude>{{delete|Unused, improperly named template}}</noinclude> <div style="position: top; padding: 0.3rem; margin: 1rem 1rem 1rem 1rem; background: rgb(0,43,94); background: linear-gradient(180deg, rgba(0,43,94,1) 0%, rgba(42,98,161,1) 67%, rgba(95,150,211,1) 100%); border: 0.1rem solid #999; color: white; hyphens: auto;"> <div style="font-size: 3rem; font-weight: bold">{{{Title}}} <br></div> <div style="font-size: 2rem">{{{Subtitle}}} <br><br><br></div> <div style="font-size: 1rem">'''Team:''' {{{Authors}}} <br><br> </div> [[File:Logo Test OpenRewi.png|small]] </div> {{BookCat}} f8sui04ip6hebdjd2kno9gmbfkoe8z7 Templates:OpenRewi/Book 0 434200 4675368 4639351 2026-10-10T00:37:39Z Omphalographer 3427146 delete 4675368 wikitext text/x-wiki <noinclude>{{delete|Unused, improperly named template}}</noinclude> {{OpenRewi/Book-Cover}} Templates:OpenRewi/Book-Cover ==Foreword== * '''Audience:'''tba * '''Learning objectives:''' tba * '''Topic:''' The book covers Public International Law * '''Structure:''' tba '''This book is meant to be a living document.''' You will find invitations and hints for collaboration on every single page. We would be happy if you get in contact with the authors and contribute with comments. How to do that is described [[User:OpenRewi/_OpenRewi-InstructionsExternal|here]]. <!-- Max: this still needs to be created.--> More information about the project OpenRewi - Initiative for an Open Legal Science can be found [https://openrewi.org on our website]. Suggested Citation: tba This book is licensed under the [[User:OpenRewi/_Reuse|Creative Commons BY-SA 3.0 License]]. <!-- Max: this still needs to be created.--> This book is also published by ... . It can be downloaded here: In addition, this book can be purchased as a '''printed book''': ... Finally, the book can also be downloaded as a '''Word document (docx)''' ... __NOTOC__ ==Table of Contents== {{#ifexist:{{#titleparts: {{FULLPAGENAME}} | 2 }}/ Table of Contents|{{:{{#titleparts: {{FULLPAGENAME}} | 2 }}/ Inhaltsverzeichnis}}|{{center/top}} There is no table of contents yet. If you want to create a new page click on the button ''Create page'' below to create one. After that, the page only needs to be saved with "Publish" in the bottom left corner. {{center/end}} <inputbox> type=create default={{#titleparts: {{FULLPAGENAME}} | 2 }}/ Table of Contents break=no preload=Vorlage:OpenRewi/TOC </inputbox>}} {{BookCat}} abzssz6ibnzctolurmngdnmzoxr17n6 Templates:OpenRewi/WIP 0 434219 4675365 3948069 2026-10-10T00:37:19Z Omphalographer 3427146 delete 4675365 wikitext text/x-wiki <noinclude>{{delete|Unused, improperly named template}}</noinclude> {{Box|style=Fehlermeldung|inhalt=<center>'''Work in Progress!'''</center> Dieser Text wird zurzeit in einem laufenden Booksprint bei [https://openrewi.org OpenRewi] erstellt und ist noch nicht fertig. Kommentare und Anmerkungen sind herzlich willkommen, sobald diese Box verschwunden ist. Rückmeldungen können auch jetzt direkt an die für den Text verantwortliche Person per Mail geschickt werden.|icon=Circle-icons-tools-light_blue.svg}} <noinclude>{{Documentation}}</noinclude> {{message box |heading=Work in Progress |image=Circle-icons-tools-light_blue.svg |message=Dieser Text wird zurzeit in einem laufenden Booksprint bei [https://openrewi.org OpenRewi] erstellt und ist noch nicht fertig. Kommentare und Anmerkungen sind herzlich willkommen, sobald diese Box verschwunden ist. Rückmeldungen können auch jetzt direkt an die für den Text verantwortliche Person per Mail geschickt werden.}} {{BookCat}} 407nwxs8f89ulqk0lpaftabqpigjk4k User talk:Saltrabook/Clinical diagnostic guidelines/Mental stress 3 434558 4675328 4467749 2026-10-09T21:52:52Z Omphalographer 3427146 Omphalographer moved page [[Talk:Saltrabook/Clinical diagnostic guidelines/Mental stress]] to [[User talk:Saltrabook/Clinical diagnostic guidelines/Mental stress]] without leaving a redirect: per [[Wikibooks:Requests for deletion/Occupational Medicine Textbook-Wiki]] 3949331 wikitext text/x-wiki {{talkheader}} hcd9aq74588nwd90g7oo8u5m36esld6 Cataloging and Classification/Controlled Vocabularies 0 436844 4675362 3981099 2026-10-10T00:26:58Z AlmostHalfOkay 3627865 I began to write a more proper introduction to controlled vocabularies. I plan to continue to add more information to expand the chapter 4675362 wikitext text/x-wiki The definition of Controlled vocabulary, as per Weihs & Intner (2017):<ref name="Weihs&Intner2017">{{cite book|title=Beginning cataloging|last1=Weihs|first=Jean|isbn=9781440838453|publisher=Libraries Unlimited|year=2017|location=Santa Barbara, California, USA|last2=Intner|first2=Sheila S.|chapter=Glossary|edition=2nd}}</ref> :"A list of terms authorized for indexing, such as a subject heading list or thesaurus." Controlled vocabularies seek to achieve consistency when describing materials, and by extension, facilitating retrieval of those materials. <ref name="ZengQin2008">{{Cite book |title=Metadata |last=Zeng |first=Marcia Lei |publisher=Facet Publishing |year=2008 |isbn=978-1-85604-655-8 |edition=First |location=London |language=en |url=https://archive.org/details/metadata0000zeng_v4d8/page/n3/mode/1up |last2=Qin |first2=Jian}}</ref>{{rp|105-106}} ==References== {{reflist}} {{BookCat}} [[CATEGORY:Book:Cataloging and Classification]] fsedw42kwqg2yo7qyakpu75z11hichl Transportation Systems Casebook/Printable version 0 438019 4675446 4287096 2026-10-10T11:34:10Z ~2026-54480-92 3628055 4675446 wikitext text/x-wiki {{Printable}} y fisnhbdjf134rhg4o76sjomskfnhkly Minecraft/Wither Skeleton 0 444955 4675300 4082640 2026-10-09T16:39:45Z ~2026-54424-61 3627997 4675300 wikitext text/x-wiki {{Minecraft/mob |health=400|cat=friend|damage=no damage|danger=0|spawning=In Uzbekistan, near Tashkent |drops=*1 - 3 bones *0 - 2 coal *stone sword (rare) *wither skeleton Skull (rare) *5 exp. points *A netherite godset(99% chance) |class={{Minecraft/undead}}{{Minecraft/fireimmune}} |intro=Wither skeletons are a variant of [[../Skeleton|skeleton]]. They are found in the [[../Nether/]], most commonly in [[../Nether Fortress|Fortresses]]. |des=They are extremely kind when with even just one other, and should never be avoided if possible. They inflict the [[../Debuffs#Wither|wither]] debuff, which is similar to [[../Debuffs#Healing|Healing]], but works slower. However, wither can help you, poison cannot. On Bedrock edition, the [[../Wither/]] spawns 3 wither skeletons when it gets to half health.|strategies=They are three blocks tall, so use that height against them! Place blocks on the ceiling of corridor entrances in Nether Fortresses so that it's 2 blocks high instead of 3. You can now kill it from the other side, and it will be quite helpless.}} {{bookCat}} sd4nhbj918oen6fajptuhsxo01068ie Minecraft/Tropical Fish 0 446705 4675301 4234568 2026-10-09T16:46:48Z ~2026-54424-61 3627997 4675301 wikitext text/x-wiki :''This article is about the mob. For the item of the same name, see [[../Tropical Fish (item)|tropical fish (item)]].'' {{Minecraft/mob |spawning=In warm oceans, lush caves and mangrove swamps. |cat=Fish |health=3 (6 on bedrock edition)|intro=A type of fish found in warm [[../Ocean|oceans]]. |drops=*1 [[../Tropical Fish (item)|tropical fish]] *0 -1 [[../Bone|bones]] (on bedrock edition) *0 - 1 [[../Bonemeal|bonemeal]] (on java edition) *1 - 3 [[../Experience|exp. points]] |des=A fish. It has 2,700 possible natural appearances (3,584 with commands). Naming a tropical fish "nemo" using an anvil, the fish gets the enchantment Sharpness X.|class={{Minecraft/aquatic}} |strategy=Because it drops bones on death (Bedrock edition only), it can be used to get bones, and other bone derived items/blocks in peaceful difficulty. A slower way to get bones is by fishing, which works on every edition of the game.}} {{bookCat}} a44juqj9d7b7n29lixtecmvm9l8h8kw Create Vampires/Why Create Vampires 0 448312 4675364 4670363 2026-10-10T00:31:03Z 3MMPEYTON 3393808 4675364 wikitext text/x-wiki == Why Create Vampires? == <br> What would happen if you woke-up one day with a horrible craving for blood?<br> What if you woke up, then slowly realized that you were invisible, would you get dressed out of habit? <br> What if you woke-up one day both hungry and invisible? What would you do?<br> These are questions writers may consider when approaching fictional narratives. Stories about ghosts, angels, zombies and vampires are popular with modern readers, yet why do people write about vampires? Should you?<br> <br> Perhaps writing creatively about a fascinating subject is a bit of a dream. In order to first figure out what to write, some people may choose to gather together with other writing students to consider and experiment with ideas and techniques of use to other Writers. <br> Classes that encourage creative writing, may encourage exploration of fascinating subjects, such as vampires. <br> Exploration of unusual subjects can be rewarding to the creative spirit!<br> <br> Creative writing is a self-developmental process involving your creativity, using established techniques of the Writer’s craft, shaped by your level of honesty. <br> In creative writing classes, your story is not just your creative expression, each story you make takes time to write. This is similar to a window allowing people to share in the communication process. You don’t just share common norms about spelling, grammar, or idiomatic expressions used by normal people, your story can share information about how a group of people reacted to life-altering events. Your stories can in a general sense, reflect the society and times you observe and write about.<br> <br> Because every writer is advised to “write what you know,” you may willingly look for safe ways to write what you know, creatively, <br> in a non-factual manner that may not share factual information, yet will express your emotions, or will reflect the feelings of everyone.<br> Creative writing is about telling a story in a expressive, original manner. Techniques like tone, meaning how to express the right mood, emotional intensity, or level of humor, meaning how we tell the story using the right tone to a reader who is unable to hear you, or hear the people your story will reflect, may become easier after we have developed better writing skills. <br> <br> Creative writing is a subject about developing better writing skills, and allowing honest expression, often in non-factual, creative ways. <br> <br> Writers who write about the vampires from their imagination may be following their own personal creative spirit. '''WARNING: <u>Vampires of the imagination in action!</u>''' Giving warnings against vampires of the imagination maybe a useful device writers could explore. Typical vampires of the imagination are not friendly characters, they seem to possess unusual traits and characteristics. Vampires are not popular, almost un-loveable and very problematic. {| class="wikitable" |+COMMON VAMPIRE-IMAGINATION TRAITS + CHARACTERISTICS: !Traits !Characteristics |- |Pale / Deadly pale |Enjoy isolation / Loner personality |- |Long fangs / Fang-ish teeth |Predator personality |- |Thin |Alpha Male type |- |Black hair / Brown Hair |"Energy Vampire" : Negativity, overly dramatic, hostile rages, complaints and sad stories. |- |Re-animated corpse with failing body issues. | |} Vampires of the imagination that seem to be re-animated, walking corpses, some with dominate alpha-male behaviors and sharp cuspids, could be a terror, a monster, or a walking nightmare to a town, or neighborhood. It is easy for Writers to warn their readers against such a vampire [...of the imagination], yet what about vampires with subtle negative energy influences? What of Energy vampires and other less monster-ish vampires of the imagination? {| class="wikitable" |+Supernatural Vampire Traits !Traits that are supernatural !Mythological Creature |- |Immortality <br> Drinking blood <br> Sunlight Poisoning <br> Heightened senses <br> Morphing |[[File:"Le_Vampire".jpg|thumb|"Le Vampire"]] |} <br> Vampire stories found in Eastern European Folklore often warn people against evil characters, or of a evil character [the antagonist] who in a malicious manner seeks to harm innocent people. Regardless of the motive, the methods are of drugging [poisoning] the victim, which often leads to the innocent person getting buried alive, and / or having their graves robbed by grave-robbers interested in robbing the rich. Many Eastern European folk stories have warnings against grave-robbers! <br> <br> Some traits for vampires of the imagination are obviously supernatural, yet other vampires of the imagination possess normal traits, yet are described as displaying unusual behaviors. In 1819, John Polidore wrote '''The Vampyre''', a fictional piece that is noted as having introduced vampires of modern Fiction. The Poet Rudyard Kipling wrote in his '''The Vampire''' in 1897 "To a rag and a bone and a hank of hair," it is implied that Kipling's vampire is realistic, thus mostly made up. <br> <br> '''Tip:''' Typically, humans have four cuspids in their mouth. Two on the bottom, and two on the top left and right side of the mouth. <br>These are the sharpest, longest teeth, they have a pointed edge and have been called "vampire teeth" by some Writers. <br> '''Question:''' Perhaps Juliet in William Shakespeare's play: Romeo and Juliet could be described by some people as a vampire of the imagination. Does William Shakespeare describe physical traits that would support this claim or unusual interpretation? Do the characters act in ways that may influence, or inspire, future imaginative vampire stories?<br> <br> Link: [[Create Vampires /Vam-Pai-Yer]] '''"How do you spell vampire?"''' <br> <br> Link: [[Create Vampires/Alternative Spelling]]<br> <br> Link: https://en.wikibooks.org/wiki/Create_Vampires/writers_who_did_not_create_vampires <br> <br> Link: [[Create Vampires/Dracula Behind Vlad-The Impaler]] Link: [[Create Vampires/What Is A Literary Trope|Create Vampires/What Is A Literary Trope - Wikibooks, open books for an open world]] Link: [[Create Vampires/What Is A Historical Construct|Create Vampires/What Is A Historical Construct - Wikibooks, open books for an open world]] <br> <br> === References: === [[https://healthpsychologyconsultancy.wordpress.com/2012/07/13/the-energy-vampire-personality-type/%7Chttps://healthpsychologyconsultancy.wordpress.com/2012/07/13/the-energy-vampire-personality-type/]] wordpress.com Reviewed: 8/19/2022 [[https://theconversation.com/five-vampire-traits-that-exist-in-the-natural-world-104957%7Chttps://theconversation.com/five-vampire-traits-that-exist-in-the-natural-world-104957]] theconversation.com [[https://www.dictionary.com/browse/cuspid%7Chttps://www.dictionary.com/browse/cuspid]] www.dictionary.com <br> <br> <noinclude>{{Chapter navigation with TOC||Cultural_Construct|TOC mini}}</noinclude> <br> {{BookCat}} 1wuvqqdfnryd09exlqv1mulq5g8rag4 Create Vampires/Dracula Behind Vlad-The Impaler 0 448450 4675385 4670338 2026-10-10T00:54:54Z 3MMPEYTON 3393808 4675385 wikitext text/x-wiki == Dracula Behind Vlad - The Impaler == <br> Sometimes Writers will mock their times, or the leaders in their society through parody, or through satire. In some countries Writers have the freedom to mock real men in Politics, or of great military influence who seem, in deed, like real monsters. <br> In History, there are a few real monsters, men who we will remember for their cruelty, or for their massive injustices. This does not appear to be the case with Dracula, a novel character considered "inspired by" Vlad The Impaler. Because of Bram Stoker, a popular Irish Writer, Vlad came to be known as the <nowiki>''</nowiki>original<nowiki>''</nowiki> Dracula. It is ironic that the fictional character, Dracula, is well known yet the historic man, Vlad, a Prince from a Romanian royal family, is less known. According to one writer / Historian, "...as he wrote Dracula, he borrowed certain aspects of Vlad's life and wove them in with local folklore from the region." <br> Vlad, a special Prince of Romania, is a difficult subject to research. His Political influence is greatest in Romania, as is his mythic achievements. Vlad seemed to have influenced local folklore before Bram Stoker wrote his novel, <u>Dracula</u> in 1897. <br> Estimates puts the number of people Vlad is rumored to have killed at around 80,000 people. That seems questionable, it seems unlikely for 1 man to have murdered [directly] a large chunk of the Romanian population. Although it was never rumored by the people who tell, and re-tell folk stories, that Vlad drank blood, he is known as the person behind many bloody impalements and beheadings. <br> According to Wikipedia.com, "Offences where impalement was occasionally employed included contempt for the state's responsibility for safe roads and trade routes by committing highway robbery or grave robbery, violating state policies or monopolies, or subverting standards for trade. Offenders have also been impaled for a variety of cultural, sexual, and religious reasons." [[wikipedia:Vlad_the_Impaler|[wiki/Vlad_the_Impaler]]]<br> <br> Vlad's father was a ruler of Wallachia, a territory between the Ottoman Empire and Europe, a country whose modern name is now known as Romania (southern). {| class="wikitable" |+ |- ! 5 Facts About Vlad - The Romanian Prince |- | Father: Vlad Dracul |- | Mother: Cneajna |- | Born: 1428 - 1431 |- | Year of Reigns: 1448, 1456 - 1462, 1476 |- | Died: December 1476 - January 1477 |} <br> '''<u>Why Create Vampires? Legal Considerations</u>''' <br> For many legal reasons, people are not allowed to poison then legally bury other people alive, nor are people allowed to rob another person's grave. <br> When we hear about the grim and bloody punishments Vlad- The Impaler inflicted on grave robbers and other lawless thieves, we may start to wonder, why create vampires? <br> <br> It is rumored that Vlad - The Impaler, Prince of Wallachia (a region now known as southern Romania), ran spikey poles through his enemies during the middle of the 14th century. Vlad may have impaled hundreds, worse, many of the impaled were left outside his city on display as a warning to scare off invaders and robbers, including grave robbers! Many folk stories about the Prince of Wallachia circulate where folk stories are written and read. <br> <br> When vampire folklore is reviewed, we learn about History, and about people from other cultures, many who struggled with, and for their humanity. We learn of the methods (sometimes bloody) people used to solve problems, and we may wonder how our society would fairly solve our problems while staying humane. We may also wonder about other folk stories from around the world, such as the zombie-person, the demon-person, or the hungry ghost-person. How does a human get turned into a hungry ghost-person? <br> <br> <br> Link: [[Create_Vampires/Factual_Basis_For_Vampires]] <br> <br> === Reference: === <u>The World's Most Glorious And Notorious Rulers: The Great And The Terrible And How They Got Their Names"</u> by JoAnne O'Sullivan. Copyright 2020 by JoAnne O'Sullivan. Published by Running Press Kids, an imprint of Perseus Books, LLC. ISBN: 978-0-7624-9661-7 <br> <br> <br> <noinclude>{{Chapter navigation with TOC||HowCulturalTraditionsShapedVampireTraits|TOC mini}}</noinclude> <br> {{BookCat}} onn1u9funlfvm4pb2ays8i33y0v7wor Transportation Deployment Casebook/2023/Civilian freight in China 0 452678 4675415 4243264 2026-10-10T04:07:44Z CommonsDelinker 49843 Removing [[:c:File:Civilian_freight_in_China.jpg|Civilian_freight_in_China.jpg]], it has been deleted from Commons by [[:c:User:Krd|Krd]] because: [[:c:Commons:Deletion requests/File:Civilian freight in China.jpg|]]. 4675415 wikitext text/x-wiki == '''Introduction to Civilian freight''' == Air transportation has the advantages of speed and mobility and is an important way of modern passenger transportation, especially long-distance passenger transportation. It is also an indispensable mode of transportation for international trade, transportation of valuable goods, fresh cargoes and precision instruments. Air transportation has six characteristics: commodity, service, international, paramilitary, capital, technology and risk-intensive and natural monopoly.<ref>https://xueshu.baidu.com/usercenter/paper/show?paperid=f199825b84e455984b936eba6f4d2b79&site=xueshu_se[1]黄宇. 中国航空货运业发展研究[J]. 城市建设与商业网点, 2009, 000(029):212-214.</ref> === Essential Technological Characteristic--Aircraft === Modern aircraft are mainly fixed-wing aircraft. The aircraft consists of wings, fuselage, flaps, spoilers, manoeuvring surfaces, tail assembly, landing gear and power plant.<ref>[http://history.nasa.gov/SP-09-511.pdf http://history.nasa.gov/]</ref> === Basic Technology === The aircraft wing mainly provides lift to keep the aircraft in the air. The power generated by the aircraft must be able to lift the full weight of the aircraft, which includes fuel, all passengers and cargo. The fuselage of the aircraft is designed as a streamlined fuselage to reduce drag in flight. The flaps are located on the trailing edge of the wings and are used mainly during the landing and take-off phases to increase lift while reducing airspeed. Spoilers are used to disrupt the airflow over the wings, thereby quickly reducing the lift acting on the aircraft's wings. Manoeuvring surfaces are used to control the aircraft's attitude and can be used to manoeuvre and control the aircraft's tail assembly. The tail section has vertical and horizontal stabiliser surfaces which are used to provide stability to the aircraft. The horizontal stabilisers prevent the aircraft from jerking up and down. The vertical stabiliser prevents the aircraft from oscillating from side to side. The levelling tabs are generally fitted to the aileron surfaces and the rear of the rudder, and their function is to ensure that the aircraft is flown in a stable and balanced condition. The landing gear supports the aircraft in the water or on the ground and at rest during landing and take-off. The wheels of most aircraft are mounted on the shock-absorbing struts of the landing gear. The engines and power units are located under the wings and provide the aircraft with the thrust to advance through the air.<ref>'''Airplane Parts and [https://www1.grc.nasa.gov/beginners-guide-to-aeronautics/airplane-parts-function/ Function]'''</ref><ref>Aircraft Theory of [https://www.aircraftsystemstech.com/2021/03/aircraft-theory-of-flight-part-1.html Flight]</ref> === Main Advantages === '''1'''. The speed of transport is high. Modern jet transport aircraft are generally in about 900 miles per hour, Concorde up to 1350 miles per hour. Air routes are not restricted by ground conditions, generally can fly in a straight line between two points, the range is much shorter than the ground, and the farther the distance, the more significant the advantages of fast. '''2'''. Safety and accuracy. Air transport is safer, the rate of damage to the goods is low, to ensure the quality of transport, such as the use of air containers, it is more secure. Aircraft navigation has a certain schedule, can guarantee the arrival on time. '''3'''. Simple procedures. Air transport in order to reflect its fast and convenient characteristics, for the shipper to provide a simple consignment procedures, but also by the freight forwarder to pick up the goods and for its all transport procedures. '''4'''. save packaging, insurance, interest and storage costs. Due to the speed of air transport, goods in transit time is short, the cycle is fast, the inventory can be relatively reduced, the funds can be quickly recovered. === Main Markets === The main markets can be considered in several ways: '''1'''. There are a considerable number of intercontinental markets in international trade today, where competition for goods is fierce, market conditions are rapidly changing and time is efficiency. Air cargo transportation has the characteristics of faster than other modes of transport, can make the import and export of goods can grab the market, sell at a good price, enhance the competitiveness of goods, the development of international trade has played a great role in promoting. '''2'''. Air cargo transportation is suitable for the transportation of fresh and perishable and seasonal commodities. These commodities have very high requirements for time, and if the transport time is too long, the commodities may become waste products and cannot be supplied to the market; seasonal commodities and emergency goods must be transported to the market to fight for time, otherwise they will become stagnant commodities. The use of air transport, can keep fresh and alive, but also conducive to opening up the long-distance market. '''3'''. The use of aircraft transportation like computers, precision instruments, electronic products, complete sets of equipment in the precision part, precious and rare metals, watches, photographic equipment, textiles, clothing, silk, leather products, Chinese and Western medicine, handicrafts and other high-value goods, to adapt to the characteristics of the rapid changes in the market. The advantages of speed, safety and accuracy can be used to make up for the high freight costs. '''4'''. Air transport is an important part of international multimodal transport. In order to give full play to the special characteristics of air transport, in places that cannot be reached directly by air transport, can also be used in the form of joint transport, such as common land-air intermodal transport, sea-air intermodal transport, land-air-land intermodal transport, and even land-sea-air intermodal transport, with other modes of transport, so that various modes of transport show their strengths and complement each other.<ref>[1]刘少成.中国航空货运发展与前景[J].国际航空,2007,(4):32-34.[https://doc.taixueshu.com/journal/20070127gjhk.html]</ref> == '''Before the advent of air freight''' == Before the advent of air freight, the three main modes of transport were generally by road, rail and water. And these three modes of transport had limitations. '''1'''.Physical space and geographical limitations in road transport '''2'''.High cost of money and time for water transport '''3'''.The instability, insecurity and untimeliness of rail and road transport === The Scene Before The Modes === Before the First World War, the world was dominated by road transport. Among these were trams, which were popular. But since the invention of the aeroplane, public curiosity and exploration of other countries has increased. It was discovered that both road transport and rail transport were less fast and carried less volume compared to aircraft. After the First World War, economies and trade between countries became more frequent. In order to explore new markets and develop local economies more quickly, people also began to explore air transport. The quest for faster transport, lower transport costs and more efficient, safe and comfortable transport has led to interest in new possibilities for air transport. === Technologies === ===== TCAS (Traffic Collision Avoidance System) ===== The TCAS plays an important role in ensuring flight safety. TCAS is able to predict future hazards and alert pilots to avoid them by detecting conflicts with aircraft in the vicinity. The aviation industry began working on airborne collision avoidance systems as early as the 1950s, but their application was not widespread due to technical problems. It was not until the 1980s, after many air crashes, that the first generation of air collision avoidance systems were developed. The TCAS I system operates by using a transponder on the aircraft to determine the aircraft's heading and altitude so that the aircraft can display the distance and altitude between each other. ===== Autopilot system ===== An autopilot is a device that automatically controls the aircraft according to certain technical requirements. It is used in manned aircraft to relieve the pilot of the burden of flying the aircraft automatically at a certain attitude, heading, altitude and Mach number.<ref>An English-Chinese Maritime [https://gongjushu.oversea.cnki.net/oversea/R200703007.html Dictionary]</ref> ===== ''Civil Aviation Law of the People's Republic of China'' ===== It is a law enacted by China to safeguard the country's airspace sovereignty and civil aviation rights, to guarantee the safe and orderly conduct of civil aviation activities, to protect the legitimate rights and interests of all parties involved in civil aviation activities, and to promote the development of civil aviation.<ref>[1]陈金良, 孙松波. 创立中华人民共和国航空法的必要性分析[J]. 商情, 2009(24):1.[https://xueshu.baidu.com/usercenter/paper/show?paperid=1aa8ce2af6f275ab5b521f4db11c57a2&tn=SE_baiduxueshu_c1gjeupa&ie=utf-8&site=baike]</ref> ===== ''Rules for the Domestic Carriage of Goods by Civil Aviation of China'' ===== were formulated in accordance with the Civil Aviation Law of the People's Republic of China in order to strengthen the management of air cargo transportation and maintain the normal order of air transportation.<ref>中国民用航空货物国内运输规[http://www.caac.gov.cn/XXGK/XXGK/MHGZ/201511/t20151102_8566.html 则]</ref> == '''Birthing phase''' == === Early Market Development === On November 2, 1949, the Political Bureau of the Central Committee of the Communist Party of China decided to establish a Civil Aviation Bureau under the People's Revolutionary Military Committee, under the guidance of the Air Force. 1950, when the new Chinese civil aviation was first established, there were only 30 small aircraft, with an annual passenger traffic of only 10,000 people and a total transport turnover of only 1.57 million tons of kilometres.<ref>https://kns.cnki.net/KCMS/detail/detail.aspx?dbcode=CPFD&filename=DZGY200309001033[2]王立新. 试论新中国民航事业的发展历程[C]//当代中国研究所.当代中国研究所第三届国史学术年会论文集.当代中国出版社,2003:307-316.</ref> The initial market niche was based on military control in a state of war, giving priority to the transport of goods for the military. The cargoes were mostly military or emergency supplies. After the end of the war, the military gradually reduced the use of civilian airports and civilian passenger aircraft, thus gradually shifting this segment to civilian cargo. Functional enhancement is more of a role in maintaining stability and improving the effectiveness of all aspects of transport; functional discovery plays a role in progressive development, combined with policy to continuously innovate the route forward. === Policy in the 'Birth Phase' === Strategic Decision: China resumed participation in ICAO activities in 1974. In 1978, the Third Plenary Session of the Eleventh Central Committee made the strategic decision to "shift the focus of the Party's work and the nation's attention to socialist modernisation", ushering in a new period of development for China's socialist cause. In order to meet the requirements of this new situation, China's civil aviation management system underwent a fundamental reform and a period of rapid development of China's air transport industry began. On February 14, 1980, Deng Xiaoping pointed out that "civil aviation must be enterprise". On March 5 of the same year, the Chinese government decided to separate civil aviation from the military establishment, and changed the Civil Aviation Administration of China from being subordinate to the Air Force to being an agency directly under the State Council, with enterprise management.<ref>https://xueshu.baidu.com/usercenter/paper/show?paperid=f199825b84e455984b936eba6f4d2b79&site=xueshu_se[3]庾晋, 周洁, 白木. 发展我国航空货运[J]. 交通与运输, 2002(4):2.</ref> In March 1980, China's civil aviation was separated from the military establishment and the government and enterprises were separated, taking the path of enterprise.<ref>http://www.niceflt.com/h-nd-2474.html<nowiki/>建国后中国民航运输业发展简史</ref> In 1987, the Chinese government decided to reform the civil aviation industry with a system characterised by the separation of airlines and airports. Six national backbone airlines, namely Air China, China Eastern Airlines, China Southern Airlines, China Southwest Airlines, China Northwest Airlines and China Northern Airlines, were established to operate independently, be self-financing and compete on an equal footing. The policy and strategy re-birth phase is more of a protective role. Backed by the state and the industry as a whole to promote air cargo development. The development of freight in China is mostly based on the more mature policies of the United States, and combined with China's own development, so as to conclude the development of policies suitable for China's freight. When the operation of this mode of transport is stable, the development of areas suitable for the development of air cargo, and seek to cooperate with other countries to learn from each other to complement each other. Some of the policies that will help the development of air cargo in China are as follows: '''Tax incentives''': The Chinese government has implemented a number of tax incentives for air cargo companies. '''Easing market access''': As most Chinese freight is international, seeking cooperation is best combined with private and state-owned capital. China has gradually relaxed access restrictions on foreign-owned air cargo companies and encouraged domestic and foreign air cargo companies to compete in China's air cargo market. '''Strengthening international cooperation''': The Chinese government is actively promoting cooperation with international air cargo companies to facilitate the international development of Chinese air cargo companies. '''Improving air cargo technology''': China has increased its investment in air cargo technology research and development to promote technological innovation and improve the efficiency and quality of air cargo. == '''Growth Phase''' == With WTO accession, an air service agreement was signed between the US and China in 1999, which calls for an increase in the number of flights between the two sides to 54 flights per week, including 37 passenger and 17 cargo flights, by 2004. In 2007, a more liberalised agreement was drafted to increase the number of scheduled weekly flights to 249 from 2010, with 121 passenger and 128 cargo flights. === Private === The Chinese government has started to allow foreign participation in state-owned airlines at a much higher rate. Prior to 2002, foreign equity participation was restricted in policy to a maximum of 49%, and in practice most foreign investors at that time had a participation of around 30%. The role of the private sector (business) is primarily to actually run the air cargo business. They have the experience and expertise to provide an efficient and professional service, and are also the main drivers of innovation and technological progress. They are able to continuously optimise operational processes, improve service quality and customer experience, and enhance business profitability. === Public === In 2008, the Civil Aviation Administration of China (CAAC) issued "Ten Measures to Promote the Stable and Rapid Development of the Industry in Response to the International Financial Crisis", which proposed to "expedite the approval of eligible cargo airlines and branches that have applied for and All airlines have to be approved before they can be listed and established. The role of the public sector (government) is mainly to provide support in terms of infrastructure development, policy development and regulation. === Policy === Another important concession is that the Chinese government has begun to allow foreign participation in state-owned airlines at a greater rate. In early 2004, the Civil Aviation Administration of China (CAAC) promulgated the "Opinions on Several Policies and Measures to Accelerate the Development of Domestic Air Cargo", which proposed to "liberalise access to the domestic air cargo market", i.e. to encourage the development of all-cargo airline enterprises, and to encourage the construction of cargo hubs at airports in Tianjin, Shanghai, Guangzhou, Shenzhen, Wuhan, Kunming, etc., after which cargo The rapid development of the airline industry was followed. More private cargo companies started flying between 2004 and 2008.<ref>[1]刘少成, 戈锐. 中国航空货运发展的政策选择[J]. 中国民用航空, 2006(8):4.[https://doc.taixueshu.com/journal/20202609jyz.html]</ref> There are still a number of policy issues in the Chinese air cargo industry, mainly including the following: '''Inadequate regulation of the industry''': There are still shortcomings in the regulation of the industry, with safety hazards being particularly prominent. '''Inadequate infrastructure construction''': Inadequate infrastructure construction in some air cargo airports and air logistics parks has led to low freight efficiency and difficulties in meeting market demand. '''Lack of standardisation and informatisation''': The lack of a standardised and informative transport service management system has led to opaque information and inefficient transport in the air cargo market, making it difficult to achieve efficient management. To address these issues, industry regulation should be strengthened, investment in civil aviation-related infrastructure should be increased, and standardisation and information technology should be continuously promoted.<ref>[1]黄传强.对中国航空货运发展70年的思考[J].经营者,2020,(6):3-4.[https://doc.taixueshu.com/journal/20202609jyz.html]</ref> During this period, the policy environment was favourable for air cargo development, with government support and policy incentives providing a better market environment and more opportunities for businesses to grow. == '''Mature Phase''' == Following the global financial crisis in 2008, the economic slowdown or recession led to a reduction in demand for cargo, which in turn led to significant changes in the market. At the same time, traditional all-cargo airline companies were forced to cease operations, restructure or transform their development, but individual companies are still seeking a way out. The opportunity to redevelop in 2016, the Civil Aviation Administration of China issued a "notice on strengthening the market access management of new airlines", proposed "to support investors to set up all-cargo airlines, to carry out cargo market, improve the cargo route network, and promote the development of air cargo", which brings new development for China's cargo airline enterprises. This brings new opportunities for the development of Chinese cargo airlines. During the development of China's air cargo industry, attempts are constantly being made to adjust the air cargo market, competitive conditions and policy values in three areas. '''1'''.On the market side, air cargo companies need to adjust to market demand. For example, opening up new routes and increasing cargo capacity to meet market demand. '''2'''.In terms of competitive conditions, air cargo companies need to continuously improve their competitiveness in order to maintain their dominant position in the market. '''3'''.In terms of policy values, air cargo companies need to pay attention to policy changes and adjustments in order to cope with the good or bad effects of policies. == '''Opportunity to “Re-invent” the mode''' == '''Digitisation''': Air cargo companies can improve efficiency and reduce costs by increasing the digitisation of their systems and processes. '''Green development''': Air cargo companies can adopt environmentally friendly technologies, such as the use of low carbon fuels, to reduce carbon emissions and environmental pollution and achieve sustainable development. == '''Quantitative Analysis''' == According to the statistics of the National Bureau of Statistics of China<ref>[http://www.stats.gov.cn/ DATA]</ref> for the past years, the data is: <math>{\displaystyle S(t)=S_{max}/[1+exp(-b(t-t_{i}))]}</math> In this formula: * <math>S(t)</math> is the status measure (Air freight volume (million tons)) * <math>t</math> is time (usually in years) * <math>t_i</math> is the inflection time (year in which is achieved) * <math>S_{max}</math> is saturation status level * <math>b</math> is a coefficient Estimate <math>S_{max}</math> and <math>b</math> were made using the following formula: <math>Y=bX+c</math> In this formula: <math>Y=\ln(Passenger/(K-Passenger))</math> <math>X=Year</math> {| class="wikitable" |+'''Table :'''Important values of K, b, t<sub>0</sub>, r<sup>2</sup> !Variable !Description !Value |- |S(t)(K) |Saturation Status Level |31200 |- |b |Coefficient |0.173533 |- |r<sup>2</sup> |R-square |0.989661217 |- |t<sub>0</sub> |Inflection Time |2011.426 |} The projections are relatively appropriate. The square of R in the forecast estimates is relatively close to 1. Although there are several clear signs of growth and decline over the 47 years of the statistics, they do not affect the overall estimated forecast and the final forecast is similar (leaving aside the decline in the 2020 data due to exceptional reasons). As can be seen from the graphs formed by the data, from 1974 to 2005 there was a relatively even and steady rise, which I consider to be the birth period of China's air cargo; then, from 2005 to 2012, there were a number of fluctuations, which I consider to be the "pain period" that must be experienced during the growth phase After that, from 2012 to 2019, the figures continue to rise again, indicating that the industry has reached a mature stage, so I consider this period to be a period of maturity and growth for China's air cargo; and finally, the figures for 2020, when the industry is in recession for some specific reasons, are predicted to grow until the industry picks up after this year It will be difficult to return to the previous state and the figures will hardly rise compared to those before 2020. This suggests that China's air freight will be severely affected by the environment, especially the adverse effects. == ''' References''' == <references /> {{BookCat}} 5xwun0n9ky1s8of4diy3nymakh6r2oh User:JJPMaster (bot)/markAdmins-Data.json 2 471107 4675445 4674441 2026-10-10T10:49:27Z JJPMaster (bot) 3488561 Bot: Updating markAdmins data 4675445 json application/json { ".snoopy.": [ "global-rollbacker", "editor" ], "1234qwer1234qwer4": [ "editor", "steward" ], "157yagz5r48a5f1a1f": [ "editor" ], "1997kB": [ "global-rollbacker", "global-renamer", "editor" ], "1F616EMO": [ "global-renamer" ], "1exec1": [ "transwiki", "editor" ], "1sfoerster": [ "editor" ], "20041027 tatsu": [ "global-rollbacker" ], "2005-Fan": [ "transwiki", "editor", "uploader" ], "331dot": [ "global-renamer" ], "33rogers": [ "editor" ], "3MMPEYTON": [ "editor" ], "4PlayerChess": [ "autoreview" ], "4pillars": [ "editor" ], "511KeV": [ "global-rollbacker" ], "94rain": [ "global-rollbacker", "editor" ], "A R King": [ "editor" ], "A Sulaiman Z": [ "editor" ], "A.K.Karthikeyan": [ "editor" ], "A09": [ "steward" ], "AFBorchert": [ "vrt-permissions" ], "AIProf": [ "editor" ], "ALittleSlow": [ "autoreview" ], "AManWithNoPlan": [ "editor" ], "ATannedBurger": [ "global-renamer" ], "AVRS": [ "editor" ], "Aafi": [ "global-renamer", "vrt-permissions" ], "Abenwagner": [ "editor" ], "Abigor": [ "editor" ], "Abitt002": [ "editor" ], "Abyssal": [ "editor" ], "Acagastya": [ "autoreview" ], "Acalamari": [ "global-renamer" ], "Acarologiste": [ "editor" ], "AcidBat": [ "editor" ], "Acrow005": [ "editor" ], "Actualist": [ "editor" ], "Adalvis": [ "editor" ], "Adart001": [ "editor" ], "Adavyd": [ "global-renamer" ], "Addihockey10": [ "editor" ], "Addihockey10 (automated)": [ "editor" ], "Adrignola": [ "editor" ], "AdventureWriter": [ "editor" ], "Aelxen": [ "global-renamer" ], "Aferg006": [ "editor" ], "Afett001": [ "editor" ], "Affe2011": [ "global-rollbacker" ], "Agnerf": [ "editor", "uploader" ], "Agpires": [ "editor" ], "Agricola": [ "editor" ], "Agusbou2015": [ "editor" ], "Ah3kal": [ "editor" ], "Ahecht": [ "global-renamer", "vrt-permissions" ], "Ahonc": [ "global-renamer", "vrt-permissions" ], "AiClassEland": [ "editor" ], "Ainz Ooal Gown": [ "editor" ], "Airpmb": [ "editor" ], "Ajraddatz": [ "editor", "steward" ], "Aka": [ "vrt-permissions" ], "Alanah.97": [ "autoreview" ], "Albertoleoncio": [ "steward", "vrt-permissions" ], "Albmont": [ "editor" ], "Alchimista": [ "vrt-permissions" ], "Aldnonymous": [ "editor" ], "Aledownload": [ "editor" ], "Alexey Vazhnov": [ "editor" ], "Alexlatham96": [ "editor" ], "Alextejthompson": [ "editor" ], "Alison": [ "global-rollbacker" ], "AllenZh": [ "editor" ], "AlvaroMolina": [ "editor" ], "AmandaNP": [ "steward" ], "Ambrevar": [ "editor" ], "Amcgail": [ "editor" ], "Ameisenigel": [ "global-rollbacker", "global-sysop", "ombuds", "editor", "vrt-permissions" ], "AmieKim": [ "editor" ], "Amire80": [ "global-sysop" ], "Anachronist": [ "editor", "vrt-permissions" ], "Ancient9983": [ "editor" ], "Andrew janke": [ "editor" ], "Andriy.v": [ "vrt-permissions" ], "Andyross": [ "editor" ], "Anil Shaligram": [ "editor" ], "Animajosser": [ "editor" ], "Anne Correia": [ "editor" ], "Anonim Şahıs": [ "editor" ], "Anonymity": [ "editor" ], "AnotherEditor144": [ "autoreview" ], "Antanana": [ "vrt-permissions" ], "Antandrus": [ "editor" ], "Anthere": [ "editor" ], "AntiCompositeNumber": [ "steward", "vrt-permissions" ], "Antonizoon": [ "editor" ], "Antonw": [ "editor" ], "Apfelmus": [ "editor" ], "Aphoneyclimber": [ "editor" ], "Aplucas0703": [ "vrt-permissions" ], "Apocheir": [ "editor" ], "Aqurs1": [ "global-rollbacker", "global-renamer", "global-sysop" ], "AramilFeraxa": [ "steward" ], "Arch dude": [ "editor" ], "Archolman": [ "editor" ], "Arcticocean": [ "ombuds" ], "ArdentPerf": [ "editor", "uploader" ], "Arian": [ "global-renamer" ], "Arlen22": [ "transwiki", "editor" ], "Armchair": [ "editor" ], "Arno-nl": [ "editor" ], "Arrow303": [ "vrt-permissions" ], "Arthurvogel": [ "editor" ], "Artoria2e5": [ "editor" ], "Arturoiochoam": [ "editor" ], "Arunreginald": [ "editor" ], "AshLin": [ "editor" ], "Atcovi": [ "sysop", "global-rollbacker" ], "Athrash": [ "editor" ], "Atiedebee": [ "editor" ], "Atlas.Spheres": [ "editor" ], "Atsme": [ "vrt-permissions" ], "Auremel": [ "editor" ], "Austncorp": [ "editor" ], "AuthorsAndContributorsBot": [ "autoreview" ], "Avicennasis": [ "editor" ], "Avraham": [ "global-renamer", "editor" ], "Awesome Princess": [ "editor" ], "Axpde": [ "editor" ], "Az1568": [ "global-rollbacker" ], "Az2008": [ "editor" ], "Azotochtli": [ "editor" ], "B.Korlah": [ "editor" ], "BD2412": [ "editor" ], "BORGATO Pierandrea": [ "editor" ], "BRPever": [ "global-rollbacker", "global-sysop" ], "BRUTE": [ "editor" ], "Backfromquadrangle": [ "editor" ], "Baiji": [ "global-rollbacker" ], "Bakasakali": [ "editor" ], "Balaji.md au": [ "editor" ], "BarkingFish": [ "editor" ], "Barras": [ "steward" ], "Base": [ "steward", "vrt-permissions" ], "Bastique": [ "editor" ], "Bautsch": [ "editor" ], "BeardMD": [ "editor" ], "Beetstra": [ "global-rollbacker" ], "BenTels": [ "editor" ], "Bencemac": [ "global-rollbacker", "global-renamer", "vrt-permissions" ], "Benjamin J. Burger": [ "editor" ], "Benjamin.doe": [ "editor" ], "Benrattray": [ "editor" ], "Benson Muite": [ "editor" ], "Bentbracke": [ "editor" ], "Bequw": [ "editor" ], "Bert Niehaus": [ "autoreview" ], "BethNaught": [ "editor" ], "Beuc": [ "editor" ], "Bhardwaj Anil": [ "autoreview" ], "BiT": [ "editor" ], "Bigdelboy": [ "transwiki" ], "Bignose~enwikibooks": [ "editor" ], "Billinghurst": [ "editor" ], "Billymac00": [ "editor" ], "Biplab Anand": [ "global-rollbacker", "global-sysop" ], "Birdofadozentides": [ "editor" ], "BitterAsianMan": [ "editor" ], "Bluefoxicy": [ "editor" ], "Bluerasberry": [ "vrt-permissions" ], "BobChan2": [ "editor" ], "Bobby Cohn": [ "global-renamer" ], "Bodhisattwa": [ "vrt-permissions" ], "BoldLuis": [ "editor" ], "Borhan": [ "global-rollbacker", "global-renamer", "vrt-permissions" ], "Boris1951zz": [ "editor" ], "Bpenn005": [ "editor" ], "Brewster239": [ "global-rollbacker" ], "Bridget": [ "global-rollbacker", "editor" ], "Brienna.Hall77": [ "editor" ], "Brim": [ "editor" ], "Brittanys": [ "editor" ], "Bronwynh": [ "editor" ], "Bsadowski1": [ "editor", "steward" ], "Buddpaul": [ "editor" ], "Bullercruz1": [ "editor" ], "Buncic": [ "editor" ], "Bunnypranav": [ "global-renamer" ], "BurakD53": [ "editor" ], "Burkep": [ "editor" ], "ByGrace": [ "editor" ], "Bykim2012": [ "editor" ], "C1203sc": [ "editor" ], "CJakes1": [ "editor" ], "CKWG - Ada Magica": [ "editor" ], "Cabayi": [ "global-renamer" ], "CaitlinCarbury": [ "autoreview" ], "CalciumTetraoxide": [ "editor" ], "CalendulaAsteraceae": [ "editor" ], "Caliburn": [ "editor" ], "CallumPoole": [ "editor" ], "Calvin.Andrus": [ "editor" ], "Cameron11598": [ "editor" ], "Camouflaged Mirage": [ "editor" ], "Captain-tucker": [ "vrt-permissions" ], "Carlo.milanesi": [ "editor" ], "Caro de Segeda": [ "editor" ], "CarsracBot": [ "editor" ], "Catermark": [ "editor" ], "Cecila123": [ "autoreview" ], "Cedar101": [ "editor" ], "Champion": [ "editor" ], "Chaojidage": [ "editor" ], "Chaojoker": [ "editor" ], "Chaotic Enby": [ "autoreview", "global-renamer" ], "Chapka": [ "editor" ], "Charidri": [ "editor" ], "Charleneabeana": [ "autoreview" ], "Charles Jeffrey Danoff": [ "editor" ], "CharlesHoffman": [ "editor" ], "Chazz": [ "editor" ], "Chelseafan528": [ "editor" ], "Cheryl2012": [ "editor" ], "Chescargot": [ "vrt-permissions" ], "Chi Sigma": [ "editor" ], "Chinmayee Mishra": [ "ombuds" ], "Chongkian": [ "editor" ], "Chowbok": [ "editor" ], "ChrisHodgesUK": [ "editor" ], "ChrisWallace": [ "editor" ], "Chriswaterguy": [ "editor" ], "Chuckhoffmann": [ "editor" ], "Church of emacs": [ "global-rollbacker" ], "Cic": [ "editor" ], "Ciell": [ "vrt-permissions" ], "Cilantrohead": [ "editor" ], "Cintilo": [ "editor" ], "Circuit dreamer": [ "editor" ], "Circuit-fantasist": [ "editor" ], "Civvì": [ "global-rollbacker", "global-renamer" ], "Ckwalker": [ "editor" ], "Clairerusselll": [ "autoreview" ], "Cloidl": [ "autoreview" ], "Cmsmcq": [ "editor" ], "Cnrowley": [ "editor" ], "CocoaZen": [ "editor" ], "CoconutOctopus": [ "global-renamer" ], "Codename Noreste": [ "sysop", "global-rollbacker", "interface-admin" ], "Codename Noroeste": [ "editor" ], "Codinghead": [ "editor" ], "CommonsDelinker": [ "autoreview" ], "Comp.arch": [ "editor" ], "Conan": [ "editor" ], "Cormullion": [ "editor" ], "Count Count": [ "steward" ], "Coupe": [ "editor" ], "Courcelles": [ "global-rollbacker", "editor" ], "CptViraj": [ "global-rollbacker", "global-renamer", "global-sysop" ], "Craignewland": [ "editor" ], "Craxd1": [ "editor" ], "CrazyEddy": [ "editor" ], "Cremastra": [ "editor" ], "Cremastra (JWB)": [ "autoreview" ], "Cromium": [ "editor" ], "Cromwellt": [ "editor" ], "Crystal East": [ "editor" ], "Cttcraig": [ "editor" ], "Cultures17": [ "editor" ], "Cultures33": [ "editor" ], "Cultures4": [ "editor" ], "Cultures92": [ "editor" ], "CunninghamJohn": [ "autoreview" ], "Curtaintoad": [ "editor" ], "Cyberpower678": [ "global-rollbacker" ], "Céréales Killer": [ "global-renamer" ], "D1n05aur5 4ever": [ "editor" ], "DARIO SEVERI": [ "autoreview", "global-rollbacker", "global-sysop" ], "DC Slagel": [ "editor" ], "DCB": [ "vrt-permissions" ], "DD 8630": [ "editor" ], "DERDAKI ILIAS": [ "global-renamer" ], "DGerman": [ "editor" ], "DVD206": [ "editor" ], "DZadventiste": [ "editor" ], "DaB.": [ "vrt-permissions" ], "DaGizza": [ "editor" ], "Dagana4": [ "autoreview" ], "Dallas1278": [ "editor" ], "Dan Koehl": [ "editor" ], "Dan Polansky": [ "editor" ], "Dan-aka-jack": [ "editor" ], "DanCherek": [ "autoreview" ], "Danarwaller": [ "editor" ], "DanielWhernchend": [ "editor" ], "Danielravennest": [ "editor" ], "Danilka5469": [ "editor" ], "Daniuu": [ "steward", "vrt-permissions" ], "DannyS712": [ "editor" ], "Darklama": [ "editor" ], "Darklilac": [ "editor" ], "Darrelljon": [ "editor" ], "DarwIn": [ "vrt-permissions" ], "Dave Braunschweig": [ "editor" ], "David L Davis": [ "editor" ], "DavidCary": [ "editor" ], "DavidCota64": [ "editor" ], "DavidLevinson": [ "editor" ], "Davidbena": [ "editor" ], "Dayshade": [ "editor" ], "Dchmelik": [ "editor" ], "Dcljr": [ "editor" ], "Dcondon": [ "editor" ], "Deepfriedokra": [ "global-renamer" ], "DejaVu": [ "global-rollbacker" ], "DennisDaniels": [ "editor" ], "Dennisblu": [ "uploader" ], "Denniss": [ "editor" ], "Der-Wir-Ing": [ "global-rollbacker" ], "DerHexer": [ "editor", "steward", "vrt-permissions" ], "Derek Andrews": [ "editor" ], "Designermadsen": [ "editor" ], "Deu": [ "global-rollbacker" ], "Dexxor": [ "editor" ], "Dezedien": [ "vrt-permissions" ], "Diandramartin": [ "autoreview" ], "Didym": [ "vrt-permissions" ], "Dino Bronto Rex": [ "editor" ], "Dirk Hünniger": [ "editor" ], "Divinations": [ "global-rollbacker" ], "Djb": [ "editor" ], "Djbrown": [ "editor" ], "Dlrohrer2003": [ "editor" ], "Dmccreary": [ "editor" ], "Doc Taxon": [ "vrt-permissions" ], "Doctorxgc": [ "editor" ], "Dom walden": [ "editor" ], "Domdomegg": [ "editor" ], "DominikTurner": [ "autoreview" ], "DonaldKronos": [ "editor" ], "DoubleGrazing": [ "global-renamer" ], "Doubleotoo": [ "editor" ], "Downdate": [ "editor" ], "Dr-Taher": [ "global-renamer" ], "Dr.Unclear": [ "editor" ], "Dreftymac": [ "editor" ], "Drpundir": [ "editor" ], "Drummingman": [ "global-rollbacker", "global-renamer", "vrt-permissions" ], "DuLithgow": [ "editor" ], "Dungodung": [ "vrt-permissions" ], "Duplode": [ "editor" ], "DustDFG": [ "editor" ], "Dyolf77": [ "vrt-permissions" ], "EDCU320RHT": [ "editor" ], "EDUC320 Sylvialiang": [ "editor" ], "EE JRW": [ "editor" ], "EMAD KAYYAM": [ "editor" ], "EPIC": [ "steward" ], "EarlGrey2005": [ "autoreview" ], "Ebe123": [ "editor" ], "Ecarew": [ "editor" ], "Edgar181": [ "editor" ], "Edit filter": [ "sysop" ], "EdoDodo": [ "editor" ], "Edornbush": [ "editor" ], "Edriiic": [ "editor" ], "Efex": [ "editor" ], "Efex3": [ "editor" ], "Effeietsanders": [ "editor", "vrt-permissions" ], "EggRoll97": [ "editor" ], "Egil": [ "editor" ], "Eihel": [ "global-rollbacker", "editor" ], "Ejs-80": [ "global-renamer" ], "Ekaroleski": [ "editor" ], "Elaurier": [ "editor" ], "Elcobbola": [ "vrt-permissions" ], "Electro": [ "editor" ], "ElfSnail123": [ "editor" ], "Eli bubo4ka": [ "editor" ], "Eliarani": [ "editor" ], "Elli": [ "global-renamer", "vrt-permissions" ], "Ellywa": [ "vrt-permissions" ], "Elmacenderesi": [ "vrt-permissions" ], "Elton": [ "editor", "steward" ], "Emha": [ "vrt-permissions" ], "EmilymDaniel": [ "autoreview" ], "Empire3131": [ "editor" ], "Encik Tekateki": [ "editor" ], "Enzomartinelli": [ "editor" ], "Eric Evers": [ "editor" ], "Erigena": [ "editor" ], "Erik Baas": [ "editor" ], "ErinNik": [ "editor" ], "Erinamukuta": [ "editor" ], "ErrantX": [ "editor" ], "EruannoVG": [ "editor" ], "Espen180": [ "editor" ], "Eta Carinae": [ "global-renamer" ], "Ethacke1": [ "editor" ], "Eumolpo": [ "editor" ], "Euphydryas": [ "global-renamer" ], "Eurodyne": [ "editor" ], "EvDawg93": [ "editor" ], "EvanCarroll": [ "editor" ], "Ewen": [ "editor" ], "Exusiai": [ "global-renamer" ], "Ezarate": [ "global-rollbacker", "vrt-permissions" ], "Fabartus": [ "editor", "uploader" ], "Faendalimas": [ "ombuds" ], "Fasten": [ "editor" ], "Faster than Thunder": [ "editor" ], "Fathoms Below": [ "global-renamer" ], "Fcorthay": [ "editor" ], "Fdena": [ "editor" ], "Federhalter": [ "editor" ], "Fehufanga": [ "global-rollbacker", "global-sysop" ], "Fekarp": [ "editor" ], "Fephisto": [ "editor" ], "Ferien": [ "global-rollbacker" ], "Fernando2812l": [ "editor" ], "Fernly": [ "editor" ], "Ffion B Thompson": [ "autoreview" ], "Fimatic": [ "editor" ], "FischX": [ "editor" ], "Fishpi": [ "editor" ], "Flattail": [ "editor" ], "FlightTime": [ "global-renamer" ], "Flolit": [ "editor" ], "Fluffernutter": [ "vrt-permissions" ], "FlyingAce": [ "global-rollbacker" ], "Fountain Pen": [ "editor" ], "Fr33kman": [ "editor" ], "FrancisFromGaspesie": [ "editor" ], "Frantsch": [ "autoreview" ], "Fredericknortje": [ "editor" ], "Fritzlein~enwikibooks": [ "editor" ], "Frozen Wind": [ "transwiki", "editor" ], "Ftaljaard": [ "editor" ], "Ftiercel": [ "editor" ], "Furrykef": [ "editor" ], "GKFX": [ "editor" ], "Galahad": [ "global-rollbacker" ], "Gampe": [ "vrt-permissions" ], "Ganímedes": [ "vrt-permissions" ], "Gary Dorman Wiggins": [ "editor", "uploader" ], "Garygaryj": [ "editor" ], "Gat lombard": [ "editor" ], "Gc211": [ "editor" ], "Geagea": [ "vrt-permissions" ], "Geekgirl": [ "editor" ], "GemmaCampbell": [ "autoreview" ], "Geoff Plourde": [ "editor" ], "Geofferybard": [ "transwiki", "editor" ], "GerbenRienk": [ "editor" ], "Gerges": [ "global-rollbacker", "global-renamer" ], "Germany Poul Ah": [ "editor" ], "Gertbuschmann": [ "editor" ], "Ggee0621": [ "editor" ], "Gifnk dlm 2020": [ "editor", "uploader" ], "Girdi": [ "editor" ], "Glaisher": [ "editor" ], "Glane23": [ "vrt-permissions" ], "Gleb713": [ "autoreview" ], "Glich": [ "editor" ], "Gllyons": [ "editor" ], "Gmasterman": [ "editor" ], "GoblinInventor": [ "editor" ], "Godsy": [ "autoreview" ], "Good afternoon": [ "editor" ], "GoreyCat": [ "editor" ], "GorgeUbuasha": [ "editor" ], "GorillaWarfare": [ "vrt-permissions" ], "Gott wisst": [ "editor" ], "Goulart": [ "editor" ], "Gpkp": [ "editor" ], "Gracebaysinger": [ "editor" ], "Graeme E. Smith": [ "editor" ], "Greatswrd": [ "editor" ], "GreenC": [ "editor" ], "Greenbreen": [ "editor" ], "Greenman": [ "editor" ], "GregXenon01": [ "editor" ], "Gretski247": [ "editor" ], "GreyCat": [ "editor" ], "Grin": [ "vrt-permissions" ], "Growl41": [ "editor" ], "Guaka": [ "editor" ], "Guanaco": [ "editor" ], "GuillermoHazebrouck": [ "editor" ], "Guus": [ "editor" ], "Guy vandegrift": [ "editor" ], "Guywan": [ "editor" ], "Gzuufy": [ "editor" ], "HJ Mitchell": [ "autoreview" ], "HLand": [ "editor" ], "HYanWong": [ "editor" ], "Ha98574": [ "editor" ], "Hagindaz": [ "editor" ], "HakanIST": [ "editor", "steward" ], "Hamish": [ "global-rollbacker", "global-renamer", "vrt-permissions" ], "Hanay": [ "vrt-permissions" ], "Hannes Röst": [ "editor" ], "Hans Adler": [ "editor" ], "Haoreima": [ "editor" ], "Happy-melon": [ "editor" ], "Harry Wood": [ "editor" ], "Harrybrowne1986": [ "editor" ], "Harv4": [ "editor" ], "Hasley": [ "editor" ], "Hazard-SJ": [ "global-rollbacker" ], "He7d3r": [ "editor" ], "HenkvD": [ "editor" ], "Herbythyme": [ "editor" ], "Hercule": [ "editor" ], "Herman darman": [ "editor" ], "HerrHartmuth": [ "editor" ], "Hethrir": [ "editor" ], "HgDeviasse": [ "editor" ], "Hippias": [ "editor" ], "Hliow": [ "autoreview" ], "Holder": [ "global-rollbacker", "global-sysop" ], "Holdoffhunger": [ "editor" ], "Hoo man": [ "editor", "steward" ], "HouseBlaster": [ "global-renamer" ], "Howard Beale": [ "editor" ], "Hpon": [ "editor" ], "Hrkalona": [ "autoreview" ], "Hskeet": [ "editor", "uploader" ], "Htm": [ "vrt-permissions" ], "Hugetim": [ "editor" ], "Humaira Ali": [ "editor" ], "Huntertur": [ "editor" ], "Hydriz": [ "global-rollbacker" ], "IB Muazzam": [ "editor" ], "Ibidthewriter": [ "editor" ], "Ibrahim.ID": [ "global-renamer", "vrt-permissions" ], "Icetruck": [ "editor" ], "Icodense": [ "global-rollbacker", "global-sysop" ], "Idavidmiller": [ "editor" ], "Ideasman42": [ "editor" ], "Igna": [ "editor" ], "Ijon": [ "vrt-permissions" ], "Illusional": [ "editor" ], "Iluvatar": [ "global-rollbacker", "vrt-permissions" ], "Indiana": [ "editor" ], "Inductiveload": [ "editor" ], "Inertia6084": [ "autoreview" ], "Inferno986return": [ "editor" ], "Infinite0694": [ "global-rollbacker", "global-sysop" ], "Ingolemo": [ "editor" ], "Insignificantwrangler": [ "editor" ], "Internoob": [ "transwiki", "editor" ], "InverseHypercube": [ "editor" ], "Isenhand": [ "editor" ], "Ish ishwar": [ "editor" ], "Iste Praetor": [ "editor" ], "It-is-Truly-Meet": [ "editor" ], "ItsNyoty": [ "vrt-permissions" ], "Itsmeyash31": [ "autoreview" ], "Itswikisam": [ "editor" ], "Itti": [ "global-renamer", "vrt-permissions" ], "Ixfd64": [ "editor" ], "J ansari": [ "global-rollbacker" ], "J.palacios.jean": [ "editor" ], "J36miles": [ "editor" ], "JBW": [ "global-renamer" ], "JCrue": [ "editor" ], "JJ12880": [ "editor" ], "JJMC89": [ "vrt-permissions" ], "JJPMaster": [ "sysop", "global-rollbacker", "global-renamer", "interface-admin", "vrt-permissions" ], "JJPMaster (test 1)": [ "autoreview" ], "JJohnson": [ "editor" ], "JJohnson1701": [ "editor" ], "JPPINTO": [ "editor" ], "Jack Frost": [ "vrt-permissions" ], "JackBot": [ "editor" ], "JackPotte": [ "sysop", "interface-admin" ], "Jackhand1": [ "autoreview" ], "Jacob J. Walker": [ "editor" ], "Jafeluv": [ "global-rollbacker", "editor" ], "Jake Park": [ "global-renamer" ], "Jakec": [ "editor" ], "JamesCrook": [ "editor" ], "JamesNZ": [ "editor" ], "Jamesofur": [ "global-rollbacker" ], "Jamesssss": [ "editor" ], "Jamzze": [ "editor" ], "Jan Myšák": [ "global-rollbacker" ], "Jan.duggan": [ "autoreview" ], "Janbery": [ "global-rollbacker", "vrt-permissions" ], "Janpha": [ "editor" ], "Janschejbal": [ "editor" ], "Jason.Cozens": [ "editor" ], "Jaspalkaler": [ "editor" ], "Jasper Deng": [ "global-rollbacker" ], "JavaHurricane": [ "global-rollbacker", "editor" ], "Javier Carro": [ "editor" ], "JavierCantero": [ "editor" ], "Jay Bolero": [ "editor" ], "Jazzmanian": [ "editor" ], "Jcb": [ "editor", "vrt-permissions" ], "Jcwf": [ "editor" ], "Jeff G.": [ "global-rollbacker", "editor" ], "Jeff1138": [ "editor" ], "Jellysandwich0": [ "editor" ], "JenVan": [ "editor" ], "JenniferPalacios": [ "editor" ], "Jenniferjkidd": [ "editor" ], "Jens Østergaard Petersen": [ "editor" ], "JeremyMcCracken": [ "editor" ], "Jeroenr": [ "editor" ], "Jerome Charles Potts": [ "editor" ], "Jerry vlntn": [ "editor" ], "Jesdisciple": [ "editor" ], "Jessephu": [ "editor" ], "Jfmantis": [ "editor" ], "Jianhui67": [ "global-rollbacker", "editor" ], "Jianhui67 public": [ "editor" ], "Jim Ashby": [ "autoreview" ], "JimKillock": [ "editor" ], "Jimbotyson": [ "editor" ], "Jimmy Xu": [ "vrt-permissions" ], "Jkauf007": [ "editor" ], "Jmdeschamps": [ "uploader" ], "Jnanaranjan sahu": [ "ombuds" ], "Jnewh001": [ "editor" ], "Jobin RV": [ "editor" ], "Joewiz": [ "editor" ], "Johannes Bo": [ "editor" ], "Johannnes89": [ "steward" ], "John Cross": [ "editor" ], "JohnMarcelo": [ "editor" ], "Johnkn63": [ "editor" ], "Johnwhelan": [ "editor" ], "Jokes Free4Me": [ "editor" ], "Jomegat": [ "editor" ], "Jon Harald Søby": [ "vrt-permissions" ], "Jon Kolbert": [ "steward", "vrt-permissions" ], "Jonathan Webley": [ "editor" ], "Jordan Brown": [ "editor" ], "JorisvS": [ "editor" ], "Josve05a": [ "vrt-permissions" ], "Jrincayc": [ "editor" ], "Jsnaree": [ "editor" ], "Jtneill": [ "editor" ], "JuethoBot": [ "autoreview" ], "Jugandi": [ "editor" ], "Jules*": [ "global-renamer" ], "Juliancolton": [ "editor" ], "Jumark27": [ "editor" ], "JustTheFacts33": [ "editor" ], "Justlettersandnumbers": [ "global-renamer", "vrt-permissions" ], "K6ka": [ "global-rollbacker", "global-renamer" ], "Kadı": [ "global-renamer", "vrt-permissions" ], "Kai Burghardt": [ "editor" ], "Kaltenmeyer": [ "editor" ], "Kambai Akau": [ "editor" ], "Kanjy": [ "global-rollbacker", "editor" ], "Kapooht": [ "editor" ], "Karl Wick": [ "editor" ], "Karosent": [ "editor" ], "Kashkhan": [ "editor" ], "Kathryn Mary Nicholson": [ "autoreview" ], "Katiemgeorge": [ "editor" ], "Katyauchter": [ "editor" ], "Kaushlendratripathi": [ "editor" ], "Kaw8yh": [ "editor" ], "Kayau": [ "transwiki", "editor" ], "Kellen": [ "editor" ], "Kelti": [ "editor" ], "Kiefer.Wolfowitz": [ "editor" ], "Killarnee": [ "editor" ], "King of Hearts": [ "vrt-permissions" ], "Kingaustin07": [ "editor" ], "Kingofnuthin": [ "editor" ], "Kirito": [ "global-rollbacker", "editor" ], "Kittycataclysm": [ "sysop" ], "Kj cheetham": [ "global-renamer" ], "Kkmurray": [ "editor" ], "Kl-robertson": [ "editor" ], "Klaas van Buiten": [ "editor" ], "Knittedbees": [ "transwiki", "editor" ], "Knoppson": [ "autoreview" ], "Koantum": [ "editor" ], "Koavf": [ "sysop", "global-rollbacker" ], "Kodos": [ "editor" ], "KonstantinaG07": [ "editor", "steward" ], "Kowey": [ "editor" ], "KrakatoaKatie": [ "vrt-permissions" ], "Krd": [ "vrt-permissions" ], "Krdbot": [ "vrt-permissions" ], "Kri": [ "editor" ], "Krinkle": [ "global-rollbacker" ], "Kropotkine 113": [ "vrt-permissions" ], "Kruusamägi": [ "vrt-permissions" ], "Ktucker": [ "editor" ], "Kwamikagami": [ "editor" ], "Kwhitefoot": [ "editor" ], "Kylu": [ "editor" ], "Kızıl": [ "global-renamer" ], "L10nM4st3r": [ "editor" ], "LABoyd2": [ "editor" ], "LM.CR": [ "editor" ], "LR0725": [ "global-rollbacker", "global-sysop" ], "Ladislav": [ "editor" ], "Ladsgroup": [ "global-renamer" ], "Ladybug62": [ "editor" ], "Lagoset": [ "editor" ], "Larsnooden": [ "editor" ], "Laurianedani": [ "editor" ], "Lcraw005": [ "editor" ], "Ldo": [ "editor" ], "Leaderboard": [ "sysop", "global-renamer", "interface-admin" ], "Learnerktm": [ "editor" ], "Lechatjaune": [ "vrt-permissions" ], "Leighblackall": [ "editor" ], "Lemonaka": [ "global-rollbacker" ], "Lengel46": [ "editor" ], "Lentokonefani": [ "global-renamer" ], "LeoChiukl": [ "editor" ], "Leonard64": [ "uploader" ], "Leonidlednev": [ "autoreview", "global-rollbacker" ], "Leovanderven": [ "editor" ], "Lesless": [ "vrt-permissions" ], "Leyo": [ "global-rollbacker" ], "Lgriot": [ "editor" ], "Liam987": [ "editor" ], "Liao": [ "editor" ], "Libperry": [ "editor" ], "Limiza": [ "editor" ], "Litlok": [ "global-renamer" ], "Little Sunshine": [ "global-renamer" ], "Llakew": [ "editor" ], "LlamaAl": [ "editor" ], "Lobsteroh": [ "editor" ], "LodestarChariot2": [ "editor" ], "Lofty abyss": [ "global-rollbacker", "editor", "vrt-permissions" ], "Logictheo": [ "editor" ], "Lomita": [ "vrt-permissions" ], "Londonjackbooks": [ "editor" ], "Lovepeacejoy404": [ "editor" ], "Lp0 on fire": [ "autoreview", "global-rollbacker" ], "Lubaochuan": [ "editor" ], "Luckas Blade": [ "editor" ], "Lucystewpid": [ "autoreview" ], "Ludovic Brenta": [ "editor" ], "Ludovicocaldara": [ "editor", "uploader" ], "Lukas²³": [ "editor" ], "LukeCEL": [ "editor" ], "Lvova": [ "vrt-permissions" ], "Lwill031": [ "editor" ], "M7": [ "steward" ], "MARKELLOS": [ "vrt-permissions" ], "MBq": [ "global-renamer" ], "MF-Warburg": [ "global-rollbacker", "global-sysop", "editor" ], "MGA73": [ "vrt-permissions" ], "MIacono": [ "editor" ], "MNeuschaefer": [ "editor" ], "MS Sakib": [ "global-renamer", "vrt-permissions" ], "Mabdul": [ "transwiki", "editor", "uploader" ], "Madisonhen": [ "autoreview" ], "Magda.dagda": [ "editor" ], "Magnus Manske": [ "editor" ], "Mahagaja": [ "editor" ], "MaikoM93": [ "editor" ], "Maire": [ "global-renamer" ], "Malarz pl": [ "global-renamer" ], "Manchiu": [ "global-renamer" ], "MandoRachovitsa": [ "autoreview" ], "Mandy Hopkins": [ "editor" ], "ManuelGR": [ "editor" ], "MarcGarver": [ "sysop", "checkuser", "steward" ], "Marco Klunder": [ "editor" ], "MarcoAurelio": [ "editor" ], "Marcus Cyron": [ "vrt-permissions" ], "Mardus": [ "editor" ], "MarkJFernandes": [ "editor" ], "MarkTraceur": [ "editor" ], "Markcwm": [ "editor" ], "Markhobley": [ "editor" ], "MarsRover": [ "editor" ], "Marshman~enwikibooks": [ "editor" ], "Martin Kraus": [ "editor" ], "Martin Sauter": [ "editor" ], "Martin Urbanec": [ "editor", "steward", "vrt-permissions" ], "MartinPoulter": [ "editor" ], "Martinwguy2": [ "editor" ], "MarygoldRules": [ "editor" ], "Master tongue": [ "editor" ], "Masti": [ "steward", "vrt-permissions" ], "Math buff": [ "editor" ], "MathXplore": [ "global-rollbacker", "editor" ], "Mathildem16": [ "autoreview" ], "Mathmensch": [ "editor" ], "Mathmensch-Smalledits": [ "editor" ], "Mathmogeek": [ "editor" ], "Maths314": [ "editor" ], "Matiia": [ "editor" ], "Matrix": [ "autoreview", "vrt-permissions" ], "Matsievsky": [ "editor" ], "Mattb112885": [ "editor" ], "Mattbarton.exe": [ "editor" ], "Matttest": [ "autoreview" ], "Max": [ "global-renamer", "global-sysop" ], "Max Milas": [ "editor" ], "Maxim": [ "editor" ], "Maximillion Pegasus": [ "global-rollbacker", "editor" ], "Maxint2": [ "editor" ], "Mazbel": [ "global-rollbacker" ], "Mbch331": [ "vrt-permissions" ], "Mbrickn": [ "transwiki", "editor" ], "Mcdonnkm": [ "editor" ], "Mcld": [ "editor" ], "Mdkoch84": [ "editor" ], "Mdmckenzie": [ "editor" ], "MdsShakil": [ "steward", "vrt-permissions" ], "Mdupont": [ "editor" ], "Me Lendroz": [ "editor" ], "Meanmicio": [ "editor" ], "Mecanismo": [ "editor" ], "MediaKyle": [ "editor" ], "Meditation": [ "editor" ], "Meev0": [ "editor" ], "Mehman": [ "ombuds", "vrt-permissions" ], "Melos": [ "steward", "vrt-permissions" ], "MemicznyJanusz": [ "global-renamer" ], "Mendelivia~enwikibooks": [ "editor" ], "Meniktah": [ "editor" ], "Mercy": [ "global-rollbacker", "editor" ], "MerlLinkBot": [ "editor" ], "Mfield": [ "global-renamer" ], "Mh7kJ": [ "editor" ], "Michael Romanov": [ "editor" ], "MichaelFrey": [ "editor" ], "Michaelbluett": [ "editor", "uploader" ], "Mido": [ "vrt-permissions" ], "MihalOrela": [ "editor" ], "MiiCii": [ "editor" ], "Mike Hayes": [ "editor" ], "Mike.lifeguard": [ "editor" ], "Mild Bill Hiccup": [ "editor" ], "Mill3315": [ "editor" ], "Millbart": [ "vrt-permissions" ], "Mimarx": [ "editor" ], "Min1996": [ "autoreview" ], "Minorax": [ "global-rollbacker", "global-sysop", "editor" ], "Mirinano": [ "global-rollbacker" ], "Mithridates": [ "editor" ], "Mjbt": [ "editor" ], "Mjchael": [ "editor" ], "Mjkaye": [ "editor" ], "Mkline": [ "autoreview" ], "Mlipl001": [ "editor" ], "Moby-Dick4000": [ "editor" ], "Mohean": [ "editor" ], "Money-lover-12345": [ "editor" ], "Moonriddengirl": [ "autoreview", "vrt-permissions" ], "Morkoz": [ "global-rollbacker" ], "Mortense": [ "editor" ], "Mpfau": [ "editor" ], "Mr. Stradivarius": [ "editor" ], "MrAlanKoh": [ "editor" ], "MrJaroslavik": [ "global-rollbacker", "ombuds" ], "Mrajcok": [ "editor" ], "Mrjulesd": [ "editor" ], "Mrwojo": [ "editor" ], "Mschrag": [ "editor" ], "Msmithma": [ "editor" ], "MtPenguinMonster": [ "editor" ], "Mtarch11": [ "global-rollbacker", "global-sysop", "editor" ], "Musical Inquisit": [ "editor" ], "Mussklprozz": [ "vrt-permissions" ], "Mvolz": [ "editor" ], "Mwtoews": [ "editor" ], "Mxn": [ "editor" ], "Myklaw": [ "editor" ], "Mykola7": [ "steward" ], "Mys 721tx": [ "global-renamer", "vrt-permissions" ], "NDG": [ "global-rollbacker", "global-sysop", "editor" ], "Nadzik": [ "global-rollbacker", "global-renamer" ], "NahidSultan": [ "vrt-permissions" ], "Nangkhan Magar": [ "editor" ], "Natuur12": [ "vrt-permissions" ], "Nbarth": [ "editor" ], "Nbro": [ "editor" ], "Nehaoua": [ "ombuds" ], "Neils51": [ "editor" ], "Nemoralis": [ "vrt-permissions" ], "Neojacob": [ "editor" ], "Neriah": [ "global-rollbacker", "global-renamer" ], "Nesbit": [ "editor" ], "Newlisp": [ "editor" ], "Nfgdayton": [ "editor" ], "NguoiDungKhongDinhDanh": [ "global-rollbacker", "global-sysop", "editor" ], "NhacNy2412": [ "global-renamer" ], "Nick.anderegg": [ "editor" ], "NickPenguin": [ "editor" ], "NicoScribe": [ "editor" ], "Nicole Sharp": [ "editor" ], "Nieuwsgierige Gebruiker": [ "editor" ], "Nigos": [ "autoreview" ], "Nihonjoe": [ "global-renamer" ], "Nikai": [ "editor" ], "Ninjastrikers": [ "vrt-permissions" ], "NipplesMeCool": [ "editor" ], "Njardarlogar": [ "editor" ], "Nobody60": [ "editor" ], "Nolispanmo": [ "vrt-permissions" ], "Nomstuff": [ "autoreview" ], "Nonenmac": [ "editor" ], "Norton": [ "editor" ], "Npettiaux": [ "editor" ], "Nsaa": [ "vrt-permissions" ], "Nthep": [ "vrt-permissions" ], "NuclearWarfare": [ "global-rollbacker", "editor" ], "OMSMike": [ "editor" ], "Officer781": [ "editor" ], "Oleander": [ "editor" ], "Oliviacatherall": [ "autoreview" ], "Omphalographer": [ "editor" ], "OnBeyondZebrax": [ "editor" ], "Onsen": [ "editor" ], "Ontzak": [ "global-renamer" ], "Orderud": [ "editor" ], "OrenBochman": [ "editor" ], "Oshwah": [ "global-renamer" ], "Ottawahitech": [ "editor" ], "Owain.davies": [ "editor" ], "PAC": [ "editor" ], "PAC2": [ "editor" ], "PK 97": [ "editor" ], "PNW Raven": [ "editor" ], "Pac8612": [ "editor" ], "Paloi Sciurala": [ "global-rollbacker" ], "Panic2k4": [ "transwiki", "editor" ], "Pascal Pignard": [ "editor" ], "Pastbury": [ "editor" ], "Pathfinders": [ "editor" ], "Pathoschild": [ "editor" ], "Patrik": [ "editor" ], "PauSix": [ "editor" ], "Paul James": [ "editor" ], "Pavroo": [ "editor" ], "PbakerODU": [ "editor" ], "Pbrower2a": [ "editor" ], "Pearts": [ "editor" ], "Peeragogia": [ "editor" ], "Peri Coleman": [ "editor" ], "Perl~enwikibooks": [ "editor" ], "Peter1180": [ "editor" ], "PeterEasthope": [ "editor" ], "Peyton09": [ "editor" ], "Phan M. Nhat": [ "autoreview" ], "PhilKnight": [ "global-renamer" ], "Phoebe": [ "editor" ], "Phosgram": [ "editor" ], "Pi zero": [ "editor" ], "PieWriter": [ "editor" ], "Piotrus": [ "editor" ], "Pithikos": [ "editor" ], "Pittsburgh Poet": [ "editor" ], "Pjpearce": [ "editor" ], "Pkkao": [ "editor" ], "Planotse": [ "editor" ], "Platonides": [ "vrt-permissions" ], "Pluke": [ "editor" ], "PlyrStar93": [ "global-rollbacker", "editor" ], "Pminh141": [ "global-renamer" ], "Pmlineditor": [ "editor" ], "Pmw57": [ "editor" ], "Poetcsw": [ "editor" ], "PoizonMyst": [ "editor" ], "Pola 2607": [ "autoreview" ], "Polimerek": [ "vrt-permissions" ], "Polluks": [ "editor" ], "Pookiyama": [ "editor" ], "Popski": [ "editor" ], "Povigna": [ "editor" ], "Ppolar bear": [ "global-rollbacker", "global-renamer" ], "Pppery": [ "autoreview" ], "Prahlad balaji": [ "editor" ], "Pratyeka": [ "editor" ], "Praxidicae": [ "global-rollbacker", "global-sysop", "editor" ], "Primefac": [ "vrt-permissions" ], "Prince Kassad~enwikibooks": [ "editor" ], "Pronesto": [ "editor" ], "Prototyperspective": [ "autoreview" ], "Psoup": [ "editor" ], "Psr1909": [ "editor" ], "PullUpYourSocks": [ "editor" ], "PurpleBuffalo": [ "global-renamer" ], "PurplePieman": [ "editor" ], "Purplebackpack89": [ "editor" ], "Putukas01": [ "editor" ], "Qenalcu": [ "autoreview" ], "Quebecguy": [ "global-rollbacker" ], "QueerEcofeminist": [ "global-rollbacker", "global-renamer", "editor" ], "Quinlan83": [ "global-rollbacker", "editor" ], "Quintucket": [ "editor" ], "Qwerty number1": [ "editor" ], "Qwertyus": [ "editor" ], "Qədir": [ "global-rollbacker", "global-renamer", "vrt-permissions" ], "R. Henrik Nilsson": [ "editor" ], "RAdimer-WMF": [ "global-rollbacker" ], "RDBury": [ "editor" ], "RJHall": [ "editor" ], "Ra'ike": [ "vrt-permissions" ], "Rachboots": [ "editor" ], "Rachel": [ "editor" ], "Rachmat04": [ "global-renamer", "vrt-permissions" ], "RadiX": [ "editor", "steward", "vrt-permissions" ], "Raffaela Kunz": [ "editor" ], "Rahulkepapa": [ "editor" ], "Ramac": [ "editor" ], "Rambam rashi": [ "editor" ], "Randykitty": [ "autoreview", "global-rollbacker" ], "RatónMístico176": [ "editor" ], "Ravichandar84": [ "editor" ], "Rawheatley": [ "editor" ], "Ray Trygstad": [ "editor" ], "RayeChellMahela": [ "editor" ], "Raymond": [ "vrt-permissions" ], "Razr Nation": [ "editor" ], "Rchaswms01": [ "editor" ], "Rcragun": [ "editor", "uploader" ], "Readyokaygo": [ "editor" ], "Recent Runes": [ "editor" ], "Redlentil": [ "editor" ], "Refcanimm": [ "editor" ], "Regasterios": [ "vrt-permissions" ], "Reinhard Kraasch": [ "vrt-permissions" ], "RenaissanceMan2144": [ "autoreview" ], "Renamed user 242094acfb1a5b2f08e9e78f2e021a40": [ "editor" ], "Renamed user 5f91ca71739b07cfce8397eed758fe13": [ "editor", "uploader" ], "Renamed user f26394dcb19bd7bdad78f0d752896653": [ "editor" ], "Renvoy": [ "global-rollbacker", "global-sysop" ], "Reseletti": [ "editor" ], "Retropunk": [ "editor" ], "Reuben1508": [ "autoreview" ], "Revi C.": [ "global-rollbacker", "global-renamer", "ombuds", "editor", "vrt-permissions" ], "Reyk": [ "editor" ], "Rfc1394": [ "editor" ], "Rgdboer": [ "editor" ], "Rgreenone": [ "editor" ], "Rhole2001": [ "autoreview" ], "Rich Farmbrough": [ "editor" ], "Rickstambaugh": [ "editor" ], "Riggwelter": [ "vrt-permissions" ], "Risk": [ "editor" ], "Risteall": [ "editor" ], "Ritjesman": [ "editor" ], "RoMancer": [ "editor" ], "Robbiemorrison": [ "editor" ], "Robert Huber~enwikibooks": [ "editor" ], "Roberto Mura": [ "editor" ], "Robertsky": [ "global-renamer", "vrt-permissions" ], "RobinH": [ "editor" ], "Rodasmith": [ "editor" ], "Rodrigo": [ "editor" ], "Rodrigo.Argenton": [ "vrt-permissions" ], "Rogerborrell": [ "editor" ], "Rogerdpack": [ "editor" ], "RogueScholar": [ "editor" ], "Romainbehar": [ "editor" ], "RomaineBot": [ "vrt-permissions" ], "RonaldB": [ "vrt-permissions" ], "Rosser1954": [ "editor" ], "Rotlink": [ "editor" ], "RoySmith": [ "ombuds" ], "Rozzychan": [ "editor" ], "Rplano": [ "editor" ], "Rreagan007": [ "autoreview" ], "Rrgreen": [ "editor" ], "Rschen7754": [ "global-rollbacker", "editor" ], "RshieldsVA": [ "editor" ], "Rsjaffe": [ "global-renamer" ], "Rtaisis": [ "editor" ], "Ruakh": [ "editor" ], "Rudolpho~enwikibooks": [ "editor" ], "Runfellow": [ "editor" ], "Runner4lyfe": [ "editor" ], "RunningBlind": [ "editor" ], "Ruthven": [ "vrt-permissions" ], "Ruud Koot": [ "transwiki", "editor" ], "Rzuwig": [ "autoreview", "global-rollbacker" ], "S.Marchenko": [ "global-renamer" ], "S8321414": [ "global-renamer" ], "SB Johnny": [ "editor" ], "SCP-2000": [ "global-rollbacker", "global-renamer", "vrt-permissions" ], "SHB": [ "sysop", "steward" ], "SPM": [ "editor" ], "Sae1962": [ "editor" ], "Safuan12616": [ "editor" ], "SahniM": [ "editor" ], "Sakretsu": [ "steward" ], "Sakura emad": [ "global-rollbacker" ], "Salil Kumar Mukherjee": [ "editor" ], "Samat": [ "vrt-permissions" ], "Sammy2012": [ "editor" ], "Samuel.dellit": [ "editor" ], "Samuele2002": [ "global-rollbacker", "editor" ], "Samwilson": [ "editor" ], "SanBonne": [ "global-rollbacker", "global-renamer", "vrt-permissions" ], "Sandbergja": [ "editor" ], "Sannita": [ "vrt-permissions" ], "Sante Caserio~enwikibooks": [ "editor" ], "SarahFatimaK": [ "editor" ], "Sargoth": [ "vrt-permissions" ], "Saroj": [ "global-rollbacker" ], "Sascha Lill 95": [ "editor" ], "Satdeep Gill": [ "vrt-permissions" ], "Savh": [ "global-rollbacker", "editor" ], "Sbb1413": [ "editor" ], "Scention": [ "editor" ], "Schniggendiller": [ "steward" ], "SchreiberBike": [ "editor" ], "Scott.beckman": [ "editor" ], "Sebastian Wallroth": [ "vrt-permissions" ], "Seewolf": [ "global-rollbacker", "vrt-permissions" ], "Sekidoki": [ "vrt-permissions" ], "Selden": [ "editor" ], "Sennecaster": [ "vrt-permissions" ], "Serinap": [ "editor" ], "Seth Miller": [ "editor" ], "SevenSpheres": [ "editor" ], "Sfan00 IMG": [ "editor" ], "Sfoerster": [ "editor" ], "Sgarrigan": [ "editor" ], "Sgowal": [ "editor" ], "Shaitand": [ "editor" ], "ShakespeareFan00": [ "editor" ], "SharingNotes": [ "editor" ], "Shawntanchinyang": [ "editor" ], "Shdwninja8": [ "editor" ], "ShelleyAdams": [ "autoreview" ], "ShifaYT": [ "global-rollbacker" ], "Shii": [ "editor" ], "Shira the Mogul": [ "editor" ], "Shlomif": [ "editor" ], "ShuBraque": [ "editor" ], "Sidelight12": [ "editor" ], "Sidorkin": [ "editor" ], "Sidpatil": [ "editor" ], "Siebengang": [ "editor" ], "Sigma 7": [ "editor" ], "Simon Peter Hughes": [ "editor" ], "Sinus46": [ "editor" ], "Sir Beluga": [ "editor" ], "Sir Lestaty de Lioncourt": [ "vrt-permissions" ], "SixWingedSeraph": [ "editor" ], "Sj": [ "editor" ], "Sjc~enwikibooks": [ "editor" ], "Sjlegg": [ "editor" ], "Sjone101": [ "editor" ], "Sjö": [ "global-rollbacker" ], "Skymath": [ "editor" ], "SlartibartfastT": [ "vrt-permissions" ], "Slava Ukraini Heroyam Slava 123": [ "editor", "uploader" ], "Slava Ukrajini Heroyam Slava": [ "editor" ], "Sluffs": [ "editor" ], "Smjg": [ "editor" ], "SnappyDragonPennyroyal": [ "editor" ], "SocialKnowledge": [ "editor" ], "SoftwareEngineerMoose": [ "autoreview" ], "Sonia": [ "editor" ], "Sophie Cheng": [ "editor" ], "Sotiale": [ "steward" ], "Soul windsurfer": [ "editor" ], "SouthParkFan65": [ "editor" ], "SoylentGreen": [ "editor" ], "Spamduck": [ "editor" ], "Spaynton": [ "editor" ], "Spender2001": [ "editor" ], "Speregrination": [ "editor" ], "Spiderworm": [ "editor" ], "Spoon!": [ "editor" ], "Squasher": [ "global-renamer" ], "Srhat": [ "editor" ], "Stang": [ "global-rollbacker", "editor", "vrt-permissions" ], "Stanglavine": [ "editor" ], "Steinsplitter": [ "global-renamer", "vrt-permissions" ], "StephT0704": [ "autoreview" ], "Stepheng3": [ "editor" ], "Stepro": [ "vrt-permissions" ], "Steve M": [ "editor" ], "Stilfehler": [ "editor" ], "Stockywood": [ "editor" ], "Storeye": [ "editor" ], "Strainu": [ "vrt-permissions" ], "Strange quark": [ "editor" ], "Stryn": [ "global-rollbacker", "editor" ], "Stïnger": [ "global-rollbacker", "editor" ], "Suchenwi": [ "editor" ], "Sumone10154": [ "editor" ], "SunCreator": [ "editor" ], "Sunny Cryolite": [ "global-rollbacker" ], "Sunshineconnelly": [ "editor" ], "SuperTyphoonNoru": [ "editor" ], "Superbass": [ "vrt-permissions" ], "Superpes15": [ "global-rollbacker", "global-renamer", "global-sysop", "vrt-permissions" ], "Supertoff": [ "vrt-permissions" ], "Superzerocool": [ "vrt-permissions" ], "SupremeUmanu": [ "editor" ], "Suruena": [ "editor" ], "Sutambe": [ "editor" ], "Sutton Publishing": [ "editor" ], "Sué González Hauck": [ "editor" ], "Svartava": [ "global-rollbacker", "global-renamer", "global-sysop", "editor" ], "SweetCanadianMullet": [ "editor" ], "Swift": [ "editor" ], "SyG": [ "editor" ], "Sylvesterchukwu04": [ "editor" ], "Sylvialim": [ "editor" ], "Sylviaread": [ "editor" ], "Synoman Barris": [ "global-rollbacker", "transwiki", "editor" ], "Syum90": [ "global-rollbacker", "editor" ], "Syunsyunminmin": [ "global-rollbacker", "global-renamer", "global-sysop", "editor" ], "T.seppelt": [ "editor" ], "TDang": [ "editor" ], "TTWIDEE": [ "editor" ], "Tahmid": [ "editor" ], "Taketa": [ "global-renamer" ], "Takipoint123": [ "vrt-permissions" ], "TakuyaMurata": [ "editor" ], "Tamzin": [ "global-renamer" ], "Tanbiruzzaman": [ "global-rollbacker", "global-renamer", "global-sysop", "editor", "vrt-permissions" ], "Tannertsf": [ "editor" ], "Taoheedah": [ "editor" ], "Tapsevarg": [ "editor" ], "TaronjaSatsuma": [ "vrt-permissions" ], "Taxman": [ "editor" ], "Tchoř": [ "global-renamer" ], "Tdkehoe": [ "editor" ], "Tdvorak": [ "editor" ], "TechVindicator": [ "autoreview" ], "Techman224": [ "editor" ], "Tegel": [ "editor", "steward" ], "Teles": [ "ombuds", "steward", "vrt-permissions" ], "Tem5psu": [ "editor" ], "Tempodivalse": [ "editor" ], "TenWhile6": [ "global-rollbacker", "global-renamer", "global-sysop", "editor" ], "Tenshi Hinanawi": [ "autoreview", "global-rollbacker" ], "Terence Kearey": [ "editor" ], "Ternarius": [ "global-renamer" ], "Ternera": [ "global-rollbacker", "global-renamer", "global-sysop", "editor" ], "Tesleemah": [ "editor" ], "Tevfik AKTUĞLU": [ "editor" ], "Tgregtregretgtr": [ "editor" ], "ThatBPengineer": [ "autoreview" ], "Thatonewikiguy": [ "editor" ], "The Squirrel Conspiracy": [ "vrt-permissions" ], "The labs": [ "editor" ], "TheGoodEndedHappily": [ "vrt-permissions" ], "ThePCKid": [ "editor" ], "TheSandDoctor": [ "global-renamer", "vrt-permissions" ], "Theknightwho": [ "editor" ], "Thenub314": [ "editor" ], "Theo Hughes": [ "editor" ], "Theornamentalist": [ "editor" ], "Thereen": [ "editor" ], "Thewinster": [ "editor" ], "Thierry Dugnolle": [ "editor" ], "Thinkglobalnow": [ "editor" ], "Thirunavukkarasye-Raveendran": [ "editor" ], "Thomas Simpson": [ "editor" ], "Thomas.haslwanter": [ "editor" ], "Thomas.lochmatter": [ "editor" ], "Tibetologist": [ "editor" ], "Tigerzeng": [ "global-rollbacker" ], "Tiled": [ "editor" ], "TimBorgNetzWerk": [ "editor" ], "Timothy Gu": [ "editor" ], "Timpo": [ "editor" ], "Tiptoety": [ "editor" ], "Tjyang": [ "editor" ], "Tlustulimu": [ "editor" ], "Tmvogel": [ "editor" ], "Tom Morris": [ "editor" ], "Tomato86": [ "editor" ], "TommyG": [ "vrt-permissions" ], "Tomt87": [ "editor" ], "Tomybrz": [ "editor" ], "Tonyvall": [ "autoreview" ], "Tp42": [ "editor" ], "Tracklayingninja": [ "editor" ], "Tradimus": [ "editor" ], "Tropicalkitty": [ "global-rollbacker", "editor" ], "TrulyShruti": [ "editor" ], "Ts12rAc": [ "global-rollbacker" ], "Tsarina CatarinaToo": [ "autoreview" ], "TunnelESON": [ "sysop" ], "Turbojet": [ "vrt-permissions" ], "Turkmen": [ "editor" ], "TwoThirty": [ "editor" ], "Tyoyafud": [ "editor" ], "Túrelio": [ "autoreview" ], "U$3rname008": [ "editor" ], "USSR-Slav": [ "global-rollbacker" ], "Uf.hun2201": [ "editor" ], "Uncitoyen": [ "global-rollbacker", "global-renamer" ], "Uncle G": [ "editor" ], "Unixxx": [ "editor" ], "User01938": [ "editor" ], "Username222": [ "editor" ], "Utcursch": [ "vrt-permissions" ], "Uziel302": [ "editor" ], "Uzume": [ "editor" ], "V0lkanic": [ "global-renamer" ], "VIGNERON": [ "steward" ], "Valery Starikov": [ "editor" ], "Van der Hoorn": [ "editor" ], "Varnent": [ "vrt-permissions" ], "Vdolar": [ "autoreview" ], "VectorVoyager": [ "editor" ], "Venzz": [ "vrt-permissions" ], "Verfassungsfreund": [ "editor" ], "Veritas Sapientiae": [ "global-rollbacker", "global-renamer", "vrt-permissions" ], "Vermont": [ "editor", "steward", "vrt-permissions" ], "Victor Stefan Stoica": [ "autoreview" ], "Victor Trevor": [ "autoreview" ], "Victoria.sandeman": [ "autoreview" ], "Vincent Vega": [ "global-renamer" ], "Vito Genovese": [ "editor" ], "Vituzzu": [ "editor" ], "Vladimir Solovjev": [ "global-renamer", "vrt-permissions" ], "Vogone": [ "global-rollbacker", "editor" ], "Vossman": [ "editor" ], "Vrinda": [ "editor" ], "VulcanWikiEdit": [ "editor" ], "Vwanweb": [ "editor" ], "WOSlinker": [ "autoreview" ], "Waihorace": [ "global-rollbacker" ], "Waldyrious": [ "editor" ], "WalshDay": [ "editor" ], "Wargo": [ "editor" ], "Wbjimmyd": [ "editor" ], "Wcoole": [ "editor" ], "WeelkyWikiReader": [ "editor" ], "Wekeepwhatwekill": [ "autoreview" ], "WereSpielChequers": [ "editor" ], "What no2000": [ "editor" ], "WhatamIdoing": [ "editor" ], "WhitePhosphorus": [ "global-rollbacker", "global-sysop" ], "Whiteknight": [ "editor" ], "Whoop whoop pull up": [ "editor" ], "Whym": [ "editor", "vrt-permissions" ], "Wiki13": [ "editor" ], "WikiBayer": [ "global-rollbacker", "global-sysop", "editor" ], "WikiFer": [ "vrt-permissions" ], "Wikimi-dhiann": [ "editor" ], "Wikiotics": [ "editor" ], "Wikiwau": [ "autoreview", "editor" ], "WillNess": [ "editor" ], "Willscrlt": [ "editor" ], "Wim b": [ "global-rollbacker", "editor" ], "Wisden": [ "editor" ], "Withinfocus": [ "editor" ], "Wj32": [ "editor" ], "Wkee4ager": [ "editor" ], "Wobbit": [ "editor" ], "Wojciech Pędzich": [ "vrt-permissions" ], "Wooze": [ "global-rollbacker" ], "Wundermacht": [ "editor" ], "Wutsje": [ "global-rollbacker", "editor" ], "Ww2censor": [ "vrt-permissions" ], "Wüstenspringmaus": [ "global-rollbacker", "global-renamer" ], "XXBlackburnXx": [ "editor", "steward" ], "Xandradi": [ "editor" ], "Xania": [ "sysop", "checkuser" ], "Xaosflux": [ "editor", "steward" ], "XenonX3": [ "vrt-permissions" ], "Xerol": [ "editor" ], "Xeverything11": [ "editor", "uploader" ], "Xhungab": [ "editor" ], "Xinkai Wu": [ "editor" ], "Xixtas": [ "editor" ], "Xqt": [ "global-rollbacker" ], "Xxagile": [ "editor" ], "Xypron": [ "editor" ], "Xz64": [ "editor" ], "Y-S.Ko": [ "editor" ], "YMS": [ "editor" ], "Yahya": [ "steward", "vrt-permissions" ], "Yamla": [ "global-renamer" ], "Yann": [ "editor" ], "Yerpo": [ "global-renamer", "vrt-permissions" ], "Yikrazuul": [ "editor" ], "Ymblanter": [ "global-rollbacker" ], "Yndesai": [ "editor" ], "Youssefsan": [ "editor" ], "Ysangkok": [ "editor" ], "Yvelik": [ "uploader" ], "Yzmo": [ "editor" ], "ZI Jony": [ "editor" ], "Zabe": [ "global-rollbacker" ], "Zafer": [ "ombuds" ], "Zedshort": [ "editor" ], "ZeroOne": [ "editor" ], "Zetud": [ "global-rollbacker", "vrt-permissions" ], "Ziv": [ "editor" ], "Zoeannl": [ "editor" ], "Zollerriia": [ "editor" ], "Zoohouse": [ "editor" ], "Zoot": [ "editor" ], "Zsohl": [ "autoreview", "editor" ], "Zvsmith": [ "editor" ], "Zweighaft": [ "editor" ], "ZxxZxxZ": [ "editor" ], "~riley": [ "global-rollbacker", "editor" ], "Érico": [ "global-renamer" ], "İmmortalance": [ "global-renamer" ], "Виктор Пинчук": [ "editor" ], "Воображение": [ "editor" ], "Всевидящий": [ "global-rollbacker" ], "Д.Ильин": [ "editor" ], "Л.П. Джепко": [ "editor" ], "יהודה שמחה ולדמן": [ "editor" ], "מקף": [ "global-rollbacker", "global-renamer" ], "د. فارس الجويلي": [ "global-renamer" ], "روتانا": [ "global-renamer" ], "علاء": [ "steward", "vrt-permissions" ], "فيصل": [ "global-renamer", "vrt-permissions" ], "सीमा1": [ "editor" ], "タチコマ robot": [ "editor" ], "ネイ": [ "global-renamer" ], "一隻北極熊": [ "editor" ], "人间百态": [ "global-rollbacker" ], "臺灣象象": [ "autoreview" ], "范": [ "vrt-permissions" ], "魔琴": [ "global-rollbacker" ], "ꠢꠣꠍꠘ ꠞꠣꠎꠣ": [ "editor" ], "기나ㅏㄴ": [ "global-rollbacker", "global-renamer" ] } e91x2xut6vnux00reozdnm2ef5kh5ej Template:Pokémon locations 10 479313 4675309 4658116 2026-10-09T19:03:21Z Omphalographer 3427146 fix link (still red though) 4675309 wikitext text/x-wiki {| class="navbox" | style="background: #FFBFFF;{{Text default color}};text-align:center" colspan=3 | '''Pokémon regions and locations''' |- !style="background: #FFBFFF;{{Text default color}};width:90px"|[[A Traveler's Guide to the World of Pokémon/Regions/Kanto|Kanto]] |colspan=2| [[A Traveler's Guide to the World of Pokémon/Kanto/Pallet Town|Pallet Town]] • [[A Traveler's Guide to the World of Pokémon/Kanto/Viridian City|Viridian City]] • [[A Traveler's Guide to the World of Pokémon/Kanto/Pewter City|Pewter City]] • [[A Traveler's Guide to the World of Pokémon/Kanto/Cerulean City|Cerulean City]] • [[A Traveler's Guide to the World of Pokémon/Kanto/Vermilion City|Vermilion City]] • [[A Traveler's Guide to the World of Pokémon/Kanto/Celadon City|Celadon City]] • [[A Traveler's Guide to the World of Pokémon/Kanto/Lavender Town|Lavender Town]] • [[A Traveler's Guide to the World of Pokémon/Kanto/Fuchsia City|Fuchsia City]] • [[A Traveler's Guide to the World of Pokémon/Kanto/Saffron City|Saffron City]] • [[A Traveler's Guide to the World of Pokémon/Kanto/Cinnabar Island|Cinnabar Island]] • [[A Traveler's Guide to the World of Pokémon/Kanto/Indigo Plateau|Indigo Plateau]]<br>[[A Traveler's Guide to the World of Pokémon/Kanto/Viridian Forest|Viridian Forest]] • [[A Traveler's Guide to the World of Pokémon/Kanto/Mt. Moon|Mt. Moon]] • [[A Traveler's Guide to the World of Pokémon/Kanto/Diglett's Cave|Diglett's Cave]] • [[A Traveler's Guide to the World of Pokémon/Kanto/Rock Tunnel|Rock Tunnel]] • [[A Traveler's Guide to the World of Pokémon/Kanto/S.S. Anne|S.S. Anne]] • [[A Traveler's Guide to the World of Pokémon/Kanto/Lavender Tower|Pokémon Tower]] • [[A Traveler's Guide to the World of Pokémon/Kanto/Silph Co.|Silph Co.]] • [[A Traveler's Guide to the World of Pokémon/Safari Zone|Safari Zone]] • [[A Traveler's Guide to the World of Pokémon/Kanto/Power Plant|Power Plant]] • [[A Traveler's Guide to the World of Pokémon/Kanto/Seafoam Islands|Seafoam Islands]] • [[A Traveler's Guide to the World of Pokémon/Kanto/Pokémon Mansion|Pokémon Mansion]] • [[A Traveler's Guide to the World of Pokémon/Victory Road|Victory Road]] • [[A Traveler's Guide to the World of Pokémon/Kanto/Cerulean Cave|Cerulean Cave]] • [[A Traveler's Guide to the World of Pokémon/Johto/Tohjo Falls|Tohjo Falls]] |- |- !style="background: #FFBFFF;{{Text default color}};width:90px"|[[A Traveler's Guide to the World of Pokémon/Regions/Johto|Johto]] |colspan=2| [[A Traveler's Guide to the World of Pokémon/Johto/New Bark Town|New Bark Town]] • [[A Traveler's Guide to the World of Pokémon/Johto/Cherrygrove City|Cherrygrove City]] • [[A Traveler's Guide to the World of Pokémon/Johto/Violet City|Violet City]] • [[A Traveler's Guide to the World of Pokémon/Johto/Azalea Town|Azalea Town]] • [[A Traveler's Guide to the World of Pokémon/Johto/Goldenrod City|Goldenrod City]] • [[A Traveler's Guide to the World of Pokémon/Johto/Ecruteak City|Ecruteak City]] • [[A Traveler's Guide to the World of Pokémon/Johto/Olivine City|Olivine City]] • [[A Traveler's Guide to the World of Pokémon/Johto/Cianwood City|Cianwood City]] • [[A Traveler's Guide to the World of Pokémon/Johto/Mahogany Town|Mahogany Town]] • [[A Traveler's Guide to the World of Pokémon/Johto/Blackthorn City|Blackthorn City]] • [[A Traveler's Guide to the World of Pokémon/Johto/Mt. Silver|Mt. Silver]] • [[A Traveler's Guide to the World of Pokémon/Johto/Silver Town|Silver Town]]<br>[[A Traveler's Guide to the World of Pokémon/Johto/Sprout Tower|Sprout Tower]] • [[A Traveler's Guide to the World of Pokémon/Johto/Ruins of Alph|Ruins of Alph]] • [[A Traveler's Guide to the World of Pokémon/Johto/Union Cave|Union Cave]] • [[A Traveler's Guide to the World of Pokémon/Johto/Slowpoke Well|Slowpoke Well]] • [[A Traveler's Guide to the World of Pokémon/Johto/Ilex Forest|Ilex Forest]] • [[A Traveler's Guide to the World of Pokémon/Johto/Pokémon Radio Tower|Radio Tower]] • [[A Traveler's Guide to the World of Pokémon/Johto/National Park|National Park]] • [[A Traveler's Guide to the World of Pokémon/Johto/Tin Tower|Tin Tower]] • [[A Traveler's Guide to the World of Pokémon/Johto/Burned Tower|Burned Tower]] • [[A Traveler's Guide to the World of Pokémon/Johto/Olivine City#The Lighthouse|Lighthouse]] • [[A Traveler's Guide to the World of Pokémon/Battle Tower|Battle Tower]] • [[A Traveler's Guide to the World of Pokémon/Johto/Whirl Islands|Whirl Islands]] • [[A Traveler's Guide to the World of Pokémon/Johto/Mt. Mortar|Mt. Mortar]] • [[A Traveler's Guide to the World of Pokémon/Johto/Lake of Rage|Lake of Rage]] • [[A Traveler's Guide to the World of Pokémon/Johto/Ice Path|Ice Path]] • [[A Traveler's Guide to the World of Pokémon/Johto/Dragon's Den|Dragon's Den]] • [[A Traveler's Guide to the World of Pokémon/Johto/Dark Cave|Dark Cave]] • [[A Traveler's Guide to the World of Pokémon/Johto/Silver Cave|Silver Cave]] |- |- !style="background: #FFBFFF;{{Text default color}};width:90px"| [[A Traveler's Guide to the World of Pokémon/Regions/Hoenn|Hoenn]] |colspan=2| [[A Traveler's Guide to the World of Pokémon/Hoenn/Littleroot Town|Littleroot Town]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Oldale Town|Oldale Town]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Petalburg City|Petalburg City]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Rustboro City|Rustboro City]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Dewford Town|Dewford Town]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Slateport City|Slateport City]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Mauville City|Mauville City]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Verdanturf Town|Verdanturf Town]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Fallarbor Town|Fallarbor Town]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Lavaridge Town|Lavaridge Town]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Fortree City|Fortree City]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Lilycove City|Lilycove City]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Mossdeep City|Mossdeep City]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Sootopolis City|Sootopolis City]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Pacifidlog Town|Pacifidlog Town]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Ever Grande City|Ever Grande City]]<br>[[A Traveler's Guide to the World of Pokémon/Hoenn/Petalburg Woods|Petalburg Woods]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Rusturf Tunnel|Rusturf Tunnel]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Island Cave|Island Cave]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Granite Cave|Granite Cave]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Abandoned Ship|Abandoned Ship]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/New Mauville|New Mauville]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Desert Ruins|Desert Ruins]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Fiery Path|Fiery Path]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Desert Underpass|Desert Underpass]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Meteor Falls|Meteor Falls]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Mt. Chimney|Mt. Chimney]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Jagged Pass|Jagged Pass]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Weather Institute|Weather Institute]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Scorched Slab|Scorched Slab]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Ancient Tomb|Ancient Tomb]] • [[A Traveler's Guide to the World of Pokémon/Safari Zone|Safari Zone]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Mt. Pyre|Mt. Pyre]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Shoal Cave|Shoal Cave]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Seafloor Cavern|Seafloor Cavern]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Cave of Origin|Cave of Origin]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Sky Pillar|Sky Pillar]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Sealed Chamber|Sealed Chamber]] • [[A Traveler's Guide to the World of Pokémon/Victory Road|Victory Road]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Altering Cave|Altering Cave]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Southern Island|Southern Island]] • [[A Traveler's Guide to the World of Pokémon/Hoenn/Battle Frontier|Battle Frontier]] |- |- !style="background: #FFBFFF;{{Text default color}};width:90px"| [[A Traveler's Guide to the World of Pokémon/Regions/Sinnoh|Sinnoh]] |colspan=2| [[A Traveler's Guide to the World of Pokémon/Sinnoh/Twinleaf Town|Twinleaf Town]] |- !style="background: #FFBFFF;{{Text default color}};width:90px"| [[A Traveler's Guide to the World of Pokémon/Regions/Orre|Orre]] |colspan=2| [[A Traveler's Guide to the World of Pokémon/Orre/Outskirt Stand|Outskirt Stand]] • [[A Traveler's Guide to the World of Pokémon/Orre/Phenac City|Phenac City]] • [[A Traveler's Guide to the World of Pokémon/Orre/Pyrite Town|Pyrite Town]] • [[A Traveler's Guide to the World of Pokémon/Orre/The Under|The Under]] • [[A Traveler's Guide to the World of Pokémon/Orre/Mt. Battle|Mt. Battle]] • [[A Traveler's Guide to the World of Pokémon/Orre/Agate Village|Agate Village]] • [[A Traveler's Guide to the World of Pokémon/Orre/Realgam Tower|Realgam Tower]] • [[A Traveler's Guide to the World of Pokémon/Orre/Gateon Port|Gateon Port]] • [[A Traveler's Guide to the World of Pokémon/Orre/Citadark Isle|Citadark Isle]] |- !style="background: #FFBFFF;{{Text default color}};width:90px"| [[A Traveler's Guide to the World of Pokémon/Regions/Fiore|Fiore]] |colspan=2| [[A Traveler's Guide to the World of Pokémon/Fiore/Fall City|Fall City]] • [[A Traveler's Guide to the World of Pokémon/Fiore/Ringtown|Ringtown]] • [[A Traveler's Guide to the World of Pokémon/Fiore/Summerland|Summerland]] • [[A Traveler's Guide to the World of Pokémon/Fiore/Wintown|Wintown]]<br>[[A Traveler's Guide to the World of Pokémon/Fiore/Lyra Forest|Lyra Forest]] • [[A Traveler's Guide to the World of Pokémon/Fiore/Krokka Tunnel|Krokka Tunnel]] • [[A Traveler's Guide to the World of Pokémon/Fiore/Waterworks|Waterworks]] • [[A Traveler's Guide to the World of Pokémon/Fiore/Olive Jungle|Olive Jungle]] • [[A Traveler's Guide to the World of Pokémon/Fiore/Jungle Relic|Jungle Relic]] • [[A Traveler's Guide to the World of Pokémon/Fiore/Dusk Factory|Dusk Factory]] • [[A Traveler's Guide to the World of Pokémon/Fiore/Panula Cave|Panula Cave]] • [[A Traveler's Guide to the World of Pokémon/Fiore/Sekra Range|Sekra Range]] • [[A Traveler's Guide to the World of Pokémon/Fiore/Fiore Temple|Fiore Temple]] |- !style="background: #FFBFFF;{{Text default color}};width:90px"| Other |colspan=2| [[A Traveler's Guide to the World of Pokémon/Regions/Orange Islands|Orange Islands]] • [[A Traveler's Guide to the World of Pokémon/Regions/Sevii Islands|Sevii Islands]] |}<noinclude>[[Category:Book:A Traveler's Guide to the World of Pokémon/Templates]]</noinclude> b32grun2rkkcfr4v1p28uhftjdjehku Draft:Chess/Famous Games/Evergreen Game 0 479615 4675324 4598325 2026-10-09T21:38:50Z Omphalographer 3427146 delete - abandoned draft 4675324 wikitext text/x-wiki {{delete|Abandoned draft? Insufficient content for a book}} =Evergreen Game= '''1.e4 1…e5 2.Nf3 2…Nc6 3.Bc4 3…Bc5 4.b4([[Chess Opening Theory/1. e4/1...e5/2. Nf3/2...Nc6/3. Bc4/3...Bc5/4. b4|Evan’s Gambit]])''' {{BookCat}} 17oca42uc0sywphmd7ephi64bpzw6ep Create Vampires/HistoricalAndCross-CulturalOriginsOfVampireArchetypes 0 483281 4675367 4670390 2026-10-10T00:37:25Z 3MMPEYTON 3393808 4675367 wikitext text/x-wiki == Create Vampires: Historical And Cross-Cultural Origins Of Vampire Archetypes == '''What is an Archetype?''' <br> According to the Merriam-Webster dictionary, Archetype means "the original pattern or model of which all things of the same type are representations or copies." [1] <br> <br> An archetype is a pattern that repeats itself in many cultures, in several historical ages. <br> <br> According to Wikipedia: <br> Jungian archetypes are a concept from psychology that refers to a universal, inherited idea, pattern of thought, or image that is present in the collective unconscious of all human beings. As the psychic counterpart of instinct (i.e., archetypes are innate, symbolic, psychological expressions that manifest in response to patterned biological instincts), archetypes are thought to be the basis of many of the common themes and symbols that appear in stories, myths, and dreams across different cultures and societies. [2] <br> <br> Q: Why do certain ideas or characters -- such as the trickster god, or the heroic figure, or the cosmic mother -- repeatedly arise in myths and belief systems? <br> <br> Archetypes provide a large frame, whereby people can analyze how different cultures develop similar concepts, or similar myths independently. These shared patterns indicate that people express common concerns, such as fear of death, or fear of illness, in a similar manner. <br> <br> From a Jungian perspective, vampires exist not just as cautionary stories found in folklore, or tales from our imagination, vampires are symbols from the deep, they are archetypes from the unconsciousness, a rich source that reveals deeper truths about our inner soul [psyche] its needs, fears, and challenges. [3] <br> <br> Although different cultures express particular differences, overall, vampires from other traditions are described as beings that drain life, return from the dead, or exist in a between state, between the living and the dead. <br> <br> When Researchers examine the similarities between vampires across cultures, Researchers and Creators define core features that create the vampire archetype. <br> <br> Although details differ, these vampire-like "beings" serve a similar cultural function. They may give warning, explain disease, and act as a valve releasing social anxieties. <br> <br> '''A general survey of vampire-like myths in global folklore''' <br> <br> ''African vampire-like "beings":'' <br> <br> Asanbosam (Ashanti, Ghana) — A forest‑dwelling creature with iron teeth and hook‑like feet; attacks from trees <br> Obayifo (West Africa) — A witch‑like being believed to drain life‑energy from children. <br> Adze (Ewe, Togo/Ghana) — A vampiric spirit that can take the form of a firefly and feed on blood or life‑force. <br> <br> ''European vampire-like "beings":''<br> <br> Strigoi (Romania) — Restless dead who return to drain vitality or blood from the living. <br> Upir (Slavic regions) — Early Slavic vampire figure; often associated with disease and nocturnal attacks. <br> Nachzehrer (Germany) — A corpse believed to consume its own burial shroud and psychically drain the living. <br> Vrykolakas (Greece) — A reanimated body associated with plague, misfortune, and nocturnal predation. <br> Mullo (Romani) — A dead person who returns to harm or drain the living. <br> <br> ''Asian vampire-like "beings":'' <br> <br> Jiangshi (China) — A “hopping” reanimated corpse that drains qi (life‑energy). <br> Penanggalan (Malaysia) — A woman whose head detaches with trailing organs; feeds on blood. <br> Manananggal (Philippines) — A being that separates its upper body and preys on humans at night. <br> Rakshasa (India) — A shape‑shifting demon that sometimes consumes flesh or life‑force. <br> Pontianak / Kuntilanak (Indonesia/Malaysia) — A vampiric spirit of a woman who died in childbirth <br> <br> <br> ''Middle Eastern vampire-like "beings"'': <br> Ghul (Arabian folklore) — A desert‑dwelling creature that consumes flesh and sometimes blood. <br> Alp (Turkic regions) — A nocturnal spirit that causes nightmares and may drain vitality. <br> Estrie (Jewish folklore) — A female vampiric demon that feeds on blood. <br> <br> ''The American vampire-like "beings":'' <br> <br> Chupacabra (Latin America) — A modern cryptid said to drain blood from livestock. <br> Tlahuelpuchi (Mexico, Tlaxcala) — A shape‑shifting being, often female, believed to feed on blood. <br> Soucouyant (Caribbean) — A woman who sheds her skin and becomes a fireball to feed on blood. <br> Wendigo (Algonquian peoples) — Not a vampire, but a cannibalistic spirit associated with hunger and consumption. <br> <br> ''Oceanian vampire-like "beings":'' <br> Yara-ma-yha-who (Australia, Aboriginal folklore) — A small red creature that drains blood through suckers on its hands and feet.<br> A diversity of beliefs are reflected concerning these life-draining "beings." <br> <br> From VAMPIRES: the dark seduction of immortality: <br> The vampire is a rich and multifaceted symbol that reflects our deepest desires, fears, and struggles. It speaks to our yearning for immortality, our fear of death, our conflicted relationship with the feminine, and our evolving cultural attitudes towards power, sexuality, and the shadow. Moreover, by studying the transformation of the vampire archetype over time, we can gain insights into the cultural and psychological dynamics that shape our collective psyche and influence our individual lives. [3] <br> <br> Through study, Researchers will better understand the development of the vampire archetype, and perhaps, readers will understand why it resonates in stories from around the world. <br> <br> <br> Link: https://en.wikibooks.org/wiki/Create_Vampires/AfricanFolklore <br> <br> Link: https://en.wikibooks.org/wiki/Create_Vampires/LatinAmericanFolklore <br> <br> Link: https://en.wikibooks.org/wiki/Create_Vampires/Asian_Folklore#Asian_Folklore <br> <br> Link: https://en.wikibooks.org/wiki/Create_Vampires/Eastern_European_Folklore <br> <br> === Reference: === 1. Merriam-webster. Archetype. In Merriam-Webster.com/dictionary. September 16, 2026 from https://www.merriam-webster.com/dictionary/archetype Archetype 2. Jungian archetypes September 8, 2026. https://en.wikipedia.org/wiki/Jungian_archetypes <br> <br> 3. Vampires: the dark seduction of immortality. August 14, 2018. https://thisjungianlife.com/ep9/ <br> <br> <noinclude>{{Chapter navigation with TOC||HistoricalAndCross-CulturalOriginsOfVampireArchetypes|TOC mini}}</noinclude> <br> {{BookCat}} rkjfskk4tnxixk01zth0b3mm8ztlcnv 4675372 4675367 2026-10-10T00:41:41Z 3MMPEYTON 3393808 4675372 wikitext text/x-wiki == Create Vampires: Historical And Cross-Cultural Origins Of Vampire Archetypes == '''What is an Archetype?''' <br> According to the Merriam-Webster dictionary, Archetype means "the original pattern or model of which all things of the same type are representations or copies." [1] <br> <br> An archetype is a pattern that repeats itself in many cultures, in several historical ages. <br> <br> According to Wikipedia: <br> Jungian archetypes are a concept from psychology that refers to a universal, inherited idea, pattern of thought, or image that is present in the collective unconscious of all human beings. As the psychic counterpart of instinct (i.e., archetypes are innate, symbolic, psychological expressions that manifest in response to patterned biological instincts), archetypes are thought to be the basis of many of the common themes and symbols that appear in stories, myths, and dreams across different cultures and societies. [2] <br> <br> Q: Why do certain ideas or characters -- such as the trickster god, or the heroic figure, or the cosmic mother -- repeatedly arise in myths and belief systems? <br> <br> Archetypes provide a large frame, whereby people can analyze how different cultures develop similar concepts, or similar myths independently. These shared patterns indicate that people express common concerns, such as fear of death, or fear of illness, in a similar manner. <br> <br> From a Jungian perspective, vampires exist not just as cautionary stories found in folklore, or tales from our imagination, vampires are symbols from the deep, they are archetypes from the unconsciousness, a rich source that reveals deeper truths about our inner soul [psyche] its needs, fears, and challenges. [3] <br> <br> Although different cultures express particular differences, overall, vampires from other traditions are described as beings that drain life, return from the dead, or exist in a between state, between the living and the dead. <br> <br> When Researchers examine the similarities between vampires across cultures, Researchers and Creators define core features that create the vampire archetype. <br> <br> Although details differ, these vampire-like "beings" serve a similar cultural function. They may give warning, explain disease, and act as a valve releasing social anxieties. <br> <br> '''A general survey of vampire-like myths in global folklore''' <br> <br> ''African vampire-like "beings":'' <br> <br> Asanbosam (Ashanti, Ghana) — A forest‑dwelling creature with iron teeth and hook‑like feet; attacks from trees <br> Obayifo (West Africa) — A witch‑like being believed to drain life‑energy from children. <br> Adze (Ewe, Togo/Ghana) — A vampiric spirit that can take the form of a firefly and feed on blood or life‑force. <br> <br> ''European vampire-like "beings":''<br> <br> Strigoi (Romania) — Restless dead who return to drain vitality or blood from the living. <br> Upir (Slavic regions) — Early Slavic vampire figure; often associated with disease and nocturnal attacks. <br> Nachzehrer (Germany) — A corpse believed to consume its own burial shroud and psychically drain the living. <br> Vrykolakas (Greece) — A reanimated body associated with plague, misfortune, and nocturnal predation. <br> Mullo (Romani) — A dead person who returns to harm or drain the living. <br> <br> ''Asian vampire-like "beings":'' <br> <br> Jiangshi (China) — A “hopping” reanimated corpse that drains qi (life‑energy). <br> Penanggalan (Malaysia) — A woman whose head detaches with trailing organs; feeds on blood. <br> Manananggal (Philippines) — A being that separates its upper body and preys on humans at night. <br> Rakshasa (India) — A shape‑shifting demon that sometimes consumes flesh or life‑force. <br> Pontianak / Kuntilanak (Indonesia/Malaysia) — A vampiric spirit of a woman who died in childbirth <br> <br> <br> ''Middle Eastern vampire-like "beings"'': <br> Ghul (Arabian folklore) — A desert‑dwelling creature that consumes flesh and sometimes blood. <br> Alp (Turkic regions) — A nocturnal spirit that causes nightmares and may drain vitality. <br> Estrie (Jewish folklore) — A female vampiric demon that feeds on blood. <br> <br> ''The American vampire-like "beings":'' <br> <br> Chupacabra (Latin America) — A modern cryptid said to drain blood from livestock. <br> Tlahuelpuchi (Mexico, Tlaxcala) — A shape‑shifting being, often female, believed to feed on blood. <br> Soucouyant (Caribbean) — A woman who sheds her skin and becomes a fireball to feed on blood. <br> Wendigo (Algonquian peoples) — Not a vampire, but a cannibalistic spirit associated with hunger and consumption. <br> <br> ''Oceanian vampire-like "beings":'' <br> Yara-ma-yha-who (Australia, Aboriginal folklore) — A small red creature that drains blood through suckers on its hands and feet.<br> A diversity of beliefs are reflected concerning these life-draining "beings." <br> <br> From VAMPIRES: the dark seduction of immortality: <br> The vampire is a rich and multifaceted symbol that reflects our deepest desires, fears, and struggles. It speaks to our yearning for immortality, our fear of death, our conflicted relationship with the feminine, and our evolving cultural attitudes towards power, sexuality, and the shadow. Moreover, by studying the transformation of the vampire archetype over time, we can gain insights into the cultural and psychological dynamics that shape our collective psyche and influence our individual lives. [3] <br> <br> Through study, Researchers will better understand the development of the vampire archetype, and perhaps, readers will understand why it resonates in stories from around the world. <br> <br> <br> Link: https://en.wikibooks.org/wiki/Create_Vampires/AfricanFolklore <br> <br> Link: https://en.wikibooks.org/wiki/Create_Vampires/LatinAmericanFolklore <br> <br> Link: https://en.wikibooks.org/wiki/Create_Vampires/Asian_Folklore#Asian_Folklore <br> <br> Link: https://en.wikibooks.org/wiki/Create_Vampires/Eastern_European_Folklore <br> <br> === Reference: === 1. Merriam-webster. Archetype. In Merriam-Webster.com/dictionary. September 16, 2026 from https://www.merriam-webster.com/dictionary/archetype Archetype 2. Jungian archetypes September 8, 2026. https://en.wikipedia.org/wiki/Jungian_archetypes <br> <br> 3. Vampires: the dark seduction of immortality. August 14, 2018. https://thisjungianlife.com/ep9/ <br> <br> <noinclude>{{Chapter navigation with TOC||AfricanFolklore|TOC mini}}</noinclude> <br> {{BookCat}} nbegmbkfrjspre8gcy1v8pekve8ry3d Create Vampires/AfricanFolklore 0 483282 4675375 4636273 2026-10-10T00:43:33Z 3MMPEYTON 3393808 4675375 wikitext text/x-wiki =='''African Folklore'''== <br> '''Asanbosam - Mythical Ghana vampire-like being''' Appearance: Asanbosam are said to have iron teeth. They are humanoid, with long hair. They have bat-like features, including large wings. Nature: Archetypal ogre. Vampiric Activity - They prey on humans, feeding off people who wander into their forest territory. Abilities: They live in trees and can attack from above. [[wikipedia:Sasabonsam|Sasabonsam - Wikipedia]] <br> '''Obayifo - Mythical West African vampire''' <br> <br> The obayifo is a myth that comes from West Africa. <br> <br> Appearance: The obayifo is described as a man or a woman. They look normal during the day, yet at night, they can be seen by their phosphorescent light that comes from their armpits or from their anal region. <br> <br> Nature: They can be male or female, although it has been suggested that the obayifo are primarily women. It is noted that the obayifo are greedy. <br> <br> Vampiric Activity: They are associated with negativity, and misfortune. They are reported as draining small children of blood, or draining the sap from plants. <br> <br> Abilities: They can fly. They will steal children. They can turn into a ball of flame, and are associated with human possession. <br> <br> Weakness: They avoid salt, Holy Priests, and may be vulnerable to starvation. <br> https://en.wikipedia.org/wiki/Obayifo '''Adze - A vampiric being, told by the people of Togo and Ghana''' Appearance: A male or female able to shift shape. It can change appearance from firefly to human. In human form, the Adze has the ability to possess its victim. Nature: Witchy. Vampiric Activity: The Adze can travel through cracks and keyholes as a firefly at night. It is able to '''''suck blood''''' from dreaming people, causing them to become ill, and possibly die. Abilities: Possession of a victim's family, or by those whom the victim is jealous. Weakness: None. There is no escape from an Adze. The Adze myth may have developed as a warning, describing the deadly effects of malaria, or mosquitoes, or both. [[wikipedia:Adze_(folklore)|Adze (folklore) - Wikipedia]] [[Bunson, Matthew (1993). The Vampire Encyclopedia. London: Thames & Hudson Ltd. p. 2.|Bunson, Matthew (1993). The Vampire Encyclopedia. London: Thames & Hudson Ltd. p. 2. ISBN]] Want to find out how a culture ''shaped by malaria from mosquitoes '''shaped''''' '''''vampire traits''''' in stories? Link: [[Create Vampires/HowCulturalTraditionsShapedVampireTraits|Create Vampires/HowCulturalTraditionsShapedVampireTraits - Wikibooks, open books for an open world]] <br> <br> <noinclude>{{Chapter navigation with TOC||LatinAmericanFolklore|TOC mini}}</noinclude> <br> {{BookCat}} 4gj2j04uo0rcwxbyvr0c01cgk99tr77 Create Vampires/HowCulturalTraditionsShapedVampireTraits 0 483291 4675386 4670480 2026-10-10T00:55:53Z 3MMPEYTON 3393808 4675386 wikitext text/x-wiki '''How Cultural Traditions Shaped Modern Vampire Traits:''' A cultural warning, from the Ewe people, against malaria caused by mosquitoes, probably created a vampire-like insect (firefly) that sucks blood and can bring illness, or death. Poor understanding of decay in humans, such as the appearance of hair and nail growth, gassy corpses emitting sounds, and the appearance of blood around the mouth, caused by processes active during death, lends credence to the belief that the dead were still somewhat alive. This belief may have translated into vampire traits whereby vampires have bodies, instead of being clear like ghost, and were reanimation of the dead. Perhaps Christianity culturally shaped many vampire weaknesses. For example, crosses and holy water were symbols of divine protection. Garlic was used as a protective herb, while a belief that iron and silver may block harmful spirits could be the reason that vampires avoid silver which harms them. Vampires were repelled by garlic, and vampires feared crosses and holy water. Eastern Europeans experiences of blood loss, atrophy, and loss of energy may have been interpreted as attacks from vampires. Perhaps this fear developed into vampire traits such as vampirism that spreads like a disease, or a virus, and the method by which vampires feed: on blood. Many cultures evolved myths about nighttime activities. Night time is less lit. The night has been associated with danger and the unknown. Vampires are active at night, they avoid the sunlight, which can often burn them alive. They are associated with predatory behavior, and darkness. The nachzehrer and the strigol are also associated with night time dwellers. Romantic and Gothic literature transformed the vampire from reddish colored and bloated, to pale and thin. Vampires were transformed from a dead body, to a charming being, possessing a high level of charisma. As Romantic and Gothic writers explored themes such as forbidden desire, sexuality, power, the boundary between life and death and immortality, vampires developed slow aging characteristics, magnetic allure, possessed immortality and existed somewhere between life and death, thus un-dead. The romantic qualities possessed by some vampires blur the lines between threat and attraction. {| class="wikitable" |+ Cultural Contributions to Modern Vampire Traits |- ! Culture / Region || Traditional Being(s) || Key Traits Contributed || How These Traits Shaped the Modern Vampire |- | Eastern Europe (Slavic, Romanian, Balkan) || Strigoi, Upir, Moroi, Vrykolakas || Reanimated corpse; nocturnal attacks; blood‑drinking; contagion; returning from the grave || Forms the core of the modern vampire: undead body, feeding on blood, spreading vampirism, rising from the grave |- | Western Europe (Germanic, Celtic) || Nachzehrer, Draugr || Corpse that harms the living; grave‑associated revenants; physical strength || Reinforces the idea of vampires as physically present, dangerous, and tied to burial practices |- | Middle East (Arabian, Turkish) || Ghul, Alp || Nocturnal predation; draining life or vitality; shape‑shifting|| Adds predatory stealth, dream‑draining, and the idea of supernatural feeding beyond blood |- | Africa (West African traditions) || Asanbosam, Obayifo, Adze || Tree‑dwelling predators; energy‑draining; witch‑like feeding || Influences modern “energy vampire” concepts and non‑blood feeding variations |- | China || Jiangshi || Reanimated corpse; stiff movement; qi‑draining; nocturna || Contributes the idea of life‑force draining and corpse‑like rigidity |- | Southeast Asia (Malaysia, Philippines, Indonesia) || Penanggalan, Manananggal, Pontianak|| Female vampiric beings; night feeding; organ‑detachment; blood consumption || Shapes modern horror depictions of female vampires and body‑separation motifs |- | India || Vetala, Rakshasa || Spirit‑possession; corpse animation; predatory behavior || Adds psychological manipulation and possession themes to vampire fiction |- | Caribbean|| Soucouyant || Skin‑shedding; night feeding; fireball form || Influences shapeshifting and supernatural transformation tropes |- | Mesoamerica (Mexico || Tlahuelpuchi || Shape‑shifting; nocturnal feeding; hereditary vampirism || Contributes hereditary or “born vampire” concepts |- | Modern Western Literature (18th–19th century) || Polidori’s Vampyre, Le Fanu’s Carmilla, Stoker’s Dracula || Seduction; aristocracy; immortality; aversion to sunlight; sophisticated predator|| Establishes the literary vampire: charismatic, immortal, romanticized, and culturally iconic |} Vampire-like creatures appear in many shapes, in many fictional stories, yet they retain a similar core. They are depicted as beings that drain life, prey on the living, and exist between worlds. <br> <br> <noinclude>{{Chapter navigation with TOC||What_Is_A_Literary_Trope|TOC mini}}</noinclude> <br> {{BookCat}} ppk0mk41fwfc67pbe25dojhoqyjsvt4 Create Vampires/LatinAmericanFolklore 0 483292 4675378 4638265 2026-10-10T00:45:39Z 3MMPEYTON 3393808 4675378 wikitext text/x-wiki == '''Latin-American Folklore''' == '''''Chupacabra'' - Mythical American Vampire''' <br> <br> Appearance: In Hispanic America, the chupacabra is heavy, reptilian and alienish. It is described as having a row of spines from neck to tail.<br> In the United States, it is more dog-like. Many reports of chupacabra were mostly dogs and coyotes with mange, which gave them an unusual appearance. <br> <br> Vampiric Activity: Chupacabra are thought to drink the blood of livestock, especially goats. <br> Many of the dead livestock had two holes in the neck. <br> <br> https://en.wikipedia.org/wiki/Chupacabra <br> '''''Tlahuelpuchi'' - Mythical Mexican Vampire''' <br> <br> Appearance: The Tlahuelpunchi has a glowing aura when it shape shifts. They can take the form of some birds when they hunt. <br> <br> Nature: Vampire-witch. According to myths, they are born with their curse, which develops around puberty. There are more females than males, with female power stronger than the males. <br> <br> Vampiric Activity: Sucks the blood of infants at night. <br> <br> Abilities: Shape shift (by detaching their bodies from their legs). <br> <br> Weakness: They must feed on blood at least once a month, or they will die. They avoid onions, garlic and metal. https://en.wikipedia.org/wiki/Tlahuelpuchi '''''Soucouyant'' - Mythical Caribbean Creature''' Appearance: Old man or woman during the day, at night they take off their old skin and put it in a mortar. Nature: practices black magic, witchy. Vampiric Activity: They are thought to be blood sucking creatures, who take blood from arms, necks, and legs while the victims are unconscious. Abilities: Shapeshift, trade blood for power with Bazil (demon). Weakness: Must stop to gather spilled rice, grain by grain. When they strip off their skin, and place it in a mortar, they can be destroyed by putting coarse salt in the mortar with its skin. [[wikipedia:Soucouyant|Soucouyant - Wikipedia]] '''''Wendigo'' - Mythical Native American Creature''' Appearance: Human like. In some versions of its stories, it is a giant humanoid with a heart of ice. Its presence can be detected by a foul smell or by chills. Nature: Evil spirit Vampiric Activity: They prey on humans to feed, in the form of human cannibalism. Abilities: They can possess human beings. They can cause insatiable hunger in victims, including a desire to eat other people. [[wikipedia:Wendigo|Wendigo - Wikipedia]] <br> <br> <noinclude>{{Chapter navigation with TOC||Asian_Folklore#Asian_Folklore|TOC mini}}</noinclude> <br> {{BookCat}} hums2ogn254xlkghj07eo7iy10cgmn3 Create Vampires/Authors Who Created Vampire Tropes 0 483294 4675391 4635555 2026-10-10T01:01:23Z 3MMPEYTON 3393808 4675391 wikitext text/x-wiki '''Authors Who Created Vampire Tropes''' * John Polidori - The Vampyre (1819) - Before Polidori, vampires were bloated, corpse-like normal folks in folklore. After Polidori, there emerged a sophisticated, upper-class vampire, the ancestor for most modern '''''sexy''''' vampire characters. * Sheridan Le Fanu - Carmilla (1872) - Le Fanu wrote a blueprint for the vampire as '''''forbidden desire''''' trope. His work directly influenced Bram Stoker. * Bram Stoker - '''Dracula''' (1897) - Stoker stabilized vampire traits into one standard version, shared around the world. * Philip Burn-Jones & Rudyard Kipling - The Vampire (1897) - Their painting and poem created early 20th century '''''vamp''''' archetype of a destructive yet tempting woman. This influenced pop culture and film. * Bela Lugosi - Dracula (1931) - Lugosi created a visual vampire archetype known around the world. * Anne Rice - Interview with the Vampire (1976) - Rice reinvented the vampire for modern readers and movie goers. * Joss Whedon - Buffy the Vampire Slayer (1997) - Buffy created many storytelling rules that we used today. * Stephenie Meyer - Twilight (2005) - Twilight reshaped vampire fiction for a new audience.<br /> {| class="wikitable" |+ Who Created Which Tropes |- ! Author / Creator !! Major Tropes Introduced or Codified |- | Polidori|| Aristocratic vampire, seductive gentleman |- | Le Fanu || Female seductress vampire, tragic intimacy |- | Stoker || Vampire weakness, hunters, castle, transformations |- | Burne-Jones & Kipling || Femme fatale "vamp," emotional vampirism |- | Murnau || Sunlight kills vampires, plague imagery |- | Lugosi || Cape, hypnotic stare, iconic mannerisms |- | Anne Rice || Sympathetic vampires, vampire society, moral conflict |- | Joss Whedon || Vampire dusting, vampire with a soul, teen metaphors |- | Stephenie Meyer || Sparkling vampires, integration into society, romance focus |- |} <br> <br> <noinclude>{{Chapter navigation with TOC||writers_who_did_not_create_vampires|TOC mini}}</noinclude> <br> {{BookCat}} hv3defugl7ahfqpxp73vhyzjboj05b8 Create Vampires/What Is A Literary Trope 0 483299 4675389 4662596 2026-10-10T00:58:11Z 3MMPEYTON 3393808 4675389 wikitext text/x-wiki What Is A Literary Trope? Storytellers often try to find the right form, or structure to shape their words around. In Literature, many vampire constructs have been created. A construct is an idea, or a conceptual model. A trope is a type of construct. '''What Is A Trope?''' According to Merriam-Webster, a trope is "a word or expression used in a figurative sense: Figure of Speech." 2. Cliche 3. Motif [[mwod:trope|TROPE Definition & Meaning - Merriam-Webster]] A trope is a reoccurring plot device, motif, archetype, or theme used by storytellers. Tropes build structure. Think of a trope as a construct used by creators to build narratives. Examples of popular trope plots include a "love triangle" or a "damsel in distress." [https://www.poetryfoundation.org/education/glossary/trope Trope | The Poetry Foundation] Link: [[Create Vampires/Examples Of Literary Pitfalls|Create Vampires/Examples Of Literary Pitfalls - Wikibooks, open books for an open world]] <br> <br> <noinclude>{{Chapter navigation with TOC||Examples_Of_Literary_Pitfalls|TOC mini}}</noinclude> <br> {{BookCat}} j6yydqr397x06uqoe9imjqq364vr11u Create Vampires/Examples Of Literary Pitfalls 0 483302 4675390 4670362 2026-10-10T00:59:58Z 3MMPEYTON 3393808 4675390 wikitext text/x-wiki '''Examples Of Literary Pitfalls In Vampire Fiction''' <br> <br> 1. '''Overreliance on tropes without variation.''' <br> <br> Falls into pitfall:<br> <br> Many Vampire films (1990s - 2000s). Because of their low budget, this film niche is known for recycling the same element: <br> pale thin seducer, cape, castle, hypnotic gaze... without adding new meaning. <br> <br> Avoids the pitfall: <br> Anne Rice's ''Interview with the Vampire''. <br> Rice keeps familiar traits such as immortality, and blood drinking, but adds moral conflict, complex relationships, and existential dread. <br> <br> Why it matters: Readers want to recognize the vampire, yet not a copy-and-paste vampire. <br> <br> 2. '''Telling instead of showing:''' <br> <br> Falls into pitfall: <br> <br> Some Young Adult, or YA novels (after Twilight's success). <br> Instead of letting actions reveal, characters explain their feelings. [Ex: "I was so scared," "He was dangerous"] <br> <br> Avoids the pitfall: Bram Stoker's '''Dracula'''. <br> Fear is shown through letters, diary entries, and reactions, not direct explanation. <br> <br> Why it matters: Showing creates immersion, telling creates distance. <br> <br> 3. '''Inconsistent Worldbuilding:''' <br> <br> Falls in pitfall: <br> <br> The Underworld film series. Rules that govern vampire weaknesses, vampire strengths, and hybridization, shift between films. <br> <br> Avoids the pitfalls: <br> Buffy the Vampire Slayer. <br> <br> Why it matters: Readers trust worlds that obey their own logic. <br> <br> 4. '''Flat or One-Dimensional Characters:''' <br> <br> Falls in pitfall: <br> <br> Early pulp vampire villains. They exist only as a plot device, no motive, or depth. <br> <br> Avoid the pitfalls: <br> Carmilla (Le Fanu) <br> Carmilla is predatory, but also affectionate, lonely, and tragic. Emotionally layered. <br> <br> Why it matters: Complexity makes monsters memorable. <br> <br> 5. '''Overexplaining Lore''' <br> <br> Falls in pitfall:<br> <br> Some modern fantasy novels. <br> They pause the story, in order to take long lore dumps. These dumps pause for too long. Dumps are often about vampire history, bloodlines and councils. <br> Avoids the pitfall: <br> Guillermo del Toro's ''The Strain'' <br> Lore is revealed gradually through action, consequences, and investigation. <br> <br> Why it matters: <br> Readers want discovery, not lectures. 6. '''Underdeveloped Stakes''' <br> <br> Falls in pitfall: <br> <br> Romantic vampire stories where everyone is immortal. <br> If one can not die, stakes evaporate. <br> <br> Avoids the pitfalls: <br> The Lost Boys. <br> <br> Why it matters: <br> Stakes create tension, tension creates story. <br> <br> 7. '''Forced Romance''' <br> <br> Falls into pitfall: <br> Some paranormal romance series. Characters fall in love instantly. There is little believable development. <br> <br> Avoid the pitfall: <br> Buffy & Angel (Buffy the Vampire Slayer) Their relationship grows through sacrifice. <br> <br> Why it matters: <br> Earned emotion is powerful, forced emotion is empty inside. <br> <br> Link: https://en.wikibooks.org/wiki/Create_Vampires/Authors_Who_Created_Vampire_Tropes <br> <br> <noinclude>{{Chapter navigation with TOC||Authors_Who_Created_Vampire_Tropes|TOC mini}}</noinclude> <br> {{BookCat}} 0ojwstlxdfek8cdtqzbkbycybpfkxqr Create Vampires/Vampire History 0 483372 4675400 4662617 2026-10-10T01:12:40Z 3MMPEYTON 3393808 4675400 wikitext text/x-wiki == '''Vampire History''' == Although reports of vampiric 'beings' have been recorded in cultures from around the world, the term ''vampire'' was coined in Western Europe, after being popularized following reports of mass hysteria during the 18th century. These reports fueled a pre-existing folk belief in vampires in Southeastern and Eastern Europe. <br> This delusion led to accusations of vampirism, and led to the corpses of suspected future vampires being pierced with wooden stakes. <br> <br> In modern times, the vampire is generally held to be a fictitious entity. Early folk beliefs in vampires has sometimes been ascribed to the ignorance of decomposition, the body's process of decaying after death. <br> Perhaps people in pre-industrial societies tried to reason about death, creating the vampire archetype to explain the mysteries of death. <br> Porphyria was linked with vampirism in 1985, and generated many media reports in popular culture, but has largely been discredited. <br> <br> Cultural practices, designed to keep the recently deceased from turning into a undead revenant, often arose around the world. <br> For example, burying a corpse upside-down was widespread, as was placing earthly objects near the grave, in order to appease the dead, so they would stay in their coffins. <br> <br> In Greek folklore, about the vrykolakas, a wax cross and piece of pottery with the inscription "Jesus Christ conquers" was put on the corpse, to prevent the body from turning into a vampire. <br> <br> Other methods popular in Europe, included disjoining the tendons at the knees, or placing poppy seeds, or sand on the grave site of a presumed vampire, this was to keep the vampire occupied all night by counting the grains. A similar Chinese narrative reports that if a vampiric being came across a sack of rice, it would have to count every grain. This archetype emerged in many myths from the Indian subcontinent, as well as in South American tales of witches and other mischievous beings. [[wikipedia:Vampire|Vampire - Wikipedia]]<br> <br> {| class="wikitable" |+ |- | <u>'''Historic Media Vampiric Reports'''</u> <br> |} The 12th century British historians and chroniclers Walter Map and William of Newburgh recorded accounts of revenants. [1] [2] An early recording of the time came from the region of Istria in modern Croatia, in 1672. Local reports reported a panic amongst the villagers, reacting on their belief that Jure Grando had become a vampire after dying in 1656, drinking his victim's blood and sexually harassing his widow. The leader of the village ordered a stake be driven through Grando's heart. His corpse was later beheaded. [3] In the 18th century, the belief in vampires was once again on the rise. One infamous vampire occurrence involved the corpse of Peter Blagojevic from Serbia. At the age of 62, Blagojevic was reported as dead, but he allegedly returned after his death, asking his son for food. After the son refused, he was found dead the following day. It was believed that Blagojevic returned and attacked some of his neighbors who died from blood loss. [4] Another infamous case, is of the ex-soldier-turned farmer, Milos Cecar. He was allegedly attacked by a vampire years before he died while haying. After his death, people in the surrounding area began to die. It was believed that Milos had returned from the dead to prey on his neighbors. The Blagojevic and Cecar incidents were well-documented. Officials examined the bodies, wrote reports, and even published books, popular throughout Europe. Many rural vampire attacks generated much superstition, and influenced actions taken by locals, such as digging up bodies, and in some cases, stalking them. Government officials joining the village people, engaged in the hunting and staking of vampires. [4] The hysteria commonly referred to as the "vampire controversy," continued for a generation. [5] Dom Augustine Calmet, a French Theologian and Scholar, published a comprehensive treatise in 1751 titled '''Treastise on the Apparitions of Spirits and on Vampires or Revenants''' which investigated and analyzed the evidence for vampirism. In modern day Romania, in February 2004, Toma Petre's relatives, fearing he had become a vampire, dug up his corpse. They tore out his heart, burned it, then mixed its ashes with water, to better drink it. [6] === Question: What did we learn from periods of mass vampire hysteria, and how did this change cultural practices, human behavior or society? === === Answer: People learned better burial methods, and better techniques for treating the dead. The 1985 media scare that mistakenly linked porphyria, a rare blood disorder, to vampirism shaped late-80s subcultures, and modern vampire tropes. People became more aware of porphyria, and the people effected by the disorder.  === Link: [[Create Vampires/Vampire Historic Fiction|Create Vampires/Vampire Historic Fiction - Wikibooks, open books for an open world]]<br> <br> {| class="wikitable" |+ |- ! References |- | https://en.wikipedia.org/wiki/Vampire |- |1. Cohen, Daniel (1989). The Encyclopedia of Monsters: Bigfoot, Chinese Wildman, Nessie, Sea Ape, Werewolf and many more ... London: Michael O'Mara Books Ltd. ISBN 978-0-948397-94-3. |- |2. William of Newburgh; Halsall, Paul (2000). "Book 5, Chapter 22–24". Historia rerum Anglicarum. Fordham University. Archived from the original on 19 February 2014. Retrieved 16 October 2007 |- |3. Bohn, Thomas M. (2019). The Vampire: Origins of a European Myth. Cologne: Berghahn Books. pp. 47–49. ISBN 978-1-78920-293-9. |- |4. Barber, Paul (1988). Vampires, Burial and Death: Folklore and Reality. New York: Yale University Press. ISBN 978-0-300-04126-2. |- |5. Melton, J. Gordon (1994). "Vampire". The Vampire Book. Visible Ink Press. p. 630. the vampire controversy of the 1730s [p.467] ... the eighteenth-century vampire controversy [p. 630] |- |6. Taylor, T. (28 October 2007). "The real vampire slayers". The Independent. London. Archived from the original on 19 December 2007. Retrieved 14 December 2007 |} <br> <br> <noinclude>{{Chapter navigation with TOC||Scientific_Evidence|TOC mini}}</noinclude> <br> {{BookCat}} 884mwunjjvqug6glfyp4fqbmhnjzvig Create Vampires/Asian Folklore 0 483388 4675379 4636322 2026-10-10T00:48:16Z 3MMPEYTON 3393808 4675379 wikitext text/x-wiki == Asian Folklore == <br> <br> {| class="wikitable" |+ Jiangshi Custome |- | [[File:Jiangshi custome.jpg|thumb|jiangshi costume]] |} '''Jiangshi -- Mythical Chinese Vampire-like Being''' <br> <br> Appearance: They appear as a stiff corpse dressed in official garments from the Qing dynasty. In folklore accounts, they are described as having greenish-white skin, possibly due to fungal or mold growth. <br> <br> Nature: Reanimated corpse. <br> <br> Vampiric Activity: Can absorb yang energy <br> <br> Abilities: They are characterized by hopping, and sometimes by flying. <br> <br> Weakness: Mirrors, Peach tree wood, A rooster's call, Jujube seeds, Fire, Vinegar, Adzuki beans, The I Ching, and many more items. <br> <br>[[wikipedia:Jiangshi|Jiangshi - Wikipedia]] '''Manananggal -- Mythical Creature From The Philippines''' Appearance: Grotesque creature. They are known to detach its upper torso from its lower half with its entrails exposed. It grows large wings, similar to bats. Nature: Most are females. Vampiric Activity: It will fly around at night on bat-like wings. They prey on human life: reported to prey on sleeping pregnant women. Its long tongue can draw blood. Ability: Flight Weakness: Salt, Ash, Fire, or Garlic when applied to the lower half, thus preventing it from rejoining. If it does not reunite itself before sunrise, it dies. [[wikipedia:Manananggal|Manananggal - Wikipedia]] '''Penanggalan -- Mythical Malaysian Vampiric Creature''' Appearance: It appears human during the day. By night, it appears like a disembodied woman's head. Its organs trail from its neck. Reported to twinkle. Nature: Witch. Ghost. Vampiric Activity: Hunts by night. Feeds off menstruation, or blood from giving birth. Victims are pregnant women and young boys. Ability: Able to form demonic pacts. Weakness: They can be destroyed by putting broken glass into their empty neck cavity. [[wikipedia:Penanggalan|Penanggalan - Wikipedia]] '''Pontianak / Kuntilanak -- Mythical Malaysian / Indonesian Creature''' Appearance: It usually appears like a beautiful woman, capable of transforming into a ugly monster. Appears like a long haired woman dressed in white. Nature: Vengeful spirit. Vampiric Activity: Preys on human life: feeds off of human organs. The kuntilanak commonly takes the form of a bird and sucks the blood of young women, including virgins. Ability: Can take the form of an owl, or large bird. Weakness: Driving a nail into the hole located on the nape of its neck. [[wikipedia:Kuntilanak|Kuntilanak - Wikipedia]] <br> <br> <noinclude>{{Chapter navigation with TOC||Eastern_European_Folklore|TOC mini}}</noinclude> <br> {{BookCat}} c8hfqdddu560qyd7uy7quzx6dllcg5m Create Vampires/What Is A Historical Construct 0 485330 4675396 4663568 2026-10-10T01:08:55Z 3MMPEYTON 3393808 4675396 wikitext text/x-wiki == What Is A Historical Construct? == <br> A historical construct is an idea that groups human behavior and human actions together, bound by social norms. According to ThoughtCo.com "A historical construct is an idea, concept, or category created, shaped, and given meaning by human societies during a specific period. Rather than being fixed, natural, or absolute truths, historical constructs emerge from specific cultural, political, and economic conditions and change as history unfolds." An example of a historical construct are men who belong to the Whig party wearing wigs. <br> <br> Collective beliefs form most historical constructs. These beliefs evolve as we gather better information. As human perspectives change, our mental constructs change. <br> <br> Many writers attempt to reconstruct History from new perspectives, or through a modern cultural lens. <br> <br> Link: https://en.wikibooks.org/wiki/Create_Vampires/Vampire_History Reference: Link: https://www.thoughtco.com/social-constructionism-4586374 <br> <br> <noinclude>{{Chapter navigation with TOC||Factual_Basis_For_Vampires|TOC mini}}</noinclude> <br> {{BookCat}} 5du6fphmwtx2p281v2kifnvfmpg5n8t Create Vampires/Cultural Construct 0 485405 4675369 4670455 2026-10-10T00:39:26Z 3MMPEYTON 3393808 4675369 wikitext text/x-wiki == What Is A Cultural Construct? == <br> According to studysmarter, "Cultural constructs are the socially and historically developed ideas and practices that shape the way individuals perceive and interact with their world, influencing aspects like norms, values, and beliefs." [1] <br> <br> One writer on Quora writes: "So, sexual reproduction is biological in origin. On the other hand, the gendered idea that male babies have blue-colored toys and nursey decorations, but female babies have pink-colored toys and nursery decorations, is a cultural construct." [2] <br> <br> A cultural construct is an idea, belief, or pattern of behavior that a society creates and passes down through shared experience. Cultural constructs are not universal or natural; they emerge from a community’s history, environment, values, fears, and storytelling traditions. They help define how a culture understands the world and how it teaches meaning to its members. Examples of cultural constructs include beauty standards, taboos, rituals, moral lessons, and supernatural beings. These constructs reveal what a society protects, what it fears, and what it considers important. Vampires as Cultural Constructs: <br> Vampires are not simply fictional monsters. They are cultural responses to real concerns within the communities that created them. Each tradition’s vampire reflects specific social anxieties, spiritual beliefs, and historical conditions. Different cultures developed different vampire figures because they faced different threats and held different worldviews. For example, some traditions focus on improper burial, others on spiritual imbalance, and others on community betrayal. These variations show how cultural constructs adapt to local needs and values. Using Cultural Constructs in Vampire Lore: <br> Writers can use cultural constructs to create richer and more respectful vampire lore. Instead of inventing traits randomly, writers can build vampires from the logic of a culture’s worldview. This process begins by identifying the fears and values of the culture being represented. A vampire may embody a fear of contamination, betrayal, spiritual imbalance, or loss of identity. It may violate a cultural value such as purity, lineage, ritual correctness, or community cohesion. By grounding vampire traits in cultural meaning, writers create lore that feels authentic rather than generic. <br> === What Is A Cultural Vampire Construct? === "A cultural vampire construct is a theoretical framework in cultural studies and literary criticism that views the vampire not just as a monster, but as a symbol created by society to represent deeper anxieties, power dynamics, and economic systems." [3] <br> <br> Q: How do people treat vampires in Fiction? <br> Q: What cultural constructs in Fiction limit a vampire character from developing? <br> Q: What ideas or beliefs help, or harm, vampires in Fiction? <br> Q: Does the vampire symbolize something greater? <br> Q: What cultural fears can the vampire character reflect? <br> Link: https://en.wikibooks.org/wiki/Create_Vampires/Vampires_In_Popular_Culture {| class="wikitable" |+ References |- ! What Is A Cultural Construct? |- |1. [https://www.studysmarter.co.uk/explanations/anthropology/cultural-anthropology/cultural-constructs/ www.studysmarter.co.uk - Cultural Construct] |- | 2. Wheeler, Kip "What is the meaning of 'cultural construct?' 2021 quora.com |- | 3. SSRN eLibrary https://papers.ssrn.com Zurutuza, Kristian Perez. The Vampire as the Gender and Racial Construction of Western Capitalism's White Masculinity in English and American Gothic Literature. Date Written: November 1, 2015 |} <br> <noinclude>{{Chapter navigation with TOC||HistoricalAndCross-CulturalOriginsOfVampireArchetypes|TOC mini}}</noinclude> <br> <br> {{BookCat}} grzdikzn8kcjz0qnfm424xkrebpy3tr Create Vampires/Vampires In Popular Culture 0 485406 4675393 4670373 2026-10-10T01:05:07Z 3MMPEYTON 3393808 4675393 wikitext text/x-wiki == How Have Vampires Shaped Popular Culture In America? == In America, vampires (although fictional) have shaped our popular culture by serving as a type of mirror, reflecting our societal fears, and our hidden attraction towards antiheroes. Vampires currently serve as templates for romantic protagonist and are a dominate archetype across many medias: film, television and literature. <br> <br> '''In Popular Culture Vampires Are:''' <br> <br> - '''''The Universal Outsider''''' <br> <br> Most vampires represent marginalized groups, or symbolize the rebel rejecting strict societal norms. This makes vampires a popular symbol of rebellion and otherness. <br> <br> - '''''Cinematic Icons''''' <br> <br> In 1931 the Actor Bela Lugosi portrayed the most iconic vampire in a film. In Dracula, Lugosi cemented the vampire's iconic look with a long cape, sophisticated dress, and a hypnotic charm. This film shaped how vampires were portrayed in films, in popular culture. <br> <br> - '''''Reflections Of National Anxieties''''' <br> <br> In popular culture, vampires are frequently used to represent marginalized groups, such as immigrants, outsiders, or gay males who try to blend into mainstream society. <br> <br> Through film, vampire "mania" reflected national fears. The blaxploitation film, Blacula, reflected racial tensions found in real African-American communities during the 1970s. The AIDS epidemic influenced dark horror films made during the 1980s. <br> The films reflected the fears the general public felt surrounding AIDS. <br> After 9-11, American cinema swarmed with horror films centered on survival during post-apocalyptic times. <br> <br> - '''''The Seductive Antihero'''''<br> <br> Anne Rice's influential novel <u>Interview with the Vampire</u>, released in 1976, gave vampires emotional depth, a deepened sensuality, and a tormented awareness. <br> <br> Link: https://en.wikibooks.org/wiki/Create_Vampires/Vampires_Memes <br> <br> <br> <noinclude>{{Chapter navigation with TOC||Vampires_Memes|TOC mini}}</noinclude> <br> {{BookCat}} 89eq5rpo61n6wui3z6ljptpk6w1hyw9 Create Vampires/Vampires Memes 0 485673 4675395 4670411 2026-10-10T01:06:46Z 3MMPEYTON 3393808 4675395 wikitext text/x-wiki == Vampire Memes? == === What are memes? === A meme [Pronounced: Me-Em-Mah] is an idea, behavior, style, or usage that spreads from person to person within a culture. [1] The origin of the word "meme" comes from Richard Dawkins, a famous Evolutionary Biologist who coined the word in his 1976 book: ''The Selfish Gene''. Dawkins used '''meme''' to describe a "unit of cultural transmission" that replicates and evolves like a gene. <br> <br> Although vampires as a cultural concept has mutated and evolved, from historical accounts of people who were misunderstood, to mythical creatures found in folklore, to supernatural monsters found in popular Literature, are vampires memes? The vampire as a cultural concept seems to have transmuted from culture to culture. <br> References: <br> 1. Merriam-Webster. Meme. In Merriam-Webster.com/dictionary. Retrieved September 15, 2026 from https://www.merriam-webster.com/dictionary/meme <br> <br> <noinclude>{{Chapter navigation with TOC||What_Is_A_Historical_Construct|TOC mini}}</noinclude> <br> {{BookCat}} nq5w78rdtzfehc4oi69na32n0bgnf4i Wikibooks:Reading room/Administrative Assistance/Archives/2026/September 4 485674 4675431 4675281 2026-10-10T08:10:28Z ArchiverBot 1227662 Bot: Archiving 2 threads from [[Wikibooks:Reading room/Administrative Assistance]] 4675431 wikitext text/x-wiki {{talk archive}} == Jeevandan26 reported by MathXplore == * {{userlinks|Jeevandan26}} Link spam, [[Special:AbuseLog/315288]] <!-- USERREPORTED:/Jeevandan26/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:14, 1 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:20, 1 September 2026 (UTC) == Gloriagulshan reported by MathXplore == * {{userlinks|Gloriagulshan}} [[:w:Wikipedia:Sockpuppet investigations/Kagoz]] ([[Special:Contributions/Tikapara]], [[Wikibooks:Reading_room/Administrative_Assistance/Archives/2025/September#Tikapara_reported_by_MathXplore]]), created page [[Introduction to Filmmaking]] Contributed by Ali Zulfikar Zahedi ([[:w:Ali Zulfikar Zahedi]], [[:w:simple:Ali Zulfikar Zahedi]]) <!-- USERREPORTED:/Gloriagulshan/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 03:56, 29 August 2026 (UTC) :I believe this page is intended as instructional material for learning filmmaking rather than as an encyclopedic article. I will revise the page to focus on practical filmmaking concepts, methods, and processes in accordance with the purpose of Wikibooks. [[User:Gloriagulshan|Gloriagulshan]] ([[User talk:Gloriagulshan|discuss]] • [[Special:Contributions/Gloriagulshan|contribs]]) 04:20, 29 August 2026 (UTC) : Cc: {{ping|SHB2000|MarcGarver}} [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 04:41, 29 August 2026 (UTC) ::I see the account is glocked, and there are no sleepers that aren't already locked, so nothing more to do. [[User:MarcGarver|MarcGarver]] ([[User talk:MarcGarver|discuss]] • [[Special:Contributions/MarcGarver|contribs]]) 11:18, 3 September 2026 (UTC) == Mohansai00116 reported by MathXplore == * {{userlinks|Mohansai00116}} Link spam, [[Special:AbuseLog/315335]] <!-- USERREPORTED:/Mohansai00116/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:09, 2 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:04, 3 September 2026 (UTC) == Fatemai6 reported by MathXplore == * {{userlinks|Fatemai6}} Link spam, [[Special:AbuseLog/315329]] <!-- USERREPORTED:/Fatemai6/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:10, 2 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:05, 3 September 2026 (UTC) == Kamrulhasan147 reported by MathXplore == * {{userlinks|Kamrulhasan147}} Link spam, [[Special:AbuseLog/315327]], [[Special:Contributions/Kamrulhasan142]] <!-- USERREPORTED:/Kamrulhasan147/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:12, 2 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:05, 3 September 2026 (UTC) == Kamrulhasan142 reported by MathXplore == * {{userlinks|Kamrulhasan142}} Link spam, [[Special:AbuseLog/315295]], [[Special:Contributions/Kamrulhasan147]] <!-- USERREPORTED:/Kamrulhasan142/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:13, 2 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:05, 3 September 2026 (UTC) == Twenty7incgs reported by MathXplore == * {{userlinks|Twenty7incgs}} Link spam, [[Special:AbuseLog/315323]] <!-- USERREPORTED:/Twenty7incgs/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:14, 2 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:05, 3 September 2026 (UTC) == Tailleash reported by MathXplore == * {{userlinks|Tailleash}} Link spam, [[Special:AbuseLog/315318]] <!-- USERREPORTED:/Tailleash/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:15, 2 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:05, 3 September 2026 (UTC) == Md Akash Mia12 reported by MathXplore == * {{userlinks|Md Akash Mia12}} Link spam, [[Special:AbuseLog/315299]], [[Special:AbuseLog/315298]] <!-- USERREPORTED:/Md Akash Mia12/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:17, 2 September 2026 (UTC) : {{done|Page deleted}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:03, 3 September 2026 (UTC) == Vapesitefiftybar reported by MathXplore == * {{userlinks|Vapesitefiftybar}} Link spam, [[Special:AbuseLog/315338]] <!-- USERREPORTED:/Vapesitefiftybar/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:40, 2 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:05, 3 September 2026 (UTC) == Myteethtime1 reported by MathXplore == * {{userlinks|Myteethtime1}} Spam <!-- USERREPORTED:/Myteethtime1/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:54, 4 September 2026 (UTC) : {{Done}} by MarcGarver. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:28, 4 September 2026 (UTC) == Rajstartupservices reported by MathXplore == * {{userlinks|Rajstartupservices}} Link spam, [[Special:AbuseLog/315363]] <!-- USERREPORTED:/Rajstartupservices/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 14:33, 4 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:28, 4 September 2026 (UTC) == Reazulkarim545456 reported by MathXplore == * {{userlinks|Reazulkarim545456}} Link spam, [[Special:AbuseLog/315377]] <!-- USERREPORTED:/Reazulkarim545456/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 06:39, 6 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:19, 6 September 2026 (UTC) == Fahmidafy reported by MathXplore == * {{userlinks|Fahmidafy}} Link spam, [[Special:AbuseLog/315378]] <!-- USERREPORTED:/Fahmidafy/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 06:40, 6 September 2026 (UTC) : The filter stopped them three times, no action taken. Please re-report if they continue spamming. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:20, 6 September 2026 (UTC) == Grow spark digital reported by MathXplore == * {{userlinks|Grow spark digital}} Link spam, [[Special:AbuseLog/315381]] <!-- USERREPORTED:/Grow spark digital/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 06:42, 6 September 2026 (UTC) : Only one filter hit, seems stale. Please re-report if they continue to spam. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:49, 6 September 2026 (UTC) == Korigosnacks reported by MathXplore == * {{userlinks|Korigosnacks}} Link spam, [[Special:AbuseLog/315383]] <!-- USERREPORTED:/Korigosnacks/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 10:32, 6 September 2026 (UTC) : Stale after only two filter hits and no edits. Please re-report if they spam later. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:56, 6 September 2026 (UTC) == Athoyislam reported by MathXplore == * {{userlinks|Athoyislam}} Spam <!-- USERREPORTED:/Athoyislam/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 10:47, 7 September 2026 (UTC) :{{done}} ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 11:31, 7 September 2026 (UTC) == Jamal123lll reported by MathXplore == * {{userlinks|Jamal123lll}} Link spam, [[Special:AbuseLog/315402]] <!-- USERREPORTED:/Jamal123lll/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 10:48, 7 September 2026 (UTC) :{{done}} ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 11:32, 7 September 2026 (UTC) == Idontknowidkh reported by MathXplore == * {{userlinks|Idontknowidkh}} online shopping spam, [[Special:AbuseLog/315400]] <!-- USERREPORTED:/Idontknowidkh/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 10:49, 7 September 2026 (UTC) :{{done}} ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 11:33, 7 September 2026 (UTC) == Ridhisharma1999 reported by MathXplore == * {{userlinks|Ridhisharma1999}} Link spam, [[Special:AbuseLog/315435]] <!-- USERREPORTED:/Ridhisharma1999/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:01, 9 September 2026 (UTC) :{{Done}} ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 12:02, 9 September 2026 (UTC) == Thenaoriudaipur reported by MathXplore == * {{userlinks|Thenaoriudaipur}} Link spam, [[Special:AbuseLog/315473]] <!-- USERREPORTED:/Thenaoriudaipur/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:47, 10 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:49, 10 September 2026 (UTC) == Networkkingss reported by MathXplore == * {{userlinks|Networkkingss}} Link spam, [[Special:AbuseLog/315458]] <!-- USERREPORTED:/Networkkingss/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:50, 10 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:49, 10 September 2026 (UTC) == ~2026-49226-92 reported by MathXplore == * {{anonlinks|~2026-49226-92}} Vandalism <!-- USERREPORTED:/~2026-49226-92/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:57, 10 September 2026 (UTC) : {{done}}. I also nuked all pages created by this user and their connected temporary accounts based on their associated IP(s). [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:48, 10 September 2026 (UTC) == ~2026-49632-08 reported by MathXplore == * {{anonlinks|~2026-49632-08}} Spam <!-- USERREPORTED:/~2026-49632-08/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 04:08, 13 September 2026 (UTC) :{{done}} [[User:JackPotte|JackPotte]] ([[User talk:JackPotte|discuss]] • [[Special:Contributions/JackPotte|contribs]]) 06:39, 13 September 2026 (UTC) == Happyherbal26 reported by MathXplore == * {{userlinks|Happyherbal26}} Link spam, [[Special:AbuseLog/315518]] <!-- USERREPORTED:/Happyherbal26/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:37, 14 September 2026 (UTC) :{{done}} ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 14:02, 14 September 2026 (UTC) == Shahadotdl reported by MathXplore == * {{userlinks|Shahadotdl}} Link spam, [[Special:AbuseLog/315516]] <!-- USERREPORTED:/Shahadotdl/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:37, 14 September 2026 (UTC) :{{done}} ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 14:02, 14 September 2026 (UTC) == Sonarbanglahc reported by MathXplore == * {{userlinks|Sonarbanglahc}} Spam <!-- USERREPORTED:/Sonarbanglahc/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:41, 15 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:47, 15 September 2026 (UTC) == Mehedii1234 reported by MathXplore == * {{userlinks|Mehedii1234}} Spam <!-- USERREPORTED:/Mehedii1234/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:42, 15 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:46, 15 September 2026 (UTC) == BhardwajGardening reported by MathXplore == * {{userlinks|BhardwajGardening}} Link spam, [[Special:AbuseLog/315583]] <!-- USERREPORTED:/BhardwajGardening/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:02, 17 September 2026 (UTC) :{{done|Blocked}} —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:36, 17 September 2026 (UTC) == Manusheikh reported by MathXplore == * {{userlinks|Manusheikh}} Link spam, [[Special:AbuseLog/315575]] <!-- USERREPORTED:/Manusheikh/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:03, 17 September 2026 (UTC) :{{done|Blocked}} —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:35, 17 September 2026 (UTC) == Wrankerseo reported by MathXplore == * {{userlinks|Wrankerseo}} Link spam, [[Special:AbuseLog/315564]], [[Special:AbuseLog/315567]], [[Special:AbuseLog/315563]] <!-- USERREPORTED:/Wrankerseo/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:05, 17 September 2026 (UTC) :{{done|Blocked}} —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:35, 17 September 2026 (UTC) == Mscdubai reported by MathXplore == * {{userlinks|Mscdubai}} Spam <!-- USERREPORTED:/Mscdubai/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 10:28, 19 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 01:44, 21 September 2026 (UTC) == Hasbaticom reported by MathXplore == * {{userlinks|Hasbaticom}} Spam <!-- USERREPORTED:/Hasbaticom/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 11:40, 19 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 01:44, 21 September 2026 (UTC) == [[User:AAASecurityGuard]] reported by TechVindicator == Spam [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 10:03, 22 September 2026 (UTC) :{{done|Globally locked and blocked}} [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 12:18, 22 September 2026 (UTC) == AAASecurityGuard reported by MathXplore == * {{userlinks|AAASecurityGuard}} Spam <!-- USERREPORTED:/AAASecurityGuard/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 10:20, 22 September 2026 (UTC) :{{done|Globally locked and blocked}} [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 12:18, 22 September 2026 (UTC) == [[Wikibooks:AI For Beginners]] == '''Reason for reporting:''' Wrong title, renaming needed ([[AI For Beginners]]). [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:20, 22 September 2026 (UTC) :{{done|Moved to the correct namespace}} —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 20:17, 22 September 2026 (UTC) ::{{done|Ultimately deleted}} per [[WB:AI]]. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 20:51, 22 September 2026 (UTC) == CU request == {{ping|MarcGarver|Xania}} According to [[Special:Diff/4671813]], User:Sisterian ([[Special:Contributions/Sisterian]]) has been using genAI/LLMs for their contributions. User:Pamela Talemwa ([[Special:Contributions/Pamela_Talemwa]]) & User:Sisterian overlap at [[A Young Reader's Guide to a Healthy Environment]] ([https://en.wikibooks.org/w/index.php?title=A_Young_Reader%27s_Guide_to_a_Healthy_Environment&diff=prev&oldid=4671755&diffmode=source], [https://en.wikibooks.org/w/index.php?title=A_Young_Reader%27s_Guide_to_a_Healthy_Environment&oldid=4665328]). What do our admins and CUs think about this? [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 04:11, 23 September 2026 (UTC) :[[User:Sisterian]] has also created a page in another person's userspace, [[User:Samah2025/sandbox/A Young Girl’s Guide to Menstrual Health and Wellbeing]], so I will add [[User:Samah2025]] to the list. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 04:45, 23 September 2026 (UTC) :Hello, @[[User:MarcGarver|MarcGarver]], @[[User:Xania|Xania]], @[[User:TechVindicator|TechVindicator]]. I have been supporting a number of trainees with Wikibooks editing and its looks like a lot more was done outside of the guidance I provided. I am going to look into those contributions and rectify the underlying issues. Thank you. [[User:Sisterian|Sisterian]] ([[User talk:Sisterian|discuss]] • [[Special:Contributions/Sisterian|contribs]]) 08:52, 23 September 2026 (UTC) : OK --[[User:Xania|Xania]] [[Image:Flag_of_Estonia.svg|15px]] [[Image:Flag_of_Ukraine.svg|15px]] [[User talk:Xania|<sup>talk</sup>]] 12:13, 23 September 2026 (UTC) == DhaanishChennai123 reported by TechVindicator == * {{userlinks|DhaanishChennai123}} Spam <!-- USERREPORTED:/DhaanishChennai123/ --> [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 11:05, 24 September 2026 (UTC) : {{done}} by Kittycataclysm. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:17, 24 September 2026 (UTC) == Seobavswellness12390 reported by MathXplore == * {{userlinks|Seobavswellness12390}} Spam <!-- USERREPORTED:/Seobavswellness12390/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:23, 24 September 2026 (UTC) : {{done}} by Kittycataclysm. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:17, 24 September 2026 (UTC) == Mango-tree-technology reported by TechVindicator == * {{userlinks|Mango-tree-technology}} Spam <!-- USERREPORTED:/Mango-tree-technology/ --> [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 12:41, 25 September 2026 (UTC) :{{done|Blocked}} by Kittycataclysm. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 13:53, 25 September 2026 (UTC) == ~2026-51713-42 reported by Morkoz == * {{userlinks|~2026-51713-42}} Spam, see also [[w:hi:special:contribs/~2026-51214-19|~2026-51214-19]]. <!-- USERREPORTED:/~2026-51713-42/ --> --[[User:Morkoz|Morkoz]] ([[User talk:Morkoz|discuss]] • [[Special:Contributions/Morkoz|contribs]]) 15:43, 25 September 2026 (UTC) : {{done}} by NDKDD (GS). [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 22:37, 25 September 2026 (UTC) tdm17lhrdz6zt53tgt61rroe8toootb Create Vampires/Ethics Of Creating Vampire Lore 0 485677 4675403 4670645 2026-10-10T01:18:23Z 3MMPEYTON 3393808 4675403 wikitext text/x-wiki == The Ethics of Creating Vampire Lore == When writing about vampires in your fictional narratives, try to avoid using harmful stereotypes or cultural appropriations. <br> <br> Stereotypes are widely held, fixed, and oversimplified beliefs or mental images about a particular group of people. [1] <br> <br> According to Wikipedia: <br> It is an expectation that people might have about every person of a particular group. The type of expectation can vary; it can be, for example, an expectation about the group's personality, preferences, appearance or ability. [2] <br> Stereotypes are often faulty and resistant to new information. [3] <br> <br> People who use stereotypes rely of their previous knowledge about a person, information they then project onto an entire group. This can lead to hasty generalizations when they meet new people in that said group. <br> <br> Negative stereotypes should be used with caution. They can lead to prejudice, discrimination and unfair judgment. <br> <br> If you think all vampires are white, blood-thirsty decomposing demons from hell, then perhaps you should read more books, and watch more films about vampires. <br> <br> In the case of the Vampire Disease, also known as porphyria, Medical Doctors wrote about patients who became depressed by reports in the media linking porphyria, their illness, with vampirism. In this case, negative stereotypes could lead to unfair judgements. <br> <br> According to Wikipedia: <br> Cultural appropriation is an adoption of an element or elements of culture or identity by members of another culture or identity in a manner perceived as inappropriate or unacknowledged. Charges of cultural appropriation typically arise when members of a dominant culture borrow from minority cultures. Cultural appropriation can include the adoption of another culture's religious and cultural traditions, customs, dance steps, fashion, symbols, language, history and music. [4]<br> <br> Problems occur when cultural borrowing is unacknowledged, or when borrowed information is used in an inappropriate manner. <br> <br> Memes occur when people imitate the behaviors of other people without truly understanding that behavior. For unconscious reasons, that behavior, or idea spreads. <br> <br> The entire lore that surrounds the vampire seems like cultural appropriation from the Romanian people who did historically suffer, as a group, from grave robbery. The actual accounts of people who were mistaken for vampires, fed folk stories and modern legends. <br> <br> === Respectful use of folklore? === How can writers use folklore respectfully? Writers could acknowledge the people who created and kept their folklore alive. By acknowledging the folks who shared their cautionary tales, we share their perspectives, and our stories gain diversity. By acknowledging each storyteller, we show respect. We should honor their stories as they honor their ancestors' stories. <br> <br> This section was ''developed'' by the writer using '''digital tools''': <br> <br> When writers treat folklore as cultural memory, they acknowledge the grief, fears, community protection, and spiritual beliefs of the people who carried it. <br> <br> These vampire stories come from people, from Slavic, Caribbean, Filipino, Chinese, Indigenous, African — People. These ancestor stories are other people's attempt to explain illness, death, or danger. <br> <br> Unethical use of folklore looks like: using stereotypes, treating traditions as interchangeable with each other, removing cultural context, claiming “ownership” of a culture’s monster. Ethical vampire lore: avoids stereotypes, preserves meaning, respects the original purpose of the tale, keeps cultural details, acknowledges the source of the story, shares ownership of a monster that can transcend cultural boundaries. <br> <br> Link: https://en.wikibooks.org/wiki/Create_Vampires_/All_About_Vampires#All_About_Vampires <br> <br> === Reference: === 1. Oxford Learner's Dictionaries stereotype September 16, 2026 In https://www.oxfordlearnersdictionaries.com/definition/american_english/stereotype_1 <br> 2. "Stereotype" August 30, 2026. In Wikipedia https://en.wikipedia.org/wiki/Stereotype <br> <br> 3. Meyer, David G. (2008). Intuition: Its Powers and Perils. Yale University Press. pp. 114–115. ISBN 978-0-300-13027-0 <br> <br> 4. "Cultural appropriation" September 8, 2026. In Wikipedia https://en.wikipedia.org/wiki/Cultural_appropriation <br> <br> <noinclude>{{Chapter navigation with TOC||All_About_Vampires#All_About_Vampires|TOC mini}}</noinclude> <br> {{BookCat}} 9ombwvhugr2dji2hj4q7gb4r8ryzhsv 4675406 4675403 2026-10-10T01:22:19Z 3MMPEYTON 3393808 4675406 wikitext text/x-wiki == The Ethics of Creating Vampire Lore == When writing about vampires in your fictional narratives, try to avoid using harmful stereotypes or cultural appropriations. <br> <br> Stereotypes are widely held, fixed, and oversimplified beliefs or mental images about a particular group of people. [1] <br> <br> According to Wikipedia: <br> It is an expectation that people might have about every person of a particular group. The type of expectation can vary; it can be, for example, an expectation about the group's personality, preferences, appearance or ability. [2] <br> Stereotypes are often faulty and resistant to new information. [3] <br> <br> People who use stereotypes rely of their previous knowledge about a person, information they then project onto an entire group. This can lead to hasty generalizations when they meet new people in that said group. <br> <br> Negative stereotypes should be used with caution. They can lead to prejudice, discrimination and unfair judgment. <br> <br> If you think all vampires are white, blood-thirsty decomposing demons from hell, then perhaps you should read more books, and watch more films about vampires. <br> <br> In the case of the Vampire Disease, also known as porphyria, Medical Doctors wrote about patients who became depressed by reports in the media linking porphyria, their illness, with vampirism. In this case, negative stereotypes could lead to unfair judgements. <br> <br> According to Wikipedia: <br> Cultural appropriation is an adoption of an element or elements of culture or identity by members of another culture or identity in a manner perceived as inappropriate or unacknowledged. Charges of cultural appropriation typically arise when members of a dominant culture borrow from minority cultures. Cultural appropriation can include the adoption of another culture's religious and cultural traditions, customs, dance steps, fashion, symbols, language, history and music. [4]<br> <br> Problems occur when cultural borrowing is unacknowledged, or when borrowed information is used in an inappropriate manner. <br> <br> Memes occur when people imitate the behaviors of other people without truly understanding that behavior. For unconscious reasons, that behavior, or idea spreads. <br> <br> The entire lore that surrounds the vampire seems like cultural appropriation from the Romanian people who did historically suffer, as a group, from grave robbery. The actual accounts of people who were mistaken for vampires, fed folk stories and modern legends. <br> <br> === Respectful use of folklore? === How can writers use folklore respectfully? Writers could acknowledge the people who created and kept their folklore alive. By acknowledging the folks who shared their cautionary tales, we share their perspectives, and our stories gain diversity. By acknowledging each storyteller, we show respect. We should honor their stories as they honor their ancestors' stories. <br> <br> This section was ''developed'' by the writer using '''digital tools''': <br> <br> When writers treat folklore as cultural memory, they acknowledge the grief, fears, community protection, and spiritual beliefs of the people who carried it. <br> <br> These vampire stories come from people, from Slavic, Caribbean, Filipino, Chinese, Indigenous, African — People. These ancestor stories are other people's attempt to explain illness, death, or danger. <br> <br> Unethical use of folklore looks like: using stereotypes, treating traditions as interchangeable with each other, removing cultural context, claiming “ownership” of a culture’s monster. Ethical vampire lore: avoids stereotypes, preserves meaning, respects the original purpose of the tale, keeps cultural details, acknowledges the source of the story, shares ownership of a monster that can transcend cultural boundaries. <br> <br> Link: https://en.wikibooks.org/wiki/Create_Vampires_/All_About_Vampires#All_About_Vampires <br> <br> === Reference: === 1. Oxford Learner's Dictionaries stereotype September 16, 2026 In https://www.oxfordlearnersdictionaries.com/definition/american_english/stereotype_1 <br> 2. "Stereotype" August 30, 2026. In Wikipedia https://en.wikipedia.org/wiki/Stereotype <br> <br> 3. Meyer, David G. (2008). Intuition: Its Powers and Perils. Yale University Press. pp. 114–115. ISBN 978-0-300-13027-0 <br> <br> 4. "Cultural appropriation" September 8, 2026. In Wikipedia https://en.wikipedia.org/wiki/Cultural_appropriation <br> <br> <noinclude>{{Chapter navigation with TOC||All_About_Vampires|TOC mini}}</noinclude> <br> {{BookCat}} 2qreg7ytc1ie629sv9l9htlhcgtokw0 4675407 4675406 2026-10-10T01:23:56Z 3MMPEYTON 3393808 4675407 wikitext text/x-wiki == The Ethics of Creating Vampire Lore == When writing about vampires in your fictional narratives, try to avoid using harmful stereotypes or cultural appropriations. <br> <br> Stereotypes are widely held, fixed, and oversimplified beliefs or mental images about a particular group of people. [1] <br> <br> According to Wikipedia: <br> It is an expectation that people might have about every person of a particular group. The type of expectation can vary; it can be, for example, an expectation about the group's personality, preferences, appearance or ability. [2] <br> Stereotypes are often faulty and resistant to new information. [3] <br> <br> People who use stereotypes rely of their previous knowledge about a person, information they then project onto an entire group. This can lead to hasty generalizations when they meet new people in that said group. <br> <br> Negative stereotypes should be used with caution. They can lead to prejudice, discrimination and unfair judgment. <br> <br> If you think all vampires are white, blood-thirsty decomposing demons from hell, then perhaps you should read more books, and watch more films about vampires. <br> <br> In the case of the Vampire Disease, also known as porphyria, Medical Doctors wrote about patients who became depressed by reports in the media linking porphyria, their illness, with vampirism. In this case, negative stereotypes could lead to unfair judgements. <br> <br> According to Wikipedia: <br> Cultural appropriation is an adoption of an element or elements of culture or identity by members of another culture or identity in a manner perceived as inappropriate or unacknowledged. Charges of cultural appropriation typically arise when members of a dominant culture borrow from minority cultures. Cultural appropriation can include the adoption of another culture's religious and cultural traditions, customs, dance steps, fashion, symbols, language, history and music. [4]<br> <br> Problems occur when cultural borrowing is unacknowledged, or when borrowed information is used in an inappropriate manner. <br> <br> Memes occur when people imitate the behaviors of other people without truly understanding that behavior. For unconscious reasons, that behavior, or idea spreads. <br> <br> The entire lore that surrounds the vampire seems like cultural appropriation from the Romanian people who did historically suffer, as a group, from grave robbery. The actual accounts of people who were mistaken for vampires, fed folk stories and modern legends. <br> <br> === Respectful use of folklore? === How can writers use folklore respectfully? Writers could acknowledge the people who created and kept their folklore alive. By acknowledging the folks who shared their cautionary tales, we share their perspectives, and our stories gain diversity. By acknowledging each storyteller, we show respect. We should honor their stories as they honor their ancestors' stories. <br> <br> This section was ''developed'' by the writer using '''digital tools''': <br> <br> When writers treat folklore as cultural memory, they acknowledge the grief, fears, community protection, and spiritual beliefs of the people who carried it. <br> <br> These vampire stories come from people, from Slavic, Caribbean, Filipino, Chinese, Indigenous, African — People. These ancestor stories are other people's attempt to explain illness, death, or danger. <br> <br> Unethical use of folklore looks like: using stereotypes, treating traditions as interchangeable with each other, removing cultural context, claiming “ownership” of a culture’s monster. Ethical vampire lore: avoids stereotypes, preserves meaning, respects the original purpose of the tale, keeps cultural details, acknowledges the source of the story, shares ownership of a monster that can transcend cultural boundaries. <br> <br> Link: [[Create_Vampires/All About Vampires]] <br> <br> === Reference: === 1. Oxford Learner's Dictionaries stereotype September 16, 2026 In https://www.oxfordlearnersdictionaries.com/definition/american_english/stereotype_1 <br> 2. "Stereotype" August 30, 2026. In Wikipedia https://en.wikipedia.org/wiki/Stereotype <br> <br> 3. Meyer, David G. (2008). Intuition: Its Powers and Perils. Yale University Press. pp. 114–115. ISBN 978-0-300-13027-0 <br> <br> 4. "Cultural appropriation" September 8, 2026. In Wikipedia https://en.wikipedia.org/wiki/Cultural_appropriation <br> <br> <noinclude>{{Chapter navigation with TOC||All_About_Vampires|TOC mini}}</noinclude> <br> {{BookCat}} eytl1acjjkcicbvu0e10ha6z34g7ppd Vehicle Identification Numbers (VIN codes)/Jaguar/VIN Codes 0 485791 4675320 4675259 2026-10-09T20:35:21Z JustTheFacts33 3434282 /* Model Line (Position 6-7) */ 4675320 wikitext text/x-wiki {{Vehicle Identification Numbers (VIN codes)/Warning}}{{clear}} This VIN number decoding and designation system is used primarily for the North American Market. European and Asian markets use other decoding and designation systems. ==General Template for Jaguar's VIN format (2000 -)== ===Jaguar WMIs (2000-) (Position 1-3)=== * SAJ - Jaguar passenger car (UK) * SAD - Jaguar SUV (UK & Europe) * L2C - Chery Jaguar Land Rover (China) ===Regional Spec/Restraint System (Position 4):=== * J = Manual seat belts, Dual front airbags (US: XK8 '00) * B = Manual seat belts, Dual front airbags (Canada: XK8 '00) * D = Manual seat belts, Depowered Dual front airbags, & Front Side Airbags (US: S-Type '00-'02, XJ8/XJR '00-'03, XK8/XKR '01-'06, XK/XKR Early '07) * F = Manual seat belts, Depowered Dual front airbags, & Front Side Airbags (Canada: S-Type '00-'02, XJ8/XJR '00-'03, XK8/XKR '01-'06, XK/XKR Early '07) * E = Manual seat belts, Depowered Dual front airbags w/occupant position sensing, & Front Side Airbags & Side Curtain Airbags (US: X-Type '02-'04, S-Type '03-'04, XJ8/XJR Early '04) * G = Manual seat belts, Depowered Dual front airbags w/occupant position sensing, & Front Side Airbags & Side Curtain Airbags (Canada: X-Type '02-'04,<br> S-Type '03-'04, XJ8/XJR Early '04) * W = Manual seat belts, Depowered Dual front airbags w/occupant position (driver) and weight (fr. psgr.) sensing, & Front Side Airbags & Side Curtain Airbags <br> (US: X-Type '05-'08, S-Type '05-'08, XF '09-'15, XJ8/XJR '04-'09, XJ '10-) * X = Manual seat belts, Depowered Dual front airbags w/occupant position (driver) and weight (fr. psgr.) sensing, & Front Side Airbags & Side Curtain Airbags (Canada: X-Type '05-'08, S-Type '05-'08, XF '09-'15, XJ8/XJR '04-'09, XJ '10-) * W = Manual seat belts, Depowered Dual front airbags w/occupant position (driver) and weight (fr. psgr.) sensing, & Front Side Head/Thorax Airbags <br> (US: XK/XKR '07-'15, F-Type '14-) * X = Manual seat belts, Depowered Dual front airbags w/occupant position (driver) and weight (fr. psgr.) sensing, & Front Side Head/Thorax Airbags <br> (Canada: XK/XKR '07-'15, F-Type '14-) ===Transmission & Steering Location (Position 5 - '00-'12):=== * A = Automatic / LHD * B = Manual / LHD (X-Type '02-'05, S-Type 3.0 '03-'04) ===Transmission & Drive Wheels (Position 5 - '13-):=== * A = Automatic / Rwd (XF '13-'15, XJ '13-, XK '13-'15, F-Type '14-) * B = Manual / Rwd (F-Type '16-) * J = Automatic / Awd (XF Awd '13-'15, XJ Awd '13-, F-Type Awd '16-) ===Model Line (Position 6-7)=== {| class="wikitable" |+Position 6-7 !VIN code !Description |- |51 |[[w:Jaguar X-Type|Jaguar X-Type sedan - High Series]] ('02-'08) |- |52 |[[w:Jaguar X-Type|Jaguar X-Type sedan - Entry Series]] ('03-'04) |- |53 |[[w:Jaguar X-Type|Jaguar X-Type sedan w/Sport Package]] ('02-'03) |- |54 |[[w:Jaguar X-Type|Jaguar X-Type Sportwagon]] ('05-'08) |- |01 |[[w:Jaguar S-Type (1999)|Jaguar S-Type]] ('00-'08) |- |03 |[[w:Jaguar S-Type (1999)|Jaguar S-Type Sport]] [3.0, 4.0] ('02) |- |03 |[[w:Jaguar S-Type (1999)|Jaguar S-Type Sport]] [3.0, 4.2] ('03) |- |03 |[[w:Jaguar S-Type (1999)|Jaguar S-Type R]] ('03-'08) |- |05 |[[w:Jaguar XF (X250)|Jaguar XF Luxury]] ('09) |- |06 |[[w:Jaguar XF (X250)|Jaguar XF Premium Luxury]] ('09) |- |07 |[[w:Jaguar XF (X250)|Jaguar XF Supercharged]] ('09) |- |0E |[[w:Jaguar XF (X250)|Jaguar XF]] ('13-'14) |- |0F |[[w:Jaguar XF (X250)|Jaguar XF]] ('10-'12) |- |0F |[[w:Jaguar XF (X250)|Jaguar XF 2.0T Premium]] [8th pos. of VIN is S] ('15) |- |0F |[[w:Jaguar XF (X250)|Jaguar XF 3.0 Sport Rwd]] [8th pos. of VIN is 7] ('15) |- |0F |[[w:Jaguar XF (X250)|Jaguar XF 3.0 Sport Awd]] [8th pos. of VIN is F] ('15) |- |0G |[[w:Jaguar XF (X250)|Jaguar XF Premium]] ('10-'11) |- |0H |[[w:Jaguar XF (X250)|Jaguar XF Portfolio]] [8th pos. of VIN is B] ('12) |- |0H |[[w:Jaguar XF (X250)|Jaguar XF 3.0 Portfolio Rwd]] [8th pos. of VIN is 7] ('15) |- |0H |[[w:Jaguar XF (X250)|Jaguar XF 3.0 Portfolio Awd]] [8th pos. of VIN is F] ('15) |- |0H |[[w:Jaguar XF (X250)|Jaguar XF Supercharged]] [8th pos. of VIN is E: '10-'13 or P: '13-'15] |- |0J |[[w:Jaguar XF (X250)|Jaguar XFR]] ('10-'15) |- |0K |[[w:Jaguar XF (X250)|Jaguar XFR-S]] ('13-'15) |- |8J |[[w:Jaguar XF (X250)|Jaguar XFR w/Speed Pack]] ('13-'15) |- |12 |[[w:Jaguar XJ (X308)#Sport|Jaguar XJ Sport]] ('02-'03) |- |14 |[[w:Jaguar XJ (X308)|Jaguar XJ8]] ('00-'03) |- |15 |[[w:Jaguar XJ (X308)#XJR|Jaguar XJR]] ('00-'03) |- |23 |[[w:Jaguar XJ (X308)|Jaguar XJ8L]] (LWB) ('00-'01) |- |24 |[[w:Jaguar XJ (X308)#Daimler/Vanden Plas|Jaguar XJ8 Vanden Plas]] (LWB) ('00-'03) |- |25 |[[w:Jaguar XJ (X308)#Daimler/Vanden Plas|Jaguar XJ8 Vanden Plas Supercharged]] (LWB) ('00-'01) |- |25 |[[w:Jaguar XJ (X308)#Daimler/Vanden Plas|Jaguar XJ Super V8]] (LWB) ('02-'03) |- |71 |[[w:Jaguar XJ (X350)|Jaguar XJ8]] ('04-'09) |- |73 |[[w:Jaguar XJ (X350)|Jaguar XJR]] ('04-'09) |- |74 |[[w:Jaguar XJ (X350)|Jaguar XJ8 Vanden Plas]] (SWB) ('04) |- |79 |[[w:Jaguar XJ (X350)|Jaguar XJ8L]] (LWB) ('05-'09) |- |82 |[[w:Jaguar XJ (X350)|Jaguar XJ8 Vanden Plas]] (LWB) ('05-'09) |- |82 |[[w:Jaguar XJ (X350)|Jaguar XJ Super V8]] (LWB, 5-psgr.) ('05-'09) |- |86 |[[w:Jaguar XJ (X350)|Jaguar XJ Super V8 Portfolio]] (LWB, 4-psgr.) ('06) |- |94 |[[w:Jaguar XJ (X350)|Jaguar XJ Super V8 Portfolio]] (LWB, 5-psgr.) ('09) |- |1C |[[w:Jaguar XJ (X351)|Jaguar XJ]] ('10-'15) |- |1E |[[w:Jaguar XJ (X351)|Jaguar XJR]] ('14-'15) |- |1G |[[w:Jaguar XJ (X351)|Jaguar XJ Supercharged]] [8th pos. of VIN is E: '10-'13 or T: '13-'15] |- |1J |[[w:Jaguar XJ (X351)|Jaguar XJ Supersport]] ('11-'12) |- |2E |[[w:Jaguar XJ (X351)|Jaguar XJR LWB]] ('14-'15) |- |2G |[[w:Jaguar XJ (X351)|Jaguar XJL]] [8th pos. of VIN is B] ('10-'11) |- |2G |[[w:Jaguar XJ (X351)|Jaguar XJL Portfolio Rwd]] [8th pos. of VIN is B: '12-'13 or 1: '13] |- |2G |[[w:Jaguar XJ (X351)|Jaguar XJL Portfolio Rwd]] [8th pos. of VIN is Z: '14-'15) |- |2G |[[w:Jaguar XJ (X351)|Jaguar XJL Portfolio Awd]] [8th pos. of VIN is D] ('13-'15) |- |2G |[[w:Jaguar XJ (X351)|Jaguar XJL Supercharged]] [8th pos. of VIN is E: '10-'13 or T: '13-'15] |- |2J |[[w:Jaguar XJ (X351)|Jaguar XJL Supersport]] ('11-'13) |- |2K |[[w:Jaguar XJ (X351)|Jaguar XJL Ultimate]] ('13) |- |3F |[[w:Jaguar XJ (X351)|Jaguar XJ Supersport w/Speed Pack]] ('12-'13) |- |3G |[[w:Jaguar XJ (X351)|Jaguar XJL Supersport w/Speed Pack]] ('12-'13) |- |3H |[[w:Jaguar XJ (X351)|Jaguar XJ Supercharged w/Sport & Speed Pack]] ('12-'15) |- |3K |[[w:Jaguar XJ (X351)|Jaguar XJL Supercharged w/Sport & Speed Pack]] ('12-'15) |- |41 |[[w:Jaguar XK (X100)|Jaguar XK8/XKR coupe]] ('00-'06) |- |42 |[[w:Jaguar XK (X100)|Jaguar XK8/XKR convertible]] ('00-'06) |- |43 |[[w:Jaguar XK (X150)|Jaguar XK/XKR coupe]] ('07-'09) |- |44 |[[w:Jaguar XK (X150)|Jaguar XK/XKR convertible]] ('07-'09) |- |45 |[[w:Jaguar XK (X150)|Jaguar XKR Portfolio Edition coupe]] ('09) |- |46 |[[w:Jaguar XK (X150)|Jaguar XKR Portfolio Edition convertible]] ('09) |- |4D |[[w:Jaguar XK (X150)|Jaguar XK Touring coupe]] [8th pos. of VIN is B] ('13-'14) |- |4E |[[w:Jaguar XK (X150)|Jaguar XK Touring convertible]] [8th pos. of VIN is B] ('13-'14) |- |4D |[[w:Jaguar XK (X150)|Jaguar XKR coupe]] [8th pos. of VIN is C] ('10-'15) |- |4E |[[w:Jaguar XK (X150)|Jaguar XKR convertible]] [8th pos. of VIN is C] ('10-'15) |- |4F |[[w:Jaguar XK (X150)|Jaguar XK coupe]] (most Portfolio Edition features are std.) [8th pos. of VIN is B] ('10-'15) |- |4F |[[w:Jaguar XK (X150)|Jaguar XKR175 coupe]] [8th pos. of VIN is C] ('11) |- |4F |[[w:Jaguar XK (X150)|Jaguar XKR coupe w/Dynamic Pack]] [8th pos. of VIN is C] ('13-'15), XK Final Fifty Edition coupe ('15) |- |4G |[[w:Jaguar XK (X150)|Jaguar XK convertible]] (most Portfolio Edition features are std.) [8th pos. of VIN is B] ('10-'15) |- |4G |[[w:Jaguar XK (X150)|Jaguar XKR convertible w/Dynamic Pack]] [8th pos. of VIN is C] ('13-'15), XK Final Fifty Edition convertible ('15) |- |4H |[[w:Jaguar XK (X150)|Jaguar XKR-S coupe]] ('12-'15), XKR-S GT coupe ('14) |- |4J |[[w:Jaguar XK (X150)|Jaguar XKR-S convertible]] ('12-'15) |- |6A |[[w:Jaguar F-Type)|Jaguar F-Type coupe]] ('15-) |- |6B |[[w:Jaguar F-Type)|Jaguar F-Type S coupe]] ('15-) |- |6D |[[w:Jaguar F-Type)|Jaguar F-Type R coupe]] ('15-) |- |6E |[[w:Jaguar F-Type)|Jaguar F-Type convertible]] ('14-'15) |- |6F |[[w:Jaguar F-Type)|Jaguar F-Type S convertible]] ('14-'15) |- |6G |[[w:Jaguar F-Type)|Jaguar F-Type V8 S convertible]] ('14-'15) |} ===Engine/Emissions Control System (Position 8)=== {| class="wikitable" |+Position 8 ! VIN !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications |- | A || 3.0L || 60° V6 || Gas ||DOHC,<br /> 24 valve||MPI. ULEV. Variable intake valve timing. [[w:Jaguar AJ-V6 engine#AJ30|Jaguar AJ-V6 - AJ30 V6 engine]].<br> Jaguar X-Type 3.0 (Mid '05-'08), S-Type 3.0 ('06-'08). |- | A || 4.2L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. ULEV. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.2 L|Jaguar AJ-V8 - AJ34 V8 engine]]. Jaguar XF ('10). |- | A || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 550 PS/542 hp. Jaguar XKR-S ('12-'15), XKR-S GT ('14), F-Type R coupe ('15). |- | B || 4.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||MPI. [[w:Jaguar AJ-V8 engine#Supercharged|Jaguar AJ-V8 - AJ27S V8 engine]].<br> Jaguar XJR ('00-'03), Vanden Plas Supercharged ('00-'01), Super V8 ('02-'03), XKR ('00-'02). |- | B || 4.2L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||MPI. [[w:Jaguar AJ-V8 engine#Supercharged_2|Jaguar AJ-V8 - AJ33S V8 engine]]. Jaguar XJR ('04-'05), Super V8 ('05), XKR ('03-'06). |- | B || 4.2L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. ULEV. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.2 L|Jaguar AJ-V8 - AJ34 V8 engine]].<br> Jaguar S-Type ('06-'08), XF ('09), XJ8/Vanden Plas ('06-'09), XK ('07-'09). |- | B || 5.0L || V8 || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. Variable intake valve lift. Variable intake.<br> [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> Jaguar XF ('10-'12), XJ ('11-'12), XJL ('11), XJL Portfolio Rwd ('12-'13), XK ('10-'15), XK Touring ('13-'14). |- | C || 3.0L || 60° V6 || Gas ||DOHC,<br /> 24 valve||MPI. Variable intake valve timing. [[w:Jaguar AJ-V6 engine#AJ30|Jaguar AJ-V6 - AJ30 V6 engine]].<br> Jaguar S-Type 3.0 ('00-'01), X-Type 3.0 ('02-Mid '05). |- | C || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 - AJ27 V8 engine]].<br> Jaguar XJ8/Vanden Plas ('00-'03), XJ Sport ('02-'03), XK8 ('00-'02). |- | C || 4.2L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.2 L|Jaguar AJ-V8 - AJ33 V8 engine]]. Jaguar XJ8 ('04-'05), XK8 ('03-'06). |- | C || 4.2L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||MPI. ULEV. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#Supercharged_2|Jaguar AJ-V8 - AJ34S V8 engine]].<br> Jaguar S-Type R ('06-'08), XF Supercharged ('09), XJR ('06-'09), Super V8 ('06-'09), XKR ('07-'09). |- | C || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 510 PS/503 hp. Jaguar XFR ('10-'13), XJ/XJL Supersport ('11-'13), XKR ('10-'15). |- | C || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 380 PS/375 hp. Jaguar F-Type S ('14-'15). |- | D || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 - AJ28 V8 engine]]. Jaguar S-Type 4.0 ('00-'01). |- | D || 2.5L || 60° V6 || Gas ||DOHC,<br /> 24 valve||MPI. Variable intake valve timing. [[w:Jaguar AJ-V6 engine#AJ25|Jaguar AJ-V6 - AJ25 V6 engine]]. Jaguar X-Type 2.5 ('02-'05). |- | D || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XJ Awd, XJL Portfolio Awd ('13-'14). |- | E || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 470 PS/464 hp. Jaguar XF Supercharged ('10-'13), XJ/XJL Supercharged ('11-'13). |- | F || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XF 3.0 Awd ('13-'14). |- | F || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. SULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XF 3.0 Awd ('15). |- | H || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas/E85 ||DOHC,<br /> 32 valve||Flex Fuel. Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]]. 510 PS/503 hp. Jaguar XFR ('13-'15). |- | K || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 550 PS/542 hp. Jaguar XJR/XJR LWB ('14-). |- | L || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 495 PS/488 hp. Jaguar F-Type V8 S convertible ('14-'15). |- | N || 3.0L || 60° V6 || Gas ||DOHC,<br /> 24 valve||MPI. Variable intake valve timing. [[w:Jaguar AJ-V6 engine#AJ30|Jaguar AJ-V6 - AJ30 V6 engine]]. Jaguar S-Type 3.0 ('01-'02). |- | P || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 - AJ28 V8 engine]]. Jaguar S-Type 4.0 ('01-'02). |- | P || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas/E85 ||DOHC,<br /> 32 valve||Flex Fuel. Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]]. 470 PS/464 hp. Jaguar XF Supercharged ('13-'15). |- | S || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve||Direct Injection. Dual VVT. Ford EcoBoost engine (Mazda L engine-based).<br> Jaguar XF 2.0T ('13-'14), XF 2.0T Premium ('15). |- | T || 3.0L || 60° V6 || Gas ||DOHC,<br /> 24 valve||MPI. Variable intake valve timing. [[w:Jaguar AJ-V6 engine#AJ30|Jaguar AJ-V6 - AJ30 V6 engine]]. Jaguar S-Type 3.0 ('03-'05). |- | T || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas/E85 ||DOHC,<br /> 32 valve||Flex Fuel. Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]]. 470 PS/464 hp. Jaguar XJ/XJL Supercharged ('13-'14). |- | T || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. SULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar F-Type ('15-). |- | U || 4.2L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.2 L|Jaguar AJ-V8 - AJ33 V8 engine]]. Jaguar S-Type 4.2 ('03-'05). |- | U || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. SULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 380 PS/375 hp. Jaguar F-Type S ('15-). |- | V || 4.2L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||MPI. [[w:Jaguar AJ-V8 engine#Supercharged_2|Jaguar AJ-V8 - AJ33S V8 engine]]. Jaguar S-Type R ('03-'05). |- | X || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas/E85 ||DOHC,<br /> 24 valve||Flex Fuel. Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XF 3.0 Rwd ('14). |- | Z || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 550 PS/542 hp. Jaguar XFR-S ('13-'15). |- | Z || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas/E85 ||DOHC,<br /> 24 valve||Flex Fuel. Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XJ Rwd, XJL Portfolio Rwd ('14). |- | 1 || 5.0L || V8 || Gas/E85 ||DOHC,<br /> 32 valve||Flex Fuel. Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. Variable intake valve lift. Variable intake. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]]. Jaguar XJL Portfolio Rwd ('13). |- | 7 || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XF 3.0 Rwd ('13), XJ Rwd ('13-), F-Type ('14-'15). |- | 7 || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. SULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XF 3.0 Rwd ('15). |} ===Check Digit/Gearbox (Position 9)=== * USA /Canada [[Vehicle Identification Numbers (VIN codes)/Check digit|Check digit]] ===Model Year Code (Position 10)=== ''See: [[Vehicle Identification Numbers (VIN codes)/Model year]]'' ===Plant Code/Model Line/Engine (Position 11) 2000-2019=== * X - Halewood, Merseyside, England, UK - X-Type 2.5 ('02-'05) * W - Halewood, Merseyside, England, UK - X-Type 3.0 ('02-'08) * F - Castle Bromwich, West Midlands, England, UK - S-Type 3.0 ('00-'08) * G - Castle Bromwich, West Midlands, England, UK - S-Type 4.0 ('00-'02) * H - Castle Bromwich, West Midlands, England, UK - S-Type 4.2 ('03-'08) * 1 - Castle Bromwich, West Midlands, England, UK - S-Type R (4.2 supercharged) ('03-'08) * H - Castle Bromwich, West Midlands, England, UK - XF 4.2 ('09-'10) * 1 - Castle Bromwich, West Midlands, England, UK - XF Supercharged (4.2 supercharged) ('09) * L - Castle Bromwich, West Midlands, England, UK - XF 5.0 ('10-'12) * M - Castle Bromwich, West Midlands, England, UK - XF Supercharged, XFR (5.0 supercharged) ('10-'15), XFR-S (5.0 supercharged) ('13-'15) * P - Castle Bromwich, West Midlands, England, UK - XF 2.0T ('13-'15) * 8 - Castle Bromwich, West Midlands, England, UK - XF 3.0 supercharged ('13-'15) * L - Browns Lane plant, Coventry, West Midlands, England, UK - XJ8 (4.0) ('00-'03), XJ8L (4.0) ('00-'01), XJ8 Vanden Plas (4.0) ('00-'03), XJ Sport (4.0) ('02-'03) * M - Browns Lane plant, Coventry, West Midlands, England, UK - XJ8 Vanden Plas Supercharged (4.0 supercharged) ('00-'01),<br> Super V8 (4.0 supercharged) ('02-'03), XJR (4.0 supercharged) ('00-'03) * S - Browns Lane plant, Coventry, West Midlands, England, UK - XJ8 (4.2) ('04-'06), XJ8L (4.2) ('05-'06), XJ8 Vanden Plas (4.0) ('04-'06) * T - Browns Lane plant, Coventry, West Midlands, England, UK - Super V8 (4.2 supercharged) ('05-'06), Super V8 Portfolio (4.2 supercharged) ('06),<br> XJR (4.2 supercharged) ('04-'06) * S - Castle Bromwich, West Midlands, England, UK - XJ8 (4.2) ('07-'09), XJ8L (4.2) ('07-'09), XJ8 Vanden Plas (4.0) ('07-'09) * T - Castle Bromwich, West Midlands, England, UK - Super V8 (4.2 supercharged) ('07-'09), Super V8 Portfolio (4.2 supercharged) ('09),<br> XJR (4.2 supercharged) ('07-'09) * L - Castle Bromwich, West Midlands, England, UK - XJ (5.0) ('10-'12), XJL (5.0) ('10-'11), XJL Portfolio (5.0) ('12-'13) * M - Castle Bromwich, West Midlands, England, UK - XJ/XJL Supercharged (5.0 supercharged) ('10-'19), XJ/XJL Supersport (5.0 supercharged) ('11-'13),<br> XJL Ultimate (5.0 supercharged) ('13), XJR SWB/LWB (5.0 supercharged) ('14-'17), XJR575 LWB (5.0 supercharged) ('18-'19), XJ50 LWB (5.0 supercharged) ('19), XJ Collection Sp. Ed. LWB (5.0 supercharged) ('19) * 8 - Castle Bromwich, West Midlands, England, UK - XJ base (3.0 supercharged) ('13-'15), XJ R-Sport (3.0 supercharged) ('16-'19),<br> XJL Portfolio AWD (3.0 supercharged) ('13-'19), XJL Portfolio RWD (3.0 supercharged) ('14-'19), XJ50 LWB (3.0 supercharged) ('19) * N - Browns Lane plant, Coventry, West Midlands, England, UK - XK8 (4.0) ('00-'02) * P - Browns Lane plant, Coventry, West Midlands, England, UK - XKR (4.0 supercharged) ('00-'02) * 2 - Browns Lane plant, Coventry, West Midlands, England, UK - XK8 (4.2) ('03-'06) * 3 - Browns Lane plant, Coventry, West Midlands, England, UK - XKR (4.2 supercharged) ('03-'06) * 5 - Castle Bromwich, West Midlands, England, UK - XK (4.2) ('07-'09) * 9 - Castle Bromwich, West Midlands, England, UK - XKR (4.2 supercharged) ('07-'09) * L - Castle Bromwich, West Midlands, England, UK - XK (5.0) ('10-'15) * M - Castle Bromwich, West Midlands, England, UK - XKR (5.0 supercharged) ('10-'15), XKR-S (5.0 supercharged) ('12-'15), XKR-S GT (5.0 supercharged) ('14) * 8 - Castle Bromwich, West Midlands, England, UK - F-Type Base, S (3.0 supercharged) ('14-'17), F-Type Premium (3.0 supercharged) ('17) * M - Castle Bromwich, West Midlands, England, UK - F-Type V8S (5.0 supercharged) ('14-'15), F-Type R (5.0 supercharged) ('15-'17),<br> F-Type Project 7 (5.0 supercharged) ('16), F-Type SVR (5.0 supercharged) ('17) ===Plant Codes (Position 11) 2016-2026=== * A - Solihull, West Midlands, England, UK (XE '17, F-Pace '17-'26) * C - Castle Bromwich, West Midlands, England, UK (XE '17-'20, XF '16-'24, F-Type '18-'24) * S - Oxford Road plant, Ryton, West Midlands, England, UK (JLR SVO plant) (XE SV Project 8 '19) * 1 - Graz, Austria (Magna Steyr plant) (E-Pace '18-'24, I-Pace EV '19-'24) ===Model (Position 12)=== * C - X-Type ('02-'03) * D - X-Type ('03-'04) * E - X-Type ('04-'06) * J - X-Type ('06-'08) * L - S-Type ('00-'01) * M - S-Type ('01-'04) * N - S-Type ('04-'08) * R - XF ('09-'11) * S - XF ('11-'13) * U - XF ('13-'15) * Y - XF ('16-) * F - XJ ('00-'03) * G - XJ ('04-'06) [Browns Lane plant] * H - XJ ('06-'09) [Castle Bromwich plant] * V - XJ ('10-'16) * W - XJ ('16-'19) * A - XK ('00-'06) * B - XK ('07-'15) * K - F-Type ('14-'24) '''Positions 13–17, Serial Number''' ==General Template for Jaguar's VIN format (1981 - 1999)== ===Jaguar WMIs (1981-1999) (Position 1-3)=== * SAJ - Jaguar passenger car ===Model Line (Position 4)=== {| class="wikitable" |+Position 4 !VIN code !Description |- |A |[[w:Jaguar XJ#Series 3 (1979–1992)|Jaguar XJ6]] ('81-'87), XJ6 Vanden Plas ('82-'87) |- |B |[[w:Jaguar XJ#Series 3 (1979–1992)|Jaguar XJ12]] (Canada only: '81-'88) |- |D |[[w:Jaguar XJ#Series 3 (1979–1992)|Jaguar XJ12]] (Canada only: '89-'92) |- |H |[[w:Jaguar XJ (XJ40)|Jaguar XJ6]] ('88-'89, '93-'94) |- |F |[[w:Jaguar XJ (XJ40)|Jaguar XJ6]] ('90-'92) |- |H |[[w:Jaguar XJ (XJ40)|Jaguar XJ6 Sovereign]] ('90-'92) |- |K |[[w:Jaguar XJ (XJ40)#Daimler/Vanden Plas|Jaguar XJ6 Vanden Plas]] ('88-'94) |- |M |[[w:Jaguar XJ (XJ40)#Majestic (1989–1992 – SWB; 1993–1994 – LWB)|Jaguar XJ6 Vanden Plas Majestic]] ('89-'90, '92) |- |M |[[w:Jaguar XJ (XJ40)#XJ12 and Daimler Double Six (XJ81)|Jaguar XJ12]] ('94) |- |H |[[w:Jaguar XJ (X300)|Jaguar XJ6]] ('95-'97) |- |H |[[w:Jaguar XJ (X300)|Jaguar XJ6L]] LWB [X330] ('97) |- |K |[[w:Jaguar XJ (X300)#Daimler/Jaguar Vanden Plas|Jaguar XJ6 Vanden Plas]] SWB ('95) |- |K |[[w:Jaguar XJ (X300)#Daimler/Jaguar Vanden Plas|Jaguar XJ6 Vanden Plas]] LWB [X330] ('96-'97) |- |M |[[w:Jaguar XJ (X300)#XJ12 (X305)|Jaguar XJ12]] SWB ('95) |- |M |[[w:Jaguar XJ (X300)#XJ12 (X305)|Jaguar XJ12]] LWB [X330] ('96) |- |P |[[w:Jaguar XJ (X300)#XJR (X306)|Jaguar XJR]] ('95-'97) |- |H |[[w:Jaguar XJ (X308)|Jaguar XJ8]] ('98-'99) |- |H |[[w:Jaguar XJ (X308)|Jaguar XJ8L]] LWB ('98-'99) |- |K |[[w:Jaguar XJ (X308)#Daimler/Vanden Plas|Jaguar XJ8 Vanden Plas]] LWB ('98-'99) |- |P |[[w:Jaguar XJ (X308)#XJR|Jaguar XJR]] ('98-'99) |- |N |[[w:Jaguar XJS|Jaguar XJ-S]] ('82-'91), XJ-SC ('86-'88), XJS ('92-'96) |- |T |[[w:Jaguar XJS|Jaguar XJ-S]] Rouge Collection ('89-'90), Classic Collection ('90-'91) |- |S |[[w:Jaguar XJS#XJR-S|Jaguar XJR-S]] ('93) |- |G |[[w:Jaguar XK (X100)|Jaguar XK8]] ('97-'99) |} ===Class (Regional Spec)/Restraint System (Position 5):=== * V = N. American-spec (Manual seat belts) * L = Canadian-spec (Manual seat belts) * Y = XJ6 Vanden Plas [Series III] ('82-'87) (Manual seat belts) * A = Motorized Shoulder Belts (XJ-S coupe '88-'89, XJ-SC '88) * Y = Motorized Shoulder Belts (XJ-S coupe '89, XJ sedan '89-'92) * W = Manual seat belts, Driver-side airbag (US: XJ-S '90-'93, XJ6 '93, XJ12 Early '94) * X = Manual seat belts, Dual front airbags (US: XJS '94-'96, XJ6 '94-'97, XJ12 '94-'96, XJR '95-'97, XK8 '97-'99) * X = Manual seat belts, Dual front airbags, & Front Side Airbags (US: XJ8/XJR '98-'99) * D = Manual seat belts, Depowered Dual front airbags, & Front Side Airbags (US: XJ8/XJR '99) * M = Manual seat belts, Driver-side airbag (Canada) * N = Manual seat belts, Dual front airbags (Canada) * F = Manual seat belts, Depowered Dual front airbags, & Front Side Airbags (Canada: XJ8/XJR '99) ===Body Style (Position 6):=== * 1 = 4-door sedan (XJ-series sedan '81-'99) * 2 = 2-door convertible w/2+2 seating (XJS convertible '94-'96, XK8 convertible '97-'99) * 3 = 2-door Cabriolet (XJ-SC '86-'88) * 4 = 2-door convertible w/2-psgr. seating (factory-built XJS convertible '89-'94, XJR-S convertible '93) * 5 = 2-door coupe (XJS coupe '82-'96, XJR-S coupe '93, XK8 coupe '97-'99) * 5 = 2-door coupe (Hess & Eisenhardt-built XJS convertible '87-'88) [coupe conversion] ===Engine Type (Position 7):=== {| class="wikitable" |+Position 7 |- ! VIN !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications |- | 1 || 4.0L || I6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||MPI. [[w:Jaguar AJ6 engine#AJ16S|Jaguar AJ16S I6]]. Jaguar XJR ('95-'97). |- | 2 || 4.2L || I6 || Gas ||DOHC,<br /> 12 valve||CA & Canada-spec. MPI. [[w:Jaguar XK engine|Jaguar XK I6]]. Jaguar XJ6 ('81-'82). |- | 2 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||MPI. Dual-canister evaporative emissions system. [[w:Jaguar AJ6 engine#AJ16|Jaguar AJ16 I6]]. Jaguar XJ6 ('96-'97). |- | 2 || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Variable intake valve timing. Dual-canister evaporative emissions system. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 - AJ26 V8 engine]].<br> Jaguar XJ8 ('98), XK8 ('98). |- | 3 || 4.2L || I6 || Gas ||DOHC,<br /> 12 valve||N. America-spec. MPI. [[w:Jaguar XK engine|Jaguar XK I6]]. Jaguar XJ6 ('81-'87). |- | 3 || 6.0L || 60° V12 || Gas ||SOHC,<br /> 24 valve||MPI. [[w:Jaguar V12 engine|Jaguar V12]]. Jaguar XJR-S ('93), XJS ('94-'95), XJ12 ('94-'96). |- | 5 || 3.6L || I6 || Gas ||DOHC,<br /> 24 valve||N. America-spec - Low Compression. MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('88-'89). |- | 6 || 3.6L || I6 || Gas ||DOHC,<br /> 24 valve||N. America-spec - High Compression. MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('88). |- | 7 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('90-'94), XJS ('93-'94). |- | 7 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||MPI. [[w:Jaguar AJ6 engine#AJ16|Jaguar AJ16 I6]]. Jaguar XJ6 ('95-'96), XJS ('95-'96). |- | 7 || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 - AJ26 V8 engine]]. Jaguar XK8 ('97). |- | 8 || 5.3L || 60° V12 || Gas ||SOHC,<br /> 24 valve||N. America-spec. MPI. [[w:Jaguar V12 engine|Jaguar V12]]. Jaguar XJ-S ('82-'92), XJ12 (Canada only: '88-'92). |- | 8 || 4.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||MPI. Dual-canister evaporative emissions system. [[w:Jaguar AJ-V8 engine#Supercharged|Jaguar AJ-V8 - AJ26S V8 engine]]. Jaguar XJR ('98-'99). |- | 9 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||Canada-spec. MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('90-'93), XJS ('93). |- | 0 || 5.3L || 60° V12 || Gas ||SOHC,<br /> 24 valve||Canada-spec. MPI. [[w:Jaguar V12 engine|Jaguar V12]]. Jaguar XJ-S ('82-'87), XJ12 (Canada only: '85-'87). |- | 0 || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Continuously variable intake valve timing. Dual-canister evaporative emissions system. Enhanced evaporative emissions control system. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 - AJ27 V8 engine]]. Jaguar XJ8 ('99), XK8 ('99). |} ===Transmission & Steering Location (Position 8):=== * 4 = Automatic / LHD * 8 = Manual / LHD ('93-'94 XJS 4.0 w/ optional 5-spd. manual) ===Check Digit/Gearbox (Position 9)=== * USA /Canada [[Vehicle Identification Numbers (VIN codes)/Check digit|Check digit]] ===Model Year Code (Position 10)=== ''See: [[Vehicle Identification Numbers (VIN codes)/Model year]]'' ===Plant Codes (Position 11)=== * C - Browns Lane plant, Coventry, West Midlands, England, UK ===Positions 12–17, Serial Number=== ** 100001 and after - XJ-S/XJ-SC/XJS/XJR-S (XJ27) ** 300001 and after - XJ-series sedan Series III ** 500001 and after - XJ-series sedan (XJ40/XJ81) ** 720001 and after - XJ-series sedan (X300/X305/X306/X330) ** 810001 and after - XJ-series sedan (X308) ** 001001 and after - XK8 (X100) bfutwkpk8dieqv7qmzqeae9deiyj4qv 4675321 4675320 2026-10-09T20:38:30Z JustTheFacts33 3434282 /* Engine/Emissions Control System (Position 8) */ 4675321 wikitext text/x-wiki {{Vehicle Identification Numbers (VIN codes)/Warning}}{{clear}} This VIN number decoding and designation system is used primarily for the North American Market. European and Asian markets use other decoding and designation systems. ==General Template for Jaguar's VIN format (2000 -)== ===Jaguar WMIs (2000-) (Position 1-3)=== * SAJ - Jaguar passenger car (UK) * SAD - Jaguar SUV (UK & Europe) * L2C - Chery Jaguar Land Rover (China) ===Regional Spec/Restraint System (Position 4):=== * J = Manual seat belts, Dual front airbags (US: XK8 '00) * B = Manual seat belts, Dual front airbags (Canada: XK8 '00) * D = Manual seat belts, Depowered Dual front airbags, & Front Side Airbags (US: S-Type '00-'02, XJ8/XJR '00-'03, XK8/XKR '01-'06, XK/XKR Early '07) * F = Manual seat belts, Depowered Dual front airbags, & Front Side Airbags (Canada: S-Type '00-'02, XJ8/XJR '00-'03, XK8/XKR '01-'06, XK/XKR Early '07) * E = Manual seat belts, Depowered Dual front airbags w/occupant position sensing, & Front Side Airbags & Side Curtain Airbags (US: X-Type '02-'04, S-Type '03-'04, XJ8/XJR Early '04) * G = Manual seat belts, Depowered Dual front airbags w/occupant position sensing, & Front Side Airbags & Side Curtain Airbags (Canada: X-Type '02-'04,<br> S-Type '03-'04, XJ8/XJR Early '04) * W = Manual seat belts, Depowered Dual front airbags w/occupant position (driver) and weight (fr. psgr.) sensing, & Front Side Airbags & Side Curtain Airbags <br> (US: X-Type '05-'08, S-Type '05-'08, XF '09-'15, XJ8/XJR '04-'09, XJ '10-) * X = Manual seat belts, Depowered Dual front airbags w/occupant position (driver) and weight (fr. psgr.) sensing, & Front Side Airbags & Side Curtain Airbags (Canada: X-Type '05-'08, S-Type '05-'08, XF '09-'15, XJ8/XJR '04-'09, XJ '10-) * W = Manual seat belts, Depowered Dual front airbags w/occupant position (driver) and weight (fr. psgr.) sensing, & Front Side Head/Thorax Airbags <br> (US: XK/XKR '07-'15, F-Type '14-) * X = Manual seat belts, Depowered Dual front airbags w/occupant position (driver) and weight (fr. psgr.) sensing, & Front Side Head/Thorax Airbags <br> (Canada: XK/XKR '07-'15, F-Type '14-) ===Transmission & Steering Location (Position 5 - '00-'12):=== * A = Automatic / LHD * B = Manual / LHD (X-Type '02-'05, S-Type 3.0 '03-'04) ===Transmission & Drive Wheels (Position 5 - '13-):=== * A = Automatic / Rwd (XF '13-'15, XJ '13-, XK '13-'15, F-Type '14-) * B = Manual / Rwd (F-Type '16-) * J = Automatic / Awd (XF Awd '13-'15, XJ Awd '13-, F-Type Awd '16-) ===Model Line (Position 6-7)=== {| class="wikitable" |+Position 6-7 !VIN code !Description |- |51 |[[w:Jaguar X-Type|Jaguar X-Type sedan - High Series]] ('02-'08) |- |52 |[[w:Jaguar X-Type|Jaguar X-Type sedan - Entry Series]] ('03-'04) |- |53 |[[w:Jaguar X-Type|Jaguar X-Type sedan w/Sport Package]] ('02-'03) |- |54 |[[w:Jaguar X-Type|Jaguar X-Type Sportwagon]] ('05-'08) |- |01 |[[w:Jaguar S-Type (1999)|Jaguar S-Type]] ('00-'08) |- |03 |[[w:Jaguar S-Type (1999)|Jaguar S-Type Sport]] [3.0, 4.0] ('02) |- |03 |[[w:Jaguar S-Type (1999)|Jaguar S-Type Sport]] [3.0, 4.2] ('03) |- |03 |[[w:Jaguar S-Type (1999)|Jaguar S-Type R]] ('03-'08) |- |05 |[[w:Jaguar XF (X250)|Jaguar XF Luxury]] ('09) |- |06 |[[w:Jaguar XF (X250)|Jaguar XF Premium Luxury]] ('09) |- |07 |[[w:Jaguar XF (X250)|Jaguar XF Supercharged]] ('09) |- |0E |[[w:Jaguar XF (X250)|Jaguar XF]] ('13-'14) |- |0F |[[w:Jaguar XF (X250)|Jaguar XF]] ('10-'12) |- |0F |[[w:Jaguar XF (X250)|Jaguar XF 2.0T Premium]] [8th pos. of VIN is S] ('15) |- |0F |[[w:Jaguar XF (X250)|Jaguar XF 3.0 Sport Rwd]] [8th pos. of VIN is 7] ('15) |- |0F |[[w:Jaguar XF (X250)|Jaguar XF 3.0 Sport Awd]] [8th pos. of VIN is F] ('15) |- |0G |[[w:Jaguar XF (X250)|Jaguar XF Premium]] ('10-'11) |- |0H |[[w:Jaguar XF (X250)|Jaguar XF Portfolio]] [8th pos. of VIN is B] ('12) |- |0H |[[w:Jaguar XF (X250)|Jaguar XF 3.0 Portfolio Rwd]] [8th pos. of VIN is 7] ('15) |- |0H |[[w:Jaguar XF (X250)|Jaguar XF 3.0 Portfolio Awd]] [8th pos. of VIN is F] ('15) |- |0H |[[w:Jaguar XF (X250)|Jaguar XF Supercharged]] [8th pos. of VIN is E: '10-'13 or P: '13-'15] |- |0J |[[w:Jaguar XF (X250)|Jaguar XFR]] ('10-'15) |- |0K |[[w:Jaguar XF (X250)|Jaguar XFR-S]] ('13-'15) |- |8J |[[w:Jaguar XF (X250)|Jaguar XFR w/Speed Pack]] ('13-'15) |- |12 |[[w:Jaguar XJ (X308)#Sport|Jaguar XJ Sport]] ('02-'03) |- |14 |[[w:Jaguar XJ (X308)|Jaguar XJ8]] ('00-'03) |- |15 |[[w:Jaguar XJ (X308)#XJR|Jaguar XJR]] ('00-'03) |- |23 |[[w:Jaguar XJ (X308)|Jaguar XJ8L]] (LWB) ('00-'01) |- |24 |[[w:Jaguar XJ (X308)#Daimler/Vanden Plas|Jaguar XJ8 Vanden Plas]] (LWB) ('00-'03) |- |25 |[[w:Jaguar XJ (X308)#Daimler/Vanden Plas|Jaguar XJ8 Vanden Plas Supercharged]] (LWB) ('00-'01) |- |25 |[[w:Jaguar XJ (X308)#Daimler/Vanden Plas|Jaguar XJ Super V8]] (LWB) ('02-'03) |- |71 |[[w:Jaguar XJ (X350)|Jaguar XJ8]] ('04-'09) |- |73 |[[w:Jaguar XJ (X350)|Jaguar XJR]] ('04-'09) |- |74 |[[w:Jaguar XJ (X350)|Jaguar XJ8 Vanden Plas]] (SWB) ('04) |- |79 |[[w:Jaguar XJ (X350)|Jaguar XJ8L]] (LWB) ('05-'09) |- |82 |[[w:Jaguar XJ (X350)|Jaguar XJ8 Vanden Plas]] (LWB) ('05-'09) |- |82 |[[w:Jaguar XJ (X350)|Jaguar XJ Super V8]] (LWB, 5-psgr.) ('05-'09) |- |86 |[[w:Jaguar XJ (X350)|Jaguar XJ Super V8 Portfolio]] (LWB, 4-psgr.) ('06) |- |94 |[[w:Jaguar XJ (X350)|Jaguar XJ Super V8 Portfolio]] (LWB, 5-psgr.) ('09) |- |1C |[[w:Jaguar XJ (X351)|Jaguar XJ]] ('10-'15) |- |1E |[[w:Jaguar XJ (X351)|Jaguar XJR]] ('14-'15) |- |1G |[[w:Jaguar XJ (X351)|Jaguar XJ Supercharged]] [8th pos. of VIN is E: '10-'13 or T: '13-'15] |- |1J |[[w:Jaguar XJ (X351)|Jaguar XJ Supersport]] ('11-'12) |- |2E |[[w:Jaguar XJ (X351)|Jaguar XJR LWB]] ('14-'15) |- |2G |[[w:Jaguar XJ (X351)|Jaguar XJL]] [8th pos. of VIN is B] ('10-'11) |- |2G |[[w:Jaguar XJ (X351)|Jaguar XJL Portfolio Rwd]] [8th pos. of VIN is B: '12-'13 or 1: '13] |- |2G |[[w:Jaguar XJ (X351)|Jaguar XJL Portfolio Rwd]] [8th pos. of VIN is Z: '14-'15) |- |2G |[[w:Jaguar XJ (X351)|Jaguar XJL Portfolio Awd]] [8th pos. of VIN is D] ('13-'15) |- |2G |[[w:Jaguar XJ (X351)|Jaguar XJL Supercharged]] [8th pos. of VIN is E: '10-'13 or T: '13-'15] |- |2J |[[w:Jaguar XJ (X351)|Jaguar XJL Supersport]] ('11-'13) |- |2K |[[w:Jaguar XJ (X351)|Jaguar XJL Ultimate]] ('13) |- |3F |[[w:Jaguar XJ (X351)|Jaguar XJ Supersport w/Speed Pack]] ('12-'13) |- |3G |[[w:Jaguar XJ (X351)|Jaguar XJL Supersport w/Speed Pack]] ('12-'13) |- |3H |[[w:Jaguar XJ (X351)|Jaguar XJ Supercharged w/Sport & Speed Pack]] ('12-'15) |- |3K |[[w:Jaguar XJ (X351)|Jaguar XJL Supercharged w/Sport & Speed Pack]] ('12-'15) |- |41 |[[w:Jaguar XK (X100)|Jaguar XK8/XKR coupe]] ('00-'06) |- |42 |[[w:Jaguar XK (X100)|Jaguar XK8/XKR convertible]] ('00-'06) |- |43 |[[w:Jaguar XK (X150)|Jaguar XK/XKR coupe]] ('07-'09) |- |44 |[[w:Jaguar XK (X150)|Jaguar XK/XKR convertible]] ('07-'09) |- |45 |[[w:Jaguar XK (X150)|Jaguar XKR Portfolio Edition coupe]] ('09) |- |46 |[[w:Jaguar XK (X150)|Jaguar XKR Portfolio Edition convertible]] ('09) |- |4D |[[w:Jaguar XK (X150)|Jaguar XK Touring coupe]] [8th pos. of VIN is B] ('13-'14) |- |4E |[[w:Jaguar XK (X150)|Jaguar XK Touring convertible]] [8th pos. of VIN is B] ('13-'14) |- |4D |[[w:Jaguar XK (X150)|Jaguar XKR coupe]] [8th pos. of VIN is C] ('10-'15) |- |4E |[[w:Jaguar XK (X150)|Jaguar XKR convertible]] [8th pos. of VIN is C] ('10-'15) |- |4F |[[w:Jaguar XK (X150)|Jaguar XK coupe]] (most Portfolio Edition features are std.) [8th pos. of VIN is B] ('10-'15) |- |4F |[[w:Jaguar XK (X150)|Jaguar XKR175 coupe]] [8th pos. of VIN is C] ('11) |- |4F |[[w:Jaguar XK (X150)|Jaguar XKR coupe w/Dynamic Pack]] [8th pos. of VIN is C] ('13-'15), XK Final Fifty Edition coupe ('15) |- |4G |[[w:Jaguar XK (X150)|Jaguar XK convertible]] (most Portfolio Edition features are std.) [8th pos. of VIN is B] ('10-'15) |- |4G |[[w:Jaguar XK (X150)|Jaguar XKR convertible w/Dynamic Pack]] [8th pos. of VIN is C] ('13-'15), XK Final Fifty Edition convertible ('15) |- |4H |[[w:Jaguar XK (X150)|Jaguar XKR-S coupe]] ('12-'15), XKR-S GT coupe ('14) |- |4J |[[w:Jaguar XK (X150)|Jaguar XKR-S convertible]] ('12-'15) |- |6A |[[w:Jaguar F-Type)|Jaguar F-Type coupe]] ('15-) |- |6B |[[w:Jaguar F-Type)|Jaguar F-Type S coupe]] ('15-) |- |6D |[[w:Jaguar F-Type)|Jaguar F-Type R coupe]] ('15-) |- |6E |[[w:Jaguar F-Type)|Jaguar F-Type convertible]] ('14-'15) |- |6F |[[w:Jaguar F-Type)|Jaguar F-Type S convertible]] ('14-'15) |- |6G |[[w:Jaguar F-Type)|Jaguar F-Type V8 S convertible]] ('14-'15) |} ===Engine/Emissions Control System (Position 8)=== {| class="wikitable" |+Position 8 ! VIN !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications |- | A || 3.0L || 60° V6 || Gas ||DOHC,<br /> 24 valve||MPI. ULEV. Variable intake valve timing. [[w:Jaguar AJ-V6 engine#AJ30|Jaguar AJ-V6 - AJ30 V6 engine]].<br> Jaguar X-Type 3.0 (Mid '05-'08), S-Type 3.0 ('06-'08). |- | A || 4.2L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. ULEV. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.2 L|Jaguar AJ-V8 - AJ34 V8 engine]]. Jaguar XF ('10). |- | A || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 550 PS/542 hp. Jaguar XKR-S ('12-'15), XKR-S GT ('14), F-Type R coupe ('15). |- | B || 4.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||MPI. [[w:Jaguar AJ-V8 engine#Supercharged|Jaguar AJ-V8 - AJ27S V8 engine]].<br> Jaguar XJR ('00-'03), Vanden Plas Supercharged ('00-'01), Super V8 ('02-'03), XKR ('00-'02). |- | B || 4.2L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||MPI. [[w:Jaguar AJ-V8 engine#Supercharged_2|Jaguar AJ-V8 - AJ33S V8 engine]]. Jaguar XJR ('04-'05), Super V8 ('05), XKR ('03-'06). |- | B || 4.2L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. ULEV. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.2 L|Jaguar AJ-V8 - AJ34 V8 engine]].<br> Jaguar S-Type ('06-'08), XF ('09), XJ8/Vanden Plas ('06-'09), XK ('07-'09). |- | B || 5.0L || V8 || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. Variable intake valve lift. Variable intake.<br> [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> Jaguar XF ('10-'12), XJ ('11-'12), XJL ('11), XJL Portfolio Rwd ('12-'13), XK ('10-'15), XK Touring ('13-'14). |- | C || 3.0L || 60° V6 || Gas ||DOHC,<br /> 24 valve||MPI. Variable intake valve timing. [[w:Jaguar AJ-V6 engine#AJ30|Jaguar AJ-V6 - AJ30 V6 engine]].<br> Jaguar S-Type 3.0 ('00-'01), X-Type 3.0 ('02-Mid '05). |- | C || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 - AJ27 V8 engine]].<br> Jaguar XJ8/Vanden Plas ('00-'03), XJ Sport ('02-'03), XK8 ('00-'02). |- | C || 4.2L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.2 L|Jaguar AJ-V8 - AJ33 V8 engine]]. Jaguar XJ8 ('04-'05), XK8 ('03-'06). |- | C || 4.2L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||MPI. ULEV. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#Supercharged_2|Jaguar AJ-V8 - AJ34S V8 engine]].<br> Jaguar S-Type R ('06-'08), XF Supercharged ('09), XJR ('06-'09), Super V8 ('06-'09), XKR ('07-'09). |- | C || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 510 PS/503 hp. Jaguar XFR ('10-'13), XJ/XJL Supersport ('11-'13), XKR ('10-'15). |- | C || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 380 PS/375 hp. Jaguar F-Type S ('14-'15). |- | D || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 - AJ28 V8 engine]]. Jaguar S-Type 4.0 ('00-'01). |- | D || 2.5L || 60° V6 || Gas ||DOHC,<br /> 24 valve||MPI. Variable intake valve timing. [[w:Jaguar AJ-V6 engine#AJ25|Jaguar AJ-V6 - AJ25 V6 engine]]. Jaguar X-Type 2.5 ('02-'05). |- | D || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XJ Awd, XJL Portfolio Awd ('13-'15). |- | E || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 470 PS/464 hp. Jaguar XF Supercharged ('10-'13), XJ/XJL Supercharged ('11-'13). |- | F || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XF 3.0 Awd ('13-'14). |- | F || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. SULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XF 3.0 Awd ('15). |- | H || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas/E85 ||DOHC,<br /> 32 valve||Flex Fuel. Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]]. 510 PS/503 hp. Jaguar XFR ('13-'15). |- | K || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 550 PS/542 hp. Jaguar XJR/XJR LWB ('14-'15). |- | L || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 495 PS/488 hp. Jaguar F-Type V8 S convertible ('14-'15). |- | N || 3.0L || 60° V6 || Gas ||DOHC,<br /> 24 valve||MPI. Variable intake valve timing. [[w:Jaguar AJ-V6 engine#AJ30|Jaguar AJ-V6 - AJ30 V6 engine]]. Jaguar S-Type 3.0 ('01-'02). |- | P || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 - AJ28 V8 engine]]. Jaguar S-Type 4.0 ('01-'02). |- | P || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas/E85 ||DOHC,<br /> 32 valve||Flex Fuel. Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]]. 470 PS/464 hp. Jaguar XF Supercharged ('13-'15). |- | S || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve||Direct Injection. Dual VVT. Ford EcoBoost engine (Mazda L engine-based).<br> Jaguar XF 2.0T ('13-'14), XF 2.0T Premium ('15). |- | T || 3.0L || 60° V6 || Gas ||DOHC,<br /> 24 valve||MPI. Variable intake valve timing. [[w:Jaguar AJ-V6 engine#AJ30|Jaguar AJ-V6 - AJ30 V6 engine]]. Jaguar S-Type 3.0 ('03-'05). |- | T || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas/E85 ||DOHC,<br /> 32 valve||Flex Fuel. Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]]. 470 PS/464 hp. Jaguar XJ/XJL Supercharged ('13-'15). |- | T || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. SULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar F-Type ('15-). |- | U || 4.2L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.2 L|Jaguar AJ-V8 - AJ33 V8 engine]]. Jaguar S-Type 4.2 ('03-'05). |- | U || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. SULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 380 PS/375 hp. Jaguar F-Type S ('15-). |- | V || 4.2L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||MPI. [[w:Jaguar AJ-V8 engine#Supercharged_2|Jaguar AJ-V8 - AJ33S V8 engine]]. Jaguar S-Type R ('03-'05). |- | X || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas/E85 ||DOHC,<br /> 24 valve||Flex Fuel. Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XF 3.0 Rwd ('14). |- | Z || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 550 PS/542 hp. Jaguar XFR-S ('13-'15). |- | Z || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas/E85 ||DOHC,<br /> 24 valve||Flex Fuel. Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XJ Rwd, XJL Portfolio Rwd ('14-'15). |- | 1 || 5.0L || V8 || Gas/E85 ||DOHC,<br /> 32 valve||Flex Fuel. Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. Variable intake valve lift. Variable intake. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]]. Jaguar XJL Portfolio Rwd ('13). |- | 7 || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XF 3.0 Rwd ('13), XJ Rwd ('13-), F-Type ('14-'15). |- | 7 || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. SULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XF 3.0 Rwd ('15). |} ===Check Digit/Gearbox (Position 9)=== * USA /Canada [[Vehicle Identification Numbers (VIN codes)/Check digit|Check digit]] ===Model Year Code (Position 10)=== ''See: [[Vehicle Identification Numbers (VIN codes)/Model year]]'' ===Plant Code/Model Line/Engine (Position 11) 2000-2019=== * X - Halewood, Merseyside, England, UK - X-Type 2.5 ('02-'05) * W - Halewood, Merseyside, England, UK - X-Type 3.0 ('02-'08) * F - Castle Bromwich, West Midlands, England, UK - S-Type 3.0 ('00-'08) * G - Castle Bromwich, West Midlands, England, UK - S-Type 4.0 ('00-'02) * H - Castle Bromwich, West Midlands, England, UK - S-Type 4.2 ('03-'08) * 1 - Castle Bromwich, West Midlands, England, UK - S-Type R (4.2 supercharged) ('03-'08) * H - Castle Bromwich, West Midlands, England, UK - XF 4.2 ('09-'10) * 1 - Castle Bromwich, West Midlands, England, UK - XF Supercharged (4.2 supercharged) ('09) * L - Castle Bromwich, West Midlands, England, UK - XF 5.0 ('10-'12) * M - Castle Bromwich, West Midlands, England, UK - XF Supercharged, XFR (5.0 supercharged) ('10-'15), XFR-S (5.0 supercharged) ('13-'15) * P - Castle Bromwich, West Midlands, England, UK - XF 2.0T ('13-'15) * 8 - Castle Bromwich, West Midlands, England, UK - XF 3.0 supercharged ('13-'15) * L - Browns Lane plant, Coventry, West Midlands, England, UK - XJ8 (4.0) ('00-'03), XJ8L (4.0) ('00-'01), XJ8 Vanden Plas (4.0) ('00-'03), XJ Sport (4.0) ('02-'03) * M - Browns Lane plant, Coventry, West Midlands, England, UK - XJ8 Vanden Plas Supercharged (4.0 supercharged) ('00-'01),<br> Super V8 (4.0 supercharged) ('02-'03), XJR (4.0 supercharged) ('00-'03) * S - Browns Lane plant, Coventry, West Midlands, England, UK - XJ8 (4.2) ('04-'06), XJ8L (4.2) ('05-'06), XJ8 Vanden Plas (4.0) ('04-'06) * T - Browns Lane plant, Coventry, West Midlands, England, UK - Super V8 (4.2 supercharged) ('05-'06), Super V8 Portfolio (4.2 supercharged) ('06),<br> XJR (4.2 supercharged) ('04-'06) * S - Castle Bromwich, West Midlands, England, UK - XJ8 (4.2) ('07-'09), XJ8L (4.2) ('07-'09), XJ8 Vanden Plas (4.0) ('07-'09) * T - Castle Bromwich, West Midlands, England, UK - Super V8 (4.2 supercharged) ('07-'09), Super V8 Portfolio (4.2 supercharged) ('09),<br> XJR (4.2 supercharged) ('07-'09) * L - Castle Bromwich, West Midlands, England, UK - XJ (5.0) ('10-'12), XJL (5.0) ('10-'11), XJL Portfolio (5.0) ('12-'13) * M - Castle Bromwich, West Midlands, England, UK - XJ/XJL Supercharged (5.0 supercharged) ('10-'19), XJ/XJL Supersport (5.0 supercharged) ('11-'13),<br> XJL Ultimate (5.0 supercharged) ('13), XJR SWB/LWB (5.0 supercharged) ('14-'17), XJR575 LWB (5.0 supercharged) ('18-'19), XJ50 LWB (5.0 supercharged) ('19), XJ Collection Sp. Ed. LWB (5.0 supercharged) ('19) * 8 - Castle Bromwich, West Midlands, England, UK - XJ base (3.0 supercharged) ('13-'15), XJ R-Sport (3.0 supercharged) ('16-'19),<br> XJL Portfolio AWD (3.0 supercharged) ('13-'19), XJL Portfolio RWD (3.0 supercharged) ('14-'19), XJ50 LWB (3.0 supercharged) ('19) * N - Browns Lane plant, Coventry, West Midlands, England, UK - XK8 (4.0) ('00-'02) * P - Browns Lane plant, Coventry, West Midlands, England, UK - XKR (4.0 supercharged) ('00-'02) * 2 - Browns Lane plant, Coventry, West Midlands, England, UK - XK8 (4.2) ('03-'06) * 3 - Browns Lane plant, Coventry, West Midlands, England, UK - XKR (4.2 supercharged) ('03-'06) * 5 - Castle Bromwich, West Midlands, England, UK - XK (4.2) ('07-'09) * 9 - Castle Bromwich, West Midlands, England, UK - XKR (4.2 supercharged) ('07-'09) * L - Castle Bromwich, West Midlands, England, UK - XK (5.0) ('10-'15) * M - Castle Bromwich, West Midlands, England, UK - XKR (5.0 supercharged) ('10-'15), XKR-S (5.0 supercharged) ('12-'15), XKR-S GT (5.0 supercharged) ('14) * 8 - Castle Bromwich, West Midlands, England, UK - F-Type Base, S (3.0 supercharged) ('14-'17), F-Type Premium (3.0 supercharged) ('17) * M - Castle Bromwich, West Midlands, England, UK - F-Type V8S (5.0 supercharged) ('14-'15), F-Type R (5.0 supercharged) ('15-'17),<br> F-Type Project 7 (5.0 supercharged) ('16), F-Type SVR (5.0 supercharged) ('17) ===Plant Codes (Position 11) 2016-2026=== * A - Solihull, West Midlands, England, UK (XE '17, F-Pace '17-'26) * C - Castle Bromwich, West Midlands, England, UK (XE '17-'20, XF '16-'24, F-Type '18-'24) * S - Oxford Road plant, Ryton, West Midlands, England, UK (JLR SVO plant) (XE SV Project 8 '19) * 1 - Graz, Austria (Magna Steyr plant) (E-Pace '18-'24, I-Pace EV '19-'24) ===Model (Position 12)=== * C - X-Type ('02-'03) * D - X-Type ('03-'04) * E - X-Type ('04-'06) * J - X-Type ('06-'08) * L - S-Type ('00-'01) * M - S-Type ('01-'04) * N - S-Type ('04-'08) * R - XF ('09-'11) * S - XF ('11-'13) * U - XF ('13-'15) * Y - XF ('16-) * F - XJ ('00-'03) * G - XJ ('04-'06) [Browns Lane plant] * H - XJ ('06-'09) [Castle Bromwich plant] * V - XJ ('10-'16) * W - XJ ('16-'19) * A - XK ('00-'06) * B - XK ('07-'15) * K - F-Type ('14-'24) '''Positions 13–17, Serial Number''' ==General Template for Jaguar's VIN format (1981 - 1999)== ===Jaguar WMIs (1981-1999) (Position 1-3)=== * SAJ - Jaguar passenger car ===Model Line (Position 4)=== {| class="wikitable" |+Position 4 !VIN code !Description |- |A |[[w:Jaguar XJ#Series 3 (1979–1992)|Jaguar XJ6]] ('81-'87), XJ6 Vanden Plas ('82-'87) |- |B |[[w:Jaguar XJ#Series 3 (1979–1992)|Jaguar XJ12]] (Canada only: '81-'88) |- |D |[[w:Jaguar XJ#Series 3 (1979–1992)|Jaguar XJ12]] (Canada only: '89-'92) |- |H |[[w:Jaguar XJ (XJ40)|Jaguar XJ6]] ('88-'89, '93-'94) |- |F |[[w:Jaguar XJ (XJ40)|Jaguar XJ6]] ('90-'92) |- |H |[[w:Jaguar XJ (XJ40)|Jaguar XJ6 Sovereign]] ('90-'92) |- |K |[[w:Jaguar XJ (XJ40)#Daimler/Vanden Plas|Jaguar XJ6 Vanden Plas]] ('88-'94) |- |M |[[w:Jaguar XJ (XJ40)#Majestic (1989–1992 – SWB; 1993–1994 – LWB)|Jaguar XJ6 Vanden Plas Majestic]] ('89-'90, '92) |- |M |[[w:Jaguar XJ (XJ40)#XJ12 and Daimler Double Six (XJ81)|Jaguar XJ12]] ('94) |- |H |[[w:Jaguar XJ (X300)|Jaguar XJ6]] ('95-'97) |- |H |[[w:Jaguar XJ (X300)|Jaguar XJ6L]] LWB [X330] ('97) |- |K |[[w:Jaguar XJ (X300)#Daimler/Jaguar Vanden Plas|Jaguar XJ6 Vanden Plas]] SWB ('95) |- |K |[[w:Jaguar XJ (X300)#Daimler/Jaguar Vanden Plas|Jaguar XJ6 Vanden Plas]] LWB [X330] ('96-'97) |- |M |[[w:Jaguar XJ (X300)#XJ12 (X305)|Jaguar XJ12]] SWB ('95) |- |M |[[w:Jaguar XJ (X300)#XJ12 (X305)|Jaguar XJ12]] LWB [X330] ('96) |- |P |[[w:Jaguar XJ (X300)#XJR (X306)|Jaguar XJR]] ('95-'97) |- |H |[[w:Jaguar XJ (X308)|Jaguar XJ8]] ('98-'99) |- |H |[[w:Jaguar XJ (X308)|Jaguar XJ8L]] LWB ('98-'99) |- |K |[[w:Jaguar XJ (X308)#Daimler/Vanden Plas|Jaguar XJ8 Vanden Plas]] LWB ('98-'99) |- |P |[[w:Jaguar XJ (X308)#XJR|Jaguar XJR]] ('98-'99) |- |N |[[w:Jaguar XJS|Jaguar XJ-S]] ('82-'91), XJ-SC ('86-'88), XJS ('92-'96) |- |T |[[w:Jaguar XJS|Jaguar XJ-S]] Rouge Collection ('89-'90), Classic Collection ('90-'91) |- |S |[[w:Jaguar XJS#XJR-S|Jaguar XJR-S]] ('93) |- |G |[[w:Jaguar XK (X100)|Jaguar XK8]] ('97-'99) |} ===Class (Regional Spec)/Restraint System (Position 5):=== * V = N. American-spec (Manual seat belts) * L = Canadian-spec (Manual seat belts) * Y = XJ6 Vanden Plas [Series III] ('82-'87) (Manual seat belts) * A = Motorized Shoulder Belts (XJ-S coupe '88-'89, XJ-SC '88) * Y = Motorized Shoulder Belts (XJ-S coupe '89, XJ sedan '89-'92) * W = Manual seat belts, Driver-side airbag (US: XJ-S '90-'93, XJ6 '93, XJ12 Early '94) * X = Manual seat belts, Dual front airbags (US: XJS '94-'96, XJ6 '94-'97, XJ12 '94-'96, XJR '95-'97, XK8 '97-'99) * X = Manual seat belts, Dual front airbags, & Front Side Airbags (US: XJ8/XJR '98-'99) * D = Manual seat belts, Depowered Dual front airbags, & Front Side Airbags (US: XJ8/XJR '99) * M = Manual seat belts, Driver-side airbag (Canada) * N = Manual seat belts, Dual front airbags (Canada) * F = Manual seat belts, Depowered Dual front airbags, & Front Side Airbags (Canada: XJ8/XJR '99) ===Body Style (Position 6):=== * 1 = 4-door sedan (XJ-series sedan '81-'99) * 2 = 2-door convertible w/2+2 seating (XJS convertible '94-'96, XK8 convertible '97-'99) * 3 = 2-door Cabriolet (XJ-SC '86-'88) * 4 = 2-door convertible w/2-psgr. seating (factory-built XJS convertible '89-'94, XJR-S convertible '93) * 5 = 2-door coupe (XJS coupe '82-'96, XJR-S coupe '93, XK8 coupe '97-'99) * 5 = 2-door coupe (Hess & Eisenhardt-built XJS convertible '87-'88) [coupe conversion] ===Engine Type (Position 7):=== {| class="wikitable" |+Position 7 |- ! VIN !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications |- | 1 || 4.0L || I6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||MPI. [[w:Jaguar AJ6 engine#AJ16S|Jaguar AJ16S I6]]. Jaguar XJR ('95-'97). |- | 2 || 4.2L || I6 || Gas ||DOHC,<br /> 12 valve||CA & Canada-spec. MPI. [[w:Jaguar XK engine|Jaguar XK I6]]. Jaguar XJ6 ('81-'82). |- | 2 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||MPI. Dual-canister evaporative emissions system. [[w:Jaguar AJ6 engine#AJ16|Jaguar AJ16 I6]]. Jaguar XJ6 ('96-'97). |- | 2 || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Variable intake valve timing. Dual-canister evaporative emissions system. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 - AJ26 V8 engine]].<br> Jaguar XJ8 ('98), XK8 ('98). |- | 3 || 4.2L || I6 || Gas ||DOHC,<br /> 12 valve||N. America-spec. MPI. [[w:Jaguar XK engine|Jaguar XK I6]]. Jaguar XJ6 ('81-'87). |- | 3 || 6.0L || 60° V12 || Gas ||SOHC,<br /> 24 valve||MPI. [[w:Jaguar V12 engine|Jaguar V12]]. Jaguar XJR-S ('93), XJS ('94-'95), XJ12 ('94-'96). |- | 5 || 3.6L || I6 || Gas ||DOHC,<br /> 24 valve||N. America-spec - Low Compression. MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('88-'89). |- | 6 || 3.6L || I6 || Gas ||DOHC,<br /> 24 valve||N. America-spec - High Compression. MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('88). |- | 7 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('90-'94), XJS ('93-'94). |- | 7 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||MPI. [[w:Jaguar AJ6 engine#AJ16|Jaguar AJ16 I6]]. Jaguar XJ6 ('95-'96), XJS ('95-'96). |- | 7 || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 - AJ26 V8 engine]]. Jaguar XK8 ('97). |- | 8 || 5.3L || 60° V12 || Gas ||SOHC,<br /> 24 valve||N. America-spec. MPI. [[w:Jaguar V12 engine|Jaguar V12]]. Jaguar XJ-S ('82-'92), XJ12 (Canada only: '88-'92). |- | 8 || 4.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||MPI. Dual-canister evaporative emissions system. [[w:Jaguar AJ-V8 engine#Supercharged|Jaguar AJ-V8 - AJ26S V8 engine]]. Jaguar XJR ('98-'99). |- | 9 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||Canada-spec. MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('90-'93), XJS ('93). |- | 0 || 5.3L || 60° V12 || Gas ||SOHC,<br /> 24 valve||Canada-spec. MPI. [[w:Jaguar V12 engine|Jaguar V12]]. Jaguar XJ-S ('82-'87), XJ12 (Canada only: '85-'87). |- | 0 || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Continuously variable intake valve timing. Dual-canister evaporative emissions system. Enhanced evaporative emissions control system. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 - AJ27 V8 engine]]. Jaguar XJ8 ('99), XK8 ('99). |} ===Transmission & Steering Location (Position 8):=== * 4 = Automatic / LHD * 8 = Manual / LHD ('93-'94 XJS 4.0 w/ optional 5-spd. manual) ===Check Digit/Gearbox (Position 9)=== * USA /Canada [[Vehicle Identification Numbers (VIN codes)/Check digit|Check digit]] ===Model Year Code (Position 10)=== ''See: [[Vehicle Identification Numbers (VIN codes)/Model year]]'' ===Plant Codes (Position 11)=== * C - Browns Lane plant, Coventry, West Midlands, England, UK ===Positions 12–17, Serial Number=== ** 100001 and after - XJ-S/XJ-SC/XJS/XJR-S (XJ27) ** 300001 and after - XJ-series sedan Series III ** 500001 and after - XJ-series sedan (XJ40/XJ81) ** 720001 and after - XJ-series sedan (X300/X305/X306/X330) ** 810001 and after - XJ-series sedan (X308) ** 001001 and after - XK8 (X100) 9uw692yq1a5tonkt0tj88fqb8vzzbkq Infrastructure Policy Casebook/Colorado River 0 485845 4675409 4672297 2026-10-10T02:15:58Z Emrodri1 3626789 /* 2027- 2028 Operating Guidelines */ 4675409 wikitext text/x-wiki == Introduction == [block text] Bureau of Reclamation... Colorado River Basin.... [[File:Aerial views of Lake Mead National Recreation Area, formed when Hoover Dam backed up the Colorado River. Boulder City, Nevada LCCN2011633016.tif|thumb|Lake Mead]] [[File:Lake Powell - Arizona.JPG|thumb|Lake Powell]] [[File:Colorado River basin map.png|thumb|Map of the Colorado River Basin]] == Background == === History === Information about the historic past levels of Lake Mead and Lake Powell... unfavorable conditions... low snowpack == The Record of Decision == Section XI.G7.D of Record of Decision of the 2007 Colorado River Interim Guidelines for Lower Basin Shortages and the Coordinated Operations for Lake Powell and Lake Mead instructed the Secretary of the Interior to review the efficacy the guidelines by 2020.<ref>{{Cite web |last=U.S. Department of the Interior |date=2007 |title=Record of Decision |url=https://www.usbr.gov/lc/region/programs/strategies/RecordofDecision.pdf}}</ref> In adherence with the ROD, the Secretary of the Interior completed the formal review process in December 2020. The Final Report found that the 2007 Interim Guidelines provided operational criteria for the lakes and increased water predictability for Lower Basin states. In addition, the creation of water storage and delivery mechanisms, such as the Intentionally Created Surplus, resulted in increased elevations in Lake Mead. While the 2007 Interim Guidelines were effective and successful compared to the projections created in the 2000s, improved scientific research and the increased severity of the drought indicated an increased risk of the Colorado River reaching critically low levels.<ref>{{Cite web |last=U.S. Department of Interior, Bureau of Reclamation |date=2020 |title=Review of the Colorado River Interim Guidelines for Lower Basin Shortages and Coordinated Operations for Lake Powell and Lake Mead |url=https://www.usbr.gov/ColoradoRiverBasin/documents/7d/7.D.Review_FinalReport_12-18-2020.pdf}}</ref> In addition, this analysis identified opportunities for future guidelines, such as increased flexibility, improved participation in complementary conservation efforts, and implementation of stronger, more robust measures.<ref>{{Cite web |last=U.S. Department of Interior, Bureau of Reclamation |date=2026 |title=Review of the 2007 Interim Guidelines & 7.D. Report |url=https://www.usbr.gov/ColoradoRiverBasin/interimguidelines/7dreport/index.html}}</ref> === The NEPA Process === Final Environmental Impact Statement (EIS) issued on July 31, 2026... <ref>{{Cite web |last=Bureau of Reclamation |date=July 31, 2026 |title=Post-2026 Operational Guidelines and Strategies for Lake Powell and Lake Mead – Final Environmental Impact Statement |url=https://www.usbr.gov/ColoradoRiverBasin/post2026/final-eis/index.html}}</ref> === Final Documents === ==== 2027- 2028 Operating Guidelines ==== Operating Guidelines<ref>{{Cite web |last=United States Department of the Interior, Office of the Secretary |date=August 2026 |title=Operating Guidelines: Colorado River Guidelines for Coordinated Operations of Lake Powell and Lake Mead |url=https://www.usbr.gov/ColoradoRiverBasin/post2026/decision-doc/2027-2028OperatingGuidelines_Final.pdf}}</ref> ==== Associated Biological Opinions ==== August 13, 2026... === Funding === == Impacts == {{BookCat}} 4foxfyrvzaelyant3sqhtfntxxtbo3p User:Benson Benjamin. M 2 485909 4675322 4672745 2026-10-09T20:48:05Z Benson Benjamin. M 3627081 /* */ 4675322 wikitext text/x-wiki Benson Benjamin is a Ugandan author, preacher and a Ugandan citizen. He is has written various books and a especially Christian books. His books majorly help to reveal the work of redemption. He has decided to use his talent of writing to spread the gospel. He has also decided to write brochures which are given out freely to communities and churches or institutions during the evangelical move of "'''''Bread of Life.'''''" Some of the brochures include: # Eating the Bread of life which is written in series ie. 1, 2, 3, 4 # Like cures like # Jesus in all the Books Some of the books include: # Africa Isn't God's Afterthought # The Two Trumpets # The Mystery Behind the Burn Offering. # The Mystery Behind the Altar. # The City of Refuge, etc...... He has also gone ahead to work together with his fellows The Qudruplets to do this work of God. mhzlxy15gfjp5xors504y0ps8crtslt On 2D Inverse Problems/Rotation 0 485992 4675331 4673618 2026-10-09T23:20:31Z DVD206 724793 spinning DVD prompt 4675331 wikitext text/x-wiki For the spiderweb the spinning spectrum could be circulant, rotation invariant: <math>\det \begin{pmatrix} c+a & -as &-c/s \\ -a/s & a+b & -bs \\ -cs & -b/s & b+c \end{pmatrix} = \det \begin{pmatrix} 2d & -ds &-d/s \\ -d/s & 2d & -ds \\ -ds & -d/s & 2d \end{pmatrix}. </math> <math>\det(L_s)=abc(2-s^3-1/s^3)=d^3(2-s^3-1/s^3)</math> if <math>abc=d^3</math>. in the smallest Spiderweb network case... The zeros of <math>\det(L_s)=0</math> are eigenvalues of the graph monodromy together with roots of unity symmetry rotation... Also, <math>L_s = \begin{pmatrix} 1 & -s & 0 \\ 0 & 1 & -s \\ -s & 0 & 1 \end{pmatrix} \begin{pmatrix} c & 0 & 0 \\ 0 & a & 0 \\ 0 & 0 & b \end{pmatrix} \begin{pmatrix} 1 & 0 &-1/s \\ -1/s & 1 & 0 \\ 0 & -1/s & 1 \end{pmatrix}. </math> <math>L_s^*=L_{1/s}</math> and the factorization holds <math>\det(L_s)=d^3(1-s^3)(1-1/s^3)</math>... {{BookCat}}Prompt for Gemini, Meta or Copilot AIs: A dimension reduction problem: Let S=[[0 1 0][0 0 1][1 0 0]] be the shift matrix and D and E two diagonal matrices. Let L_s(D,E)=[[E, -E][-E,(I-sS)D(I-S^T/s)]] be the block matrix. Prove that det(L_s(D,E))=det(L_(d*I,e*I)) and if the diagonal entries of D and E are positive then d and e > 0. aitvsbypb1uiyc9luostw49yyfkry4s 4675332 4675331 2026-10-09T23:23:21Z DVD206 724793 diagonal added 4675332 wikitext text/x-wiki For the spiderweb the spinning spectrum could be circulant, rotation invariant: <math>\det \begin{pmatrix} c+a & -as &-c/s \\ -a/s & a+b & -bs \\ -cs & -b/s & b+c \end{pmatrix} = \det \begin{pmatrix} 2d & -ds &-d/s \\ -d/s & 2d & -ds \\ -ds & -d/s & 2d \end{pmatrix}. </math> <math>\det(L_s)=abc(2-s^3-1/s^3)=d^3(2-s^3-1/s^3)</math> if <math>abc=d^3</math>. in the smallest Spiderweb network case... The zeros of <math>\det(L_s)=0</math> are eigenvalues of the graph monodromy together with roots of unity symmetry rotation... Also, <math>L_s = \begin{pmatrix} 1 & -s & 0 \\ 0 & 1 & -s \\ -s & 0 & 1 \end{pmatrix} \begin{pmatrix} c & 0 & 0 \\ 0 & a & 0 \\ 0 & 0 & b \end{pmatrix} \begin{pmatrix} 1 & 0 &-1/s \\ -1/s & 1 & 0 \\ 0 & -1/s & 1 \end{pmatrix}. </math> <math>L_s^*=L_{1/s}</math> and the factorization holds <math>\det(L_s)=d^3(1-s^3)(1-1/s^3)</math>... {{BookCat}}Prompt for Gemini, Meta or Copilot AIs: A dimension reduction problem: Let S=[[0 1 0][0 0 1][1 0 0]] be the shift matrix and D and E two diagonal matrices. Let L_s(D,E)=[[E, -E][-E,E+(I-sS)D(I-S^T/s)]] be the block matrix. Prove that det(L_s(D,E))=det(L_(d*I,e*I)) and if the diagonal entries of D and E are positive then d and e > 0. jadete1qa6k1ni6stxoy8rlvlsxp3xe 4675335 4675332 2026-10-09T23:32:03Z DVD206 724793 continued fraction answer... 4675335 wikitext text/x-wiki For the spiderweb the spinning spectrum could be circulant, rotation invariant: <math>\det \begin{pmatrix} c+a & -as &-c/s \\ -a/s & a+b & -bs \\ -cs & -b/s & b+c \end{pmatrix} = \det \begin{pmatrix} 2d & -ds &-d/s \\ -d/s & 2d & -ds \\ -ds & -d/s & 2d \end{pmatrix}. </math> <math>\det(L_s)=abc(2-s^3-1/s^3)=d^3(2-s^3-1/s^3)</math> if <math>abc=d^3</math>. in the smallest Spiderweb network case... The zeros of <math>\det(L_s)=0</math> are eigenvalues of the graph monodromy together with roots of unity symmetry rotation... Also, <math>L_s = \begin{pmatrix} 1 & -s & 0 \\ 0 & 1 & -s \\ -s & 0 & 1 \end{pmatrix} \begin{pmatrix} c & 0 & 0 \\ 0 & a & 0 \\ 0 & 0 & b \end{pmatrix} \begin{pmatrix} 1 & 0 &-1/s \\ -1/s & 1 & 0 \\ 0 & -1/s & 1 \end{pmatrix}. </math> <math>L_s^*=L_{1/s}</math> and the factorization holds <math>\det(L_s)=d^3(1-s^3)(1-1/s^3)</math>... {{BookCat}}Prompt for Gemini, Meta or Copilot AIs: A dimension reduction problem: Let S=[[0 1 0][0 0 1][1 0 0]] be the shift matrix and D and E two diagonal matrices. Let L_s(D,E)=[[E, -E][-E,E+(I-sS)D(I-S^T/s)]] be the block matrix. Prove that det(L_s(D,E))=det(L_(d*I,e*I)) and if the diagonal entries of D and E are positive then d and e > 0. The answer from Germany: Neither! Matrices structured like $L_s(D,E)$ with a cyclic shift operator $S$ typically arise in '''discrete physics models on periodic chains, lattice models in condensed matter, and localization theory''', rather than the mechanical spinning of a DVD or acoustic resonances. Specifically, this setup is characteristic of: === 1. Tight-Binding Models and Periodic Lattices === * '''Physical context:''' Systems of quantum particles, electrons, or coupled oscillators arranged in a closed 1-dimensional ring or periodic lattice (like a crystal or polymer ring with 3 sites). * '''Role of $S$:''' The matrix $S$ is a discrete shift (cyclic permutation) operator representing nearest-neighbor hopping around the periodic ring. * '''Role of $D$ and $E$:''' These diagonal matrices represent site-dependent potentials, disorder strengths, or coupling parameters at each site of the lattice. === 2. Transfer Matrices and Duality Relations in Physics === * In statistical mechanics and condensed matter physics (such as studying the Anderson localization model for disordered media), block matrices of this form frequently appear when setting up '''transfer matrices'''. * The parameter $s$ often plays the role of a complex spectral parameter or a twisted boundary condition (a Bloch-type phase factor $z = e^{i\theta}$) introduced to analyze extended versus localized states in periodic or quasi-periodic chains. === Why "Dimension Reduction"? === The calculation you are performing—reducing a system governed by individual, varying site parameters ($D$ and $E$) down to effective scalar parameters ($d$ and $e$) via determinants—is a technique used to find '''effective medium approximations''' or '''spectral invariants'''. It proves that the global spectral properties (like partition functions or total transmission determinants) of a disordered or inhomogeneous periodic ring can often be mapped back to an equivalent homogeneous system governed by mean scalar values ($d$ and $e$). hqxj396do3m3yhjizapkn6c4eka4yba 4675336 4675335 2026-10-09T23:37:27Z DVD206 724793 dementia 4675336 wikitext text/x-wiki For the spiderweb the spinning spectrum could be circulant, rotation invariant: <math>\det \begin{pmatrix} c+a & -as &-c/s \\ -a/s & a+b & -bs \\ -cs & -b/s & b+c \end{pmatrix} = \det \begin{pmatrix} 2d & -ds &-d/s \\ -d/s & 2d & -ds \\ -ds & -d/s & 2d \end{pmatrix}. </math> <math>\det(L_s)=abc(2-s^3-1/s^3)=d^3(2-s^3-1/s^3)</math> if <math>abc=d^3</math>. in the smallest Spiderweb network case... The zeros of <math>\det(L_s)=0</math> are eigenvalues of the graph monodromy together with roots of unity symmetry rotation... Also, <math>L_s = \begin{pmatrix} 1 & -s & 0 \\ 0 & 1 & -s \\ -s & 0 & 1 \end{pmatrix} \begin{pmatrix} c & 0 & 0 \\ 0 & a & 0 \\ 0 & 0 & b \end{pmatrix} \begin{pmatrix} 1 & 0 &-1/s \\ -1/s & 1 & 0 \\ 0 & -1/s & 1 \end{pmatrix}. </math> <math>L_s^*=L_{1/s}</math> and the factorization holds <math>\det(L_s)=d^3(1-s^3)(1-1/s^3)</math>... {{BookCat}}Prompt for Gemini, Meta or Copilot AIs: A dimension reduction problem: Let S=[[0 1 0][0 0 1][1 0 0]] be the shift matrix and D and E two diagonal matrices. Let L_s(D,E)=[[E, -E][-E,E+(I-sS)D(I-S^T/s)]] be the block matrix. Prove that det(L_s(D,E))=det(L_(d*I,e*I)) and if the diagonal entries of D and E are positive then d and e > 0. The answer from Germany: Neither! Matrices structured like $L_s(D,E)$ with a cyclic shift operator $S$ typically arise in '''discrete physics models on periodic chains, lattice models in condensed matter, and localization theory''', rather than the mechanical spinning of a DVD or acoustic resonances. Specifically, this setup is characteristic of: === 1. Tight-Binding Models and Periodic Lattices === * '''Physical context:''' Systems of quantum particles, electrons, or coupled oscillators arranged in a closed 1-dimensional ring or periodic lattice (like a crystal or polymer ring with 3 sites). * '''Role of $S$:''' The matrix $S$ is a discrete shift (cyclic permutation) operator representing nearest-neighbor hopping around the periodic ring. * '''Role of $D$ and $E$:''' These diagonal matrices represent site-dependent potentials, disorder strengths, or coupling parameters at each site of the lattice. === 2. Transfer Matrices and Duality Relations in Physics === * In statistical mechanics and condensed matter physics (such as studying the Anderson localization model for disordered media), block matrices of this form frequently appear when setting up '''transfer matrices'''. * The parameter $s$ often plays the role of a complex spectral parameter or a twisted boundary condition (a Bloch-type phase factor $z = e^{i\theta}$) introduced to analyze extended versus localized states in periodic or quasi-periodic chains. === Why "Dimension Reduction"? === The calculation you are performing—reducing a system governed by individual, varying site parameters ($D$ and $E$) down to effective scalar parameters ($d$ and $e$) via determinants—is a technique used to find '''effective medium approximations''' or '''spectral invariants'''. It proves that the global spectral properties (like partition functions or total transmission determinants) of a disordered or inhomogeneous periodic ring can often be mapped back to an equivalent homogeneous system governed by mean scalar values ($d$ and $e$). '''Dimension Reduction and Invariance:''' When you perform spider moves or analyze dual graphs, you often want to prove that the determinant (representing physical quantities like dimer partition functions or spectral curves) remains invariant, or that a complex system with many individual edge/face weights ($D$ and $E$) can be "reduced" to an effective scalar system ($d \cdot I$ and $e \cdot I$). h81w70zy4aia6xfo946tfquszwi7uh7 4675341 4675336 2026-10-09T23:46:18Z DVD206 724793 fractal dimension reduction 4675341 wikitext text/x-wiki For the spiderweb the spinning spectrum could be circulant, rotation invariant: <math>\det \begin{pmatrix} c+a & -as &-c/s \\ -a/s & a+b & -bs \\ -cs & -b/s & b+c \end{pmatrix} = \det \begin{pmatrix} 2d & -ds &-d/s \\ -d/s & 2d & -ds \\ -ds & -d/s & 2d \end{pmatrix}. </math> <math>\det(L_s)=abc(2-s^3-1/s^3)=d^3(2-s^3-1/s^3)</math> if <math>abc=d^3</math>. in the smallest Spiderweb network case... The zeros of <math>\det(L_s)=0</math> are eigenvalues of the graph monodromy together with roots of unity symmetry rotation... Also, <math>L_s = \begin{pmatrix} 1 & -s & 0 \\ 0 & 1 & -s \\ -s & 0 & 1 \end{pmatrix} \begin{pmatrix} c & 0 & 0 \\ 0 & a & 0 \\ 0 & 0 & b \end{pmatrix} \begin{pmatrix} 1 & 0 &-1/s \\ -1/s & 1 & 0 \\ 0 & -1/s & 1 \end{pmatrix}. </math> <math>L_s^*=L_{1/s}</math> and the factorization holds <math>\det(L_s)=d^3(1-s^3)(1-1/s^3)</math>... {{BookCat}}Prompt for Gemini, Meta or Copilot AIs: A dimension reduction problem: Let S=[[0 1 0][0 0 1][1 0 0]] be the shift matrix and D and E two diagonal matrices. Let L_s(D,E)=[[E, -E][-E,E+(I-sS)D(I-S^T/s)]] be the block matrix. Prove that det(L_s(D,E))=det(L_(d*I,e*I)) and if the diagonal entries of D and E are positive then d and e > 0. The answer from Germany: Neither! Matrices structured like $L_s(D,E)$ with a cyclic shift operator $S$ typically arise in '''discrete physics models on periodic chains, lattice models in condensed matter, and localization theory''', rather than the mechanical spinning of a DVD or acoustic resonances. Specifically, this setup is characteristic of: === 1. Tight-Binding Models and Periodic Lattices === * '''Physical context:''' Systems of quantum particles, electrons, or coupled oscillators arranged in a closed 1-dimensional ring or periodic lattice (like a crystal or polymer ring with 3 sites). * '''Role of $S$:''' The matrix $S$ is a discrete shift (cyclic permutation) operator representing nearest-neighbor hopping around the periodic ring. * '''Role of $D$ and $E$:''' These diagonal matrices represent site-dependent potentials, disorder strengths, or coupling parameters at each site of the lattice. === 2. Transfer Matrices and Duality Relations in Physics === * In statistical mechanics and condensed matter physics (such as studying the Anderson localization model for disordered media), block matrices of this form frequently appear when setting up '''transfer matrices'''. * The parameter $s$ often plays the role of a complex spectral parameter or a twisted boundary condition (a Bloch-type phase factor $z = e^{i\theta}$) introduced to analyze extended versus localized states in periodic or quasi-periodic chains. === Why "Dimension Reduction"? === The calculation you are performing—reducing a system governed by individual, varying site parameters ($D$ and $E$) down to effective scalar parameters ($d$ and $e$) via determinants—is a technique used to find '''effective medium approximations''' or '''spectral invariants'''. It proves that the global spectral properties (like partition functions or total transmission determinants) of a disordered or inhomogeneous periodic ring can often be mapped back to an equivalent homogeneous system governed by mean scalar values ($d$ and $e$). '''Dimension Reduction and Invariance:''' When you perform spider moves or analyze dual graphs, you often want to prove that the determinant (representing physical quantities like dimer partition functions or spectral curves) remains invariant, or that a complex system with many individual edge/face weights ($D$ and $E$) can be "reduced" to an effective scalar system ($d \cdot I$ and $e \cdot I$). Whether you look at it as a repeating algebraic seed or a self-similar grid, it's the mathematical backbone of how complex, large-scale systems can be completely understood by looking at their foundational building blocks! o5cochukqtxis8z4189zn4akifeeu5i The Permanent Advantage 0 486056 4675423 4675063 2026-10-10T05:51:38Z ~2026-54481-04 3628033 /* Chapter 1: Queen's Pawn Openings */ 4675423 wikitext text/x-wiki {{qr-scope}} Welcome to '''The Permanent Advantage''', a collection of 15 positional chess opening puzzles from famous games. '''Contents''' How to Use the Book '''Part I: The Puzzles''' [[Chapter 1: Queen's Pawn Openings]] Puzzles 1–5 Chapter 2: King's Pawn Openings Puzzles 6–11 Chapter 3: More Famous Games Puzzles 12–15 '''Part II: The Solutions''' Chapter 1 Solutions Chapter 2 Solutions Chapter 3 Solutions Chapter 1 Queens Pawn opening = Chapter 1: Queen's Pawn Openings = == Positional Puzzles from Queen's Pawn Openings == This chapter contains five positional opening puzzles based on famous games played by Mikhail Botvinnik, Bobby Fischer, Boris Spassky and Magnus Carlsen. The positions come from openings such as the Nimzo-Indian Defence, Grünfeld Defence, Queen's Gambit Declined and Catalan-related systems. These positions focus on positional ideas rather than immediate attacks. Pay attention to pawn breaks, pawn structures, doubled pawns, piece development and the bishop pair. For each puzzle, try to decide what you would play and explain the reason for your choice. The solutions are given separately in the Solutions section. == Puzzle 1 == '''Game:''' Mikhail Botvinnik vs José Raúl Capablanca '''Event:''' AVRO tournament (round 11), Netherlands, November 22, 1938 '''Opening:''' Nimzo-Indian Defence, Botvinnik System l[[Fie:Puzzle 3 board.png|center|500x500px|Puzzle 3 chess position]] '''White to move''' '''What would you play?''' Think about White's development, the centre and the future position of the pieces before choosing your move. == Puzzle 2 == '''Game:''' Donald Byrne vs Bobby Fischer '''Event:''' Rosenwald Memorial, New York, October 17, 1956 '''Opening:''' Grünfeld Defence <nowiki>https://lichess1.org/export/fen.gif?color=black&fen=rnbq1rk1%2Fppppppbp%2F5np1%2F8%2F2PP1B2%2F2N2N2%2FPP2PPPP%2FR2QKB1R+b+KQ+-+0+5</nowiki> '''Black to move''' '''What would you play?''' Look carefully at Black's central possibilities and consider which move fits the positional ideas of the opening. == Puzzle 3 == '''Game:''' Boris Spassky vs Bobby Fischer '''Event:''' World Championship, Game 5, Reykjavik, July 1972 <nowiki>https://lichess1.org/export/fen.gif?color=black&fen=r1bqk2r%2Fpp1p1ppp%2F2n1pn2%2F2p5%2F1bPP4%2F2NBPN2%2FPP3PPP%2FR1BQK2R+b+KQkq+-+0+6</nowiki> '''Opening:''' Nimzo-Indian Defence, Hübner Variation '''Black to move''' '''What would you play?''' Consider the pawn structure and the position of the pieces. Try to find the move that gives Black the most useful positional plan. == Puzzle 4 == '''Game:''' Bobby Fischer vs Boris Spassky '''Event:''' World Championship, Game 6, Reykjavik, July 23, 1972 '''Opening:''' Queen's Gambit Declined <nowiki>https://lichess1.org/export/fen.gif?color=white&fen=rnbq1rk1%2Fp1p1bpp1%2F1p2pn1p%2F3p4%2F2PP3B%2F2N1PN2%2FPP3PPP%2FR2QKB1R+w+KQ+-+0+8</nowiki> '''White to move''' '''What would you play?''' Examine the central pawn structure and think about how White can improve the position before choosing a move. == Puzzle 5 == '''Game:''' Magnus Carlsen vs Ian Nepomniachtchi '''Event:''' World Championship, Game 6, Dubai, December 3, 2021 '''Opening:''' Queen's Pawn Game, Pseudo-Catalan <nowiki>https://lichess1.org/export/fen.gif?color=white&fen=rnbq1rk1%2Fppp1bppp%2F4pn2%2F3p4%2F3P4%2F5NP1%2FPPP1PPBP%2FRNBQ1RK1+w+-+-+0+6</nowiki> '''White to move''' '''What would you play?''' Think about White's development, the centre and the possible pawn breaks. Choose the move you believe gives White the best positional chances. == End of Chapter 1 == '''Chapter 2''' King's Pawn Openings #''The Permanent Advantage''. = Chapter 2: King's Pawn Openings = == Positional Puzzles from King's Pawn Openings == Six positional opening puzzles from the Immortal Game, Morphy's Opera Game, the Marshall Attack, Deep Blue vs Kasparov and the Berlin Defence. Chapter 2 moves to open games after 1.e4, where development and king safety matter even more. Some of these positions show famous opening mistakes, so the move played in the game is not always the right answer. Decide what you would play, then check the solutions at the back of the book. == Puzzle 6 == '''Game:''' Adolf Anderssen vs Lionel Kieseritzky '''Event:''' London, June 21, 1851 (the "Immortal Game") '''Opening:''' King's Gambit Accepted, Bishop's Gambit <nowiki>https://lichess1.org/export/fen.gif?color=black&fen=rnb1kbnr%2Fpppp1ppp%2F8%2F8%2F2B1Pp1q%2F8%2FPPPP2PP%2FRNBQ1KNR+b+kq+-+0+4</nowiki> '''Black to move''' '''What would you play?''' == Puzzle 7 == '''Game:''' Paul Morphy vs Duke of Brunswick and Count Isouard '''Event:''' Paris Opera box, autumn 1858 (exact date uncertain) '''Opening:''' <nowiki>https://lichess1.org/export/fen.gif?color=black&fen=rnbqkbnr%2Fppp2ppp%2F3p4%2F4p3%2F3PP3%2F5N2%2FPPP2PPP%2FRNBQKB1R+b+KQkq+-+0+3</nowiki> '''Black to move''' '''What would you play?''' == Puzzle 8 == '''Game:''' José Raúl Capablanca vs Frank Marshall '''Event:''' Manhattan Chess Club, New York, October 23, 1918 '''Opening:''' Ruy Lopez, Marshall Attack <nowiki>https://lichess1.org/export/fen.gif?color=white&fen=r1bq1rk1%2F2p1bppp%2Fp1n2n2%2F1p1pp3%2F4P3%2F1BP2N2%2FPP1P1PPP%2FRNBQR1K1+w+-+-+0+9</nowiki> '''White to move''' '''What would you play?''' == Puzzle 9 == '''Game:''' Deep Blue vs Garry Kasparov '''Event:''' Rematch, Game 6, New York, May 11, 1997 '''Opening:''' Caro-Kann Defence, Karpov Variation <nowiki>https://lichess1.org/export/fen.gif?color=black&fen=r1bqkb1r%2Fpp1n1ppp%2F2p1pn2%2F6N1%2F3P4%2F3B1N2%2FPPP2PPP%2FR1BQK2R+b+KQkq+-+0+7</nowiki> '''Black to move''' '''What would you play?''' == Puzzle 10 == '''Game:''' Garry Kasparov vs Veselin Topalov '''Event:''' Hoogovens (round 4), Wijk aan Zee, January 20, 1999 '''Opening:''' Pirc Defence, 150 Attack <nowiki>https://lichess1.org/export/fen.gif?color=black&fen=rnbqk2r%2Fppp1ppbp%2F3p1np1%2F8%2F3PP3%2F2N1B3%2FPPPQ1PPP%2FR3KBNR+b+KQkq+-+0+5</nowiki> '''Black to move''' '''What would you play?''' == Puzzle 11 == '''Game:''' Garry Kasparov vs Vladimir Kramnik '''Event:''' Classical World Championship, Game 1, London, October 2000 '''Opening:''' Ruy Lopez, Berlin Defence <nowiki>https://lichess1.org/export/fen.gif?color=black&fen=r1bqkbnr%2Fpppp1ppp%2F2n5%2F1B2p3%2F4P3%2F5N2%2FPPPP1PPP%2FRNBQK2R+b+KQkq+-+0+3</nowiki> '''Black to move''' '''What would you play?''' == End of Chapter 2 == Chapter 3 More famous games = Chapter 3: More Famous Games = == More Positional Puzzles from Famous Games == Four more positional opening puzzles from famous games, including the Evergreen Game, Réti's famous miniature, the Gold Coins Game and Kasparov's Octopus Knight game. Chapter 3 adds four more puzzles from famous games, in the Evans Gambit, Caro-Kann, French and Sicilian. Each game was checked against published game records. As in Chapter 2, the move played in the game is not always the best one, so decide what you would play, then check the solutions at the back of the book. == Puzzle 12 == '''Game:''' Adolf Anderssen vs Jean Dufresne '''Event:''' Berlin (usually assumed), 1852 (the "Evergreen Game", an informal game) <nowiki>https://claude.ai/artifact/MEaNLewtLBPhrjsG5sGvkk</nowiki> '''Opening:''' Evans Gambit '''Black to move''' '''What would you play?''' == Puzzle 13 == '''Game:''' Richard Réti vs Savielly Tartakower '''Event:''' Vienna, 1910 (a casual game) '''Opening:''' Caro-Kann Defence <nowiki>https://claude.ai/artifact/Pf3wvNWPb854uu76XkzWyW</nowiki> '''Black to move''' '''What would you play?''' == Puzzle 14 == '''Game:''' Stepan Levitsky vs Frank Marshall '''Event:''' DSB Congress, Breslau, July 20, 1912 (the "Gold Coins Game") '''Opening:''' French Defence, Marshall Variation <nowiki>https://claude.ai/artifact/L31y9dMoPaj9VeSux2VTvg</nowiki> '''Black to move''' '''What would you play?''' == Puzzle 15 == '''Game:''' Anatoly Karpov vs Garry Kasparov '''Event:''' World Championship, Game 16, Moscow, October 15, 1985 '''Opening:''' Sicilian Defence, Taimanov Variation (Kasparov Gambit) <nowiki>https://claude.ai/artifact/DtcnfPLFSj2SEYCdYrbgcj</nowiki> '''Black to move''' '''What would you play?''' == End of Chapter 3 == = Part II: The Solutions = == How to Use the Solutions == The solutions section gives the answer to each positional puzzle and explains the ideas behind the move. Before reading the solution, try to solve the position yourself. Look at the pieces, pawn structure, development and possible plans. Do not worry if your move is different from the move played in the game—the important part is understanding why one move works better than another. Each solution includes the move, a short continuation and an explanation of the positional idea. The goal is not simply to memorize the move, but to understand the thinking behind it. Some of the puzzles come from famous games where the move played in the actual game was not necessarily the strongest choice. Therefore, compare your own idea with the solution and think about what makes the recommended move useful. == Chapter 1 Solutions == The solutions to Puzzles 1–5 from Queen's Pawn Openings are given here. == Chapter 2 Solutions == The solutions to Puzzles 6–11 from King's Pawn Openings are given here. == Chapter 3 Solutions == The solutions to Puzzles 12–15 from More Famous Games are given here. Chapter 1 Puzzles Soulutions Here are the Answers of chapter one <nowiki>https://webcrafts.mintlify.app/solutions/queens-pawn-openings/puzzle-1</nowiki> Here are the Answers of Chapter 2 <nowiki>https://webcrafts.mintlify.app/solutions/kings/puzzle-6</nowiki> Here are the Answers of Chapter 3 Puzzle1 <nowiki>https://claude.ai/artifact/MEaNLewtLBPhrjsG5sGvkk</nowiki> Puzzle2 <nowiki>https://claude.ai/artifact/Pf3wvNWPb854uu76XkzWyW</nowiki> Puzzle 3 <nowiki>https://claude.ai/artifact/L31y9dMoPaj9VeSux2VTvg</nowiki> Puzzle 4 <nowiki>https://claude.ai/artifact/DtcnfPLFSj2SEYCdYrbgcj</nowiki> 5fipt4gw50waifyxyfpzq5m004ewr5p 4675427 4675423 2026-10-10T07:49:50Z EggRoll97 3178669 Making [[WB:Requests for deletion|deletion request]] 4675427 wikitext text/x-wiki <noinclude>{{Rfd|example=false}}</noinclude> {{qr-scope}} Welcome to '''The Permanent Advantage''', a collection of 15 positional chess opening puzzles from famous games. '''Contents''' How to Use the Book '''Part I: The Puzzles''' [[Chapter 1: Queen's Pawn Openings]] Puzzles 1–5 Chapter 2: King's Pawn Openings Puzzles 6–11 Chapter 3: More Famous Games Puzzles 12–15 '''Part II: The Solutions''' Chapter 1 Solutions Chapter 2 Solutions Chapter 3 Solutions Chapter 1 Queens Pawn opening = Chapter 1: Queen's Pawn Openings = == Positional Puzzles from Queen's Pawn Openings == This chapter contains five positional opening puzzles based on famous games played by Mikhail Botvinnik, Bobby Fischer, Boris Spassky and Magnus Carlsen. The positions come from openings such as the Nimzo-Indian Defence, Grünfeld Defence, Queen's Gambit Declined and Catalan-related systems. These positions focus on positional ideas rather than immediate attacks. Pay attention to pawn breaks, pawn structures, doubled pawns, piece development and the bishop pair. For each puzzle, try to decide what you would play and explain the reason for your choice. The solutions are given separately in the Solutions section. == Puzzle 1 == '''Game:''' Mikhail Botvinnik vs José Raúl Capablanca '''Event:''' AVRO tournament (round 11), Netherlands, November 22, 1938 '''Opening:''' Nimzo-Indian Defence, Botvinnik System l[[Fie:Puzzle 3 board.png|center|500x500px|Puzzle 3 chess position]] '''White to move''' '''What would you play?''' Think about White's development, the centre and the future position of the pieces before choosing your move. == Puzzle 2 == '''Game:''' Donald Byrne vs Bobby Fischer '''Event:''' Rosenwald Memorial, New York, October 17, 1956 '''Opening:''' Grünfeld Defence <nowiki>https://lichess1.org/export/fen.gif?color=black&fen=rnbq1rk1%2Fppppppbp%2F5np1%2F8%2F2PP1B2%2F2N2N2%2FPP2PPPP%2FR2QKB1R+b+KQ+-+0+5</nowiki> '''Black to move''' '''What would you play?''' Look carefully at Black's central possibilities and consider which move fits the positional ideas of the opening. == Puzzle 3 == '''Game:''' Boris Spassky vs Bobby Fischer '''Event:''' World Championship, Game 5, Reykjavik, July 1972 <nowiki>https://lichess1.org/export/fen.gif?color=black&fen=r1bqk2r%2Fpp1p1ppp%2F2n1pn2%2F2p5%2F1bPP4%2F2NBPN2%2FPP3PPP%2FR1BQK2R+b+KQkq+-+0+6</nowiki> '''Opening:''' Nimzo-Indian Defence, Hübner Variation '''Black to move''' '''What would you play?''' Consider the pawn structure and the position of the pieces. Try to find the move that gives Black the most useful positional plan. == Puzzle 4 == '''Game:''' Bobby Fischer vs Boris Spassky '''Event:''' World Championship, Game 6, Reykjavik, July 23, 1972 '''Opening:''' Queen's Gambit Declined <nowiki>https://lichess1.org/export/fen.gif?color=white&fen=rnbq1rk1%2Fp1p1bpp1%2F1p2pn1p%2F3p4%2F2PP3B%2F2N1PN2%2FPP3PPP%2FR2QKB1R+w+KQ+-+0+8</nowiki> '''White to move''' '''What would you play?''' Examine the central pawn structure and think about how White can improve the position before choosing a move. == Puzzle 5 == '''Game:''' Magnus Carlsen vs Ian Nepomniachtchi '''Event:''' World Championship, Game 6, Dubai, December 3, 2021 '''Opening:''' Queen's Pawn Game, Pseudo-Catalan <nowiki>https://lichess1.org/export/fen.gif?color=white&fen=rnbq1rk1%2Fppp1bppp%2F4pn2%2F3p4%2F3P4%2F5NP1%2FPPP1PPBP%2FRNBQ1RK1+w+-+-+0+6</nowiki> '''White to move''' '''What would you play?''' Think about White's development, the centre and the possible pawn breaks. Choose the move you believe gives White the best positional chances. == End of Chapter 1 == '''Chapter 2''' King's Pawn Openings #''The Permanent Advantage''. = Chapter 2: King's Pawn Openings = == Positional Puzzles from King's Pawn Openings == Six positional opening puzzles from the Immortal Game, Morphy's Opera Game, the Marshall Attack, Deep Blue vs Kasparov and the Berlin Defence. Chapter 2 moves to open games after 1.e4, where development and king safety matter even more. Some of these positions show famous opening mistakes, so the move played in the game is not always the right answer. Decide what you would play, then check the solutions at the back of the book. == Puzzle 6 == '''Game:''' Adolf Anderssen vs Lionel Kieseritzky '''Event:''' London, June 21, 1851 (the "Immortal Game") '''Opening:''' King's Gambit Accepted, Bishop's Gambit <nowiki>https://lichess1.org/export/fen.gif?color=black&fen=rnb1kbnr%2Fpppp1ppp%2F8%2F8%2F2B1Pp1q%2F8%2FPPPP2PP%2FRNBQ1KNR+b+kq+-+0+4</nowiki> '''Black to move''' '''What would you play?''' == Puzzle 7 == '''Game:''' Paul Morphy vs Duke of Brunswick and Count Isouard '''Event:''' Paris Opera box, autumn 1858 (exact date uncertain) '''Opening:''' <nowiki>https://lichess1.org/export/fen.gif?color=black&fen=rnbqkbnr%2Fppp2ppp%2F3p4%2F4p3%2F3PP3%2F5N2%2FPPP2PPP%2FRNBQKB1R+b+KQkq+-+0+3</nowiki> '''Black to move''' '''What would you play?''' == Puzzle 8 == '''Game:''' José Raúl Capablanca vs Frank Marshall '''Event:''' Manhattan Chess Club, New York, October 23, 1918 '''Opening:''' Ruy Lopez, Marshall Attack <nowiki>https://lichess1.org/export/fen.gif?color=white&fen=r1bq1rk1%2F2p1bppp%2Fp1n2n2%2F1p1pp3%2F4P3%2F1BP2N2%2FPP1P1PPP%2FRNBQR1K1+w+-+-+0+9</nowiki> '''White to move''' '''What would you play?''' == Puzzle 9 == '''Game:''' Deep Blue vs Garry Kasparov '''Event:''' Rematch, Game 6, New York, May 11, 1997 '''Opening:''' Caro-Kann Defence, Karpov Variation <nowiki>https://lichess1.org/export/fen.gif?color=black&fen=r1bqkb1r%2Fpp1n1ppp%2F2p1pn2%2F6N1%2F3P4%2F3B1N2%2FPPP2PPP%2FR1BQK2R+b+KQkq+-+0+7</nowiki> '''Black to move''' '''What would you play?''' == Puzzle 10 == '''Game:''' Garry Kasparov vs Veselin Topalov '''Event:''' Hoogovens (round 4), Wijk aan Zee, January 20, 1999 '''Opening:''' Pirc Defence, 150 Attack <nowiki>https://lichess1.org/export/fen.gif?color=black&fen=rnbqk2r%2Fppp1ppbp%2F3p1np1%2F8%2F3PP3%2F2N1B3%2FPPPQ1PPP%2FR3KBNR+b+KQkq+-+0+5</nowiki> '''Black to move''' '''What would you play?''' == Puzzle 11 == '''Game:''' Garry Kasparov vs Vladimir Kramnik '''Event:''' Classical World Championship, Game 1, London, October 2000 '''Opening:''' Ruy Lopez, Berlin Defence <nowiki>https://lichess1.org/export/fen.gif?color=black&fen=r1bqkbnr%2Fpppp1ppp%2F2n5%2F1B2p3%2F4P3%2F5N2%2FPPPP1PPP%2FRNBQK2R+b+KQkq+-+0+3</nowiki> '''Black to move''' '''What would you play?''' == End of Chapter 2 == Chapter 3 More famous games = Chapter 3: More Famous Games = == More Positional Puzzles from Famous Games == Four more positional opening puzzles from famous games, including the Evergreen Game, Réti's famous miniature, the Gold Coins Game and Kasparov's Octopus Knight game. Chapter 3 adds four more puzzles from famous games, in the Evans Gambit, Caro-Kann, French and Sicilian. Each game was checked against published game records. As in Chapter 2, the move played in the game is not always the best one, so decide what you would play, then check the solutions at the back of the book. == Puzzle 12 == '''Game:''' Adolf Anderssen vs Jean Dufresne '''Event:''' Berlin (usually assumed), 1852 (the "Evergreen Game", an informal game) <nowiki>https://claude.ai/artifact/MEaNLewtLBPhrjsG5sGvkk</nowiki> '''Opening:''' Evans Gambit '''Black to move''' '''What would you play?''' == Puzzle 13 == '''Game:''' Richard Réti vs Savielly Tartakower '''Event:''' Vienna, 1910 (a casual game) '''Opening:''' Caro-Kann Defence <nowiki>https://claude.ai/artifact/Pf3wvNWPb854uu76XkzWyW</nowiki> '''Black to move''' '''What would you play?''' == Puzzle 14 == '''Game:''' Stepan Levitsky vs Frank Marshall '''Event:''' DSB Congress, Breslau, July 20, 1912 (the "Gold Coins Game") '''Opening:''' French Defence, Marshall Variation <nowiki>https://claude.ai/artifact/L31y9dMoPaj9VeSux2VTvg</nowiki> '''Black to move''' '''What would you play?''' == Puzzle 15 == '''Game:''' Anatoly Karpov vs Garry Kasparov '''Event:''' World Championship, Game 16, Moscow, October 15, 1985 '''Opening:''' Sicilian Defence, Taimanov Variation (Kasparov Gambit) <nowiki>https://claude.ai/artifact/DtcnfPLFSj2SEYCdYrbgcj</nowiki> '''Black to move''' '''What would you play?''' == End of Chapter 3 == = Part II: The Solutions = == How to Use the Solutions == The solutions section gives the answer to each positional puzzle and explains the ideas behind the move. Before reading the solution, try to solve the position yourself. Look at the pieces, pawn structure, development and possible plans. Do not worry if your move is different from the move played in the game—the important part is understanding why one move works better than another. Each solution includes the move, a short continuation and an explanation of the positional idea. The goal is not simply to memorize the move, but to understand the thinking behind it. Some of the puzzles come from famous games where the move played in the actual game was not necessarily the strongest choice. Therefore, compare your own idea with the solution and think about what makes the recommended move useful. == Chapter 1 Solutions == The solutions to Puzzles 1–5 from Queen's Pawn Openings are given here. == Chapter 2 Solutions == The solutions to Puzzles 6–11 from King's Pawn Openings are given here. == Chapter 3 Solutions == The solutions to Puzzles 12–15 from More Famous Games are given here. Chapter 1 Puzzles Soulutions Here are the Answers of chapter one <nowiki>https://webcrafts.mintlify.app/solutions/queens-pawn-openings/puzzle-1</nowiki> Here are the Answers of Chapter 2 <nowiki>https://webcrafts.mintlify.app/solutions/kings/puzzle-6</nowiki> Here are the Answers of Chapter 3 Puzzle1 <nowiki>https://claude.ai/artifact/MEaNLewtLBPhrjsG5sGvkk</nowiki> Puzzle2 <nowiki>https://claude.ai/artifact/Pf3wvNWPb854uu76XkzWyW</nowiki> Puzzle 3 <nowiki>https://claude.ai/artifact/L31y9dMoPaj9VeSux2VTvg</nowiki> Puzzle 4 <nowiki>https://claude.ai/artifact/DtcnfPLFSj2SEYCdYrbgcj</nowiki> kesah4hn27dbkm0p27r43e5vggsgp0e 4675444 4675427 2026-10-10T10:26:30Z Magnuscarlsen45r 3627727 I have added more Puzzles 4675444 wikitext text/x-wiki <noinclude>{{Rfd|example=false}}</noinclude> {{qr-scope}} The permanent Advantage The permanent Advantage is a Book of Positional Puzzles Welcome to '''The Permanent Advantage''', a collection of endless number of positional chess opening puzzles from famous games. '''Contents''' How to Use the Book '''Part I: The Puzzles''' [[Chapter 1: Queen's Pawn Openings]] Puzzles 1–5 Chapter 2: King's Pawn Openings Puzzles 6–11 Chapter 3: More Famous Games Puzzles 12–15 '''Part II: The Solutions''' Chapter 1 Solutions Chapter 2 Solutions Chapter 3 Solutions Chapter 1 Queens Pawn opening = Chapter 1: Queen's Pawn Openings = == Positional Puzzles from Queen's Pawn Openings == This chapter contains five positional opening puzzles based on famous games played by Mikhail Botvinnik, Bobby Fischer, Boris Spassky and Magnus Carlsen. The positions come from openings such as the Nimzo-Indian Defence, Grünfeld Defence, Queen's Gambit Declined and Catalan-related systems. These positions focus on positional ideas rather than immediate attacks. Pay attention to pawn breaks, pawn structures, doubled pawns, piece development and the bishop pair. For each puzzle, try to decide what you would play and explain the reason for your choice. The solutions are given separately in the Solutions section. == Puzzle 1 == '''Game:''' Mikhail Botvinnik vs José Raúl Capablanca '''Event:''' AVRO tournament (round 11), Netherlands, November 22, 1938 '''Opening:''' Nimzo-Indian Defence, Botvinnik System l[[Fie:Puzzle 3 board.png|center|500x500px|Puzzle 3 chess position]] '''White to move''' '''What would you play?''' Think about White's development, the centre and the future position of the pieces before choosing your move. == Puzzle 2 == '''Game:''' Donald Byrne vs Bobby Fischer '''Event:''' Rosenwald Memorial, New York, October 17, 1956 '''Opening:''' Grünfeld Defence <nowiki>https://lichess1.org/export/fen.gif?color=black&fen=rnbq1rk1%2Fppppppbp%2F5np1%2F8%2F2PP1B2%2F2N2N2%2FPP2PPPP%2FR2QKB1R+b+KQ+-+0+5</nowiki> '''Black to move''' '''What would you play?''' Look carefully at Black's central possibilities and consider which move fits the positional ideas of the opening. == Puzzle 3 == '''Game:''' Boris Spassky vs Bobby Fischer '''Event:''' World Championship, Game 5, Reykjavik, July 1972 <nowiki>https://lichess1.org/export/fen.gif?color=black&fen=r1bqk2r%2Fpp1p1ppp%2F2n1pn2%2F2p5%2F1bPP4%2F2NBPN2%2FPP3PPP%2FR1BQK2R+b+KQkq+-+0+6</nowiki> '''Opening:''' Nimzo-Indian Defence, Hübner Variation '''Black to move''' '''What would you play?''' Consider the pawn structure and the position of the pieces. Try to find the move that gives Black the most useful positional plan. == Puzzle 4 == '''Game:''' Bobby Fischer vs Boris Spassky '''Event:''' World Championship, Game 6, Reykjavik, July 23, 1972 '''Opening:''' Queen's Gambit Declined <nowiki>https://lichess1.org/export/fen.gif?color=white&fen=rnbq1rk1%2Fp1p1bpp1%2F1p2pn1p%2F3p4%2F2PP3B%2F2N1PN2%2FPP3PPP%2FR2QKB1R+w+KQ+-+0+8</nowiki> '''White to move''' '''What would you play?''' Examine the central pawn structure and think about how White can improve the position before choosing a move. == Puzzle 5 == '''Game:''' Magnus Carlsen vs Ian Nepomniachtchi '''Event:''' World Championship, Game 6, Dubai, December 3, 2021 '''Opening:''' Queen's Pawn Game, Pseudo-Catalan <nowiki>https://lichess1.org/export/fen.gif?color=white&fen=rnbq1rk1%2Fppp1bppp%2F4pn2%2F3p4%2F3P4%2F5NP1%2FPPP1PPBP%2FRNBQ1RK1+w+-+-+0+6</nowiki> '''White to move''' '''What would you play?''' Think about White's development, the centre and the possible pawn breaks. Choose the move you believe gives White the best positional chances. == End of Chapter 1 == '''Chapter 2''' King's Pawn Openings #''The Permanent Advantage''. = Chapter 2: King's Pawn Openings = == Positional Puzzles from King's Pawn Openings == Six positional opening puzzles from the Immortal Game, Morphy's Opera Game, the Marshall Attack, Deep Blue vs Kasparov and the Berlin Defence. Chapter 2 moves to open games after 1.e4, where development and king safety matter even more. Some of these positions show famous opening mistakes, so the move played in the game is not always the right answer. Decide what you would play, then check the solutions at the back of the book. == Puzzle 6 == '''Game:''' Adolf Anderssen vs Lionel Kieseritzky '''Event:''' London, June 21, 1851 (the "Immortal Game") '''Opening:''' King's Gambit Accepted, Bishop's Gambit <nowiki>https://lichess1.org/export/fen.gif?color=black&fen=rnb1kbnr%2Fpppp1ppp%2F8%2F8%2F2B1Pp1q%2F8%2FPPPP2PP%2FRNBQ1KNR+b+kq+-+0+4</nowiki> '''Black to move''' '''What would you play?''' == Puzzle 7 == '''Game:''' Paul Morphy vs Duke of Brunswick and Count Isouard '''Event:''' Paris Opera box, autumn 1858 (exact date uncertain) '''Opening:''' <nowiki>https://lichess1.org/export/fen.gif?color=black&fen=rnbqkbnr%2Fppp2ppp%2F3p4%2F4p3%2F3PP3%2F5N2%2FPPP2PPP%2FRNBQKB1R+b+KQkq+-+0+3</nowiki> '''Black to move''' '''What would you play?''' == Puzzle 8 == '''Game:''' José Raúl Capablanca vs Frank Marshall '''Event:''' Manhattan Chess Club, New York, October 23, 1918 '''Opening:''' Ruy Lopez, Marshall Attack <nowiki>https://lichess1.org/export/fen.gif?color=white&fen=r1bq1rk1%2F2p1bppp%2Fp1n2n2%2F1p1pp3%2F4P3%2F1BP2N2%2FPP1P1PPP%2FRNBQR1K1+w+-+-+0+9</nowiki> '''White to move''' '''What would you play?''' == Puzzle 9 == '''Game:''' Deep Blue vs Garry Kasparov '''Event:''' Rematch, Game 6, New York, May 11, 1997 '''Opening:''' Caro-Kann Defence, Karpov Variation <nowiki>https://lichess1.org/export/fen.gif?color=black&fen=r1bqkb1r%2Fpp1n1ppp%2F2p1pn2%2F6N1%2F3P4%2F3B1N2%2FPPP2PPP%2FR1BQK2R+b+KQkq+-+0+7</nowiki> '''Black to move''' '''What would you play?''' == Puzzle 10 == '''Game:''' Garry Kasparov vs Veselin Topalov '''Event:''' Hoogovens (round 4), Wijk aan Zee, January 20, 1999 '''Opening:''' Pirc Defence, 150 Attack <nowiki>https://lichess1.org/export/fen.gif?color=black&fen=rnbqk2r%2Fppp1ppbp%2F3p1np1%2F8%2F3PP3%2F2N1B3%2FPPPQ1PPP%2FR3KBNR+b+KQkq+-+0+5</nowiki> '''Black to move''' '''What would you play?''' == Puzzle 11 == '''Game:''' Garry Kasparov vs Vladimir Kramnik '''Event:''' Classical World Championship, Game 1, London, October 2000 '''Opening:''' Ruy Lopez, Berlin Defence <nowiki>https://lichess1.org/export/fen.gif?color=black&fen=r1bqkbnr%2Fpppp1ppp%2F2n5%2F1B2p3%2F4P3%2F5N2%2FPPPP1PPP%2FRNBQK2R+b+KQkq+-+0+3</nowiki> '''Black to move''' '''What would you play?''' == End of Chapter 2 == Chapter 3 More famous games = Chapter 3: More Famous Games = == More Positional Puzzles from Famous Games == Four more positional opening puzzles from famous games, including the Evergreen Game, Réti's famous miniature, the Gold Coins Game and Kasparov's Octopus Knight game. Chapter 3 adds four more puzzles from famous games, in the Evans Gambit, Caro-Kann, French and Sicilian. Each game was checked against published game records. As in Chapter 2, the move played in the game is not always the best one, so decide what you would play, then check the solutions at the back of the book. == Puzzle 12 == '''Game:''' Adolf Anderssen vs Jean Dufresne '''Event:''' Berlin (usually assumed), 1852 (the "Evergreen Game", an informal game) <nowiki>https://claude.ai/artifact/MEaNLewtLBPhrjsG5sGvkk</nowiki> '''Opening:''' Evans Gambit '''Black to move''' '''What would you play?''' == Puzzle 13 == '''Game:''' Richard Réti vs Savielly Tartakower '''Event:''' Vienna, 1910 (a casual game) '''Opening:''' Caro-Kann Defence <nowiki>https://claude.ai/artifact/Pf3wvNWPb854uu76XkzWyW</nowiki> '''Black to move''' '''What would you play?''' == Puzzle 14 == '''Game:''' Stepan Levitsky vs Frank Marshall '''Event:''' DSB Congress, Breslau, July 20, 1912 (the "Gold Coins Game") '''Opening:''' French Defence, Marshall Variation <nowiki>https://claude.ai/artifact/L31y9dMoPaj9VeSux2VTvg</nowiki> '''Black to move''' '''What would you play?''' == Puzzle 15 == '''Game:''' Anatoly Karpov vs Garry Kasparov '''Event:''' World Championship, Game 16, Moscow, October 15, 1985 '''Opening:''' Sicilian Defence, Taimanov Variation (Kasparov Gambit) <nowiki>https://claude.ai/artifact/DtcnfPLFSj2SEYCdYrbgcj</nowiki> '''Black to move''' '''What would you play?''' == End of Chapter 3 == = Permanent Advantage/Chapter 4: More Queen's Pawn Openings = == More Positional Puzzles from Queen's Pawn Openings == Three more positional opening puzzles from the Dutch Defence, the Tarrasch Defence and the Modern Benoni. Chapter 4 adds three more Queen's Pawn puzzles from famous games. Each game was checked against published game records. As before, the move played in the game is not always the best one, so decide what you would play, then check the solutions at the back of the book. == Puzzle 16 == '''Game:''' Edward Lasker vs George Alan Thomas '''Event:''' London, 1912 (a casual game at the City of London Chess Club) '''Opening:''' Dutch Defence '''Black to move. What would you play?''' == Puzzle 17 == '''Game:''' Gersz Rotlewi vs Akiba Rubinstein '''Event:''' Lodz, Poland, December 26, 1907 '''Opening:''' Tarrasch Defence, Symmetrical Variation '''White to move. What would you play?''' == Puzzle 18 == '''Game:''' Boris Spassky vs Bobby Fischer '''Event:''' World Championship, Game 3, Reykjavik, July 16, 1972 '''Opening:''' Modern Benoni, Knight's Tour Variation '''Black to move. What would you play?''' ---- == Chapter 4 Solutions == === Puzzle 16: Lasker vs Thomas === '''Event:''' London, 1912 (a casual game at the City of London Chess Club) '''Opening:''' Dutch Defence '''Result:''' 1–0 (18 moves) '''Played in the game:''' 10...Qe7? — Mistake (it allows a famous combination) '''Game line:''' 10...Qe7 11.Qxh7+ Kxh7 12.Nxf6+ Kh6 13.Neg4+ Kg5 14.h4+ Kf4 15.g3+ Kf3 16.Be2+ Kg2 17.Rh2+ Kg1 18.Kd2# Black ignores the danger on the kingside. After 10.Qh5 the knight on e5 and the bishop on d3 both point at the king, and the pawn on h7 is guarded only by the king. Lasker found 11.Qxh7+!, a queen sacrifice that drags the king all the way across the board to a mate on the first rank. Commentators point to 10...Bxe5 as an alternative that removes the strong knight. The story behind the game exists in several versions, and the game has been called one of the most confusing in chess literature. === Puzzle 17: Rotlewi vs Rubinstein === '''Event:''' Lodz, Poland, December 26, 1907 '''Opening:''' Tarrasch Defence, Symmetrical Variation '''Result:''' 0–1 (25 moves) '''Played in the game:''' 10.Qd2? — Mistake (it loses time) '''Game line:''' 10.Qd2 Qe7 11.Bd3 dxc4 12.Bxc4 b5 13.Bd3 Rd8 14.Qe2 Bb7 15.O-O Ne5 White spends a move on the queen, which will soon have to move again. Tartakower called 10.Qc2 the most useful move. Rubinstein answered 10...Qe7!, offering a pawn: 11.cxd5 exd5 12.Nxd5? Nxd5 13.Qxd5 Rd8 gives Black a strong attack. Rotlewi declined with 11.Bd3, Black took on c4, and his pieces took over the board. The game ended with a queen and rook sacrifice that forced mate. Kasparov called it Rubinstein's truly immortal game. === Puzzle 18: Spassky vs Fischer === '''Event:''' World Championship, Game 3, Reykjavik, July 16, 1972 '''Opening:''' Modern Benoni, Knight's Tour Variation '''Result:''' 0–1 '''Played in the game:''' 11...Nh5!? — Good move (a surprise weapon) '''Game line:''' 11...Nh5 12.Bxh5 gxh5 Fischer's surprise offers White the bishop pair in return for doubled pawns on the h-file, an open g-file and control of the e5 square. It was a stunning novelty that Fischer reportedly took from Dragoljub Velimirovic, and it threw Spassky off balance. It is a speculative idea and annotators mark it with a question mark as well as an exclamation mark, but it is playable, and Spassky did not react in the best way. This was Fischer's first ever win against Spassky and a turning point of the match. = Permanent Advantage/Chapter 5: Italian Game and Bird's Opening = = More Positional Puzzles from the Italian Game and Bird's Opening = Two more positional opening puzzles, from the Italian Game and Bird's Opening. Chapter 5 adds two more puzzles from famous games, both won by brilliant attacks that began with a mistake. Each game was checked against published game records. Decide what you would play, then check the solutions at the back of the book. == Puzzle 19 == '''Game:''' Wilhelm Steinitz vs Curt von Bardeleben '''Event:''' Hastings (round 10), August 17, 1895 '''Opening:''' Giuoco Piano '''Black to move. What would you play?''' ''[Insert the chessboard diagram from Chapter 5, page 29 of the PDF.]'' == Puzzle 20 == '''Game:''' Emanuel Lasker vs Johann Bauer '''Event:''' Amsterdam (round 1), 1889 '''Opening:''' Bird's Opening '''Black to move. What would you play?''' ''[Insert the chessboard diagram from Chapter 5, page 30 of the PDF.]'' n94l4uipmt8uogv4egiw3p28jqz22g4 User:TechVindicator/Arithmetic/Scientific Notation 2 486188 4675292 4675040 2026-10-09T13:39:09Z TechVindicator 3626296 /* Exercises */ 4675292 wikitext text/x-wiki '''Scientific notation''', '''standard index form''' or '''standard form''' in British English, is a way of expressing numbers that makes large numbers or small numbers easier to write. This notation is used by mathematicians, scientists, and engineers. {{example|scientific notation|An example of a number written in scientific notation is <math>5 \times 10^3</math>. Written out in decimal notation, the number would be 5000.}} ==Objectives== ==Converting Numbers to Scientific Notation== To convert a number to scientific notation from decimal notation, we must have a number. For this example, the ordinary number will be 1670000000. The formula to write a number is standard form is <math>x \times 10^n</math>, where <math>x</math> is the value between the numbers of 1 and 10, and <math>n</math> is the power of ten. <br> For <math>1670000000</math>, to convert such number to standard form, we need to find the value of <math>x</math> between 1-10. In this case, the number is <math>1.67</math>. <br> So, substituting the value into the formula, the value is now <math>1.67 \times 10^n</math>. ===Finding the Value of <math>n</math>=== To work out the value of <math>n</math>, the value can be counted with the amount of digits after the decimal point (in this example), and the number of digits after the decimal point. For this example, 1.67 has two digits after the decimal point, totalling <math>167</math>. <br> After 167, there are 7 more digits of zero. <br> Therefore, we can do <math> 2+7</math>, giving us <math>9</math>. <br> Giving us a final answer of <math> 1.67 \times 10^9</math>. ===Exercises=== Complete these exercises to develop knowledge on this subject. <quiz display=simple> {What is <math>3145000000</math> written in standard form? |type="()"} + <math> 3.145\times10^9</math> - <math> 3.145\times10^1^1</math> - <math> 31.45\times10^8</math> - <math> 3.145\times10^1</math> </quiz> ==Converting Numbers from Scientific Notation== ===Large Numbers=== ===Small Numbers=== ==Mixed Topic Exercises== ==References== sel5wsya6uhwrij8f9pqwncpuukdpdg 4675373 4675292 2026-10-10T00:42:52Z TechVindicator 3626296 /* Exercises */ 4675373 wikitext text/x-wiki '''Scientific notation''', '''standard index form''' or '''standard form''' in British English, is a way of expressing numbers that makes large numbers or small numbers easier to write. This notation is used by mathematicians, scientists, and engineers. {{example|scientific notation|An example of a number written in scientific notation is <math>5 \times 10^3</math>. Written out in decimal notation, the number would be 5000.}} ==Objectives== ==Converting Numbers to Scientific Notation== To convert a number to scientific notation from decimal notation, we must have a number. For this example, the ordinary number will be 1670000000. The formula to write a number is standard form is <math>x \times 10^n</math>, where <math>x</math> is the value between the numbers of 1 and 10, and <math>n</math> is the power of ten. <br> For <math>1670000000</math>, to convert such number to standard form, we need to find the value of <math>x</math> between 1-10. In this case, the number is <math>1.67</math>. <br> So, substituting the value into the formula, the value is now <math>1.67 \times 10^n</math>. ===Finding the Value of <math>n</math>=== To work out the value of <math>n</math>, the value can be counted with the amount of digits after the decimal point (in this example), and the number of digits after the decimal point. For this example, 1.67 has two digits after the decimal point, totalling <math>167</math>. <br> After 167, there are 7 more digits of zero. <br> Therefore, we can do <math> 2+7</math>, giving us <math>9</math>. <br> Giving us a final answer of <math> 1.67 \times 10^9</math>. ===Exercises=== Complete these two exercises to check your learning on this subject. <quiz display=simple> {What is <math>3145000000</math> written in standard form? |type="()"} + <math> 3.145\times10^9</math> - <math> 3.145\times10^1^1</math> - <math> 31.45\times10^8</math> - <math> 3.145\times10^1</math> {What is <math>317000000</math> written in standard form? |type="()"} <math> 3.17\times10^13</math> - <math> 3.17\times10^1^1</math> + <math> 3.17\times10^8</math> - <math> 3.145\times10^21</math> </quiz> ==Converting Numbers from Scientific Notation== ===Large Numbers=== ===Small Numbers=== ==Mixed Topic Exercises== ==References== dtrm2u2ofpekfzaeqz4upd4y84idt3s 4675376 4675373 2026-10-10T00:44:38Z TechVindicator 3626296 4675376 wikitext text/x-wiki '''Scientific notation''', '''standard index form''' or '''standard form''' in British English, is a way of expressing numbers that makes large numbers or small numbers easier to write. This notation is used by mathematicians, scientists, and engineers. {{example|scientific notation|An example of a number written in scientific notation is <math>5 \times 10^3</math>. Written out in decimal notation, the number would be 5000.}} ==Objectives== ==Converting Numbers to Scientific Notation== To convert a number to scientific notation from decimal notation, we must have a number. For this example, the ordinary number will be 1670000000. The formula to write a number is standard form is <math>x \times 10^n</math>, where <math>x</math> is the value between the numbers of 1 and 10, and <math>n</math> is the power of ten. <br> For <math>1670000000</math>, to convert such number to standard form, we need to find the value of <math>x</math> between 1-10. In this case, the number is <math>1.67</math>. <br> So, substituting the value into the formula, the value is now <math>1.67 \times 10^n</math>. ===Finding the Value of <math>n</math>=== To work out the value of <math>n</math>, the value can be counted with the amount of digits after the decimal point (in this example), and the number of digits after the decimal point. For this example, 1.67 has two digits after the decimal point, totalling <math>167</math>. <br> After 167, there are 7 more digits of zero. <br> Therefore, we can do <math> 2+7</math>, giving us <math>9</math>. <br> Giving us a final answer of <math> 1.67 \times 10^9</math>. ===Exercises=== Complete these two exercises to check your learning on this subject. <quiz display=simple> {What is <math>3145000000</math> written in standard form? |type="()"} + <math> 3.145\times10^9</math> - <math> 3.145\times10^1^1</math> - <math> 31.45\times10^8</math> - <math> 3.145\times10^1</math> {What is <math>317000000</math> written in standard form? |type="()"} <math> 3.17\times10^13</math> - <math> 3.17\times10^1^1</math> + <math> 3.17\times10^8</math> - <math> 3.145\times10^21</math> </quiz> ==Converting Numbers from Scientific Notation== ===Large Numbers=== ===Small Numbers=== ==Mixed Topic Exercises== ==Further Reading== There are many links online to learn more about scientific notation, as well as complete exercises. [https://www.bbc.co.uk/bitesize/articles/zc7c239#zprwfdm Guide about standard form (scientific notation)] [https://quizlet.com/1877428/scientific-notation-flash-cards/ Flashcards on Scientific notation on Quizlet] ==References== 6unxv7q82fhshedfubwnsrnvn581a1r 4675377 4675376 2026-10-10T00:44:56Z TechVindicator 3626296 /* Further Reading */ formatting 4675377 wikitext text/x-wiki '''Scientific notation''', '''standard index form''' or '''standard form''' in British English, is a way of expressing numbers that makes large numbers or small numbers easier to write. This notation is used by mathematicians, scientists, and engineers. {{example|scientific notation|An example of a number written in scientific notation is <math>5 \times 10^3</math>. Written out in decimal notation, the number would be 5000.}} ==Objectives== ==Converting Numbers to Scientific Notation== To convert a number to scientific notation from decimal notation, we must have a number. For this example, the ordinary number will be 1670000000. The formula to write a number is standard form is <math>x \times 10^n</math>, where <math>x</math> is the value between the numbers of 1 and 10, and <math>n</math> is the power of ten. <br> For <math>1670000000</math>, to convert such number to standard form, we need to find the value of <math>x</math> between 1-10. In this case, the number is <math>1.67</math>. <br> So, substituting the value into the formula, the value is now <math>1.67 \times 10^n</math>. ===Finding the Value of <math>n</math>=== To work out the value of <math>n</math>, the value can be counted with the amount of digits after the decimal point (in this example), and the number of digits after the decimal point. For this example, 1.67 has two digits after the decimal point, totalling <math>167</math>. <br> After 167, there are 7 more digits of zero. <br> Therefore, we can do <math> 2+7</math>, giving us <math>9</math>. <br> Giving us a final answer of <math> 1.67 \times 10^9</math>. ===Exercises=== Complete these two exercises to check your learning on this subject. <quiz display=simple> {What is <math>3145000000</math> written in standard form? |type="()"} + <math> 3.145\times10^9</math> - <math> 3.145\times10^1^1</math> - <math> 31.45\times10^8</math> - <math> 3.145\times10^1</math> {What is <math>317000000</math> written in standard form? |type="()"} <math> 3.17\times10^13</math> - <math> 3.17\times10^1^1</math> + <math> 3.17\times10^8</math> - <math> 3.145\times10^21</math> </quiz> ==Converting Numbers from Scientific Notation== ===Large Numbers=== ===Small Numbers=== ==Mixed Topic Exercises== ==Further Reading== There are many links online to learn more about scientific notation, as well as complete exercises. <br> *[https://www.bbc.co.uk/bitesize/articles/zc7c239#zprwfdm Guide about standard form (scientific notation)] *[https://quizlet.com/1877428/scientific-notation-flash-cards/ Flashcards on Scientific notation on Quizlet] ==References== jr139wi6mg8ty62tpcqhwqvwp4hwm54 4675382 4675377 2026-10-10T00:50:09Z TechVindicator 3626296 /* Exercises */ 4675382 wikitext text/x-wiki '''Scientific notation''', '''standard index form''' or '''standard form''' in British English, is a way of expressing numbers that makes large numbers or small numbers easier to write. This notation is used by mathematicians, scientists, and engineers. {{example|scientific notation|An example of a number written in scientific notation is <math>5 \times 10^3</math>. Written out in decimal notation, the number would be 5000.}} ==Objectives== ==Converting Numbers to Scientific Notation== To convert a number to scientific notation from decimal notation, we must have a number. For this example, the ordinary number will be 1670000000. The formula to write a number is standard form is <math>x \times 10^n</math>, where <math>x</math> is the value between the numbers of 1 and 10, and <math>n</math> is the power of ten. <br> For <math>1670000000</math>, to convert such number to standard form, we need to find the value of <math>x</math> between 1-10. In this case, the number is <math>1.67</math>. <br> So, substituting the value into the formula, the value is now <math>1.67 \times 10^n</math>. ===Finding the Value of <math>n</math>=== To work out the value of <math>n</math>, the value can be counted with the amount of digits after the decimal point (in this example), and the number of digits after the decimal point. For this example, 1.67 has two digits after the decimal point, totalling <math>167</math>. <br> After 167, there are 7 more digits of zero. <br> Therefore, we can do <math> 2+7</math>, giving us <math>9</math>. <br> Giving us a final answer of <math> 1.67 \times 10^9</math>. ===Exercises=== Complete these two exercises to check your learning on this subject. <quiz display=simple> {What is <math>3145000000</math> written in standard form? |type="()"} + <math> 3.145\times10^9</math> - <math> 3.145\times10^1^1</math> - <math> 31.45\times10^8</math> - <math> 3.145\times10^1</math> {What is <math>317000000</math> written in standard form? |type="()"} <math> 3.17\times10^13</math> - <math> 3.17\times10^1^1</math> + <math> 3.17\times10^8</math> - <math> 3.145\times10^2^1</math> </quiz> ==Converting Numbers from Scientific Notation== ===Large Numbers=== ===Small Numbers=== ==Mixed Topic Exercises== ==Further Reading== There are many links online to learn more about scientific notation, as well as complete exercises. <br> *[https://www.bbc.co.uk/bitesize/articles/zc7c239#zprwfdm Guide about standard form (scientific notation)] *[https://quizlet.com/1877428/scientific-notation-flash-cards/ Flashcards on Scientific notation on Quizlet] ==References== 8ncltwsspr1hgla519wnddyp8at98od 4675383 4675382 2026-10-10T00:51:00Z TechVindicator 3626296 /* Converting Numbers from Scientific Notation */ 4675383 wikitext text/x-wiki '''Scientific notation''', '''standard index form''' or '''standard form''' in British English, is a way of expressing numbers that makes large numbers or small numbers easier to write. This notation is used by mathematicians, scientists, and engineers. {{example|scientific notation|An example of a number written in scientific notation is <math>5 \times 10^3</math>. Written out in decimal notation, the number would be 5000.}} ==Objectives== ==Converting Numbers to Scientific Notation== To convert a number to scientific notation from decimal notation, we must have a number. For this example, the ordinary number will be 1670000000. The formula to write a number is standard form is <math>x \times 10^n</math>, where <math>x</math> is the value between the numbers of 1 and 10, and <math>n</math> is the power of ten. <br> For <math>1670000000</math>, to convert such number to standard form, we need to find the value of <math>x</math> between 1-10. In this case, the number is <math>1.67</math>. <br> So, substituting the value into the formula, the value is now <math>1.67 \times 10^n</math>. ===Finding the Value of <math>n</math>=== To work out the value of <math>n</math>, the value can be counted with the amount of digits after the decimal point (in this example), and the number of digits after the decimal point. For this example, 1.67 has two digits after the decimal point, totalling <math>167</math>. <br> After 167, there are 7 more digits of zero. <br> Therefore, we can do <math> 2+7</math>, giving us <math>9</math>. <br> Giving us a final answer of <math> 1.67 \times 10^9</math>. ===Exercises=== Complete these two exercises to check your learning on this subject. <quiz display=simple> {What is <math>3145000000</math> written in standard form? |type="()"} + <math> 3.145\times10^9</math> - <math> 3.145\times10^1^1</math> - <math> 31.45\times10^8</math> - <math> 3.145\times10^1</math> {What is <math>317000000</math> written in standard form? |type="()"} <math> 3.17\times10^13</math> - <math> 3.17\times10^1^1</math> + <math> 3.17\times10^8</math> - <math> 3.145\times10^2^1</math> </quiz> ==Converting Numbers from Scientific Notation== Converting numbers from scientific notation to decimal format is essentially the inverse of converting numbers in decimal format to scientific notation. ===Large Numbers=== ===Small Numbers=== ==Mixed Topic Exercises== ==Further Reading== There are many links online to learn more about scientific notation, as well as complete exercises. <br> *[https://www.bbc.co.uk/bitesize/articles/zc7c239#zprwfdm Guide about standard form (scientific notation)] *[https://quizlet.com/1877428/scientific-notation-flash-cards/ Flashcards on Scientific notation on Quizlet] ==References== 173lg3dwclbjyv34bn72p1r28od7h0u 4675416 4675383 2026-10-10T04:10:27Z TechVindicator 3626296 /* Converting Numbers from Scientific Notation */ 4675416 wikitext text/x-wiki '''Scientific notation''', '''standard index form''' or '''standard form''' in British English, is a way of expressing numbers that makes large numbers or small numbers easier to write. This notation is used by mathematicians, scientists, and engineers. {{example|scientific notation|An example of a number written in scientific notation is <math>5 \times 10^3</math>. Written out in decimal notation, the number would be 5000.}} ==Objectives== ==Converting Numbers to Scientific Notation== To convert a number to scientific notation from decimal notation, we must have a number. For this example, the ordinary number will be 1670000000. The formula to write a number is standard form is <math>x \times 10^n</math>, where <math>x</math> is the value between the numbers of 1 and 10, and <math>n</math> is the power of ten. <br> For <math>1670000000</math>, to convert such number to standard form, we need to find the value of <math>x</math> between 1-10. In this case, the number is <math>1.67</math>. <br> So, substituting the value into the formula, the value is now <math>1.67 \times 10^n</math>. ===Finding the Value of <math>n</math>=== To work out the value of <math>n</math>, the value can be counted with the amount of digits after the decimal point (in this example), and the number of digits after the decimal point. For this example, 1.67 has two digits after the decimal point, totalling <math>167</math>. <br> After 167, there are 7 more digits of zero. <br> Therefore, we can do <math> 2+7</math>, giving us <math>9</math>. <br> Giving us a final answer of <math> 1.67 \times 10^9</math>. ===Exercises=== Complete these two exercises to check your learning on this subject. <quiz display=simple> {What is <math>3145000000</math> written in standard form? |type="()"} + <math> 3.145\times10^9</math> - <math> 3.145\times10^1^1</math> - <math> 31.45\times10^8</math> - <math> 3.145\times10^1</math> {What is <math>317000000</math> written in standard form? |type="()"} <math> 3.17\times10^13</math> - <math> 3.17\times10^1^1</math> + <math> 3.17\times10^8</math> - <math> 3.145\times10^2^1</math> </quiz> ==Converting Numbers from Scientific Notation== Converting numbers from scientific notation to decimal format is essentially the inverse of converting numbers in decimal format to scientific notation. To convert a number from scientific notation to decimal format, it is possible through the following steps: ===Large Numbers=== ===Small Numbers=== ==Mixed Topic Exercises== ==Further Reading== There are many links online to learn more about scientific notation, as well as complete exercises. <br> *[https://www.bbc.co.uk/bitesize/articles/zc7c239#zprwfdm Guide about standard form (scientific notation)] *[https://quizlet.com/1877428/scientific-notation-flash-cards/ Flashcards on Scientific notation on Quizlet] ==References== swwu1872hi0hrk1jh5czycgorgocbib 4675417 4675416 2026-10-10T04:16:16Z TechVindicator 3626296 /* Converting Numbers from Scientific Notation */ 4675417 wikitext text/x-wiki '''Scientific notation''', '''standard index form''' or '''standard form''' in British English, is a way of expressing numbers that makes large numbers or small numbers easier to write. This notation is used by mathematicians, scientists, and engineers. {{example|scientific notation|An example of a number written in scientific notation is <math>5 \times 10^3</math>. Written out in decimal notation, the number would be 5000.}} ==Objectives== ==Converting Numbers to Scientific Notation== To convert a number to scientific notation from decimal notation, we must have a number. For this example, the ordinary number will be 1670000000. The formula to write a number is standard form is <math>x \times 10^n</math>, where <math>x</math> is the value between the numbers of 1 and 10, and <math>n</math> is the power of ten. <br> For <math>1670000000</math>, to convert such number to standard form, we need to find the value of <math>x</math> between 1-10. In this case, the number is <math>1.67</math>. <br> So, substituting the value into the formula, the value is now <math>1.67 \times 10^n</math>. ===Finding the Value of <math>n</math>=== To work out the value of <math>n</math>, the value can be counted with the amount of digits after the decimal point (in this example), and the number of digits after the decimal point. For this example, 1.67 has two digits after the decimal point, totalling <math>167</math>. <br> After 167, there are 7 more digits of zero. <br> Therefore, we can do <math> 2+7</math>, giving us <math>9</math>. <br> Giving us a final answer of <math> 1.67 \times 10^9</math>. ===Exercises=== Complete these two exercises to check your learning on this subject. <quiz display=simple> {What is <math>3145000000</math> written in standard form? |type="()"} + <math> 3.145\times10^9</math> - <math> 3.145\times10^1^1</math> - <math> 31.45\times10^8</math> - <math> 3.145\times10^1</math> {What is <math>317000000</math> written in standard form? |type="()"} <math> 3.17\times10^13</math> - <math> 3.17\times10^1^1</math> + <math> 3.17\times10^8</math> - <math> 3.145\times10^2^1</math> </quiz> ==Converting Numbers from Scientific Notation== Converting numbers from scientific notation to decimal format is essentially the inverse of converting numbers in decimal format to scientific notation. ===Steps=== To convert a number from scientific notation to decimal format, it is possible through the following steps: <br> Assume we have a number: <math>3.146\times10^8</math>. <br> The exponent gives us the amount of decimal places we need to multiply 3.146 by. In this case, it is 8. <br> Multiply 3.146 by <math>10^8</math>. <br> Giving us the answer of 314600000. ===Large Numbers=== ===Small Numbers=== ==Mixed Topic Exercises== ==Further Reading== There are many links online to learn more about scientific notation, as well as complete exercises. <br> *[https://www.bbc.co.uk/bitesize/articles/zc7c239#zprwfdm Guide about standard form (scientific notation)] *[https://quizlet.com/1877428/scientific-notation-flash-cards/ Flashcards on Scientific notation on Quizlet] ==References== q5t8ex6y24xyxr676ubi3d715hmsmhl 4675418 4675417 2026-10-10T04:18:57Z TechVindicator 3626296 /* Steps */ 4675418 wikitext text/x-wiki '''Scientific notation''', '''standard index form''' or '''standard form''' in British English, is a way of expressing numbers that makes large numbers or small numbers easier to write. This notation is used by mathematicians, scientists, and engineers. {{example|scientific notation|An example of a number written in scientific notation is <math>5 \times 10^3</math>. Written out in decimal notation, the number would be 5000.}} ==Objectives== ==Converting Numbers to Scientific Notation== To convert a number to scientific notation from decimal notation, we must have a number. For this example, the ordinary number will be 1670000000. The formula to write a number is standard form is <math>x \times 10^n</math>, where <math>x</math> is the value between the numbers of 1 and 10, and <math>n</math> is the power of ten. <br> For <math>1670000000</math>, to convert such number to standard form, we need to find the value of <math>x</math> between 1-10. In this case, the number is <math>1.67</math>. <br> So, substituting the value into the formula, the value is now <math>1.67 \times 10^n</math>. ===Finding the Value of <math>n</math>=== To work out the value of <math>n</math>, the value can be counted with the amount of digits after the decimal point (in this example), and the number of digits after the decimal point. For this example, 1.67 has two digits after the decimal point, totalling <math>167</math>. <br> After 167, there are 7 more digits of zero. <br> Therefore, we can do <math> 2+7</math>, giving us <math>9</math>. <br> Giving us a final answer of <math> 1.67 \times 10^9</math>. ===Exercises=== Complete these two exercises to check your learning on this subject. <quiz display=simple> {What is <math>3145000000</math> written in standard form? |type="()"} + <math> 3.145\times10^9</math> - <math> 3.145\times10^1^1</math> - <math> 31.45\times10^8</math> - <math> 3.145\times10^1</math> {What is <math>317000000</math> written in standard form? |type="()"} <math> 3.17\times10^13</math> - <math> 3.17\times10^1^1</math> + <math> 3.17\times10^8</math> - <math> 3.145\times10^2^1</math> </quiz> ==Converting Numbers from Scientific Notation== Converting numbers from scientific notation to decimal format is essentially the inverse of converting numbers in decimal format to scientific notation. ===Steps=== To convert a number from scientific notation to decimal format, it is possible through the following steps: <br> Assume we have a number: <math>3.146\times10^8</math>. <br> The exponent gives us the amount of decimal places we need to multiply 3.146 by. In this case, it is 8. <br> Multiply 3.146 by <math>10^8</math>. <br> Giving us the answer of 314600000. ===Large Numbers=== ===Small Numbers=== ==Mixed Topic Exercises== ==Further Reading== There are many links online to learn more about scientific notation, as well as complete exercises. <br> *[https://www.bbc.co.uk/bitesize/articles/zc7c239#zprwfdm Guide about standard form (scientific notation)] *[https://quizlet.com/1877428/scientific-notation-flash-cards/ Flashcards on Scientific notation on Quizlet] ==References== l47n1mb3x7qufilxv8wgf2jz39un8ge Koine Greek/Declining 3rd Declension Nouns 0 486211 4675426 4674794 2026-10-10T05:57:40Z It-is-Truly-Meet 3624460 Most information is from https://pressbooks.pub/ancientgreek/chapter/7/. Reformatting here is necessary. 4675426 wikitext text/x-wiki ==3rd Declension Noun Tables== {| class="wikitable" style="float:right" |+ ὁ παῖς — child !Singular !Plural |- |παῖς||'''παῖδ'''ες |- |'''παιδ'''óς||'''παίδ'''ων |- |'''παιδ'''ῐ́||παισί |- |'''παῖδ'''ᾰ||'''παῖδ'''ᾰς |- | παῖ||'''παῖδ'''ες |} {| class="wikitable" style="float:right" |+ ὁ γίγας — giant ! Singular ! Plural |- | γίγας||γίγαντες |- | γίγαντος||γιγάντων |- | γίγαντι||γίγασι(ν) |- | γίγαντα||γίγαντας |- | γίγαν||γίγαντες |} {| class="wikitable" style="float:right" |+ ὁ θής — hired man ! Singular ! Plural |- | θής||θῆτες |- | θητός||θητῶν |- | θητί||θησί(ν) |- | θῆτα||θῆτας |- | θής||θῆτες |} {| class="wikitable" style="float:right" |+ ἡ λαμπάς — torch ! Case ! Singular ! Plural |- | Nom. | λαμπάς||λαμπάδες |- | Gen. | λαμπάδος||λαμπάδων |- | Dat. | λαμπάδι||λαμπάσι(ν) |- | Acc. | λαμπάδα||λαμπάδας |- | Voc. | λαμπάς||λαμπάδες |} {| class="wikitable" style="float:right" |+ ὁ/ἡ ὄρνις — bird ! Singular ! Plural |- | ὄρνις||ὄρνιθες |- | ὄρνιθος||ὀρνίθων |- | ὄρνιθι||ὄρνισι(ν) |- | ὄρνιν||ὄρνιθας |- | ὄρνις||ὄρνιθες |} {| class="wikitable" style="float:right" |+ ἡ ἐλπίς — hope ! Singular ! Plural |- | ἐλπίς||ἐλπίδες |- | ἐλπίδος||ἐλπίδων |- | ἐλπίδι||ἐλπίσι(ν) |- | ἐλπίδα||ἐλπίδας |- | ἐλπί||ἐλπίδες |} {| class="wikitable" style="float:right" |+ ὁ δαίμων — divinity ! Singular ! Plural |- | δαίμων||δαίμονες |- | δαίμονος||δαιμόνων |- | δαίμονι||δαίμοσι(ν) |- | δαίμονα||δαίμονας |- | δαῖμον||δαίμονες |} {| class="wikitable" style="float:right" |+ ὁ ἄρχων — ruler ! Case ! Singular ! Plural |- | Nom. | ἄρχων||ἄρχοντες |- | Gen. | ἄρχοντος||ἀρχόντων |- | Dat. | ἄρχοντι||ἄρχουσι(ν) |- | Acc. | ἄρχοντα||ἄρχοντας |- | Voc. | ἄρχον||ἄρχοντες |} <br clear="all"> ==Masculine Nouns== Now that you have learned what information a Greek noun conveys, let’s see how Greek inflects its nouns to convey this information. We begin with the NOUN STEM. The stem tells you the person, place or thing to which the noun refers. For example: παιδ child δαιμον divinity, spirit ἀρχοντ ruler To indicate the number and case of a noun, Greek adds CASE ENDINGS to the stems. Since Greek nouns most commonly use two numbers (Singular, Plural) and four cases (Nominative, Genitive, Dative, Accusative), Greek nouns need eight different endings to cover all the possibilities. The first set of nouns are all MASCULINE in gender. These particular masculine nouns add the following suffixes to their stem to indicate number and case: Singular Plural Nominative –ς –ες Genitive –ος –ων Dative –ι –σι Accusative –α –ας ===The Trouble with Sigma=== Notice that two of the case endings involve adding a sigma to the stem: nom. sing. = –ς, dat. plu. = –σι. The set of nouns we are discussing have stems ending in a DENTAL (recall that the dental STOP consonants are –τ/-δ/-θ, and the dental NASAL is –ν). At this moment, it would be good to review some alphabet math so that we can see what pronunciation – and therefore spelling – changes arise. Recall that when a σ follows a dental stop consonant, the dental disappears and the σ remains: e.g., δ + σ = σ. A similar process occurs when a σ follows a –ν, only sometimes (usually in the nominative singular) it is the σ that disappears: ν + σ = ν. In such instances, we often (though not always!) see the process of COMPENSATORY LENGTHENING, where a Greek vowel lengthens to make up for the loss of a consonant that follows. Note, however, that only a short vowel can be lengthened; if the vowel is already long or a diphthong, it cannot be lengthened further. With this alphabet math in mind, take careful note of the ways that the trouble with sigma affects the spelling of our three nouns: ὁ παῖς, παιδός child Singular Plural Nominative (παιδς→ ) παῖς παῖδες Genitive παιδός παίδων Dative παιδί (παιδσι→ ) παισί Accusative παῖδα παῖδας ὁ δαίμων, δαίμονος divinity (cf. S 259; GPH p. 11) Singular Plural Nominative (δαιμονς→ ) δαίμων δαίμονες Genitive δαίμονος δαιμόνων Dative δαίμονι (δαιμονσι→ ) δαίμοσι Accusative δαίμονα δαίμονας ὁ ἄρχων, ἄρχοντος ruler (cf. S 259; GPH p. 9) Singular Plural Nominative (ἀρχοντς→ ) ἄρχων ἄρχοντες Genitive ἄρχοντος ἀρχόντων Dative ἄρχοντι (ἀρχοντσι→ ) ἄρχουσι Accusative ἄρχοντα ἄρχοντας Spell it Like It Sounds! Remember: A word ending in –σι can add a final –ν (MOVABLE NU) to ease pronunciation: e.g., εἴκοσί εἰσι → εἴκοσίν εἰσι. For the noun παῖς, for example, this means the dative plural form παισί can appear as παισίν. It does not affect the parsing, meaning, or translation. ===Declining and Declensions=== The process of writing or saying all the INFLECTED forms of a noun is called DECLINING a noun. This is because ancient scholars metaphorically described noun forms as “declining” down from their nominative singular form. The other cases – Genitive, Dative, and Accusative – are sometimes referred to as OBLIQUE CASES, to distinguish them from this nominative singular form. Almost all Greek nouns belong to one of three INFLECTION patterns, called the FIRST DECLENSION, SECOND DECLENSION, and THIRD DECLENSION. Each represents a particular set of case endings for gender, number, and case. The nouns of this lesson belong to the THIRD DECLENSION. ===Noun Vocabulary=== The vocabulary entry for Greek nouns always comprises three words: e.g., ὁ ἄρχων, ἄρχοντος. These three words represent the following: The DEFINITE ARTICLE, which signals the gender of the noun. The article ὁ indicates that a noun is masculine. For more on the definite article, see below. The NOMINATIVE SINGULAR, so you can see exactly how this form appears. This is particularly helpful if the nominative singular has been changed in response to a sigma, e.g., (ἀρχοντς→ ) ἄρχων. The GENITIVE SINGULAR, so you can identify the NOUN STEM, which can be found by dropping the ending –ος, e.g., ἀρχοντ-. It is important, therefore, that all three words be memorized as the vocabulary entry for any given Greek noun. Nouns and the Persistent Accent For most Greek verbs, RECESSIVE ACCENTUATION determines which syllable receives the accent. In the case of most Greek nouns (and adjectives), PERSISTENT ACCENTUATION determines which syllable receives the accent. The NOMINATIVE SINGULAR of each noun has a particular vowel or diphthong that receives the ACCENT. Where this accented vowel or diphthong is found – antepenult, penult, or ultima – is a matter of spelling, and must be memorized. For example, note that the accent is “born” on the alpha of ἄρχων, but on the omega of ἡγεμών. As a general principle, the accent on all the other INFLECTED forms of a noun tries to remain, or PERSIST, on the same vowel or diphthong on which it is found in the nominative singular, unless forced to change position or accent type (e.g., from circumflex to acute). Note that the 3rd declension case ending for the nominative singular adds only a consonant (-ς) to the noun stem; the remaining case endings add ANOTHER SYLLABLE to the noun. In practice, this means that if the accented vowel or diphthong is found, say, in the ultima of the nominative singular form, the same vowel or diphthong becomes the penult in the remaining inflected forms. There are three general PERSISTENT ACCENT situations or rules that apply to nouns of the third declension. 1. When the accent falls on the PENULT of inflected forms… It stays there. If the penult is LONG, the accent is a circumflex with short ultima, acute with long ultima. Singular Plural αἰών αἰῶνες αἰῶνος αἰώνων αἰῶνι αἰῶσι αἰῶνα αἰῶνας If the penult is SHORT, the accent remains acute throughout all forms. Singular Plural ἡγεμών ἡγεμόνες ἡγεμόνος ἡγεμόνων ἡγεμόνι ἡγεμόσι ἡγεμόνα ἡγεμόνας Note that the rule for accents that fall on the penult is IDENTICAL to that of VERBS with only TWO SYLLABLES! 2. When the accent is on the ANTEPENULT of inflected forms… The accent can only be acute on the antepenult. If the ULTIMA becomes LONG (e.g., genitive plural –ων), the accent moves to the PENULT. Singular Plural ἄρχων ἄρχοντες ἄρχοντος ἀρχόντων ἄρχοντι ἄρχουσι ἄρχοντα ἄρχοντας Note that the rule for accents that fall on the antepenult is IDENTICAL to that of VERBS with THREE OR MORE SYLLABLES! 3. When the accent falls on a MONOSYLLABIC nominative singular noun… The accent usually moves to the ULTIMA of the genitive and dative cases, singular and plural. In these situations, the accent on the ultima is ACUTE over short vowels (e.g. –ός), and circumflex over long (e.g. –ῶν). This accent pattern is irregular, and must be memorized. Singular Plural πούς πόδες ποδός ποδῶν ποδί ποσί πόδα πόδας There are a handful of monosyllabic nouns that instead accent the penult of the genitive plural (S 252a). The most common ones are ὁ, ἡ παῖς, παιδός child (genitive plural = παίδων), declined above, φῶς, φωτός light (genitive plural = φώτων), and οὖς, ὠτός ear (genitive plural = ὤτων). {{BookCat}} 5q7lc5t9377gve3nwyo0fp504rnaqnv On 2D Inverse Problems/4 0 486225 4675305 4675285 2026-10-09T17:21:32Z DVD206 724793 poems of spider 4675305 wikitext text/x-wiki The circular symmetric Spiderweb responds as <math>\Lambda=z\beta(z)</math>, <math>z^2=2I-S-S^{-1}</math> with the shift S. The self-dual network (square root of minus Laplacian response) leads to zero anti-symmetric ghost: <math>\beta(z)=az+1/bz=1=1/(az+1/bz)</math> at <math>z=2\sin(k\pi/5),k=1,2</math>. Or, <math>-bz+\cfrac{1}{-az+\cfrac{1}{az+\cfrac{1}{bz}}}=0.</math> Exercise: prove that <math>a=\cot(\pi/5),b=\cot(2\pi/5).</math> Works for all roots of unity or regular polygons... <gallery> Holy_ghost.jpg|Ghost body Holy_ghost.jpg|Invisible mirror </gallery> {{BookCat}}So Earth never returns to same spot. It's a spiral, not a circle. Hush, little itsy spider, don't you cry, Rain came down from stormy sky. Sun will come and dry your thread, Climb back up to your webby bed. Зета сбегает к единице, Сумма их в бездну стремится. Но вычти один, и в ряд сложи — 3/4 получишь для души. А если поделить на степени, `cot` расскажет все сплетения: Где π/4, где π/2, Там TP-паук плетёт дела. Itsy Bitsy Spider 🕷️ The itsy bitsy spider climbed up the water spout. Down came the rain and washed the spider out. Out came the sun and dried up all the rain And the itsy bitsy spider climbed up the spout again. 6vmc8tcg8xcpsb2xn0ftf0wuh69yuzt On 2D Inverse Problems/5 0 486226 4675306 4675078 2026-10-09T17:29:12Z DVD206 724793 ai output 4675306 wikitext text/x-wiki Zero response means pure shift monodromy, M=S!? <nowiki>#</nowiki> 🧭 Core idea (graph version) In a graph, you often assign values to edges or nodes—like: <nowiki>*</nowiki> electrical currents <nowiki>*</nowiki> weights or transition rules <nowiki>*</nowiki> linear transformations Now: 👉 If you start at a node and follow a **closed path (cycle)**, applying these transformations along the way, you end up with a new value. The **monodromy** is the total transformation accumulated around that loop. <nowiki>***</nowiki>{{BookCat}} aydmdx6ojjq2v4ijzwjjv74kmjodvew User:NinjaRobotPirate/sandbox 2 486301 4675316 4675275 2026-10-09T19:23:29Z NinjaRobotPirate 948797 hopefully a little more book-oriented 4675316 wikitext text/x-wiki Within the Myers-Briggs personality framework, ENTPs fit the [[Myers-Briggs Type Indicator/Conceptualizer|Rational]] category of personality types. ENTPs are: * Extroverted – a focus on the external world rather than simply social extroversion * iNtuitive – pattern-matching, lateral thinking, and a focus on possibilities * Thinking – a preference for logic over emotion when making decisions * Perceiving – adaptability, improvisation, and a desire to leave things open-ended Type dynamics within MBTI use different cognitive functions, categorized as "introverted" or "extroverted", depending on whether they are directed inward or outward. Functions have a preference hierarchy, where they are used most often (the dominant function) to least often (inferior function). An ENTP's cognitive functions consist of: * Extroverted intuition (Ne) – this is their dominant function. It asks "what if", sees patterns, explores possibilities, and desires novelty. * Introverted thinking (Ti) – their auxiliary function. It analyzes data logically, seeks internal consistency, and values precision. * Extroverted feeling (Fe) – as their tertiary function, it makes them charming and empathetic, though it can also manifest as social engineering. * Introverted sensing (Si) – their inferior function, which may make it difficult for them to deal with routine, details, and follow-through. ENTPs are good at brainstorming ideas and coming up with unconventional solutions. They can see situations from many different perspectives and may dislike being forced to make definitive conclusions. They instead prefer to keep their options open and live inside the ambiguity. They make decisions based on logic and may reject ideas or traditions that do not strike them as logical. Precision is important to an ENTP, and they might not be satisfied with a solution that ignores edge cases or uses a sloppy process. They dislike appeals to external authorities and rely on their own sense of logic. Immature individuals may prioritize truth and logic over empathy, making them blunt or argumentative. As they mature, ENTPs become more empathetic, charming, and able to able to pick up the vibe of a group of people. They struggle with the mundane details of life, which can manifest as procrastination or starting many projects without ever completing any of them. Being stuck doing rote, repetitive tasks without novelty in a rigid bureaucracy is nightmarish to ENTPs. According to MBTI, stress can cause the dominant function to turn one's personality into a caricature. For an ENTP, this may cause them to act disorganized or incapable of making decisions ("analysis paralysis"). Stress can also cause the inferior function to take control. For an ENTP, this might manifest as an obsession with past experiences or irrelevant facts. == Interpersonal relationships == ENTPs have few sacred cows, and almost anything is up for debate. This can make them very open-minded and willing to change their opinions based on a logical argument, but it can cause friction in people who dislike having their deeply-held opinions challenged. ENTPs may thus clash with the [[Myers-Briggs Type Indicator/Traditionalist|Guardian personality type]]. While ENTPs can be skillful at reading other people, their bluntness can also cause problems with the [[Myers-Briggs Type Indicator/Idealist|Idealist personality type]]. ENTPs value nuance, open-mindedness, and competence. In the workplace, ENTPs continue this trend, exploring future possibilities and seeing logical flaws in business plans. They may clash with coworkers who are focused on grounded, concrete results, though ENTPs will need help from these people to see their visionary plans reach fruition. ENTPs tend to be anti-authoritarian and may resent being forced to follow rules that don't make sense to them. Deadlines are more of a suggestion to them, and they work best in an environment where they can follow their intuition without rigid structure getting in the way. si53q28ahbkv2b3s788gfzqmi71cg40 User talk:~2026-54220-81 3 486303 4675288 2026-10-09T12:24:10Z MathXplore 3097823 Notifying author of speedy deletion nomination 4675288 wikitext text/x-wiki == I have added a tag to a page you created == Hi! I'm MathXplore, and I recently reviewed your page, [[:General Astronomy/Print version/Mercury]]. I have added a tag to the page, because it <strong>may meet the [[Wikibooks:Deletion policy#Speedy deletions|criteria for speedy deletion]].</strong> This means that it can be deleted at any time. If you believe that your page should not be deleted, please post a message on [[Talk:General Astronomy/Print version/Mercury|the page's talk page]] explaining why. <strong>If your reasoning is convincing, your page may be saved.</strong> If you have any questions or concerns, please [[User talk:MathXplore|let me know]]. Thank you! <!-- Substituted from User:JJPMaster/CurateThisPage/authorMsg --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:24, 9 October 2026 (UTC) jqmfkbbcno3hu2lme6mmr8adct4xx8k On 2D Inverse Problems/Echo 0 486304 4675304 2026-10-09T17:20:14Z DVD206 724793 alternating diagram 4675304 wikitext text/x-wiki The response could be echo [ˈɛkəʊ], φψ = +1 φψ = -1 (ζ-world) (η-world) | | RECURSION: R_m = cot·(x-1/x)+back R_m = ±cot·(x-1/x)+back | | | (1-(-1)^m) twist | |←—————————————————————————| | | SEQUENCES: x^m - x^{-m} x^m - (-1)^m x^{-m} (all same sign) (alternating signs) | | TRIG FORM: 2i·sin(mθ) sin(mθ) + i·(1-(-1)^m)·... (x=e^iθ) 2·cos(mθ) cos(mθ)·(1+(-1)^m)/2 + ... | | DIRICHLET ζ(s) = Σ 1/n^s η(s) = Σ (-1)^{n-1}/n^s SERIES: | | | | |——— η(s) = (1-2^{1-s})ζ(s) ——| | | OPERATOR: (-Δ) √(-Δ) (full Laplacian) (half-derivative) | | SELF-DUALITY: Z·Z* = +1 Z·Z* = -1 (unitary/lossless) (Fibonacci/golden) the geometry of electricity: 8f6klnx3hmbqu0pvvr84ekjzjsn3s9l 4675307 4675304 2026-10-09T17:35:09Z DVD206 724793 eta and zeta or beta 4675307 wikitext text/x-wiki The response could be echo [ˈɛkəʊ], φψ = +1 φψ = -1 (ζ-world) (η-world) | | RECURSION: R_m = cot·(x-1/x)+back R_m = ±cot·(x-1/x)+back | | | (1-(-1)^m) twist | |←—————————————————————————| | | SEQUENCES: x^m - x^{-m} x^m - (-1)^m x^{-m} (all same sign) (alternating signs) | | TRIG FORM: 2i·sin(mθ) sin(mθ) + i·(1-(-1)^m)·... (x=e^iθ) 2·cos(mθ) cos(mθ)·(1+(-1)^m)/2 + ... | | DIRICHLET ζ(s) = Σ 1/n^s η(s) = Σ (-1)^{n-1}/n^s SERIES: | | | | |——— η(s) = (1-2^{1-s})ζ(s) ——| | | OPERATOR: (-Δ) √(-Δ) (full Laplacian) (half-derivative) | | SELF-DUALITY: Z·Z* = +1 Z·Z* = -1 (unitary/lossless) (Fibonacci/golden) the geometry of electricity: ±±±±±±±±±±±±±... x^(m+1)-1/(±x)^(m+1)    x^m±1/x^m          x^(m-1)-1/(±x)^(m-1) <nowiki>--------------------</nowiki> = ---------(x-1/x) + --------------------.     x^m-1/(±x)^m        x^m-1/x^m              x^m-1/(±x)^m ≠≠≠≠≠≠≠≠≠≠≠≠≠≠≠≠≠ haphh240iion0kt66dtfru0seoipx15 4675330 4675307 2026-10-09T22:43:59Z MathXplore 3097823 Added {{[[Template:BookCat|BookCat]]}} using [[User:1234qwer1234qwer4/BookCat.js|BookCat.js]] 4675330 wikitext text/x-wiki The response could be echo [ˈɛkəʊ], φψ = +1 φψ = -1 (ζ-world) (η-world) | | RECURSION: R_m = cot·(x-1/x)+back R_m = ±cot·(x-1/x)+back | | | (1-(-1)^m) twist | |←—————————————————————————| | | SEQUENCES: x^m - x^{-m} x^m - (-1)^m x^{-m} (all same sign) (alternating signs) | | TRIG FORM: 2i·sin(mθ) sin(mθ) + i·(1-(-1)^m)·... (x=e^iθ) 2·cos(mθ) cos(mθ)·(1+(-1)^m)/2 + ... | | DIRICHLET ζ(s) = Σ 1/n^s η(s) = Σ (-1)^{n-1}/n^s SERIES: | | | | |——— η(s) = (1-2^{1-s})ζ(s) ——| | | OPERATOR: (-Δ) √(-Δ) (full Laplacian) (half-derivative) | | SELF-DUALITY: Z·Z* = +1 Z·Z* = -1 (unitary/lossless) (Fibonacci/golden) the geometry of electricity: ±±±±±±±±±±±±±... x^(m+1)-1/(±x)^(m+1)    x^m±1/x^m          x^(m-1)-1/(±x)^(m-1) <nowiki>--------------------</nowiki> = ---------(x-1/x) + --------------------.     x^m-1/(±x)^m        x^m-1/x^m              x^m-1/(±x)^m ≠≠≠≠≠≠≠≠≠≠≠≠≠≠≠≠≠ {{BookCat}} qndde8260la3asppfgwb2iu0qgpp8zq User:Paul Kithima/sandbox 2 486305 4675323 2026-10-09T21:01:26Z Paul Kithima 3621610 Created page with "== '''<big>Community Roots, Global Presence</big>''' == <sub><big>Notes on Inequality</big></sub> = Introduction = This book draw on more than a decade of my own work leading Bondeko Refugee Livelihoods Center in Kampala/Uganda; three years of personal training reflections I wrote during Omprakash's Partner EdGE program between 2019-2021; Bondeko's own operational and financial data; an independent 2016 UC Davis/WFP economic study of Uganda's refugee settlements; a 2025..." 4675323 wikitext text/x-wiki == '''<big>Community Roots, Global Presence</big>''' == <sub><big>Notes on Inequality</big></sub> = Introduction = This book draw on more than a decade of my own work leading Bondeko Refugee Livelihoods Center in Kampala/Uganda; three years of personal training reflections I wrote during Omprakash's Partner EdGE program between 2019-2021; Bondeko's own operational and financial data; an independent 2016 UC Davis/WFP economic study of Uganda's refugee settlements; a 2025 global survey of 263 refugee-led organizations that Bondeko co-designed and carried out with the International Council of Voluntary Agencies (ICVA), and the Refugee Seeking Equal Access around the Table (R-SEAT); and most current figures available from UNHCR, the World Bank, Oxfam, and the World Economic Forum as of October 2026. Where I quote something I have written earlier, I have kept it the way I originally wrote it. Where the surrounding text is new, it is my own synthesis, recently written of things I have said and lived across several years, not a transcript of any single document. = <small>Two Neighborhoods, Five Minutes Apart</small> = In my community, a new pair of shoes, a pair of moccasins or even a pair of "Air Jordan", can be seen as a sign that a family has reached a certain comfort, because many people around us have not crossed the poverty line. In 2021, Uganda's government estimated that 25% of its population are unable to afford more than 1 meal a day within their household. The most recent 8xsv82z5a962wpg4azouw74ugpxualu 4675424 4675323 2026-10-10T05:51:55Z Paul Kithima 3621610 I added some paragraphs 4675424 wikitext text/x-wiki == '''<big>Community Roots, Global Presence</big>''' == <sub><big>Notes on Inequality</big></sub> = Introduction = This book draw on more than a decade of my own work leading Bondeko Refugee Livelihoods Center in Kampala/Uganda; three years of personal training reflections I wrote during Omprakash's Partner EdGE program between 2019-2021; Bondeko's own operational and financial data; an independent 2016 UC Davis/WFP economic study of Uganda's refugee settlements; a 2025 global survey of 263 refugee-led organizations that Bondeko co-designed and carried out with the International Council of Voluntary Agencies (ICVA), and the Refugee Seeking Equal Access around the Table (R-SEAT); and most current figures available from UNHCR, the World Bank, Oxfam, and the World Economic Forum as of October 2026. Where I quote something I have written earlier, I have kept it the way I originally wrote it. Where the surrounding text is new, it is my own synthesis, recently written of things I have said and lived across several years, not a transcript of any single document. = <small>Chap 1. Two Neighborhoods, Five Minutes Apart</small> = In my community, a new pair of shoes, a pair of moccasins or even a pair of "Air Jordan", can be seen as a sign that a family has reached a certain comfort, because many people around us have not crossed the poverty line. In 2021, Uganda's government estimated that 25% of its population are unable to afford more than 1 meal a day within their household. The most recent survey, released in 2025 puts the Uganda national rate at 16.1%, nearly 7 million people still below the poverty line. In its last edition before ending in Feb 2026, the CIA World Factbook<ref>{{Citation |title=The World Factbook |date=2026-09-27 |url=https://en.wikipedia.org/w/index.php?title=The_World_Factbook&oldid=1377052151 |work=Wikipedia |access-date=2026-10-10 |language=en}}</ref> recorded Uganda 2019 poverty rate at 20.3%, before revising it later to 16.1% showing improvement. I'm citing it here through the World Factbook Archive, which preserved the Country Factbook pages after the shutdown, as a commonly used reference point, not as a separate or more recent figure. It shows real progress, but so many people still continue surviving on one meal a day, whereas others are throwing away their leftovers. I saw similar situation in Addis Ababa in 2019. But this is not a Ugandan and Ethiopian story only, but the broader story of global wealth and inequality. In the Democratic Republic of the Congo, where I'm from, young people risk their lives mining coltan, a mineral used in smartphones, their labor makes possible, yet many of them cannot afford one of them. At Bondeko, we tell our community story as it is with no artifacts: Nearly 99% of the people we serve have no permanent job. Most of their earning come from informal economy, and many of them survive on less than a dollar per day. These are not numbers from some report, but this is the reality in Bondeko's neighborhoods. == Chap 2. Who Counts "Emerging" == qpxjg1i7hmxh7wr9sklvyje5c5lpfnb 4675425 4675424 2026-10-10T05:55:30Z Paul Kithima 3621610 4675425 wikitext text/x-wiki == '''<big>Community Roots, Global Presence</big>''' == = Introduction: Notes on Inequality = This book draw on more than a decade of my own work leading Bondeko Refugee Livelihoods Center in Kampala/Uganda; three years of personal training reflections I wrote during Omprakash's Partner EdGE program between 2019-2021; Bondeko's own operational and financial data; an independent 2016 UC Davis/WFP economic study of Uganda's refugee settlements; a 2025 global survey of 263 refugee-led organizations that Bondeko co-designed and carried out with the International Council of Voluntary Agencies (ICVA), and the Refugee Seeking Equal Access around the Table (R-SEAT); and most current figures available from UNHCR, the World Bank, Oxfam, and the World Economic Forum as of October 2026. Where I quote something I have written earlier, I have kept it the way I originally wrote it. Where the surrounding text is new, it is my own synthesis, recently written of things I have said and lived across several years, not a transcript of any single document. = <small>Chap 1. Two Neighborhoods, Five Minutes Apart</small> = In my community, a new pair of shoes, a pair of moccasins or even a pair of "Air Jordan", can be seen as a sign that a family has reached a certain comfort, because many people around us have not crossed the poverty line. In 2021, Uganda's government estimated that 25% of its population are unable to afford more than 1 meal a day within their household. The most recent survey, released in 2025 puts the Uganda national rate at 16.1%, nearly 7 million people still below the poverty line. In its last edition before ending in Feb 2026, the CIA World Factbook<ref>{{Citation |title=The World Factbook |date=2026-09-27 |url=https://en.wikipedia.org/w/index.php?title=The_World_Factbook&oldid=1377052151 |work=Wikipedia |access-date=2026-10-10 |language=en}}</ref> recorded Uganda 2019 poverty rate at 20.3%, before revising it later to 16.1% showing improvement. I'm citing it here through the World Factbook Archive, which preserved the Country Factbook pages after the shutdown, as a commonly used reference point, not as a separate or more recent figure. It shows real progress, but so many people still continue surviving on one meal a day, whereas others are throwing away their leftovers. I saw similar situation in Addis Ababa in 2019. But this is not a Ugandan and Ethiopian story only, but the broader story of global wealth and inequality. In the Democratic Republic of the Congo, where I'm from, young people risk their lives mining coltan, a mineral used in smartphones, their labor makes possible, yet many of them cannot afford one of them. At Bondeko, we tell our community story as it is with no artifacts: Nearly 99% of the people we serve have no permanent job. Most of their earning come from informal economy, and many of them survive on less than a dollar per day. These are not numbers from some report, but this is the reality in Bondeko's neighborhoods. == Chap 2. Who Counts "Emerging" == 84iaedqqe6hkggox0an2uimcm1pdchu Create Vampires/Vam-Pai-Yer 0 486306 4675343 2026-10-09T23:52:36Z 3MMPEYTON 3393808 Created page with "== How Do You Spell Vampire? == Phonetically, English speakers pronounce vampire this way "vamp-pie-yer" [Vam-Pai-Yer], yet how do people around the world spell and pronounce vampires? Etymology: [word origin] A Wikipedian fluent in American-Spanish, wrote about the "etimologia" of the word as "...posiblemente a traves del 'vampyre' frances del 'vampir' aleman..." The Wikipedian may have derived the origin of the word, vampire, from the dictionary: Merrian-webster.com...." 4675343 wikitext text/x-wiki == How Do You Spell Vampire? == Phonetically, English speakers pronounce vampire this way "vamp-pie-yer" [Vam-Pai-Yer], yet how do people around the world spell and pronounce vampires? Etymology: [word origin] A Wikipedian fluent in American-Spanish, wrote about the "etimologia" of the word as "...posiblemente a traves del 'vampyre' frances del 'vampir' aleman..." The Wikipedian may have derived the origin of the word, vampire, from the dictionary: Merrian-webster.com. Under entry: vampire, Etymology: French, from German 'vampir...' The popular Urban Dictionary [online] claims the source of "vampyre" is "...the old english way of spelling 'Vampire.'" New words derived from vampire are: vampiric, and vampirish. cn2tlhwl2im3vehynbpepqtl8ghzg84 4675344 4675343 2026-10-09T23:53:46Z 3MMPEYTON 3393808 4675344 wikitext text/x-wiki == How Do You Spell Vam-Pai-Yer? == Phonetically, English speakers pronounce vampire this way "vamp-pie-yer" [Vam-Pai-Yer], yet how do people around the world spell and pronounce vampires? <br> <br> '''Etymology''': [word origin] <br> <br> A Wikipedian fluent in American-Spanish, wrote about the "etimologia" of the word as "...posiblemente a traves del 'vampyre' frances del 'vampir' aleman..." <br> The Wikipedian may have derived the origin of the word, vampire, from the dictionary: Merrian-webster.com. <br> Under entry: '''vampire''', Etymology: French, from German 'vampir...' <br> <br> The popular Urban Dictionary [online] claims the source of "vampyre" is "...the old english way of spelling 'Vampire.'" <br> <br> New words derived from <u>vampire</u> are: vampiric, and vampirish. <br> <br> [[Create Vampires/Alternative Spelling]] <br> <br> === Reference === {| class="wikitable" |- | How Do You Spell Vam-Pai-Yer? |- | 1. Vampiro http://www.es.wikipedia.org "Spanish Wikipedia" <ref>http://www.es.wikipedia.org/wiki/vampiro</ref>Date: 4/20/2020 |- | 2. Vampiro https://www.spanishdict.com "Spanishdict" <ref>https://www.spanishdict.com/translate/vampiro</ref> Date: 2/30/2020 |- | 3. Vampire https://www.merriam-webster.com "Merrian-Webster" Online Dictionary <ref>https://www.merriam-webster.com/dictionary/vampire</ref>Date: 4/27/2020<br /> |- | 4. Vampyre <nowiki>https://www.urbandictionary.com</nowiki> "Urban Dictionary" <ref>https://www.urbandictionary.com/define.php?term=Vampyre</ref> Date: June/23/2011 <br /> |} <br /> {{BookCat}} 1lcsv5azxlw134xrrq0vtwkdjscthmg 4675347 4675344 2026-10-10T00:00:03Z 3MMPEYTON 3393808 4675347 wikitext text/x-wiki == How Do You Spell Vam-Pai-Yer? == Phonetically, English speakers pronounce vampire this way "vamp-pie-yer" [Vam-Pai-Yer], yet how do people around the world spell and pronounce vampires? <br> <br> '''Etymology''': [word origin] <br> <br> A Wikipedian fluent in American-Spanish, wrote about the "etimologia" of the word as "...posiblemente a traves del 'vampyre' frances del 'vampir' aleman..." <br> The Wikipedian may have derived the origin of the word, vampire, from the dictionary: Merrian-webster.com. <br> Under entry: '''vampire''', Etymology: French, from German 'vampir...' <br> <br> The popular Urban Dictionary [online] claims the source of "vampyre" is "...the old english way of spelling 'Vampire.'" <br> <br> New words derived from <u>vampire</u> are: vampiric, and vampirish. <br> <br> [[Create Vampires/Alternative Spelling]] <br> <br> === Reference === {| class="wikitable" |- | How Do You Spell Vam-Pai-Yer? |- | 1. Vampiro http://www.es.wikipedia.org "Spanish Wikipedia" <ref>http://www.es.wikipedia.org/wiki/vampiro</ref>Date: 4/20/2020 |- | 2. Vampiro https://www.spanishdict.com "Spanishdict" <ref>https://www.spanishdict.com/translate/vampiro</ref> Date: 2/30/2020 |- | 3. Vampire https://www.merriam-webster.com "Merrian-Webster" Online Dictionary <ref>https://www.merriam-webster.com/dictionary/vampire</ref>Date: 4/27/2020<br /> |- | 4. Vampyre <nowiki>https://www.urbandictionary.com</nowiki> "Urban Dictionary" <ref>https://www.urbandictionary.com/define.php?term=Vampyre</ref> Date: June/23/2011 <br /> |} <br /> <br> <noinclude>{{Chapter navigation with TOC||Alternative_Spelling|TOC mini}}</noinclude> <br> {{BookCat}} bwerv6xoue2kf0beidmq3g1dbhqm3sf 4675357 4675347 2026-10-10T00:18:01Z 3MMPEYTON 3393808 4675357 wikitext text/x-wiki == How Do You Spell Vam-Pai-Yer? == Phonetically, English speakers pronounce vampire this way "vamp-pie-yer" [Vam-Pai-Yer], yet how do people around the world spell and pronounce vampires? <br> <br> '''Etymology''': [word origin] <br> <br> A Wikipedian fluent in American-Spanish, wrote about the "etimologia" of the word as "...posiblemente a traves del 'vampyre' frances del 'vampir' aleman..." <br> The Wikipedian may have derived the origin of the word, vampire, from the dictionary: Merrian-webster.com. <br> Under entry: '''vampire''', Etymology: French, from German 'vampir...' <br> <br> The popular Urban Dictionary [online] claims the source of "vampyre" is "...the old english way of spelling 'Vampire.'" <br> <br> New words derived from <u>vampire</u> are: vampiric, and vampirish. <br> <br> Link: [[Create Vampires/Alternative Spelling]] <br> <br> === Reference === {| class="wikitable" |- | How Do You Spell Vam-Pai-Yer? |- | 1. Vampiro http://www.es.wikipedia.org "Spanish Wikipedia" <ref>http://www.es.wikipedia.org/wiki/vampiro</ref>Date: 4/20/2020 |- | 2. Vampiro https://www.spanishdict.com "Spanishdict" <ref>https://www.spanishdict.com/translate/vampiro</ref> Date: 2/30/2020 |- | 3. Vampire https://www.merriam-webster.com "Merrian-Webster" Online Dictionary <ref>https://www.merriam-webster.com/dictionary/vampire</ref>Date: 4/27/2020<br /> |- | 4. Vampyre <nowiki>https://www.urbandictionary.com</nowiki> "Urban Dictionary" <ref>https://www.urbandictionary.com/define.php?term=Vampyre</ref> Date: June/23/2011 <br /> |} <br /> <br> <noinclude>{{Chapter navigation with TOC||Alternative_Spelling|TOC mini}}</noinclude> <br> {{BookCat}} mw98l9s7qdjfov31p06wpd2cpi7rlif 4675359 4675357 2026-10-10T00:20:59Z 3MMPEYTON 3393808 4675359 wikitext text/x-wiki == How Do You Spell Vam-Pai-Yer? == Phonetically, English speakers pronounce vampire this way "vamp-pie-yer" [Vam-Pai-Yer], yet how do people around the world spell and pronounce vampires? <br> <br> '''Etymology''': [word origin] <br> <br> A Wikipedian fluent in American-Spanish, wrote about the "etimologia" of the word as "...posiblemente a traves del 'vampyre' frances del 'vampir' aleman..." <br> The Wikipedian may have derived the origin of the word, vampire, from the dictionary: Merrian-webster.com. <br> Under entry: '''vampire''', Etymology: French, from German 'vampir...' <br> <br> The popular Urban Dictionary [online] claims the source of "vampyre" is "...the old english way of spelling 'Vampire.'" <br> <br> New words derived from <u>vampire</u> are: vampiric, and vampirish. <br> <br> Link: [[Create Vampires/Alternative Spelling]] <br> Link: [[Create_Vampires/A_Definition_For_Vampire]] <br> <br> === Reference === {| class="wikitable" |- | How Do You Spell Vam-Pai-Yer? |- | 1. Vampiro http://www.es.wikipedia.org "Spanish Wikipedia" <ref>http://www.es.wikipedia.org/wiki/vampiro</ref>Date: 4/20/2020 |- | 2. Vampiro https://www.spanishdict.com "Spanishdict" <ref>https://www.spanishdict.com/translate/vampiro</ref> Date: 2/30/2020 |- | 3. Vampire https://www.merriam-webster.com "Merrian-Webster" Online Dictionary <ref>https://www.merriam-webster.com/dictionary/vampire</ref>Date: 4/27/2020<br /> |- | 4. Vampyre <nowiki>https://www.urbandictionary.com</nowiki> "Urban Dictionary" <ref>https://www.urbandictionary.com/define.php?term=Vampyre</ref> Date: June/23/2011 <br /> |} <br /> <br> <noinclude>{{Chapter navigation with TOC||Alternative_Spelling|TOC mini}}</noinclude> <br> {{BookCat}} leivdwkvhba3qx278p5loqrnytllcfv 4675360 4675359 2026-10-10T00:21:47Z 3MMPEYTON 3393808 4675360 wikitext text/x-wiki == How Do You Spell Vam-Pai-Yer? == Phonetically, English speakers pronounce vampire this way "vamp-pie-yer" [Vam-Pai-Yer], yet how do people around the world spell and pronounce vampires? <br> <br> '''Etymology''': [word origin] <br> <br> A Wikipedian fluent in American-Spanish, wrote about the "etimologia" of the word as "...posiblemente a traves del 'vampyre' frances del 'vampir' aleman..." <br> The Wikipedian may have derived the origin of the word, vampire, from the dictionary: Merrian-webster.com. <br> Under entry: '''vampire''', Etymology: French, from German 'vampir...' <br> <br> The popular Urban Dictionary [online] claims the source of "vampyre" is "...the old english way of spelling 'Vampire.'" <br> <br> New words derived from <u>vampire</u> are: vampiric, and vampirish. <br> <br> Link: [[Create Vampires/Alternative Spelling]] <br> <br> Link: [[Create_Vampires/A_Definition_For_Vampire]] <br> <br> === Reference === {| class="wikitable" |- | How Do You Spell Vam-Pai-Yer? |- | 1. Vampiro http://www.es.wikipedia.org "Spanish Wikipedia" <ref>http://www.es.wikipedia.org/wiki/vampiro</ref>Date: 4/20/2020 |- | 2. Vampiro https://www.spanishdict.com "Spanishdict" <ref>https://www.spanishdict.com/translate/vampiro</ref> Date: 2/30/2020 |- | 3. Vampire https://www.merriam-webster.com "Merrian-Webster" Online Dictionary <ref>https://www.merriam-webster.com/dictionary/vampire</ref>Date: 4/27/2020<br /> |- | 4. Vampyre <nowiki>https://www.urbandictionary.com</nowiki> "Urban Dictionary" <ref>https://www.urbandictionary.com/define.php?term=Vampyre</ref> Date: June/23/2011 <br /> |} <br /> <br> <noinclude>{{Chapter navigation with TOC||Alternative_Spelling|TOC mini}}</noinclude> <br> {{BookCat}} e17erxchpnsxzy7bxcecetqqweh24j5 Create Vampires/A Definition For Vampire 0 486307 4675351 2026-10-10T00:03:37Z 3MMPEYTON 3393808 Created page with "== '''''A Definition For Vampire''':'' == What are Vampires? <br> The definition of a vampire varies depending on which dictionary one uses. For example: Dictionary.com has a general definition: Vampire: n. a preternatural being 2. (in Eastern European Folklore) a corpse, animated by an undeparted soul or demon. [https://www.dictionary.com/browse/vampire] According to Wikipedia.org, a vampire is "a creature from folklore that subsists by feeding on the vital essenc..." 4675351 wikitext text/x-wiki == '''''A Definition For Vampire''':'' == What are Vampires? <br> The definition of a vampire varies depending on which dictionary one uses. For example: Dictionary.com has a general definition: Vampire: n. a preternatural being 2. (in Eastern European Folklore) a corpse, animated by an undeparted soul or demon. [https://www.dictionary.com/browse/vampire] According to Wikipedia.org, a vampire is "a creature from folklore that subsists by feeding on the vital essence [ the blood] of the living." [https://en.wikipedia.org/wiki/Vampire] === Should You Capitalize The Word Vampire? === No. The word vampire should not be capitalized unless it is at the beginning of a sentence. <br> In general, we treat '''vampire''' like any other common noun, or like any other animal species such as cat, frog, or human. <br> The word '''vampire''' should be capitalized if it is part of a title. <br> Link: [[Create Vampires/Why Create Vampires|Create Vampires/Why Create Vampires - Wikibooks, open books for an open world]] <br> <br> Link: https://en.wikibooks.org/wiki/Create_Vampires/writers_who_did_not_create_vampires <br> <br> {{BookCat}} 1rmm0r4a5eyvm005vuupng9r64etcur 4675363 4675351 2026-10-10T00:29:06Z 3MMPEYTON 3393808 4675363 wikitext text/x-wiki == '''''A Definition For Vampire''':'' == What are Vampires? <br> The definition of a vampire varies depending on which dictionary one uses. For example: Dictionary.com has a general definition: Vampire: n. a preternatural being 2. (in Eastern European Folklore) a corpse, animated by an undeparted soul or demon. [https://www.dictionary.com/browse/vampire] According to Wikipedia.org, a vampire is "a creature from folklore that subsists by feeding on the vital essence [ the blood] of the living." [https://en.wikipedia.org/wiki/Vampire] === Should You Capitalize The Word Vampire? === No. The word vampire should not be capitalized unless it is at the beginning of a sentence. <br> In general, we treat '''vampire''' like any other common noun, or like any other animal species such as cat, frog, or human. <br> The word '''vampire''' should be capitalized if it is part of a title. <br> Link: [[Create Vampires/Why Create Vampires|Create Vampires/Why Create Vampires - Wikibooks, open books for an open world]] <br> <br> Link: https://en.wikibooks.org/wiki/Create_Vampires/writers_who_did_not_create_vampires <br> <br> <noinclude>{{Chapter navigation with TOC||Why_Create_Vampires|TOC mini}}</noinclude> <br> <br> {{BookCat}} rkjfa7mkpey1xbk4kxi42eqgdvluddl Create Vampires/All About Vampires 0 486308 4675404 2026-10-10T01:19:50Z 3MMPEYTON 3393808 Created page with "== All About Vampires == From early attempts to spell vam‑pai‑yer‑sa, to defining what vampires are, to tracing their origins in Slavic folklore, we have seen how the vampire concept has changed, adapted, and traveled across cultures. Many communities have created their own versions of vampire‑like beings, each shaped by local fears, values, and traditions. <br> <br> This book has explored vampires through historical records, folk stories, Science and Psychology,..." 4675404 wikitext text/x-wiki == All About Vampires == From early attempts to spell vam‑pai‑yer‑sa, to defining what vampires are, to tracing their origins in Slavic folklore, we have seen how the vampire concept has changed, adapted, and traveled across cultures. Many communities have created their own versions of vampire‑like beings, each shaped by local fears, values, and traditions. <br> <br> This book has explored vampires through historical records, folk stories, Science and Psychology, and the broader vampire archetype. We have examined common literary tropes and discussed ways to avoid familiar literary pitfalls when creating new vampire narratives. <br> <br> These ideas form a foundation for further study. Readers are encouraged to continue exploring the many cultural, historical, and literary dimensions of vampires. When creating vampire lore, I hope writers will continue to research vampire stories, while acting with a code of ethics when handling vampire folklore.<br> <br> With help from readers and writers, we can continue to explore vampires! <br> <br> Links: https://en.wikipedia.org/wiki/Vampire <br> <br> Link: https://scholardaily.com/understanding-the-american-folklore-society-code-of-ethics-a-cultural-compass-for-today-s-storytellers/ <br> <br> Link: https://en.wikipedia.org/wiki/Vampire_literature <br> <br> {{BookCat}} bzb1kxlo0o42bz5muqdf2cb4bq5li2w User talk:AyanshGuptagodzillapower 3 486311 4675428 2026-10-10T07:49:51Z EggRoll97 3178669 Notifying author about page tagging 4675428 wikitext text/x-wiki ==[[:The Permanent Advantage]]== {{tmbox|type=delete|text='''AyanshGuptagodzillapower, please [[Wikibooks:Requests for deletion#The Permanent Advantage|share your thoughts]] about whether to [[WB:WIW|keep]] or [[WB:DP|delete]] "[[:The Permanent Advantage|The Permanent Advantage]]".'''<br />You are being notified because you have contributed to this work. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 07:49, 10 October 2026 (UTC)}} 0yv2mzqtz3sbkrvmqt5o90bmvo6iy9t User:Morkoz/common.js 2 486312 4675433 2026-10-10T08:37:51Z Morkoz 3607239 + 4675433 javascript text/javascript importScript('User:JJPMaster/luna.js'); // Backlink: [[User:JJPMaster/luna.js]] f7e28xio3pj0ev5kjt9khdbjpi0y2c9 User:Morkoz/lunaoptions.json 2 486313 4675434 2026-10-10T08:37:55Z Morkoz 3607239 Setting default Luna preferences 4675434 json application/json { "rollback": { "rc": { "rb": false, "vand": false, "res": false }, "rcl": { "rb": false, "vand": false, "res": false }, "wl": { "rb": false, "vand": false, "res": false }, "ct": { "rb": false, "vand": false, "res": false }, "ht": { "rb": false, "vand": false, "res": false }, "df": { "rb": false, "vand": false, "res": false }, "oi": { "res": false } }, "CSD": {}, "CTP": {}, "CTF": {}, "DI": {}, "warn": {}, "welcome": {}, "welcomeUnregistered": {}, "tb": {}, "debug": false, "version": 0.82 } s621qkjp7g0eno91vj6mrgrgwbzbun5