The only Race Red Shelby GT350 convertible produced for the 2014 model year, this 364-mile drop-top backs 525 horsepower worth of supercharged Coyote V8 with the kind of style and swagger befitting its legendary name. Looking for a future collectible? Want a genuinely fun weekend warrior? This choice Ford is your next classic!
See more in the dealer's listing here!
You can see hundreds of sports car videos on CarsOnLine.com, with weekly features like this 2014 Shelby GT350 Convertible. Just click here! Collector car and classic car videos like this one provide the best opportunity to see around and inside of a car. Click the button above for a look at all the categories offering classic car videos for you to view. Some of them include muscle car videos, Corvette videos, and even truck videos!


text:
© Schmidt Hammer Lassen Architects/ Beauty & the Bit
Shenzhen East Waste-to-Energy Plant
Shenzhen, China, 2021
Located on the outskirts of Shenzhen, the Waste-to-Energy Plant will incinerate 5,000 tons of waste per day, generating 550 million kWh every year.
Integrated into a landscape park, the plant is designed as a compact circular building envelope. The scheme organizes the entire plant, including office spaces, visitor facilities, exhibition zones and other auxiliary buildings, into one structure. The roof structure is designed as a large-scale truss system with maximum spans of 60 m and a structural height of 4 m. A special feature are the photovoltaic panels, which cover 44,000 square meters, around two thirds of the total roof area to generate its own sustainable supply of energy.
The inclined surrounding façade structure of the plant consists of truss girders with varying length of 30-50 m. The girders span from the upper ring girder to the lower support points thus providing a cost-efficient substructure for the facade cladding. The façade lamellas are attached to the substructure using additional T-beams.
A looping walkway invites visitors to take a tour around offering a glimpse behind the scenes of the plant machinery, before it leads up to a rooftop viewing platform overlooking the surrounding landscape.
Shenzhen Energy Environmental Co. Ltd(SEE)
Shanghai Electric Power Construction Co., Ltd.
competition 1st prize, concept design
Site area 267,000 m²
Building diameter 300 m
Roof area 66,000 m²
GFA 112,645 m²
Maximum roof span 60 m

redpajama_set_name: RedPajamaCommonCrawl


text:
Elina Siirala (born 27 October 1983) is a Finnish soprano. She is the founder and frontwoman for the English melodic metal band Angel Nation (formerly EnkElination) and the current female vocalist for the German symphonic metal/viking metal band Leaves' Eyes. Elina is the second cousin of Tuomas Holopainen, founder and keyboardist of Nightwish.

Career

After completing a bachelor's degree in classical singing in Helsinki, Elina moved to London in 2008 to study contemporary vocals.

In 2011, she formed the melodic metal band EnkElination, the band name being a play on words featuring "enkeli", the Finnish word for "angel", and also her name "Elina" in the middle. In 2016 the band announced they would translate their name to "Angel Nation".

The new band name of Angel Nation was shortly followed on 12 April 2016 by the announcement of a new drummer Lucas Robert Williamson joining existing members Shadow on guitar and Julia on bass.

The band played several live shows both headlining venues such as the Camden Underworld and supporting larger bands, as well as festival appearances including Bloodstock Open Air in 2014 and Dames of Darkness in 2015. She came to the attention of Leaves' Eyes during one of those support slots, and in 2016 she was invited to join Leaves' Eyes to replace departing singer Liv Kristine.

In 2016 Elina toured the United States with Leaves Eyes.  In October 2016 she released the single "Do It Anyway" with her band Angel Nation via Nuclear Blast.  The single was accompanied by a video produced by Caz Reason and featured fellow band members Shadow, Julia and Lucas.

In 2017 Leaves Eyes announced another tour of the United States alongside Sabaton whilst Elina also returned to work on recordings for Angel Nation's second album "Aeon".  "Aeon" was released on 27 October 2017 with a small European tour announced alongside Elyose.

Discography

Angel Nation

Albums
Tears of Lust (2014)
Aeon (2017)
Antares (2022)

Singles
Do It Anyway (2016)

Music videos
Tears of Lust (2014)
Last Time Together (2015)
Do it Anyway (2016)
Burn the Witch (2017)

Leaves' Eyes

Albums
 Sign of the Dragonhead (2018)
 The Last Viking (2020)

EPs
Fires in the North (2016)
Black Butterfly (2019)

Music videos
Edge of Steel (2016)
Fires in the North (2016)
Sign of the Dragonhead (2017)
Across the Sky (2018)
Dark Love Empress (2020)
Chain of the Golden Horn (2020)
War of Kings (2020)

Guest performances

 Orden Ogan - Absolution for our final days (2022)

References

External links

Women heavy metal singers
Finnish heavy metal singers
Finnish sopranos
Vocal coaches
Finnish expatriates in the United Kingdom
Living people
1983 births
21st-century Finnish women singers

redpajama_set_name: RedPajamaWikipedia


text:
Report on Fuego (Guatemala) — 9 February-15 February 2011
Smithsonian / US Geological Survey Weekly Volcanic Activity Report, 9 February-15 February 2011
Managing Editor: Sally Kuhn Sennert
Global Volcanism Program, 2011. Report on Fuego (Guatemala). In: Sennert, S K (ed.), Weekly Volcanic Activity Report, 9 February-15 February 2011. Smithsonian Institution and US Geological Survey.
Volcano Profile | Weekly Report (9 February-15 February 2011)
14.473°N, 90.88°W; summit elev. 3763 m
INSIVUMEH reported that during 9-10 and 13-14 February explosions from Fuego produced ash plumes that rose 300-800 m above the crater and drifted W, NW, N, and NE. The explosions generated shock waves that rattled structures in Panimaché and Sangre de Cristo. Crater incandescence was observed at night and avalanches descended the flanks. Fine ashfall was reported in communities downwind during 9-10 February, including Panimaché I and II (8 km SW), Morelia (9 km SW), and Sangre de Cristo (8 km WSW).
Geologic Background. Volcán Fuego, one of Central America's most active volcanoes, is also one of three large stratovolcanoes overlooking Guatemala's former capital, Antigua. The scarp of an older edifice, Meseta, lies between Fuego and Acatenango to the north. Construction of Meseta dates back to about 230,000 years and continued until the late Pleistocene or early Holocene. Collapse of Meseta may have produced the massive Escuintla debris-avalanche deposit, which extends about 50 km onto the Pacific coastal plain. Growth of the modern Fuego volcano followed, continuing the southward migration of volcanism that began at the mostly andesitic Acatenango. Eruptions at Fuego have become more mafic with time, and most historical activity has produced basaltic rocks. Frequent vigorous historical eruptions have been recorded since the onset of the Spanish era in 1524, and have produced major ashfalls, along with occasional pyroclastic flows and lava flows.


