text: User:Abongiwe

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/

title: User:Abongiwe


text:
User:Powellle

Return to the Main Page

title: User:Powellle


text: Agrodatabase/201 - Group crops

title: Agrodatabase/201 - Group crops


text:
User:Cinndeee/sandbox/land use

Saguaro National Park

Tucson, Arizona is home to the largest cacti in the nation. The Saguaro Cactus is the universal symbol of the American West that provides nesting areas, shelter, and food for many animals. The Saguaro National Park, located in Southern Arizona, protects the native species and wildlife of the Sonoran Desert. It has two locations on both sides of the city of Tucson located East and West with a total of 91,327 acres. The eastern section of the Saguaro National Park is larger, contains many mountains, rises over 8,000 feet, and has 128 miles of hiking trails. The western portion has a denser saguaro forest and is lower in elevation.

The Saguaro National Monument was created in 1933. Then in 1975, 71,400 acres of the Saguaro WIlderness area was added. The Saguaro National Park was not established until October 14, 1994. It has provided many activities to thousands of visitors which include watching the breathtaking Arizona sunsets, hiking, picnics, and embracing the cactus diversity. However, there are any threats that affect this park, this includes invasive plants, fires, theft, and vandalism. The Saguaro Cactus is protected under the Native Plant Protection Act. If an individual is caught cutting down a saguaro, they may be charged with felony criminal damage that can result in 25 years in prison. Other actions of vandalism that include transplanting the cactus and theft will result in high fees and jail time.

Las Cienegas National Conservation Area
Las Cienegas National Conservation Area in Southeastern Arizona protects more than 45,000 acres of railing grasslands and woodlands. The oak-studded hills in the region connect several lush riparian corridors and "sky island" mountain ranges. Within the Las Ciengas National Conservation Area flows the Cienega Creek that supports the diverse plant and animal community and is rich in cultural and historic resources. The Empire and Cienega ranches are now managed by the Bureau of Land Management under the principals of ecosystem-management and multiple uses for future generations to enjoy. The Bureau of Land Management has formed a partnership with Empire Ranch Formation, a non-profit organization, who is dedicated to preserving the landscapes and historic buildings. There are many activities for visitors to do, which include birdwatching, wildlife viewing, picnicking, hunting, horseback riding, hiking, mountain biking, primitive camping, visiting historic sites, photography, and scenic drives.

Los Morteros Conservation Area
Los Morteros is located south of the Town of Marana's El Rio Open Space Preserve. It's 120 acres of land embodies major traditions of the region that include Mexican, Spanish, Native American, and the American Territorial. It is a site that was once inhabited by a large NativeAmerican village between about A.D. 850 and 1300. It was once a large village that stretched North and South along the Santa Cruz River and Past Silver Road. The site was named "Los Morteros" by archaeologists because they discovered many many bedrock mortars on the site. Los Morteros is a site where many important events took place in Southern Arizona. The undisturbed buried remains make Los Morteros an important cultural resource because they provide a lot of information about the history of the Tucson Basin. In fact, Tohono O'odham Nation considers this place as an ancestral site. The Pima County Conservation Area protects the archaeological and historic resources to preserve them for the future of Pima County.

Agriculture
There are many agricultural areas in Tucson in which they cultivate the soil, grow crops, and raise livestock. The plant and animal products are prepared for people to use and distribute into markets. The crops grown in Tucson include corn, cotton, wheat, pecans, vegetables, alfalfa, barley, citrus, and hay.

Civilization

Tucson is a large city that lies in Arizona Uplands of the Sonoran Desert. It is home to a large population of 545,975. Land use in this area is used for recreational, transport, agricultural, residential and commercial purposes. The land in the AZ Uplands is used to make houses, malls, stores, airports, roads, etc. As the population continues to grow by the minute, more and more land will be taken from the desert. Humans are the biggest threat to the wildlife that lives in the AZ Uplands.

Residential Land Use
Hermosillo is the capital of a large city that is centrally located in the Northwestern Mexican State of Sonora. It has a population of over 812,229 inhabitants. It is the 16th largest state in Mexico. As the population continues to increase, more land will be taken to accommodate the growing population.

Agricultural Land Use

Hermosillo uses some of their lands for agriculture, growing crops that include grapes, wheat, flowers, alfalfa, walnuts, and chickpeas. Rico Farm in Hermosillo, Mexico at Campo San Luis grows vegetables and has row crops that include tomatoes, melons, cucumbers, eggplants, and squash that are primarily grown for transport. This farm manages approximately 4,000 acres of land and most of the area is left in a natural state. Livestock is also important in this Hermosillo. There are many farms that raise cattle, sheep, pigs, horses, goats, and even bees.

Commercial Land Use
Industry and manufacturing is the dynamic sector of the economy in Hermosillo. Thirty percent of the population is employed by 26 major manufacturers in Hermosillo. Products manufactured in Hermosillo include cars, computers, televisions, textiles, wood products, cellular phones, printing, food processing, chemicals, and more. Commerce employs more than half of the population. Therefore, the majority of the land is used for commercial purposes.

title: User:Cinndeee/sandbox/land use


text:
User:Asha Mary Joseph

Welcome

title: User:Asha Mary Joseph


text:
Agrodatabase/202 - Topics, Units and Valuations

 * 1) /Valuations/
 * 2) /Units/
 * 3) /Topics/


text: Agrodatabase/202 - Topics, Units and Valuations/Valuations


text:
User talk:Powellle

--Minorax (discuss • contribs) 12:14, 11 April 2020 (UTC)

Pages
Hi Powellle, kindly take a look at Naming policy before creating more pages. Thank you and happy editing :) Minorax (discuss • contribs) 12:14, 11 April 2020 (UTC)

Blanking
Please stop blanking pages. Removing content from pages is considered to be blanking and is disruptive. In most cases you are not the only editor who has contributed to the pages you are blanking.

On my pages I am the only editor and my content had become obsolete here. Powellle (discuss • contribs) 10:53, 7 May 2022 (UTC)

 * If you want to have a book deleted, the usual procedure is to start a discussion at WB:RFD. Blanking pages is not recognized as a policy-based way of doing this. -- Jules (Mrjulesd) 13:17, 7 May 2022 (UTC)

title: User talk:Powellle


text:
Cookbook talk:Hot Cross Bun

I made these. It went pretty well except for the glaze. I don't think the proportions are right. --EvanProdromou (discuss • contribs) 16:38, 11 April 2020 (UTC)

title: Cookbook talk:Hot Cross Bun


text: Agrodatabase/202 - Topics, Units and Valuations/Units


text:
Cookbook:Corn Bread (Lombardy)

| Bread

See also: Cornbread, Cornbread 2

Corn bread is a traditional bread recipe from the mountain areas of Lombardy, in Italy, where corn flour was much cheaper and easier to obtain than wheat. In its native area it's called “pan giald”, lombard for “yellow bread”. The sourdough in this recipe has been replenished with a ratio of 1 sourdough, 1 flour, 0.5 water, and should have been last replenished around 8–12 hours before.

Ingredients

 * 250 g finely-ground cornmeal
 * 300 g water
 * 250 g wheat flour
 * 150 g firm sourdough
 * 8 g (1 teaspoon) salt

Procedure

 * 1) Boil 200 g of water and pour it over the cornmeal in a bowl; mix well with a fork and let it cool to room temperature.
 * 2) Add the sourdough, wheat flour, salt and the rest of the water; knead until smooth. Cover with a towel and let rise for about 8 hours.
 * 3) Fold the dough on itself a few times, form into a round loaf and place on a pan covered with baking paper. Make a couple cuts on the surface and let rise for another hour.
 * 4) Preheat the oven to 240°C, sprinkle the loaf with water and bake for 10 minutes; lower the oven temperature to 160°C and keep baking for 30 minutes.
 * 5) Remove from the oven and let it rest on a rack to cool down.

Notes, tips, and variations

 * Instead of wheat flour, Buckwheat flour was also traditionally used, especially in more rural areas, but will result in a even denser loaf.

title: Cookbook:Corn Bread (Lombardy)


text:
User talk:George Boggs

Welcome
Welcome to Wikibooks, George Boggs!

 First steps tutorial Wikibooks is for collaborative development of free textbooks.

You do not need technical skills to contribute. You can easily change most books. Please introduce yourself, and let us know what interests you.

If you already contribute at other Wikimedia projects, our Wikimedia Orientation should quickly get you started. (Would you like to provide feedback on this message?)

  Getting help   Made a mistake?   Goodies, tips and tricks
 * Read the Using Wikibooks book for a friendly introduction to the project, or our help pages for more information.
 * You can get friendly help from the community in the user assistance room or our IRC channel.
 * Upload freely licensed files to Wikimedia Commons. You may request permission to upload fair use files locally. Please include author and source information and a non-free use rationale for non-free files.
 * You can restore a previously saved version.
 * Pages should follow the  naming convention.
 * Need to rename a page? Use the move tab (is available once your account is 4 days old - until then, ask for help).
 * To request a page be deleted, add to the top of the page.
 * Was a page you made deleted? Please read the deletion policy, and check the deletion log to find out why. Also check the RFD archives if applicable. You can request undeletion at WB:RFU, or ask the administrator who deleted the page.
 * Please fill in the edit summary and preview your edits before saving.
 * Sign your name on discussion pages by typing ~~~~
 * User scripts can make many tasks easier. Look at the Gadgets tab of my preferences; check off the boxes for the scripts you want, and hit save!

--Pi zero (discuss • contribs) 04:22, 12 April 2020 (UTC)

title: User talk:George Boggs


text:
User:Akeron

