Larger barges can carry nearly 14,000 tons, the equivalent of 500 truck loads.
The U.S. Army Corps of Engineers recently held an Oregon Coast Jetties Industry Day, gearing up for a series of jetty and breakwater projects expected to keep construction crews working through 2022. The projects include the complete rehabilitation of three jetties at the mouth of the Columbia River; repair of the Tillamook Jetties; the Coos Bay North Jetty; and the Port Orford breakwater.
Jetties help stabilize the bar, that place where the ocean collides with the flat water of the bay, by creating a channel for boats to transit and also by allowing the water to carry sediment out to sea, reducing the need for dredging. The bar is generally considered the most dangerous place for a boat going out to sea.
The jetties on the Columbia River, originally built in 1885, transformed the mouth from a 5-mi. opening to a 2-mi. opening. More than 2,000 ships have been lost at the mouth because of the unpredictable bars.
Jetties are built with tons of massive armor rock on the exterior and smaller rock, of lesser quality on the inside. It's an effort that takes time, planning and many, many millions of dollars. Jetty A, at 0.9 mi., the smallest of the three jetties at the mouth of the Columbia River, cost $20 million; while the 2.5-mi.-long N. Jetty is expected to cost $30 million. Specifications for the S. Jetty, which juts 6.3 mi. out to the sea are still being designed.
Armor stones weigh anywhere from four to 38 tons each, Otto said. "We require the contractors to individually place these armor stones. There are multiple quarry sources from Washington into California along the Pacific Coast that produce a basalt type of stone that has a good density to it. We don't really use granite because granite is less dense than basalt. Sometimes it has to come from several hundred miles away."
Some quarries use geophysical investigation to help determine how to blast the rock, while others work solely from experience and an understanding of the terrain. Once the stone is available, the contractors generally truck the stone to the port, then use barges to float it to the jetty site. Larger barges can carry nearly 14,000 tons, the equivalent of 500 truck loads.
"There is a tremendous amount of waste material that comes with getting those big stones," Otto said. "Eighty percent of the cost of building a jetty is producing the stone and shipping it. Twenty percent of the cost is placing it at the site. They have some large loaders, like the Cat 990 loader that can lift these larger stones, and Cat 773 haul trucks that they use to haul the stones. If they are delivering by land, they use low-boy semis. That's mostly what the public sees. On some of those stones, the ones up to 30 tons, there is just one stone per truck. The stone sizes will vary. The bigger ones will go where the sea is roughest. Smallest, at root of jetty connected to land."
The armor stones are carefully placed and must have contact at the side, top and bottom of the stone next to it, he said.
"It's a jigsaw puzzle. It doesn't go very fast. When you are trying to get something to last 50 years in those conditions out there you are going to take the time to do it right."
Jetties at the mouth of the Columbia River: Jetty A has been completed, the North Jetty is under construction and the Corps anticipates releasing requests for proposals for the South Jetty rehabilitation project in winter 2018-2019.
The current estimated stone quantity for South Jetty is 360,000 tons. Of this quantity, approximately 30 percent will be high-density stone with a minimum unit weight of 180 lbs/cu.ft. The stone placement period of performance will run five years through October 2024.
Tillamook Jetties: The Corps has contracted out an engineering report to further develop the repair design for the South Jetty and a portion of the North Jetty at the root. The Corps currently anticipates releasing requests for jetty repair sometime between fiscal year 2020 and 2022, dependent on funding availability.
The current planning estimate for stone quantities ranges from 80,000 to 120,000 tons depending on rate of jetty degradation and final design. High-density stone (greater than 175 lbs. per cu. ft.) is expected to be required for at least 1/3 of the stone volume.
Coos Bay North Jetty: The Corps will complete an engineering design report in fiscal year 2018 to further develop the repair design for the North Jetty Head, Jetty Root, and shoreline fill along Log Spiral Bay. The Corps currently anticipates releasing requests for jetty repair sometime between fiscal year 2020 and fiscal year 2022, dependent on project sequencing and funding availability.
The current planning estimate for stone quantities is approximately 100,000 tons depending on rate of jetty degradation and final design. High-density stone (greater than 175 lbs. per cu. ft.) is expected to be required for 10-15 percent of the total stone volume.
Port Orford Jetty: The Corps received funding in fiscal year 2018 to award the construction contract for the breakwater repair. The Corps currently anticipates releasing requests for proposals for the Breakwater repair in first quarter FY19.
The current planning estimate for stone quantities is 25,000 to 30,000 tons of new jetty stone procurement and placement. High-density stone (greater than 175 lbs. per cu. ft.) is expected to be required for at least half of the stone volume.


Enjoy this free Mid-day Movie Matinee! Recommended for ages 13 & up.
Rating: PG-13 Running time: 135 min.
Please register each person for this program online, by phone, or when you visit the Library. Space may be limited.
Children love dogs, and these dogs love to listen to children read! Dogs from K-Pets and their humans (otherwise known as trainers) will visit the Children's Library Tuesday evenings so children can read to them. Children who have signed up will get the first opportunity. (Children ages 4 & up who are able to read or are beginning to learn to read) Very young children must be accompanied by an adult at all times. Please register online for this free program, or call the Library at 717.560.6441.
Join us each month as we learn to make things – some are high-tech and others are traditional! We're reaching out to some new volunteers to add a variety of new maker skills. Details will follow once our schedules are confirmed.
For more information about this valuable 4-week workshop, click on Speechcraft for Teens.
Come to the Children's Area and play the Library's games, or bring your own to share. (Designed for ages 5 & up). Please register each person for this free program online, by phone, or when you visit the Library. Space may be limited.
For teens (grades 6-12) interested in helping the library better serve the needs and interests of local teens. Make sure to register so we have enough snacks!
Registration for this free event is required, and will open BY NOON on FRIDAY, APRIL 19th. Ages 7-17. Adults are welcome to observe.
Join the local Coder Dojo Group! Coder Dojo is an international organization that organizes computer programming clubs for kids. The Lancaster Coder Dojo is run by local professional computer programmers. You may bring your own tech, or borrow a Library laptop to work on during the session. Please let us know if you wish to use library equipment by checking the appropriate box in this registration.
Lancaster Coder Dojo also meets at Lancaster Public Library (125 North Duke Street) on the fourth Tuesday of the month. To attend LPL's sessions, please visit their website to learn how to register for sessions at LPL.
Regardless of your skill level, whether an expert or a novice, if you like to play chess and/or strategy games, you are welcome to attend our Library's monthly Chess & Strategy Games event. Bring your own chess board/strategy game (such as Stratego) or use one of the library's chess boards (Designed for ages 8 & up). Please register each person for this free program online, by phone, or when you visit the Library. Space may be limited.
Registration for this free program is required.
Recipes available on request; notify Library about food allergies.
A dramatization of the 20 July political coup plot by desperate renegade German Army officers against Hitler during World War II.
Rating: PG-13 Running time: 121 min.
Build your own creation out of LEGO bricks, based on the Theme of the Month! Use the Library's LEGOs; DO NOT BRING YOUR OWN, to keep from losing them. Third Tuesdays at 4:30pm. (Ages 7 to 15) Limit: 20; may change if Library receives more LEGO donations.
Join us every Saturday this summer for a fun make-and-take craft! For children ages 5 to 13. This week's craft – Sunray Catcher Bracelets.
Registration for this free event is required, and will open BY NOON on FRIDAY, MAY 17th. Ages 7-17. Adults are welcome to observe.
Join us the second Friday of every month for Fandom Friday! Chat with fellow fans, show off your knowledge with trivia, and complete a fun craft project. For ages 7 and up.
This month we'll be celebrating Marvel Superheroes.
Join us every Saturday this summer for a fun make-and-take craft! For children ages 5 to 13. This week's craft – Straw Rockets.
Enjoy this free Mid-day Movie Matinee!
Clara is sent to a magical world via a key where she meets mice, gingerbread men, and more.
Rating: PG Running time: 99 min.
That Fabulous Franklin is a delightful presentation of the wit and wisdom of this American icon. Two actors recreate important moments in Ben's story. They also bring to life some of the characters that Ben created in his writings, like Poor Richard Saunders and Silence Dogood. There is great fun for audiences of all ages in this sparkling, forty-five minute program. Recommended for children ages 4 to 14.
Join us as we investigate the mysteries of the universe with fun experiments and activities for tweens. Details to follow. For children ages 9 to 13.
Join us every Saturday this summer for a fun make-and-take craft! For children ages 5 to 13. This week's craft – Sun Dials.
Join us every Saturday this summer for a fun make-and-take craft! For children ages 5 to 13. This week's craft – Star Mobiles.
Kilene Knitter, Giant Food Stores Nutritionist is coming to the library for free kids cooking classes! Mini Chef Mondays provides kids with the basic skills needed to create a balanced snack. This month we'll be making tropical salsa. *Major Allergens: None* Registration will open on Friday, June 21st. For teens ages 13 to 16.
Join us every Saturday this summer for a fun make-and-take craft! For children ages 5 to 13. This week's craft – Nebula Jars.
Registration for this free event is required, and will open BY NOON on FRIDAY, JUNE 21st. Ages 7-17. Adults are welcome to observe.
This month we'll be celebrating Star Wars.
Join us every Saturday this summer for a fun make-and-take craft! For children ages 5 to 13. This week's craft – Alien Spaceships.
Welcome to a summer book club just for teens! Snacks will be provided. Once you register, please stop by the Children's Room to pick up a free copy of this month's book to keep! For teens ages 14-19.
This month's pick is: Illuminae by Amie Kaufman & Jay Kristoff. The planet Kerenza is attacked, and Kady and Ezra find themselves on a space fleet fleeing the enemy, while their ship's artificial intelligence system and a deadly plague may be the end of them all.
Join us every Saturday this summer for a fun make-and-take craft! For children ages 5 to 13. This week's craft – Marbled Planets.
Welcome to a summer book club just for tweens! Snacks will be provided. Once you register, please stop by the Children's Room to pick up a free copy of this month's book to keep! For kids ages 9-13.
This month's pick is: Keeper of the Lost Cities by Shannon Messenger. Sophie learns that the remarkable abilities that have always caused her to stand out identify her as an elf, and after being brought to Eternalia to hone her skills, discovers that she has secrets buried in her memory for which some would kill.
Join us every Saturday this summer for a fun make-and-take craft! For children ages 5 to 13. This week's craft – Gravity Art.
Join us for a celebration of "The Boy Who Lived"! Details to come. Recommended for ages 8 and up.
Join us every Saturday this summer for a fun make-and-take craft! For children ages 5 to 13. This week's craft – Planet Suncatchers.
This month we'll be celebrating DC Superheroes.
This month's pick is: The Thing About Jellyfish by Ali Benjamin. Suzy Swanson wades through her intense grief over the loss of her best friend by investigating the rare jellyfish she is convinced was responsible for her friend's death.
Registration for this free event is required, and will open BY NOON on FRIDAY, JULY 19th. Ages 7-17. Adults are welcome to observe.
This month's pick is: Steeplejack by A.J. Hartley. A teenage woman steeplejack is asked to investigate the murder of her apprentice amongst a community of varied cultures and political stances.