text:
Diaries (272) + -
Sibley's (Rochester, N.Y.) (273) + -
Bragdon, Katherine Elmina (12/30/1837 - 9/6/1920) (196) + -
Bragdon, Claude (8/1/1866 - 9/17/1946) (162) + -
Bragdon, George Chandler (4/29/1832 - 8/7/1910) (140) + -
Joiner, Edith M. (7/3/1868 - 7/4/1935) (109) + -
Bragdon, Henry Wilkinson (9/6/1906 - 3/15/1980) (89) + -
Hutchinson, Bessie J. (1877 - 1954) (89) + -
MacArthur, Mary (3/12/1869) (88) + -
Dickins, Mary Belle (9/9/1876?) (85) + -
Cutler, Joseph Warren (7/13/1857 - 1934) (61) + -
Rowe, Marguerite H. (1886 - 1967) (56) + -
Bragdon, Chandler (12/15/1907 - 1/3/1969) (54) + -
Cro' Nest (Rochester, N.Y.) (54) + -
Davis, Charlotte Gleason (4/12/1861 - 1938) (54) + -
Cutler, James Goold (4/24/1848 - 4/21/1927) (53) + -
Arnold, James Burns (1881 - 1957) (52) + -
Flinch (52) + -
Crawford, Letitia (b. 1863?) (49) + -
Davis, Helen Alling (4/19/1871 - 4/12/1950) (49) + -
Steinhausen, Meta (1879 - 1969) (49) + -
Search: mods_subject_name_displayForm_mt:"Sibley's\ \(Rochester,\ N.Y.\)"
May Bragdon Diary, February 25, 1906 – March 1, 1906, p. 102
Bragdon, Charlotte (8/26/1872 - 12/15/1907), Moore, Nan, Mundy, Ethel (1876 - 1964), Hutchison, Laura B. (b. 1870), Davis, Helen Alling (4/19/1871 - 4/12/1950), Davis, Charlotte Gleason (4/12/1861 - 1938), Bragdon, Katherine Elmina (12/30/1837 - 9/6/1920), Cobb's Hill (Rochester, N.Y.), Cro' Nest (Rochester, N.Y.), Sibley's (Rochester, N.Y.)
May Bragdon Diary, March 22, 1906 – March 24, 1906, p. 108
Davis, Helen Alling (4/19/1871 - 4/12/1950), Bragdon, George Chandler (4/29/1832 - 8/7/1910), Joiner, Edith M. (7/3/1868 - 7/4/1935), Bragdon, Katherine Elmina (12/30/1837 - 9/6/1920), Bragdon, Claude (8/1/1866 - 9/17/1946), Warner, John Foster (1859 - 1937), FitzSimons, Lucinda Leona (b. 1863?), Sibley's (Rochester, N.Y.), Mechanics Institute (Rochester, N.Y.), Flinch
May Bragdon Diary, 1910 – 1914, p. 179
Goulding, Gertrude (3/17/1867 - 6/12/1933), Bragdon, George Chandler (4/29/1832 - 8/7/1910), Weller, Frieda (1889 - 1926?), Bragdon, Katherine Elmina (12/30/1837 - 9/6/1920), Hutchinson, Bessie J. (1877 - 1954), Dickins, Mary Belle (9/9/1876?), Bellamy, Charella (1865? - 2/16/1920), Rowe, Marguerite H. (1886 - 1967), Willard, Mary F. (3/12/1853 - 1935), McLaughlin, Florence (1877? - 1945), Sibley's (Rochester, N.Y.)
Bragdon, Katherine Elmina (12/30/1837 - 9/6/1920), Hutchinson, Bessie J. (1877 - 1954), Dickins, Mary Belle (9/9/1876?), Garfield, Helen C. (1835 - 7/18/1911), Caring, Flora (1855 - 1927), Bragdon, Henry Wilkinson (9/6/1906 - 3/15/1980), Stern, Herbert Morland (1882 - 1977), Gridley, Mary R. (1876? - 1956?), Arnold, James Burns (1881 - 1957), Arnold, Helen Ann (4/18/1888 - 1983), McLaughlin, Florence (1877? - 1945), Sibley's (Rochester, N.Y.)
Steinhausen, Theodore D. (1874 - 1944), Steinhausen, Meta (1879 - 1969), Bragdon, Claude (8/1/1866 - 9/17/1946), Davis, Charlotte Gleason (4/12/1861 - 1938), Bragdon, Katherine Elmina (12/30/1837 - 9/6/1920), McLaughlin, Florence (1877? - 1945), Winans, Irene D. (4/5/1882 - 7/19/1936), Goulding, Gertrude (3/17/1867 - 6/12/1933), Corona Cliff (N.Y.), Sibley's (Rochester, N.Y.)
May Bragdon Diary, October 8, 1905 – October 11, 1905, p. 57
Flack, Reginald Gamble (1/24/1881 - 1975), Cutler, Joseph Warren (7/13/1857 - 1934), Bragdon, Katherine Elmina (12/30/1837 - 9/6/1920), Bragdon, George Chandler (4/29/1832 - 8/7/1910), Joiner, Edith M. (7/3/1868 - 7/4/1935), Irondequoit Bay (N.Y.), Sibley's (Rochester, N.Y.), Mechanics Institute (Rochester, N.Y.), Flinch, Perfect Little Ladies
Tappan, Robert (b. 1885?), Hutchinson, Bessie J. (1877 - 1954), Dickins, Mary Belle (9/9/1876?), Arnold, James Burns (1881 - 1957), Bragdon, Katherine Elmina (12/30/1837 - 9/6/1920), MacArthur, Mary (3/12/1869), Crawford, Letitia (b. 1863?), Arnold, Helen Ann (4/18/1888 - 1983), Fenner, Louise (5/3/1877 - 5/17/1950), Sibley's (Rochester, N.Y.), Sea Breeze (Rochester, N.Y.), Seneca Park (Rochester, N.Y.), Flinch
May Bragdon Diary, April 29, 1904 – May 1, 1904, p. 20
Bragdon, Charlotte (8/26/1872 - 12/15/1907), Bragdon, George Chandler (4/29/1832 - 8/7/1910), Crump, Gilbert F. (1871 - 1913), Bragdon, Claude (8/1/1866 - 9/17/1946), Cutler, Joseph Warren (7/13/1857 - 1934), Bragdon, Katherine Elmina (12/30/1837 - 9/6/1920), Joiner, Edith M. (7/3/1868 - 7/4/1935), Hillman, Edith V. (1879? - 1923), Sibley's (Rochester, N.Y.), Cutler Building (Rochester, N.Y.)
May Bragdon Diary, February 25, 1904 – September 30, 1904, p. 115
Bragdon, Katherine Elmina (12/30/1837 - 9/6/1920), Cutler, Joseph Warren (7/13/1857 - 1934), Bragdon, George Chandler (4/29/1832 - 8/7/1910), Hillman, John Constantine (1865 - 1932), Bragdon, Claude (8/1/1866 - 9/17/1946), Joiner, Edith M. (7/3/1868 - 7/4/1935), Sibley's (Rochester, N.Y.), Granite Building (Rochester, N.Y.), Zendavesta, Flinch
May Bragdon Diary, February 20, 1905 – February 24, 1905, p. 172
Davis, Helen Alling (4/19/1871 - 4/12/1950), Scranton, Edgar M. (1860 - 1910), Bragdon, George Chandler (4/29/1832 - 8/7/1910), Cutler, Joseph Warren (7/13/1857 - 1934), Davis, Charlotte Gleason (4/12/1861 - 1938), Davis, Lillian May (1871 - 1910), Powers Building (Rochester, N.Y.), Cro' Nest (Rochester, N.Y.), Sibley's (Rochester, N.Y.), Flinch
Bragdon, George Chandler (4/29/1832 - 8/7/1910), Hutchinson, Bessie J. (1877 - 1954), Dickins, Mary Belle (9/9/1876?), Bragdon, Katherine Elmina (12/30/1837 - 9/6/1920), Bragdon, Claude (8/1/1866 - 9/17/1946), Bragdon, Eugenie Julier (11/16/1870 - 11/6/1920), MacArthur, Mary (3/12/1869), Hahnemann Hospital (Rochester, N.Y.), Sibley's (Rochester, N.Y.)
May Bragdon Diary, March 2, 1900 – March 3, 1900, p. 135
Crump, Gilbert F. (1871 - 1913), Cutler, James Goold (4/24/1848 - 4/21/1927), Joiner, Edith M. (7/3/1868 - 7/4/1935), Hilliard, John (1872? - 1935), Bragdon, Claude (8/1/1866 - 9/17/1946), Flack, Reginald Gamble (1/24/1881 - 1975), Hubbell Park (Rochester, N.Y.), Sibley's (Rochester, N.Y.), Triangle Building (Rochester, N.Y.)
Bragdon, Claude (8/1/1866 - 9/17/1946), Davis, Frank Allen (3/21/1873 - 6/1/1953), Davis, Frances Graham (9/9/1906 - 10/6/1983), Caring, Hutchinson, Bessie J. (1877 - 1954), Dickins, Mary Belle (9/9/1876?), Davis, Frances Freeman (1838? - 1915), Davis, Zoe E. (1882 - 1958), Baker, Marie (b. 1845), McLaughlin, Florence (1877? - 1945), Arnold, James Burns (1881 - 1957), Scrantom's (Rochester, N.Y.), Sibley's (Rochester, N.Y.), Flinch
Bragdon, Katherine Elmina (12/30/1837 - 9/6/1920), Wilkinson, Katharine May (10/24/1876 - 6/14/1959), Davis, Frances Graham (9/9/1906 - 10/6/1983), Dickins, Mary Belle (9/9/1876?), Bradshaw, Alice (b. 3/14/1889), Crawford, Letitia (b. 1863?), Caring, Flora (1855 - 1927), McLaughlin, Florence (1877? - 1945), Goler, Caroline Chandler (b. 3/16/1869), Sibley's (Rochester, N.Y.), Mechanics Institute (Rochester, N.Y.)
Bragdon, Claude (8/1/1866 - 9/17/1946), Wilkinson, Edna Carrie (8/13/1872 - 1965), Vickery, Reba (10/26/1889 - 1978), Wilkinson, George Ely (1861? - 12/1915), Bragdon, George Chandler (4/29/1832 - 8/7/1910), Bragdon, Katherine Elmina (12/30/1837 - 9/6/1920), Goulding, Gertrude (3/17/1867 - 6/12/1933), Sibley's (Rochester, N.Y.), Manas Press
Bragdon, George Chandler (4/29/1832 - 8/7/1910), Bragdon, Claude (8/1/1866 - 9/17/1946), Frey, Amelie D. (1882 - 1966), Bragdon, Katherine Elmina (12/30/1837 - 9/6/1920), Bragdon, Chandler (12/15/1907 - 1/3/1969), Crawford, Letitia (b. 1863?), Clark, Edith E. (1884? - 1934), Sibley's (Rochester, N.Y.), Cro' Nest (Rochester, N.Y.), Charlotte (Charlotte, N.Y.)
May Bragdon Diary, June 26, 1906 – June 29, 1906, p. 138
Cutler, Joseph Warren (7/13/1857 - 1934), Bragdon, Katherine Elmina (12/30/1837 - 9/6/1920), MacArthur, Mary (3/12/1869), Dickins, Mary Belle (9/9/1876?), Hutchinson, Bessie J. (1877 - 1954), Joiner, Edith M. (7/3/1868 - 7/4/1935), Cutler, James Goold (4/24/1848 - 4/21/1927), Flack, Ethel L. (b. 1877), Flack, Reginald Gamble (1/24/1881 - 1975), Bingham, Grace (b. 1882?), Sibley's (Rochester, N.Y.)
May Bragdon Diary, June 14, 1908 – June 18, 1908, p. 72
Bragdon, George Chandler (4/29/1832 - 8/7/1910), Wilkinson, Josephine (10/22/1862 - 3/3/1943), Bragdon, Katherine Elmina (12/30/1837 - 9/6/1920), Bradshaw, Alice (b. 3/14/1889), Davis', Davis, Helen Alling (4/19/1871 - 4/12/1950), Davis, Frances Freeman (1838? - 1915), Baker, Marie (b. 1845), Sibley's (Rochester, N.Y.)
May Bragdon Diary, September 16, 1909 – September 22, 1909, p. 232
Bragdon, Chandler (12/15/1907 - 1/3/1969), Bragdon, Henry Wilkinson (9/6/1906 - 3/15/1980), Hutchinson, Bessie J. (1877 - 1954), MacArthur, Mary (3/12/1869), Crawford, Letitia (b. 1863?), Flack, Ethel L. (b. 1877), Rowe, Marguerite H. (1886 - 1967), Bragdon, Katherine Elmina (12/30/1837 - 9/6/1920), Bragdon, Claude (8/1/1866 - 9/17/1946), Sibley's (Rochester, N.Y.), Cro' Nest (Rochester, N.Y.)
Steinhausen, Theodore D. (1874 - 1944), Weller, Frieda (1889 - 1926?), Clark, Edith E. (1884? - 1934), Flack, Carol M. (1879-1946), Flack, Reginald Gamble (1/24/1881 - 1975), Rogers, Mabel S. (b. 11/17/1870), Hutchinson, Bessie J. (1877 - 1954), Dickins, Mary Belle (9/9/1876?), Irondequoit Bay (N.Y.), South Park (Rochester, N.Y.), Summerville (Rochester, N.Y.), Cro' Nest (Rochester, N.Y.), Sibley's (Rochester, N.Y.), Flinch, Cutler Manufacturing Co.


