text:
Infrastructure Past, Present, and Future Casebook/5.9 GHz Spectrum

This casebook is a case study on the 5.9 GHz Spectrum by James Robles, Tristin McCreight, and Chelsey Stebbins as part of the Infrastructure Past, Present and Future: GOVT 490-004 (Synthesis Seminar for Policy & Government) / CEIE 499-003 (Special Topics in Civil Engineering) Fall 2023 course at George Mason University's Schar School of Policy and Government and the Volgenau School of Engineering, and Sid and Reva Dewberry Department of Civil, Environmental, and Infrastructure Engineering. Under the instruction of Professor Jonathan Gifford.

Summary
The 5.9 GHz Spectrum is seen to be the next big step for innovation within the transportation industry, particularly in terms of C-V2X technology, which would allow for autonomous driving. However, the spectrum is also desirable for internet providers due to the low latency and high data transfer capabilities. These two competing infrastructure initiatives are fighting for control over the spectrum and both believe their initiatives have more importance than the other. In 2020 the Federal Communications Commission (FCC) made a decision to reallocate the lower 45 megahertz portion of the spectrum (5.850-5.895 GHz) to unlicensed users and Wi-Fi use. The decision for this allocation was due to automotive manufacturers inability to meaningfully deploy the spectrum and the potential economic benefits of granting further access. The upper 30 megahertz portion (5.895-5.925 GHz) remains for C-V2X deployment and improving vehicle safety.

The FCC played a major part with the decision to reallocate the 5.9 GHz Spectrum to optimize and effectively use the band. The DOT, supporting vehicle safety through C-V2X, and Telecommunication companies, supporting advancements in Wi-Fi capacity, both argue that they have better reasoning to have full access to the spectrum. For 20 plus years the 5.9 GHz spectrum was allocated to the auto safety industry with C-V2X, but now this sudden shift has sparked an ongoing discussion on auto safety and expanding Wi-Fi’s capacity.

Technology Terminology

5.9 GHz Spectrum

The 5.9 GHz Spectrum is a dedicated bandwidth that ranges from 5.850 - 5.925 GHz. This spectrum offers potential in low latency and high data transfer. This spectrum is favorable for both C-V2X opportunities in intelligent transportation, as well as improving Wi-Fi speed and reliability.

DSRC

The 5.9 GHz Dedicated Short Range Communications (DSRC) is a communications service that is primarily used in a short to medium range. This technology has low latency, high reliability, and is secure. DSRC is used primarily in public safety on the road by warning drivers of conditions or events ahead.

C-V2X

Cellular Vehicle-to-Everything (C-V2X) is a system that is meant for intelligent transportation systems and relies on a cellular connection to communicate with its surroundings. The C-V2X uses the spectrum because of its low latency and high data transfer abilities. This system builds upon the DSRC system by adding the ability to connect to a cellular network to increase its transmission range.

V2X

Vehicle-to-everything (V2X) is a short range direct communications system that connects vehicle to vehicle, infrastructure, and pedestrian infrastructures. V2X doesn’t use a cellular network, which means it focuses on the immediate and local area with sensors. Vehicles that can both recognize and communicate with these facets of transportation are considered to have a V2X communication.

V2I

Vehicle-to-Infrastructure (V2I) is a communication system for vehicles to connect to the surrounding infrastructure, such as traffic lights or road signs. V2I was an original component with DSRC and is further expanded upon with this system. This system can be in both C-V2X and V2X systems, and play a major role for both to succeed.

V2V

Vehicle-to-Vehicle (V2V) is a communication system that focuses on vehicle to vehicle communication and detection in real time. V2V has a larger presence in more modern vehicles with things like blind-spot detection and lane-change assistance, which relies heavily on short range communication between vehicles.

V2P

Vehicle-to-Pedestrian (V2P) is similar to V2V, in that it has the ability to recognize nearby pedestrians and implement safety measures to avoid fatalities and injuries. These measures are important for areas with pedestrian crossings and bike lanes.

V2N

Vehicle-to-Network (V2N) is a technology system that gives a vehicle access to use cellular networks. Car Wi-Fi is an example of this. It has the capabilities to have Wi-Fi, but it does not use it to communicate with other systems. V2N is a crucial component to C-V2X as it allows the vehicle to have its own Wi-Fi.

Actors

Federal Communications Commission

The FCC is the regulatory body for how frequencies are allocated and the rules governing them. The FCC takes into consideration how the 5.9 GHz Band can best be utilized, whether it is for transportation or telecommunication. A main concern for the FCC is that the spectrum is not overburdened, while still allowing users to benefit from its allocation as much as possible. The FCC is designed to be an unbiased party for this issue, but is not immune from considering corporate interests and public opinion.United States Department of Transportation

The United States Department of Transportation (DOT) is responsible for planning, coordinating, and regulating transportation projects across the country. Part of their mission is to make roads safer and more accessible, by preventing crashes and congestion, which are costly. The DOT has been a long standing advocate for reserving the band for transportation in anticipation of emerging technologies, but lacked the ability and political will to take full advantage of it at the time of its initial allocation. The DOT on federal, state, and local levels, continues to have a vested interest in retaining the spectrum solely for transportation, so that they can further implement intelligent transportation systems across the country.

Telecommunication Companies

Due to the sought out nature of the spectrum, telecommunication companies desire to use the spectrum as much as the FCC allows for Wi-Fi. The quality of the spectrum would surely enhance their services and improve telecommunication broadly. The opening of the lower portion of the spectrum is estimated enhance GDP by $23.042 billion and boost economic growth. The telecommunication industry has rapidly utilized the lower portion of the spectrum. However, 6G band frequencies are also developing within the telecommunication space and  are likely to surpass the benefits of the 5.9GHz Band. This raises the question of what other frequencies could be opened for unlicensed users as an alternative to the 5.9GHz Band.

Automotive Companies

Automotive companies have long wished to implement the new C-V2X technology, but development took longer than anticipated. Automotive brands are at varying stages of V2X technology within their vehicles. Features such as auto braking and lane assist are currently in the marketplace. This group fears that the reallocation of the 5.9GHz spectrum will leave it overcrowded, once companies begin to implement C-V2X. Moreover, automotive manufacturers are at odds with the FCC because of the poor regulatory framework that restricts further implementation of C-V2X, since the current framework applies to DSRC instead, which is now obsolete. While this is an ongoing process, automotive companies continue to voice their concerns over reallocation of the spectrum.

Equipment Manufacturers

Companies such as Connex2x, Qualcomm, and P3 Mobility are currently working on projects that utilize C-V2X. These companies are important because they are dedicated to developing and implementing new technology that can be sold to automotive manufacturers or used to their own benefit. These companies are key in technology development and are motivated by profit incentives. Companies vary on their stance on reallocation, depending on their industry. Regardless, equipment manufacturers are an essential component of intelligent transportation systems.

Interest Groups

Various interest groups have a stake in the issue as well. Organizations such as the American Association of State Highway and Transportation Officials, Alliance for Automotive Innovation, and 5G Automotive Association (5GAA) advocate for the advancement of new transportation systems, many of which require the 5.9GHz band. The Intelligent Transportation Society of America, an interest group that promotes safe and sustainable transportation, sued the FCC for its reallocation of the spectrum. Even though the organization lost the case in district court, it demonstrates the lasting struggle between the government entities, private interests, and the public.

On the other side, interest groups such as Wi-Fi forward also lobby to promote more unlicensed Wi-Fi bands. They argue that opening up the 5.9 spectrum, as well as future bands, will buy economic growth, create jobs, and allow for more innovation within the industry. Wi-Fi forward has a lot of political power and influence, backed by multinational corporations.

Timeline of Events

 * December 18th, 1991 - Congress passes Intermodal Surface Transportation Efficiency Act.
 * June 9th, 1998 - Congress passes Transportation Equity Act.
 * October 22nd, 1999 - FCC reserves the 5.9GHz spectrum for DSRC based transportation.
 * December 17th, 2003 - FCC creates updated regulatory framework.
 * January 31st, 2014 - Obama issues mandate to require automakers to implement C-V2X technology into their vehicles.
 * August 24th, 2014 - The National Highway Traffic Administration (NHTSA) released a report saying it would take 37 years to fully implement DSRC in all vehicles.
 * November 1st, 2017 - Trump drops mandate requiring automakers to implement C-V2X into their vehicles after lobbying by automotive manufacturers.
 * October 31st, 2018 - Under the testing with FCC and DOT it was found the Wi-Fi could share 5.9 GHz spectrum with DSRC.
 * December 12th, 2019 - FCC adopted a notice of proposed rule making (NPRM) unanimously in balancing the public interest in transportation safety and Wi-Fi by proposing the bottom 45 megahertz of 5.9 go towards Wi-Fi allocation and the upper 30 megahertz go towards vehicle safety.
 * November 18th 2020 - FCC reallocates the lower 45 megahertz portion for non licensed users, including Wi-Fi.
 * August 12, 2022 - The case of Intelligent Transportation Society of America v. FCC is decided in favor of the FCC. This reaffirms FCC’s decision to reallocate the spectrum to unlicensed users.
 * August 16, 2023 - Joint waiver request submitted from automotive manufacturers, equipment manufacturers, and state departments of transportation to deploy C-V2X technology ahead of official updated frameworks.
 * April 24, 2023 - FCC approves joint waiver requests.

Narrative of the Case

As our highways and road infrastructure developed it became apparent that we needed to find innovative solutions to protect public safety. The 5.9 GHz Spectrum proved to have the right qualities for high speed traffic with its low latency and high bandwidth. However, the USDOT has made very little advancements in the intelligent transportation system since its initial allocation, other than the outdated DSRC technology. As other frequencies became crowded with unlicensed users, telecommunication companies saw the spectrum as a potential space for Wi-Fi expansion.