text:
Patek Philippe SA
Chemin du Pont-du-Centenaire 141
CH 1211 Genève 2
www.patek.com
Patek Philippe was established in 1839 and has been in the hands of the Stern family since 1932. Thierry Stern is the current CEO and his father Philippe is honorary president. For over 170 years, the brand has demonstrated a knack for producing instant classics that combine a traditional design with pioneering technology. Nowadays, Patek Philippe watches regularly set new records for the highest prices paid at auction.
Calatrava and Nautilus are the emblematic collections produced at the Patek Philippe workshops in Geneva, with the Twenty-4 collection dedicated solely to ladies.
Calatrava Officier
> Patek Philippe – search all reports since 2000
Patek Philippe highlights
All about Antiquorum's upcoming July sales
Antiquorum announces its establishment in Monaco and an important Contemporary & Vintage Timepieces auction at Hôtel de Paris on July, 16th. Highlights (...)
Patek Philippe Calatrava Weekly Calendar
Patek Philippe is presenting a new complication in its calendar watch segment: the weekly calendar is a mechanism that in addition to the day of the week (...)
The billionaire watch brands
Seven Swiss brands exceed one billion in annual revenues. US investment bank Morgan Stanley, in collaboration with Swiss consultant agency LuxeConsult, (...)
Patek Philippe Calatrava Weekly Calendar ref. 5212a-001a
THE DEVIL IS IN THE DETAIL
A completely new Patek Philippe has joined the rich range of "small complications" in the Geneva watchmaker's repertoire: a weekly calendar. It's a first for (...)
Patek Philippe 5520P
Patek Philippe unveils a new self-winding grand complication that combines its exclusive dual time zone "Travel Time" system with a 24-hour alarm mechanism, (...)
Patek Philippe 5235/50R
Patek Philippe revisits the unique style of its Annual Calendar Regulator by presenting it in rose gold, paired with a two-tone dial in graphite and (...)
Patek Philippe 5172G
Patek Philippe has redesigned its chronograph of classic architecture for men (column wheel, horizontal clutch and manual winding), endowing it with a new (...)
Instagram, "long time" and "short time"
The paradox of the supposedly forward-looking new networks is that they constantly plunge us into a distant and magnified past. The internet has given us (...)
The generations of Patek Philippe
AN EXCLUSIVE INTERVIEW WITH PHILIPPE STERN
You could say that the concept of heritage is baked into Patek Philippe. The company's famous slogan, "You never actually own a Patek Philippe. You merely (...)
Watchprint.com, the specialized bookstore that has a wide portfolio of publications about watches and the industry, regularly shares its top picks. This (...)

redpajama_set_name: RedPajamaCommonCrawl


Utilitarianism is purely forward-looking, and as such might be criticized for failing to consider historical claims to entitlement or desert. But such criticisms miss the point. Utilitarianism is best understood as a theory of default treatment, or how to show people equal concern when none have special claims over the others. It thus only applies when there are no desert claims in the picture. The real objection is thus not to utilitarianism itself, but merely its scope. If there are legitimate desert claims which justice must take note of, then this would establish that utilitarianism is not a comprehensive theory of justice, and requires supplementation by an independent theory of just deserts.
One possible response would be to take this on board, and develop a broader theory of justice within which utilitarianism is but one part. Perhaps the first priority would be to compensate those with special claims, and only afterwards engage the utilitarian principle in distributing the leftovers. A pluralistic theory of this sort seems a viable option.
But many utilitarians would be unsatisfied with this response. They would rather deny that legitimate claims can be made prior to utility calculations. Justice is whatever the utility calculations yield. Only by this method is each person counted for one, and nobody for more than one. The utilitarian thus denies that anyone may legitimately claim to be 'more deserving' than any other.
Desert skepticism can be motivated by considerations of ultimate responsibility. Nobody gets to choose their natural talents, so it would seem odd for justice to require that they get rewarded for their luck in the 'natural lottery'. And the inclination to expend effort is likewise a natural character trait which has its origin outside of our control. Even granting some element of free will, we're led to Roemer's account, whereby a natural slacker who puts in some slight effort is held to be more deserving of reward than someone who is naturally hard-working.
On this view, a state of affairs where the good are rewarded and the evil punished might be of greater (transeunt) value than another which merely contains more value but in a less just distribution. However, this approach makes justice prior to - and part of - utility calculations, and thus cannot be used to provide a utilitarian theory of justice, on pain of circularity.
"utilitarianism is not a comprehensive theory of justice, and requires supplementation"
I see no reason for conflict or suplplementation. When faced with any problem there is the utility optimizing solution and "the other solution" any attempt to follow the other solution is a move away from utility optimization.
there is no need to fear that this will create some odd situation where people who deserve things never get them and then there is no incentive to be good because the reason it is disturbing is that it doesnt maximise utility and thus shouldnt be chosen.
Obviously utilitarianism cant be all about maximising utility for some limited set for example if you used the tiniest system available it would just be libiterianism. It must be (in its ideal form) maximising utility for everyone (the whole system over all time) and as such is an all encompassing philosophy that results in a world that almost certainly is reasonably fair (because in general fairness works).
> Justice is whatever the utility calculations yield.
I think this confuses concepts - a honest utilitarian should be able to admit that utilitarianism doesn't result in "justice" as most would see it.
You sort of get close to the point with Rescher..
But my point is how can you posibly even contemplate not considering that sort of logic? without some use of the past you cant even tell your actions will have an effect so you can't even begin utility calculations. If you use the past to determine that your actions have effects how can you jsutify not using it to determine how people will act and what they will do if you benefit them etc?


The New York Rangers are making a big playoff push, but they'll have to figure out a way to beat their archrival if they hope to keep it going.
The Rangers will be trying to match their longest winning streak of the season on Tuesday when they open a home-and-home series with the New York Islanders, who will be without starting goalie Rick DiPietro.
The Rangers (34-24-8) won their fourth straight on Sunday, beating Philadelphia 5-4 in a shootout. The Rangers, who are tied with Boston for seventh place in the Eastern Conference, are 7-0-2 over their last nine games.
"Our team was really excited to play this game today," coach Tom Renney told the Rangers' official Web site. "Every guy was on the beam, and we found a way to get the win."
The Rangers won five in a row Nov. 8-17, but matching that streak likely won't be easy. They are just 4-7-1 against the Islanders (31-29-7) since the start of last season, including 1-3-0 in 2007-08 as DiPietro has been in net for each of those games.
DiPietro, though, won't play Tuesday because he has been away from the team following his grandmother's death.
"Ricky won't be there tonight," coach Ted Nolan said Tuesday after the Islanders' pregame skate at Madison Square Garden. "It's just an unfortunate thing happening with his family, so he is going to take care of that first."
Wade Dubielewicz will get the start, hoping to help the Islanders continue their dominance over the Rangers.
"I don't know what it is," Nolan told his team's official Web site. "Maybe against the Rangers we've gotten the breaks at the right time.
"This game is about work and creating opportunities. And it's about luck. I believe the harder you work the luckier you get, so we have to continue to work and hopefully we'll get some lucky breaks."
The Rangers did win the most recent meeting, 4-2 at MSG on Nov. 29. The teams square off again on Thursday in Long Island.
"We talk about emotion," Nolan said. "It's always there for the Rangers-Islanders games. You could play them on a Sunday afternoon in mid-June and the excitement would be there.
"It's a big week for us. We have the Rangers back-to-back and then Philly on Saturday, but we can't focus on too much more than one game."
The Islanders have dropped four of five to fall five points out of a playoff spot. They lost 1-0 on Sunday to Florida despite taking 53 shots, including a franchise-high 29 in the second period.
The Islanders, who were coming off a 4-1 loss to Philadelphia, rank last in the Eastern Conference with 161 goals. However, they aren't far behind the Rangers, who have 170.
"I think the most frustrating thing is letting four points slip away this weekend," Islanders center Mike Comrie said. "In similar games, we get a lot of shots, but I think we make the goalies look better than they are. We've got to get quality shots and get traffic in front of the net. Everybody's got to step up."
Despite their lackluster offensive numbers this season, the Rangers have scored at least four goals in each of their last five games. Fredrik Sjostrom and Christian Backman, acquired in separate trade deadline deals last Tuesday, both scored their first goals with the Rangers on Sunday, and Brendan Shanahan and Nigel Dawes scored in the shootout.
"Obviously when you come to a new team, you want to help in any way that you can," Sjostrom said. "This is a great team, a classy organization, and I am just so happy to be here."
Steve Valiquette stopped 17 of 18 shots after replacing starting goalie Henrik Lundqvist, who had gone 5-0-1 with a 1.97 goals-against average in his previous six games.


Inspired by Japanese pattern-making, this cutting edge yoga top uses the stretch of our silky lightweight fabric to create pretty ruffles. Turn heads when you team this cute number with a pair of our power leggings.
RUFFLE YOGA TOP has a rating of 4.0 stars based on 1 reviews.


And make your momma proud.
Jodi is the interesting mix of a well-traveled Air Force kid with strong Midwestern roots.
Having art in her genes, she won her first poster contest in third grade. Soon her love of art (and unknowingly design) was matched only by her growing awareness of — and loyalty to — certain brands. Barbie, Jif, Coke, Apple, Michael Jackson (despite the fact he did a Pepsi commercial). Looking back on it, Jodi realized those brands made home feel like home for her, whether she was in Choctaw, OK or Kaiserslautern, West Germany.
Jodi's spent her career doing just that—using the power of smart design to help companies connect with their customers. In doing so, her work has been recognized nationally by the top industry organizations, including HOW, PRINT, AIGA, as well as featured in various books on graphic design.
Jodi lives in the Minneapolis suburbs with her husband and two boys. When she's not busy building brands, you can find her taking fun action shots at her kids' sporting events and catching the occasional episode of Real Housewives.
612.770.5367 | jodi@eckesdesign.com | ©2018 ECKES design. All rights reserved.


Look no further than Sharkey's Floral and Greenhouses for thank you gifts! We have all types of thank you flowers to choose from; modern arrangement, roses, or even a plant. Sharkey's Floral and Greenhouses can create and deliver your bouquet to Crivitz, WI or nationwide!


text:
Q: Progressive Enhancement vs. Single Page Apps I just got back from a conference in Boston called An Event Apart.
A really popular theme amongst the speakers was the idea of progressive enhancement - a site's content should go in the HTML, and JavaScript should only be used to enhance behavior.
The arguments that the speakers gave for progressive enhancement were very compelling. Not only is it a solid pattern for supporting older browsers, and devices on a network with low bandwidth, but HTML fails much more gracefully than JavaScript (i.e. markup that is not supported is just ignored, while if a browser throws an exception while executing your script - you are hosed).
Jeremy Keith gave a particularly insightful talk about this.
But what about single page web apps like Backbone and Angular? The whole design behind these frameworks seems to push the developer toward moving content out of the HTML, and into something like a JSON API.
I can not seem to gel these two design patterns: progressive enhancement vs. single page web apps. Are there instances when one is better than the other? Or are they not even antagonistic technologies, and I am missing something here with my mental model?