Wikibooks  __INDEX__
 * [//meta.wikimedia.org/wiki/User:Akeron Akeron Meta]
 * [//commons.wikimedia.org/wiki/User:Akeron Akeron Commons]
 * [//www.wikidata.org/wiki/User:Akeron Akeron Wikidata]
 * [//species.wikimedia.org/wiki/User:Akeron Akeron Wikispecies]
 * [//www.mediawiki.org/wiki/User:Akeron Akeron Mediawiki]
 * [//en.wikipedia.org/wiki/User:Akeron Akeron English Wikipedia]
 * [//simple.wikipedia.org/wiki/User:Akeron Simple English Wikipedia]
 * [//fr.wikipedia.org/wiki/Utilisateur:Akeron Akeron French Wikipedia]
 * [//es.wikipedia.org/wiki/Usuario:Akeron Akeron Spanish Wikipedia]
 * [//de.wikipedia.org/wiki/Benutzer:Akeron Akeron German Wikipedia]
 * [//it.wikipedia.org/wiki/Utente:Akeron Akeron Italian Wikipedia]
 * [//nl.wikipedia.org/wiki/Gebruiker:Akeron Akeron Dutch Wikipedia]
 * [//sv.wikipedia.org/wiki/Användare:Akeron Akeron Swedish Wikipedia]
 * [//pl.wikipedia.org/wiki/Wikipedysta:Akeron Akeron Polish Wikipedia]
 * [//ru.wikipedia.org/wiki/Участник:Akeron Akeron Russian Wikipedia]
 * [//pt.wikipedia.org/wiki/Usuário(a):Akeron Akeron Portuguese Wikipedia]
 * [//zh.wikipedia.org/wiki/User:Akeron Akeron Chinese Wikipedia]
 * [//ja.wikipedia.org/wiki/利用者:Akeron Akeron Japanese Wikipedia]
 * [//ar.wikipedia.org/wiki/مستخدم:Akeron Akeron Arabic Wikipedia]
 * [//fa.wikipedia.org/wiki/کاربر:Akeron Akeron Persian Wikipedia]
 * [//uk.wikipedia.org/wiki/Користувач:Akeron Akeron Ukrainian Wikipedia]
 * [//tr.wikipedia.org/wiki/Kullanıcı:Akeron Akeron Turkish Wikipedia]
 * [//ko.wikipedia.org/wiki/사용자:Akeron Akeron Korean Wikipedia]
 * [//no.wikipedia.org/wiki/Bruker:Akeron Akeron Norwegian Wikipedia]
 * [//fi.wikipedia.org/wiki/Käyttäjä:Akeron Akeron Finnish Wikipedia]
 * [//fr.wiktionary.org/wiki/Utilisateur:Akeron Akeron Wiktionary] [//en.wiktionary.org/wiki/User:Akeron en]
 * [//fr.wikisource.org/wiki/Utilisateur:Akeron Akeron Wikisource] [//en.wikisource.org/wiki/User:Akeron en]
 * [//fr.wikibooks.org/wiki/Utilisateur:Akeron Akeron Wikibooks] [//en.wikibooks.org/wiki/User:Akeron en]
 * [//fr.wikiversity.org/wiki/Utilisateur:Akeron Akeron Wikiversity] [//en.wikiversity.org/wiki/User:Akeron en]
 * [//fr.wikiquote.org/wiki/Utilisateur:Akeron Akeron Wikiquote] [//en.wikiquote.org/wiki/User:Akeron en]
 * [//fr.wikinews.org/wiki/Utilisateur:Akeron Akeron Wikinews] [//en.wikinews.org/wiki/User:Akeron en]

title: User:Akeron


text:
Talk:Introducing Julia/DataFrames

In the section Plotting Anscombe's Quartet, I run the code block beginning with using StatsPlots

I get this error ERROR: LoadError: UndefVarError: select not defined

this is my environment

baa@comp:~/Desktop $ date -u Sun 12 Apr 2020 01:14:39 PM UTC

baa@comp:~/Desktop $ uname -a Linux comp 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u2 (2019-11-11) x86_64 GNU/Linux

baa@comp:~/Desktop $ julia --version julia version 1.4.0

baa@comp:~/Desktop $ julia -q (@v1.4) pkg> status Status `~/.julia/environments/v1.4/Project.toml` [336ed68f] CSV v0.6.1 [5a033b19] CurveFit v0.3.2 [a93c6f00] DataFrames v0.20.2 [7073ff75] IJulia v1.21.1 [d330b81b] PyPlot v2.9.0 [f3b207a7] StatsPlots v0.12.0 [24249f21] SymPy v1.0.18 [1986cc42] Unitful v1.0.0

Can anyone say what this error message means and/or how to correct it?

B A Andersen (discuss • contribs) 13:42, 12 April 2020 (UTC)

Hi there! This code works for me: using DataFrames anscombe = DataFrame(                    [10  10  10  8   8.04   9.14  7.46   6.58;         8   8   8   8   6.95   8.14  6.77   5.76;        13  13  13  8   7.58   8.74  12.74  7.71;        9   9   9   8   8.81   8.77  7.11   8.84;        11  11  11  8   8.33   9.26  7.81   8.47;        14  14  14  8   9.96   8.1   8.84   7.04;        6   6   6   8   7.24   6.13  6.08   5.25;        4   4   4   19  4.26   3.1   5.39   12.5;        12  12  12  8   10.84  9.13  8.15   5.56;        7   7   7   8   4.82   7.26  6.42   7.91;        5   5   5   8   5.68   4.74  5.73   6.89]);

names!(anscombe, [Symbol.(:X, 1:4); Symbol.(:Y, 1:4)])

using StatsPlots

@df anscombe scatter([:X1 :X2 :X3 :X4], [:Y1 :Y2 :Y3 :Y4],              smooth=true,               line = :red,               linewidth = 2,               title= ["X$i vs Y$i" for i in (1:4)'],               legend = false,               layout = 4,               xlimits = (2, 20),               ylimits = (2, 14))

The only package version difference I can see is that I've got StatsPlots v0.14.4... Cormullion (discuss • contribs) 14:07, 12 April 2020 (UTC)

@Cormullion Thanks. I updated and it works. Now I can continue the tutorial. I foolishly assumed that because I installed the package today then I would have the latest version. B A Andersen (discuss • contribs)

title: Talk:Introducing Julia/DataFrames


text:
User:Adamstony33me

Open main menu Wikibooks Search 23 Adamstony33me Joined 2 days ago User page Discussion Unwatch Contributions Edit More You don't have a user page yet You can describe yourself to fellow editors on your user page Create your own Wikibooks Content is available under CC BY-SA 3.0 unless otherwise noted. PrivacyDesktop Close Editing User:Adamstony33me

You are creating a new page on Wikibooks!

title: User:Adamstony33me


text:
Backpack Camping and Woodland Survival/Gear/Lights

If you are expecting to be outside around sunset or into nightfall, lights are absolutely necessary to maintain reasonable pace and help ensure safety in the dark. Though you may not expect to be out past sunset, if there is even the remote possibility of getting lost or being out longer than expected, bring lights.

Hands free lights such as headlamps are extremely advisable since there's virtually no downside to use, and often come with the ability to dim or switch to a low-visibility red light to help preserve night vision. Lanterns are also good trail tools since they distribute light in all directions and light a lot of space for more than one person, and provide a sense of safety. Flashlights are ideal for long-range spotlighting, but should be otherwise be reserved for emergencies.


text:
User:Sonic4380

Uuuhh...well, i'm sonic4380, i know, very weird name, i'm a guy that likes to contribute sometimes by adding stuff like information or images in these wikis to help people understand subjects that i'm familiar with.

title: User:Sonic4380


text:
User:Jaerik

Wikipedian starting out on Wikibooks.

title: User:Jaerik


text:
User:Kem25/sandbox/Land and Water Use

Saguaro National Park

Tucson, Arizona is home to the largest cacti in the nation. The Saguaro Cactus is the universal symbol of the American West that provides nesting areas, shelter, and food for many animals. The Saguaro National Park, located in Southern Arizona, protects the native species and wildlife of the Sonoran Desert. It has two locations on both sides of the city of Tucson located East and West with a total of 91,327 acres. The eastern section of the Saguaro National Park is larger, contains many mountains, rises over 8,000 feet, and has 128 miles of hiking trails. The western portion has a denser saguaro forest and is lower in elevation.

The Saguaro National Monument was created in 1933. Then in 1975, 71,400 acres of the Saguaro WIlderness area was added. The Saguaro National Park was not established until October 14, 1994. It has provided many activities to thousands of visitors which include watching the breathtaking Arizona sunsets, hiking, picnics, and embracing the cactus diversity. However, there are any threats that affect this park, this includes invasive plants, fires, theft, and vandalism. The Saguaro Cactus is protected under the Native Plant Protection Act. If an individual is caught cutting down a saguaro, they may be charged with felony criminal damage that can result in 25 years in prison. Other actions of vandalism that include transplanting the cactus and theft will result in high fees and jail time.

Las Cienegas National Conservation Area
Las Cienegas National Conservation Area in Southeastern Arizona protects more than 45,000 acres of railing grasslands and woodlands. The oak-studded hills in the region connect several lush riparian corridors and "sky island" mountain ranges. Within the Las Ciengas National Conservation Area flows the Cienega Creek that supports the diverse plant and animal community and is rich in cultural and historic resources. The Empire and Cienega ranches are now managed by the Bureau of Land Management under the principals of ecosystem-management and multiple uses for future generations to enjoy. The Bureau of Land Management has formed a partnership with Empire Ranch Formation, a non-profit organization, who is dedicated to preserving the landscapes and historic buildings. There are many activities for visitors to do, which include birdwatching, wildlife viewing, picnicking, hunting, horseback riding, hiking, mountain biking, primitive camping, visiting historic sites, photography, and scenic drives.

Los Morteros Conservation Area
Los Morteros is located south of the Town of Marana's El Rio Open Space Preserve. It's 120 acres of land embodies major traditions of the region that include Mexican, Spanish, Native American, and the American Territorial. It is a site that was once inhabited by a large NativeAmerican village between about A.D. 850 and 1300. It was once a large village that stretched North and South along the Santa Cruz River and Past Silver Road. The site was named "Los Morteros" by archaeologists because they discovered many many bedrock mortars on the site. Los Morteros is a site where many important events took place in Southern Arizona. The undisturbed buried remains make Los Morteros an important cultural resource because they provide a lot of information about the history of the Tucson Basin. In fact, Tohono O'odham Nation considers this place as an ancestral site. The Pima County Conservation Area protects the archaeological and historic resources to preserve them for the future of Pima County.

Agriculture
There are many agricultural areas in Tucson in which they cultivate the soil, grow crops, and raise livestock. The plant and animal products are prepared for people to use and distribute into markets. The crops grown in Tucson include corn, cotton, wheat, pecans, vegetables, alfalfa, barley, citrus, and hay.

Civilization

Tucson is a large city that lies in Arizona Uplands of the Sonoran Desert. It is home to a large population of 545,975. Land use in this area is used for recreational, transport, agricultural, residential and commercial purposes. The land in the AZ Uplands is used to make houses, malls, stores, airports, roads, etc. As the population continues to grow by the minute, more and more land will be taken from the desert. Humans are the biggest threat to the wildlife that lives in the AZ Uplands.

Residential Land Use
Hermosillo is the capital of a large city that is centrally located in the Northwestern Mexican State of Sonora. It has a population of over 812,229 inhabitants. It is the 16th largest state in Mexico. As the population continues to increase, more land will be taken to accommodate the growing population. The majority of land around the Plains of Sonora has been taken over by humans for residential, agricultural, transport, recreational, and commercial purposes.

Agricultural Land Use

Hermosillo uses some of their lands for agriculture, growing crops that include grapes, wheat, flowers, alfalfa, walnuts, and chickpeas. Rico Farm in Hermosillo, Mexico at Campo San Luis grows vegetables and has row crops that include tomatoes, melons, cucumbers, eggplants, and squash that are primarily grown for transport. This farm manages approximately 4,000 acres of land and most of the area is left in a natural state. Livestock is also important in this Hermosillo. There are many farms that raise cattle, sheep, pigs, horses, goats, and even bees.

Commercial Land Use
Industry and manufacturing is the dynamic sector of the economy in Hermosillo. Thirty percent of the population is employed by 26 major manufacturers in Hermosillo. Products manufactured in Hermosillo include cars, computers, televisions, textiles, wood products, cellular phones, printing, food processing, chemicals, and more. Commerce employs more than half of the population. Therefore, the majority of the land is used for commercial purposes.

Tucson
Considering todays average Tucson family uses 107 gallons per day of water, it is necessary to consider options on how water is obtained. In the early years of Tucson, its main source of water was the Santa Cruz River. Once the river ceased to flow near the city Tucson, a new source of water had to be found thus Tucson began relying on wells for their water supply. One of the most prominent water suppliers of Tucson is Tucson Water. Their company accounts for 200 wells, 61 reservoirs, and 266 sampling stations within the Tucson area. With the introduction of the Central Arizona Project (CAP) in 1973, Tucson was able to receive 1.5 million acre-feet of Colorado River water to be pumped via canal to Pima, Pinal, and Maricopa counties. With this water Tucson separate it into 35% municipal and industrial, 25% agriculture, 10% Native American communities, 30% banked underground for future use. The banked water is stored in local aquifers, such as the two in Avra Valley and one near the Santa Cruz River, to be used in possible future water shortages. Since the banking began the water tables in these aquifers have increased.

San Pedro River
The San Pedro River has been said to be the last undammed desert river. Like many other rivers in the desert the San Pedro is drying up, leaving the communities that rely on it without water that is necessary for life. The cause may be that over pumping groundwater out of reservoirs at a rapid rate leaves the reservoir unable to produce water at a quick enough pace. It is projected that in 2020 the deficit of how much water being pumped compared to the amount of water recharging the reservoir will reach 13,000 acre-feet annually.

Santa Cruz River
The Santa Cruz River was once Tucson’s primary water source but when it ceased to flow past the area it left Tucson searching for other options. Droughts among other factors have played into the disappearance of this river. The river has been steadily flowing through the north of Tumacacori and south into Mexico due to the addition of the Nogales International Wastewater Treatment Plant that releasing 1.6 million gallons per day of treated water into the river, making the Santa Cruz River an effluent-driven system. Still the Santa Cruz River is home to a variety of rare vegetation. Efforts are being made in order to preserve this river and the ecosystem that relies on it.

Hermosillo
Sonora’s capital, Hermosillo, has had a fast-growing population for many years now. With the introduction of a major company facility such as Ford, the city blossomed. With its growing population, Hermosillo faces issues such as water shortages. The Sonora and San Miguel rivers are important to water supply and are used for irrigation, feeding the Abelardo L. Rodriguez Dam. The average streamflow of the Rio Sonora has been declining due to droughts seeing the average streamflow decrease from 52 million m^3 in 1981-1995 to an average of 20.9 million m^3 average streamflow in 1996-2005, leaving less water available to the city. This being said 75% of Hermosillo’s water supply comes from groundwater reserves. One of the aquifers near Hermosillo is the Costa de Hermosillo. When too much water is being extracted via wells from coastal aquifers, like the Costa de Hermosillo, sea water may seep in. Salinity intrusion of the water being extracted from the wells was being seen in the late 1950s. When salinity intrusion occurs closure of these wells may seem inevitable; as can be seen in Costa de Hermosillo wells where 105 out of the 498 had to be closed.

Sonora River
The Rio Sonora is a river in Sonora that stretches from western Mexico to Kino Bay. The river feeds into the Abelardo L. Rodriguez reservoir and is used for irrigation purposes. This being said the average streamflow of the Rio Sonora has been declining from 52 million m^3 in 1981-1995 to an average of 20.9 million m^3 average streamflow in 1996-2005. In 2014 a toxic mine spill contaminated the waters spilling about 11 million gallons of copper sulfate acid solution and other metals into the river. The river water has since been declared safe.

Abelardo L. Rodriguez Dam
The Abelardo L. Rodriguez Dam is located in Sonora’s capital, Hermosillo. Two rivers feed the dam, the Sonora and the San Miguel River. Sources say that out of the nine dams in the region, the Abelardo L. Rodriguez has one of the three least storage capacities. From its construction in 1948 to 1981 the water from the dam was used for agricultural purposes, leaving the city of Hermosillo to obtain its water from wells surrounding the dam. In the years following 1981 the water from the dam began being used for domestic purposes.

title: User:Kem25/sandbox/Land and Water Use


text:
English-Hanzi/When preparing dried beans

When preparing dried beans:

 * Wash and discard wrinkled or discolored beans before cooking.
 * Soak the beans overnight to soften and shorten the cooking time. Discard water and rinse.
 * Boil the beans with plenty of fresh water for at least 10 minutes, then cook over low heat until it becomes soft.

准备干豆时：

 * 烹饪前洗净并丢弃起皱或变色的豆子.
 * 将豆子浸泡过夜以软化并缩短烹饪时间. 丢弃水并冲洗.
 * 用大量淡水煮豆至少10分钟，然后用小火煮至变软.


text:
User talk:5.63.58.237

April 2020

 * If this is a shared IP address, and you did not make the edits, consider creating an account for yourself so you can avoid further irrelevant notices.

title: User talk:5.63.58.237


text:
User talk:Path slopu

Welcome, Path slopu!

If you have any questions, you can ask in the assistance reading room or possibly contact me personally. JackPotte (discuss • contribs) 09:28, 13 April 2020 (UTC)

title: User talk:Path slopu


text:
User talk:Jaerik

Hello, and Wikibooks! Thank you for your contributions; however, please remember the essential rule of respecting s. Edits to Wikibooks may not contain material from copyrighted sources unless used with permission. It is almost never okay to copy extensive text out of a book or website and paste it into a Wikibooks page with little or no alteration, though you can clearly and briefly quote copyrighted text in the right circumstances. Content that does not comply with this legal rule must be removed. For more information on this, see:
 * Copying text from other sources
 * Policy on copyright
 * Frequently asked questions on Wikipedia's copyright policy
 * Policy and guideline on non-free content

If you still have questions, there is a new contributor's help page, or you can and someone will be along to answer it shortly. You may also find the following pages useful for a general introduction to Wikipedia:
 * Simple introduction
 * Help pages

I hope you enjoy editing Wikibooks! Please sign your name on talk pages using four s ( ~ ); this will automatically produce your name and the date. Again, welcome! JackPotte (discuss • contribs) 09:31, 13 April 2020 (UTC)

title: User talk:Jaerik


text:
User:Gusta99X

Gustavo Javier Alcantara Gomez

title: User:Gusta99X


text:
Oberon/oreport

Oberon Language Report

Revised Edition 1. 10. 90, N. Wirth

Make it as simple as possible, but not simpler.

A. Einstein

 * 1) Introduction
 * 2) Syntax
 * 3) Vocabulary and representation
 * 4) Declarations and scope rules
 * 5) Constant declarations
 * 6) Type declarations
 * 7) Variable declarations
 * 8) Expressions
 * 9) Statements
 * 10) Procedure declarations
 * 11) Modules
 * 12) The Module SYSTEM

1. Introduction

Oberon is a general-purpose programming language that evolved from Modula-2. Its principal new feature is the concept of type extension. It permits the construction of new data types on the basis of existing ones and provides relations between them.   This report is not intended as a programmer's tutorial. It is intentionally kept concise. Its function is to serve as a reference for programmers, implementors, and manual writers. What remains unsaid is mostly left so intentionally, either because it is derivable from stated rules of the language or because it would require to commit the definition when a general commitment appears as unwise. 2. Syntax

A language is an infinite set of sentences, namely the sentences well formed according to its syntax. In Oberon, these sentences are called compilation units. Each unit is a finite sequence of symbols from a finite vocabulary. The vocabulary of Oberon consists of identifiers, numbers, strings, operators, delimiters, and comments. They are called lexical symbols and are composed of sequences of characters. (Note the distinction between symbols and characters.)   To describe the syntax, an extended Backus-Naur Formalism called EBNF is used. Brackets [ and ] denote optionality of the enclosed sentential form, and braces { and } denote its repetition (possibly 0 times). Syntactic entities (non-terminal symbols) are denoted by English words expressing their intuitive meaning. Symbols of the language vocabulary (terminal symbols) are denoted by strings enclosed in quote marks or words written in capital letters, so-called reserved words. Syntactic rules (productions) are marked by a $ sign at the left margin of the line. 3. Vocabulary and representation

The representation of symbols in terms of characters is defined using the ASCII set. Symbols are identifiers, numbers, strings, operators, delimiters, and comments. The following lexical rules must be observed. Blanks and line breaks must not occur within symbols (except in comments, and in the case of blanks in strings). They are ignored unless they are essential to separate two consecutive symbols. Capital and lower-case letters are considered as being distinct.

 * {| class="wikitable" style="background:#ffffff; border:none; border-collapse:collapse; padding:0"

 * style="vertical-align:top; border:none; padding:0" |1.
 * style="vertical-align:top; border:none; padding:0" |Identifiers are sequences of letters and digits. The first character must be a letter.
 * style="vertical-align:top; border:none; padding:0" |Identifiers are sequences of letters and digits. The first character must be a letter.

$ ident  =  letter {letter | digit}. Examples:

 x   scan   Oberon   GetSymbol   firstLetter
 * style="vertical-align:top; border:none; padding:0" |2.
 * style="vertical-align:top; border:none; padding:0" |Numbers are (unsigned) integers or real numbers. Integers are sequences of digits and may be followed by a suffix letter. The type is the minimal type to which the number belongs (see Section 6.1.). If no suffix is specified, the representation is decimal. The suffix H indicates hexadecimal representation.
 * style="vertical-align:top; border:none; padding:0" |Numbers are (unsigned) integers or real numbers. Integers are sequences of digits and may be followed by a suffix letter. The type is the minimal type to which the number belongs (see Section 6.1.). If no suffix is specified, the representation is decimal. The suffix H indicates hexadecimal representation.

A real number always contains a decimal point. Optionally, it may also contain a decimal scale factor. The letter E (or D) is pronounced as 'times ten to the power of'. A real number is of type REAL, unless it has a scale factor containing the letter D, in which case it is of type LONGREAL.

 $ number  =  integer | real. $ integer  =  digit {digit} | digit {hexDigit} "H". $ real  =  digit {digit} "." {digit} [ScaleFactor]. $ ScaleFactor  =  ("E" | "D") ["+" | "-"] digit {digit}. $ hexDigit  =  digit | "A" | "B" | "C" | "D" | "E" | "F". $ digit  =  "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9".

Examples:  1987 100H          = 256 12.3 4.567E8       = 456700000 0.57712566D-6 = 0.00000057712566
 * style="vertical-align:top; border:none; padding:0"|3.
 * style="vertical-align:top; border:none; padding:0"|Character constants are either denoted by a single character enclosed in quote marks or by the ordinal number of the character in hexadecimal notation followed by the letter X.
 * style="vertical-align:top; border:none; padding:0"|Character constants are either denoted by a single character enclosed in quote marks or by the ordinal number of the character in hexadecimal notation followed by the letter X.

$ CharConstant  = """ character """ | digit {hexDigit} "X".
 * style="vertical-align:top; border:none; padding:0" |4.
 * style="vertical-align:top; border:none; padding:0" |Strings are sequences of characters enclosed in quote marks ("). A string cannot contain a quote mark. The number of characters in a string is called the length of the string. Strings can be assigned to and compared with arrays of characters (see Sections 9.1 and 8.2.4).
 * style="vertical-align:top; border:none; padding:0" |Strings are sequences of characters enclosed in quote marks ("). A string cannot contain a quote mark. The number of characters in a string is called the length of the string. Strings can be assigned to and compared with arrays of characters (see Sections 9.1 and 8.2.4).

$ string =  """ {character} """ .

Examples:

  "OBERON"   "Don't worry!"
 * style="vertical-align:top; border:none; padding:0; padding-right: 0.3em" |5.
 * style="vertical-align:top; border:none; padding:0" |Operators and delimiters are the special characters, character pairs, or reserved words listed below. These reserved words consist exclusively of capital letters and cannot be used in the role of identifiers.
 * style="vertical-align:top; border:none; padding:0" |Operators and delimiters are the special characters, character pairs, or reserved words listed below. These reserved words consist exclusively of capital letters and cannot be used in the role of identifiers.

 +  :=   ARRAY    IS       TO  -   ^    BEGIN    LOOP     TYPE *  =    CASE     MOD      UNTIL /  #    CONST    MODULE   VAR ~
    DO       OF       WITH .  <=   ELSE     OR ,   >=   ELSIF    POINTER ;  ..   END      PROCEDURE |  :    EXIT     RECORD IF      REPEAT [  ]    IMPORT   RETURN {  }    IN       THEN

4. Declarations and scope rules
 * style="vertical-align:top; border:none; padding:0" |6.
 * style="vertical-align:top; border:none; padding:0" |Comments may be inserted between any two symbols in a program. They are arbitrary character sequences opened by the bracket (* and closed by *). Comments do not affect the meaning of a program.
 * }
 * }

Every identifier occurring in a program must be introduced by a declaration, unless it is a predefined identifier. Declarations also serve to specify certain permanent properties of an object, such as whether it is a constant, a type, a variable or a procedure.

The identifier is then used to refer to the associated object. This is possible in those parts of a program only which are within the scope of the declaration. No identifier may denote more than one object within a given scope. The scope extends textually from the point of the declaration to the end of the block (procedure or module) to which the declaration belongs and hence to which the object is local. The scope rule has the following amendments:
 * {| class="wikitable" style="background:#ffffff; border:none"

In its declaration, an identifier in the global scope may be followed by an export mark (*) to indicate that it be exported from its declaring module. In this case, the identifier may be used in other modules, if they import the declaring module. The identifier is then prefixed by the identifier designating its module (see Section 11). The prefix and the identifier are separated by a period and together are called a qualified identifier.
 * style="vertical-align:top; border:none; padding:0" |1.
 * style="vertical-align:top; border:none; padding:0" |If a type T is defined as POINTER TO T1 (see Section 6.4), the identifier T1 can be declared textually following the declaration of T, but it must lie within the same scope.
 * style="vertical-align:top; border:none; padding:0; padding-right: 0.3em" |2.
 * style="vertical-align:top; border:none; padding:0" |Field identifiers of a record declaration (see Section 6.3) are valid in field designators only.
 * }
 * style="vertical-align:top; border:none; padding:0" |Field identifiers of a record declaration (see Section 6.3) are valid in field designators only.
 * }

 $  qualident = [ident "."] ident. $  identdef = ident ["*"].

The following identifiers are predefined; their meaning is defined in the indicated sections:  ABS      (10.2)   LEN       (10.2) ASH      (10.2)   LONG      (10.2) BOOLEAN  (6.1)    LONGINT   (6.1) CAP      (10.2)   LONGREAL  (6.1) CHAR     (6.1)    MAX       (10.2) CHR      (10.2)   MIN       (10.2) COPY     (10.2)   NEW       (6.4) DEC      (10.2)   ODD       (10.2) ENTIER   (10.2)   ORD       (10.2) EXCL     (10.2)   REAL      (6.1) FALSE    (6.1)    SET       (6.1) HALT     (10.2)   SHORT     (10.2) INC      (10.2)   SHORTINT  (6.1) INCL     (10.2)   SIZE      (10.2) INTEGER  (6.1)    TRUE      (6.1) 5. Constant declarations

A constant declaration associates an identifier with a constant value.  $ ConstantDeclaration  =  identdef "=" ConstExpression. $ ConstExpression  =  expression.

A constant expression can be evaluated by a mere textual scan without actually executing the program. Its operands are constants (see Section 8).

Examples:  N     =  100 limit =  2*N -1 all   =  {0 .. WordSize-1} 6. Type declarations

A data type determines the set of values that variables of that type may assume, and the operators that are applicable. A type declaration is used to associate an identifier with the type. Such association may be with unstructured (basic) types, or it may be with structured types, in which case it defines the structure of variables of this type and, by implication, the operators that are applicable to the components. There are two different structures, namely arrays and records, with different component selectors.

 $ TypeDeclaration  =  identdef "=" type. $ type  =  qualident | ArrayType | RecordType | PointerType | ProcedureType.

Examples:
 Table      =  ARRAY N OF REAL Tree       =  POINTER TO Node Node       =  RECORD key: INTEGER; left, right: Tree END

CenterNode =  RECORD (Node) name: ARRAY 32 OF CHAR; subnode: Tree END

Function*  =  PROCEDURE (x: INTEGER): INTEGER

6.1. Basic types

The following basic types are denoted by predeclared identifiers. The associated operators are defined in Section 8.2, and the predeclared function procedures in Section 10.2. The values of a given basic type are the following:

 * 1) BOOLEAN the truth values TRUE and FALSE.
 * 2) CHAR the characters of the extended ASCII set (0X ... 0FFX).
 * 3) SHORTINT the integers between MIN(SHORTINT) and MAX(SHORTINT).
 * 4) INTEGER the integers between MIN(INTEGER) and MAX(INTEGER).
 * 5) LONGINT the integers between MIN(LONGINT) and MAX(LONGINT).
 * 6) REAL real numbers between MIN(REAL) and MAX(REAL).
 * 7) LONGREAL real numbers between MIN(LONGREAL) and MAX(LONGREAL).
 * 8) SET the sets of integers between 0 and MAX(SET).

Types 3 to 5 are integer types, 6 and 7 are real types, and together they are called numeric types. They form a hierarchy; the larger type includes (the values of) the smaller type:

 * LONGREAL >= REAL >= LONGINT >= INTEGER >= SHORTINT

Note: >= stands here for "is superset of or equal to". 6.2. Array types

An array is a structure consisting of a fixed number of elements which are all of the same type, called the element type. The number of elements of an array is called its length. The elements of the array are designated by indices, which are integers between 0 and the length minus 1.
 $ ArrayType  =  ARRAY length {"," length} OF type. $ length  =  ConstExpression.

A declaration of the form: ARRAY N0, N1, ... , Nk OF T

is understood as an abbreviation of the declaration
 ARRAY N0 OF ARRAY N1 OF    ... ARRAY Nk OF T

Examples:
 ARRAY N OF INTEGER ARRAY 10, 20 OF REAL 6.3. Record types

A record type is a structure consisting of a fixed number of elements of possibly different types. The record type declaration specifies for each element, called a field, its type and an identifier that denotes the field. The scope of these field identifiers is the record definition itself, but they are also visible within field designators (see Section 8.1) referring to elements of record variables.

 $ RecordType  =  RECORD ["(" BaseType ")"] FieldListSequence END. $ BaseType  =  qualident. $ FieldListSequence  =  FieldList {";" FieldList}. $ FieldList  =  [IdentList ":" type]. $ IdentList  =  identdef {"," identdef}.

If a record type is exported, field identifiers that are to be visible outside the declaring module must be marked. They are called public fields; unmarked fields are called private fields.

Record types are extensible, that is, a record type can be defined as an extension of another record type. In the examples above, CenterNode (directly) extends Node, which is the (direct) base type of CenterNode. More specifically, CenterNode extends Node with the fields name and subnode.

Definition: A type T0 extends a type T, if it equals T or if it directly extends an extension of T. Conversely, a type T is a base type of T0, if it equals T0, or if it is the direct base type of a base type of T0.

Examples:
 RECORD day, month, year: INTEGER END

RECORD name, firstname: ARRAY 32 OF CHAR; age: INTEGER; salary: REAL END 6.4. Pointer types

Variables of a pointer type P assume as values pointers to variables of some type T. The pointer type P is said to be bound to T, and T is the pointer base type of P. T must be a record or array type. Pointer types inherit the extension relation of their base types. If a type T0 is an extension of T and P0 is a pointer type bound to T0, then P0 is also an extension of P.

 $ PointerType  =  POINTER TO type. If p is a variable of type P = POINTER TO T, then a call of the predefined procedure NEW(p) has the following effect (see 10.2): A variable of type T is allocated in free storage, and a pointer to it is assigned to p. This pointer p is of type P; the referenced variable p^ is of type T. Failure of allocation results in p obtaining the value NIL. Any pointer variable may be assigned the value NIL, which points to no variable at all. 6.5. Procedure types

Variables of a procedure type T have a procedure (or NIL) as value. If a procedure P is assigned to a procedure variable of type T, the (types of the) formal parameters of P must be the same as those indicated in the formal parameters of T. The same holds for the result type in the case of a function procedure (see 10.1). P must not be declared local to another procedure, and neither can it be a predefined procedure.

 $ ProcedureType = PROCEDURE [FormalParameters]. 7. Variable declarations

Variable declarations serve to introduce variables and associate them with identifiers that must be unique within the given scope. They also serve to associate fixed data types with the variables.

$ VariableDeclaration  =  IdentList ":" type.

Variables whose identifiers appear in the same list are all of the same type.

Examples of variable declarations (refer to examples in Section 6):
 i, j, k: INTEGER x, y:    REAL p, q:    BOOLEAN s:       SET f:       Function a:       ARRAY 100 OF REAL w:       ARRAY 16 OF              RECORD ch: CHAR; count: INTEGER END t:       Tree

Variables of a pointer type T0 and VAR-parameters of a record type T0 may assume values whose type T1 is an extension of their declared type T0. 8. Expressions

Expressions are constructs denoting rules of computation whereby constants and current values of variables are combined to derive other values by the application of operators and function procedures. Expressions consist of operands and operators. Parentheses may be used to express specific associations of operators and operands. 8.1. Operands

With the exception of sets and literal constants, i.e. numbers and character strings, operands are denoted by designators. A designator consists of an identifier referring to the constant, variable, or procedure to be designated. This identifier may possibly be qualified by module identifiers (see Section 4 and 11), and it may be followed by selectors, if the designated object is an element of a structure.

If A designates an array, then A[E] denotes that element of A whose index is the current value of the expression E. The type of E must be an integer type. A designator of the form A[E1, E2, ..., En] stands for A[E1][E2] ... [En]. If p designates a pointer variable, p^ denotes the variable which is referenced by p. If r designates a record, then r.f denotes the field f of r. If p designates a pointer, p.f denotes the field f of the record p^, i.e. the dot implies dereferencing and p.f stands for p^.f, and p[E] denotes the element of p^ with index E.

The typeguard v(T0) asserts that v is of type T0, i.e. it aborts program execution, if v is not of type T0. The guard is applicable, if
 * {| class="wikitable" style="background:#ffffff; border:none; border-collapse:collapse; padding:0"

 $ designator  =  qualident {"." ident | "[" ExpList "]" | "(" qualident ")" | "^" }. $ ExpList  =  expression {"," expression}.
 * style="vertical-align:top; border:none; padding:0" |1. T0 is an extension of the declared type T of v, and if
 * style="vertical-align:top; border:none; padding:0" |2. v is a formal variable parameter of record type or v is a pointer.
 * }
 * style="vertical-align:top; border:none; padding:0" |2. v is a formal variable parameter of record type or v is a pointer.
 * }

If the designated object is a variable, then the designator refers to the variable's current value. If the object is a procedure, a designator without parameter list refers to that procedure. If it is followed by a (possibly empty) parameter list, the designator implies an activation of the procedure and stands for the value resulting from its execution. The (types of the) actual parameters must correspond to the formal parameters as specified in the procedure's declaration (see Section 10).

Examples of designators (see examples in Section 7):
 i                     (INTEGER) a[i]                  (REAL) w[3].ch               (CHAR) t.key                 (INTEGER) t.left.right          (Tree) t(CenterNode).subnode (Tree) 8.2. Operators

The syntax of expressions distinguishes between four classes of operators with different precedences (binding strengths). The operator ~ has the highest precedence, followed by multiplication operators, addition operators, and relations. Operators of the same precedence associate from left to right. For example, x-y-z stands for (x-y)-z.

 $ expression  =  SimpleExpression [relation SimpleExpression]. $ relation  =  "=" | "#" | "<" | "<=" | ">" | ">=" | IN | IS. $ SimpleExpression  =  ["+"|"-"] term {AddOperator term}. $ AddOperator  =  "+" | "-" | OR. $ term  =  factor {MulOperator factor}. $ MulOperator  =  "*" | "/" | DIV | MOD | "&". $ factor  =  number | CharConstant | string | NIL | set | $   designator [ActualParameters] | "(" expression ")" | "~" factor. $ set  =  "{" [element {"," element}] "}". $ element  =  expression [".." expression]. $ ActualParameters  =  "(" [ExpList] ")".

The available operators are listed in the following tables. In some instances, several different operations are designated by the same operator symbol. In these cases, the actual operation is identified by the type of the operands.

8.2.1 Logical operators

 symbol   result OR      logical disjunction &      logical conjunction ~      negation

These operators apply to BOOLEAN operands and yield a BOOLEAN result.
 p OR q stands for   "if p then TRUE, else q" p & q   stands for   "if p then q, else FALSE" ~ p    stands for   "not p"

8.2.2. Arithmetic operators

 symbol result +    sum -    difference *    product /    quotient DIV   integer quotient MOD   modulus

The operators +, -, *, and / apply to operands of numeric types. The type of the result is that operand's type which includes the other operand's type, except for division (/), where the result is the real type which includes both operand types. When used as operators with a single operand, - denotes sign inversion and + denotes the identity operation.

The operators DIV and MOD apply to integer operands only. They are related by the following formulas defined for any dividend x and positive divisors y:
 x =  (x DIV y) * y  +  (x MOD y)    0  <= (x MOD y) < y

8.2.3. Set operators

 symbol result + union - difference * intersection / symmetric set difference

The monadic minus sign denotes the complement of x, i.e. -x denotes the set of integers between 0 and MAX(SET) which are not elements of x.
 x - y =  x * (-y) x / y =  (x-y) + (y-x)

8.2.4. Relations

 symbol relation =     equal #     unequal <     less <=    less or equal >     greater >=    greater or equal IN    set membership IS    type test

Relations are Boolean. The ordering relations <, <=, >, and >= apply to the numeric types, CHAR, and character arrays (strings). The relations = and # also apply to the type BOOLEAN and to set, pointer, and procedure types. x IN s stands for "x is an element of s". x must be of an integer type, and s of type SET. v IS T stands for "v is of type T" and is called a type test. It is applicable, if

 * T is an extension of the declared type T0 of v, and if
 * v is a variable parameter of record type or v is a pointer.

Assuming, for instance, that T is an extension of T0 and that v is a designator declared of type T0, then the test "v IS T" determines whether the actually designated variable is (not only a T0, but also) a T. The value of NIL IS T is undefined.

Examples of expressions (refer to examples in Section 7):
 1987              (INTEGER) i DIV 3           (INTEGER) ~p OR q           (BOOLEAN) (i+j) * (i-j)     (INTEGER) s - {8, 9, 13}    (SET) i + x             (REAL) a[i+j] * a[i-j]   (REAL) (0<=i) & (i<100)  (BOOLEAN) t.key = 0         (BOOLEAN) k IN {i .. j-1}   (BOOLEAN) t IS CenterNode   (BOOLEAN) 9. Statements

Statements denote actions. There are elementary and structured statements. Elementary statements are not composed of any parts that are themselves statements. They are the assignment, the procedure call, and the return and exit statements. Structured statements are composed of parts that are themselves statements. They are used to express sequencing and conditional, selective, and repetitive execution. A statement may also be empty, in which case it denotes no action. The empty statement is included in order to relax punctuation rules in statement sequences.

 $ statement  =  [assignment | ProcedureCall | $   IfStatement | CaseStatement | WhileStatement | RepeatStatement | $   LoopStatement | WithStatement | EXIT | RETURN [expression] ].

9.1 Assignments

The assignment serves to replace the current value of a variable by a new value specified by an expression. The assignment operator is written as ":=" and pronounced as becomes.
$ assignment  =  designator ":=" expression.

The type of the expression must be included by the type of the variable, or it must extend the type of the variable. The following exceptions hold:

 * 1) The constant NIL can be assigned to variables of any pointer or procedure type.

 * 1) Strings can be assigned to any variable whose type is an array of characters, provided the length of the string is less than that of the array. If a string s of length n is assigned to an array a, the result is a[i] = si for i = 0 ... n-1, and a[n] = 0X.

Examples of assignments (see examples in Section 7):
 i := 0 p := i = j x := i + 1 k := log2(i+j) F := log2 s := {2, 3, 5, 7, 11, 13} a[i] := (x+y) * (x-y) t.key := i w[i+1].ch := "A"

9.2 Procedure calls

A procedure call serves to activate a procedure. The procedure call may contain a list of actual parameters which are substituted in place of their corresponding formal parameters defined in the procedure declaration (see Section 10). The correspondence is established by the positions of the parameters in the lists of actual and formal parameters respectively. There exist two kinds of parameters: variable and value parameters.

In the case of variable parameters, the actual parameter must be a designator denoting a variable. If it designates an element of a structured variable, the selector is evaluated when the formal/actual parameter substitution takes place, i.e. before the execution of the procedure. If the parameter is a value parameter, the corresponding actual parameter must be an expression. This expression is evaluated prior to the procedure activation, and the resulting value is assigned to the formal parameter which now constitutes a local variable (see also 10.1.).

 $ ProcedureCall  =  designator [ActualParameters].

Examples of procedure calls:
 ReadInt(i) (see Section 10) WriteInt(j*2+1, 6) INC(w[k].count)

9.3. Statement sequences

Statement sequences denote the sequence of actions specified by the component statements which are separated by semicolons.

 $ StatementSequence  =  statement {";" statement}.

9.4. If statements

 $ IfStatement  =  IF expression THEN StatementSequence $   {ELSIF expression THEN StatementSequence} $   [ELSE StatementSequence] $ END.

If statements specify the conditional execution of guarded statements. The Boolean expression preceding a statement is called its guard. The guards are evaluated in sequence of occurrence, until one evaluates to TRUE, whereafter its associated statement sequence is executed. If no guard is satisfied, the statement sequence following the symbol ELSE is executed, if there is one.

Example:
 IF (ch >= "A") & (ch <= "Z") THEN ReadIdentifier ELSIF (ch >= "0") & (ch <= "9") THEN ReadNumber ELSIF ch = 22X THEN ReadString END

9.5. Case statements

Case statements specify the selection and execution of a statement sequence according to the value of an expression. First the case expression is evaluated, then the statement sequence is executed whose case label list contains the obtained value. The case expression and all labels must be of the same type, which must be an integer type or CHAR. Case labels are constants, and no value must occur more than once. If the value of the expression does not occur as a label of any case, the statement sequence following the symbol ELSE is selected, if there is one. Otherwise it is considered as an error.

 $ CaseStatement  =  CASE expression OF case {"|" case} $                   [ELSE StatementSequence] END. $ case  =  [CaseLabelList ":" StatementSequence]. $ CaseLabelList  =  CaseLabels {"," CaseLabels}. $ CaseLabels  =  ConstExpression [".." ConstExpression].

Example:
 CASE ch OF      "A" .. "Z": ReadIdentifier | "0" .. "9": ReadNumber | 22X : ReadString ELSE SpecialCharacter END 9.6. While statements

While statements specify repetition. If the Boolean expression (guard) yields TRUE, the statement sequence is executed. The expression evaluation and the statement execution are repeated as long as the Boolean expression yields TRUE.

 $ WhileStatement  =  WHILE expression DO StatementSequence END.

Examples:
 WHILE j > 0 DO   j := j DIV 2; i := i+1 END

WHILE (t # NIL) & (t.key # i) DO   t := t.left END

9.7. Repeat Statements

A repeat statement specifies the repeated execution of a statement sequence until a condition is satisfied. The statement sequence is executed at least once.

 $ RepeatStatement  =  REPEAT StatementSequence UNTIL expression.

9.8. Loop statements

A loop statement specifies the repeated execution of a statement sequence. It is terminated by the execution of any exit statement within that sequence (see 9.9).

$ LoopStatement  =  LOOP StatementSequence END.

Example:
 LOOP IF t1 = NIL THEN EXIT END ; IF k < t1.key THEN t2 := t1.left; p := TRUE ELSIF k > t1.key THEN t2 := t1.right; p := FALSE ELSE EXIT END ; t1 := t2 END

Although while and repeat statements can be expressed by loop statements containing a single exit statement, the use of while and repeat statements is recommended in the most frequently occurring situations, where termination depends on a single condition determined either at the beginning or the end of the repeated statement sequence. The loop statement is useful to express cases with several termination conditions and points. 9.9. Return and exit statements

A return statement consists of the symbol RETURN, possibly followed by an expression. It indicates the termination of a procedure, and the expression specifies the result of a function procedure. Its type must be identical to the result type specified in the procedure heading (see Section 10).

Function procedures require the presence of a return statement indicating the result value. There may be several, although only one will be executed. In proper procedures, a return statement is implied by the end of the procedure body. An explicit return statement therefore appears as an additional (probably exceptional) termination point.

An exit statement consists of the symbol EXIT. It specifies termination of the enclosing loop statement and continuation with the statement following that loop statement. Exit statements are contextually, although not syntactically bound to the loop statement which contains them. 9.10. With statements

If a pointer variable or a variable parameter with record structure is of a type T0, it may be designated in the heading of a with clause together with a type T that is an extension of T0. Then the variable is guarded within the with statement as if it had been declared of type T. The with statement assumes a role similar to the type guard, extending the guard over an entire statement sequence. It may be regarded as a regional type guard.

 $ WithStatement  =  WITH qualident ":" qualident DO StatementSequence END.

Example:
 WITH t: CenterNode DO name := t.name; L := t.subnode END 10. Procedure declarations

Procedure declarations consist of a procedure heading and a procedure body. The heading specifies the procedure identifier, the formal parameters, and the result type (if any). The body contains declarations and statements. The procedure identifier is repeated at the end of the procedure declaration.

There are two kinds of procedures, namely proper procedures and function procedures. The latter are activated by a function designator as a constituent of an expression, and yield a result that is an operand in the expression. Proper procedures are activated by a procedure call. The function procedure is distinguished in the declaration by indication of the type of its result following the parameter list. Its body must contain a RETURN statement which defines the result of the function procedure.

All constants, variables, types, and procedures declared within a procedure body are local to the procedure. The values of local variables are undefined upon entry to the procedure. Since procedures may be declared as local objects too, procedure declarations may be nested.

In addition to its formal parameters and locally declared objects, the objects declared in the environment of the procedure are also visible in the procedure (with the exception of those objects that have the same name as an object declared locally).

The use of the procedure identifier in a call within its declaration implies recursive activation of the procedure.

 $ ProcedureDeclaration  =  ProcedureHeading ";" ProcedureBody ident. $ ProcedureHeading  =  PROCEDURE ["*"] identdef [FormalParameters]. $ ProcedureBody  =  DeclarationSequence [BEGIN StatementSequence] END. $ ForwardDeclaration  =  PROCEDURE "^" identdef [FormalParameters]. $ DeclarationSequence  =  {CONST {ConstantDeclaration ";"} | $   TYPE {TypeDeclaration ";"} | VAR {VariableDeclaration ";"}} $   {ProcedureDeclaration ";" | ForwardDeclaration ";"}.

A forward declaration serves to allow forward references to a procedure that appears later in the text in full. The actual declaration - which specifies the body - must indicate the same parameters and result type (if any) as the forward declaration, and it must be within the same scope.

An asterisk following the symbol PROCEDURE is a hint to the compiler and specifies that the procedure is to be usable as parameter and assignable to variables. (Depending on the implementation, the hint may be optional or required.). 10.1. Formal parameters

Formal parameters are identifiers which denote actual parameters specified in the procedure call. The correspondence between formal and actual parameters is established when the procedure is called. There are two kinds of parameters, namely value and variable parameters. The kind is indicated in the formal parameter list. Value parameters stand for local variables to which the result of the evaluation of the corresponding actual parameter is assigned as initial value. Variable parameters correspond to actual parameters that are variables, and they stand for these variables. Variable parameters are indicated by the symbol VAR, value parameters by the absence of the symbol VAR. A function procedure without parameters must have an empty parameter list. It must be called by a function designator whose actual parameter list is empty too.

Formal parameters are local to the procedure, i.e. their scope is the program text which constitutes the procedure declaration.

 $ FormalParameters  =  "(" [FPSection {";" FPSection}] ")" [":" qualident]. $ FPSection  =  [VAR] ident  {"," ident} ":" FormalType. $ FormalType  =  {ARRAY OF} qualident | ProcedureType.

The type of each formal parameter is specified in the parameter list. For variable parameters, it must be identical to the corresponding actual parameter's type, except in the case of a record, where it must be a base type of the corresponding actual parameter's type. For value parameters, the rule of assignment holds (see 9.1). If the formal parameter's type is specified as ARRAY OF T the parameter is said to be an open array parameter, and the corresponding actual parameter may be any array with element type T.

If a formal parameter specifies a procedure type, then the corresponding actual parameter must be either a procedure declared globally or a variable (or parameter) of that procedure type. It cannot be a predefined procedure. The result type of a procedure can be neither a record nor an array.

Examples of procedure declarations:
 PROCEDURE ReadInt(VAR x: INTEGER); VAR i : INTEGER; ch: CHAR; BEGIN i := 0; Read(ch); WHILE ("0" <= ch) & (ch <= "9") DO      i := 10*i + (ORD(ch)-ORD("0")); Read(ch) END ; x := i END ReadInt

PROCEDURE WriteInt(x: INTEGER); (* 0 <= x < 10.0E5 *) VAR i: INTEGER; buf: ARRAY 5 OF INTEGER; BEGIN i := 0; REPEAT buf[i] := x MOD 10; x := x DIV 10;  INC(i) UNTIL x = 0; REPEAT DEC(i); Write(CHR(buf[i] + ORD("0"))) UNTIL i = 0 END WriteInt

PROCEDURE log2(x: INTEGER): INTEGER; VAR y: INTEGER; (*assume x > 0*) BEGIN y := 0; WHILE x > 1 DO x := x DIV 2; INC(y) END ; RETURN y END log2 10.2. Predefined procedures

The following table lists the predefined procedures. Some are generic procedures, i.e. they apply to several types of operands. v stands for a variable, x and n for expressions, and T for a type.

Function procedures

Type conversion procedures

Proper procedures

In HALT(x), x is a parameter whose interpretation is left to the underlying system implementation. 11. Modules

A module is a collection of declarations of constants, types, variables, and procedures, and a sequence of statements for the purpose of assigning initial values to the variables. A module typically constitutes a text that is compilable as a unit.

 $ module =  MODULE ident ";"  [ImportList] DeclarationSequence $    [BEGIN StatementSequence] END ident "." . $ ImportList =  IMPORT import {"," import} ";". $ import =  ident [":=" ident].

The import list specifies the modules of which the module is a client. If an identifier x is exported from a module M, and if M is listed in a module's import list, then x is referred to as M.x. If the form "M := M1" is used in the import list, that object declared within M1 is referenced as M.x.

Identifiers that are to be visible in client modules, i.e. outside the declaring module, must be marked by an export mark in their declaration.

The statement sequence following the symbol BEGIN is executed when the module is added to a system (loaded). Individual (parameterless) procedures can thereafter be activated from the system, and these procedures serve as commands.

Example:
 MODULE Out; (*exported procedures: Write, WriteInt, WriteLn*) IMPORT Texts, Oberon; VAR W: Texts.Writer; PROCEDURE Write*(ch: CHAR); BEGIN Texts.Write(W, ch) END ; PROCEDURE WriteInt*(x, n: LONGINT); VAR i: INTEGER; a: ARRAY 16 OF CHAR; BEGIN i := 0; IF x < 0 THEN Texts.Write(W, "-"); x := -x END ; REPEAT a[i] := CHR(x MOD 10 + ORD("0")); x := x DIV 10; INC(i) UNTIL x = 0; REPEAT Texts.Write(W, " "); DEC(n) UNTIL n <= i;   REPEAT DEC(i); Texts.Write(W, a[i]) UNTIL i = 0 END WriteInt; PROCEDURE WriteLn*; BEGIN Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf) END WriteLn; BEGIN Texts.OpenWriter(W) END Out. 12. The Module SYSTEM

The module SYSTEM contains definitions that are necessary to program low-level operations referring directly to resources particular to a given computer and/or implementation. These include for example facilities for accessing devices that are controlled by the computer, and facilities to break the data type compatibility rules otherwise imposed by the language definition. It is recommended to restrict their use to specific low-level modules. Such modules are inherently non-portable, but easily recognized due to the identifier SYSTEM appearing in their import lists. The subsequent definitions are applicable to most modern computers; however, individual implementations may include in this module definitions that are particular to the specific, underlying computer.

Module SYSTEM exports the data type BYTE. No representation of values is specified. Instead, certain compatibility rules with other types are given:

 * The type BYTE is compatible with CHAR and SHORTINT.
 * If a formal parameter is of type ARRAY OF BYTE, then the corresponding actual parameter may be of any type.

The procedures contained in module SYSTEM are listed in the following tables. They correspond to single instructions compiled as in-line code. For details, the reader is referred to the processor manual. v stands for a variable, x, y, a, and n for expressions, and T for a type.

Function procedures

Proper procedures

HTML Translation: A. Fischer and J. Gutknecht/ October 1999

''13 Jul 2002 - Copyright © 2002 ETH Zürich. All rights reserved.''

E-Mail: oberon at lists.inf.ethz.ch

Homepage: http://www.ethoberon.ethz.ch/

title: Oberon/oreport


text: Agrodatabase/202 - Topics, Units and Valuations/Topics


text:
Agrodatabase/21 - Crop Prontuary - Data

VEGETABLES Tuber vegetables Tropical tuber vegetables Root vegetables Bulb vegetables Fruiting vegetables Brassica vegetables Leaf vegetables Stem vegetables
 * 1) / Strawberries /
 * 1) / Potatoes /
 * 1) / Cassava /
 * 2) / Sweet potatoes /
 * 3) / Yams /
 * 1) / Carrots /
 * 2) / Radishes /
 * 3) / Turnips /
 * 1) / Garlic /
 * 2) / Onions /
 * 1) / Tomatoes /
 * 2) / Peppers /
 * 3) / Aubergines /
 * 4) / Cucumbers /
 * 5) / Courgettes /
 * 6) / Melons /
 * 7) / Pumpkins /
 * 8) / Watermelons /
 * 9) / Chayote /
 * 1) / Broccoli /
 * 2) / Cauliflower /
 * 3) / Head cabbage /
 * 4) / Chinese cabbage /
 * 1) / Lettuce /
 * 2) / Scarole /
 * 3) / Spinach /
 * 4) / Beet leaves /
 * 5) / Celery /
 * 1) / Asparagus /
 * 2) / Globe artichokes /