There are many barriers that limit C-V2X deployment within the transportation industry. One of the main issues is the inconsistent rates of which technology and policy develop. While some automakers are ready and eager to deploy their advancements in their vehicles, the FCC faced administrative hurdles that restricted further innovation. Another barrier is that any upgrades to current infrastructure requires some degree of financial commitment from either local, state, or the federal government. Moreover, without investment from the private sector, which includes both equipment manufacturers and automotive manufacturers, the technology cannot reach its full potential. With these barriers, those seeking to use the spectrum have a slower and more difficult time putting the band to use. Despite the FCC having the final say, various actors still remain frustrated with the current status of reallocation. Even though we have yet to see large successes, many projects are in development that might change the efficacy and status of the spectrum's use.

Funding and Financing
Implementation of intelligent transportation systems, especially those involving C-V2X technology require investments from both private and public sources. Government entities such as the DOT receive appropriations from congress, which are then dispersed to separate projects. For the 2024 budget the DOT requested $86.5 million for its High Priorities Activities Program (HPAP). This funding is used to assist states and local governments with CMV safety and intelligent transportation systems. These funds could help to advance and upgrade current technologies used within the 5.9 spectrum. State DOTs vary in how they get their funding, but are typically dependent on fuel taxes and transportation related fees, such as tolls. This results in steady, but inconsistent funding, which was especially telling during the Covid-19 pandemic. Investments from government at the federal, state, and local levels, all help to upgrade current infrastructure components such as stop lights.

Funding from private companies also contribute to the development of intelligent transportation systems and utilization of the 5.9 GHz Spectrum. While most of this financing is undisclosed, it is likely they have a multiplicity of revenue sources. Qualcomm, for example, sells products for RSU and OBUs. Other companies, such as P3 Mobility, are still in the growth stages and likely have loans or investment streams that help sustain them. Investments from automakers are the most crucial to advancing technology, but they remain at different stages of development and implementation of C-V2X communication systems.

Institutional Arrangements
Currently, the FCC’s rules regarding transportation and the 5.9GHz band are based on DSRC, but are transitioning to apply to C-V2X. Since DSRC is not capable of the autonomous vehicle future we envision, it is imperative that these regulatory frameworks are malleable and updated soon. In the interim, the FCC issued waivers to a collection of state DOTs, automotive manufacturers, and equipment manufactures, in order to preemptively grant permission for them to begin C-V2X implementation. For now, any entity requesting use of C-V2X must go through the FCC waiver process, until the FCC decides on a new regulatory framework.

The FCC when it comes to rule making follows the “notice and comment” rule making. This means that when it comes to decide an issue they give the public notice on what they are planning to adopt  or modify and then seek comment from the public. After receiving comment from the public the FCC looks over the comments to develop the rules. The steps to this process starts with the foundation of the Administrative and Procedure Act (APA) which is the basic requirements for this process. Next up is the notice of proposed rule making (NPRM) which explains why there is a need for a rule change. This can also propose what the agency should consider when finding solutions. When NPRM is out there the FCC includes specific questions that they want public comment and data on. NPRM publication is the publication of the document into the Federal Register; this allows for public access through online and print media. The public comment period comes next which lasts for at least 30 days the more technical the matter the longer a period for public comment. The public can also ask for my time to comment by providing a clear reason. Depending on the case the amount of comments differ some receive thousands where others receive few. The public can also reply to each other’s comments. Next up is the peer review process, so if the subject contains scientific or social scientific information it should be peer-reviewed by a qualified specialist in the intended fields. This is to ensure quality in the final findings. After peer review a logical outgrowth test is conducted, under a court ruling if any changes are to be made in the final rule it has to be something the public can reasonably anticipate on. If the public cannot reasonably anticipate the change the FCC would be required to allow more public comment. Last up is the final rule publication which is published in the Federal Registration.

Policy Issues
When the 5.9 GHz band was proposed in the 90s, it was intended to be used in V2V. This band was going to be used in DSRC which would help with “real-time safety-signaling” in emergency settings. Now 20 plus years later the need for DSRC is outdated and expensive.

In 1991 the Intermodal Surface Transportation Efficiency Act was passed by Congress which meant that the DOT had to research and test intelligent vehicle-highway systems. With this research it led to the development of DSRC which would help with communication between V2I. Because of the research DSRC was looked at as a way that could avoid different vehicle accidents on US’s roads. In 1998 congress passed the Transpiration Equity Act for the 21st Century of 1998, which meant the FCC allocated 75 megahertz of 5.9 GHz band to be used for DSRC; it allocated 5850 to 5925 MHz to be a part of the band. Now, the band has little to do with auto safety and DOT shelved proposals that would have required DSRC “radio systems” in cars. There have been advancements in safety technology for cars and the auto industry, but that does not involve 5.9 GHz bands. If DSRC was to be implemented today it would be pricey. The price alone to mandate the use of DSRC in all vehicles would be $5 billion a year according to the National Highway Traffic Safety Administration (NHTSA) and by 2060 it would total around $108 billion. Under the Obama Administration, DOT wanted to mandate DSRC radios in every new vehicle due to without every car having DSRC the technology would not work meaning no vehicles could rely on it. This decision was ultimately reversed under the Trump Administration’s DOT due to cost, delays, and uncertainty, but DOT has not announced anything about the DSRC not moving forward in implementation. If every car was to be equipped with the technology according to a report done by the NHTSA released in 2014; it would take “…37 years before we would expect the technology to fully penetrate the fleet”. Now 20 years later this valuable band is deemed important for personal communication. 5.9 GHz is the gap between the current and the possible future for high-capacity Wi-Fi. In 2019 the FCC unanimously adopted a NPRM on the allocation of 5.9 GHz with the lower 45 megahertz going to Wi-Fi spectrum and the upper 30 megahertz for auto safety. The FCC adopted this proposal due to the fact that during these 20 years DSRC had yet to truly be implemented with the chairman acknowledging that, “…[I]t is hindering [the United States’] wireless future”. The FCC chairman also acknowledge how little auto safety needs the 5.9GHz spectrum. The FCC started looking into using 5.9 GHz spectrum in the 2013 due to the congestions in 5 GHz spectrum. In 2018 the DOT and FCC after testing found that the 5.9 GHz spectrum that was being used for DSRC can be shared with Wi-Fi. The reason the FCC proposed allocating 30 megahertz to auto safety was because that is the standard in other places around the globe like the European Union.

Now 20 years later this valuable band is deemed important for personal communication. 5.9 GHz is the gap between the current and the possible future for high-capacity Wi-Fi. In 2019 the FCC unanimously adopted a notice of proposed rule making NPRM on the allocation of 5.9 GHz with the lower 45 megahertz going to Wi-Fi spectrum and the upper 30 megahertz for auto safety. The FCC adopted this proposal due to the fact that during these 20 years DSRC had yet to truly be implemented with the chairman acknowledging that, “…[I]t is hindering [the United States’] wireless future”. The FCC chairman also acknowledged how little auto safety needs the 5.9GHz spectrum. The FCC started looking into using the spectrum in the 2013 due to the congestions in 5 GHz spectrum. In 2018 the DOT and FCC after testing found that the 5.9 GHz spectrum that was being used for DSRC can be shared with Wi-Fi. The FCC proposed allocating 30 megahertz to auto safety following the standard in other places around the globe like the European Union.

Lessons Learned
The 5.9 GHz Spectrum has only just recently become an issue, with the allocation of Wi-Fi into what used to be C-V2X only territory. The FCC’s decision for the lower 45 megahertz to be dedicated for Wi-Fi is very beneficial for the advancements and development of better services, as well as still giving the upper 30 megahertz for C-V2X development and improvement. Both argue that having complete access to the full range of the 5.9 GHz spectrum is necessary to have the most potential, as well as to keep the amount of traffic through the spectrum low and controlled. The results of this decision and the effectiveness of the allocation will be seen years from now. C-V2X will continue to develop and be implemented, but with half of the space originally owned. On the other hand, Wi-Fi’s new space in the 5.9 GHz spectrum is a much needed expansion that will act as the stepping stone needed for the next generation of Wi-Fi.

Overall the 20 plus year old debate and implementation of 5.9 GHz spectrum shows the inefficiency that surrounds bureaucracy’s red tape. Besides that, the slowness of bureaucracy impacted the accountability to the project stemming from the FCC’s decision on what the spectrum should be used for in 2020. In terms of adaptability, the spectrum has not been able to accommodate changes in technology and has stifled innovation from private companies hindering efforts to fully implement our intelligent transportation system. For intelligent transportation systems to truly be effective we must consider how to move past administrative hurdles and support new technological developments within the industry.

Discussion Questions

 * 1) Did the 5.9 GHz spectrum allocation issue start in 1998 with the initial 5.9 GHz allocation for transportation, or in 2020 with the FCC’s decision to reallocate for both WiFi and Transportation uses?
 * 2) Which would be better for society, Wi-Fi allocation or C-V2X technology?
 * 3) Given the policy issues, was there too much government oversight over the emergence of intelligent transportation systems and allocation of the frequency?
 * 4) Is there a solution where everyone is satisfied? If not, who should have priority?
 * 5) Should there be a mandate to implement C-V2X, similar to the Obama era mandate?


text:
Chess Guide for the Intermediate Player/Common checkmate patterns

Queen
To checkmate with a king and queen, you must first force the enemy king to the edge of the board, which the queen can do by herself. Then, you have to bring your king to the edge as well (be careful not to stalemate the opponent). Mate can be forced in at most ten moves from any king and queen vs king position, unless the lone king can immediately capture the queen.

Two major pieces
This is the easiest to execute of any checkmate. Keep in mind that if you are using two rooks and the enemy king gets within striking distance and could potentially win a rook, create a battery with your rook, so that the enemy king is forced to move away. On the next move, you can checkmate.

Checkmate example
1. Ra4+