A: SPA is most beneficial if you are creating an application that does not fit the classical request/response pages model. There are a recent trend where regular websites are written as a SPA even when they fit just fine into the request/response cycle of the web, IMHO what they are doing are foolish endeavours. What the likes of these websites are doing is poorly reimplementing a web browser with lots more bugs and less features.
The idea of progressive enhancement and SPA is not mutually exclusive for these foolish single-page appli-websites. You simply need the javascript to do some content negotiation (i.e. Accept header) so they receive JSON resource that the Javascript on the SPA can render themselves instead of a pre-rendered HTML pages. The issues with this kind of website SPAs is obvious, you have to have duplicate implementation of the website's rendering on both the server and on the client.
For true web applications, i.e. one that truly have to be an SPA as they don't fit into the standard request/response pattern; progressive enhancement is much more difficult for true applications because they are really just using a browser as a technology platform for writing an application portably. Scripting language is an essential part of a true web application, not just one that can be optionally bolted for enhancements. Some progressive enhancements techniques still can work though (e.g. replacing flash video/audio with <video>/<audio> tag) but true web applications will require javascript as a baseline.

A: It seems to me that single-page apps draw a line in the sand of progressive enhancement. Where before we might try to work around the fact that implementations and features vary between browsers going back for decades, SPAs assume that there's a certain baseline that we can reasonably agree most visitors of a given site will meet. I don't think the two are at odds. You can still continue to progressively enhance after the SPA starts, like starting with a <video> tag, then layering your own feature-rich player on top of that.
Then there are visitors with scripting disabled, but they know what they're getting into. I don't see why developers should bend over backwards for those visitors, aside from a "You need scripting for this site" note. If we allow that, why not also cater to visitors with CSS disabled? How about images disabled? These are core web technologies. They should not expect to have a fully functional web experience when they go picking and choosing pieces.
To ensure I don't get away without a car analogy, I should not expect my car to work if I decide I don't like certain features. I could tell civil engineers, "I disabled my headlights, so please make sure to install street lights every 125 feet everywhere I might visit." Without headlights, my car would work a lot of the time, but some places I'll be unable to visit.

A: I believe single page web-apps and progressive enhancement are almost antagonists. If the html is computed on the client from data retrieved from a json api, it can hardly degrade gracefully. It can however offer a richer and more pleasant user interface.
You can set up a bot which will crawl you application and save a static version. This technique can be used to serve HTML to browsers without javascript (used by blind people or search engine bots). This is an investement, so it really comes down to your requirements.
Are you making an HR management web-app for a specific compagny? You don't need graceful degradation, and a SPA may be more simple to build. The company may enforce the usage of a specific browser, so you may have less tests to do.
Are you making a public website for an association with accessibility requirements and search engine visibility needs? Then consider building the HTML on your server. Or making an SPA with a static version, depending on your budget.

A: I think it depends how far you want to go with Progressive Enhancement - it's a design paradigm rather than a hard-and-fast set of rules.
If you're using a SPA framework, I think allowing Javascript is a given. However the Javascript you write to enhance your page must be smart enough to deal with whatever HTML the framework can create.
You can also benefit from other PE techniques such as taking advantage of the latest CSS features for a recent browser release, or HTML5 to HTML4 degradation.

A: Progressive enhancement and a Single Page App can co-exist. The two most compelling arguments I've heard for building apps in this way are:

*

*Fault tolerance in situations where the HTML file downloads in full but referenced scripts fail to download completely thanks to network connectivity that drops in and out (possible on mobile networks)

*Potential for improved perceived performance on initial page load (by reducing Start Render times)

Server-side rendering (this is for users, not just SEO reasons) and cutting-the-mustard are two techniques that can help build progressively enhanced Single Page Apps with modern client-side JS frameworks.
Some client-side JS frameworks are easier to get working with server-side rendering than others (beware some server-side rendering solutions and framework combinations do not produce working SPAs as the server-rendered page is only intended for search engine consumption, not end-users).
At time of writing, React.js and Ember (with the upcoming FastBoot) are the two I'm aware of that have or are trying to make server-side rendering a first class citizen; the server-side rendered page is still a working SPA when it's parsed on the client browser.

A: I'm of the view that the reduced page load is probably quite a good for servers, and the network.   I'd love to see more SPAs used correctly.
I'm off the view though that this requires two things:
1) setting up all of your links as standard request/response links on initial load, let your SPA framework/library then replace these with an updated (interactive) version once the browser loads and the JS engine identifies that SPA support is available.  This truly is progresive enhancement; the JS is loaded on top of the existing html website, and this is better for search engines, assistive technologies, and older browsers.
and
2) The server needs to be responsive to routes like /foo/bar/json and foo/bar  by serving the correct format;   realistically if you're wrapping everything in layouts and partials to get the first page, you should be able to get everything via layouts and partials for the 2nd and subsequent pages as well.
There's a fair bit of work here; admittedly, but if you've got control over the full stack it does balance the two technologies.

redpajama_set_name: RedPajamaStackExchange


text:
//
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
//

#include "common.h"
#include "gcinfodecoder.h"

#ifdef VERIFY_GCINFO
#ifdef USE_GC_INFO_DECODER

#include "dbggcinfodecoder.h"

#ifndef GCINFODECODER_CONTRACT
#define GCINFODECODER_CONTRACT(contract) contract
#endif // !GCINFODECODER_CONTRACT

#ifndef GET_CALLER_SP
#define GET_CALLER_SP(pREGDISPLAY) EECodeManager::GetCallerSp(pREGDISPLAY)
#endif // !GET_CALLER_SP

#ifndef VALIDATE_OBJECTREF
#ifdef DACCESS_COMPILE
#define VALIDATE_OBJECTREF(objref, fDeep)
#else // DACCESS_COMPILE
#define VALIDATE_OBJECTREF(objref, fDeep) OBJECTREFToObject(objref)->Validate(fDeep)
#endif // DACCESS_COMPILE
#endif // !VALIDATE_OBJECTREF

#ifndef VALIDATE_ROOT
#define VALIDATE_ROOT(isInterior, hCallBack, pObjRef)                                           \
    do {                                                                                \
        /* Only call Object::Validate() with bDeep == TRUE if we are in the promote phase.  */  \
        /* We should call Validate() with bDeep == FALSE if we are in the relocation phase. */  \
                                                                                \
        GCCONTEXT* pGCCtx = (GCCONTEXT*)(hCallBack);                                            \
                                                                                \
        if (!(isInterior) && !(m_Flags & DECODE_NO_VALIDATION))                                 \
            VALIDATE_OBJECTREF(*(pObjRef), pGCCtx->sc->promotion == TRUE);                      \
    } while (0)
#endif // !VALIDATE_ROOT