title: Agrodatabase/21 - Crop Prontuary - Data


text:
User talk:Pallavi962

Welcome, Pallavi962!

If you have any questions, you can ask in the assistance reading room or possibly contact me personally.

I've restored your stub into User:Pallavi962/sandbox, so you can develop it without indexing an empty book. JackPotte (discuss • contribs) 18:49, 13 April 2020 (UTC)

title: User talk:Pallavi962


text:
Cookbook:Hilbah (Fenugreek Condiment)

Hilbah, (Arabic: حلبة) also spelled holbah, is a condiment or dollop made from ground fenugreek seeds. It is typically consumed with a morsel of bread (sop), or added as flavoring to hot soups. Its preparation is mostly found in Yemen, Israel and other Middle-Eastern countries.

Ingredients

 * 3 tbsp ground fenugreek seeds
 * 1 cup water
 * Coriander leaves, finely chopped
 * Leeks, chopped
 * 1 lemon or citric acid to taste
 * 1 tsp salt
 * 1 tbsp zḥug (hot sauce made from red peppers, garlic, coriander leaves, etc.)
 * Grated tomato (optional)

Procedure

 * 1) Soak ground fenugreek in the water for 3 hours until expanded.
 * 2) Beat with a spatula until paste becomes light and frothy. Gradually add more water if necessary.
 * 3) Mix in coriander leaves and leeks.
 * 4) Mix in salt, lemon juice, and zḥug.
 * 5) Mix in grated tomato if using.