The series of checks begin.

1...Kf5

Kg3 for Black would be instant death. So Black attempts to approach the rooks.

2. Rb5+

Another check. Black cannot flee to the fourth rank...

2...Ke6

...so he flees to the sixth rank while continuing to approach the rooks.

3. Ra6+

Yet another check.

3...Kd7

Black is getting really close to the rooks! Will he be able to stop the rooks?

4. Rb7+

The fourth check.

4...Kc8

The black king has gotten close enough! He is entertaining thoughts of capturing a rook, or at least delaying White's plans for a few moves. Of course, if White gets greedy and attempts to checkmate

Will work on it more soon

Rook
To checkmate with a rook, construct a "box" with the rook that is protected by your king. The box becomes smaller and smaller until the enemy king is forced into the corner. Mate can be forced in at most sixteen moves.

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


text:
Astrodynamics/Basic Rocketry

This section of the introduction will cover the basic ideas and theory of how rockets fly and leave the atmosphere as well as introduce the rocket equation.

The Ideal Rocket Equation
Rockets are momentum exchange devices the function by expelling some fluid (usually very hot gas or plasma) which "pushes" the rocket via Newtons third law of motion. Rockets are technically all around us ranging from simple water bottle rocket, to fireworks, to more sophisticated rockets like the Saturn V. The Tsiolkovsky Rocket Equation, derived below, is basic and fundamental principle of how rockets fly and shows the maximum change in velocity, $$\Delta V$$ (Delta V), that can be achieved by a rocket provided no external forces act on it.

$$\Delta V = v_{e} \ln{\left(\frac{m_{0}}{m_{f}}\right)} = I_{SP} g_{0} \ln{\left(\frac{m_{0}}{m_{f}}\right)}$$

Where,

 * $$v_{e}$$ is the effective exhaust velocity (out of the nozzle) equal to $$I_{SP} g_{0}$$.
 * $$I_{SP}$$ is the specific impulse of measuring in seconds. It's a measure of solid rocket fuel efficiency specifically the impulse created per unit weight (on Earth) of propellant.
 * $$g_{0}$$ is the standard gravity on Earth near ground level.
 * $$m_{0}$$ is the mass of the rocket before firing it's engines. Commonly the initial total mass is used (wet mass).
 * $$m_{f}$$ is the mass of the rocket after the engines stop burning. Commonly the final total mass is used (dry mass).

The Rocket Equation states that with a faster exhaust velocity the greater finally velocity of the rocket; however, due to the natural logarithm there is an exponential increase in the initial mass of the rocket. Therefore, it is not beneficial to increase the mass of rocket as it will have negligible return and instead the uses of stages (multiple rocket stacked on top of each other) is more beneficial. Further, it's important to state that it might be misleading thinking that more efficient rockets (higher $$I_{SP}$$) are better at launch, since the rocket may not lift of the ground if the thrust force propelling it up is too small. This is due to the fact that the equation functions with no external forces acting on it.

Although the Rocket Equation has it's limitations it is a useful resources for explaining future topics such as transfers. However, to elaborate on reason why the efficiency might be misleading it's worth noticing that in the derivation we have found the $$F=ma$$ equation. Hence, the instantaneous thrust force on the rocket in 1D is shown below. As can be seen if the ISP is high and the rocket motor is efficient it will not mean much if the mass flow rate, $$\dot{m}$$, is low and the thrust cannot surpass gravity and aerodynamical drag.

$$T = v_{e} \dot{m} = g_{0} I_{SP} \dot{m}$$

Rocket Staging
The rocket's propulsion system can only consist of one fuel tank and one engine, however, such a system cannot be used to get into earth's orbit, as for that we would need a very long fuel tank, which is impractical since it would lower the engine's thrust to weight ratio(Except for the hypothetical spaceplane single stage to orbit or SSTO designs like Skylon). Such a problem is solved by adding multiple stages, with each stage consisting of a propellant tank and an engine, along with a separation system(Sometimes along with other things like an electronic guidance system or parachutes). When the propellant of one stage runs out, that section is removed, thus reducing onboard dry mass. Staging can be used for reasons such as:
 * Reducing onboard dry mass
 * Using engines more fit to the situation(Certain engines are optimized for certain altitudes, so they can be put on different stages)

This makes staging an expensive, but effective method to go to earth's orbit and beyond. There are also efforts to make stages reusable to reduce the cost of using these rockets.

title: Astrodynamics/Basic Rocketry


text:
Cookbook:Modern Reuben Sandwich

Ingredients

 * 12 oz thinly sliced cooked corned beef or deli corned beef or pastrami
 * 2 tbsp butter, softened
 * 8 slices rye or pumpernickel or sourdough bread
 * 8 slices Swiss cheese
 * 1½ cups sauerkraut, well drained
 * ¼ cup Thousand Island dressing

Procedure

 * 1) Lightly spread butter on one side of each bread slice.
 * 2) Heat large non-stick skillet over medium heat until hot.
 * 3) Place 2 bread slices, butter side down, in skillet.
 * 4) Top each bread slice with 2 slices cheese, 1 tablespoon dressing, 3 ounces corned beef, and ¼ of the sauerkraut.
 * 5) Top sandwich with bread slice, butter side up.
 * 6) Cook sandwiches 4–6 minutes or until bread is golden brown and cheese is melted, turning once.
 * 7) Repeat with remaining sandwiches.
 * 8) Serve with additional Thousand Island dressing, if desired.

title: Cookbook:Modern Reuben Sandwich


text:
Cookbook:Vegetarian Rassolnik

Ingredients

 * 1.5 L water
 * 5 potatoes, sliced
 * 3 pickled cucumbers, sliced
 * 1 carrot, finely chopped
 * 1 large onion, diced
 * ½ cup cooked rice
 * 1 bay leaf
 * 3 tbsp vegetable oil
 * Salt

Procedure

 * 1) Bring water to boil. Add the sliced potatoes, cucumbers, carrots, and onions.
 * 2) When the vegetables are cooked, add the cooked rice, bay leaf, and oil.
 * 3) Bring to a boil.
 * 4) Season with salt to taste.
 * 5) Serve garnished with chopped herbs.

title: Cookbook:Vegetarian Rassolnik


text:
Cookbook:Karnataka-Style Rasam (Tamarind and Tomato Soup)

Ingredients

 * ¼ cup toovar dhal (toovar/toor/togari dal)
 * 4 large (16 oz can) tomatoes OR 2 tbsp tamarind (concentrate extract) paste
 * ¼ tsp salt or less to taste
 * ½ tsp chilli powder
 * ½ tsp turmeric powder
 * ½ tsp asafoetida (hing) powder
 * 1 tbsp grated coconut
 * ½ tsp coriander powder
 * 3 tbsp oil
 * ½ tsp mustard seed
 * ½ tsp cumin seed (jerra/jeerige, optional)
 * 4 sprigs curry leaves, washed
 * 1 bunch coriander leaves, chopped

Procedure

 * 1) Pressure cook the dhal with sufficient water.
 * 2) If using tomatoes, parboil first to remove skin, then chop roughly.
 * 3) To the cooked dhal, add salt, chilli powder, turmeric powder, and tomatoes or tamarind extract.
 * 4) Simmer for 3–4 minutes.
 * 5) Add the asafoetida, grated coconut, and ground coriander.
 * 6) Add any other spice as required.
 * 7) Simmer for a few minutes to cook the coconut properly.
 * 8) In a separate frying pan, heat the oil over medium heat.
 * 9) Add the mustard seed and cumin seed.
 * 10) When the mustard seeds pop, remove from the heat and add to the soup along with the curry leaves.
 * 11) Garnish with coriander leaves.


text:
Cookbook:Sweet Onion Ranch Dressing

A slightly sweeter ranch.

Ingredients

 * 3 cloves garlic, minced
 * ½ cup minced onions
 * ¼ cup white granulated sugar
 * ¼ cup red wine vinegar
 * ½ cup olive oil
 * 2 cups mayonnaise
 * Salt
 * Black pepper
 * 2 tsp dry mustard
 * 1 tbsp fresh oregano, minced
 * 1 tbsp fresh basil, chopped

Procedure

 * 1) Mix all the ingredients in a large bowl.

title: Cookbook:Sweet Onion Ranch Dressing


text:
Cookbook:Roman Sauce II

Ingredients

 * 1 onion, chopped
 * Butter
 * Flour
 * 1 lemon, zested and juiced
 * 1 bouquet of herbs
 * 1 pinch nutmeg
 * A few stoned raisins
 * Pine nuts or almonds, shredded
 * 1 tbsp burnt sugar
 * Espagnole sauce

Procedure

 * 1) Fry the onion slightly in butter and a little flour.
 * 2) Add the lemon juice and a little of the zest, herbs, nutmeg, raisins, almonds or pinocchi, and burnt sugar.
 * 3) Add this to a good Espagnole sauce, and warm it up in a bain-marie.

title: Cookbook:Roman Sauce II


text:
Cookbook:Roasted Brined Turkey II

Ingredients

 * 4 cups kosher salt or 2 cups table salt
 * 2 gallons cold water
 * 1 ea. (12–14 pounds / 5.4–6.4 kg) turkey, rinsed thoroughly; giblets, neck, and tailpiece removed and reserved to make gravy
 * 3 medium onions, chopped coarse
 * 1½ medium carrots, chopped coarse
 * 1½ celery stalks, chopped coarse
 * 6 thyme sprigs
 * 3 tbsp unsalted butter, melted