text:
Reasons to join our Tribe
Nolefan
Garnet & Great
Alameda picks up 700th win as FSU opens 5-0
Written by FSU sports information	in Women's sports
(photo courtesy FSU sports information)
The Osceola
In her 17th season as a head coach, and 12th at the helm of Florida State, Lonni Alameda earned her 700th career win on Sunday with a 12-0 win over Detroit Mercy (0-4) in the final game of the 2020 JoAnne Graf Classic.
The No. 8 Seminoles (5-0) defeated the Titans 12-0 in five innings. Alameda now holds a career mark of 700-318-2 (.687 winning percentage), with a 543-160-1 record (.772) at FSU.
"I had no idea about it," said Alameda. "I don't really pay attention to some of those things, but when I saw the water bucket coming, I figured something was going on.
"It was a great surprise and a special weekend with this team. When you reflect on a milestone like this, you think about how many people have been a part of this program, from players to staff, and I'm really lucky to be able to coach."
Brianna Enter made her first career start for Florida State on Sunday and she allowed a double and a single to the first two batters she faced. The freshman settled in and recorded consecutive strikeouts and induced a pop out to keep the Titans off the board.
Devyn Flaherty opened the FSU second inning with her second triple of the season and scored on an RBI single by Chloe Culp. A fielder's choice by Josie Muffley and a walk to Morgan Noah loaded the bases with nobody out. An RBI single by Kaia LoPreste and an RBI groundout by Kiersten Landers made it 3-0 Florida State.
A double by Sydney Sherrill and a walk to Cassidy Davis allowed Flaherty to record her second extra-base hit of the inning, launching a three-run HR off the scoreboard in right center to make it 8-0 Florida State.
The Noles added four more in the bottom of the fourth as Landers put down a bunt single to lead off the inning. Sherrill's second double of the day brought her in to score and moved Sherrill into sole possession of fourth place on the FSU career list with 49 doubles. Leslie Farris pinch ran at second for Sherrill and scored on an RBI triple by Kaley Mudge. Culp closed out the scoring with a two-run home run to left for the 12-0 final score.
Kathryn Sandercock (1-0) entered to pitch the third inning and retired six of the seven batters she faced. Bianca Cruz faced two batters in the fifth inning and struck out both of them, while Kara Bilodeau closed out the game by getting the batter to pop out.
The Seminoles will be back in action on Wednesday with a game against Florida A&M at 6 p.m. (live stream on ACC Network Extra). FAMU head coach Veronica Wiggins will be retiring after the 2020 season, and there will be an on-field ceremony to honor her career prior to the game.
FSU women's tennis knocks off GT
The No. 9 Florida State women's tennis team (7-1) defeated No. 22 Georgia Tech (9-4) on Sunday, 4-2, in its final match at the ITA National Indoor Championship. The Seminoles placed in the top six at the national event, making it a historic finish for the program.
Singles competition
#60 Kenya Jones (GT) def. Emmanuelle Salas (FS) 6-2, 6-2
Petra Hule (FS) vs. #49 Victoria Flores (GT) 6-2, 4-6, 2-5, unfinished
#86 Nandini Das (FS) def. #93 Gia Cohen (GT) 6-3, 6-4
Sasha Hill (FS) def. Nami Otsuka (GT) 6-3, 6-4
Victoria Allen (FS) def. Rosie Garcia Gross (GT) 6-1, 5-7, 6-2
Andrea Garcia (FS) def. Nadia Gizdova (GT) 6-0, 6-3
Doubles competition
#37 Kenya Jones/Victoria Flores (GT) def. #15 Petra Hule/Victoria Allen (FS) 6-2
Nandini Das/Andrea Garcia (FS) vs. Monika Dedaj/Rosie Garcia Gross (GT) 4-2, unfinished
Gia Cohen/Nami Otsuka (GT) def. Emmanuelle Salas/Sasha Hill (FS) 6-1
Column: Six observations about Norvell's 2020 class
Gillespie, Jones guide FSU to 20th win
Jerry Kutz February 10, 2020 at 12:10 am	 Reply
Posted a comment on the Men's Basketball story that fans often times look with envy at great coaches at other schools. Look around and you'll find GREAT coaches right here, right now. Lonnie Alameda continues to build a great program on the foundation established by JoAnne Graf and her players. And what a pleasure she is to be around.
© Copyright 2020 by The Osceola. Managed by KB Studio. Privacy Policy