title: Cookbook:Hilbah (Fenugreek Condiment)


text:
A hand book of life sciences/EXCRETORY SYSTEM

The removal of harmful and unwanted waste material from the body is called excretion.Those organ which help in the process of excretion called excretory organs.


text:
User talk:MarkJFernandes

Deletion
I saw your edit summary. Ordinary editors can't delete pages. If you want a page deleted, and you are the only author, then please edit it and place the following text on the page and an administrator will delete it for you. Thanks - QuiteUnusual (discuss • contribs) 10:11, 30 April 2020 (UTC)

 * thanks for this. Perhaps you can help me with another issue that started occurring just about the time of your message (just wondering whether they might be connected)?

 * My template End-user_Computer_Security/Upvote_downvote_section_links is not working properly now (it was working fine before). Sometimes, I can 'jig' it into working so that the images appear, but then the images stop appearing again (images should appear). I'm wondering whether the 'this page may need to be reviewed for quality' message might have anything to do with it.

 * Any ideas?

--MarkJFernandes (discuss • contribs) 10:40, 30 April 2020 (UTC)

 * (Talk page watcher) Change the image size to 20px. Not sure why, but they wont display at 15px. It might be a bug with the image scaler. I've also reviewed the page. -- Jules (Mrjulesd) 11:24, 30 April 2020 (UTC)

 * thanks for advice and looking into this. Not sure whether it will work permanently at 20px—may revert back to not working, as this is the behaviour when set at 15px. Will try suggestion anyway.

 * I've described this issue in detail, and added it to the list of bugs, on the Wikibooks page for bugs and feature requests.