namespace DbgGcInfo {

//static
bool GcInfoDecoder::SetIsInterruptibleCB (UINT32 startOffset, UINT32 stopOffset, LPVOID hCallback)
{
    GcInfoDecoder *pThis = (GcInfoDecoder*)hCallback;

    bool fStop = pThis->m_InstructionOffset >= startOffset && pThis->m_InstructionOffset < stopOffset;

    if (fStop)
        pThis->m_IsInterruptible = true;

    return fStop;
}

GcInfoDecoder::GcInfoDecoder(
            const BYTE* gcInfoAddr,
            GcInfoDecoderFlags flags,
            UINT32 breakOffset
            )
            : m_Reader( gcInfoAddr )
            , m_InstructionOffset( breakOffset )
            , m_IsInterruptible( false )
            , m_pLiveRegisters( NULL )
            , m_pLiveStackSlots( NULL )
            , m_NumLiveRegisters(0)
            , m_NumLiveStackSlots(0)
#ifdef _DEBUG
            , m_Flags( flags )
#endif
{
#ifdef _TARGET_ARM_
    _ASSERTE(!"JIT32 is not generating GCInfo in the correct format yet!");
#endif

    _ASSERTE( (flags & (DECODE_INTERRUPTIBILITY | DECODE_GC_LIFETIMES)) || (0 == breakOffset) );

    // The current implementation doesn't support the two flags together
    _ASSERTE(
        ((flags & (DECODE_INTERRUPTIBILITY | DECODE_GC_LIFETIMES)) != (DECODE_INTERRUPTIBILITY | DECODE_GC_LIFETIMES))
            );

    //--------------------------------------------
    // Pre-decode information
    //--------------------------------------------

    m_IsVarArg = (m_Reader.Read(1)) ? true : false;

    size_t hasSecurityObject = m_Reader.Read(1);
    if(hasSecurityObject)
        m_SecurityObjectStackSlot = (INT32) DENORMALIZE_STACK_SLOT(m_Reader.DecodeVarLengthSigned(SECURITY_OBJECT_STACK_SLOT_ENCBASE));
    else
        m_SecurityObjectStackSlot = NO_SECURITY_OBJECT;

    size_t hasPSPSym = m_Reader.Read(1);
    if(hasPSPSym)
    {
        m_PSPSymStackSlot              = (INT32) DENORMALIZE_STACK_SLOT(m_Reader.DecodeVarLengthSigned(PSP_SYM_STACK_SLOT_ENCBASE));
    }
    else
    {
        m_PSPSymStackSlot              = NO_PSP_SYM;
    }

    size_t hasGenericsInstContext = m_Reader.Read(1);
    if(hasGenericsInstContext)
    {
        m_GenericsInstContextStackSlot = (INT32) DENORMALIZE_STACK_SLOT(m_Reader.DecodeVarLengthSigned(GENERICS_INST_CONTEXT_STACK_SLOT_ENCBASE));
    }
    else
    {
        m_GenericsInstContextStackSlot = NO_GENERICS_INST_CONTEXT;
    }

    m_CodeLength = (UINT32) DENORMALIZE_CODE_LENGTH(m_Reader.DecodeVarLengthUnsigned(CODE_LENGTH_ENCBASE));

    size_t hasStackBaseRegister = m_Reader.Read(1);
    if(hasStackBaseRegister)
        m_StackBaseRegister = (UINT32) DENORMALIZE_STACK_BASE_REGISTER(m_Reader.DecodeVarLengthUnsigned(STACK_BASE_REGISTER_ENCBASE));
    else
        m_StackBaseRegister = NO_STACK_BASE_REGISTER;

    size_t hasSizeOfEditAndContinuePreservedArea = m_Reader.Read(1);
    if(hasSizeOfEditAndContinuePreservedArea)
        m_SizeOfEditAndContinuePreservedArea = (UINT32) m_Reader.DecodeVarLengthUnsigned(SIZE_OF_EDIT_AND_CONTINUE_PRESERVED_AREA_ENCBASE);
    else
        m_SizeOfEditAndContinuePreservedArea = NO_SIZE_OF_EDIT_AND_CONTINUE_PRESERVED_AREA;

#ifdef FIXED_STACK_PARAMETER_SCRATCH_AREA
    m_SizeOfStackOutgoingAndScratchArea = (UINT32)DENORMALIZE_SIZE_OF_STACK_AREA(m_Reader.DecodeVarLengthUnsigned(SIZE_OF_STACK_AREA_ENCBASE));
#endif // FIXED_STACK_PARAMETER_SCRATCH_AREA

    m_NumInterruptibleRanges = (UINT32) DENORMALIZE_NUM_INTERRUPTIBLE_RANGES(m_Reader.DecodeVarLengthUnsigned(NUM_INTERRUPTIBLE_RANGES_ENCBASE));

    if( flags & DECODE_INTERRUPTIBILITY )
    {
        EnumerateInterruptibleRanges(&SetIsInterruptibleCB, this);
    }
}

bool GcInfoDecoder::IsInterruptible()
{
    _ASSERTE( m_Flags & DECODE_INTERRUPTIBILITY );
    return m_IsInterruptible;
}

void GcInfoDecoder::EnumerateInterruptibleRanges (
            EnumerateInterruptibleRangesCallback *pCallback,
            LPVOID                                hCallback)
{
#if 0
#ifdef PARTIALLY_INTERRUPTIBLE_GC_SUPPORTED

    //------------------------------------------------------------------------------
    // Try partially interruptible first
    //------------------------------------------------------------------------------

    UINT32 numCallSites = (UINT32)m_Reader.Read( sizeof( numCallSites ) * 8 );
    UINT32 callSiteIdx = 0;

    if( numCallSites > 0 )
    {
        UINT32 numSlotMappings = (UINT32)m_Reader.Read( sizeof( numSlotMappings ) * 8 );

        // Align the reader to the next byte to continue decoding
        m_Reader.Skip( ( 8 - ( m_Reader.GetCurrentPos() % 8 ) ) % 8 );

        for( callSiteIdx=0; callSiteIdx<numCallSites; callSiteIdx++ )
        {
            UINT32 instructionOffset = (UINT32)m_Reader.Read( 32 );

            bool fStop = pCallback(instructionOffset, instructionOffset+1, hCallback);
            if (fStop)
                return;

            m_Reader.Skip( numSlotMappings );
        }

        // Call site not found. Skip the slot mapping table in preparation for reading the fully-interruptible information
        m_Reader.Skip( numSlotMappings * sizeof( GcSlotDesc ) * 8 );
    }

#endif // PARTIALLY_INTERRUPTIBLE_GC_SUPPORTED
#endif

    // If no info is found for the call site, we default to fully-interruptbile
    LOG((LF_GCROOTS, LL_INFO1000000, "No GC info found for call site at offset %x. Defaulting to fully-interruptible information.\n", (int) m_InstructionOffset));

    // Align the reader to the next byte to continue decoding
    m_Reader.Skip( ( 8 - ( m_Reader.GetCurrentPos() % 8 ) ) % 8 );

    UINT32 lastInterruptibleRangeStopOffsetNormalized = 0;

    for(UINT32 i=0; i<m_NumInterruptibleRanges; i++)
    {
        UINT32 normStartDelta = (UINT32) m_Reader.DecodeVarLengthUnsigned( INTERRUPTIBLE_RANGE_DELTA_ENCBASE );
        UINT32 normStopDelta = (UINT32) m_Reader.DecodeVarLengthUnsigned( INTERRUPTIBLE_RANGE_DELTA_ENCBASE ) + 1;

        UINT32 rangeStartOffsetNormalized = lastInterruptibleRangeStopOffsetNormalized + normStartDelta;
        UINT32 rangeStopOffsetNormalized = rangeStartOffsetNormalized + normStopDelta;

        UINT32 rangeStartOffset = DENORMALIZE_CODE_OFFSET(rangeStartOffsetNormalized);
        UINT32 rangeStopOffset = DENORMALIZE_CODE_OFFSET(rangeStopOffsetNormalized);

        bool fStop = pCallback(rangeStartOffset, rangeStopOffset, hCallback);
        if (fStop)
            return;

        lastInterruptibleRangeStopOffsetNormalized = rangeStopOffsetNormalized;
    }
}

INT32 GcInfoDecoder::GetSecurityObjectStackSlot()
{
    _ASSERTE( m_Flags & DECODE_SECURITY_OBJECT );
    return m_SecurityObjectStackSlot;
}

INT32 GcInfoDecoder::GetGenericsInstContextStackSlot()
{
    _ASSERTE( m_Flags & DECODE_GENERICS_INST_CONTEXT );
    return m_GenericsInstContextStackSlot;
}

INT32 GcInfoDecoder::GetPSPSymStackSlot()
{
    _ASSERTE( m_Flags & DECODE_PSP_SYM);
    return m_PSPSymStackSlot;
}

bool GcInfoDecoder::GetIsVarArg()
{
    _ASSERTE( m_Flags & DECODE_VARARG );
    return m_IsVarArg;
}

UINT32 GcInfoDecoder::GetCodeLength()
{
    _ASSERTE( m_Flags & DECODE_CODE_LENGTH );
    return m_CodeLength;
}

UINT32  GcInfoDecoder::GetStackBaseRegister()
{
    return m_StackBaseRegister;
}

UINT32  GcInfoDecoder::GetSizeOfEditAndContinuePreservedArea()
{
    _ASSERTE( m_Flags & DECODE_EDIT_AND_CONTINUE );
    return m_SizeOfEditAndContinuePreservedArea;
}

#ifdef FIXED_STACK_PARAMETER_SCRATCH_AREA

UINT32  GcInfoDecoder::GetSizeOfStackParameterArea()
{
    return m_SizeOfStackOutgoingAndScratchArea;
}

#endif // FIXED_STACK_PARAMETER_SCRATCH_AREA

bool GcInfoDecoder::EnumerateLiveSlots(
                PREGDISPLAY         pRD,
                bool                reportScratchSlots,
                unsigned            flags,
                GCEnumCallback      pCallBack,
                LPVOID              hCallBack
                )
{
    _ASSERTE( m_Flags & DECODE_GC_LIFETIMES );

#if 0
#ifdef PARTIALLY_INTERRUPTIBLE_GC_SUPPORTED

    //------------------------------------------------------------------------------
    // Try partially interruptible first
    //------------------------------------------------------------------------------

    UINT32 numCallSites = (UINT32)m_Reader.Read( sizeof( numCallSites ) * 8 );
    UINT32 callSiteIdx = 0;

    if( numCallSites > 0 )
    {
        UINT32 numSlotMappings = (UINT32)m_Reader.Read( sizeof( numSlotMappings ) * 8 );

        // Align the reader to the next byte to continue decoding
        m_Reader.Skip( ( 8 - ( m_Reader.GetCurrentPos() % 8 ) ) % 8 );

        for( callSiteIdx=0; callSiteIdx<numCallSites; callSiteIdx++ )
        {
            UINT32 instructionOffset = (UINT32)m_Reader.Read( 32 );
            if( instructionOffset == m_InstructionOffset )
            {
                m_IsInterruptible = true;

                BYTE* callSiteLiveSet = (BYTE*) _alloca( ( numSlotMappings + 7 ) / 8 );

                UINT32 i;
                for( i=0; i<numSlotMappings/8; i++ )
                    callSiteLiveSet[ i ] = (BYTE)m_Reader.Read( 8 );

                callSiteLiveSet[ i ] = (BYTE)m_Reader.Read( numSlotMappings % 8 );

                m_Reader.Skip( ( numCallSites - callSiteIdx - 1 ) * ( 32 + numSlotMappings ) );

                //---------------------------------------------------------------------------
                // Read slot mappings
                //---------------------------------------------------------------------------

                GcSlotDesc* slotMappings = (GcSlotDesc*) _alloca( numSlotMappings * sizeof( GcSlotDesc ) );
                // Assert that we can read a GcSlotDesc with a single call to m_Reader.Read()
                _ASSERTE( sizeof( GcSlotDesc ) <= sizeof ( size_t ) );
                for( UINT32 i=0; i<numSlotMappings; i++ )
                {
                    size_t data = m_Reader.Read( sizeof( GcSlotDesc ) * 8 );
                    slotMappings[ i ] = *( (GcSlotDesc*) &data );
                }

                //---------------------------------------------------------------------------
                // Report live slots
                //---------------------------------------------------------------------------

                for( UINT32 i=0; i<numSlotMappings; i++ )
                {
                    BYTE isLive = callSiteLiveSet[ i / 8 ] & ( 1 << ( i % 8 ) );
                    if( isLive )
                    {
                        GcSlotDesc slotDesc = slotMappings[ i ];
                        if( slotDesc.IsRegister )
                        {
                            if( reportScratchSlots || !IsScratchRegister( slotDesc.Slot.RegisterNumber, pRD ) )
                            {
                                ReportRegisterToGC(
                                                slotDesc.Slot.RegisterNumber,
                                                slotDesc.IsInterior,
                                                slotDesc.IsPinned,
                                                pRD,
                                                flags,
                                                pCallBack,
                                                hCallBack
                                                );
                            }
                            else
                            {
                                LOG((LF_GCROOTS, LL_INFO1000, "\"Live\" scratch register " FMT_REG " not reported\n", slotDesc.Slot.RegisterNumber));
                            }
                        }
                        else
                        {
                            GcStackSlotBase spBase = (GcStackSlotBase) (slotDesc.Slot.SpOffset & 0x3);
                            INT32 realSpOffset = slotDesc.Slot.SpOffset ^ (int) spBase;

                            if( reportScratchSlots || !IsScratchStackSlot(realSpOffset, spBase, pRD) )
                            {
                                ReportStackSlotToGC(
                                                realSpOffset,
                                                spBase,
                                                slotDesc.IsInterior,
                                                slotDesc.IsPinned,
                                                pRD,
                                                flags,
                                                pCallBack,
                                                hCallBack
                                                );
                            }
                            else
                            {
                                LOG((LF_GCROOTS, LL_INFO1000, "\"Live\" scratch stack slot " FMT_STK  " not reported\n", DBG_STK(realSpOffset)));
                            }
                        }
                    }
                }

                return true;
            }

            m_Reader.Skip( numSlotMappings );
        }

        // Call site not found. Skip the slot mapping table in preparation for reading the fully-interruptible information
        m_Reader.Skip( numSlotMappings * sizeof( GcSlotDesc ) * 8 );
    }

#endif // PARTIALLY_INTERRUPTIBLE_GC_SUPPORTED
#endif

    // If no info is found for the call site, we default to fully-interruptbile
    LOG((LF_GCROOTS, LL_INFO1000000, "No GC info found for call site at offset %x. Defaulting to fully-interruptible information.\n", (int) m_InstructionOffset));

    // Align the reader to the next byte to continue decoding
    m_Reader.Skip( ( 8 - ( m_Reader.GetCurrentPos() % 8 ) ) % 8 );

    // Skip interruptibility information
    for(UINT32 i=0; i<m_NumInterruptibleRanges; i++)
    {
        m_Reader.DecodeVarLengthUnsigned( INTERRUPTIBLE_RANGE_DELTA_ENCBASE );
        m_Reader.DecodeVarLengthUnsigned( INTERRUPTIBLE_RANGE_DELTA_ENCBASE );
    }

    //
    // If this is a non-leaf frame and we are executing a call, the unwinder has given us the PC
    //  of the call instruction. We should adjust it to the PC of the instruction after the call in order to
    //  obtain transition information for scratch slots. However, we always assume scratch slots to be
    //  dead for non-leaf frames (except for ResumableFrames), so we don't need to adjust the PC.
    // If this is a non-leaf frame and we are not executing a call (i.e.: a fault occurred in the function),
    //  then it would be incorrect to ajust the PC
    //

    int lifetimeTransitionsCount = 0;

    //--------------------------------------------------------------------
    // Decode registers
    //--------------------------------------------------------------------

    size_t numRegisters = m_Reader.DecodeVarLengthUnsigned(NUM_REGISTERS_ENCBASE);

    {
#ifdef ENABLE_CONTRACTS_IMPL
        CONTRACT_VIOLATION(FaultViolation | FaultNotFatal);
#endif
        m_pLiveRegisters = (GcSlotDesc*) qbSlots1.AllocNoThrow(sizeof(GcSlotDesc)*numRegisters);
    }
    if (m_pLiveRegisters == NULL)
    {
        return false;
    }

    _ASSERTE(m_pLiveRegisters);

    int lastNormRegNum = 0;

    for(int i=0; i<numRegisters; i++)
    {
        if( i==0 )
        {
            lastNormRegNum = (int) m_Reader.DecodeVarLengthUnsigned(REGISTER_ENCBASE);
        }
        else
        {
            int normRegDelta = (int) m_Reader.DecodeVarLengthUnsigned(REGISTER_DELTA_ENCBASE) + 1;
            lastNormRegNum += normRegDelta;
        }
        int regNum = DENORMALIZE_REGISTER(lastNormRegNum);

        BOOL isInterior  = FALSE;
        BOOL isPinned    = FALSE;
        BOOL isLive      = FALSE;

        size_t normCodeOffset = (size_t)(SSIZE_T)(-1);
        BOOL becomesLive = TRUE;
        for(;;)
        {
            size_t normCodeOffsetDelta = m_Reader.DecodeVarLengthUnsigned(NORM_CODE_OFFSET_DELTA_ENCBASE);
            if(normCodeOffsetDelta == 0) // terminator
                break;

            if(normCodeOffset != (size_t)(SSIZE_T)(-1))
                becomesLive = (BOOL) m_Reader.Read(1);

            normCodeOffset += normCodeOffsetDelta;

            UINT32 instructionOffset = DENORMALIZE_CODE_OFFSET((UINT32)normCodeOffset);

            BOOL   becomesInterior = FALSE;
            BOOL   becomesPinned = FALSE;

            if(becomesLive)
            {
                if(m_Reader.Read(1))
                {
                    size_t flagEnc = m_Reader.Read( 2 );
                    becomesInterior = (BOOL)(flagEnc & 0x1);
                    becomesPinned = (BOOL)(flagEnc & 0x2);
                }
            }

            lifetimeTransitionsCount++;

            LOG((LF_GCROOTS, LL_INFO1000000,
                 "Transition " FMT_PIPTR "in " FMT_REG "going %s at offset %04x.\n",
                 DBG_PIN_NAME(becomesPinned), DBG_IPTR_NAME(becomesInterior), regNum,
                 becomesLive ? "live" : "dead",
                 (int) instructionOffset ));

            if( instructionOffset > m_InstructionOffset )
                continue;

            isLive     = becomesLive;
            isInterior = becomesInterior;
            isPinned   = becomesPinned;
        }

        if( isLive )
        {
            if( reportScratchSlots || !IsScratchRegister( regNum, pRD ) )
            {
                m_pLiveRegisters[m_NumLiveRegisters].Slot.RegisterNumber = regNum;
                GcSlotFlags flags = GC_SLOT_BASE;
                if(isInterior)
                    flags = (GcSlotFlags) (flags | GC_SLOT_INTERIOR);
                if(isPinned)
                    flags = (GcSlotFlags) (flags | GC_SLOT_PINNED);

                m_pLiveRegisters[m_NumLiveRegisters].Flags = flags;
                m_NumLiveRegisters++;
            }
            else
            {
                LOG((LF_GCROOTS, LL_INFO1000, "\"Live\" scratch register " FMT_REG " not reported\n", regNum));
            }
        }
    }

    //--------------------------------------------------------------------
    // Decode stack slots
    //--------------------------------------------------------------------

    size_t numStackSlots = m_Reader.DecodeVarLengthUnsigned(NUM_STACK_SLOTS_ENCBASE);
    {
#ifdef ENABLE_CONTRACTS_IMPL
        CONTRACT_VIOLATION(FaultViolation | FaultNotFatal);
#endif
        m_pLiveStackSlots = (GcSlotDesc*) qbSlots2.AllocNoThrow(sizeof(GcSlotDesc)*numStackSlots);
    }
    if (m_pLiveStackSlots == NULL)
    {
        return false;
    }
    _ASSERTE(m_pLiveStackSlots);

    INT32 lastNormStackSlot = 0;

    for(int i=0; i<numStackSlots; i++)
    {
        if( i==0 )
        {
            lastNormStackSlot = (INT32) m_Reader.DecodeVarLengthSigned(STACK_SLOT_ENCBASE);
        }
        else
        {
            INT32 normStackSlotDelta = (INT32) m_Reader.DecodeVarLengthUnsigned(STACK_SLOT_DELTA_ENCBASE);
            lastNormStackSlot += normStackSlotDelta;
        }
        INT32 spOffset = DENORMALIZE_STACK_SLOT(lastNormStackSlot);
        GcStackSlotBase spBase = (GcStackSlotBase) m_Reader.Read(2);

        BOOL isInterior  = FALSE;
        BOOL isPinned    = FALSE;
        BOOL isLive      = FALSE;

        size_t normCodeOffset = (size_t)(SSIZE_T)(-1);
        BOOL becomesLive = TRUE;
        for(;;)
        {
            size_t normCodeOffsetDelta = m_Reader.DecodeVarLengthUnsigned(NORM_CODE_OFFSET_DELTA_ENCBASE);
            if(normCodeOffsetDelta == 0) // terminator
                break;

            if(normCodeOffset != (size_t)(SSIZE_T)(-1))
                becomesLive = (BOOL) m_Reader.Read(1);

            normCodeOffset += normCodeOffsetDelta;

            UINT32 instructionOffset = DENORMALIZE_CODE_OFFSET((UINT32)normCodeOffset);

            BOOL   becomesInterior = FALSE;
            BOOL   becomesPinned = FALSE;

            if(becomesLive)
            {
                if(m_Reader.Read(1))
                {
                    size_t flagEnc = m_Reader.Read( 2 );
                    becomesInterior = (BOOL)(flagEnc & 0x1);
                    becomesPinned = (BOOL)(flagEnc & 0x2);
                }
            }

            lifetimeTransitionsCount++;

            LOG((LF_GCROOTS, LL_INFO1000000,
                 "Transition " FMT_PIPTR "in " FMT_STK "going %s at offset %04x.\n",
                 DBG_PIN_NAME(becomesPinned), DBG_IPTR_NAME(becomesInterior), DBG_STK(spOffset),
                 becomesLive ? "live" : "dead",
                 (int) instructionOffset ));

            if( instructionOffset > m_InstructionOffset )
                continue;

            isLive     = becomesLive;
            isInterior = becomesInterior;
            isPinned   = becomesPinned;
        }

        if( isLive )
        {
            if( reportScratchSlots || !IsScratchStackSlot(spOffset, spBase, pRD) )
            {
                m_pLiveStackSlots[m_NumLiveStackSlots].Slot.Stack.SpOffset = spOffset;
                m_pLiveStackSlots[m_NumLiveStackSlots].Slot.Stack.Base = spBase;
                GcSlotFlags flags = GC_SLOT_BASE;
                if(isInterior)
                    flags = (GcSlotFlags) (flags | GC_SLOT_INTERIOR);
                if(isPinned)
                    flags = (GcSlotFlags) (flags | GC_SLOT_PINNED);

                m_pLiveStackSlots[m_NumLiveStackSlots].Flags = flags;
                m_NumLiveStackSlots++;
            }
            else
            {
                LOG((LF_GCROOTS, LL_INFO1000, "\"Live\" scratch stack slot " FMT_STK  " not reported\n", DBG_STK(spOffset)));
            }
        }
    }

    LOG((LF_GCROOTS, LL_INFO1000000, "Decoded %d lifetime transitions.\n", (int) lifetimeTransitionsCount ));

    return true;
}

void GcInfoDecoder::VerifyLiveRegister(
                            UINT32 regNum,
                            GcSlotFlags flags
                            )
{
    _ASSERTE(m_pLiveRegisters);

    // If this assert fails, the slot being passed was not found to be live in this decoder
    _ASSERTE(m_NumLiveRegisters > 0);

    int pos;
    for(pos = 0; pos < m_NumLiveRegisters; pos++)
    {
        if(regNum == m_pLiveRegisters[pos].Slot.RegisterNumber &&
            flags == m_pLiveRegisters[pos].Flags)
        {
            break;
        }
    }

    // If this assert fails, the slot being passed was not found to be live in this decoder
    _ASSERTE(pos < m_NumLiveRegisters);

    m_pLiveRegisters[pos] = m_pLiveRegisters[--m_NumLiveRegisters];
}

void GcInfoDecoder::VerifyLiveStackSlot(
                            INT32 spOffset,
                            GcStackSlotBase spBase,
                            GcSlotFlags flags
                            )
{
    _ASSERTE(m_pLiveStackSlots);

    // If this assert fails, the slot being passed was not found to be live in this decoder
    _ASSERTE(m_NumLiveStackSlots > 0);

    int pos;
    for(pos = 0; pos < m_NumLiveStackSlots; pos++)
    {
        if(spOffset == m_pLiveStackSlots[pos].Slot.Stack.SpOffset &&
            spBase == m_pLiveStackSlots[pos].Slot.Stack.Base &&
            flags == m_pLiveStackSlots[pos].Flags)
        {
            break;
        }
    }

    // If this assert fails, the slot being passed was not found to be live in this decoder
    _ASSERTE(pos < m_NumLiveStackSlots);

    m_pLiveStackSlots[pos] = m_pLiveStackSlots[--m_NumLiveStackSlots];
}

void GcInfoDecoder::DoFinalVerification()
{
    // If this assert fails, the m_NumLiveRegisters slots remaining in m_pLiveRegisters
    //      were not reported by the calling decoder
    _ASSERTE(m_NumLiveRegisters == 0);

    // If this assert fails, the m_NumLiveStackSlots slots remaining in m_pLiveStackSlots
    //      were not reported by the calling decoder
    _ASSERTE(m_NumLiveStackSlots == 0);

}

//-----------------------------------------------------------------------------
// Platform-specific methods
//-----------------------------------------------------------------------------

#if defined(_TARGET_AMD64_)

OBJECTREF* GcInfoDecoder::GetRegisterSlot(
                        int             regNum,
                        PREGDISPLAY     pRD
                        )
{
    _ASSERTE(regNum >= 0 && regNum <= 16);
    _ASSERTE(regNum != 4);  // rsp

    // The fields of KNONVOLATILE_CONTEXT_POINTERS are in the same order as
    // the processor encoding numbers.

    ULONGLONG **ppRax;
#ifdef _NTAMD64_
    ppRax = &pRD->pCurrentContextPointers->Rax;
#else
    ppRax = &pRD->pCurrentContextPointers->Integer.Register.Rax;
#endif

    return (OBJECTREF*)*(ppRax + regNum);
}

bool GcInfoDecoder::IsScratchRegister(int regNum,  PREGDISPLAY pRD)
{
    _ASSERTE(regNum >= 0 && regNum <= 16);
    _ASSERTE(regNum != 4);  // rsp

    UINT16 PreservedRegMask =
          (1 << 3)  // rbx
        | (1 << 5)  // rbp
        | (1 << 6)  // rsi
        | (1 << 7)  // rdi
        | (1 << 12)  // r12
        | (1 << 13)  // r13
        | (1 << 14)  // r14
        | (1 << 15); // r15

    return !(PreservedRegMask & (1 << regNum));
}

bool GcInfoDecoder::IsScratchStackSlot(INT32 spOffset, GcStackSlotBase spBase, PREGDISPLAY     pRD)
{
#ifdef FIXED_STACK_PARAMETER_SCRATCH_AREA
    _ASSERTE( m_Flags & DECODE_GC_LIFETIMES );

    ULONGLONG pSlot = (ULONGLONG) GetStackSlot(spOffset, spBase, pRD);
    _ASSERTE(pSlot >= pRD->SP);

    return (pSlot < pRD->SP + m_SizeOfStackOutgoingAndScratchArea);
#else
    return FALSE;
#endif
}

void GcInfoDecoder::ReportRegisterToGC(  // AMD64
                                int             regNum,
                                BOOL            isInterior,
                                BOOL            isPinned,
                                PREGDISPLAY     pRD,
                                unsigned        flags,
                                GCEnumCallback  pCallBack,
                                LPVOID          hCallBack)
{
    GCINFODECODER_CONTRACT(CONTRACTL {
        NOTHROW;
        GC_NOTRIGGER;
    } CONTRACTL_END);

    _ASSERTE(regNum >= 0 && regNum <= 16);
    _ASSERTE(regNum != 4);  // rsp

    LOG((LF_GCROOTS, LL_INFO1000, "Reporting " FMT_REG, regNum ));

    OBJECTREF* pObjRef = GetRegisterSlot( regNum, pRD );

#ifdef _DEBUG
    if(IsScratchRegister(regNum, pRD))
    {
        // Scratch registers cannot be reported for non-leaf frames
        _ASSERTE(flags & ActiveStackFrame);
    }

    LOG((LF_GCROOTS, LL_INFO1000, /* Part Two */
         "at" FMT_ADDR "as ", DBG_ADDR(pObjRef) ));

    VALIDATE_ROOT(isInterior, hCallBack, pObjRef);

    LOG((LF_GCROOTS, LL_INFO1000, /* Part Three */
         LOG_PIPTR_OBJECT_CLASS(OBJECTREF_TO_UNCHECKED_OBJECTREF(*pObjRef), isPinned, isInterior)));
#endif //_DEBUG

    DWORD gcFlags = CHECK_APP_DOMAIN;

    if (isInterior)
        gcFlags |= GC_CALL_INTERIOR;

    if (isPinned)
        gcFlags |= GC_CALL_PINNED;

    pCallBack(hCallBack, pObjRef, gcFlags);
}

#else // Unknown platform

OBJECTREF* GcInfoDecoder::GetRegisterSlot(
                        int             regNum,
                        PREGDISPLAY     pRD
                        )
{
    PORTABILITY_ASSERT("GcInfoDecoder::GetRegisterSlot");
    return NULL;
}

bool GcInfoDecoder::IsScratchRegister(int regNum,  PREGDISPLAY pRD)
{
    PORTABILITY_ASSERT("GcInfoDecoder::IsScratchRegister");
    return false;
}

bool GcInfoDecoder::IsScratchStackSlot(INT32 spOffset, GcStackSlotBase spBase, PREGDISPLAY     pRD)
{
    _ASSERTE( !"NYI" );
    return false;
}

void GcInfoDecoder::ReportRegisterToGC(
                                int             regNum,
                                BOOL            isInterior,
                                BOOL            isPinned,
                                PREGDISPLAY     pRD,
                                unsigned        flags,
                                GCEnumCallback  pCallBack,
                                LPVOID          hCallBack)
{
    _ASSERTE( !"NYI" );
}

#endif // Unknown platform

OBJECTREF* GcInfoDecoder::GetStackSlot(
                        INT32           spOffset,
                        GcStackSlotBase spBase,
                        PREGDISPLAY     pRD
                        )
{
    OBJECTREF* pObjRef;

    if( GC_SP_REL == spBase )
    {
        pObjRef = (OBJECTREF*) ((SIZE_T)GetRegdisplaySP(pRD) + spOffset);
    }
    else if( GC_CALLER_SP_REL == spBase )
    {
        pObjRef = (OBJECTREF*) (GET_CALLER_SP(pRD) + spOffset);
    }
    else
    {
        _ASSERTE( GC_FRAMEREG_REL == spBase );
        _ASSERTE( NO_STACK_BASE_REGISTER != m_StackBaseRegister );

        pObjRef = (OBJECTREF*)((*((INT64*)(GetRegisterSlot( m_StackBaseRegister, pRD )))) + spOffset);
    }

    return pObjRef;
}

void GcInfoDecoder::ReportStackSlotToGC(
                                INT32           spOffset,
                                GcStackSlotBase spBase,
                                BOOL            isInterior,
                                BOOL            isPinned,
                                PREGDISPLAY     pRD,
                                unsigned        flags,
                                GCEnumCallback  pCallBack,
                                LPVOID          hCallBack)
{
    GCINFODECODER_CONTRACT(CONTRACTL {
        NOTHROW;
        GC_NOTRIGGER;
    } CONTRACTL_END);

    OBJECTREF* pObjRef = GetStackSlot(spOffset, spBase, pRD);
    _ASSERTE( IS_ALIGNED( pObjRef, sizeof( Object* ) ) );

#ifdef _DEBUG
    LOG((LF_GCROOTS, LL_INFO1000, /* Part One */
             "Reporting %s" FMT_STK,
             ( (GC_SP_REL        == spBase) ? "" :
              ((GC_CALLER_SP_REL == spBase) ? "caller's " :
              ((GC_FRAMEREG_REL  == spBase) ? "frame " : "<unrecognized GcStackSlotBase> "))),
             DBG_STK(spOffset) ));

    LOG((LF_GCROOTS, LL_INFO1000, /* Part Two */
         "at" FMT_ADDR "as ", DBG_ADDR(pObjRef) ));

    VALIDATE_ROOT(isInterior, hCallBack, pObjRef);

    LOG((LF_GCROOTS, LL_INFO1000, /* Part Three */
         LOG_PIPTR_OBJECT_CLASS(OBJECTREF_TO_UNCHECKED_OBJECTREF(*pObjRef), isPinned, isInterior)));
#endif

    DWORD gcFlags = CHECK_APP_DOMAIN;

    if (isInterior)
        gcFlags |= GC_CALL_INTERIOR;

    if (isPinned)
        gcFlags |= GC_CALL_PINNED;

    pCallBack(hCallBack, pObjRef, gcFlags);
}

}