Procedure

 * 1) Dissolve salt in the cold water in a large stockpot or clean bucket. Add turkey, and refrigerate or set in very cool spot (< 40°F / 4.4°C) for 4–6 hours.
 * 2) Remove turkey from salt water and rinse both cavities and skin under cool running water for several minutes until all traces of salt are gone. Pat dry inside and out with paper towels.
 * 3) Place turkey on meat rack set over rimmed sheet pan. Place turkey in refrigerator, uncovered, and air-dry for at least 8 hours or overnight.
 * 4) Adjust oven rack to lowest position, and heat oven to 400°F (204.4°C). Toss one-third of onion, carrot, celery, and thyme with 1 tablespoon of melted butter and place this mixture in body cavity. Bring turkey legs together and perform a simple truss.
 * 5) Scatter remaining vegetables and thyme over a shallow roasting pan. Pour 1 cup water over vegetables. Set V-rack in pan. Brush entire breast side of turkey with half of remaining butter, then place turkey, breast side down, on V-rack. Brush entire backside of turkey with remaining butter.
 * 6) Roast for 45 minutes. Remove pan from oven (close oven door); baste with juices from pan. With wad of paper toweling in each hand, turn turkey, leg/thigh side up. If liquid in pan has totally evaporated, add another ½ cup water.
 * 7) Return turkey to oven and roast for 15 minutes. Remove turkey from oven again, baste, and again use paper toweling to turn other leg/thigh side up.
 * 8) Roast for another 15 minutes. Remove turkey from oven for final time, baste, and turn it breast side up; roast until breast registers about 165°F (73.9°C) and thigh registers 170–175°F (76.7–79.4°C) on an instant-read thermometer (30–45 minutes).
 * 9) Remove turkey from pan and let rest until ready to carve. Serve with gravy.

title: Cookbook:Roasted Brined Turkey II


text:
Cookbook:Shepherd's Pie III

Ingredients

 * 100 g minced lamb
 * 1 clove of garlic, chopped
 * 4 large potatoes
 * 1 carrot
 * Some fresh green peas
 * Some sweetcorn kernels
 * Mixed vegetables
 * Small amount of tomato ketchup
 * Beef stock cube or gravy
 * 5 g flour
 * 10 ml water
 * 30 ml milk
 * 30 g butter or margarine
 * 5 ml olive oil or other cooking oil

Procedure

 * 1) Peel and chop the potatoes. Boil the potatoes for 20 minutes whilst preparing the rest of the meal.
 * 2) Cut the minced lamb and add the garlic.
 * 3) Next gently heat some olive oil in a frying pan and add the meat and garlic
 * 4) Then add the vegetables, ketchup, stock cube (or gravy) and cook on a very low heat for 5 minutes.
 * 5) Add flour and water and mix well.
 * 6) Cook the mixture for about 25 minutes and stir every few minutes.
 * 7) Once the potatoes are ready drain them, add a touch of milk and butter (or margarine) and mash.
 * 8) Pour the mixture into an oven dish then add the mashed potatoes on top. Cover all of the lamb mixture.
 * 9) Bake in the oven at 200°C for about 15–20 minutes and take it out when the potatoes are turning golden.

title: Cookbook:Shepherd's Pie III


text:
Cookbook:Creamy Cornstarch Scrambled Eggs

Ingredients

 * 3 large eggs
 * 3 tbsp unsalted butter
 * 1½ tbsp whole milk
 * 1¾ tbsp cornstarch or potato starch

Procedure

 * 1) In a cup, whisk together the milk and cornstarch until it is free of lumps.
 * 2) Add the cornstarch mixture to your eggs, and beat until smooth. Season with salt.
 * 3) Heat a non-stick skillet over high heat until hot, then add the butter—it should sizzle right away.
 * 4) Wait until the butter’s melted and bubbly, but before it browns. Add the beaten eggs. Wait without stirring anything, until the edges of the eggs start to bubble up (about 3 seconds).
 * 5) Remove the skillet from the heat. Start stirring the eggs, making 1 full circle per second, for about 11–12 seconds. The eggs will have absorbed all the butter but remain partially undercooked. Do not wait until they look fully cooked!
 * 6) Transfer them onto a plate.
 * 7) Season with black pepper to taste and serve.

Notes, tips, and variations

 * Add 5 seconds more of stirring for every 3 additional eggs you’re scrambling, but avoid making more than 6 at once.


text:
Chess Opening Theory/1. e4/1...e5/2. Nc3/2...Bb4

Vienna Game
This move attempts to attack the powerful c3 knight, and if the d pawn moves, the knight will be pinned. More often, this move is played a bit later, but this variation is still playable.


text:
User:Farangiz Barotova/sandbox

= What features of the Australian Education System of the Present Stand Out? =

= Objectives: = By the end of this chapter, students will be able to:

-      Know about the History of Education System of Australia.

-      Learn about Australian Educational System.

-      Positive Sides of Educational System of Australia.

-      Education System in Uzbekistan.

-      General information about education in two different countries.

= Introduction = Education serves as a fundamental cornerstone of society, playing a pivotal role in shaping both individuals and communities. It is an ongoing process that empowers individuals with the necessary knowledge, skills, and values for personal growth, social development, and economic prosperity. Education encompasses a wide range of formal and informal settings, including schools, colleges, universities, vocational training centers, and online platforms. It offers individuals the opportunity to acquire academic knowledge, cultivate critical thinking and problem-solving abilities, and develop social and emotional intelligence.

One of the primary objectives of education is to nurture intellectual curiosity and a passion for learning. It equips individuals with the tools to explore new ideas, think critically, and make well-informed decisions. Education also fosters creativity and innovation, encouraging individuals to think outside the conventional boundaries and devise innovative solutions to complex challenges. In addition to academic knowledge, education plays a crucial role in shaping individuals' character and values. It instills ethical principles, empathy, and a deep respect for diversity, thereby fostering a sense of social responsibility and global citizenship. Education promotes inclusivity, ensuring that every individual, regardless of their background or abilities, has equal access to high-quality education.

= History of Australian Education System = The history of the Australian education system is a fascinating journey that reflects the country's development and commitment to providing quality education for its citizens. Education in Australia has its origins in the early colonial era when religious organizations established schools. These schools primarily catered to the children of European settlers and focused on religious teachings. However, access to education was limited and often restricted to those who could afford it. In the late 19th century, the Australian colonies recognized the importance of providing education to all citizens, regardless of their social or economic background. This led to the implementation of compulsory education laws, ensuring that every child had the right to attend school. The introduction of a public education system followed, offering free education to children. Significant reforms were implemented in the Australian education system during the early 20th century. The curriculum was expanded to include a wider range of subjects, and teacher training programs were established to enhance the quality of teaching. The government also invested in the construction of school buildings and the provision of resources to create an improved learning environment.

Following World War II, Australia witnessed a population boom and a growing demand for education. As a result, the education system underwent expansion, with the establishment of new schools and the introduction of tertiary education institutions. The government also implemented policies aimed at ensuring equal access to education, such as scholarships and financial assistance programs. In recent years, the Australian education system has continued to evolve in response to societal changes. The curriculum has been updated to incorporate emerging technologies and equip students with the skills needed to navigate the modern world. Efforts have also been made to foster inclusivity and diversity within education, ensuring that all students have equal opportunities to thrive. The history of the Australian education system exemplifies the country's commitment to providing accessible and high-quality education for all. It reflects the belief that education is a fundamental right and a catalyst for individual and societal advancement.

= Australian Educational System = Today, the Australian education system is known for its high standards and commitment to excellence. It encompasses a range of educational institutions, including public schools, private schools, and universities. The government plays a crucial role in funding and regulating the education sector, while also encouraging innovation and research.

The education system in Australia is highly regarded for its rigorous standards, diverse array of institutions, and unwavering commitment to delivering quality education to every student. It is a comprehensive system that encompasses early childhood education, primary and secondary schooling, and tertiary education. Early childhood education in Australia prioritizes establishing a strong foundation for children's development and learning. While not compulsory, it is widely recognized as a crucial stage in a child's educational journey. Early childhood education centers, such as preschools and kindergartens, provide play-based learning experiences that promote social, emotional, and cognitive growth. Primary and secondary education in Australia is mandatory for all children aged 6 to 16 years. The curriculum is designed to provide a well-rounded education, encompassing core subjects like English, mathematics, science, and humanities, while also offering a variety of elective subjects. The education system is divided into primary school (grades Prep to 6) and secondary school (grades 7 to 12).

Australia has a dual education system consisting of public and private schools. Public schools receive government funding, while private schools rely on tuition fees and other sources of funding. Public schools are recognized for their excellent education and inclusive atmosphere, while private schools often offer specialized programs and facilities. Tertiary education in Australia is highly esteemed worldwide, with a wide range of universities, vocational education and training (VET) institutions, and technical colleges. Universities offer undergraduate and postgraduate degrees in various fields, while VET institutions provide practical and vocational training in areas like trades, hospitality, and healthcare. The Australian education system also welcomes international students, contributing to its multicultural and diverse learning environment. The Australian education system places a strong emphasis on research, innovation, and critical thinking. Students are encouraged to develop independent thinking skills, problem-solving abilities, and creativity. The curriculum is regularly reviewed and updated to ensure its relevance and to prepare students for future challenges. The Australian education system prioritizes inclusivity and equal opportunities for all students. Measures are taken to support students with diverse learning needs, including those with disabilities or from disadvantaged backgrounds. Scholarships, grants, and financial assistance programs are in place to ensure that education remains accessible to everyone. Technology plays a crucial role in the Australian education system, as schools and universities incorporate digital tools and resources into teaching and learning. Online learning platforms, virtual classrooms, and digital resources offer students access to a wide range of information and opportunities for collaboration.

= Positive Sides of Educational System of Australia = There are several Positive Sides of Education System of Australia:

1. High Standards: Australia maintains rigorous academic standards across all levels of education. The curriculum is regularly reviewed and updated to ensure it remains relevant and meets the needs of students in a rapidly evolving world.

2. Quality Institutions: Australia is home to world-class universities and educational institutions. These institutions are known for their research contributions, innovative teaching methods, and highly qualified faculty members.