--MarkJFernandes (discuss • contribs) 11:39, 30 April 2020 (UTC)

 * Unfortunately that page is largely historical, and hasn't been used used since 2007; anything you add will probably be ignored. If you want to report bugs you can at Phabricator: https://phabricator.wikimedia.org/ . But be sure to search first, most bugs have been reported in the past, and are awaiting fixing (often indefinitely in my experience). -- Jules  (Mrjulesd) 12:49, 30 April 2020 (UTC)

 * Are you using Firefox? I see that you changed the image to 16px, and it now renders for me at certain magnifications but not at others. This leads to me the conclusion that it is probably a browser-related problem, rather than a problem with the MediaWiki software. The lines are probably too thin to render at certain magnifications, so it appears transparent instead. -- Jules (Mrjulesd) 17:25, 30 April 2020 (UTC)

 * I'm using the Chrome internet browser. Platform and computer details are listed in the bug report.

 * I'm inclined to believe that it's probably not a browser issue because of the stability, amount of testing, and considerable use, associated with popular browsers (such as Chrome and Firefox). However, as you pointed out, it could be. I changed it to 16px because the icons were just a bit too big at 20px (20px seemed to resolve the problem by the way). In respect of being too thin or not, I should add that at 15px, it did work for a while, but then just inexplicably stopped working—this probably points to it not just being a matter of being too thin.

 * Thanks for looking into this.