#endif // USE_GC_INFO_DECODER
#endif // VERIFY_GCINFO

redpajama_set_name: RedPajamaGithub


Pro Texas Home Inspections provides top quality home inspection services in Arlington, Texas 76010 – 76019.
Arlington, Texas was founded in 1876, as a small settlement alongside the railroad. In January, 1877 the US Postal Service first recognized Arlington as a city, and mail began to be delivered. The city grew slowly until 1891, when a well was drilled in the middle of town, on Main and Center. The well grew in popularity and people came to live in the city because of the rumored medicinal properties in the water. The well didn't last long, and was capped in 1951 because of growing traffic in the area.
During that time the city grew, and people began building a row of brick and mortar shops along Main street, and creating schools. In 1917, citizens of Arlington decided that they wanted higher education within the city. They decided to start a small school that went through many changes before being known as Arlington College in 1949. It continued its growth in higher education before becoming the University of Texas at Arlington in 1967, where it flourished. UTA is now known for being an excellent place to get a college degree. With many well known programs such as engineering, nursing, and fine arts, the college continues to grow each year. They have recently expanded the school with College Park- an area of high-end apartments, restaurants, green space, and a brand new event center.
In the 1950s, Tom Vandergriff became mayor of Arlington. He brought the city into its largest period of growth yet, revitalizing the area with the growth of the entertainment district, the creation of jobs, and tourist attractions. He brought a baseball team to Arlington, which was named the Texas Rangers. He also opened a theme park, called Six Flags over Texas, which brought people far and wide to visit the park and Arlington. Perhaps one of the things he is most known for is opening the General Motors plant on the east side of Arlington, which brought a large number jobs to Arlington and spurred economic growth in the area.
Today, Arlington is a booming city conveniently located between Dallas and Fort Worth. The University is growing rapidly, and with new additions like the Cowboys Stadium the city is an entertainment destination. Many families live in the city and enjoy the various parks, shopping, and entertainment. It is a great place to buy a home, and a great place to find a home inspector!
The downtown area and entertainment district is located in central and north Arlington. There has been a lot of growth in this part of town in the past few years, with the largest addition being the Cowboys stadium. The entertainment district centers around the AT&T stadium, home to the Dallas Cowboys, the Texas Rangers at Globe Life Park, and Six Flags over Texas. The district is booming with new restaurants, shops, and hotels, perfect for any couple, group of friends, or family. Anything from a fun date night at Babe's Chicken, to a family outing at a Rangers game can be had in this part of town. There is also plenty of green space to run, walk your dog, and play with the kids at River Legacy Park in northern Arlington.
South Arlington is growing quickly, with new homes and shopping centers being built, and plenty of green spaces for family fun. One of the newer areas is the Arlington Highlands, which is a beautiful mixed area of green space, shops, a movie theatre, and restaurants. Not too far away is the Parks Mall, with plenty of family shopping and places to eat. Veteran's park, arguably one of Arlingtons most popular parks, offers a large playground, and trails for hiking, running, and biking. There is a small garden area with paths and seating throughout, and a large disc golf course that runs throughout the park.
Arlington is a wonderful place to call home. With easy access to the rest of the DFW metroplex, but everything you could need close by, it's a perfect place to find a new home and a reliable home inspector. Enjoy living in this great American city!
Contact us to schedule your home inspection.


