<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.mediawiki.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=120.29.69.184</id>
	<title>MediaWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.mediawiki.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=120.29.69.184"/>
	<link rel="alternate" type="text/html" href="https://www.mediawiki.org/wiki/Special:Contributions/120.29.69.184"/>
	<updated>2026-08-23T01:34:47Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.47.0-wmf.16</generator>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Wikimedia_Technical_Conference/2018/Session_notes/Applying_the_MediaWiki_Platform_Architecture_Principles&amp;diff=7649792</id>
		<title>Wikimedia Technical Conference/2018/Session notes/Applying the MediaWiki Platform Architecture Principles</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Wikimedia_Technical_Conference/2018/Session_notes/Applying_the_MediaWiki_Platform_Architecture_Principles&amp;diff=7649792"/>
		<updated>2025-05-23T17:12:36Z</updated>

		<summary type="html">&lt;p&gt;120.29.69.184: Added content and then I can do that has to*&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=== Session Setup ===&lt;br /&gt;
&lt;br /&gt;
* https://phabricator.wikimedia.org/T206065&lt;br /&gt;
&lt;br /&gt;
* [[Wikimedia_Technical_Committee/MediaWiki_Platform_Architecture_Principles]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Theme: Architecting our code for change and sustainability&lt;br /&gt;
&lt;br /&gt;
Type: Technical Challenges&lt;br /&gt;
&lt;br /&gt;
Facilitation Exercise(s): Small group rotation.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Leader(s): Daniel Kinzler&lt;br /&gt;
&lt;br /&gt;
Facilitator: Zach&lt;br /&gt;
&lt;br /&gt;
Scribe: Nick, Irene, Michael, ???&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Description: The Wikimedia Technical Committee recently drafted a series of [[Wikimedia Technical Committee/MediaWiki Platform Architecture Principles|Architecture Principles]]. These principles and requirements SHOULD guide the Platform Evolution Program and other Wikimedia engineering endeavors. This session seeks to familiarize participants with the Architecture Principles and obtain feedback on those principles prior to the principles being placed on “last call”.&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Station 1:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Group Leader: Brion?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Goal 1: Allow users to consume, create, and interact in a form suitable for their devices, with the connectivity they have, in a language they speak.&lt;br /&gt;
&lt;br /&gt;
Goal 2: Empower contributors to collaboratively grow and curate content, and to build the tools that they need to do so.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Station 2:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Group Leader: Daniel?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Goal 5: Ensure programmer productivity by maintaining a code base that can be modified with confidence and understood without needless difficulty.&lt;br /&gt;
&lt;br /&gt;
Goal 4: Provide an open-source software stack that can be easily used, modified, and extended by others.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Station 3:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Group Leader: Timo&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Scribe: Irene&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Goal 3: Provide APIs that allow 3rd party interfaces to efficiently interact with wiki content. Provide reusable data that can be processed in bulk by 3rd party tools.&lt;br /&gt;
&lt;br /&gt;
Goal 6: Provide a web application that can be freely used to collaboratively collect and share knowledge.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Station 4:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Group Leader: Marko?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Goal 7: Ensure the continued availability and performance of WMF projects through scalable and resilient system design.&lt;br /&gt;
&lt;br /&gt;
Goal 8: Ensure the data integrity of the content on WMF systems, and protect the privacy of our users.&lt;br /&gt;
&lt;br /&gt;
=== Session Schedule: ===&lt;br /&gt;
14:00-14:10: Session Instructions and Set-up&lt;br /&gt;
&lt;br /&gt;
14:10-14:25: First rotation&lt;br /&gt;
&lt;br /&gt;
14:25-14:40: Second rotation&lt;br /&gt;
&lt;br /&gt;
14:40-14:55: Third rotation&lt;br /&gt;
&lt;br /&gt;
14:55-15:10: Fourth rotation&lt;br /&gt;
&lt;br /&gt;
15:10-15:30: Report backs&lt;br /&gt;
&lt;br /&gt;
Your verification settings apply for your account, only on the device where the settings were updated. All biometrics stored on your device for yourself or others can be used to verify purchases made through this account. Keep this in mind if you share your device with others, especially children. You can change your purchase verification settings anytime in Google Play. You can remove any face or fingerprint models in&lt;br /&gt;
&lt;br /&gt;
LYour verification settings apply for your account, only on the device where the settings were updated. All biometrics stored on your device for yourself or others can be used to verify purchases made through this account. Keep this in mind if you share your device with others, especially children. You can change your purchase verification settings anytime in Google Play. You can remove any face or fingerprint models in&lt;br /&gt;
&lt;br /&gt;
=== Summary ===&lt;br /&gt;
&lt;br /&gt;
* Cheol: there are more &amp;quot;SHOULD&amp;quot; than &amp;quot;MUST&amp;quot; in these. Is that purposeful?&lt;br /&gt;
* Sam: could split some of them so there is a MUST and a SHOULD&lt;br /&gt;
* Corey suggested: Maybe “Architecture” is too narrow, perhaps we should have “Technical Principles” or “Engineering Principles”. That would include processes, tooling, etc.&lt;br /&gt;
* Explicitly reference volunteer devs as “re-users” or “3rd party”&lt;br /&gt;
* Have “must be OSS” as a separate principle (but not arch!), not part of “reusable”?&lt;br /&gt;
&lt;br /&gt;
==== Goal 1 ====&lt;br /&gt;
&lt;br /&gt;
* TheDJ: We need to provide for a variety of workflows.  I don’t think we’re ready to do that which is why we haven’t been able to deliver. &lt;br /&gt;
* BV: Speech is another very different form factor, do we need to handle smaller units of text, pulling stuff from Wikidata, there’s a lot of vectors. &lt;br /&gt;
* Sage: a lot of our devices is tied to a specific proprietary ecosystem (apple, google).  Login is a nontrivial barrier. &lt;br /&gt;
* MH: Issue of norms -- editors have control over presentation as well as content -&amp;gt; DJ: WE could give editors that control&lt;br /&gt;
*IM: Localized by default, that’s a pretty significant lift in a lot of cases.  Separation of data layer from processing layer and display layer is a necessity. &lt;br /&gt;
*BV: A lot of these are aspirational, but we want to make sure our system provides for this.  Need to provide infrastructure for doing translations so that when conditions improve, editors can do their work.&lt;br /&gt;
&lt;br /&gt;
==== Goal 2 ====&lt;br /&gt;
&lt;br /&gt;
* AH: I don’t like “ensures” consistency, prefer “directs toward” consistency.  Hesitant when we take a parental role over contributors.&lt;br /&gt;
&lt;br /&gt;
==== Goal 3 ====&lt;br /&gt;
&lt;br /&gt;
* entire goal talks about 3rd party interface but it should talk about public interface - strike 3rd party and change to public? we want to phrase this in a way that allows for 3rd parties which makes it more inclusions; 3rd party and public api are synonymous&lt;br /&gt;
* action item: rephrasing goal to change 3rd party to public, or more obviously including those APIs&lt;br /&gt;
* what does semi-structured mean? timo doesn’t know. action item to find out and probably strike&lt;br /&gt;
* &amp;quot;data formats&amp;quot; a lot of confusion around that wording&lt;br /&gt;
* not covered - anything about public vs private, access controls, rights controls; separation between access to public and private&lt;br /&gt;
&lt;br /&gt;
==== Goal 4 ====&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Software MUST provide a test suite&amp;quot;. - change other testability SHOULD to a MUST.&lt;br /&gt;
* No point in every single class being reusable. But ultimately comes back to modularization/granularity&lt;br /&gt;
* Accessibility! You need design resources. Good user experience needs user expert feedback and UI design feedback.   &lt;br /&gt;
* Re: &amp;quot;deprecation must be documented&amp;quot; - should be announced, advertised, more effectively - which venue?&lt;br /&gt;
&lt;br /&gt;
==== Goal 5 ====&lt;br /&gt;
&lt;br /&gt;
* Currently not designed for testability&lt;br /&gt;
* Conceptual model could be improved&lt;br /&gt;
&lt;br /&gt;
* [2nd mention of] Design for testability doesn&#039;t demand actual tests!&lt;br /&gt;
* &amp;quot;We should have something like vagrant to help ppl develop&amp;quot;, and &amp;quot;we should have [?] to help people install&amp;quot; - Should this go in Product Practices and Guidance? Yes.&lt;br /&gt;
* Who is &amp;quot;we&amp;quot;? Whoever subscribes to these principles. What is &amp;quot;MW&amp;quot;? Is it just core or all extensions?&lt;br /&gt;
* Point #1 is unclear. &amp;quot;Reflect conceptual model …&amp;quot; is obfuscated!&lt;br /&gt;
* How to determine external stakeholders - might not know at the time.  How much resources do we invest into finding out who might reuse it and their needs?&lt;br /&gt;
* &amp;quot;Must be testable&amp;quot; vs &amp;quot;must provide test suite&amp;quot; - how designed vs which code actually exists.&lt;br /&gt;
&lt;br /&gt;
==== Goal 6 ====&lt;br /&gt;
&lt;br /&gt;
* definition of terms (stack and standard hosting platforms esp) so we can collaboratively create this&lt;br /&gt;
* tradeoff between catering the wmf use-cases vs others? important to decide!&lt;br /&gt;
&lt;br /&gt;
==== Goal 7 ====&lt;br /&gt;
&lt;br /&gt;
* Gergo: tradeoff is per-user customization vs scalability &amp;amp; isolation boundaries vs ease of data access&lt;br /&gt;
&lt;br /&gt;
==== Goal 8 ====&lt;br /&gt;
&lt;br /&gt;
* John: change SHOULD to MUST in goal 8 item 1&lt;br /&gt;
* Marko: add data sanitization&lt;/div&gt;</summary>
		<author><name>120.29.69.184</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Wikimedia_Technical_Conference/2018/Session_notes/Applying_the_MediaWiki_Platform_Architecture_Principles&amp;diff=7649789</id>
		<title>Wikimedia Technical Conference/2018/Session notes/Applying the MediaWiki Platform Architecture Principles</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Wikimedia_Technical_Conference/2018/Session_notes/Applying_the_MediaWiki_Platform_Architecture_Principles&amp;diff=7649789"/>
		<updated>2025-05-23T17:12:08Z</updated>

		<summary type="html">&lt;p&gt;120.29.69.184: Added to the list of things to do*&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=== Session Setup ===&lt;br /&gt;
&lt;br /&gt;
* https://phabricator.wikimedia.org/T206065&lt;br /&gt;
&lt;br /&gt;
* [[Wikimedia_Technical_Committee/MediaWiki_Platform_Architecture_Principles]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Theme: Architecting our code for change and sustainability&lt;br /&gt;
&lt;br /&gt;
Type: Technical Challenges&lt;br /&gt;
&lt;br /&gt;
Facilitation Exercise(s): Small group rotation.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Leader(s): Daniel Kinzler&lt;br /&gt;
&lt;br /&gt;
Facilitator: Zach&lt;br /&gt;
&lt;br /&gt;
Scribe: Nick, Irene, Michael, ???&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Description: The Wikimedia Technical Committee recently drafted a series of [[Wikimedia Technical Committee/MediaWiki Platform Architecture Principles|Architecture Principles]]. These principles and requirements SHOULD guide the Platform Evolution Program and other Wikimedia engineering endeavors. This session seeks to familiarize participants with the Architecture Principles and obtain feedback on those principles prior to the principles being placed on “last call”.&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Station 1:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Group Leader: Brion?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Goal 1: Allow users to consume, create, and interact in a form suitable for their devices, with the connectivity they have, in a language they speak.&lt;br /&gt;
&lt;br /&gt;
Goal 2: Empower contributors to collaboratively grow and curate content, and to build the tools that they need to do so.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Station 2:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Group Leader: Daniel?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Goal 5: Ensure programmer productivity by maintaining a code base that can be modified with confidence and understood without needless difficulty.&lt;br /&gt;
&lt;br /&gt;
Goal 4: Provide an open-source software stack that can be easily used, modified, and extended by others.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Station 3:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Group Leader: Timo&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Scribe: Irene&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Goal 3: Provide APIs that allow 3rd party interfaces to efficiently interact with wiki content. Provide reusable data that can be processed in bulk by 3rd party tools.&lt;br /&gt;
&lt;br /&gt;
Goal 6: Provide a web application that can be freely used to collaboratively collect and share knowledge.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Station 4:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Group Leader: Marko?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Goal 7: Ensure the continued availability and performance of WMF projects through scalable and resilient system design.&lt;br /&gt;
&lt;br /&gt;
Goal 8: Ensure the data integrity of the content on WMF systems, and protect the privacy of our users.&lt;br /&gt;
&lt;br /&gt;
=== Session Schedule: ===&lt;br /&gt;
14:00-14:10: Session Instructions and Set-up&lt;br /&gt;
&lt;br /&gt;
14:10-14:25: First rotation&lt;br /&gt;
&lt;br /&gt;
14:25-14:40: Second rotation&lt;br /&gt;
&lt;br /&gt;
14:40-14:55: Third rotation&lt;br /&gt;
&lt;br /&gt;
14:55-15:10: Fourth rotation&lt;br /&gt;
&lt;br /&gt;
15:10-15:30: Report backs&lt;br /&gt;
&lt;br /&gt;
Your verification settings apply for your account, only on the device where the settings were updated. All biometrics stored on your device for yourself or others can be used to verify purchases made through this account. Keep this in mind if you share your device with others, especially children. You can change your purchase verification settings anytime in Google Play. You can remove any face or fingerprint models in&lt;br /&gt;
&lt;br /&gt;
=== Action items ===&lt;br /&gt;
&lt;br /&gt;
* Clarify principles that led to confusion. Discuss suggestions on the talk page of the principles document, [[Talk:Wikimedia Technical Committee/MediaWiki Platform Architecture Principles|https://www.mediawiki.org/wiki/Talk:Wikimedia_Technical_Committee/MediaWiki_Platform_Architecture_Principles]] (Daniel)&lt;br /&gt;
* Align Architecture Goals with Product Visions (Corey)&lt;br /&gt;
&lt;br /&gt;
=== Summary ===&lt;br /&gt;
&lt;br /&gt;
* Cheol: there are more &amp;quot;SHOULD&amp;quot; than &amp;quot;MUST&amp;quot; in these. Is that purposeful?&lt;br /&gt;
* Sam: could split some of them so there is a MUST and a SHOULD&lt;br /&gt;
* Corey suggested: Maybe “Architecture” is too narrow, perhaps we should have “Technical Principles” or “Engineering Principles”. That would include processes, tooling, etc.&lt;br /&gt;
* Explicitly reference volunteer devs as “re-users” or “3rd party”&lt;br /&gt;
* Have “must be OSS” as a separate principle (but not arch!), not part of “reusable”?&lt;br /&gt;
&lt;br /&gt;
==== Goal 1 ====&lt;br /&gt;
&lt;br /&gt;
* TheDJ: We need to provide for a variety of workflows.  I don’t think we’re ready to do that which is why we haven’t been able to deliver. &lt;br /&gt;
* BV: Speech is another very different form factor, do we need to handle smaller units of text, pulling stuff from Wikidata, there’s a lot of vectors. &lt;br /&gt;
* Sage: a lot of our devices is tied to a specific proprietary ecosystem (apple, google).  Login is a nontrivial barrier. &lt;br /&gt;
* MH: Issue of norms -- editors have control over presentation as well as content -&amp;gt; DJ: WE could give editors that control&lt;br /&gt;
*IM: Localized by default, that’s a pretty significant lift in a lot of cases.  Separation of data layer from processing layer and display layer is a necessity. &lt;br /&gt;
*BV: A lot of these are aspirational, but we want to make sure our system provides for this.  Need to provide infrastructure for doing translations so that when conditions improve, editors can do their work.&lt;br /&gt;
&lt;br /&gt;
==== Goal 2 ====&lt;br /&gt;
&lt;br /&gt;
* AH: I don’t like “ensures” consistency, prefer “directs toward” consistency.  Hesitant when we take a parental role over contributors.&lt;br /&gt;
&lt;br /&gt;
==== Goal 3 ====&lt;br /&gt;
&lt;br /&gt;
* entire goal talks about 3rd party interface but it should talk about public interface - strike 3rd party and change to public? we want to phrase this in a way that allows for 3rd parties which makes it more inclusions; 3rd party and public api are synonymous&lt;br /&gt;
* action item: rephrasing goal to change 3rd party to public, or more obviously including those APIs&lt;br /&gt;
* what does semi-structured mean? timo doesn’t know. action item to find out and probably strike&lt;br /&gt;
* &amp;quot;data formats&amp;quot; a lot of confusion around that wording&lt;br /&gt;
* not covered - anything about public vs private, access controls, rights controls; separation between access to public and private&lt;br /&gt;
&lt;br /&gt;
==== Goal 4 ====&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Software MUST provide a test suite&amp;quot;. - change other testability SHOULD to a MUST.&lt;br /&gt;
* No point in every single class being reusable. But ultimately comes back to modularization/granularity&lt;br /&gt;
* Accessibility! You need design resources. Good user experience needs user expert feedback and UI design feedback.   &lt;br /&gt;
* Re: &amp;quot;deprecation must be documented&amp;quot; - should be announced, advertised, more effectively - which venue?&lt;br /&gt;
&lt;br /&gt;
==== Goal 5 ====&lt;br /&gt;
&lt;br /&gt;
* Currently not designed for testability&lt;br /&gt;
* Conceptual model could be improved&lt;br /&gt;
&lt;br /&gt;
* [2nd mention of] Design for testability doesn&#039;t demand actual tests!&lt;br /&gt;
* &amp;quot;We should have something like vagrant to help ppl develop&amp;quot;, and &amp;quot;we should have [?] to help people install&amp;quot; - Should this go in Product Practices and Guidance? Yes.&lt;br /&gt;
* Who is &amp;quot;we&amp;quot;? Whoever subscribes to these principles. What is &amp;quot;MW&amp;quot;? Is it just core or all extensions?&lt;br /&gt;
* Point #1 is unclear. &amp;quot;Reflect conceptual model …&amp;quot; is obfuscated!&lt;br /&gt;
* How to determine external stakeholders - might not know at the time.  How much resources do we invest into finding out who might reuse it and their needs?&lt;br /&gt;
* &amp;quot;Must be testable&amp;quot; vs &amp;quot;must provide test suite&amp;quot; - how designed vs which code actually exists.&lt;br /&gt;
&lt;br /&gt;
==== Goal 6 ====&lt;br /&gt;
&lt;br /&gt;
* definition of terms (stack and standard hosting platforms esp) so we can collaboratively create this&lt;br /&gt;
* tradeoff between catering the wmf use-cases vs others? important to decide!&lt;br /&gt;
&lt;br /&gt;
==== Goal 7 ====&lt;br /&gt;
&lt;br /&gt;
* Gergo: tradeoff is per-user customization vs scalability &amp;amp; isolation boundaries vs ease of data access&lt;br /&gt;
&lt;br /&gt;
==== Goal 8 ====&lt;br /&gt;
&lt;br /&gt;
* John: change SHOULD to MUST in goal 8 item 1&lt;br /&gt;
* Marko: add data sanitization&lt;/div&gt;</summary>
		<author><name>120.29.69.184</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Manual:Html.php&amp;diff=7649788</id>
		<title>Manual:Html.php</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Manual:Html.php&amp;diff=7649788"/>
		<updated>2025-05-23T17:08:00Z</updated>

		<summary type="html">&lt;p&gt;120.29.69.184: Added to the list of things to*&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Your verification settings apply for your account, only on the device where the settings were updated. All biometrics stored on your device for yourself or others can be used to verify purchases made through this account. Keep this in mind if you share your device with others, especially children. You can change your purchase verification settings anytime in Google Play. You can remove any face or fingerprint models in&lt;br /&gt;
&lt;br /&gt;
==Configuration options==&lt;br /&gt;
* [[Manual:$wgMimeType]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Methods== &amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your verification settings apply for your account, only on the device where the settings were updated. All biometrics stored on your device for yourself or others can be used to verify purchases made through this account. Keep this in mind if you share your device with others, especially children. You can change your purchase verification settings anytime in Google Play. You can remove any face or fingerprint models in&lt;br /&gt;
&lt;br /&gt;
Your verification settings apply for your account, only on the device where the settings were updated. All biometrics stored on your device for yourself or others can be used to verify purchases made through this account. Keep this in mind if you share your device with others, especially children. You can change your purchase verification settings anytime in Google Play. You can remove any face or fingerprint models in&lt;br /&gt;
&lt;br /&gt;
Your verification settings apply for your account, only on the device where the settings were updated. All biometrics stored on your device for yourself or others can be used to verify purchases made through this account. Keep this in mind if you share your device with others, especially children. You can change your purchase verification settings anytime in Google Play. You can remove any face or fingerprint models in&lt;/div&gt;</summary>
		<author><name>120.29.69.184</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Manual:Html.php&amp;diff=7649785</id>
		<title>Manual:Html.php</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Manual:Html.php&amp;diff=7649785"/>
		<updated>2025-05-23T17:04:55Z</updated>

		<summary type="html">&lt;p&gt;120.29.69.184: Added content for more viewer and then we can go*&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Your verification settings apply for your account, only on the device where the settings were updated. All biometrics stored on your device for yourself or others can be used to verify purchases made through this account. Keep this in mind if you share your device with others, especially children. You can change your purchase verification settings anytime in Google Play. You can remove any face or fingerprint models in&lt;br /&gt;
&lt;br /&gt;
==Configuration options==&lt;br /&gt;
* [[Manual:$wgMimeType]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Methods== &amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your verification settings apply for your account, only on the device where the settings were updated. All biometrics stored on your device for yourself or others can be used to verify purchases made through this account. Keep this in mind if you share your device with others, especially children. You can change your purchase verification settings anytime in Google Play. You can remove any face or fingerprint models in&lt;br /&gt;
&lt;br /&gt;
Your verification settings apply for your account, only on the device where the settings were updated. All biometrics stored on your device for yourself or others can be used to verify purchases made through this account. Keep this in mind if you share your device with others, especially children. You can change your purchase verification settings anytime in Google Play. You can remove any face or fingerprint models in&lt;br /&gt;
&lt;br /&gt;
===Other===&lt;br /&gt;
* isXmlMimeType() - Determines if the given MIME type is xml.&lt;br /&gt;
* srcSet() - Generate a srcset attribute value.&lt;/div&gt;</summary>
		<author><name>120.29.69.184</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Manual:Html.php&amp;diff=7649783</id>
		<title>Manual:Html.php</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Manual:Html.php&amp;diff=7649783"/>
		<updated>2025-05-23T17:04:15Z</updated>

		<summary type="html">&lt;p&gt;120.29.69.184: Fixing typo added control and prevention*&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Your verification settings apply for your account, only on the device where the settings were updated. All biometrics stored on your device for yourself or others can be used to verify purchases made through this account. Keep this in mind if you share your device with others, especially children. You can change your purchase verification settings anytime in Google Play. You can remove any face or fingerprint models in&lt;br /&gt;
&lt;br /&gt;
==Configuration options==&lt;br /&gt;
* [[Manual:$wgMimeType]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Methods== &amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your verification settings apply for your account, only on the device where the settings were updated. All biometrics stored on your device for yourself or others can be used to verify purchases made through this account. Keep this in mind if you share your device with others, especially children. You can change your purchase verification settings anytime in Google Play. You can remove any face or fingerprint models in&lt;br /&gt;
&lt;br /&gt;
===Methods for specific elements===&lt;br /&gt;
* buttonAttributes()&lt;br /&gt;
* getTextInputAttributes() - Modifies a set of attributes meant for text input elements and apply a set of default attributes.&lt;br /&gt;
* linkButton()&lt;br /&gt;
* submitButton()&lt;br /&gt;
* input()&lt;br /&gt;
* check() - checkboxes&lt;br /&gt;
* radio() - radio buttons&lt;br /&gt;
* label()&lt;br /&gt;
* hidden()&lt;br /&gt;
* textarea()&lt;br /&gt;
* &lt;br /&gt;
* scripts:&lt;br /&gt;
** inlineScript()&lt;br /&gt;
** linkedScript()&lt;br /&gt;
* styles:&lt;br /&gt;
** inlineStyle()&lt;br /&gt;
** linkedStyle()&lt;br /&gt;
* Message boxes&lt;br /&gt;
** noticeBox()&lt;br /&gt;
** warningBox()&lt;br /&gt;
** etc.&lt;br /&gt;
* Drop-down box for selecting a namespace&lt;br /&gt;
** namespaceSelector()&lt;br /&gt;
** namespaceSelectorOptions()&lt;br /&gt;
* htmlHeader()&lt;br /&gt;
&lt;br /&gt;
===Other===&lt;br /&gt;
* isXmlMimeType() - Determines if the given MIME type is xml.&lt;br /&gt;
* srcSet() - Generate a srcset attribute value.&lt;/div&gt;</summary>
		<author><name>120.29.69.184</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Manual:Html.php&amp;diff=7649782</id>
		<title>Manual:Html.php</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Manual:Html.php&amp;diff=7649782"/>
		<updated>2025-05-23T17:03:34Z</updated>

		<summary type="html">&lt;p&gt;120.29.69.184: Fixing typo added control and prevention*&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Your verification settings apply for your account, only on the device where the settings were updated. All biometrics stored on your device for yourself or others can be used to verify purchases made through this account. Keep this in mind if you share your device with others, especially children. You can change your purchase verification settings anytime in Google Play. You can remove any face or fingerprint models in&lt;br /&gt;
&lt;br /&gt;
==Configuration options==&lt;br /&gt;
* [[Manual:$wgMimeType]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Methods== &amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===General methods for HTML elements and attributes===&lt;br /&gt;
* rawElement() - &amp;lt;translate&amp;gt;&amp;lt;!--T:5--&amp;gt; Returns an HTML element in a string&amp;lt;/translate&amp;gt;&lt;br /&gt;
* element() - similar but escapes HTML-escapes incoming content&lt;br /&gt;
* openElement()&lt;br /&gt;
* closeElement()&lt;br /&gt;
* expandAttributes()&lt;br /&gt;
&lt;br /&gt;
===Methods for specific elements===&lt;br /&gt;
* buttonAttributes()&lt;br /&gt;
* getTextInputAttributes() - Modifies a set of attributes meant for text input elements and apply a set of default attributes.&lt;br /&gt;
* linkButton()&lt;br /&gt;
* submitButton()&lt;br /&gt;
* input()&lt;br /&gt;
* check() - checkboxes&lt;br /&gt;
* radio() - radio buttons&lt;br /&gt;
* label()&lt;br /&gt;
* hidden()&lt;br /&gt;
* textarea()&lt;br /&gt;
* &lt;br /&gt;
* scripts:&lt;br /&gt;
** inlineScript()&lt;br /&gt;
** linkedScript()&lt;br /&gt;
* styles:&lt;br /&gt;
** inlineStyle()&lt;br /&gt;
** linkedStyle()&lt;br /&gt;
* Message boxes&lt;br /&gt;
** noticeBox()&lt;br /&gt;
** warningBox()&lt;br /&gt;
** etc.&lt;br /&gt;
* Drop-down box for selecting a namespace&lt;br /&gt;
** namespaceSelector()&lt;br /&gt;
** namespaceSelectorOptions()&lt;br /&gt;
* htmlHeader()&lt;br /&gt;
&lt;br /&gt;
===Other===&lt;br /&gt;
* isXmlMimeType() - Determines if the given MIME type is xml.&lt;br /&gt;
* srcSet() - Generate a srcset attribute value.&lt;/div&gt;</summary>
		<author><name>120.29.69.184</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=HTML&amp;diff=7649781</id>
		<title>HTML</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=HTML&amp;diff=7649781"/>
		<updated>2025-05-23T17:02:27Z</updated>

		<summary type="html">&lt;p&gt;120.29.69.184: Fixing typo added control and prevention*&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Your verification settings apply for your account, only on the device where the settings were updated. All biometrics stored on your device for yourself or others can be used to verify purchases made through this account. Keep this in mind if you share your device with others, especially children. You can change your purchase verification settings anytime in Google Play. You can remove any face or fingerprint models in&lt;/div&gt;</summary>
		<author><name>120.29.69.184</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Extension:TimedMediaHandler/VP9_transition&amp;diff=7599647</id>
		<title>Extension:TimedMediaHandler/VP9 transition</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Extension:TimedMediaHandler/VP9_transition&amp;diff=7599647"/>
		<updated>2025-05-01T01:22:05Z</updated>

		<summary type="html">&lt;p&gt;120.29.69.184: Typo*&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I have started migrating Wikimedia&#039;s video playback transcodes from the older VP8 and Vorbis codecs to the newer WebM VP9 and Opus codecs. The transition started July 30, 2018, and may take some weeks to complete for old files.&lt;br /&gt;
&lt;br /&gt;
Big thanks to Wikimedia&#039;s Ops team for reassigning some servers that were freed up recently to help with this transition!&lt;br /&gt;
&lt;br /&gt;
Also thanks to Microsoft for adopting the royalty-free, open-source VP9 and Opus codecs in MS Edge; as of the latest Windows 10 update they &amp;quot;just work&amp;quot; out of the box, as they do in Chrome and Firefox.&lt;br /&gt;
&lt;br /&gt;
== What does this mean? ==&lt;br /&gt;
&lt;br /&gt;
The biggest difference is a change in bandwidth/quality trade-offs for the video files used for on-wiki playback. Many files will be about 30% smaller at similar quality, while others will be similar size or a bit larger but much better quality.&lt;br /&gt;
&lt;br /&gt;
The filenames of the actual playback files will change slightly, from &amp;quot;.webm&amp;quot; to &amp;quot;.vp9.webm&amp;quot;. Direct links to these transcoded playback files are discouraged; API clients should use videoinfo/derivatives or transcodestatus to get current URLs.&lt;br /&gt;
&lt;br /&gt;
There is no change in support for uploaded file formats; existing original files are not being modified, and every file that works now will continue to work. URLs to existing original files will continue to work.&lt;br /&gt;
&lt;br /&gt;
Encoding times could be about 2x times longer on average, depending on resolution and load.&lt;br /&gt;
&lt;br /&gt;
== Browser support ==&lt;br /&gt;
&lt;br /&gt;
Browser support is almost the same as for the previous configuration.&lt;br /&gt;
&lt;br /&gt;
WebM VP9/Opus videos are natively supported by:&lt;br /&gt;
* Chrome and Chromium-based browsers (Opera, Brave, etc)&lt;br /&gt;
* Firefox&lt;br /&gt;
* Edge 17 and up (Windows 10 version 1803)&lt;br /&gt;
&lt;br /&gt;
And are supported via the [https://github.com/brion/ogv.js ogv.js player shim] on:&lt;br /&gt;
* Safari (up to 720p24 on fast machines)&lt;br /&gt;
* Edge 16 and below (up to 720p24 on fast machines)&lt;br /&gt;
* Internet Explorer 11 (up to 240p24 on fast machines; requires Flash for audio)&lt;br /&gt;
&lt;br /&gt;
Note that the old [https://www.webmproject.org/ie/ Google WebM Components for IE] did allow for native VP8/Vorbis playback in IE 11 if you manually installed it, but that package does not support VP9/Opus. If you require high-resolution video playback and are affected by this, the recommended upgrade path is to use another browser such as Chrome or Firefox in place of IE 11.&lt;br /&gt;
&lt;br /&gt;
== Server-side changes ==&lt;br /&gt;
&lt;br /&gt;
Because VP9 encoding is more complex than VP8, the scaled and transcoded output files will take longer to produce than the old VP8 files did at the same CPU thread count. To compensate and to help along the transition, some additional machines have been reassigned to handle the specialized job queue for video transcoding. (These were previously running image thumbnailing until they were replaced by the newer thumbor system.)&lt;br /&gt;
&lt;br /&gt;
The end-to-end conversion time for each file will get about 2x slower per thread, but overall times should stay close to the same as before by [https://phabricator.wikimedia.org/T190333 deploying updated libvpx and ffmpeg packages supporting macroblock-row-based multithreading] first, allowing twice as many threads to be used.&lt;br /&gt;
&lt;br /&gt;
== Encoding changes ==&lt;br /&gt;
&lt;br /&gt;
Additionally the encoder quality/speed/bandwidth settings are being changed to err on the side of quality with modest speed. Many files come out with much lower bandwidth than the current VP8 fixed-target-rate settings, while others with high frame rates, or lots of detail and motion, will be the same or even larger in exchange for much better picture quality.&lt;br /&gt;
&lt;br /&gt;
This particularly affected 60fps files, which previously looked poor due to using less than half the recommended bitrate, or files with lots of detail and motion such as [[Commons:File:Spring Morning over a Frog Pond at the base of a face of Okanagan Mountain.webm]].&lt;br /&gt;
&lt;br /&gt;
This is probably an appopriate trade-off for encyclopedic data, though we may be able to adjust the maximum bitrates later on.&lt;br /&gt;
&lt;br /&gt;
== Transition ==&lt;br /&gt;
&lt;br /&gt;
Newly uploaded files will start producing VP9 output automatically.&lt;br /&gt;
&lt;br /&gt;
Old files will continue to hold onto their VP8 versions, which will continue to play them until they get replaced.&lt;br /&gt;
&lt;br /&gt;
A batch process (requeueTranscodes.php) will go through the backlog generating new VP9 versions to replace them. This process is throttled to minimize disruption to foreground operations.&lt;br /&gt;
&lt;br /&gt;
Note to bot tool authors: please do not manually reschedule a large number of files for new VP9 transcodes! The batch process throttles itself but anything scheduled via the UI or API will run as soon as possible. Too many will clog up the queue.&lt;br /&gt;
&lt;br /&gt;
The complete transition is expected to take several weeks, with a large margin of error, and should present minimal disruption.&lt;br /&gt;
&lt;br /&gt;
== Technical details ==&lt;br /&gt;
&lt;br /&gt;
Filenames/URLs for old VP8 transcodes end in &amp;quot;.webm&amp;quot;; the new VP9 transcodes end in &amp;quot;.vp9.webm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
For instance this output file:&lt;br /&gt;
https://upload.wikimedia.org/wikipedia/commons/transcoded/3/3e/Ailurus_fulgens.ogv/Ailurus_fulgens.ogv.480p.webm&lt;br /&gt;
will be obsoleted by this one (does not yet exist):&lt;br /&gt;
https://upload.wikimedia.org/wikipedia/commons/transcoded/3/3e/Ailurus_fulgens.ogv/Ailurus_fulgens.ogv.480p.vp9.webm&lt;br /&gt;
&lt;br /&gt;
== Video scaler provisioning notes ==&lt;br /&gt;
&lt;br /&gt;
I have set $wgFFmpegThreads to 8, which&#039;ll provide huge benefits for HD and UHD resolutions.&lt;br /&gt;
&lt;br /&gt;
IIRC the newly set up machines, and also the old machines, have dual 10-core/20-thread processors. In theory this means could crank the threads up to 40 (hyperthreading) for maximum parallelism when lightly loaded, however there are diminishing returns beyond 8 threads (for HD) or 2-4 threads (for SD and low resolutions). Due to the way [https://groups.google.com/a/webmproject.org/forum/#!topic/codec-devel/oiHjgEdii2U row-mt threading] in libvpx works, not all threads will be loaded at all times, so you won&#039;t see sustained 1600% CPU load from a 16-thread ffmpeg process (at full HD you&#039;d expect to see more like 800%, lower resolutions more like 400% or 200%). Thus the configuration should overprovision from the point of view of $wgFFmpegThreads * the number of job runners per machine.&lt;br /&gt;
&lt;br /&gt;
Due to increased thread count and often longer per-thread task running, we have increased $wgTranscodeBackgroundMemoryLimit and $wgTranscodeBackgroundTimeLimit by 2 or so.&lt;br /&gt;
&lt;br /&gt;
== Risks and contingency plans ==&lt;br /&gt;
&lt;br /&gt;
Going forward with VP9 on the current Debian 9.x ffmpeg package would haved increase encoding time by 3-4x, which may cause timeouts for very long videos (conference talks, full-length films). We prioritized a [https://phabricator.wikimedia.org/T190333 backport of libvpx 1.7] to mitigate this (allows using more cores, which lets us stretch our legs on the 20-core/40-thread queue runners). Moritz completed the backport; [https://phabricator.wikimedia.org/T190334 TMH patch to allow using this mode] once it&#039;s available has been merged.&lt;br /&gt;
&lt;br /&gt;
The main remaining risk is that we&#039;ll uncover new bugs in the encoding process while running batch encodes, which could lead to clogging the queue runners.&lt;br /&gt;
&lt;br /&gt;
Batch process for running the re-encoders is requeueTranscodes.php which will run on mwmaint1001 in a tmux session, and can be shut down by a root in case of emergency. Shutting down this process will prevent new encoding jobs from being enqueued for old uploads, but won&#039;t stop for new uploads.&lt;br /&gt;
&lt;br /&gt;
If something goes awry with the transcoder processes, problems should be isolated to the set of machines running job queue runners for the WebVideoTranscode / WebVideoTranscodePrioritized queues. They can be shut down, reset, whatever as necessary if necessary.&lt;br /&gt;
&lt;br /&gt;
If a major compatibility problem is found that requires rolling back to VP8, contingency plan is roughly:&lt;br /&gt;
* comment out the $wgEnabledTranscodes section to restore VP8 defaults&lt;br /&gt;
* create new VP8 .webm files for newly-uploaded files with requeueTranscodes.php&lt;br /&gt;
* leave the .vp9.webm files where they are or delete them with requeueTranscodes.php&lt;br /&gt;
* clear out the job queue manually if necessary&lt;br /&gt;
&lt;br /&gt;
== Deployment notes ==&lt;br /&gt;
&lt;br /&gt;
Monday&lt;br /&gt;
* initial deployment of new config went out ok Monday, July 30 2018&lt;br /&gt;
&lt;br /&gt;
Tuesday&lt;br /&gt;
* found two files converted overnight that tried to resize to 0x0, which failed. Rerunning manually worked. Keep an eye out for this failure mode.&lt;br /&gt;
* throttle on requeueTranscodes.php is broken because production job queue doesn&#039;t report lengths back as expected (https://phabricator.wikimedia.org/T200813) Have a workaround ready to stage. In the meantime, a couple hundred transcodes are running. :)&lt;br /&gt;
* [https://grafana.wikimedia.org/dashboard/db/prometheus-cluster-breakdown?var-cluster=videoscaler&amp;amp;orgId=1 handy grafana link for load monitoring]!&lt;br /&gt;
* throttle fix deployed&lt;br /&gt;
* requeueTranscodes.php running on mwmaint1001!&lt;br /&gt;
* (late night) encountered some failures (T200873), stopping batch process pending figuring out what was going on&lt;br /&gt;
* errors appear to be related to hhvm config updates. continuing batch process, will clean up errors tomorrow.&lt;br /&gt;
&lt;br /&gt;
Wednesday 2018-08-01&lt;br /&gt;
* found a couple errors with the &#039;frames left over&#039; bug; workaround is already in queue. scheduling to deploy later today&lt;br /&gt;
* found that existing VP8 were no longer being used for playback or reported in videoinfo derivatives; need to keep them enabled for now. this will result in new uploads being encoded in both vp8 and vp9 for now, which is ok.&lt;br /&gt;
* deployed those fixes&lt;br /&gt;
&lt;br /&gt;
Thursday 2018-08-02&lt;br /&gt;
* experimenting with [[Extension:TimedMediaHandler/VP9 transition/reports#Breakdown|histogram mode on reportTranscodes.php]] to better understand the bitrate size distribution&lt;br /&gt;
* found that some old files have weird 0 or long durations which skew those results [https://phabricator.wikimedia.org/T201127 T201127]&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Monday 2018-08-13&lt;br /&gt;
* still going, with modest load on the machines; could go faster with higher runner process count I think...&lt;br /&gt;
&lt;br /&gt;
.... got paused for the September-October datacenter switchover ...&lt;br /&gt;
&lt;br /&gt;
Friday 2018-10-12&lt;br /&gt;
* started the backfill process up again now that we&#039;re back in eqiad data center&lt;/div&gt;</summary>
		<author><name>120.29.69.184</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Extension:TimedMediaHandler/VP9_transition&amp;diff=7599644</id>
		<title>Extension:TimedMediaHandler/VP9 transition</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Extension:TimedMediaHandler/VP9_transition&amp;diff=7599644"/>
		<updated>2025-05-01T01:21:39Z</updated>

		<summary type="html">&lt;p&gt;120.29.69.184: Added content posted here&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{historical}}&lt;br /&gt;
&lt;br /&gt;
I have started migrating Wikimedia&#039;s video playback transcodes from the older VP8 and Vorbis codecs to the newer WebM VP9 and Opus codecs. The transition started July 30, 2018, and may take some weeks to complete for old files.&lt;br /&gt;
&lt;br /&gt;
Big thanks to Wikimedia&#039;s Ops team for reassigning some servers that were freed up recently to help with this transition!&lt;br /&gt;
&lt;br /&gt;
Also thanks to Microsoft for adopting the royalty-free, open-source VP9 and Opus codecs in MS Edge; as of the latest Windows 10 update they &amp;quot;just work&amp;quot; out of the box, as they do in Chrome and Firefox.&lt;br /&gt;
&lt;br /&gt;
== What does this mean? ==&lt;br /&gt;
&lt;br /&gt;
The biggest difference is a change in bandwidth/quality trade-offs for the video files used for on-wiki playback. Many files will be about 30% smaller at similar quality, while others will be similar size or a bit larger but much better quality.&lt;br /&gt;
&lt;br /&gt;
The filenames of the actual playback files will change slightly, from &amp;quot;.webm&amp;quot; to &amp;quot;.vp9.webm&amp;quot;. Direct links to these transcoded playback files are discouraged; API clients should use videoinfo/derivatives or transcodestatus to get current URLs.&lt;br /&gt;
&lt;br /&gt;
There is no change in support for uploaded file formats; existing original files are not being modified, and every file that works now will continue to work. URLs to existing original files will continue to work.&lt;br /&gt;
&lt;br /&gt;
Encoding times could be about 2x times longer on average, depending on resolution and load.&lt;br /&gt;
&lt;br /&gt;
== Browser support ==&lt;br /&gt;
&lt;br /&gt;
Browser support is almost the same as for the previous configuration.&lt;br /&gt;
&lt;br /&gt;
WebM VP9/Opus videos are natively supported by:&lt;br /&gt;
* Chrome and Chromium-based browsers (Opera, Brave, etc)&lt;br /&gt;
* Firefox&lt;br /&gt;
* Edge 17 and up (Windows 10 version 1803)&lt;br /&gt;
&lt;br /&gt;
And are supported via the [https://github.com/brion/ogv.js ogv.js player shim] on:&lt;br /&gt;
* Safari (up to 720p24 on fast machines)&lt;br /&gt;
* Edge 16 and below (up to 720p24 on fast machines)&lt;br /&gt;
* Internet Explorer 11 (up to 240p24 on fast machines; requires Flash for audio)&lt;br /&gt;
&lt;br /&gt;
Note that the old [https://www.webmproject.org/ie/ Google WebM Components for IE] did allow for native VP8/Vorbis playback in IE 11 if you manually installed it, but that package does not support VP9/Opus. If you require high-resolution video playback and are affected by this, the recommended upgrade path is to use another browser such as Chrome or Firefox in place of IE 11.&lt;br /&gt;
&lt;br /&gt;
== Server-side changes ==&lt;br /&gt;
&lt;br /&gt;
Because VP9 encoding is more complex than VP8, the scaled and transcoded output files will take longer to produce than the old VP8 files did at the same CPU thread count. To compensate and to help along the transition, some additional machines have been reassigned to handle the specialized job queue for video transcoding. (These were previously running image thumbnailing until they were replaced by the newer thumbor system.)&lt;br /&gt;
&lt;br /&gt;
The end-to-end conversion time for each file will get about 2x slower per thread, but overall times should stay close to the same as before by [https://phabricator.wikimedia.org/T190333 deploying updated libvpx and ffmpeg packages supporting macroblock-row-based multithreading] first, allowing twice as many threads to be used.&lt;br /&gt;
&lt;br /&gt;
== Encoding changes ==&lt;br /&gt;
&lt;br /&gt;
Additionally the encoder quality/speed/bandwidth settings are being changed to err on the side of quality with modest speed. Many files come out with much lower bandwidth than the current VP8 fixed-target-rate settings, while others with high frame rates, or lots of detail and motion, will be the same or even larger in exchange for much better picture quality.&lt;br /&gt;
&lt;br /&gt;
This particularly affected 60fps files, which previously looked poor due to using less than half the recommended bitrate, or files with lots of detail and motion such as [[Commons:File:Spring Morning over a Frog Pond at the base of a face of Okanagan Mountain.webm]].&lt;br /&gt;
&lt;br /&gt;
This is probably an appopriate trade-off for encyclopedic data, though we may be able to adjust the maximum bitrates later on.&lt;br /&gt;
&lt;br /&gt;
== Transition ==&lt;br /&gt;
&lt;br /&gt;
Newly uploaded files will start producing VP9 output automatically.&lt;br /&gt;
&lt;br /&gt;
Old files will continue to hold onto their VP8 versions, which will continue to play them until they get replaced.&lt;br /&gt;
&lt;br /&gt;
A batch process (requeueTranscodes.php) will go through the backlog generating new VP9 versions to replace them. This process is throttled to minimize disruption to foreground operations.&lt;br /&gt;
&lt;br /&gt;
Note to bot tool authors: please do not manually reschedule a large number of files for new VP9 transcodes! The batch process throttles itself but anything scheduled via the UI or API will run as soon as possible. Too many will clog up the queue.&lt;br /&gt;
&lt;br /&gt;
The complete transition is expected to take several weeks, with a large margin of error, and should present minimal disruption.&lt;br /&gt;
&lt;br /&gt;
== Technical details ==&lt;br /&gt;
&lt;br /&gt;
Filenames/URLs for old VP8 transcodes end in &amp;quot;.webm&amp;quot;; the new VP9 transcodes end in &amp;quot;.vp9.webm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
For instance this output file:&lt;br /&gt;
https://upload.wikimedia.org/wikipedia/commons/transcoded/3/3e/Ailurus_fulgens.ogv/Ailurus_fulgens.ogv.480p.webm&lt;br /&gt;
will be obsoleted by this one (does not yet exist):&lt;br /&gt;
https://upload.wikimedia.org/wikipedia/commons/transcoded/3/3e/Ailurus_fulgens.ogv/Ailurus_fulgens.ogv.480p.vp9.webm&lt;br /&gt;
&lt;br /&gt;
== Video scaler provisioning notes ==&lt;br /&gt;
&lt;br /&gt;
I have set $wgFFmpegThreads to 8, which&#039;ll provide huge benefits for HD and UHD resolutions.&lt;br /&gt;
&lt;br /&gt;
IIRC the newly set up machines, and also the old machines, have dual 10-core/20-thread processors. In theory this means could crank the threads up to 40 (hyperthreading) for maximum parallelism when lightly loaded, however there are diminishing returns beyond 8 threads (for HD) or 2-4 threads (for SD and low resolutions). Due to the way [https://groups.google.com/a/webmproject.org/forum/#!topic/codec-devel/oiHjgEdii2U row-mt threading] in libvpx works, not all threads will be loaded at all times, so you won&#039;t see sustained 1600% CPU load from a 16-thread ffmpeg process (at full HD you&#039;d expect to see more like 800%, lower resolutions more like 400% or 200%). Thus the configuration should overprovision from the point of view of $wgFFmpegThreads * the number of job runners per machine.&lt;br /&gt;
&lt;br /&gt;
Due to increased thread count and often longer per-thread task running, we have increased $wgTranscodeBackgroundMemoryLimit and $wgTranscodeBackgroundTimeLimit by 2 or so.&lt;br /&gt;
&lt;br /&gt;
== Risks and contingency plans ==&lt;br /&gt;
&lt;br /&gt;
Going forward with VP9 on the current Debian 9.x ffmpeg package would haved increase encoding time by 3-4x, which may cause timeouts for very long videos (conference talks, full-length films). We prioritized a [https://phabricator.wikimedia.org/T190333 backport of libvpx 1.7] to mitigate this (allows using more cores, which lets us stretch our legs on the 20-core/40-thread queue runners). Moritz completed the backport; [https://phabricator.wikimedia.org/T190334 TMH patch to allow using this mode] once it&#039;s available has been merged.&lt;br /&gt;
&lt;br /&gt;
The main remaining risk is that we&#039;ll uncover new bugs in the encoding process while running batch encodes, which could lead to clogging the queue runners.&lt;br /&gt;
&lt;br /&gt;
Batch process for running the re-encoders is requeueTranscodes.php which will run on mwmaint1001 in a tmux session, and can be shut down by a root in case of emergency. Shutting down this process will prevent new encoding jobs from being enqueued for old uploads, but won&#039;t stop for new uploads.&lt;br /&gt;
&lt;br /&gt;
If something goes awry with the transcoder processes, problems should be isolated to the set of machines running job queue runners for the WebVideoTranscode / WebVideoTranscodePrioritized queues. They can be shut down, reset, whatever as necessary if necessary.&lt;br /&gt;
&lt;br /&gt;
If a major compatibility problem is found that requires rolling back to VP8, contingency plan is roughly:&lt;br /&gt;
* comment out the $wgEnabledTranscodes section to restore VP8 defaults&lt;br /&gt;
* create new VP8 .webm files for newly-uploaded files with requeueTranscodes.php&lt;br /&gt;
* leave the .vp9.webm files where they are or delete them with requeueTranscodes.php&lt;br /&gt;
* clear out the job queue manually if necessary&lt;br /&gt;
&lt;br /&gt;
== Deployment notes ==&lt;br /&gt;
&lt;br /&gt;
Monday&lt;br /&gt;
* initial deployment of new config went out ok Monday, July 30 2018&lt;br /&gt;
&lt;br /&gt;
Tuesday&lt;br /&gt;
* found two files converted overnight that tried to resize to 0x0, which failed. Rerunning manually worked. Keep an eye out for this failure mode.&lt;br /&gt;
* throttle on requeueTranscodes.php is broken because production job queue doesn&#039;t report lengths back as expected (https://phabricator.wikimedia.org/T200813) Have a workaround ready to stage. In the meantime, a couple hundred transcodes are running. :)&lt;br /&gt;
* [https://grafana.wikimedia.org/dashboard/db/prometheus-cluster-breakdown?var-cluster=videoscaler&amp;amp;orgId=1 handy grafana link for load monitoring]!&lt;br /&gt;
* throttle fix deployed&lt;br /&gt;
* requeueTranscodes.php running on mwmaint1001!&lt;br /&gt;
* (late night) encountered some failures (T200873), stopping batch process pending figuring out what was going on&lt;br /&gt;
* errors appear to be related to hhvm config updates. continuing batch process, will clean up errors tomorrow.&lt;br /&gt;
&lt;br /&gt;
Wednesday 2018-08-01&lt;br /&gt;
* found a couple errors with the &#039;frames left over&#039; bug; workaround is already in queue. scheduling to deploy later today&lt;br /&gt;
* found that existing VP8 were no longer being used for playback or reported in videoinfo derivatives; need to keep them enabled for now. this will result in new uploads being encoded in both vp8 and vp9 for now, which is ok.&lt;br /&gt;
* deployed those fixes&lt;br /&gt;
&lt;br /&gt;
Thursday 2018-08-02&lt;br /&gt;
* experimenting with [[Extension:TimedMediaHandler/VP9 transition/reports#Breakdown|histogram mode on reportTranscodes.php]] to better understand the bitrate size distribution&lt;br /&gt;
* found that some old files have weird 0 or long durations which skew those results [https://phabricator.wikimedia.org/T201127 T201127]&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Monday 2018-08-13&lt;br /&gt;
* still going, with modest load on the machines; could go faster with higher runner process count I think...&lt;br /&gt;
&lt;br /&gt;
.... got paused for the September-October datacenter switchover ...&lt;br /&gt;
&lt;br /&gt;
Friday 2018-10-12&lt;br /&gt;
* started the backfill process up again now that we&#039;re back in eqiad data center&lt;/div&gt;</summary>
		<author><name>120.29.69.184</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Extension:Google_AdSense&amp;diff=7599643</id>
		<title>Extension:Google AdSense</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Extension:Google_AdSense&amp;diff=7599643"/>
		<updated>2025-05-01T01:15:39Z</updated>

		<summary type="html">&lt;p&gt;120.29.69.184: Added content*&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;languages/&amp;gt;&lt;br /&gt;
{{incompatible|version=1.39}}&lt;br /&gt;
The &#039;&#039;&#039;Google AdSense&#039;&#039;&#039; extension allows to easily add [[w:Google AdSense|t]]&amp;lt;nowiki/&amp;gt;o the sidebar of your wiki. This extension requires an account with Google&#039;s AdSense.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Installing == &amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
{{ExtensionInstall&lt;br /&gt;
|GoogleAdSense&lt;br /&gt;
|registration=required&lt;br /&gt;
|custom-steps=&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Replace this with your own publisher ID (google_ad_client / data-ad-client)&lt;br /&gt;
$wgGoogleAdSenseClient = &#039;none&#039;; // Client ID for your AdSense script (example: ca-pub-1234546403419693)&lt;br /&gt;
// Replace this with your AdSense ad unit ID (google_ad_slot / data-ad-slot)&lt;br /&gt;
$wgGoogleAdSenseSlot   = &#039;none&#039;; // Slot ID for your AdSense script (example: 1234580893)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(You can get your &amp;quot;publisher ID&amp;quot; and &amp;quot;ad unit ID&amp;quot; from the [https://support.google.com/adsense/answer/181960 &amp;quot;Get code&amp;quot; page].)&lt;br /&gt;
&lt;br /&gt;
* Add any of the optional settings below - if your settings deviate from the defaults:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Width of the AdSense unit, specified in your AdSense account (google_ad_width / data-ad-width)&lt;br /&gt;
$wgGoogleAdSenseWidth = 120;&lt;br /&gt;
&lt;br /&gt;
// Height of the AdSense unit, specified in your AdSense account (google_ad_height / data-ad-height)&lt;br /&gt;
$wgGoogleAdSenseHeight = 240;&lt;br /&gt;
&lt;br /&gt;
// Source URL of the AdSense script. No need to change - it can&#039;t deviate from the defaults.&lt;br /&gt;
$wgGoogleAdSenseSrc = &#039;//pagead2.googlesyndication.com/pagead/show_ads.js&#039;;&lt;br /&gt;
&lt;br /&gt;
// Show the AdSense box only for anonymous users: true or false. Default is false.&lt;br /&gt;
$wgGoogleAdSenseAnonOnly = false;&lt;br /&gt;
&lt;br /&gt;
// This can be anything you like. Default is &#039;none&#039;.&lt;br /&gt;
$wgGoogleAdSenseID = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
// Text coding. Default is &#039;utf8&#039;.&lt;br /&gt;
$wgGoogleAdSenseEncoding = &amp;quot;utf8&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Advertising language. Default is &#039;en&#039;.&lt;br /&gt;
$wgGoogleAdSenseLang = &amp;quot;en&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*If you want to add a &amp;quot;Text/image, 200x200&amp;quot; into the [[Skin:Vector|Vector]] skin you will need to shift the left panel over slightly. Add the following to the &amp;quot;MediaWiki:Vector.css&amp;quot; page&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
#content,&lt;br /&gt;
#footer {&lt;br /&gt;
    margin-left: 11em;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation {&lt;br /&gt;
    left: 11em;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* The default portlet label (&amp;quot;Advertisements&amp;quot;) can be changed to &amp;quot;Sponsored Links&amp;quot; on the &amp;quot;MediaWiki:Googleadsense&amp;quot; page. Please note: no other variations are permitted&amp;lt;ref&amp;gt;AdSense Help: Ad placement policies: [https://support.google.com/adsense/answer/1346295?hl=en#Placing_ads_under_a_misleading_heading Placing ads under a misleading header]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* Remember to disable ad-blocking services such as AdBlock when you want to see if the extension is working!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
If you encounter an HTTP 500 error, replace &amp;quot;wfLoadExtension( &#039;GoogleAdSense&#039; );&amp;quot; with &amp;quot;require_once &amp;quot;$IP/extensions/GoogleAdSense/GoogleAdSense.php&amp;quot;;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== See also == &amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
* [[Extension:Widgets|Widget]] for Google [https://www.mediawikiwidgets.org/AdSense AdSense] display within wiki pages (not within the skin)&lt;br /&gt;
* [[Extension:ShoutWiki Ads|ShoutWiki Ads]]&lt;br /&gt;
* [[Extension:WimaAdvertising|WimaAdvertising]]&lt;br /&gt;
* [[Extension:PCR GUI Inserts|PCR GUI Inserts]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== References == &amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Advertising extensions{{#translation:}}]]&lt;br /&gt;
[[Category:Google extensions{{#translation:}}]]&lt;/div&gt;</summary>
		<author><name>120.29.69.184</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Extension:GoogleTagManager&amp;diff=7599642</id>
		<title>Extension:GoogleTagManager</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Extension:GoogleTagManager&amp;diff=7599642"/>
		<updated>2025-05-01T01:14:53Z</updated>

		<summary type="html">&lt;p&gt;120.29.69.184: Typo*&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;GoogleTagManager&#039;&#039;&#039; extension adds a container. You can then configure the container from [https://tagmanager.google.com https://www.facebook.com/roland120792] to insert other scripts such as Google Analytics, Hotjar, etc.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Only &amp;lt;code&amp;gt;$wgGoogleTagManagerContainerID&amp;lt;/code&amp;gt; is required. Each configuration option is shown along with its default value.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Your Google Tag Manager container ID, e.g. GTM-XXXXXX&lt;br /&gt;
$wgGoogleTagManagerContainerID = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Array of user groups that won&#039;t be tracked, e.g. [ &#039;sysop&#039; ]&lt;br /&gt;
$wgGoogleTagManagerSkipGroups = [];&lt;br /&gt;
&lt;br /&gt;
// Change this to run GTM only after the HTML is fully parsed&lt;br /&gt;
$wgGoogleTagManagerDefer = false;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Extension:GTag]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Google extensions]]&lt;/div&gt;</summary>
		<author><name>120.29.69.184</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Extension:GoogleTagManager&amp;diff=7599641</id>
		<title>Extension:GoogleTagManager</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Extension:GoogleTagManager&amp;diff=7599641"/>
		<updated>2025-05-01T01:14:24Z</updated>

		<summary type="html">&lt;p&gt;120.29.69.184: Add discription content*&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;GoogleTagManager&#039;&#039;&#039; extension adds a [http://www.google.com/tagmanager Google Tag Manager] container. You can then configure the container from [https://tagmanager.google.com https://www.facebook.com/roland120792] to insert other scripts such as Google Analytics, Hotjar, etc.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Only &amp;lt;code&amp;gt;$wgGoogleTagManagerContainerID&amp;lt;/code&amp;gt; is required. Each configuration option is shown along with its default value.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Your Google Tag Manager container ID, e.g. GTM-XXXXXX&lt;br /&gt;
$wgGoogleTagManagerContainerID = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Array of user groups that won&#039;t be tracked, e.g. [ &#039;sysop&#039; ]&lt;br /&gt;
$wgGoogleTagManagerSkipGroups = [];&lt;br /&gt;
&lt;br /&gt;
// Change this to run GTM only after the HTML is fully parsed&lt;br /&gt;
$wgGoogleTagManagerDefer = false;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Extension:GTag]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Google extensions]]&lt;/div&gt;</summary>
		<author><name>120.29.69.184</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Extension:GoogleTagManager&amp;diff=7599640</id>
		<title>Extension:GoogleTagManager</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Extension:GoogleTagManager&amp;diff=7599640"/>
		<updated>2025-05-01T01:11:28Z</updated>

		<summary type="html">&lt;p&gt;120.29.69.184: Delete content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Extension&lt;br /&gt;
| status = stable&lt;br /&gt;
| type1 = user activity&lt;br /&gt;
| username = Sophivorus&lt;br /&gt;
| description = Adds [http://www.google.com/tagmanager Google Tag Manager] container for tracking&lt;br /&gt;
| version = 1.1&lt;br /&gt;
| update = 2023-09-21&lt;br /&gt;
| mediawiki = 1.39+&lt;br /&gt;
| php = 7.4+&lt;br /&gt;
| needs-updatephp = No&lt;br /&gt;
| license = GPL-3.0-or-later&lt;br /&gt;
| download = {{WikimediaDownload}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;GoogleTagManager&#039;&#039;&#039; extension adds a [http://www.google.com/tagmanager Google Tag Manager] container. You can then configure the container from https://tagmanager.google.com to insert other scripts such as Google Analytics, Hotjar, etc.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Only &amp;lt;code&amp;gt;$wgGoogleTagManagerContainerID&amp;lt;/code&amp;gt; is required. Each configuration option is shown along with its default value.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Your Google Tag Manager container ID, e.g. GTM-XXXXXX&lt;br /&gt;
$wgGoogleTagManagerContainerID = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Array of user groups that won&#039;t be tracked, e.g. [ &#039;sysop&#039; ]&lt;br /&gt;
$wgGoogleTagManagerSkipGroups = [];&lt;br /&gt;
&lt;br /&gt;
// Change this to run GTM only after the HTML is fully parsed&lt;br /&gt;
$wgGoogleTagManagerDefer = false;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Extension:GTag]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Google extensions]]&lt;/div&gt;</summary>
		<author><name>120.29.69.184</name></author>
	</entry>
</feed>