--MarkJFernandes (discuss • contribs) 07:44, 1 May 2020 (UTC)

Commons srcset problem
Yeah I think I've found the problem in the HTML coding, this is the img tag for the thumb up icon:

The problem is the srcset attribute: one of the icons it accesses (depending on the scaling) is https://upload.wikimedia.org/wikipedia/commons/thumb/e/ef/Thumbs_up_font_awesome.svg/24px-Thumbs_up_font_awesome.svg.png, and that happens to be a blank. So not a direct problem with the MediaWiki software, but a problem with the dataset of images that it tries to accesses from Commons, where there is a missing image.

One work-around would be to access a different icon, there's a definite problem with this one, depending on browser scaling. It might be worth mentioning on Phabricator, if it hasn't been reported before. Jules (Mrjulesd) 10:37, 1 May 2020 (UTC)

 * thanks for looking even more into this. At the moment, I'm a bit pressed for time to submit it to Phabricator. Could you perhaps copy (or transfer) your solution to the bug report I made. That way, at least the resolution against the bug/issue, is public. At some point, someone can transfer it over to Phabricator if necessary.

P.S. I would copy it over myself but I think I might infringe your copyright if I do it without your permission. --MarkJFernandes (discuss • contribs) 10:50, 1 May 2020 (UTC)
 * OK well I might at some point, I would have to make a search first. Btw you have my full permission to use our correspondence (past or future) in any way you so wish without attribution; no rights are reserved.-- Jules (Mrjulesd) 11:07, 1 May 2020 (UTC)
 * FYI I have brought it up at Commons:File talk:Thumbs up font awesome.svg. I'll see if I get a reply. I've searched Phabricator, but I couldn't find anything that seemed relevant, but I have suggested a simple workaround.-- Jules (Mrjulesd) 12:02, 1 May 2020 (UTC).
 * I have reuploaded the image and it seems to be successful; the 24px image is now rendering. So I'm that the end of it (unless there is some other problem that crops up). Anyway your template is now rendering too. Let me know if you have further problems. -- Jules (Mrjulesd) 11:36, 2 May 2020 (UTC)