A Happy Ganesh Chaturthi to all the readers.
India is the land of festivals and Ganesha Chaturthi being one of the major ones.Ganesha Chaturthi is the Hindu festival celebrated in honour of The Lord Ganesha.
As the god of beginnings, Lord Ganesha is honoured at the start of rituals or any new ventures.There couldn't be a better day than Ganesh Chaturthi to begin and introduce my food blog to all of you.
The deity is often shown carrying a bowl of sweets, called amodakapātra. Ganapathi is a lover of sweet food. He likes mostly sweet food, fruits and coconuts. Modaks and ladoos are his favorite amongst all and often served as naivedhyam or bhog to Lord Ganesha.
So, the first recipe for my blog could be none other than a sweet dish decked-up with the most beautiful fruit to please the deity. Kalakand ( Milk cake) is made in India during different festivals and celebrations. A huge pan is kept on a flame and large amount of milk is boiled stirring it continuously till it is thickened with sugar and dry fruits. I made this kalakand using a quick way.
In a microwave safe dish, mix the Ricotta Cheese and the Condensed Milk well.
Take out and mix well. Be sure to loosen the edges.
Put it back in the microwaved for 3 more minutes, uncovered.
Again Microwave for 2 minutes, covered. Take out and mix.
Microwave further for 2 minutes,partly covered, take out and mix.
Microwave for another 6 minutes, uncovered taking out and stirring every 2 minutes.
Add in the Powdered Cardamom and Vanilla Essence and mix well again.
Transfer it onto your favorite serving dish preferably flat (slightly greased).
Press down and flatten the mixture.Make a heart using the strawberries in the center of the square.
Sprinkle sliced Pistachios and Almonds on top.
Take condensed milk, ricotta cheese(or crumbled cottage cheese) in a heavy bottomed non- stick pan and mix well.
Heat the pan in low flame a and start stirring.
Stir till the mixture starts to thicken. Add in the Powdered Cardamom and Vanilla Essence and mix well again.Stir till the mixture leaves the wall of the kadai .
Transfer it onto your favorite serving dish preferably flat(slightly greased).
Press down and flatten the mixture to give a square shape.
Make a heart with strawberries in the center of the square.
Sprinkle sliced Pistachios and Almonds on the edges.
Prepare this quick kalakand for any occasion. This delicious and a beautiful looking dessert is a perfect fit" from the festivities to your potluck sweet dish " menu. If you liked reading this page, please share it with your friends and help me reach the mass. See you soon with more recipes. Till then, stay tuned and eat healthy!!!