3. Inclusive Environment: The Australian education system promotes inclusivity and diversity. Efforts are made to ensure that students from all backgrounds, including those with disabilities or from disadvantaged communities, have equal access to education. Support services and resources are available to cater to diverse learning needs.

4. Multiculturalism: Australia's multicultural society is reflected in its education system. Students from various cultural backgrounds come together in classrooms, fostering a rich and diverse learning environment. This exposure to different cultures and perspectives enhances students' global awareness and intercultural understanding.

5. Technological Integration: The Australian education system embraces technology and integrates it into teaching and learning. Schools and universities utilize digital tools, online platforms, and resources to enhance the educational experience. This prepares students for the digital age and equips them with essential digital literacy skills.

6. Research Opportunities: Australia encourages research and innovation in its education system. Universities and institutions provide ample opportunities for students to engage in research projects, fostering critical thinking, problem-solving skills, and intellectual curiosity.

7. Vocational Education and Training (VET): Australia's VET sector offers practical and industry-focused training programs. These programs equip students with the skills and knowledge required for specific trades and professions, enhancing their employability and career prospects

= Education in Uzbekistan = Since gaining independence in 1991, Uzbekistan has undergone significant changes in its educational system. The government has made substantial efforts to enhance the quality and accessibility of education by modernizing the curriculum, improving teacher training, and promoting inclusive education. Education is compulsory for children aged 5 to 16 and is divided into three levels: primary, secondary, and higher education. Primary education typically lasts for four years, followed by five years of secondary education. Higher education is available at universities and specialized institutions. A key objective of Uzbekistan's education system is to prioritize modernization and innovation. The government has implemented reforms to update the curriculum and teaching methods, with a particular focus on science, technology, engineering, and mathematics (STEM) subjects. Steps are being taken to integrate technology into classrooms and foster digital literacy among students.

Another important element is the promotion of inclusive education. Uzbekistan is working towards providing equal educational opportunities for students with disabilities and special needs. The government has implemented policies to ensure that these students receive appropriate accommodations and support to fully participate in the educational process. Furthermore, Uzbekistan is striving to enhance the quality of teacher training and professional development. The government has established teacher training institutes and centers to improve the skills and knowledge of educators. Continuous professional development programs are being implemented to keep teachers updated with the latest teaching methodologies and approaches.

= There are several differences between Uzbekistan's and Australia's education systems: =

1. Structure and Organization: Uzbekistan follows a 12-year education system, consisting of primary, secondary, and higher education. Australia, on the other hand, has a 13-year education system, including primary, secondary, and tertiary education.

2. Funding: In Uzbekistan, education is primarily funded by the government, with limited private and international school options. In Australia, both public and private schools operate, with public schools receiving government funding and private schools relying on tuition fees and other sources of funding.

3. Curriculum: Uzbekistan's curriculum is more centralized and standardized, with a focus on core subjects. Australia's curriculum is more flexible, allowing for a broader range of subjects and specialization options.

4. Language of Instruction: In Uzbekistan, the primary language of instruction is Uzbek, with Russian also widely used. In Australia, English is the primary language of instruction.

5. Higher Education: Uzbekistan's higher education system is more centralized, with universities offering a limited range of programs. Australia has a diverse and internationally recognized higher education system, with a wide range of universities and vocational institutions offering undergraduate and postgraduate degrees across various disciplines.

6. Internationalization: Australia has a strong focus on attracting international students, with a significant number of students coming from overseas to study. Uzbekistan's education system is less internationally focused.

7. Technology Integration: Australia has a higher level of technology integration in its education system, with schools and universities incorporating digital tools and resources into teaching and learning. Uzbekistan is gradually adopting technology in education but at a slower pace.

= Conclusion = In the present dynamic world, education encounters fresh obstacles and possibilities. The incorporation of technology into education has transformed the way we learn, granting us access to extensive resources, online courses, and collaborative platforms. Proficiency in digital literacy and technological skills has become crucial for thriving in the contemporary era.

To conclude, education is a potent instrument that empowers individuals, brings about societal changes, and propels progress. It is an ongoing voyage that nurtures intellectual advancement, molds character, and fosters social and economic growth. By investing in education and embracing innovation, we can forge a more promising future for individuals and communities across the globe.

= References = Australian Education System - Levels of Education & Comparison

Education in Uzbekistan - Wikipedia

The Australian education system - FutureLearn

Uzbekistan - Educational System—overview - Training, Schools, Curriculum, and United - StateUniversity.com

title: User:Farangiz Barotova/sandbox


text:
Template:Sylheti/Characters

See Japanese page history for attribution.

title: Template:Sylheti/Characters


text:
Cookbook:Simple Chocolate Fudge

| Confections | Fudge

Chocolate fudge is a simple, sugary treat intended to be picked up and eaten at room temperature or refrigerated.

Ingredients

 * 3 cups (18 oz) chocolate chips
 * 1 can (14 oz) sweetened condensed milk
 * 1 tsp vanilla (optional)

Special equipment

 * Double boiler
 * 2 feet of wax paper or aluminum foil (optional)

Procedure

 * 1) Use a double boiler to melt the chocolate chips. Failing to use a double boiler will result in burned chocolate.
 * 2) Add the sweetened condensed milk. Stir until mixed.
 * 3) Pour into a lined baking dish, bowl, or other mold. Expect it to stick if you don't use wax paper or foil.
 * 4) Let cool for several hours.

title: Cookbook:Simple Chocolate Fudge


text:
Chess Guide for the Intermediate Player/Example Games/Anderssen-Kieseritzky, London 1851