text:
Q: What is the JavaScript equivalent of var_dump or print_r in PHP? I would like to see the structure of object in JavaScript (for debugging). Is there anything similar to var_dump in PHP?

A: The var_dump equivalent in JavaScript? Simply, there isn't one.
But, that doesn't mean you're left helpless. Like some have suggested, use Firebug (or equivalent in other browsers), but unlike what others suggested, don't use console.log when you have a (slightly) better tool console.dir:
console.dir(object)

Prints an interactive listing of all properties of the object. This
  looks identical to the view that you would see in the DOM tab.

A: Most modern browsers have a console in their developer tools, useful for this sort of debugging.
console.log(myvar);

Then you will get a nicely mapped out interface of the object/whatever in the console.
Check out the console documentation for more details.

A: A nice simple solution for parsing a JSON Response to HTML.
var json_response = jQuery.parseJSON(data);
html_response += 'JSON Response:
';

jQuery.each(json_response, function(k, v) {
    html_response += outputJSONReponse(k, v);
});

function outputJSONReponse(k, v) {
    var html_response = k + ': ';

    if(jQuery.isArray(v) || jQuery.isPlainObject(v)) {
        jQuery.each(v, function(j, w) {
            html_response += outputJSONReponse(j, w);
        });
    } else {
        html_response += v + '
';
    }

    return html_response;
}