Imagine five choirs and two orchestras coming together in the luxurious expanse of the Lewiston Basilica to perform two pieces by Ludwig van Beethoven: Missa Solemnis, Opus 123 and Meeres Stille, Opus 112. This concert is being produced by Bates College and the Maine Music Society, and includes the choirs and orchestras of these organizations as well as the Chamber Choirs of Edward Little and Lewiston High Schools and the Schola Cantorum of the Basilica under the direction of John Corrie, Artistic Director of the Maine Music Society and Director of the Bates Choral program.
The deeply moving piece, Missa Solemnis, is rarely performed because of the large size of the orchestra and the demanding scope of the music. To hear it in the magnificent Basilica with a full orchestra and over 150 voices will be a rare treat. It is surely a community event not to be missed.


If you have any artistic skills or crafty hobbies, you might just have one of the essential building blocks of a successful business. There are so many different business opportunities that allow you to share your crafting skills in a variety of different ways. Here are 50 craft business ideas.
There are many different types of jewelry you can design and make by hand, from beaded bracelets to pieces made with precious metals. Then you can sell those items online or even wholesale to local retailers.
Likewise, you can design a variety of different clothing items and create your own handmade line to sell online or in stores.
Or you could choose to create a more specific niche and just design logos or other graphics to get printed on t-shirts and similar clothing items.
If paper goods are your medium of choice, you can design you rown line of greeting cards and then get your designs printed professionally or you can hand craft each one individually.
For those who are more artistically inclined, you can create your own original paintings on canvas, wood or other mediums and then sell that artwork directly to customers.
You can also build a business as a sculptor that works in a variety of different mediums, including metal,, clay and more.
In addition, you can create more usable items like ceramic bowls and plates and even paint or otherwise customize your handcrafted items.
Candles are popular gift items. So you can make your own with custom scents and designs and sell them online or in stores.
Similarly, soap making gives you the opportunity to make items with different scent combinations and designs.
If you want to start a business that really customizes products, you can start a custom embroidery business where people send you their clothing or other items to have initials or other small details embroidered.
For those who are skilled at knitting or crocheting, there are a variety of different products you can create and sell with that medium, from hats and scarves to blankets.
You can also create toys for kids or pets out of a variety of different materials.
You can also build a business as a custom illustrator either by selling your work online or in stores or offering custom illustrations.
For those who are artistically inclined but want to sell relatively low-priced items, you can print out copies of your original work to sell.
You can also focus your efforts on designing purses and handbags to sell in stores or online.
Or you can open your very own store that focuses on selling handmade gifts and other items made by you and other handmade artisans in your community.
If photography is your medium of choice, you can also build a business printing out your photos and selling them to customers.
For those who are skilled in building and carpentry, there are plenty of potential products you can make out of wood, from furniture to frames.
You can also build a business by selling furniture that you made out of older, repurposed items.
Welding is another skill that requires some training and knowledge. But if you have it, you can make a number of different items out of metal.
For those who want to build a business that lets them be around a lot of people while also showing off their art skills, a caricature artist business could be a good option.
You can also focus on making items like phone cases, laptop skins and others that help people dress up and protect their tech items.
You could also build a business by designing costumes to sell or even working with events or productions on a freelance basis.
Coloring books have always been popular with kids. And now they're popular with adults as well. So you can build a business by creating the actual designs behind those coloring books.
Flowers can also serve as a creative medium. If you enjoy arranging flowers and making centerpieces or bouquets, you can build a business as a floral artist.
You can also work with others who want a great way to show off their artwork or photos by offering your services as a custom framer.
Even if you don't have a really specific niche for your craft business, you can sell a wide variety of different items at craft fairs or similar events in your community.
You can also build a business by organizing those craft fairs and events and attracting other artisans to be vendors.
Baskets come in many shapes and sizes. So if you can weave your own baskets, you can sell them to customers at fairs, in stores or even online.
If you enjoy sewing, you can start a business where you altar clothing for clients either out of your own studio location or out of your home.
You can also build a business where you sell supplies for other artists and crafters to make their own custom creations.
For those who know how to sew, knit, weave or do other craft activities that require patterns, you can create your very own patterns from scratch and then sell them to other crafters.
You can also design your own fabric patterns and even open a shop where you sell your own fabrics to other crafters and designers.
Quilting is another traditional craft that can offer a great business opportunity. You can make your own quilts to sell or even take custom orders.
Additionally, you can make customized stamps for crafty customers or create your own designs to sell.
If you enjoy creating art on a large scale, you can offer your services as a mural artist for organizations or property owners that want to add some large artwork to their spaces.
For those who would rather teach their artistic skills to others, you can start your own local or online workshops where you teach specific skills and charge admission.
Or you can work in a more one-on-one environment with crafty pupils by offering tutoring session for different crafty activities.
You can also create online courses that teach certain crafty skills to those who purchase them. Those courses can include text, video, audio and even printable documents.
Or if you want to put your tips and ideas into a more established format, you can write a book or ebook about a certain type of craft.
Crafters like to interact with one another online just like everyone else. So you can potentially build a business by creating a niche social networking site aimed at the handmade community.
You can also create a website that offers resources, tips, ideas or other items of value for crafters and charge a monthly membership rate.
Or you can provide more personalized services to other crafty business owners as a consultant that specializes in handmade businesses.
If you like designing your own artwork but don't want to sell physical products, you can build a business that just sells printable versions of your artwork.
Or you can open a screen printing studio where you transfer your designs onto anything from posters to clothing.
If you're a painting or illustrator, you can offer your services as a custom portrait artist where you draw portraits of people, families or even pets.
Or you can offer custom calligraphy services to people who want to add a special touch to their branding, paper goods or other items.
If you're a skilled crafter, you can share your expertise with people online as a handmade blogger, then earn an income through ads, affiliate links, infoproducts and more.
You can also build a following on social media and then work with crafty brands as an influencer.
Woman Carpenter, Jewelry Designer, Candlemaker, Glass Blower, Caricature Artist, Art Fair Photos via Shutterstock.
The craft industry is booming. I think the Internet played a major role in this as it helped at-home crafters reach a market outside.
Gee. Lots of reminders and a few new ones for someone who has started over 2 dozen biz. on almost no money! Good for you folks. I plan to share with our new farmer's market folks!


Fluorocarbon-Free Down - Effective insulation, ideal for colder days exploring.
Weather Resistant Fabric - Wind and water resistant outer layer fabric.
Pre-Curved Peak - Helps to protect the face for cold weather without blocking your vision.
Adjustable Chin Strap - To offer a personal and secure fit and feel under the chin.
Montane Plume Mountain Cap Down filled super packable mountain cap that has functionality and warmth at the core of its design. Using ethically sourced Allied Feather and Down water resistant fluorocarbon-free HyperDRYTM down, the Plume Mountain Cap will complete your cold weather/expedition kit list, ensuring you stay warm from the head down. The Plume Mountain Cap from Montane used a Fluorocarbon-free down to keep the cap well insulated, therefore keeping the wearers head warm. The outer fabric is super hard wearing and is weather resistant to help prevent warmth escaping and the cold and wet weather getting to the inner layers. The pre curved peak will help to shield the face from rain and wind without obscuring the wearer's vision. Low-hanging panels have been added to the cap's sides which will protect the ears and will help to block cold air from getting up inside the cap. The chin strap used an adjustable fastening which will allow the wearer to adjust the fit quickly and easily to ensure it meets their personal preference. This strap will also ensure that the cap stays securely in place, ideal for windy days.


A polyploid complex, with two subspecies in our area which are not easily separable morphologically. Although many sites were lost before 1930, the species has suffered a further marked decline in S. England since the 1962 Atlas. Though rare in Ireland, Curtis & McGough (1988) considered it to have been under-recorded in recent years.
c) Hultén E, Fries M.
1986. Atlas of north European vascular plants north of the Tropic of Cancer. 3 vols. Meusel H, Jäger E, Rauschert S, Weinert E.


VLFUND indicates whether fundraising was part of the respondent's volunteer opportunities with the main organization, which is determined by the greatest number of hours volunteered in the past year. Researchers could use VLWTORG1 through VLWTORG7 (weeks in the last year volunteered with at a given organization) and VLHTORG1 through VLHTORG7 (hours per week spent volunteering at a given organization) to calculate an annual total and identify the main organization. The annual hours spent volunteering by the main organization is also reported in VLHMAINORG.
The wording for this question was different for 2002, which asked whether volunteer activities included canvasing, campaigning, or fund raising. From 2003 forward, the question instead asked if they fundraised or sold items to raise money.