(NOTE: I did not mean to do this, but it is titled "Anderssen-Kieseritzky, London 1851. It is supposed to be part of the Wikibook "Chess Guide for the Intermediate Player". Please fix this).

This Andersson-Kieseritzky game was played in 1851, and is known as the Immortal Game. It features a few large sacrifices by Anderssen, and he was able to mate with his remaining pieces.

1. e4 The King's Pawn Opening.

1...e5 Black copies White. This is called the Open Game.

2. f4 exf4 This is the King's Gambit. Anderssen gives up a pawn in exchange for rapid development.

3. Bc4 The Bishop's Gambit.

3...Qh4+ 4. Kf1 White has lost castling rights.

4...b5?! The Bryan Countergambit. This move is not too good.

(I will continue working on this soon!)


text: Category:Book:Sylheti Dictionary

title: Category:Book:Sylheti Dictionary


text:
Chess Opening Theory/1. e4/1...c5/2. Nf3/2...Nc6/3. d4/3...cxd4/4. Nxd4/4...Nf6/5. Nc3/5...d6/6. Bg5/6...e6/7. Qd2/7...a6

=Classical Sicilian Richter Rauzer variation=

Theory table
'''1.e4 c5 2.Nf3 Nc6 3.d4 cxd4 4.Nxd4 Nf6 5.Nc3 d6 6. Bg5 e6 7. Qd2 a6'''


text:
Essentials of Number Theory

Page 000007
At first glance the term “number theory” seems mysteriously broad. Isn’t all of mathematics about numbers? Is this just another name for mathematics in general? A more cautious reader might note that geometry and logic (for example) aren’t really about numbers, even if numbers are sometimes used. But even leaving out these topics, the “study of numbers” still sounds overly broad. Indeed, the term number theory is traditional, and refers exclusively to the study of whole numbers; that is, the numbers we count with:

1, 2, 3, 4, ...

along with the daring addition of 0, and, when convenient, the negative integers. Excluded from consideration are fractions, real numbers, and complex numbers. Those abstractions, while called numbers in ordinary language, are traditionally studied in courses on Analysis.

While the whole numbers have their origins in counting, number theory is not about counting either. The study of advanced techniques in counting is a field of mathematics all its own, called Combinatorics. Number theory then is the pure study of whole numbers and their relations to one another, especially with regards to addition and multiplication, both of which will always transform whole numbers into whole numbers. For a sense of what this means, consider the following questions about whole numbers:

 * Is the sum of two odd numbers even or odd? What about the product?
 * If we divide n by 3, we have 2 left over. If we divide the same number n by 17, we have 9 left over. What are the possible values for n?
 * Can a power of two ever end in the digits “...324”?
 * When can a positive integer n be written as a sum of two integer squares?
 * Is the number $$1 + \frac{1}{2} + \frac{1}{3} + ... + \frac{1}{n}$$ ever a whole number if n > 1?
 * Does the equation $$12x - 57y = 39$$ have integer solutions x and y? What if 39 is replaced with 38?

Number theory, as described so far, may seem a rather abstract topic to spend months (years?) studying. Indeed, because of its ostensible purity and great distance from industrial or scientific applications, number theory was once known as the “Queen of Mathematics.”

Page 000008
This is no longer the case. While still considered an exemplar of abstract mathematical elegance, number theory now provides concrete applications to information theory and computer science, including cryptography, data compression, error-correcting codes, and pseudorandom number generation, to name just a few examples.

All the same, the most compelling reason to study number theory is for its unique combination of simplicity and mystifying complexity, which provides a setting for mathematical beauty, surprise, and the sudden clarity that can be so thrilling to those who enjoy mathematics.

Page 000009
Our primary setting is the set Z of integers; that is, whole numbers, positive and negative:

Z = {..., −3, −2, −1, 0, 1, 2, 3, 4, 5, 6, ...}

It is also convenient to denote by N the set of natural numbers; that is, the positive integers:

N = {1, 2, 3, 4, 5, 6, 7, 8, ...}

We will assume familiarity with properties of the integers that the reader should recall from grade school. In particular, the integers have an ordering, and they are closed under addition, subtraction, and multiplication. Moreover, we will also assume that N is closed under addition and multiplication.

The following identities summarize the algebraic properties of the integers.

Theorem 2.1 (Basic properties of integer arithmetic)

Let $$a, b, c \in Z $$.

 * $$ a + b = b + a $$ (Addition is commutative.)
 * $$ a + (b + c) = (a + b) + c $$ (Addition is associative.)
 * $$ a + 0 = a $$ (Zero is the additive identity.)
 * $$ a + (-a) = 0 $$ (Every integer has an additive inverse.)
 * $$ ab = ba $$ (Multiplication is commutative.)
 * $$ a(bc) = (ab)c $$ (Multiplication is associative.)
 * $$ a * 1 = a $$ (One is the multiplicative identity.)
 * $$ a(b + c) = ab + ac $$ (Distributive law)
 * If $$ab = 0$$ then either a = 0 or b = 0 (or both). (Integral domain)

The last property in the list above implies the following Cancellation Law.

Proposition 2.2 ''Let $$a, b, c \in Z $$, and suppose that a ≠ 0. If $$ ab = ac $$ then $$ b = c $$.''

Proof. Since $$ ab = ac $$, we have $$ ab - ac = 0 $$. Since a ≠ 0, the last property in Theorem 2.1 implies that $$ b - c = 0 $$, so that $$ b = c $$.

Notice what we did not say in the proof above. We did not talk about “dividing both sides by a”. Instead, the proof used properties of addition, subtraction,

Page 000010
and multiplication, without any direct reference to division. The reason for this circumlocution will become evident as the theory unfolds.

title: Essentials of Number Theory


text:
JavaScript/Images

Introduction
Images can be available in the DOM (Document Object Model) of the browser in mainly to ways:
 * in an img tag
 * in a canvas tag

Image Tag
The img is used for images that you might want with Javascript.
 * to scale in size,
 * change the alignment (left, right, center) of the image on page,
 * extract the image size (width and height) of loaded image and display the size in the text

Canvas Tag
The canvas tag provides (as you might already assume by the name) options to
 * modify loaded images on the pixel level (e.g. exchange a red pixel on the canvas by a blue pixel),
 * mark specific areas on the image and annotate the image with
 * text (e.g. add the name of the building on the image),
 * geometric objects (e.g. mark a person with a circle or add an arrow in the image, ...
 * merge two source images in one image with a canvas.

Workflow
Workflow with images has the following main steps: For the workflow mentioned above, we will use the image processing workflows as examples. As example images we will use the creative commons images of
 * (S1) Assignment: to work in Javascript with an image/canvas it is necessary to have a variable in Javascript to work with the image/canvas.
 * (S2) Processing: to select in Javascript the available methods to handle/process images in img or canvas tag
 * (S3) Load/Save (locally): if images are modified on a canvas the result must be provided and converted, so that they result can be submitted to a server or stored locally on a client for further use
 * get information about an image with Javacript.
 * load one image into a canvas and add annotation of text or geometric elements like lines, circles and boxes to the image and export the modified image again,
 * load two images and merge them together in a canvas.
 * the Golden Gate Bridge in San Francisco and
 * the Brandenburg Gate in Berlin.

Assignment
For an assignment of an image variable it is recommended to use a unique meaningful identfier (id) for the image or canvas, with which you can access the information about the inage or modify the image in the canvas later. This is a standard procedure using document.getElementById(pID) call with the respective identifier pID.

In the previous example we assume that you have a file index.html and the image in one directory.

Adding an Image to HTML Page
The image is added to the HTML as usual with the <tt>img</tt> tag. The important aspect to mention is, that all images have a unique ID in the DOM of your HTML page. So having more images in one page you have to assign a new identifier to each image. To make the Javascript code more readable and maintainable you might want to assign meaning identifiers to image. As an example we change the identifier of the second image to a meaningful name. A prefix <tt>img...</tt> might be used for the identifier <tt>imgBrandenburgGate</tt> that indicates the id refers to an image and not in a canvas. Now we add also a canvas to the HTML code. The canvas has a specific a specific width and size. Due to the fact that the canvas is empty we must specific the size of the canvas with <tt>width</tt> and <tt>height</tt> attribute that you can use with images as well.

Assigning the Image Variable
The following Javascript code assigns the <tt>img</tt> object in the DOM of the HTML page to the variable <tt>var4image</tt>. Especially in more complex code you might want to use meaningful variable names in your Javascript code as well, similar to the identifiers in the DOM. We use meaningful names for the second image and the canvas.

Error Handling for Image Assignment
Keep in mind that an image with identifier might not exist in the DOM tree and then the image variable is <tt>null</tt>. This might be handled with a <tt>getImage4Id(pID)</tt> function. Once the function is defined you can replace the <tt>document.getElementById(...)</tt> by an <tt>getImage4Id(...)</tt>. You might want to use the function <tt>getImage4Id(...)</tt> in multiple HTML projects so we assume to aggregate all the function that we want to reuse in a Javascript file <tt>imagehandlers.js</tt> stored in a subdirectory "<tt>js/</tt>.

Processing
For the processing we assume you have a folder <tt>LearnJavacript/</tt> on your computer with the subdirectories <tt>img/</tt>, <tt>js/</tt> and <tt>css/</tt>.
 * the subdirectory <tt>img/</tt> contains all the images that we use in the examples for images processing,
 * the subdirectory <tt>js/</tt> contains Javascript code that we use e.g. in multiple examples for images processing,
 * the subdirectory <tt>css/</tt> contains style sheet file the define the layout of the canvas or the image that we alter we Javascript according to the learning task.

Images and Canvas Tags
For the reduction of the code length we rename and shorten the image names given from Wiki Commons for both example images about Golden Gate Bridge and the Brandenburg Gate. So move both examples to the <tt>img/</tt> subdirectory of the folder <tt>LearnJavacript/</tt> folder and name them So we change the code fragments mentioned above for the image definition as follows
 * <tt>ggbridge.jpg</tt> for the Golden Gate Bridge and
 * <tt>bbgate.jpg</tt> for the Brandenburg Gate.

Javascript Function to merge Images
As you might assume from the image sizes, we want combine both images next to each other on the canvas "canvImageAnnotation" and have 13 pixel height empty space on the canvas below the Golden Gate Bridge. The width of the canvas "canvas1" is 640 pixel and the height was chosen as maximum of both heights of both source images.

Button to Execute Image Merge
Now we assign the function mergeImage to an onclick event of a button.

Load/Save
In the next step an image from the local filesystem should be loaded into the browser locally (not on a remote server - see AppLSAC). The following steps are included and applied to a HTML canvas because the user should be able to annotate the image e.g. with a red circle to mark or highlight a specific area on the image:

 * 1) Create a HTML page imagehandler.html with header and body
 * 2) create Javascript file js/imageloadsave.js in a js subfolder, that contains the used Javascript libraries,
 * 3) add file button to HTML page imagehandler.html, that creates a file dialog for the user to select and load an image from the local hard disk,
 * 4) assign an event handler to the file button, that checks if the loaded file is an image,
 * 5) resize a canvas to 90% of window width and calculate the height of the canvas according to aspect ratio of the image.
 * 6) modify the image and paint a red circle on the loaded image,
 * 7) save the image to PNG, JPG, SVG to the download folder (see AppLSAC/Save).

title: JavaScript/Images


text:
A Guide to Sylheti Wikipedia/Glossary

A

 * Account
 * ꠄꠇꠣꠃꠘ꠆ꠐ

 * Admin
 * ꠄꠒꠝꠤꠘ, ꠙꠡꠣꠡꠘ ꠌꠣꠟꠣꠅꠞꠣ

 * Administrators
 * ꠄꠒꠝꠤꠘꠣꠁꠘ

B

 * Bot
 * ꠀꠙꠌꠣ, ꠀꠙ꠆ꠌꠣ, ꠛꠐ

C

 * Category
 * ꠙꠖ

D

 * Databox
 * ꠔꠁꠔ꠆ꠔꠞ ꠛꠥꠁꠀꠝ

 * Delete
 * ꠙꠣꠟꠣꠃꠇ꠆ꠇꠣ

I

 * Infobox
 * ꠔꠁꠔ꠆ꠔꠊꠣꠐꠣ

M

 * Main_page
 * ꠝꠥꠟ_ꠚꠣꠔꠣ, ꠝꠥꠟ_ꠙꠣꠔꠣ

R

 * Reference
 * ꠟꠇ

 * Reason
 * ꠇꠣꠞꠘ

title: A Guide to Sylheti Wikipedia/Glossary


text: Talk:Exercise as it relates to Disease/Benefits of Standing Desks on Childhood Obesity


text: Category:Dinner recipes

title: Category:Dinner recipes


text:
Chess Opening Theory/1. e4/1...c5/2. Nf3/2...Nc6/3. d4/3...cxd4/4. Nxd4/4...Nf6/5. Nc3/5...d6/6. Bg5/6...e6/7. Qd2/7...a6/8. O-O-O

=Classical Sicilian Richter Rauzer variation=

Theory table
'''1.e4 c5 2.Nf3 Nc6 3.d4 cxd4 4.Nxd4 Nf6 5.Nc3 d6 6. Bg5 e6 7. Qd2 a6 8. O-O-O'''


text:
History of Sylhet

Introduction

 * Brief overview of Sylhet's geographical location

 * Significance of Sylhet in South Asian history

Early History

 * Prehistoric and ancient settlements in the Sylhet region

 * Emergence of the Srihatta Kingdom

Srihatta Rajya (Sylhet Kingdom)

 * History, culture, and governance of the Sylhet Kingdom

 * Notable rulers and dynasties

 * Trade and cultural exchanges during this period

Colonial Era

 * Sylhet under British colonial rule

 * Socio-economic changes and the impact on the region

 * Role of Sylhet in the tea industry

Partition of India

 * Events leading to the partition in 1947

 * Division of the Sylhet between India and East Pakistan (now Bangladesh)

Post-Independence Period

 * Sylhet's role in the Bangladesh Liberation War of 1971

 * Socio-economic development in Sylhet after independence