--Synoman Barris (discuss • contribs) 08:15, 18 September 2020 (UTC)

We sent you an e-mail
Hello ,

Really sorry for the inconvenience. This is a gentle note to request that you check your email. We sent you a message titled "The Community Insights survey is coming!". If you have questions, email surveys@wikimedia.org.

You can see my explanation here.

MediaWiki message delivery (discuss • contribs) 18:48, 25 September 2020 (UTC)

title: User talk:MarkJFernandes


text:
User:Odawater

Tokkumma

title: User:Odawater


text: Template:Center/top

title: Template:Center/top


text: Template:Center/end

title: Template:Center/end


text:
Talk:JsonCpp

Does anyone think it would be beneficial to add a section about the JsonCpp Conan package? Using packages for C++ is great for developers as it allows them to save time and integrate packages in other languages easily into the code.

title: Talk:JsonCpp


text:
Professionalism/Alexandra Elbakyan and Sci-Hub

Sci-Hub is a website established by Alexandra Elbakyan in 2011 that allows users to have free open access to scholarly articles. Elbakyan described the site as “The first pirate website in the world to provide mass and public access to tens of millions of research papers.” The website provides access to 85.2% of paywalled articles through the use of institutional networks to gain subscription access to publications. Sci-Hub has been found to provide access to more articles than alternative access websites, including PubMed, ResearchGate, and Google Scholar. While a portion of the institutional credentials is donated to Sci-Hub, others are potentially obtained through hacking or phishing. While Sci-Hub has received support in some academic circles for its open access to articles and its opposition to the status quo in publishing, it has also received criticism for its illegality and alleged lack of academic integrity.

