Sunday, March 29, 2020

A Simple Guide to Global Climate Change

A Simple Guide to Global Climate Change A discussion of global climate change, also called global warming, can get very complicated very quickly. Fortunately, it can be explained rather simply. Here are the basics you need to know about climate change: Warmer Land and Sea The climate has warmed and cooled many times during Earth’s geological history, over millions of years. However, the global increase in mean temperature we have observed in the last decades has been both unusually rapid and quite large. It translates to warmer  air  temperatures and warmer sea water almost everywhere on Earth. Less Ice, LessSnow This increase in temperatures has led to increased melting of most of the world’s glaciers. In addition, the thick  Greenland and Antarctica ice sheets are losing volume, and sea ice covers an increasingly small portion of the Arctic while also getting thinner. The winter snow cover in most areas of the U.S. is thinner and does not last as long over the winter. Sea levels are rising, both because of the melting ice, and because warmer water expands and takes up more space. Less Predictable Weather While the word climate refers to long-term statistics on many aspects of temperature and precipitation, weather is a more immediate phenomenon, and is what we feel outside everyday. Global climate change is transforming our experience of weather events in different ways depending on where we live. Common changes include more frequent heavy rain events, regular winter thaws, or persistent droughts. All About the Greenhouse Effect Human activities release in the atmosphere many gases that create a greenhouse effect. Greenhouse gases hold back the sun’s energy that had been reflected by Earth’s surface. This heat is then redirected towards the ground, increasing temperatures. Most of the observed warming can be attributed to these gases. How Are Greenhouse Gas Produced? The most important greenhouse gases are carbon dioxide and methane. They are released when we extract, process, and burn fossil fuels such as coal, oil, and natural gas for electricity, manufacturing, and transportation. These gases are also produced during industrial activities, when we clear land for housing and farming, and during some agricultural activities. Are Sun Cycles to Blame? The Earth’s surface temperature rises and falls with slight changes during natural sun cycles. However, these solar cycles and the changes they produce are well understood and much less significant than those driven by greenhouse gases. Global Warming Consequences The consequences of global warming include more frequent coastal flooding, heat waves, extreme precipitation events, food insecurity, and urban vulnerability. The global warming consequences are being felt (and will be felt) differently in different parts of the world. Global climate change often affects more those who do not have the economic means to develop ways to adapt to the changes. Of course, climate change affect not only humans but the rest of the living world as well.   Global warming has few positive consequences. Gains in agricultural production, often cited as positive, are easily offset by increases in pest problems (including invasive species), droughts, and severe weather events. We can respond by mitigating global warming, which is to reduce it by curbing greenhouse gas emissions. We can also capture carbon dioxide, the most abundant greenhouse gas, out of the atmosphere and store it safely on earth. We can, in addition, adapt by investing in infrastructure, transportation, and agriculture in order to continue living with the inevitable changes brought by global warming.    What Can You Do? Most importantly, reduce your greenhouse gas emissions, whether you contribute as an individual or as a business owner.

Saturday, March 7, 2020

Understanding and Implementing Array Data Types in Delphi

Understanding and Implementing Array Data Types in Delphi Arrays allow us to refer to a series of variables by the same name and to use a number (an index) to call out individual elements in that series. Arrays have both upper and lower bounds  and the elements of the array are contiguous within those bounds. Elements of the array are values that are all of the same type (string, integer, record, custom object). In Delphi, there are two types of arrays: a fixed-size array which always remains the same sizea  static arrayand a dynamic array whose size can change at runtime. Static Arrays Suppose we are writing a program that lets a user enter some values (e.g. the number of appointments) at the beginning of each day. We would choose to store the information in a list. We could call this list Appointments, and each number might be stored as Appointments[1], Appointments[2], and so on. To use the list, we must first declare it. For example: var Appointments : array[0..6] of Integer; declares a variable called Appointments that holds a one-dimensional array (vector) of 7 integer values. Given this declaration, Appointments[3] denotes the fourth integer value in Appointments. The number in the brackets is called the index. If we create a static array but don’t assign values to all its elements, the unused elements contain random data; they are like uninitialized variables. The following code can be used to set all elements in the Appointments array to 0. for k : 0 to 6 do Appointments[k] : 0; Sometimes we need to keep track of related information in an array. For example, to keep track of each pixel on your computer screen, you need to refer to its X and Y coordinates using a multidimensional array to store the values. With Delphi, we can declare arrays of multiple dimensions. For example, the following statement declares a two-dimensional 7 by 24 array: var DayHour : array[1..7, 1..24] of Real; To compute the number of elements in a multidimensional array, multiply the number of elements in each index. The DayHour variable, declared above, sets aside 168 (7*24) elements, in 7 rows and 24 columns. To retrieve the value from the cell in the third row and seventh column we would use: DayHour[3,7] or DayHour[3][7]. The following code can be used to set all elements in the DayHour array to 0. for i : 1 to 7 do for j : 1 to 24 do DayHour[i,j] : 0; Dynamic Arrays You may not know exactly how large to make an array. You may want to have the capability of changing the size of the array at runtime. A dynamic array declares its type, but not its size. The actual size of a dynamic array can be changed at runtime by the use of the SetLength procedure. var Students : array of string; creates a one-dimensional dynamic array of strings. The declaration does not allocate memory for Students. To create the array in memory, we call SetLength procedure. For example, given the declaration above, SetLength(Students, 14) ; allocates an array of 14 strings, indexed 0 to 13. Dynamic arrays are always integer-indexed, always starting from 0 to one less than their size in elements. To create a two-dimensional dynamic array, use the following code: var Matrix: array of array of Double; begin SetLength(Matrix, 10, 20) end; which allocates space for a two-dimensional, 10-by-20 array of Double floating-point values. To remove a dynamic arrays memory space, assign nil to the array variable, like: Matrix : nil; Very often, your program doesnt know at compile time how many elements will be needed; that number will not be known until runtime. With dynamic arrays, you can allocate only as much storage as is required at a given time. In other words, the size of dynamic arrays can be changed at runtime, which is one of the key advantages of dynamic arrays. The next example creates an array of integer values and then calls the Copy function to resize the array. var Vector: array of Integer; k : integer; begin SetLength(Vector, 10) ; for k : Low(Vector) to High(Vector) do Vector[k] : i*10; ... //now we need more space SetLength(Vector, 20) ; //here, Vector array can hold up to 20 elements //(it already has 10 of them)end; The SetLength function creates a larger (or smaller) array and copies the existing values to the new array. The Low and High functions ensure you access every array element without looking back in your code for the correct lower and upper index values.