Culture and Heritage

 * Traditional music, dance, and art forms of Sylhet

 * Historical landmarks and architecture

 * Cuisine and traditions of the region

Modern Sylhet

 * Contemporary issues and challenges

 * Sylhet region

 * Economic developments, including remittances from the Sylheti diaspora

 * Tourism in Sylhet

title: History of Sylhet


text:
History of Sylhet/Brief overview of Sylhet's geographical location

|Back to Table of Contents

= Brief Overview of Sylhet's Geographical Location =

Sylhet is a region located in the northeastern part of the Indian subcontinent, encompassing both modern-day Bangladesh and India. Its geographical location plays a significant role in shaping its unique landscape and climate.

Image credit: Jeet Dev / Wikimedia user

Geography
Sylhet is primarily characterized by its lush green hills, picturesque landscapes, and numerous water bodies. Key geographical features include:

Hills and Plateaus
The Sylhet region is renowned for its rolling hills and plateaus, making it a popular destination for nature enthusiasts and tourists. The Khasi and Jaintia Hills, part of the larger Garo-Khasi-Jaintia range, extend into Sylhet, contributing to its hilly terrain.

Image credit: Abdul Momin / Wikimedia user

Rivers and Wetlands
Several major rivers, including the Surma and Kushiara rivers, flow through Sylhet. These rivers not only provide water resources but also shape the fertile plains surrounding them. The region is also dotted with wetlands and haors (seasonal floodplains), adding to its ecological diversity.

Image credit: Abdulmominbd / Wikimedia user

Tea Gardens
Sylhet is famous for its tea gardens, which cover vast expanses of land. The British introduced tea cultivation in the 19th century, and Sylhet's climate and topography proved ideal for tea production. Today, Sylhet is a significant contributor to the tea industry in both Bangladesh and India.

Image credit: Abu Hasan Mehedi / Wikimedia user

Climate
Sylhet experiences a humid subtropical climate characterized by distinct seasons:

 * 1) Summer (March to June): Warm and humid with temperatures reaching highs.
 * 2) Monsoon (June to September): Heavy rainfall during this season is vital for agriculture.
 * 3) Autumn (October to November): Pleasant weather with cooler temperatures.
 * 4) Winter (December to February): Cool and dry, with temperatures dropping significantly.


text: Template:Sylhet weatherbox

title: Template:Sylhet weatherbox


text: Template:Weather box

title: Template:Weather box


text:
Module:Weather box

-- Implement Template:Weather box.

local _precision = require('Module:Math')._precision local function precision(text) -- Input like 'Jan precipitation inch = trace' calls this with text = 'trace' -- which would cause _precision to throw an error since it is not numeric. -- Workaround: Return 0 as the precision if an error occurs. local success, result = pcall(_precision, text) if success then return result end return 0 end

local function stripToNil(text) -- If text is a non-empty string, return its trimmed content. -- Otherwise, return nothing (text is an empty string or is not a string). if type(text) == 'string' then return text:match('(%S.-)%s*$') end end