History
Alexandra Elbakyan was inspired to create Sci-Hub by her use of anonymizer websites to access LiveJournal from Kazakhstan, in which the blog site was restricted. Since its founding in 2011, Sci-Hub has received a steadily growing number of article download requests each year. The website received over 28 million download requests in 2015 and had access to 62 million articles in 2017. One reason for the growth in demand for Sci-Hub is the increase in publishers’ access prices for articles. This rise in prices was caused by the historical consolidation and lack of competition of publishers.

In 2015, Elsevier filed a lawsuit against Sci-Hub in the United States District Court. Sci-Hub was forced to suspend its domain names and stop distribution of Elsevier's works, but additional domains were opened outside the United States. Sci-Hub did not respond to Elsevier's claims and in 2016, Elbakyan was ordered to pay the latter $15 million. In 2017, the American Chemical Society (ACS) filed a second lawsuit against Sci-Hub and Elbakyan was ordered to pay an additional $4.8 million. However, as Elbakyan is currently outside of United States jurisdiction, she does not intend to pay either publisher. As of 2019, Elbakyan is under investigation by the United States Justice Department for potential links to Russian intelligence, possibly through Sci-Hub, but she has denied these claims.

Open Access
Sci-Hub provides open access to journal articles, which supporters claim allows widespread access to knowledge. Based on a 2016 study, most Sci-Hub users claim that they download pirated articles because they do not otherwise have access to them or because they object to publishers’ profits from the literature. Elbakyan criticizes paywalls on academic articles and argues that “practices of such companies like Elsevier are unacceptable, because they limit distribution of knowledge.” Consequently, one of the missions of Sci-Hub is to “fight inequality in knowledge access across the world.”

Researchers who support Sci-Hub often believe that “There’s a universalistic aspect to science, where you want it to be available to everyone.” Some researchers refer to scientists as “slaves to publishers,” as the former provide the research articles and the majority of quality control, while the latter sell the work at “vastly inflated price[s].” Researchers in developing nations have, in particular, benefited from Sci-Hub. Based on a 2005 study, 56% of medical institutions in countries with a gross national product below $1,000 per capita had no journal subscriptions. In 2015, the three countries with the most Sci-Hub downloads were Iran, China, and India. However, awareness of Sci-Hub in developing nations remains low. A study of six Latin American countries found that “four out of every five students were unaware of Sci-Hub despite it being a very valuable resource for obtaining scientific literature.” Despite this, the use of Sci-Hub in developing nations is growing as more people become aware of its potential.

Changing the Status-Quo
Sci-Hub is ultimately a goal of creating easily accessible academic literature and research. The current website is a way of changing how things are done in order to achieve that goal. Elbakyan did not intend for the website to be an illegal means of obtaining papers. Sci-Hub instead “advocate[s] for … copyright law to be repealed or changed" and represents an “impatience with the speed of change." Elbakyan complains that, as a student, paying a large sum for a paper “is just insane when you need to skim or read tens or hundreds of these papers to do research.” Her belief in open access is also in response to the “ever-increasing subscription pricing in a time of record-low publishing costs.” Publishers focus on the threat to their income instead of addressing the underlying issues that created Sci-Hub. Instances of publishers “attacking academics who present information” about Sci-Hub are not uncommon. In 2013, Elsevier issued thousands of takedown notices to researchers and universities whose articles were published on free, open access websites, including Sci-Hub.

Need for Change Shown by COVID-19
The COVID-19 pandemic that arose late 2019 into early 2020 shows the necessity of changing the status quo in the academic publishing field. The international nature of the pandemic “has resulted in an unprecedented level of collaboration among researchers worldwide.” The fast-paced evolution of the situation exposed that “the longstanding research publication model … doesn’t work when a critical need arises for rapid dissemination of data.” Edward Campion, an executive editor with the New England Journal of Medicine, asserts that “the responsible thing … is to make all research freely available during epidemics … where there are people at risk.” Sci-Hub was one of the first websites to release content with “more than 5,000 non-paywalled articles on coronaviruses” within a month of the virus surfacing in January 2020. It was not until two months later, when the World Health Organization declared pandemic status that publishers were urged “to voluntarily agree to make their COVID-19 and coronavirus-related publications … immediately accessible.” The pandemic displays how “publicly available knowledge can save lives,” even when the world may not be facing a pandemic.

Sci-Hub as Civil Disobedience
Civil disobedience is a “refusal to obey governmental demands” as a “means of forcing concessions from the government” Elbakyan's motives behind Sci-Hub are not to bypass copyright laws for the sake of breaking them, but to incite change in those laws. Civil disobedience movements throughout history involved breaking laws that were deemed unfair or unnecessary. Approximately ten billion US dollars are spent in publishing costs each year, while open access publishing would only cost around two hundred million US dollars. Publishers claim that Elbakyan uses Sci-Hub “to steal their content” when said content is “the knowledge of the world that they have been holding hostage for a gigantic ransom.” Elbakyan's stance puts people and the distribution of knowledge before “private monetary interests.”

Legality
Sci-Hub hosts copyrighted academic papers without publisher permission, which is a violation of copyright law. Sci-Hub openly opposes copyright law, calls itself a “pirate website,” and “advocate[s] for the cancellation of intellectual property.” Elbakyan insists that “Sci-Hub always intended to be legal,” but makes the case that the laws should be changed to meet Sci-Hub rather than the other way around. While the defense of restricting information required to continue scientific research behind prohibitive pay-walls is compelling, it is not a legal defense, unlike the “fair use doctrine” defense in United States copyright law.

Sci-Hub uses anonymously donated credentials of individuals from academic institutions to download these papers to the Sci-Hub repository. This use of another's credentials to log into a website that one does not have access to is a fraudulent act and a violation of the United States Computer Fraud and Abuse Act of 1986 and its amendments. This legislation has been used to prosecute Americans, such as Aaron Swartz, who have mass download academic papers. Sci-Hub still provides its services to the world because Elbakyan does not operate in the United States, so injunctions can only be carried out by cooperating countries with the required extradition laws. The two countries she is suspected to operate from, Russia and Kazakhstan, are not such countries. Elbakyan does not disclose her current location to avoid extradition and the injunction payments she owes.

End User Issues
To ensure that Sci-Hub's service can continue when lawsuits force specific iterations to shut down, Sci-Hub must change its domains and host its servers in countries with lax copyright infringement legislation or enforcement. While not inherently dangerous, this makes it difficult to distinguish between Elbakyan's version of Sci-Hub or those made by individuals aligned with Sci-Hub versus malicious ones. The latter distribute academic PDFs with custom JavaScript malware attached. In extreme cases, it is possible for an organization to take over a mirror of Sci-Hub or host their own as a type of sting operation for users of the website, as the Dutch government did in 2017 with a popular illicit market website. Historically, copyright holders, with the help of internet service providers, have followed IP addresses to physical addresses to strong arm film, television, and music pirates into paying fines. While Elbakyan and Sci-Hub incur risk and attention by providing illegal services, end users are not protected from risks that plague piracy websites.

Academic Integrity
A criticism of Sci-Hub is that the website compromises academic integrity that is provided by traditional publishers. In its 2015 injunction against Sci-Hub, Elsevier claimed that the former “risks the spread of bad science,” as it does not correct or retract articles with flawed conclusions. Researchers try to avoid having their work be accessible through Sci-Hub, as they believe that “if an academic has a paper in Nature or Science, that’s seen as their passport to their next grant or promotion.” Elsevier also argued that Sci-Hub detracts from publishers' funding of other projects, as the website impedes publishers from gathering usage statistics, which affects their services and subsequently their revenues. Another flaw of Sci-Hub is that it does not provide tools for researchers to connect to related studies, as the site only shows stored PDFs through the direct DOI provided by the user. Publishers offer services that Sci-Hub does not, such as curation of related content and keyword searches of papers, titles, and authors.

Generalizable Implications
The conflict between Sci-Hub, publishers, and the law is indicative of the growing issues of ownership and access, as they expand to more digital spaces globally. The concept of ownership is strained in the digital age. For example, ownership of a physical copy of a film is only “purchasing access to the motion picture which affords only the right to access the work according to the format’s particular specifications,” not ownership of the content. In the case of Sci-Hub, one woman, not a team of individuals, exposed how lucrative it is for publishers to hold copyrights and manage their access, even if access to essential research is complicated and expensive at best and impossible to obtain at worst. Piracy is usually the resort when access to content is limited. According to Valve co-founder Gabe Newell, “Piracy is almost always a service problem and not a pricing problem.” While he refers to the digital game store his company operates, he insists that piracy rates can be reduced by offering services with financial worth that can compete with the hassles of obtaining an illegal, but free, product.

Conclusions
Sci-Hub is an inevitable consequence of the traditional for-profit publishing model and is one of the tools used by proponents of the growing open access movement. Despite its convenience and utility to academics worldwide, the website faces immense legal challenges in regards to piracy and user privacy. It remains to be seen whether Sci-Hub will have long-term impacts on copyright laws.