A: As others have already mentioned, the best way to debug your variables is to use a modern browser's developer console (e.g. Chrome Developer Tools, Firefox+Firebug, Opera Dragonfly (which now disappeared in the new Chromium-based (Blink) Opera, but as developers say, "Dragonfly is not dead though we cannot give you more information yet").
But in case you need another approach, there's a really useful site called
php.js:
http://phpjs.org/
which provides "JavaScript alternatives to PHP functions" - so you can use them the similar way as you would in PHP. I will copy-paste the appropriate functions to you here, BUT be aware that these codes can get updated on the original site in case some bugs are detected, so I suggest you visiting the phpjs.org site! (Btw. I'm NOT affiliated with the site, but I find it extremely useful.)
var_dump() in JavaScript
Here is the code of the JS-alternative of var_dump():
http://phpjs.org/functions/var_dump/
it depends on the echo() function: http://phpjs.org/functions/echo/
function var_dump() {
  //  discuss at: http://phpjs.org/functions/var_dump/
  // original by: Brett Zamir (http://brett-zamir.me)
  // improved by: Zahlii
  // improved by: Brett Zamir (http://brett-zamir.me)
  //  depends on: echo
  //        note: For returning a string, use var_export() with the second argument set to true
  //        test: skip
  //   example 1: var_dump(1);
  //   returns 1: 'int(1)'

  var output = '',
    pad_char = ' ',
    pad_val = 4,
    lgth = 0,
    i = 0;

  var _getFuncName = function(fn) {
    var name = (/\W*function\s+([\w\$]+)\s*\(/)
      .exec(fn);
    if (!name) {
      return '(Anonymous)';
    }
    return name[1];
  };

  var _repeat_char = function(len, pad_char) {
    var str = '';
    for (var i = 0; i < len; i++) {
      str += pad_char;
    }
    return str;
  };
  var _getInnerVal = function(val, thick_pad) {
    var ret = '';
    if (val === null) {
      ret = 'NULL';
    } else if (typeof val === 'boolean') {
      ret = 'bool(' + val + ')';
    } else if (typeof val === 'string') {
      ret = 'string(' + val.length + ') "' + val + '"';
    } else if (typeof val === 'number') {
      if (parseFloat(val) == parseInt(val, 10)) {
        ret = 'int(' + val + ')';
      } else {
        ret = 'float(' + val + ')';
      }
    }
    // The remaining are not PHP behavior because these values only exist in this exact form in JavaScript
    else if (typeof val === 'undefined') {
      ret = 'undefined';
    } else if (typeof val === 'function') {
      var funcLines = val.toString()
        .split('\n');
      ret = '';
      for (var i = 0, fll = funcLines.length; i < fll; i++) {
        ret += (i !== 0 ? '\n' + thick_pad : '') + funcLines[i];
      }
    } else if (val instanceof Date) {
      ret = 'Date(' + val + ')';
    } else if (val instanceof RegExp) {
      ret = 'RegExp(' + val + ')';
    } else if (val.nodeName) {
      // Different than PHP's DOMElement
      switch (val.nodeType) {
      case 1:
        if (typeof val.namespaceURI === 'undefined' || val.namespaceURI === 'http://www.w3.org/1999/xhtml') {
          // Undefined namespace could be plain XML, but namespaceURI not widely supported
          ret = 'HTMLElement("' + val.nodeName + '")';
        } else {
          ret = 'XML Element("' + val.nodeName + '")';
        }
        break;
      case 2:
        ret = 'ATTRIBUTE_NODE(' + val.nodeName + ')';
        break;
      case 3:
        ret = 'TEXT_NODE(' + val.nodeValue + ')';
        break;
      case 4:
        ret = 'CDATA_SECTION_NODE(' + val.nodeValue + ')';
        break;
      case 5:
        ret = 'ENTITY_REFERENCE_NODE';
        break;
      case 6:
        ret = 'ENTITY_NODE';
        break;
      case 7:
        ret = 'PROCESSING_INSTRUCTION_NODE(' + val.nodeName + ':' + val.nodeValue + ')';
        break;
      case 8:
        ret = 'COMMENT_NODE(' + val.nodeValue + ')';
        break;
      case 9:
        ret = 'DOCUMENT_NODE';
        break;
      case 10:
        ret = 'DOCUMENT_TYPE_NODE';
        break;
      case 11:
        ret = 'DOCUMENT_FRAGMENT_NODE';
        break;
      case 12:
        ret = 'NOTATION_NODE';
        break;
      }
    }
    return ret;
  };

  var _formatArray = function(obj, cur_depth, pad_val, pad_char) {
    var someProp = '';
    if (cur_depth > 0) {
      cur_depth++;
    }

    var base_pad = _repeat_char(pad_val * (cur_depth - 1), pad_char);
    var thick_pad = _repeat_char(pad_val * (cur_depth + 1), pad_char);
    var str = '';
    var val = '';

    if (typeof obj === 'object' && obj !== null) {
      if (obj.constructor && _getFuncName(obj.constructor) === 'PHPJS_Resource') {
        return obj.var_dump();
      }
      lgth = 0;
      for (someProp in obj) {
        lgth++;
      }
      str += 'array(' + lgth + ') {\n';
      for (var key in obj) {
        var objVal = obj[key];
        if (typeof objVal === 'object' && objVal !== null && !(objVal instanceof Date) && !(objVal instanceof RegExp) &&
          !
          objVal.nodeName) {
          str += thick_pad + '[' + key + '] =>\n' + thick_pad + _formatArray(objVal, cur_depth + 1, pad_val,
            pad_char);
        } else {
          val = _getInnerVal(objVal, thick_pad);
          str += thick_pad + '[' + key + '] =>\n' + thick_pad + val + '\n';
        }
      }
      str += base_pad + '}\n';
    } else {
      str = _getInnerVal(obj, thick_pad);
    }
    return str;
  };

  output = _formatArray(arguments[0], 0, pad_val, pad_char);
  for (i = 1; i < arguments.length; i++) {
    output += '\n' + _formatArray(arguments[i], 0, pad_val, pad_char);
  }

  this.echo(output);
}

print_r() in JavaScript
Here is the print_r() function:
http://phpjs.org/functions/print_r/
It depends on echo() too.
function print_r(array, return_val) {
  //  discuss at: http://phpjs.org/functions/print_r/
  // original by: Michael White (http://getsprink.com)
  // improved by: Ben Bryan
  // improved by: Brett Zamir (http://brett-zamir.me)
  // improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  //    input by: Brett Zamir (http://brett-zamir.me)
  //  depends on: echo
  //   example 1: print_r(1, true);
  //   returns 1: 1

  var output = '',
    pad_char = ' ',
    pad_val = 4,
    d = this.window.document,
    getFuncName = function(fn) {
      var name = (/\W*function\s+([\w\$]+)\s*\(/)
        .exec(fn);
      if (!name) {
        return '(Anonymous)';
      }
      return name[1];
    };
  repeat_char = function(len, pad_char) {
    var str = '';
    for (var i = 0; i < len; i++) {
      str += pad_char;
    }
    return str;
  };
  formatArray = function(obj, cur_depth, pad_val, pad_char) {
    if (cur_depth > 0) {
      cur_depth++;
    }

    var base_pad = repeat_char(pad_val * cur_depth, pad_char);
    var thick_pad = repeat_char(pad_val * (cur_depth + 1), pad_char);
    var str = '';

    if (typeof obj === 'object' && obj !== null && obj.constructor && getFuncName(obj.constructor) !==
      'PHPJS_Resource') {
      str += 'Array\n' + base_pad + '(\n';
      for (var key in obj) {
        if (Object.prototype.toString.call(obj[key]) === '[object Array]') {
          str += thick_pad + '[' + key + '] => ' + formatArray(obj[key], cur_depth + 1, pad_val, pad_char);
        } else {
          str += thick_pad + '[' + key + '] => ' + obj[key] + '\n';
        }
      }
      str += base_pad + ')\n';
    } else if (obj === null || obj === undefined) {
      str = '';
    } else {
      // for our "resource" class
      str = obj.toString();
    }

    return str;
  };

  output = formatArray(array, 0, pad_val, pad_char);

  if (return_val !== true) {
    if (d.body) {
      this.echo(output);
    } else {
      try {
        // We're in XUL, so appending as plain text won't work; trigger an error out of XUL
        d = XULDocument;
        this.echo('
' + output + '
');
      } catch (e) {
        // Outputting as plain text may work in some plain XML
        this.echo(output);
      }
    }
    return true;
  }
  return output;
}

var_export() in JavaScript
You may also find the var_export() alternative useful, which also depends on echo():
http://phpjs.org/functions/var_export/
function var_export(mixed_expression, bool_return) {
  //  discuss at: http://phpjs.org/functions/var_export/
  // original by: Philip Peterson
  // improved by: johnrembo
  // improved by: Brett Zamir (http://brett-zamir.me)
  //    input by: Brian Tafoya (http://www.premasolutions.com/)
  //    input by: Hans Henrik (http://hanshenrik.tk/)
  // bugfixed by: Brett Zamir (http://brett-zamir.me)
  // bugfixed by: Brett Zamir (http://brett-zamir.me)
  //  depends on: echo
  //   example 1: var_export(null);
  //   returns 1: null
  //   example 2: var_export({0: 'Kevin', 1: 'van', 2: 'Zonneveld'}, true);
  //   returns 2: "array (\n  0 => 'Kevin',\n  1 => 'van',\n  2 => 'Zonneveld'\n)"
  //   example 3: data = 'Kevin';
  //   example 3: var_export(data, true);
  //   returns 3: "'Kevin'"

  var retstr = '',
    iret = '',
    value,
    cnt = 0,
    x = [],
    i = 0,
    funcParts = [],
    // We use the last argument (not part of PHP) to pass in
    // our indentation level
    idtLevel = arguments[2] || 2,
    innerIndent = '',
    outerIndent = '',
    getFuncName = function(fn) {
      var name = (/\W*function\s+([\w\$]+)\s*\(/)
        .exec(fn);
      if (!name) {
        return '(Anonymous)';
      }
      return name[1];
    };
  _makeIndent = function(idtLevel) {
    return (new Array(idtLevel + 1))
      .join(' ');
  };
  __getType = function(inp) {
    var i = 0,
      match, types, cons, type = typeof inp;
    if (type === 'object' && (inp && inp.constructor) &&
      getFuncName(inp.constructor) === 'PHPJS_Resource') {
      return 'resource';
    }
    if (type === 'function') {
      return 'function';
    }
    if (type === 'object' && !inp) {
      // Should this be just null?
      return 'null';
    }
    if (type === 'object') {
      if (!inp.constructor) {
        return 'object';
      }
      cons = inp.constructor.toString();
      match = cons.match(/(\w+)\(/);
      if (match) {
        cons = match[1].toLowerCase();
      }
      types = ['boolean', 'number', 'string', 'array'];
      for (i = 0; i < types.length; i++) {
        if (cons === types[i]) {
          type = types[i];
          break;
        }
      }
    }
    return type;
  };
  type = __getType(mixed_expression);

  if (type === null) {
    retstr = 'NULL';
  } else if (type === 'array' || type === 'object') {
    outerIndent = _makeIndent(idtLevel - 2);
    innerIndent = _makeIndent(idtLevel);
    for (i in mixed_expression) {
      value = this.var_export(mixed_expression[i], 1, idtLevel + 2);
      value = typeof value === 'string' ? value.replace(/</g, '<')
        .
      replace(/>/g, '>'): value;
      x[cnt++] = innerIndent + i + ' => ' +
        (__getType(mixed_expression[i]) === 'array' ?
          '\n' : '') + value;
    }
    iret = x.join(',\n');
    retstr = outerIndent + 'array (\n' + iret + '\n' + outerIndent + ')';
  } else if (type === 'function') {
    funcParts = mixed_expression.toString()
      .
    match(/function .*?\((.*?)\) \{([\s\S]*)\}/);

    // For lambda functions, var_export() outputs such as the following:
    // '\000lambda_1'. Since it will probably not be a common use to
    // expect this (unhelpful) form, we'll use another PHP-exportable
    // construct, create_function() (though dollar signs must be on the
    // variables in JavaScript); if using instead in JavaScript and you
    // are using the namespaced version, note that create_function() will
    // not be available as a global
    retstr = "create_function ('" + funcParts[1] + "', '" +
      funcParts[2].replace(new RegExp("'", 'g'), "\\'") + "')";
  } else if (type === 'resource') {
    // Resources treated as null for var_export
    retstr = 'NULL';
  } else {
    retstr = typeof mixed_expression !== 'string' ? mixed_expression :
      "'" + mixed_expression.replace(/(["'])/g, '\\$1')
      .
    replace(/\0/g, '\\0') + "'";
  }

  if (!bool_return) {
    this.echo(retstr);
    return null;
  }

  return retstr;
}

echo() in JavaScript
http://phpjs.org/functions/echo/
function echo() {
  //  discuss at: http://phpjs.org/functions/echo/
  // original by: Philip Peterson
  // improved by: echo is bad
  // improved by: Nate
  // improved by: Brett Zamir (http://brett-zamir.me)
  // improved by: Brett Zamir (http://brett-zamir.me)
  // improved by: Brett Zamir (http://brett-zamir.me)
  //  revised by: Der Simon (http://innerdom.sourceforge.net/)
  // bugfixed by: Eugene Bulkin (http://doubleaw.com/)
  // bugfixed by: Brett Zamir (http://brett-zamir.me)
  // bugfixed by: Brett Zamir (http://brett-zamir.me)
  // bugfixed by: EdorFaus
  //    input by: JB
  //        note: If browsers start to support DOM Level 3 Load and Save (parsing/serializing),
  //        note: we wouldn't need any such long code (even most of the code below). See
  //        note: link below for a cross-browser implementation in JavaScript. HTML5 might
  //        note: possibly support DOMParser, but that is not presently a standard.
  //        note: Although innerHTML is widely used and may become standard as of HTML5, it is also not ideal for
  //        note: use with a temporary holder before appending to the DOM (as is our last resort below),
  //        note: since it may not work in an XML context
  //        note: Using innerHTML to directly add to the BODY is very dangerous because it will
  //        note: break all pre-existing references to HTMLElements.
  //   example 1: echo('

abc

abc

');
  //   returns 1: undefined

  var isNode = typeof module !== 'undefined' && module.exports && typeof global !== "undefined" && {}.toString.call(
    global) == '[object global]';
  if (isNode) {
    var args = Array.prototype.slice.call(arguments);
    return console.log(args.join(' '));
  }

  var arg = '';
  var argc = arguments.length;
  var argv = arguments;
  var i = 0;
  var holder, win = this.window;
  var d = win.document;
  var ns_xhtml = 'http://www.w3.org/1999/xhtml';
  // If we're in a XUL context
  var ns_xul = 'http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul';

  var stringToDOM = function(str, parent, ns, container) {
    var extraNSs = '';
    if (ns === ns_xul) {
      extraNSs = ' xmlns:html="' + ns_xhtml + '"';
    }
    var stringContainer = '<' + container + ' xmlns="' + ns + '"' + extraNSs + '>' + str + '</' + container + '>';
    var dils = win.DOMImplementationLS;
    var dp = win.DOMParser;
    var ax = win.ActiveXObject;
    if (dils && dils.createLSInput && dils.createLSParser) {
      // Follows the DOM 3 Load and Save standard, but not
      // implemented in browsers at present; HTML5 is to standardize on innerHTML, but not for XML (though
      // possibly will also standardize with DOMParser); in the meantime, to ensure fullest browser support, could
      // attach http://svn2.assembla.com/svn/brettz9/DOMToString/DOM3.js (see http://svn2.assembla.com/svn/brettz9/DOMToString/DOM3.xhtml for a simple test file)
      var lsInput = dils.createLSInput();
      // If we're in XHTML, we'll try to allow the XHTML namespace to be available by default
      lsInput.stringData = stringContainer;
      // synchronous, no schema type
      var lsParser = dils.createLSParser(1, null);
      return lsParser.parse(lsInput)
        .firstChild;
    } else if (dp) {
      // If we're in XHTML, we'll try to allow the XHTML namespace to be available by default
      try {
        var fc = new dp()
          .parseFromString(stringContainer, 'text/xml');
        if (fc && fc.documentElement && fc.documentElement.localName !== 'parsererror' && fc.documentElement.namespaceURI !==
          'http://www.mozilla.org/newlayout/xml/parsererror.xml') {
          return fc.documentElement.firstChild;
        }
        // If there's a parsing error, we just continue on
      } catch (e) {
        // If there's a parsing error, we just continue on
      }
    } else if (ax) {
      // We don't bother with a holder in Explorer as it doesn't support namespaces
      var axo = new ax('MSXML2.DOMDocument');
      axo.loadXML(str);
      return axo.documentElement;
    }
    /*else if (win.XMLHttpRequest) {
     // Supposed to work in older Safari
      var req = new win.XMLHttpRequest;
      req.open('GET', 'data:application/xml;charset=utf-8,'+encodeURIComponent(str), false);
      if (req.overrideMimeType) {
        req.overrideMimeType('application/xml');
      }
      req.send(null);
      return req.responseXML;
    }*/
    // Document fragment did not work with innerHTML, so we create a temporary element holder
    // If we're in XHTML, we'll try to allow the XHTML namespace to be available by default
    //if (d.createElementNS && (d.contentType && d.contentType !== 'text/html')) {
    // Don't create namespaced elements if we're being served as HTML (currently only Mozilla supports this detection in true XHTML-supporting browsers, but Safari and Opera should work with the above DOMParser anyways, and IE doesn't support createElementNS anyways)
    if (d.createElementNS && // Browser supports the method
      (d.documentElement.namespaceURI || // We can use if the document is using a namespace
        d.documentElement.nodeName.toLowerCase() !== 'html' || // We know it's not HTML4 or less, if the tag is not HTML (even if the root namespace is null)
        (d.contentType && d.contentType !== 'text/html') // We know it's not regular HTML4 or less if this is Mozilla (only browser supporting the attribute) and the content type is something other than text/html; other HTML5 roots (like svg) still have a namespace
      )) {
      // Don't create namespaced elements if we're being served as HTML (currently only Mozilla supports this detection in true XHTML-supporting browsers, but Safari and Opera should work with the above DOMParser anyways, and IE doesn't support createElementNS anyways); last test is for the sake of being in a pure XML document
      holder = d.createElementNS(ns, container);
    } else {
      // Document fragment did not work with innerHTML
      holder = d.createElement(container);
    }
    holder.innerHTML = str;
    while (holder.firstChild) {
      parent.appendChild(holder.firstChild);
    }
    return false;
    // throw 'Your browser does not support DOM parsing as required by echo()';
  };

  var ieFix = function(node) {
    if (node.nodeType === 1) {
      var newNode = d.createElement(node.nodeName);
      var i, len;
      if (node.attributes && node.attributes.length > 0) {
        for (i = 0, len = node.attributes.length; i < len; i++) {
          newNode.setAttribute(node.attributes[i].nodeName, node.getAttribute(node.attributes[i].nodeName));
        }
      }
      if (node.childNodes && node.childNodes.length > 0) {
        for (i = 0, len = node.childNodes.length; i < len; i++) {
          newNode.appendChild(ieFix(node.childNodes[i]));
        }
      }
      return newNode;
    } else {
      return d.createTextNode(node.nodeValue);
    }
  };

  var replacer = function(s, m1, m2) {
    // We assume for now that embedded variables do not have dollar sign; to add a dollar sign, you currently must use {$$var} (We might change this, however.)
    // Doesn't cover all cases yet: see http://php.net/manual/en/language.types.string.php#language.types.string.syntax.double
    if (m1 !== '\\') {
      return m1 + eval(m2);
    } else {
      return s;
    }
  };

  this.php_js = this.php_js || {};
  var phpjs = this.php_js;
  var ini = phpjs.ini;
  var obs = phpjs.obs;
  for (i = 0; i < argc; i++) {
    arg = argv[i];
    if (ini && ini['phpjs.echo_embedded_vars']) {
      arg = arg.replace(/(.?)\{?\$(\w*?\}|\w*)/g, replacer);
    }

    if (!phpjs.flushing && obs && obs.length) {
      // If flushing we output, but otherwise presence of a buffer means caching output
      obs[obs.length - 1].buffer += arg;
      continue;
    }

    if (d.appendChild) {
      if (d.body) {
        if (win.navigator.appName === 'Microsoft Internet Explorer') {
          // We unfortunately cannot use feature detection, since this is an IE bug with cloneNode nodes being appended
          d.body.appendChild(stringToDOM(ieFix(arg)));
        } else {
          var unappendedLeft = stringToDOM(arg, d.body, ns_xhtml, 'div')
            .cloneNode(true); // We will not actually append the div tag (just using for providing XHTML namespace by default)
          if (unappendedLeft) {
            d.body.appendChild(unappendedLeft);
          }
        }
      } else {
        // We will not actually append the description tag (just using for providing XUL namespace by default)
        d.documentElement.appendChild(stringToDOM(arg, d.documentElement, ns_xul, 'description'));
      }
    } else if (d.write) {
      d.write(arg);
    } else {
      console.log(arg);
    }
  }
}

A: You could also try this function. I can't remember the original author, but all credits go to them.
Works like a charm - 100% the same as var_dump in PHP.
Check it out.

function dump(arr,level) {
    var dumped_text = "";
    if(!level) level = 0;

    //The padding given at the beginning of the line.
    var level_padding = "";
    for(var j=0;j<level+1;j++) level_padding += "    ";

    if(typeof(arr) == 'object') { //Array/Hashes/Objects
        for(var item in arr) {
            var value = arr[item];

            if(typeof(value) == 'object') { //If it is an array,
                dumped_text += level_padding + "'" + item + "' ...\n";
                dumped_text += dump(value,level+1);
            } else {
                dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
            }
        }
    } else { //Stings/Chars/Numbers etc.
        dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
    }
    return dumped_text;
}

// Example:

var employees = [
    { id: '1', sex: 'm', city: 'Paris' },
    { id: '2', sex: 'f', city: 'London' },
    { id: '3', sex: 'f', city: 'New York' },
    { id: '4', sex: 'm', city: 'Moscow' },
    { id: '5', sex: 'm', city: 'Berlin' }
]

// Open dev console (F12) to see results:

console.log(dump(employees));

A: Firebug.
Then, in your javascript:
var blah = {something: 'hi', another: 'noway'};
console.debug("Here is blah: %o", blah);

Now you can look at the console, click on the statement and see what is inside blah

A: Most common way:
console.log(object);

However I must mention JSON.stringify which is useful to dump variables in non-browser scripts:
console.log( JSON.stringify(object) );

The JSON.stringify function also supports built-in prettification as pointed out by Simon Zyx.
Example:
var obj = {x: 1, y: 2, z: 3};

console.log( JSON.stringify(obj, null, 2) ); // spacing level = 2

The above snippet will print:
{
  "x": 1,
  "y": 2,
  "z": 3
}

On caniuse.com you can view the browsers that support natively the JSON.stringify function: http://caniuse.com/json
You can also use the Douglas Crockford library to add JSON.stringify support on old browsers: https://github.com/douglascrockford/JSON-js
Docs for JSON.stringify: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
I hope this helps :-)

A: I wrote this JS function dump() to work like PHP's var_dump().
To show the contents of the variable in an alert window: dump(variable)
To show the contents of the variable in the web page: dump(variable, 'body')
To just get a string of the variable: dump(variable, 'none')
/* repeatString() returns a string which has been repeated a set number of times */
function repeatString(str, num) {
    out = '';
    for (var i = 0; i < num; i++) {
        out += str;
    }
    return out;
}

/*
dump() displays the contents of a variable like var_dump() does in PHP. dump() is
better than typeof, because it can distinguish between array, null and object.
Parameters:
    v:              The variable
    howDisplay:     "none", "body", "alert" (default)
    recursionLevel: Number of times the function has recursed when entering nested
                    objects or arrays. Each level of recursion adds extra space to the
                    output to indicate level. Set to 0 by default.
Return Value:
    A string of the variable's contents
Limitations:
    Can't pass an undefined variable to dump().
    dump() can't distinguish between int and float.
    dump() can't tell the original variable type of a member variable of an object.
    These limitations can't be fixed because these are *features* of JS. However, dump()
*/
function dump(v, howDisplay, recursionLevel) {
    howDisplay = (typeof howDisplay === 'undefined') ? "alert" : howDisplay;
    recursionLevel = (typeof recursionLevel !== 'number') ? 0 : recursionLevel;

    var vType = typeof v;
    var out = vType;

    switch (vType) {
        case "number":
        /* there is absolutely no way in JS to distinguish 2 from 2.0
           so 'number' is the best that you can do. The following doesn't work:
           var er = /^[0-9]+$/;
           if (!isNaN(v) && v % 1 === 0 && er.test(3.0)) {
               out = 'int';
           }
        */
        break;
    case "boolean":
        out += ": " + v;
        break;
    case "string":
        out += "(" + v.length + '): "' + v + '"';
        break;
    case "object":
        //check if null
        if (v === null) {
            out = "null";
        }
        //If using jQuery: if ($.isArray(v))
        //If using IE: if (isArray(v))
        //this should work for all browsers according to the ECMAScript standard:
        else if (Object.prototype.toString.call(v) === '[object Array]') {
            out = 'array(' + v.length + '): {\n';
            for (var i = 0; i < v.length; i++) {
                out += repeatString('   ', recursionLevel) + "   [" + i + "]:  " +
                    dump(v[i], "none", recursionLevel + 1) + "\n";
            }
            out += repeatString('   ', recursionLevel) + "}";
        }
        else {
            //if object
            let sContents = "{\n";
            let cnt = 0;
            for (var member in v) {
                //No way to know the original data type of member, since JS
                //always converts it to a string and no other way to parse objects.
                sContents += repeatString('   ', recursionLevel) + "   " + member +
                    ":  " + dump(v[member], "none", recursionLevel + 1) + "\n";
                cnt++;
            }
            sContents += repeatString('   ', recursionLevel) + "}";
            out += "(" + cnt + "): " + sContents;
        }
        break;
    default:
        out = v;
        break;
    }

    if (howDisplay == 'body') {
        var pre = document.createElement('pre');
        pre.innerHTML = out;
        document.body.appendChild(pre);
    }
    else if (howDisplay == 'alert') {
        alert(out);
    }

    return out;
}

A: I put this forward to help anyone needing something readily practical for giving you a nice, prettified (indented) picture of a JS Node. None of the other solutions worked for me for a Node ("cyclical error" or whatever...).  This walks you through the tree under the DOM Node (without using recursion) and gives you the depth, tagName (if applicable) and textContent (if applicable).
Any other details from the nodes you encounter as you walk the tree under the head node can be added as per your interest...
function printRNode( node ){
    // make sort of human-readable picture of the node... a bit like PHP print_r

    if( node === undefined || node === null ){
        throwError( 'node was ' + typeof node );
    }
    let s = '';

    // NB walkDOM could be made into a utility function which you could
    // call with one or more callback functions as parameters...

    function walkDOM( headNode ){
      const stack = [ headNode ];
      const depthCountDowns = [ 1 ];
      while (stack.length > 0) {
        const node = stack.pop();
        const depth = depthCountDowns.length - 1;
        // TODO non-text, non-BR nodes could show more details (attributes, properties, etc.)
        const stringRep = node.nodeType === 3? 'TEXT: |' + node.nodeValue + '|' : 'tag: ' + node.tagName;
        s += '  '.repeat( depth ) + stringRep + '\n';
        const lastIndex = depthCountDowns.length - 1;
        depthCountDowns[ lastIndex ] = depthCountDowns[ lastIndex ] - 1;
        if( node.childNodes.length ){
            depthCountDowns.push( node.childNodes.length );
            stack.push( ... Array.from( node.childNodes ).reverse() );
        }
        while( depthCountDowns[ depthCountDowns.length - 1 ] === 0 ){
            depthCountDowns.splice( -1 );
        }
      }
    }
    walkDOM( node );
    return s;
}

redpajama_set_name: RedPajamaStackExchange


This segment offers Nazca-related links and books.
BBC Online: The Lost City of Nasca - transcript from the program, discussing the Nasca Lines and the Nasca city, Cahuachi.
Mystery of the Nazca Lines, The - takes a look at how the ideas and values of the present color and distort our understanding of the past.
Mystic Places: Nazca Lines - series of three articles discussing what they are, how they were made, and for what purpose.
Nasca Lines - consisting of over 300 images, etched into the surface of the desert pampa sand, made of straight lines, geometric shapes, and pictures of animals and birds.
Nazca - provides an overview of the different stages of their culture based on their pottery and famous geoglyphs.
Nazca Lines, The - presents the several theories about the significance and intention behind the creation of the lines.
Skeptic's Dictionary: Nazca lines - dispelling alien runway "theories".
Survive 2012: Nazca Lines - offers diagrams and maps of the lines and figures etched into the plain between the Inca and Nazca valleys.
Minnesota State University - E-museum - a general view of the pre-Columbian Andean cultures.
http://www.humanrevelations.com/sfinx.htm G.J. de Jong demonstrates that the Incas penetrated to the Four Corners of the Earth, brought this knowledge back to their country of origin, the area now covered by Peru and Bolivia, and that they set up their temples on the Path of the Sun.
About 20 theories are current amongst scientists and pseudo-scientists but even today nobody is able to provide a comprehensive and scientifically provable answer to this question. One of the major theories deals with astronomical phenomena. In order to prove this astronomical theory a special research project was started by the department of surveying and cartography of the University of Applied Sciences in Dresden, Germany.
The initial steps were the development of a special datamodel and the creation of a regional Digital Terrain Model (DTM). In September 2000 the photogrammetric data processing of the Nasca block (about 150 images) was started. This includes aerial triangulation, local DTM- generation, the extraction of lines and geoglyphs and the generation of ortho-images. Parallel to that the development of an astronomical approach was started.
The presentation includes theoretical as well as practical aspects. We report about the current stage of the project. Especially, the datamodel and the astronomical concept will be explained in detail. In the practical part we will demonstrate some analyses and special animations using our GIS.
Remarks: A quite similar article was presented at the International Workshop on Recreating the Past ~ Visualization and Animation of Cultural Heritage ~ in Ayutthaya, Thailand, 26 February- 1 March 2001. This workshop was organized by ISPRS Com. V.
The geoglyphs of Nasca, Peru are considered one of the world's major mysteries. Despite the fact that many efforts have been made in the past 70 years to record and analyze the geoglyphs no convincing explanation has emerged yet which would explain the purpose of these drawings in the sand beyond any doubt. Many hypotheses have been put forward and each author will find a certain number of lines and figures in support of his/her opinion. The huge number of lines, trapezoids, star centers, biomorphical figures, etc. has up to now defied any comprehensive recording and analysis.
We are currently conducting an ambitious project which aims at the complete 3-D recording of the geoglyphs of the areas of Nasca, Palpa and San Ignacio (a total of about 300 km2) with photogrammetric means. This is done in cooperation with a group of archeologists who will try to relate their excavation results to the geoglyphs in order to get a more complete picture of the overall cultural and social background of the Nasca people (200 B.C. - 600 A.D.).
We are using the latest digital photogrammetric technology for the recording of the geoglyphs and some of the most advanced visualization software. Finally, all data will be integrated on a GIS platform, which will require the efficient management of both vector- and extensive raster image data.
One of the final aims is to make the vector data available to the international community of scientists who show a serious interest in contributing towards the solution of the Nasca mystery. In this process we have produced over 1000 aerial photographs at scales 1:5 000 and 1:10 000 both in color and B/W. In addition we have collected existing, older photographs which can give us an indication of the damage that has been done to the geoglyphs in recent years.
At present the block Palpa has been fully processed and visualization results have been shown to the public on a SGI Onyx2 in an interactive mode at the Nasca exhibition in the Rietberg Museum, Zürich and in the VisDome of ETH Zürich as stereo projection on a large 4x12 m2 screen. We report here about the current stage of the project.
Compare Nazca lines with Area 51desert "drawings"