local function isAny(args, suffix) local months = { 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' } for _, month in ipairs(months) do if stripToNil(args[month .. suffix]) then return true end end end

local function makeLabel(args, options, is_first, base, what) local first if isAny(args, ' ' .. what .. ' cm') then first = 'cm' else if isAny(args, ' ' .. what .. ' mm') then first = 'mm' else first = (what:sub(1, 4) == 'snow' or				precision(args['Jan ' .. what .. ' inch'] or '0') < 1) and 'cm' or 'mm' end end local second = 'inches' if not stripToNil(args['metric first']) then first, second = second, first end if is_first then if options.wantSingleLine then first = first .. ' (' .. second .. ')' end else first = second end return base .. ' ' .. first end

local function makeSources(frame, args) local source1 = stripToNil(args.source) or stripToNil(args['source 1']) local source2 = stripToNil(args['source 2']) or stripToNil(args['source2']) local result = '|-\n|colspan="14" style="text-align:center;font-size:95%;"|' local text if source1 or source2 then if source1 and source2 then text = 'Source 1: ' .. source1 .. '\n' .. result .. 'Source 2: ' .. source2 else text = 'Source: ' .. (source1 and source1 or source2) end else text = frame:expandTemplate({ title = 'citation needed', args = {date = stripToNil(args.date)} }) end return result .. text .. '\n|}' end

local function wantSingle(parm) -- Result before July 2022 for single_line setting: -- blank/omitted : separate table rows for metric and imperial (two rows) -- N            : bug: only one row with either metric or imperial (not both) --                     but heading like "cm (inches)" -- Y/junk       : single row with both metric/imperial in same cell -- Intend changing in July 2022 so single_line=Y is the default and -- need single_line=N for separate lines. -- However, this release (1 July 2022) keeps blank/omitted as meaning "no" -- so the other large changes can be tested before switching the default. parm = (parm or ''):lower return not (parm == 'no' or parm == 'n' or parm == '') end

local function getDefinitions(frame, args, options) -- Return a list of tables or strings that define each row. local function _if(parm, a, b)		return stripToNil(args[parm]) and a or b or '' end local function _ifset(parm, a)		return stripToNil(args[parm]) and args[parm] or a	end local function _ifany(suffix) return isAny(args, suffix) end local function _ifSingle(a, b)		return options.wantSingleLine and a or b or '' end local location = _if('location', args.location, '') -- show "" to alert editor if parameter is blank local navbarText if not stripToNil(args.open) then if stripToNil(args.name) then local navbar = require('Module:Navbar')._navbar navbarText = navbar({'Climate data for ' .. location, args.name, collapsible=1}) end end return {

--- HEADER -- '{| class="wikitable ' .. _if('open', , 'mw-collapsible' .. _if('collapsed', ' mw-collapsed')) .. '" style="width:' .. _ifset('width', 'auto') .. '; text-align:center; line-height: 1.2em; margin:' .. _ifset('margin', ) .. ';"' .. _if('open',	'\n|+Climate data for ' .. location,	'\n|-' ..	'\n!colspan="14" | ' .. _if('name', navbarText, 'Climate data for ' .. location) ) .. [=[

!scope="row" |Month !scope="col" |Jan !scope="col" |Feb !scope="col" |Mar !scope="col" |Apr !scope="col" |May !scope="col" |Jun !scope="col" |Jul !scope="col" |Aug !scope="col" |Sep !scope="col" |Oct !scope="col" |Nov !scope="col" |Dec !scope="col" style="border-left-width:medium" |Year ]=],

{-- FIRST LINE MAXIMUM HUMIDEX -- WANTROW = _ifany(' maximum humidex') and (_ifset('metric first') or options.wantSingleLine), mode = 'basic', group_name = 'maximum humidex', color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Record high humidex', annual_mode = 'max', }, {-- FIRST LINE RECORD HIGH TEMPERATURES -- WANTROW = _ifany(' record high C') or _ifany(' record high F'), mode = 'temperature', group_name = 'record high', color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Record high °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'),	annual_mode = 'max', }, {-- FIRST-SECOND LINE AVG MONTHLY MAXIMUM TEMPERATURES -- WANTROW = _ifany(' avg record high C') or _ifany(' avg record high F'), mode = 'temperature', group_name = 'avg record high', color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Mean maximum °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'),	annual_mode = 'max', }, {-- FIRST LINE AVERAGE HIGH TEMPERATURES -- WANTROW = _ifany(' high C') or _ifany(' high F'), mode = 'temperature', group_name = 'high', color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Average high °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'),	annual_mode = 'avg', }, {-- FIRST LINE DAILY MEAN TEMPERATURES -- WANTROW = _ifany(' mean C') or _ifany(' mean F'), mode = 'temperature', group_name = 'mean', color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Daily mean °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'),	annual_mode = 'avg', }, {-- FIRST LINE AVERAGE LOW TEMPERATURES -- WANTROW = _ifany(' low C') or _ifany(' low F'), mode = 'temperature', group_name = 'low', color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Average low °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'),	annual_mode = 'avg', }, {-- FIRST-SECOND LINE AVG MONTHLY MINIMUM TEMPERATURES -- WANTROW = _ifany(' avg record low C') or _ifany(' avg record low F'), mode = 'temperature', group_name = 'avg record low', color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Mean minimum °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'),	annual_mode = 'min', }, {-- FIRST LINE RECORD LOW TEMPERATURES -- WANTROW = _ifany(' record low C') or _ifany(' record low F'), mode = 'temperature', group_name = 'record low', color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Record low °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'),	annual_mode = 'min', }, {-- FIRST LINE MINIMUM WIND CHILL -- WANTROW = _ifany(' chill') and (_ifset('metric first') or options.wantSingleLine), mode = 'basic', group_name = 'chill', color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Record low wind chill', annual_mode = 'min', }, {-- FIRST LINE TOTAL PRECIPITATION -- WANTROW = _ifany(' precipitation cm') or _ifany(' precipitation mm') or _ifany(' precipitation inch'), mode = 'precipitation', group_name = 'precipitation', color_scheme = _ifset('precipitation colour', 'p'), date_mode = true, scale_factor = '1', prefer_cm = precision(_ifset('Jan precipitation inch', '0')) < 1, label = makeLabel(args, options, true, 'Average precipitation', 'precipitation'), annual_mode = 'sum', }, {-- FIRST LINE RAINFALL -- WANTROW = _ifany(' rain cm') or _ifany(' rain mm') or _ifany(' rain inch'), mode = 'precipitation', group_name = 'rain', color_scheme = _ifset('rain colour', 'p'), date_mode = true, scale_factor = '1', prefer_cm = precision(_ifset('Jan rain inch', '0')) < 1, label = makeLabel(args, options, true, 'Average rainfall', 'rain'), annual_mode = 'sum', }, {-- FIRST LINE SNOWFALL -- WANTROW = _ifany(' snow cm') or _ifany(' snow mm') or _ifany(' snow inch'), mode = 'precipitation', group_name = 'snow', prefer_cm = true, color_scheme = _ifset('snow colour', 'p'), date_mode = true, scale_factor = '1', label = makeLabel(args, options, true, 'Average snowfall', 'snow'), annual_mode = 'sum', }, {-- FIRST LINE AVERAGE EXTREME SNOW DEPTH -- WANTROW = _ifany(' snow depth cm') or _ifany(' snow depth mm') or _ifany(' snow depth inch'), mode = 'precipitation', group_name = 'snow depth', prefer_cm = true, color_scheme = _ifset('snow colour', 'p'), scale_factor = '0.2', label = makeLabel(args, options, true, 'Average extreme snow depth', 'snow depth'), annual_mode = 'max', }, {-- SECOND LINE MAXIMUM HUMIDEX -- WANTROW = not options.wantSingleLine and _ifany(' maximum humidex'), mode = 'basic', group_name = 'maximum humidex', color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Humidex', annual_mode = 'max', second_line = true, }, {-- SECOND LINE RECORD HIGH TEMPERATURES -- WANTROW = not options.wantSingleLine and (_ifany(' record high C') or _ifany(' record high F')), mode = 'temperature', group_name = 'record high', second_line = true, color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Record high °' .. _if('metric first', 'F', 'C'), annual_mode = 'max', }, {-- SECOND LINE AVERAGE HIGH TEMPERATURES -- WANTROW = not options.wantSingleLine and (_ifany(' high C') or _ifany(' high F')), mode = 'temperature', group_name = 'high', second_line = true, color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Average high °' .. _if('metric first', 'F', 'C'), annual_mode = 'avg', }, {-- SECOND LINE DAILY MEAN TEMPERATURES -- WANTROW = not options.wantSingleLine and (_ifany(' mean C') or _ifany(' mean F')), mode = 'temperature', group_name = 'mean', second_line = true, color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Daily mean °' .. _if('metric first', 'F', 'C'), show = _if('metric first', '2', '1'), annual_mode = 'avg', }, {-- SECOND LINE AVERAGE LOW TEMPERATURES -- WANTROW = not options.wantSingleLine and (_ifany(' low C') or _ifany(' low F')), mode = 'temperature', group_name = 'low', second_line = true, color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Average low °' .. _if('metric first', 'F', 'C'), show = _if('metric first', '2', '1'), annual_mode = 'avg', }, {-- SECOND LINE RECORD LOW TEMPERATURES -- WANTROW = not options.wantSingleLine and (_ifany(' record low C') or _ifany(' record low F')), mode = 'temperature', group_name = 'record low', second_line = true, color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Record low °' .. _if('metric first', 'F', 'C'), show = _if('metric first', '2', '1'), annual_mode = 'min', }, {-- SECOND LINE MINIMUM WIND CHILL -- WANTROW = not options.wantSingleLine and (_ifany(' chill') and _if('metric first')), mode = 'basic', group_name = 'chill', color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Wind chill', annual_mode = 'min', }, {-- SECOND LINE TOTAL PRECIPITATION -- WANTROW = not options.wantSingleLine and (_ifany(' precipitation cm') or _ifany(' precipitation mm') or _ifany(' precipitation inch')), mode = 'precipitation', group_name = 'precipitation', second_line = true, color_scheme = _ifset('precipitation colour', 'p'), date_mode = true, scale_factor = '1', prefer_cm = precision(_ifset('Jan precipitation inch', '0')) < 1, label = makeLabel(args, options, false, 'Average precipitation', 'precipitation'), annual_mode = 'sum', }, {-- SECOND LINE RAINFALL -- WANTROW = not options.wantSingleLine and (_ifany(' rain cm') or _ifany(' rain mm') or _ifany(' rain inch')), mode = 'precipitation', group_name = 'rain', second_line = true, color_scheme = _ifset('rain colour', 'p'), date_mode = true, scale_factor = '1', prefer_cm = precision(_ifset('Jan rain inch', '0')) < 1, label = makeLabel(args, options, false, 'Average rainfall', 'rain'), annual_mode = 'sum', }, {-- SECOND LINE SNOWFALL -- WANTROW = not options.wantSingleLine and (_ifany(' snow cm') or _ifany(' snow mm') or _ifany(' snow inch')), mode = 'precipitation', group_name = 'snow', second_line = true, prefer_cm = true, color_scheme = _ifset('snow colour', 'p'), date_mode = true, scale_factor = '1', label = makeLabel(args, options, false, 'Average snowfall', 'snow'), annual_mode = 'sum', }, {-- SECOND LINE AVERAGE EXTREME SNOW DEPTH -- WANTROW = not options.wantSingleLine and (_ifany(' snow depth cm') or _ifany(' snow depth mm') or _ifany(' snow depth inch')), mode = 'precipitation', group_name = 'snow depth', second_line = true, prefer_cm = true, color_scheme = _ifset('snow colour', 'p'), scale_factor = '0.2', label = makeLabel(args, options, false, 'Average extreme snow depth', 'snow depth'), annual_mode = 'max', }, {-- PRECIPITATION DAYS -- WANTROW = _ifany(' precipitation days'), mode = 'basic', group_name = 'precipitation days', color_scheme = _ifset('precip days colour', 'd'), date_mode = true, scale_factor = '1', label = 'Average precipitation days' .. _if('unit precipitation days', ' (≥ ' .. _ifset('unit precipitation days', '') .. ') '),	annual_mode = 'sum', }, {-- RAINY DAYS -- WANTROW = _ifany(' rain days'), mode = 'basic', group_name = 'rain days', color_scheme = _ifset('precip days colour', 'd'), date_mode = true, scale_factor = '1', label = 'Average rainy days' .. _if('unit rain days', ' (≥ ' .. _ifset('unit rain days', '') .. ') '),	annual_mode = 'sum', }, {-- SNOWY DAYS -- WANTROW = _ifany(' snow days'), mode = 'basic', group_name = 'snow days', color_scheme = _ifset('precip days colour', 'd'), date_mode = true, scale_factor = '1', label = 'Average snowy days' .. _if('unit snow days', ' (≥ ' .. _ifset('unit snow days', '') .. ') '),	annual_mode = 'sum', }, {-- PERCENT RELATIVE HUMIDITY -- WANTROW = _ifany(' humidity'), mode = 'basic', group_name = 'humidity', color_scheme = _ifset('humidity colour', 'h'), scale_factor = '1', label = 'Average relative humidity (%)' .. _if('time day', ' (at ' .. _ifset('time day', '') .. ') ') ..		_if('daily', ' (daily average) '), annual_mode = 'avg', }, {-- AFTERNOON PERCENT RELATIVE HUMIDITY -- WANTROW = _ifany(' afthumidity'), mode = 'basic', group_name = 'afthumidity', color_scheme = _ifset('humidity colour', 'h'), scale_factor = '1', label = 'Average afternoon relative humidity (%)' .. _if('time day', ' (at ' .. _ifset('time day', '') .. ') ') ..		_if('daily', ' (daily average) '), annual_mode = 'avg', }, {-- FIRST LINE AVERAGE DEW POINT -- WANTROW = _ifany(' dew point C') or _ifany(' dew point F'), mode = 'temperature', group_name = 'dew point', color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Average dew point °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'),	annual_mode = 'avg', }, {-- SECOND LINE AVERAGE DEW POINT-- WANTROW = not options.wantSingleLine and (_ifany(' dew point C') or _ifany(' dew point F')), mode = 'temperature', group_name = 'dew point', second_line = true, color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Average dew point °' .. _if('metric first', 'F', 'C'), show = _if('metric first', '2', '1'), annual_mode = 'avg', }, {-- MONTHLY SUNSHINE HOURS -- WANTROW = _ifany(' sun'), mode = 'basic', group_name = 'sun', color_scheme = _ifset('sun colour', 's'), date_mode = true, scale_factor = '1', label = 'Mean monthly sunshine hours', annual_mode = 'sum', }, {-- DAILY SUNSHINE HOURS -- WANTROW = _ifany('d sun'), mode = 'basic', group_name = 'd sun', color_scheme = _ifset('sun colour', 's'), include_space = false, scale_factor = '30.44', label = 'Mean daily sunshine hours', annual_mode = 'avg', }, {-- DAILY DAYLIGHT HOURS -- WANTROW = _ifany(' light'), mode = 'basic', group_name = ' light', color_scheme = _ifset('sun colour', 's'), include_space = false, scale_factor = '30.44', label = 'Mean daily daylight hours', annual_mode = 'avg', }, {-- PERCENT SUNSHINE -- WANTROW = _ifany(' percentsun'), mode = 'basic', group_name = 'percentsun', color_scheme = _ifset('sun colour', 's'), scale_factor = '7.2', label = 'Percent possible sunshine', annual_mode = 'avg', }, {-- ULTRAVIOLET INDEX -- WANTROW = _ifany(' uv'), mode = 'basic', group_name = 'uv', color_scheme = _ifset('uv colour', 'u'), scale_factor = '1', label = 'Average ultraviolet index', annual_mode = 'avg', }, --- SOURCES -- makeSources(frame, args), } end

local function main(frame) local sandbox = frame:getTitle:find('sandbox', 1, true) and '/sandbox' or '' local buildRow = require('Module:Weather box/row' .. sandbox)._buildRow local args = frame:getParent.args local options = { wantSingleLine = wantSingle(args['single line']), sandbox = sandbox, }	local results = {} for i, definition in ipairs(getDefinitions(frame, args, options)) do		local row if type(definition) == 'string' then row = definition elseif definition.WANTROW then row = buildRow(definition, args, options) else row = '' end results[i] = row end return ' \n'..table.concat(results)..'\n ' -- prevent Scribunto from inserting a blank line before the table end

return { main = main, }

title: Module:Weather box