text:
Assembly Leadership
Hon. Francis Ngunga
Leader Of Majority
There shall be a Leader of the Majority Party and a Leader of the Minority Party.
The Leader of the Majority Party shall be the person who is the Leader in the County Assembly of the largest party or coalition of parties.
The Leader of the Minority Party, shall be the person who is the Leader in the County
Assembly of the second largest party or coalition of parties.
The Leader of Majority
The Majority Leader's role has largely been defined by history and tradition. Among other responsibilities, he is charged with scheduling legislation for floor consideration, on which he works closely with the Speaker and his Party's Whips. He helps plan daily, weekly, and annual legislative agendas; consults with Members to gauge sentiment on issues; urges colleagues to support or defeat measures on the floor; and, in general, works to advance the goals of the Majority Party.
The Majority Leader is also responsible for closely watching floor activities, especially the opposition party's parliamentary maneuvers. By custom, he does not typically lead floor debate on major measures. At times he may serve as a spokesman for his party.
In addition, the Majority Leader is active in constructing winning coalitions for the party's legislative priorities; acting as a public spokesman — defending and explaining the Party's program and agenda.
The Leader Of The Minority
Hon. Alex Kamitu
Leader Of Minority
The Minority Leader speaks for the Minority Party and its policies, strives to protect the minority's rights, organizes and leads criticism of the Majority Party, and devises parliamentary strategies and tactics that can put to best use the abilities of his party to influence legislative outcomes. The Minority Leader chairs his party's Committee Assignment Panel.
The Party Whips
Party Whips are essentially party political functionaries in a legislative assembly. In parliamentary language, a Whip is a Member designated by his or her party to assist in the management of party affairs or business in the House.
Hon Tariq Muema
Majority Whip
Hon Jacqueline N Munyao
Minority Whip
Among other matters, the Whip is expected to:
Organise party business in the House in consultation with party members
Link party leadership with the offices of the leadership / parties
Inform members of the party on the business pending in the House
Ensure that members of the party are present to articulate and vote on party issues in the House
Secure attendance of members both in Committees and the House
Maintain party discipline among members
In consultation with the Chair, arrange party membership of committees; delegations and other local and foreign assembly events
Maintain, in consultation with the Chair, the list of party members to speak in assembly debates.
Recommend to the party membership de-whipping of members
Allocate party members offices and other facilities on offer in the Assembly


text:
<title>libogg - function - ogg_sync_clear</title>
<link rel=stylesheet href="style.css" type="text/css">

libogg documentation

libogg release 1.0 - 20000615

ogg_sync_clear

declared in "ogg/ogg.h";

This function is used to free the internal storage of an ogg_sync_state struct and resets the struct to the initial state.  To free the entire struct, ogg_sync_destroy should be used instead.  In situations where the struct needs to be reset but the internal storage does not need to be freed, ogg_sync_reset should be used.

int ogg_sync_clear(ogg_sync_state *oy);

Parameters

oy

Pointer to a previously declared ogg_sync_state struct.

Return Values

0 is always returned.

copyright © 2000 xiph.org

Ogg Vorbis
team@xiph.org

libogg documentation

libogg release 1.0 - 20000615


Allahabad, Jan 14, 2009 (ANI): Tibetan exiles have appealed to Prime Minister Manmohan Singh seeking his support to their struggle for independence of Tibet.
The protesters, holding portraits of their spiritual leader Dalai Lama, staged a demonstration against the Chinese rule in Tibet on Tuesday.
"We all Tibetans appeal to the Prime Minister to support our cause," said Sonam, a Tibetan exile.
Tibetans have long been waging a struggle against Chinese rule in Tibet. Beijing considers Tibet as part of China and has been ruling it since 1959.
Tibetans say "Chinese atrocities" have increased since the March 14 Tibetan uprising in Lhasa in 2008, which China blamed on the Dalai Lama and his "clique."


text:
Posted inIsrael
Israel's multilayer air defense system a new age missile-killer
Israel's Iron Dome and David's Sling air defenses prove effective against state-of-the-art cruise missile threats
by Stephen Bryen December 16, 2020 December 18, 2020
US army soldiers look at anti-missile system David's Sling during joint Israeli-US military training at the Hatzor Airforce Base in Israel on March 8, 2018. Photo: AFP/Jack Guez
Israel has carried out a test of its air defenses, which for the first time reveals a highly integrated system that can knock out a broad spectrum of targets, from maneuvering ballistic missiles to simple drones.
This accomplishment has far-reaching implications, not only for Israel's defense capabilities but for the United States. The US Army is in the process of developing an integrated tactical defense system called the Integrated Air and Missile Defense Battle Command System.
If the Israeli air defense integration is complete, it is probably the first time that systems optimized for different threats can share threat data and hand off responsibility to different "tiers" of the defense system.
Unlike the US effort, Israel's integrated system is national and includes ballistic missile defenses (BMD). The US Army system is tactical and only attempts to deal with tactical ballistic missile threats – and even there relies on the evolved but still antiquated Patriot system.
Above all, the Israeli test for the first time demonstrated a system that can destroy cruise missiles.
While most of the global focus since the Nagorno-Karabakh conflict has been on drones as an emerging unconventional threat to traditional military operations, the cruise missile presents the biggest threat to critical infrastructure installations and defense bases, both forward operating and fixed bases at the national level.
The rise of high precision cruise missiles in the hands of second-tier actors such as Iran – and Iran's client Yemen – presents a threat to Israel and to its new-found allies and friends in the Gulf states.
The unacknowledged Iranian attacks on two Saudi Arabian facilities, Abqaiq and Khurais, made clear that Iran had the ability to fire autonomous drones and cruise missiles and strike targets at high accuracy without a "man in the loop."
Military vehicles carrying YJ-18 anti-ship and land-attack cruise missiles drive past Tiananmen Square during the military parade to celebrate the 70th anniversary of the founding of the People's Republic of China. Photo: AFP/Anna Ratkoglo/Sputnik
Cruise missiles on long flights use highly accurate gyroscopes for navigation, augmented by GPS and supported by scene matching cameras and software. Typically gyroscopes are mechanical and electrical, require spin-up time and need to be updated.
In the past 20 years, ring laser gyros have become available, first in the United States. These gyros are far more accurate than mechanical ones. China, for example, is producing ring laser gyros (RLG), fiber optic gyros and microfabricated MEMS gyros.
These gyros are expensive and range in price from US$2,000 to $100,000 each. But even electro-mechanical gyros accuracy can be updated by GPS, which seems to be what the Iranians did in their attacks on the Saudi oil installations.
The gyros found there on both drones and cruise missiles were types V-9 and V-10 respectively, either imported to Iran from China or possibly, but less likely, locally manufactured in Iran.
The major problem for air defense operators has been detection at range for low flying cruise missiles and drones. Radars can easily detect small objects – radar guns are used to measure baseball speed – but they are range limited because of the prevalence of ground clutter that shrouds the incoming object.
And because a radar could easily confuse a friendly object with one that is a threat, modern air defense systems need to be able to classify objects and identify them as threats. In the case of an integrated system, that classification capability also implies that the appropriate segment of the air defense system will be assigned to respond to the threat.
We don't know much about what improvements the Israelis have made in their air defenses to account for cruise missiles and drones. But we can speculate that the improvements are largely in radar image processing and in discernment algorithms.
The two main systems in Israel's arsenal to deal with these kinds of threats are called Iron Dome – Kippat Barzel in Hebrew – and David's Sling – Sharvit Haksamim, or the Magic Wand, in Hebrew.
A battery of Israel's Iron Dome defense system, designed to intercept and destroy incoming short-range rockets and artillery shells, in Mount Hermon in the Israeli-annexed Golan Heights on January 21, 2019. Photo: AFP/Jalaa Marey
Iron Dome has been remarkably successful against small rockets, especially those fired from Gaza. The system can also knock out mortar rounds. Iron Dome accounts for 1,500 to 2,000 kills on rockets fired from Gaza into Israeli territory.
One of Iron Dome's unique features is that it selects only those threats that are likely to cause harm, letting rockets that won't hit villages or infrastructure to fall to the ground. This saves interceptor rockets for meaningful kills, saves money and optimizes the chance to deal with "swarming" type attacks, like what hit Saudi Arabia's oil fields.
The limitation of the Iron Dome system is its coverage area. Each Iron Dome battery can cover about 150km of territory.
David's Sling is a much heavier air defense system that is replacing the US Patriot and Hawk air defense systems. It is optimized to cover incoming threats at distances of between 40km to 300km.
David's Sling is a joint development of Rafael Advanced Defense Systems in Israel and Raytheon in the United States. The system uses an Israeli radar made by Elta, EL/M-2084, an active electronically scanned array multi-mode radar. The radar linked to the air defense system is capable of selecting real targets from decoys.
It was designed to deal with Russian Iskander missiles and Chinese DF-15 short-range ballistic missiles that have maneuvering re-entry vehicles. The system can also deal with a variety of other Russian, Chinese and North Korean missiles – and respective Iranian knock-offs – such as the Tochka, which is in large numbers in Syria and Yemen.
The top tier of Israel's air defense system is Arrow 2 and Arrow 3. Arrow 3 is an exoatmospheric capable system that can even knock out enemy satellites.
What became clear in the attacks on Saudi Arabia and in the Nagorno-Karabakh war was that radars were ineffective in detecting even large drones like Turkey's Bayraktar.
A handout picture released by Israel on December 10, 2015, shows the launch of an Israeli Arrow 3 missile at an undisclosed location in southern Tel Aviv. Photo: AFP/Israeli Defense Ministry
While some of this can be attributed to difficult terrain, it also indicates that both Russian and Western radars were ineffective against relatively slow-flying threats coming in at a low altitude.
It is likely these systems do not have sophisticated computers to sort out real radar returns from ground clutter and they may also lack threat libraries that anticipate undocumented cruise missiles and drones.
Cruise missiles in their terminal flight envelope may fly as low as 15 meters above the ground.
The successful Israeli test and demonstration takes up an issue of contention between the US Army and Israel over Israel's ability to knock out cruise missiles. When the US Army bought two Iron Dome systems from Israel, which the US Congress mandated, Israel claimed the system could deal with a range of threats including cruise missiles and drones.
Until now, Israel could not prove in any conclusive manner they were able to counter a cruise missile attack. It is likely Israel was also in the process of improving and optimizing Iron Dome and David's Sling against advanced drone and cruise missile threats.
Israel's military has been aggressively taking out Iranian supplied rockets and cruise missiles shipped into Syria, Lebanon and Iraq and, no doubt, Israel anticipates that even with these efforts the threat to Israeli territory is real and growing.
With these tests showing Israel's Iron Dome can kill drones and cruise missiles, one of the key US Army arguments about Iron Dome's "limitations" is in the process of being erased.
The other argument, about the availability of source code – which Israel allegedly resists providing – relates more to the algorithms Israel's Defense Forces have developed to assure these new types of threats can be countered rather than hardware advances. How to bridge this gap with the US remains an issue still on the table.
Source code is the computer instruction set of commands that operates the air defense system.
For Israel, these algorithms in the source code represent high-level secrets that go beyond industrial security and are critical to the national security of the country. How this gap can be bridged is a challenge for both sides, but it is clear that a creative effort would help the US Army field a competent system.
Tagged: air defenses, Archive, Cruise Missiles, David's Sling, Iron Dome, Israel, US Army