text:
from datetime import datetime
import logging
from django.conf import settings
from django.contrib.sites.models import Site
from django.core.exceptions import ObjectDoesNotExist
from django.http import Http404
from django.utils.translation import ugettext as _
from django.views import generic

from braces.views import FormMessagesMixin, LoginRequiredMixin
from haystack.query import SearchQuerySet
from haystack.views import FacetedSearchView

from .models import Article, TableOfContentsEntry
from .forms import ArticleForm, ArticleUpdateForm, ArticleFacetedSearchForm
from . import choices

logger = logging.getLogger('researchcompendia.compendia')

class ArticleFacetedSearchView(FacetedSearchView):

    def __init__(self, *args, **kwargs):
        super(ArticleFacetedSearchView, self).__init__(*args, **kwargs)
        self.form_class = ArticleFacetedSearchForm

    def extra_context(self):
        extra = super(ArticleFacetedSearchView, self).extra_context()
        extra['compendium_type_lookup'] = choices.ENTRY_TYPE_LOOKUP
        extra['research_field_lookup'] = choices.RESEARCH_FIELD_LOOKUP
        return extra

class TableOfContentsView(generic.ListView):
    model = TableOfContentsEntry
    template_name = 'asa.html'
    sqs = SearchQuerySet().facet('compendium_type')
    allow_empty = False

    def get_context_data(self, **kwargs):
        context = super(TableOfContentsView, self).get_context_data(**kwargs)
        context['searchqueryset'] = self.sqs
        context['facets'] = self.sqs.facet_counts()
        return context

class ArticleBrowseView(generic.base.TemplateView):
    template_name = 'compendia/browse.html'
    sqs = SearchQuerySet().facet('compendium_type').facet('primary_research_field')

    def get_context_data(self, **kwargs):
        context = super(ArticleBrowseView, self).get_context_data(**kwargs)
        context['searchqueryset'] = self.sqs
        context['facets'] = self.sqs.facet_counts()
        context['result_groups'] = self.make_facet_groups(self.sqs)
        context['compendium_type_lookup'] = choices.ENTRY_TYPE_LOOKUP
        context['research_field_lookup'] = choices.RESEARCH_FIELD_LOOKUP
        return context

    def make_facet_groups(self, sqs):
        counts = sqs.facet_counts()
        fields = counts.get('fields', {})
        type_counts = fields.get('compendium_type', [])
        facetgroups = []
        for compendium_type, count in type_counts:
            if compendium_type == '':
                continue
            items = self.sqs.filter(compendium_type=compendium_type).values(
                'pk',
                'title',
                'authors_text',
                'code_data_abstract',
                'journal',
            )
            facetgroups.append([compendium_type, [item for item in items][:5]])
        return facetgroups

class ArticleListView(generic.ListView):
    model = Article
    template_name = 'compendia/index.html'
    paginate_by = 25
    sqs = SearchQuerySet().facet('compendium_type').facet('primary_research_field')
    allow_empty = False

    def get_context_data(self, **kwargs):
        context = super(ArticleListView, self).get_context_data(**kwargs)
        context['facets'] = self.sqs.facet_counts()
        context['static_url'] = settings.STATIC_URL.rstrip('/')
        context['media_url'] = settings.MEDIA_URL
        context['domain'] = Site.objects.get_current().domain
        context['now'] = datetime.now()
        context['compendium_type_lookup'] = choices.ENTRY_TYPE_LOOKUP
        context['research_field_lookup'] = choices.RESEARCH_FIELD_LOOKUP
        return context

    def get_queryset(self):
        articles = Article.objects.filter(status__iexact=Article.STATUS.active)
        if 'compendium_type' in self.request.GET:
            articles = articles.filter(compendium_type=self.request.GET['compendium_type'])
        if 'primary_research_field' in self.request.GET:
            articles = articles.filter(primary_research_field=self.request.GET['primary_research_field'])
        return articles

    def get_paginate_by(self, queryset):
        """ Paginate by specified value in querystring, or use default class property value.  """
        return self.request.GET.get('paginate_by', self.paginate_by)

class ArticleTypeListView(ArticleListView):
    template_name = 'compendia/title_list.html'
    sqs = SearchQuerySet().facet('primary_research_field')

    def get_queryset(self):
        slug = self.kwargs.get('slug', None)
        try:
            toc = TableOfContentsEntry.objects.get(slug=slug)
        except ObjectDoesNotExist:
            raise Http404(_("No %(verbose_name)s found matching that matches the query") %
                          {'verbose_name': TableOfContentsEntry._meta.verbose_name})

        entry_types = toc.entrytype_set.all()
        if not entry_types.exists():
            raise Http404(_("This %(verbose_name)s has no entry type categories.")
                        % {'verbose_name': TableOfContentsEntry._meta.verbose_name})

        compendium_types = [e.compendium_type for e in entry_types]
        articles = Article.objects.filter(status__iexact=Article.STATUS.active).filter(compendium_type__in=compendium_types)
        if not articles.exists():
            raise Http404(_("No items found."))
        return articles

class ArticleDetailView(generic.DetailView):
    model = Article
    template_name = 'compendia/detail.html'

    def get_context_data(self, **kwargs):
        context = super(ArticleDetailView, self).get_context_data(**kwargs)
        context['static_url'] = settings.STATIC_URL.rstrip('/')
        context['media_url'] = settings.MEDIA_URL
        context['domain'] = Site.objects.get_current().domain
        context['now'] = datetime.now()
        verifications = self.object.verification_set.all()[:5]
        context['recent_verifications'] = verifications
        context['compendium_type_lookup'] = choices.ENTRY_TYPE_LOOKUP
        context['research_field_lookup'] = choices.RESEARCH_FIELD_LOOKUP
        return context

class ArticleYearView(ArticleDetailView):
    year_url_kwarg = 'year'

    def get_object(self, queryset=None):
        """
        Returns the object the view is displaying.
        Raises a 404 if the `year` in the url does not match the created year of the object.

        This requires a `pk` and `year` argument in the URLconf
        """
        if queryset is None:
            queryset = self.get_queryset()

        pk = self.kwargs.get(self.pk_url_kwarg, None)
        year = self.kwargs.get(self.year_url_kwarg, None)

        if pk is None or year is None:
            raise AttributeError("%s must be called with an object pk and a year."
                                 % self.__class__.__name__)

        queryset = queryset.filter(pk=pk)
        try:
            article = queryset.get()
        except queryset.model.DoesNotExist:
            raise Http404(_("No %(verbose_name)s found matching the query") %
                          {'verbose_name': queryset.model._meta.verbose_name})

        # Next, check that the created year matches
        year_created = article.created.strftime('%Y')
        if year_created != year:
            raise Http404(_("%(verbose_name)s %(pk)s not found in year %(year)s. Did you mean %(year_created)s?") % {
                'pk': pk,
                'verbose_name': queryset.model._meta.verbose_name,
                'year': year,
                'year_created': year_created,
            })

        return article

class ArticleCreateView(LoginRequiredMixin, FormMessagesMixin, generic.edit.CreateView):
    model = Article
    form_class = ArticleForm
    template_name = 'compendia/create.html'

    def form_valid(self, form):
        form.instance.site_owner = self.request.user
        return super(ArticleCreateView, self).form_valid(form)

    def get_form_invalid_message(self):
        logger.error('An attempt to create an article has failed. USER: %s PATH: %s GET: %s POST: %s',
                self.request.user, self.request.path, self.request.GET, self.request.POST)
        return 'The article was not created, and the site administrators have been notified.'

    def get_form_valid_message(self):
        return "Article created!"

class ArticleUpdateView(LoginRequiredMixin, FormMessagesMixin, generic.UpdateView):
    model = Article
    form_class = ArticleUpdateForm
    template_name = 'compendia/update.html'

    def get_form_invalid_message(self):
        logger.error('An attempt to update article %s has failed.', self.object.id)
        return "Article was not updated! The administrators have been notified."

    def get_form_valid_message(self):
        return "Article updated!"


text:
Novomaximovsky () is a rural locality (a khutor) and the administrative center of Novomaximovskoye Rural Settlement, Surovikinsky District, Volgograd Oblast, Russia. The population was 1,371 as of 2010. There are 18 streets.

Geography
Novomaximovsky is located on the bank of the Tsimlyansk Reservoir, 52 km southeast of Surovikino (the district's administrative centre) by road. Verkhnechirsky is the nearest rural locality.

References

Rural localities in Surovikinsky District

redpajama_set_name: RedPajamaWikipedia


text:
MODERN DEMOCRACISES: LOVERS' OF DEATH: Part 2~A
Preamble to Secular and Sacred Origins
Languages which are 'living', that is used by large populations, such as English and French, have words whose meaning can change.
For example, the word democracy for the Athenians meant a system of social governance more closely related to the Catholic social-teaching principle of subsidiarity where the greatest amount of power/decision making starts at the lowest possible level in society, for example at the neighbourhood rather than the municipal governance level.
Today when most people hear the word democracy it conjures up notions of governments with power yet increasingly isolated from, and deaf, to the cries of the people: the poor and vulnerable, those who are Christian and for life.
In his work on how China is messing around with Canadian democracy, a clear and present danger ignored by the Trudeau government, Jonathan Manthorpe notes: A feeling of powerlessness has become pervasive among Western Democracies, and in many cases there are good reasons for people to think that their civic systems are not functioning as intended……There is clearly a need to refashion Western Democracy and for a new compact between governments and citizenry. [1]
Throughout modern democracies, policies language, political speeches tend to deliberately muddy the waters so that sometimes what is labeled as the liberal left party is actually more conservative than the party which tends to be labeled as the conservative right, and vice-versa, depending on how parties figure they can manipulate the electorate to gain or retain power.
Granted it is simplifying things, but here any reference to liberal means governments and thinking of the left and any reference to conservative means governments and thinking of the right. Ideally, like the preferred porridge of Goldilocks, no government, indeed no individual, should be locked into either extreme but rather seek to balance, for example, social justice with the God given right to life. Denial of the sacred origins of democracy opens the door to the chaos of the culture of death.
In: MESSAGE OF JOHN PAUL II TO THE EUROPEAN STUDY CONGRESS ON THE THEME: "TOWARDS A EUROPEAN CONSTITUTION?" , of June 2002, the Holy Father tried to teach this, as he appealed to the EU nations not to ignore their Christian heritage: ultimately ….if a new European order of this kind is to be adequate for the promotion of the authentic common good, it must recognize and safeguard the values that constitute the most precious heritage of European humanism, which has assured and continues to assure Europe a unique influence in the history of civilization. These values constitute the characteristic intellectual and spiritual contribution that has formed the European identity through the centuries and is part of the valuable cultural treasure of the continent. As I have recalled on other occasions, they concern the dignity of the person; the sacred character of human life; the central role of the family founded on marriage; the importance of education; freedom of thought, of speech and of the profession of personal convictions and religion; the legal protection of individuals and groups; the collaboration of all for the common good; work, seen as a personal and a social good; political power understood as a service, subject to law and reason, and "limited" by the rights of the person and of peoples…..in the process leading to a new institutional order, Europe cannot deny its Christian heritage, since a great part of its achievements in the fields of law, art, literature and philosophy have been influenced by the evangelical message…… being open to the new challenges emerging, Europe will need to draw inspiration with creative fidelity from the Christian roots that have defined European history. [2]
In the end the EU expunged any reference to its Christian roots and heritage from the constitution.
As St. Cyprian, a courageous bishop and martyr of the early Church admonishes us, and these words apply today: The world hates Christians, so why give your love to it instead of following Christ, who loves you and has redeemed you?
Currently the United States is going through the divisiveness of an impeachment process against President Trump, it is worth noting how leftist media is obsessed in its hostility towards non-liberal-leftist politicians and policies to such an extent that, for example CNN, which used to be a news channel, is now almost ninety percent of the time trolling, blah-blahing all anti-Trump all the time.
What is, euphemistically these days, referred to as the 'news media', has became similarly obsessed with defeating the conservative parties around the world, and simultaneously degrading Christianity, Catholicism in particular. As far back as the early the sixties in Canada, when there was a chance the Conservatives might continue in government, something which at anytime drives the Liberal/Leftist parties nuts, in his MEMOIRS, former Prime Minister [conservative] Brian Mulroney notes: The most famous illustration of this hostility was a statement by Val Sears….who exhorted the traveling press on to another day of objective journalistic duty with the memorable cry, "To work, gentlemen, we have a government to overthrow." [3]
Before looking into the secular and sacred origins of democracy it is vital to remember democracy is about human beings living in common, about the human person.
All human beings, that is each person, is created innately, intrinsically, free.
Constitutive of this freedom is our wills are free, that is we are free to choose life or death, love or hate, beauty or ugliness, to dwell in the light of Christ or the darkness of hell.
There is a degree of freedom within all creation, according to natural law, hence the stars shine, shimmer, some move, as do some planets, the air, the seas, birds, trees, animals, all have a type of freedom, but only human beings, that is we as persons in the image and likeness of God, share in the Holy Trinity's freedom of being, of life as freedom, freedom to choose.
Choice has consequences as we all experience.
Once the Holy Trinity creates the human person, male and female, that is man and woman, in His image and likeness, endowing us with free will, we are simultaneously created as free persons.
Any government, democratic or not, which deliberately curtails freedom is acting as an agent of satan. Granted certain personal curtailments are reasonable and for the greater good and have their moral legitimacy rooted in Sacred Revelation, hence 'thou shalt not kill', makes arresting and putting murderers in prison reasonable.
Passing laws, that allow the murder of pre-born children, are satanic laws, which seek to usurp what is God's alone: the gift of life.
Nothing in Sacred Scripture is asked of us, no more than the original directive to Adam and Eve, to curtail our freedom. Rather every commandment from God is opportunity, opportunity for us to freely love God and one another.
Constitutive of every commandment is this choice: to be free or unfree.
Freedom while not something we self-create, anymore than we create our selves, is something we can throw away, by imprisoning ourselves in the darkness of sin, like hate which imprisons us in ourselves, also our freedom can be taken away from us, which is what governments can, and do, do.
Thus, both sacred and secular history are replete with the struggle of human beings to live in community as free members thereof, and likewise of the unrelenting attempts of some human beings to dominate others.
The inspiration for the evil of dominance comes from the perpetually unfree creature whose arrogant 'non serviam' [I will not serve] instantly made him and his minions prisoners in the cold and dark of hell: the place of chosen unfreedom for all eternity.
It would be millennia before our ancestors would develop linguistic processes, both verbal and written, that would formulate rules, laws, ideas about how the clan, tribe, city, eventually kingdoms, alliances, emerging nation states and their alliances, should be governed.
Throughout secular history in particular when enough people found the system of government oppressive, a curtailing of objective freedom, resistance would begin and spread and either through civil war, or revolt against an occupying power, cast off the chains that bound them. Given the length of human history, only in recent times have people been able to cast off the chains of unfreedom, through the ballot box.
Songs of the people, paralleled in Sacred Scripture in the Psalms, over time in pamphlets, plays, operas, latterly novels, film, and paralleled by works of philosophy, law, politics etc., gave voice to the cries of the oppressed and those seeking to set them free.
In recent history the works of Hugo, Dickens, Dostoyevsky, and others, sought to give voice to the voiceless, in the dirty thirties the novel and film version of THE GRAPES OF WRATH, and in this age of the internet, digital media, the Wachowskis brothers Matrix Trilogy, articulate the deep need of human beings, irrespective of who is seeking to dominate us, to be free.
Towards the end of the third film in the series, in the midst of the final battle between the protagonists, the character who embodies darkness, death, destruction, hatred, named in the film 'Smith', cannot comprehend why the character 'Anderson/Neo', who embodies the human hunger for freedom, peace, love, speak with each other: Smith: "Why, why, why, why do you do it? Why, why get up, why keep fighting? Do you believe you are fighting for something? For more than your survival. Can you tell me what it is. Do you even know?....Is it freedom or truth? Perhaps peace? Could it be for love? Illusions Mr. Anderson, vagaries of perception, temporary constructs of a feeble human intellect trying desperately to justify an existence that is without meaning or purpose……You must know it by now you can't win. It's pointless to keep fighting….Why Mr. Anderson, why, why do you persist? [4a]
The hiss of satan himself is in those words, it is his challenge to Christ in the desert, in the garden, on the cross, his taunt of every soul, every human being, every faithful disciple of Christ and it is the uncomprehending arrogance of those who oppressively rule in China, Russia, Iran, and increasingly as ersatz democratic governments in Canada, Venezuela, etc., seeking to overrule their own people.
Mr. Anderson's/Neo's reply is as incomprehensible to them as Jesus' word to the Father in the Garden: "Not as I will, but as You will".
Smith: Why Mr. Anderson, why, why do you persist?
Mr. Anderson/Neo: Because I choose to. [4b]
That answer is echoed by the defenders of life in the culture of death, by word and deed, by fidelity to Christ, by demanding authentic democracy, and is also to echo Christ's own words and life, for Christ choose to lay down His life for us, as we must for one another, for that is love and there is no greater act of resistance to the tyranny of the democracies of death than to love and choose life. It is the freedom of the children of God.
Living as an urban hermit in this city on the 53rd parallel, this time of year the Scriptural words about people living in darkness and seeking light, [Mt. 4:16ff], adds to the stark reality of living in a modern democracy oozing into our lives the culture of death and darkness.
These dark days are brightened by Christmas lights shining from the homes of believers and unbelievers alike, while St. John reassures us Light Himself has created us to be filled with light, not darkness: What came to be through Him was life, and this life was the light of the human race; the light shines in the darkness, and the darkness cannot overcome it. [Jn. 1:3-5]
In his recent Apostolic Letter On The Meaning and Importance of the Nativity Scene, Pope Francis also consoles us: Why does the Christmas crèche arouse such wonder and move us so deeply? First, because it shows God's tender love: the Creator of the universe lowered himself to take up our littleness. The gift of life, in all its mystery, becomes all the more wondrous as we realize that the Son of Mary is the source and sustenance of all life. In Jesus, the Father has given us a brother who comes to seek us out whenever we are confused or lost, a loyal friend ever at our side. He gave us his Son who forgives us and frees us from our sins. [5]
In the next essay we will go deeper into the origins, strengths, dangers, weaknesses of modern democracies, keeping in mind always this admonition from St. Paul:….. it is the hour now for you to awake from sleep. For our salvation is nearer now than when we first believed; the night is advanced, the day is at hand. Let us then throw off the works of darkness and put on the armour of light…….[Rms. 13:11,12]
[1] CLAWS OF THE PANDA, Beijing's Campaign of Influence and Intimidation in Canada; p. 270; Jonathan Manthorpe; Cormorant Books Inc. 2019
[2] https://w2.vatican.va/content/john-paul-ii/en/speeches/2002/june/documents/hf_jp-ii_spe_20020622_costituzione-europea.html [see paras. 3 &4]
[3] BRIAN MULRONY MEMOIRS, p.74; A Douglas Gibson Book, McClelland & Stewart Ltd. 2007
[4a & b] https://en.wikipedia.org/wiki/The_Matrix_Revolutions
[5] http://w2.vatican.va/content/francesco/en/apost_letters/documents/papa-francesco-lettera-ap_20191201_admirabile-signum.html para. 3
© 2019 Fr. Arthur Joseph

redpajama_set_name: RedPajamaCommonCrawl


but then i start to think of the lender.
would he have made his books feel wanted?
would he have talked to them?
A quandary indeed, and nicely elucidated.
hey, i learned something new. thank you for your kind words, as always.


text:
Jürgen Moll (født 16. november 1939, død 16. december 1968) var en tysk fodboldspiller (forsvarer/angriber).

Moll spillede hele sin karriere, fra 1957 til 1968, hos Eintracht Braunschweig. Han var med til at sikre klubben det tyske mesterskab i 1967.

Moll døde sammen med sin kone i en bilulykke i 1968.

Titler
Bundesliga
 1967 med Eintracht Braunschweig

Referencer

Eksterne henvisninger

Fodboldspillere fra Tyskland
Fodboldspillere fra Eintracht Braunschweig
Omkomne ved trafikulykker i Tyskland


STATE-owned corporation Telecom Cambodia reported a 14 percent increase in revenue in the first half of the year compared with the same period last year, though some private internet service providers claimed declining income during the same period.
TC generated US$15.7 million in revenue during the first six months, up 13.7 percent from its $13.8 million for the period in 2009, director general Lao Sareoun said yesterday.
The firm says that 32,000 subscribers use its services, including land telephone lines, and its internet service provider branch. Revenue from its domestic services climbed 58 percent to $12.26 million for the year to the end of July, from $7.75 million from the same period last year.
"We grew our revenues despite very tough competition due to an increasing number of operators," Lao Sareoun said. He said there were approximately 30 ISPs and nine mobile-phone companies in operation.
Improved economic conditions in Cambodia led the firm to target phone and internet for use by businesses, he said.
"We offer our existing customers and new clients competitive tariffs. That's why we can maintain our pace of growth amid tough competition," he said.
However, the firm's revenue from international connections had declined, he said, though he could not recall the precise figures.
TC's revenues totalled $27 million last year, Lao Sareoun said, and targeted $31 million in revenue during 2010.
Telecom Cambodia is one of the three stated-owned enterprises that had been instructed by the government in December last year to prepare for listing on Cambodia's planned stock exchange.
Meanwhile, some private ISPs said their revenues had declined year on year.
Sok Channda, CEO of Mekong Net ISP, said that the company had seen about a one-third decline in revenues because of lowered internet service fees due to increased competition.
Hy Borin, system administrator at WiCam Corporation Limited, claimed that the firm's revenues also declined, but said he did not remember exact percentages yesterday.
"The revenue dropped sharply in the first half of this year due to too many competitors and attracting only smaller customers," he said, but the firm saw potential to provide services to a growing number of corporations in Cambodia.


text:
Category: South Africa
October 27, 2021 October 27, 2021 imagejunkies africa, Anglo-Zulu war, South Africa
Free book: The Military History Geek's Guide To…The Anglo-Zulu War
Sign up for the Redcoat History Despatch and receive my free, full-length eBook - The Military History Geek's Guide To...The Anglo Zulu War.
July 23, 2021 imagejunkies africa, Anglo-Zulu war, South Africa, Video
Rorkes Drift From Above: Drone shots of the famous battlefield
The Battle of Rorke's Drift is one of the most famous engagements in British military history. I've made a number of films about the battle over the years which you can find on this website and on my YouTube channel, but for this film I wanted to do something different - Drone shots of the site and also a chronology of the battle.
May 31, 2021 October 27, 2021 imagejunkies africa, podcast, South Africa, Video, World War Two
Job Maseko MM – The Full Story of a South African Hero
Did racism stop Job Maseko MM from winning the Victoria Cross? That was the claim made in a recent, highly publicised, campaign. But could that be true and what is the full story of this South African hero? I set out to find out. . .
April 27, 2021 imagejunkies africa, Anglo-Boer war, South Africa, Video
ANZAC Day 2021 – a service on the Battlefield of Diamond Hill
This morning (April 25th, 2021) I was lucky enough to attend an intimate Anzac Day gathering. It was cold and dark as we gathered on the battlefield of Diamond Hill - fought on the 11th and 12th of June 1900.
April 9, 2021 April 9, 2021 imagejunkies africa, Anglo-Boer war, Anglo-Zulu war, South Africa, Video
Fort Pine – A hidden gem of the Anglo-Zulu War
Deep in the rural areas of KwaZulu-natal, about 20km from Dundee is the impressive, but almost unknown Anglo-Zulu War fortification known as Fort Pine. Its dry-stone walls are still impressive, at least 14 feet high they tower over the gentle farmland of the Biggarsberg ridge. https://youtu.be/0FpLS6CYmag Work began on the fort by the Royal Engineers … Continue reading Fort Pine – A hidden gem of the Anglo-Zulu War
January 24, 2021 imagejunkies africa, Anglo-Zulu war, South Africa, Video
The Heroes of Rorke's Drift: Frank Bourne OBE, DCM
Transcript of the video that is embedded below: Today I'm talking about Frank Edward Bourne OBE DCM - or Colour Sergeant Bourne as he was during the battle of Rorke's Drift. He was the senior British NCO present at the battle, but unlike many of his colleagues he was never awarded the Victoria Cross. You probably remember him from … Continue reading The Heroes of Rorke's Drift: Frank Bourne OBE, DCM
January 8, 2021 imagejunkies africa, Anglo-Zulu war, South Africa, Video
The Heroes of Rorke's Drift: James Langley Dalton VC
This is the third part of my "Heroes of Rorke's Drift" series…and today we are learning all about the man who many consider to have been the unsung hero and the brains behind the successful British defence of Rorke's Drift.
January 5, 2021 imagejunkies africa, Anglo-Zulu war, South Africa
The heroes of Rorke's Drift: Gonville Bromhead VC
Rorke's Drift – one of the most famous battles ever fought by the British army. Today we meet Lieutenant Gonville Bromhead (pronounced Brumhead) – The man played by Michael Cain in the film Zulu. But who was Bromhead? What had he done in his career before the battle and what happened to him afterwards?


text:
Freeway, artiestennaam van Leslie Pridgen (Philadelphia, 8 juli 1979) is een Amerikaans rapper.

Hij staat onder contract bij Jay-Z's Roc-a-Fella Records. Hij staat bekend om zijn afwisselende rijm in zijn songteksten en zijn lange baard die te maken heeft met zijn Islamitisch geloof.

Albums
 2003 Philadelphia Freeway
 2007 Free at Last
 2008 Phinally Phree
 2009 Philadelphia Freeway 2

Externe links
 Officiële website van Freeway

Amerikaans rapper


One of the fastest growing cities in America, unbalanced construction defect laws have prevented the much-needed development of condominium properties for several years. Now on the brink of reform, Crown was tapped to lead what will be Denver's tallest building as Executive Architect and Development Manager. The tower will contain ground level retail, a boutique luxury hotel, three restaurants, over 500 parking spaces, and 300 condominium residences. Crown's involvement with the project began fall '16 when Principal Michael Santora visited the site and immediately identified a series of zoning bonuses that were not identified by the local architects being considered for the project. These findings resulted in an additional 200,000 gross square feet of development. 650 17th Street is currently in pre-con, and the current zoning recognized by Crown will allow for the tallest residential tower west of the Mississippi.


text:
Q: EF4.1 ConnectionString.ProviderName returning a different class I have been trying to retrofit an excellent implementation of EF that I found here.  Unfortunately the code was written for code first implementation and I am using model first since I already have the database up and running with another application.
In the ObjectContextBuilder.cs file is the following method:
public ObjectContextBuilder(string connectionStringName, string[] mappingAssemblies, bool recreateDatabaseIfExists, bool lazyLoadingEnabled)
{
    this.Conventions.Remove<IncludeMetadataConvention>();

    _cnStringSettings = ConfigurationManager.ConnectionStrings[connectionStringName];
    _factory = DbProviderFactories.GetFactory(_cnStringSettings.ProviderName);
    _recreateDatabaseIfExists = recreateDatabaseIfExists;
    _lazyLoadingEnabled = lazyLoadingEnabled;

    AddConfigurations(mappingAssemblies);
}

I assume the EDMX would contain the mappings that the previous method requires so I am attempting to add a simaliar method that would take in an ObjectContext of the EDMX like this:
 public ObjectContextBuilder(string connectionStringName, ObjectContext context, bool recreateDatabaseIfExists, bool lazyLoadingEnabled)
{
    this.Conventions.Remove<IncludeMetadataConvention>();

    _cnStringSettings = ConfigurationManager.ConnectionStrings[connectionStringName];
    _factory = DbProviderFactories.GetFactory(_cnStringSettings.ProviderName);
    _recreateDatabaseIfExists = recreateDatabaseIfExists;
    _lazyLoadingEnabled = lazyLoadingEnabled;
}

And here is the calling method:
    ObjectContextManager.InitStorage(new SimpleObjectContextStorage());
    var context = ((IObjectContextAdapter)new SidekickEntities());
    ObjectContextManager.Init("SidekickEntities", context.ObjectContext, true);

When execution gets to assigning _factory I get an error that states:
Unable to find the requested .Net Framework Data Provider.  It may not be installed.

When I look at _cnStringSettings, the Provider is System.Data.SqlClient but when assigning _factory the _cnStringSettings.ProviderName is System.Data.EntityClient.
I assume this is because I am trying to use the Entity generated by the EDMX and would like to know if there is a way to get my new method to work.  I am fairly new to the EF framework and am still in a steep learning curve so please let me know if I am completely off base on what I am trying.
Here is the connection string as it is stored in App.Config
<add name="SidekickEntities" connectionString="metadata=res://SidekickModel/SidekickModel.csdl|res://SidekickModel/SidekickModel.ssdl|res://SidekickModel/SidekickModel.msl;provider=System.Data.SqlClient;provider connection string="Data Source=percepsrvr;Initial Catalog=Sidekick;Integrated Security=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />

A: Having an existing database doesn't mean you have to use model first (fortunately). See Scott Gu's Using EF "Code First" with an Existing Database and the TechEd 2011 screencast Code First Development in Microsoft ADO.NET Entity Framework 4.1 for details. Worked pretty well for me.
I found it very painful to use EF Model First for things it doesn't provide easily. It gets ugly very fast, especially when messsing with the EDMX.

A: In case any comes across this post I found a solution to the problem which was to call an existing method in the code as follows:
_employeeRepository = new GenericRepository(new SidekickEntities());

GenericRepository is an object in the code that would take a DbContext directly.

redpajama_set_name: RedPajamaStackExchange


text:
<?php

namespace yii\apidoc\helpers;

use cebe\markdown\GithubMarkdown;
use yii\apidoc\models\TypeDoc;
use yii\apidoc\renderers\BaseRenderer;
use yii\helpers\Html;
use yii\helpers\Inflector;
use yii\helpers\Markdown;

/**
 * A Markdown helper with support for class reference links.
 *
 * @author Carsten Brandt <mail@cebe.cc>
 * @since 2.0
 */
class ApiMarkdown extends GithubMarkdown
{
    use ApiMarkdownTrait;

    /**
     * @var BaseRenderer
     */
    public static $renderer;

    protected $renderingContext;

    protected $headings = [];

    /**
     * @inheritDoc
     */
    protected function prepare()
    {
        parent::prepare();
        $this->headings = [];
    }

    public function parse($text)
    {
        $markup = parent::parse($text);
        $markup = $this->applyToc($markup);
        return $markup;
    }

    protected function applyToc($content)
    {
        // generate TOC
        if (!empty($this->headings)) {
            $toc = [];
            foreach ($this->headings as $heading)
                $toc[] = '
' . Html::a($heading['title'], '#' . $heading['id']) . '
';
            $toc = '

' . implode("\n", $toc) . "

\n";
            if (strpos($content, '
') !== false)
                $content = str_replace('
', "
\n" . $toc, $content);
            else
                $content = $toc . $content;
        }
        return $content;
    }

    /**
     * @inheritdoc
     */
    protected function renderCode($block)
    {
        if (isset($block['language'])) {
            $class = isset($block['language']) ? ' class="language-' . $block['language'] . '"' : '';

            return "
" . $this->highlight($block['content'] . "\n", $block['language']) . "
\n";
        } else {
            return parent::renderCode($block);
        }
    }

    /**
     * Highlights code
     *
     * @param string $code code to highlight
     * @param string $language language of the code to highlight
     * @return string HTML of highlighted code
     */
    public static function highlight($code, $language)
    {
        if ($language !== 'php') {
            return htmlspecialchars($code, ENT_NOQUOTES | ENT_SUBSTITUTE, 'UTF-8');
        }

        // TODO improve code highlighting
        if (strncmp($code, '<?php', 5) === 0) {
            $text = @highlight_string(trim($code), true);
        } else {
            $text = highlight_string("<?php ".trim($code), true);
            $text = str_replace('<?php', '', $text);
            if (($pos = strpos($text, ' ')) !== false) {
                $text = substr($text, 0, $pos) . substr($text, $pos + 6);
            }
        }
        // remove \n and tags added by php
        $text = substr(trim($text), 36, -16);

        return $text;
    }

    /**
     * @inheritDoc
     */
    protected function renderHeadline($block)
    {
        $content = $this->renderAbsy($block['content']);
        if (preg_match('~~', $content, $matches)) {
            $hash = $matches[1];
            $content = preg_replace('~~', '', $content);
        } else {
            $hash = Inflector::slug(strip_tags($content));
        }
        $hashLink = "¶";

        if ($block['level'] == 2) {
            $this->headings[] = [
                'title' => trim($content),
                'id' => $hash,
            ];
        }

        $tag = 'h' . $block['level'];
        return "<$tag>$content $hashLink</$tag>";
    }

    /**
     * @inheritdoc
     */
    protected function renderLink($block)
    {
        $result = parent::renderLink($block);

        // add special syntax for linking to the guide
        $result = preg_replace_callback('/href="guide:([A-z0-9-.#]+)"/i', function($match) {
            return 'href="' . static::$renderer->generateGuideUrl($match[1]) . '"';
        }, $result, 1);

        return $result;
    }

    /**
     * Converts markdown into HTML
     *
     * @param string $content
     * @param TypeDoc $context
     * @param boolean $paragraph
     * @return string
     */
    public static function process($content, $context = null, $paragraph = false)
    {
        if (!isset(Markdown::$flavors['api'])) {
            Markdown::$flavors['api'] = new static;
        }

        if (is_string($context)) {
            $context = static::$renderer->apiContext->getType($context);
        }
        Markdown::$flavors['api']->renderingContext = $context;

        if ($paragraph) {
            return Markdown::processParagraph($content, 'api');
        } else {
            return Markdown::process($content, 'api');
        }
    }
}

redpajama_set_name: RedPajamaGithub


text:
Trump's Next Target: The GOP?
His oldest son threatens Republicans who don't stand with his dad.
Tasos Katopodis/Getty
After Donald Trump is done trashing American democracy, he may have a new target: the Republican Party.
As Trump during the last few days has baselessly claimed that the election is a "fraud" and is being stolen from him, his henchmen have rushed to establish a litmus test for conservatives and the GOP: whether or not they rally to Trump's side and support his unfounded accusations. Like those defeated in the Civil War, they are setting up a new Lost Cause and creating a loyalty test: A true Republican stands with Trump in his crusade against the "corrupt" voting system that is trying to rob him of the presidency.
Though a few Republicans have joined Trump's attack on the election—Ted Cruz, Lindsey Graham, Newt Gingrich—the party and the conservative movement have not rushed to the barricades to defend Trump. Sen. Mitt Romney (R-Utah) tweeted: "Counting every vote is at the heart of democracy…Have faith in democracy, in our Constitution, and in the American people." Sen. Pat Toomey (R-Penn.) said Trump's accusations were "disturbing" and pointed out there was no evidence of fraud. Former New Jersey Gov. Chris Christie called on Trump to stop inflaming the situation. On Fox News, pro-Trump anchors did not amplify the president's claim of election theft (though they did complain mightily about the vote-counting system). The New York Post described a tweet from Donald Trump Jr.—calling for "total war"—a "clueless tweet." Conservative commentator Ben Shapiro rebuked Trump for claiming he had won: "It is deeply irresponsible for him to say this." On Friday morning, Senate Majority Leader Mitch McConnell said every vote should be counted, and ignored Trump's claim that the president was being shafted.
The lack of GOP solidarity with Trump's assault on the election has enraged Trumpers—especially Donald Trump Jr. He retweeted a conservative commentator who griped, "I can't help but think that a lot of republicans are hiding because they would rather be rid of Trump than fight." At a press conference in Atlanta on Thursday night—where no questions were taken—he angrily exclaimed that the Republican Party for too long had "no backbone" and that any Republican who didn't join Trump's fight to retain power "should go."
Eric Trump has also been trying to whip up support among Republicans. After Lindsey Graham donated $500,000 to Trump's legal defense fund, Eric Trump tweeted: "Thank you for having spine! Fight this fraud!" He retweeted right-wing commentator Dan Bongino's criticism of Republicans: "Awfully odd that some of the people on the GOP side, who just rode Trump's coattails to an enormous GOP down-ballot upset, seem pretty quiet about the bullshit going on right now. SPEAK UP. WE'RE ALL LISTENING!" And Eric Trump tweet-cried himself: "Where are Republicans! Have some backbone. Fight against this fraud. Our voters will never forget you if your sheep!"
Trump Jr. even appears to have a particular (and extreme) strategy in mind that he wants Republicans to adopt: press GOP-controlled state legislatures, such as the one in Pennsylvania, to nullify the counted vote and send a slate of pro-Trump electors to Congress. He retweeted a message from right-wing radio host Mark Levin, who urged state legislatures to choose electors. This would be a legally dubious move, but it could throw the election into turmoil and force a slew of court fights and possibly a battle within Congress. Graham, for one, has talked up the idea. But the Republican majority leader of the Pennsylvania senate has repeatedly said he does not support such a step. It's not too hard, though, to envision pro-Trumpers directing anger at him, should they decide to push forward with this desperate strategy.
Trump Jr. has done more than just moan about AWOL Republicans. He has issued a not-too-veiled threat to GOPers: If you don't stand with my father now, we will seek revenge, especially if you're considering running for the Republican presidential nomination in four years. On Thursday afternoon, he tweeted: "The total lack of action from virtually all of the '2024 GOP hopefuls' is pretty amazing. They have a perfect platform to show that they're willing & able to fight but they will cower to the media mob instead. Don't worry @realDonaldTrump will fight & they can watch as usual!" And in another tweet, Junior exclaimed, "For GOPers to not stand up now shows your true colors. Will make the 2024 primary process a lot easier."
Get it? As expected, the 2024 race has already begun. There has been speculation that Trump might run again. But there are plenty of other Republicans considering a bid. And what Trump Jr. was suggesting to them was that they'll likely need Trump's voters—and perhaps Trump's blessing—to win the nomination. But if they don't rush to Trump's side now, forget about it. Moreover, the entire GOP might become a target of Trump's wrath if it leaves him in his moment of need.
This could all be bluster. That runs in the family. But if Trump and his family come to believe they have been abandoned by the Republicans—stabbed in the back!—the party could face a rough ride, as the Trump crowd has a habit of pursuing vengeance. (Trump, as we know, is motivated by spite, spite, and spite.) The Republicans are going to have a tough time figuring out what to do after Trump. It won't be easier if there's an internecine battle between the Trump clan and party regulars.
Losing is lonely, and Trump has been stewing in the White House over who has his back. So far, most of the Republican Party—finally—is not tying itself to Trump's mast and joining his demagogic effort to delegitimize the election. But there might be a price to pay for this. Trump never forgets a grudge. He never forgives. A wounded, defeated Trump could become a serious problem for the GOP.


text:
function TiePointEditor(imageContainerDivName, editorCount) {
	this.divName = "imageWrapper" + editorCount;
	this.toolbarDivName = "imageToolbar" + editorCount;
	this.imageDivName = "image" + editorCount;
	this.addButton = "addPoint" + editorCount;
	this.removeButton = "removePoint" + editorCount;
	this.saveButton = "savePoint" + editorCount;
	this.cancelButton = "cancelPoint" + editorCount;
	this.imageNameField = "imageName" + editorCount;
	this.editorId = editorCount;
	this.activeControlPoint = null;
	this.img = null;
	this.isInitializing = false;

	var divText = '

';
	$('#' + imageContainerDivName).append(divText);
}

TiePointEditor.prototype.initialize = function(img, controlPoints) {
	if (this.isInitialzing) {
		return;
	}
	this.isInitializing = true;
	console.log("Initializing image " + img.name);
	$('#' + this.imageDivName).html("");
	$('#' + this.toolbarDivName).html("");
	$('#' + this.toolbarDivName).toggle(true);

	this.imgWidth = img.width;
	this.imgHeight = img.height;
	this.imgUrl = img.url;
	this.img = img;

	this.editorState = {};

	var imgWidth = this.imgWidth;
	var imgHeight = this.imgHeight;
	this.imgName = img.name;
	var url = this.imgUrl;
	var crossOrigin = 'anonymous';
	var that = this;
	this.selectedFeature = null;

	var imgCenter = [ imgWidth / 2, -imgHeight / 2 ];

	// Maps always need a projection, but Zoomify layers are not geo-referenced,
	// and
	// are only measured in pixels. So, we create a fake projection that the map
	// can use to properly display the layer.
	var proj = new ol.proj.Projection({
		code : 'ZOOMIFY',
		units : 'pixels',
		extent : [ 0, 0, imgWidth, imgHeight ]
	});

	var imgsource = new ol.source.Zoomify({
		url : url,
		size : [ imgWidth, imgHeight ],
		crossOriginKeyword : crossOrigin
	});

	var imgtile = new ol.layer.Tile({
		source : imgsource
	});

	this.drawsource = new ol.source.Vector();
	var inactiveStyle = new ol.style.Style({
//		image: new ol.style.Icon({
//		    anchor: [0.5, 0.5],
//		    anchorXUnits: 'fraction',
//		    anchorYUnits: 'fraction',
//		    opacity: 0.75,
//		    src: iconFolderUrl + "inactiveCtrlPt.png"
//		  })
		image : new ol.style.Circle({
			radius : 7,
			stroke : new ol.style.Stroke({
				color : INACTIVE_COLOR,
				width : 3
			})
		})
	});
	var activeStyle = new ol.style.Style({
		image : new ol.style.Circle({
			radius : 7,
			stroke : new ol.style.Stroke({
				color : ACTIVE_COLOR,
				width : 3
			})
		})
//		image: new ol.style.Icon({
//		    anchor: [0.5, 0.5],
//		    anchorXUnits: 'fraction',
//		    anchorYUnits: 'fraction',
//		    opacity: 0.75,
//		    src: iconFolderUrl + "activeCtrlPt.png"
//		  })
	});

	var vector = new ol.layer.Vector({
		source : that.drawsource,
		style : inactiveStyle
	});

	// populate drawsource with tie point information
	// for (var pt in this.editorState) {
	// var data = this.editorState[pt];
	// if (data.feature) {
	// that.drawsource.addFeature(data.feature);
	// }
	// }

	this.select = new ol.interaction.Select({
		condition : ol.events.condition.singleClick,
		addCondition : ol.events.condition.singleClick,
		removeCondition : ol.events.condition.never,
		toggleCondition : ol.events.condition.never,
		style : activeStyle
	});

	this.select.on('select', function (e) {
		// get the feature
		var feature = e.selected[0];
		if (feature != null) {
			$('#controlPointEditingStatus').html(
					"Selected a tie point " + feature.controlPoint.name
							+ " in image " + that.imgName);
			that.selectedFeature = feature;
			if (feature.controlPoint) {
					mainViewer.globalSelectControlPoint(feature.controlPoint);

			// ...listen for changes on it
				mainViewer.startTiePointEdit(that, feature.controlPoint);
				$('#controlPointEditingStatus').html(
						"Editing a tie point in image " + feature.controlPoint.name
								+ " in " + that.imgName);
//		});
			}
		}
	});

	this.modify = new ol.interaction.Modify({
		features : that.select.getFeatures(),
		style : activeStyle
	});

	this.modify.on('modifyend', function(e) {
		mainViewer.completeTiePointEdit();
	});

	this.map = new ol.Map({
		interactions : ol.interaction.defaults().extend(
				[ that.select, that.modify ]),
		layers : [ imgtile, vector ],
		target : this.imageDivName,
		controls : [], // Disable default controls
		view : new ol.View({
			projection : proj,
			center : imgCenter,
			zoom : 1
		})
	});

	var pointDrawingTool = new ol.interaction.Draw({
		source : that.drawsource,
		type : "Point" // can also be LineString, Polygon someday
	}); // global so we can remove it later

	pointDrawingTool.on('drawend', function(e) {
		// make the drawn feature a candidate for
		// modification
		that.currentAction = null;
		that.selectedFeature = e.feature;
		e.feature.controlPoint = that.activeControlPoint;
		that.editorState[that.activeControlPoint.id] = {
			feature : e.feature
		};
		that.map.removeInteraction(pointDrawingTool);
		that.select.getFeatures().clear();
		that.map.addInteraction(that.select);
		that.select.getFeatures().push(e.feature); // Make sure it continues to
													// be selected
		$('#' + that.addButton).prop("disabled", "disabled");
		$('#' + that.removeButton).prop("disabled", "");
		that.createTiePointFromFeature(e.feature);
		mainViewer.startTiePointEdit(that, e.feature.controlPoint);
//		});
	});

	// Set up the image editor toolbar buttons
	$('#' + this.toolbarDivName).append(
			'<button id="' + this.addButton + '"></button>');
	$('#' + this.addButton)
			.click(
					function(e) {
						console.log("start drawing");
						that.currentAction = "add";
						if (that.activeControlPoint != null) {
							$('#controlPointEditingStatus').html(
									"Adding a correspondence for "
											+ that.activeControlPoint.name
											+ " to image " + that.imgName);
							that.map.removeInteraction(that.select);
							that.map.addInteraction(pointDrawingTool);
						} else {
							alert("An control point must be chosen before adding tie points.");
						}
					})
	$('#' + this.toolbarDivName).append(
			'<button id="' + this.removeButton + '"></button>');
	$('#' + this.removeButton).click(
			function(e) {
				console.log("remove selected point");

				if (that.selectedFeature != null) {
					that.removeTiePoint(that.selectedFeature.controlPoint);
					$('#controlPointEditingStatus').html(
							"Removed the correspondence for "
									+ that.activeControlPoint.name
									+ " to image " + that.imgName);
				}
			})

	/*
	 * $('#' + this.toolbarDivName).append( '<button
	 * id="' + this.saveButton + '">Save</button>'); $('#' +
	 * this.saveButton).click(function(e) { console.log("save changes to the
	 * image"); $('#controlPointEditingStatus').html("Saved a correspondence for " +
	 * that.activeControlPoint.name + " to image " + that.imgName); }) $('#' +
	 * this.toolbarDivName).append( '<button id="' + this.cancelButton +
	 * '">Cancel</button>'); $('#' + this.cancelButton).click(function(e) {
	 * console.log("cancel changes to the image");
	 * $('#controlPointEditingStatus').html("Cancelled changes to the correspondence
	 * for " + that.activeControlPoint.name + " to image " + that.imgName); })
	 */
	$('#' + this.toolbarDivName)
			.append(
					'
' + this.imgName
							+ '');
	//
	// if (img.editorState == null) {
	// img.editorState = {};
	// } else {
	// for (var pt in img.editorState) {
	// var data = img.editorState[pt];
	// if (data.tiePoint) {
	// // Create feature
	// var tiePoint = data.tiePoint;
	//
	// feature.controlPoint = controlPoints[tiePoint.fields.geoPoint];
	// data.feature = feature;
	// console.log("Attempted to create a feature");
	// }
	// }
	// }
	console.log("Fetching tie points for image " + img.id);
	$.ajax({
		type : "GET",
		url : "/meta/fetchTiePoints",
		data : {
			imageId : img.id
		},
		success : function(data) {
			console.log("Retrieved " + data.length + " tie points for image "
					+ img.id);
			var editorState = {};
			that.filteredFeatures = [];
			for (var k = 0; k < data.length; k++) {
				var tiePoint = data[k];
				editorState[tiePoint.fields.geoPoint] = {
					tiePoint : tiePoint
				};
				var point = tiePoint.fields.point.coordinates;
				var feature = new ol.Feature({
					geometry : new ol.geom.Point([ point[0], -1 * point[1] ]),
					geoPoint : tiePoint.fields.geoPoint
				});
				feature.controlPoint = controlPoints[tiePoint.fields.geoPoint];
				editorState[tiePoint.fields.geoPoint].feature = feature;
				if (feature.controlPoint.isInActiveSet) {
					that.drawsource.addFeature(feature);
					mainViewer.updateTiePoint(that.img, tiePoint);
				} else {
					that.filteredFeatures.push(feature);
				}
			}
			that.editorState = editorState;
			if (that.activeControlPoint != null) {
				that.setActiveControlPoint(that.activeControlPoint);
			}
			that.isInitializing = false;
			mainViewer.incrementImageInitialized();
		},
		dataType : 'json'
	});
}

TiePointEditor.prototype.updateAvailableControlPoint = function(ctrlPt) {
	if (this.editorState != null) {
		var data = this.editorState[ctrlPt.id];
		if (data) {
			if (ctrlPt.isInActiveSet) {
				this.drawsource.addFeature(data.feature);
				mainViewer.toggleTiePoint(this.img, data.tiePoint, true);
			} else {
				this.drawsource.removeFeature(data.feature);
				mainViewer.toggleTiePoint(this.img, data.tiePoint, false);
			}
		} else {
			console.log("No data for control point " + ctrlPt.name);
		}
	}
}

TiePointEditor.prototype.markImageControlPointIds = function(keys) {
	for (var id in this.editorState) { // should be indexed by control point ID even if the point isn't visible
		keys[id] = true;
	}
}

TiePointEditor.prototype.blank = function() {
	this.activeControlPoint = null;
	this.img = null;
	this.isInitializing = false;
	this.editorState = {};
	$('#' + this.imageDivName).html("");
	$('#' + this.toolbarDivName).toggle(false);
	// $('#' + this.divName).toggle(false);
}

TiePointEditor.prototype.show = function(width, height) {
	$('#' + this.divName).css("height", height + '%');
	$('#' + this.divName).css("width", width + '%');
	$('#' + this.divName).toggle(true);
}

TiePointEditor.prototype.hide = function() {
	$('#' + this.divName).toggle(false);
}

TiePointEditor.prototype.getDebugInfo = function() {
	if (this.drawsource) {
		var farray = this.drawsource.getFeatures();
		var text = this.divName + '
';
		for (var i = 0; i < farray.length; i++) {
			var point = farray[i].getGeometry().getCoordinates();
			text += farray[i].controlPoint.name + " - " + point[0] + ", "
					+ point[1] + '
';
		}
		return text;
	} else {
		return this.divName + ' has no drawn features.
';
	}
	if (this.map) {
		var center = this.map.getView().getCenter();
		var zoom = this.map.getView().getZoom();

		return "Center - " + center + " Zoom - "+ this.map.getView().getZoom() + "
";
	} else {
		return "No image displayed.
";
	}
}

/**
 * Set the active control point
 */
TiePointEditor.prototype.setActiveControlPoint = function(cp) {
	this.activeControlPoint = cp;
	if (cp != null) {
		console.log("Set active control point for image editor");
		if (this.currentAction == "add") {
			$('#controlPointEditingStatus').html(
					"Adding a correspondence for "
							+ this.activeControlPoint.name + " to image "
							+ this.imgName)
		}
		if (this.drawsource && cp) {
			var farray = this.drawsource.getFeatures();
			this.select.getFeatures().clear();
			if (this.editorState[cp.id] && this.editorState[cp.id].feature) {
				this.select.getFeatures().push(
						this.editorState[cp.id].feature);
				$('#' + this.addButton).prop("disabled", "disabled");
				$('#' + this.removeButton).prop("disabled", "");
			} else {
				$('#' + this.addButton).prop("disabled", "");
				$('#' + this.removeButton).prop("disabled", "disabled");
			}
			mainViewer.startTiePointEdit(this, this.editorState[cp.id].feature.controlPoint);
		}
	} else {
		if (this.select) {
			this.select.getFeatures().clear();
			$('#' + this.addButton).prop("disabled", "disabled");
			$('#' + this.removeButton).prop("disabled", "disabled");
		}
	}
}

/**
 * Remove a tie point corresponding to a given control point.
 */
TiePointEditor.prototype.removeTiePoint = function(cp) {
	var that = this;
	var data = this.editorState[cp.id];
	var feature = data.feature;
	var tiePoint = data.tiePoint;
	if (this.drawsource && feature) {
		$.ajax({
			type : "GET",
			url : "/meta/deleteTiePoint",
			data : {
				id : tiePoint.pk
			},
			success : function(data) {
				console.log("Tie Point Removed");
				delete that.editorState[cp.id];
				that.select.getFeatures().clear();
				that.drawsource.removeFeature(feature);
				that.selectedFeature = null;
				$('#' + that.addButton).prop("disabled", "");
				$('#' + that.removeButton).prop("disabled", "disabled");
			},
			error : function() {
				alert("Unable to remove tie point");
			},
			dataType : 'html'
		});
	}
}

TiePointEditor.prototype.createTiePointFromFeature = function(feature) {
	var that = this;
//	var farray = this.drawsource.getFeatures();
	var point = null;
//	for (var i = 0; i < farray.length; i++) {
//		point = farray[i].getGeometry().getCoordinates();
//	}

	point = feature.getGeometry().getCoordinates();
	if (point != null) {
		console.log(this.img.id + ", " + feature.controlPoint.id + ", "
				+ Math.round(point[0]) + ", " + Math.round(-1 * point[1]));
		$.ajax({
					type : "GET",
					url : "/meta/createTiePoint",
					data : {
						imageId : that.img.id,
						controlPointId : feature.controlPoint.id,
						x : Math.round(point[0]),
						y : Math.round(-1 * point[1]),
						name : feature.controlPoint.name
					},
					success : function(data) {
						console.log("Tie Point Created");
						// Now fetch the result ???
						$.ajax({
									type : "GET",
									url : "/meta/fetchTiePoints",
									data : {
										imageId : that.img.id
									},
									success : function(data) {
										console.log("Retrieved tie points for image " + that.img.id);
										for (var i = 0; i < data.length; i++) {
											if (data[i].fields.geoPoint == feature.controlPoint.id) {
												that.editorState[feature.controlPoint.id].tiePoint = data[i];
												mainViewer.updateTiePoint(that.img, data[i]);
												break;
											}
										}
									},
									dataType : 'json'
								});
					},
					dataType : 'html'
				});
	} else {
		console.log("No features drawn");
	}
}

TiePointEditor.prototype.commitTiePointEdits = function(cp) {
	var that = this;
	var data = this.editorState[cp.id];
	var feature = data.feature;
	var point = data.feature.getGeometry().getCoordinates();
	console.log("Updating " + this.img.id + ", " + feature.controlPoint.id
			+ ", " + Math.round(point[0]) + ", " + Math.round(-1 * point[1]));
	$
			.ajax({
				type : "GET",
				url : "/meta/updateTiePoint",
				data : {
					tiePointId : data.tiePoint.pk,
					x : Math.round(point[0]),
					y : Math.round(-1 * point[1])
				},
				success : function(data) {
					console.log("Tie Point Updated");
					// Now fetch the result ???
					$
							.ajax({
								type : "GET",
								url : "/meta/fetchTiePoints",
								data : {
									imageId : that.img.id
								},
								success : function(data) {
									console
											.log("Retrieved tie points for image "
													+ that.img.id);
									for (var i = 0; i < data.length; i++) {
										if (data[i].fields.geoPoint == feature.controlPoint.id) {
											that.editorState[feature.controlPoint.id].tiePoint = data[i];
											mainViewer.updateTiePoint(that.img, data[i]);
											break;
										}
									}
								},
								dataType : 'json'
							});
				},
				dataType : 'html'
			});
}


text:
How not to manage a national carrier, in three easy steps
17 November 2019 - 00:05 By SUNDAY TIMES
The strike by crew and ground staff at SAA, which enters its third day today, could not have come at a worse time for the airline or the country. Just two weeks ago President Cyril Ramaphosa hosted his second investment summit, using it to assure potential investors that SA was open for business. They embraced his message, committing to invest R363bn.
Last year Ramaphosa appointed a team of envoys, including former Treasury stalwarts Trevor Manuel and Mcebisi Jonas, and sent them out into the world to attract investment and boost our ailing economy. The team has been preaching to whoever cares to listen that Ramaphosa's administration is hard at work creating a favourable environment for doing business in this country...
Requiem for a free spirit, Walter Meyer Opinion & Analysis


"I know it's impossible to stay safe but please try" were the last words Anderson Cooper said to Marie Colvin in their phone conversation, aired on AC360 Tuesday night. Sadly Cooper was correct, it was impossible to stay safe in Syria, Colvin died just a few hours later.
Our hearts go out to her family and her colleagues. May her death and the death of so many others in Syria not be in vain.
"On Monday I sent her a message; "Bravo Marie. Keep your head down." This morning I looked at the video of her body in a house in Homs. Her head down. Her voice silenced.
And we are all the poorer for that. Bless you Marie."
I couldn't believe it when I heard the news this morning. I can't imagine how Anderson must be feeling. Thoughts and prayers to her family and friends.
Such sad news. She was an amazing lady and died telling the stories we need to hear.
So sorry to hear of Marie Colvin's death, her bravery and reporting from the danger zones will be missed. Although it is well known how dangerous it is for citizens/journalists, I was still stunned to hear this sad news. I hope all the other reporters in Syria such as Arwa Damon can somehow remain safe in this extremely dangerous situation.
Thank you for posting Anderson's last interview with Marie in your lovely tribute. It is an unbelievable loss for a world that needs people to shine a bright light on injustice.
Very sad news for Marie Colvin's family and the families of the other journalists and photographer. The government forces were apparently targeting their building because they were the eyes and ears of the world and they won't walk away from reporting the horror that is present-day Syria.
Saying a extra prayer for Arwa Damon and all the others brave enough to stay in Syria.


Scroll to the bottom of the page to read the Mail & Guardian weekend cartoon.
The NEW Madam & Eve collection, THE GUPTAS ATE MY HOMEWORK, is out and is available at a good book store near you!!!
...or click HERE to order your copy of The Guptas Ate My Homework online from Loot.
Click HERE to follow Madam & Eve on Twitter!
Would you like to have Madam & Eve appear in your publication, magazine or newsletter?
Email us HERE for reprint enquiries.


1.1 Sehion Ministries ("SehionUK") is a charity registered with the Charity Commission in England and Wales and our number is 1153546. Registered address : 20 Brooke Road, Kenilworth, CV8 2BD. In this Notice, references to 'we' and 'us' means SehionUK.
1.3 When you provide us with Personal Data in order to engage with us and/or benefit from our activities, we may keep a record of the data you give to us in order to enable us to comply with our statutory and other legal obligations and to achieve our charitable objects of the advancement of the Catholic faith and Christian beliefs for the benefit of the public in accordance with the statements of beliefs of the Roman Catholic Church.
1.4 For the purpose of the General Data Protection Regulation 2016/279 (GDPR), SehionUK through its Trustees will be a Data Controller in respect of your Personal Data.
1.6 Use of Photos/Videos/Testimonies here int the website are with due permission from the people. They shall not be copied or published without prior written permission us.


text:
Jets will start Ryan Fitzpatrick against Patriots
By Daniel Popper
Jets quarterback Ryan Fitzpatrick will start against Pats on Sunday. (Bill Kostroun/AP)
Ryan Fitzpatrick will start Sunday's Jets game against the Patriots, Todd Bowles said Monday.
Bryce Petty, who started over Fitzpatrick for the Jets' loss to the Rams two weeks ago, will serve as the backup.
"He's healthy," Bowles responded when asked why he made the decision to start Fitzpatrick. "He's been our starter. I don't see anything that could change that right now."
Fitzpatrick had been limited in practice because of a sprained MCL he suffered in a loss to the Dolphins.
"He's been playing all year. He knows more of the system," Bowles added. "We can do more things with him. He's been the starter. I don't give away jobs. You got to take a job. Bryce has gotten better. He'll be ready to play if called upon."
sports iteam


An eye-opening guided tour that informs you of how the Devil played a role in Trier´s history. After the collapse of Rome, the mystical Middle Ages began in Trier, an epoche of dark myths and fear of the Devil´s supernatural powers. The Devil even played a role in the building of the Cathedral.
According to legend, Saint Helena, the mother of Roman Emperor Constantine, brought the Cathedral´s most precious holy relic, the "Heiligen Rock", Christ´s tunic, to Trier from her pilgrimage to the Holy Land.


Leaf peepers ring in the Autumn season all year long with our Handcrafted leather Maple Red and orange-gold leaves with brass bells. Hang on doors or wreaths. Handcrafted in Maine.
Handmade right here in Maine.
Choose you favorite leaf color.
Each leather leaf bell is sold separately.
Expect variations in color and shape from one leather leaf to another due to their handcrafted nature.
1-1/8" Solid cast brass bell.


These handy ring clips are used with porcelain rings in place of a pulley in manual drop curtains. They're commonly used in older drop curtain, roller curtain, or roller shade models. Made of plated steel, the ring clips are durable and malleable. Choose from three sizes below.
Pair with quality awning fabric, head rods, head rod clamps, and any other awning materials you need.


There has been a significant increase in the level of remote or distance learning using the Internet, often referred to as e-learning or online education. E-learning is often combined with classroom instruction and on-the-job training and this is referred to as blended learning. The purpose of this research is to investigate the impact blended learning has in improving engineering training in the engineering field of industrial automation. This is especially in improving the reaction, achievement and return on investment of learners compared to that of only the traditional classroom or e-learning approaches. One of the gaps in current research is the examination of the impact of blended learning in improving engineering training. The research revealed significant growth in the use of e-learning for engineers and technicians. There would however appear to be a large number of engineers and technicians who were disappointed with their experiences of e-learning. Significant concerns were also identified in the efficacy of e-learning and the lack of hands-on experience in this form of training for engineers and technicians. Suggestions are made as a result of the research into addressing these issues.
Web conferencing and remote laboratories as part of blended learning in engineering and science: A paradigm shift in education or more of the same?


We have three main services on Easter weekend: one service on Saturday at 6:00pm, and two services on Sunday morning at 9:00 & 10:45. An additional main service will be offered at 9:00am on Sunday in The Outlet with a more intimate setting. Each service lasts about 90 minutes.


We've seen some yacht concepts so futuristic and frankly "out there" that the laws of physics may well prevent them from ever being built. Italian naval architect Luca Vallebona's Pentagramma is not one of them; it's not only elegant and unique, but the 269-foot superyacht concept also looks like it could be moored today beside any other bespoke vessel in its class.
In English, "pentagramma" is a stave, or the set of lines and spaces on which music is written. It is an appropriate name for this concept because the yacht's glass superstructure, reinforced by vertical brass strips, seems to float musically over the angled cutouts of the hull sides. From a distance, the boat is simple and beautiful. But the superyacht's close-up details are what will really turn it into a maritime concerto.
Rather than relegating space on the yacht's foredeck for a helipad as so many designers often do, Vallebona substitutes a full-beam swimming pool and generous sunning area. A helipad is instead designed into the upper sundeck, where upon arrival via helicopter guests are ushered down a private stairway into a semi-enclosed courtyard. This court, one of the coolest features on any superyacht design, is protected by sunshades and a retractable awning, allowing for privacy and full water views.
On the main deck, Vallebona gives guests very nearly 10-foot ceilings, adding to the sense of space and flow. And the main-deck owner's apartment features two balconies—one with a secret bar where crew can prepare the owner's breakfast for a private meal on the water. Four large guest suites aft lead directly to the open stern area, which includes the spacious beach club and swim platform.
Finally, besides the amidships spa, gym, hammam, and the aft cinema, Pentagramma has what every fantasy yacht requires: a submarine garage.


text:
CW's Green Arrow And The Canaries Spinoff Is Officially Dead
Arrow kicked off the CW's sprawling universe of superheroes, but bow-wielding vigilantes will not carry the torch forward. The network has decided not to move forward with its Green Arrow and the Canaries spinoff, according to reports from Deadline and Variety.
Throughout Arrow's seventh and eighth seasons, actress Katherine McNamara starred as Mia Smoak, the future daughter of characters Oliver Queen and Felicity Smoak. Her character began life in a version of Star City set in 2040, but the run up to the Crisis on Infinite Earths crossover brought her into the modern day, where she met and worked with her father before the Crisis event ultimately took his life and brought the Arrow series to an end in its eighth season.
Before the show ended, though, the CW gave us a backdoor pilot for a potential spinoff titled Green Arrow & The Canaries. The episode was set back in 2040, and featured McNamara as Mia Smoak, and brought over Katie Kassidy's Laurel Lance and Juliana Harkavy's Dinah Drake, two of the Canary heroes who appeared throughout Arrow's run.
Continue Reading at GameSpot
Previous Marvel's Moon Knight Grabs Two New Directors For Disney+
Next 9 Things We Want To See In Zelda: Breath Of The Wild 2


text:
Five Years of Cringe: Prime Time Romance and Late Night Camp
If the comparison ofthen andnow is anything to go by, mainstream film and television have made LGBT people more visible over the past two decades. But my diary seems to support the fact that that progress in diversity in broadcasting over years has been woefully slow.
Julia Wagner
Writes about memory, film and the media industry
16/12/2015 11:59am GMT | Updated December 16, 2016
I've been grinning at the television lately. I have been reeled in by First Dates (Channel 4, Thursdays, 10pm). Its feel-good romance and simple format make perfect Winter evening viewing. Along with the rest of the Twittersphere, I cheered on the transgender and other LGBT daters, congratulating our culture for celebrating some diversity at last.
First Dates, Caitlyn, Jack Monroe, and the superb Transparent have got me thinking about the visibility of LGBT people in mainstream film and television today, particularly in comparison to twenty years ago. 2015 has indeed been, in cultural terms, the year of the trans. But it's also been the year of checking one's privilege, so I shall attempt to tread sensitively in this post: I'm writing about the diversity of mainstream culture and my perspective on films and television as a teenage girl in the 1990s. The source for my highly-subjective, non-scientific musings is my teenage diary, which I wrote between the ages of 13 and 18 from 1994-1998.
Blind Date is one of the programmes which I mentioned most frequently and consistently in my diary over the years. Like 18 million other Brits, it was a fixture of my Saturday nights. I've been wondering what might take the place of Blind Date for the viewing public today, and First Dates is a strong contender. Could Blind Date have ever shown LGBT contestants? I don't think there ever were any same-sex couples on Blind Date. I think the most diverse they ever got was showing the "oldies".
If the comparison of Blind Date then and First Dates now is anything to go by, mainstream film and television have made LGBT people more visible over the past two decades. But my diary seems to support the fact that that progress in diversity in broadcasting over years has been woefully slow.
I say that Blind Date was "one of the programmes" I frequently wrote about in my diary, because it stands up there with Prisoner Cell Block H. I would often sneak downstairs, after bed time, to watch with my parents who were too glued to the television to object to me and often my brother joining them; obviously we couldn't just pause the television back in those days. And so there we'd all be in our pyjamas watching The Freak, Reb, Pixie all the rest fight it out with wonderful Aussie bad language which we repeated with gusto. Unfortunately, Prisoner was scheduled later and later as the years went on and we lamented the 1am bed times on school nights, but I can't say it did me any harm. It taught me resilience. And it introduced me to the actors whom I'd subsequently see in Neighbours, in roles tailored for mainstream popular entertainment.
I loved Prisoner. It was gripping and dramatic. I loved the shaky sets, the hyperbolic acting and the feeling that I was watching something exciting, naughty and alternative. I don't recall being aware that it was camp, or a fixture of gay culture, but I had a bit of a wake-up call when my father took me and my brother to see the Prisoner Cell Block H: The Musical in 1995. I was 15 - I wrote in my diary that it was "Brilliant - great fun!" I remember we had a laugh about how there weren't many other dads taking their teenage children. And there was a fair amount of leather in the audience. Looking up the show now, I see that Lily Savage was starring along with Maggie Kirkpatrick (Joan "The Freak" Ferguson"). My attitude was: It's fun, it's good, there are lesbians, and men in drag, so what?" However, it wasn't quite mainstream and I knew it.
The 1990s were times of change though. 1994 was the year of the first pre-watershed lesbian kiss on British television. I was 13, and I didn't watch Brookside, but I remember the public storm anyway.
Also in 1994, I wrote in my diary on 12 November: "S. came in the afternoon and we saw "The Adventures of Priscilla Queen of the Dessert". It was sooooo funny, about Drag queens, with Guy Pearce, and at the beginning the guy came into the theatre all dressed up!!!!!" I watched Priscilla several times, so I remember it well. But there are some films which I wrote about in my diary which I now don't remember at all. A few days before I saw Priscilla, I wrote: "I got v. v. tired coz I wanted to watch Peter's Friends after Beavis + Butthead."
Of course I remember Beavis and Butthead. But not Peter's Friends, so I looked it up. In it, Stephen Fry leads an all-star British cast, playing a man - probably but not openly gay - who reveals his diagnosis as HIV-positive during a reunion he hosts with former University friends.
My diary shows how the late-night slots given to certain films and programmes contributed to the sense of their being "alternative": they had to be viewed by young viewers furtively and often sleepily.
I think it's safe to say that we still have a very long way to go in terms of media presence and representation of LGBT people. I can't predict what the next 20 years hold for mainstream television, indeed if there even will be such a thing in 2035. But without a doubt, romance will continue to fuel plots, draw audiences, and attract willing contenders in the game of love. And I'll be there, watching in my pyjamas.
uk entertainmentTelevision lgbtTransgendertransgender issues


BBN offer A36 steel stock Forging Low-carbon steel,hot sell Forging c45 material application ,SA36,A283,A572 steel,offer all kinds of Forging Low-carbon steel stock in China.
c45 material application. Journal of Materials Chemistry A - or.nsfc.gov.cn. Until now, there are a number of reports on InIII-based ionic frameworks.
Alibaba offers 50 c45 material specification products. About 10% of these are steel pipes. A wide variety of c45 material specification options are available to you, such as astm, bs, and gb.
Carbon Steel C45 Is a medium carbon steel, used when greater strength and hardness is desired than in the "as rolled" condition. Extreme size accuracy, straightness and concentricity combine to minimize wear in high speed applications.
material composition of C40. astm a537 cl 2. fe 410 s steel. astm gr 65 steel. ship ms plate. Alloy Steel. mechanical property of jsc270cc. p235 gh steel. ... have c45 application suppliers and manufacturer ,if you need c45 application price and specification ,please contact us.


text:
Q: Tuning FILLFACTOR for high-UPDATE tables in Postgres 13 HOT and FILLFACTOR Results
I've got some high-UPDATE tables where I've adjusted the FILLFACTOR to 95%, and I'm checking back in on them. I don't think that I've got the settings right, and am unclear how to tune them intelligently. I took another pass through Laurenz Albe's helpful blog post on HOT updates
https://www.cybertec-postgresql.com/en/hot-updates-in-postgresql-for-better-performance/
... and the clear source code READ ME:
https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/backend/access/heap/README.HOT
Below is a query, adapted from the blog post, to check the status of the tables in the system, along with some sample output:
SELECT relname,
       n_tup_upd                                          as total_update_count,
       n_tup_hot_upd                                      as hot_update_count,
       coalesce(div_safe(n_tup_upd,     n_tup_hot_upd),0) as total_by_hot,
       coalesce(div_safe(n_tup_hot_upd, n_tup_upd),0)     as hot_by_total

FROM pg_stat_user_tables
order by 4 desc;

A few results:
relname            total_update_count    hot_update_count    total_by_hot   hot_by_total
rollups                        369418                 128    2886.0781      0.00034649097
q_event                         71781                 541    132.68207      0.007536813
analytic_scan                 2104727               34304     61.35515      0.016298551
clinic                           4424                  77     57.454544     0.017405063
facility_location              179636                6489     27.683157     0.03612305
target_snapshot                   494                  18     27.444445     0.036437247
inv                           1733021               78234     22.151762     0.045143135

I'm unsure what ratio(s) I'm looking for here. Can anyone advise me how to read these results, or what to read to figure out how to interpret them?
Are These UPDATEs HOTable?
I didn't address this basic point in the original draft of this question. I checked my patch from a few months back, and I ran SET (fillfactor = 95) and then VACUUM (FULL, VERBOSE, ANALYZE) on 13 of my tables. (The VERBOSE is in there as I had some tables that couldn't VACUUM because of a months-old process that needed clearing out, and that's how I found the problem. pg_stat_activity is my friend.)
However, at least most touch an indexed column...but with an identical value. Like 1 = 1, so no change to the value. I've been thinking that that is HOTable.  If I'm wrong about that, bummer. If not, I'm mostly hoping to clarify what exactly the goal is for the relationships amongst fillfactor, n_tup_upd, and n_tup_hot_upd.
SELECT relname,
       n_tup_upd                                          as total_update_count,
       n_tup_hot_upd                                      as hot_update_count,
       coalesce(div_safe(n_tup_upd,     n_tup_hot_upd),0) as total_by_hot,
       coalesce(div_safe(n_tup_hot_upd, n_tup_upd),0)     as hot_by_total,
       (select value::integer from table_get_options('data',relname) where option = 'fillfactor') as fillfactor_setting

FROM pg_stat_user_tables
WHERE relname IN  (
    'activity',
    'analytic_productivity',
    'analytic_scan',
    'analytic_sterilizer_load',
    'analytic_sterilizer_loadinv',
    'analytic_work',
    'assembly',
    'data_file_info',
    'inv',
    'item',
    'print_job',
    'q_event')

order by 4 desc;

Results:
+-----------------------------+--------------------+------------------+----------------------+----------------------+--------------------+
| relname                     | total_update_count | hot_update_count | total_divided_by_hot | hot_divided_by_total | fillfactor_setting |
+-----------------------------+--------------------+------------------+----------------------+----------------------+--------------------+
| q_event                     |              71810 |              553 |            129.85533 |         0.0077008773 |                 95 |
+-----------------------------+--------------------+------------------+----------------------+----------------------+--------------------+
| analytic_scan               |            2109206 |            34536 |            61.072678 |          0.016373934 |                 95 |
+-----------------------------+--------------------+------------------+----------------------+----------------------+--------------------+
| inv                         |            1733176 |            78387 |            22.110502 |          0.045227375 |                 95 |
+-----------------------------+--------------------+------------------+----------------------+----------------------+--------------------+
| item                        |             630586 |            32110 |            19.638306 |           0.05092089 |                 95 |
+-----------------------------+--------------------+------------------+----------------------+----------------------+--------------------+
| analytic_sterilizer_loadinv |           76976539 |          5206806 |            14.783831 |           0.06764147 |                 95 |
+-----------------------------+--------------------+------------------+----------------------+----------------------+--------------------+
| analytic_work               |            8117050 |           608847 |            13.331839 |           0.07500841 |                 95 |
+-----------------------------+--------------------+------------------+----------------------+----------------------+--------------------+
| assembly                    |              90580 |             7281 |           12.4405985 |           0.08038198 |                 95 |
+-----------------------------+--------------------+------------------+----------------------+----------------------+--------------------+
| analytic_sterilizer_load    |              19249 |             2997 |             6.422756 |            0.1556964 |                 95 |
+-----------------------------+--------------------+------------------+----------------------+----------------------+--------------------+
| activity                    |               3795 |              711 |            5.3375525 |           0.18735178 |                 95 |
+-----------------------------+--------------------+------------------+----------------------+----------------------+--------------------+
| analytic_productivity       |             106486 |            25899 |            4.1115875 |           0.24321507 |                 95 |
+-----------------------------+--------------------+------------------+----------------------+----------------------+--------------------+
| print_job                   |               1414 |              388 |            3.6443298 |           0.27439886 |                 95 |
+-----------------------------+--------------------+------------------+----------------------+----------------------+--------------------+
| data_file_info              |             402086 |           285663 |            1.4075537 |            0.7104525 |                 90 |
+-----------------------------+--------------------+------------------+----------------------+----------------------+--------------------+

(I just looked for and found an on-line table generator to help out with this kind of example at https://www.tablesgenerator.com/text_tables. It's a bit awkward to use, but faster than building out monospaced aligned text manually.)
FILLFACTOR and HOT update ratio
Figured I could sort this out a bit by adapting Laurenz Albe's code from https://www.cybertec-postgresql.com/en/hot-updates-in-postgresql-for-better-performance/.  All I've done here is make a script that builds out a table with a FILLFACTOR of 10, 20, 30.....100% and then updated it in the same way for each percentage. Every time the table is created, it is populated with 256 records, which are then updated 10 times each. The update sets a non-indexed field back to itself, so no value actually changes:
UPDATE mytable SET val = val;

Below are the results:
+------------+---------------+-------------+--------------+
| FILLFACTOR | total_updates | hot_updates | total_to_hot |
+------------+---------------+-------------+--------------+
|         10 |          2350 |        2350 |         1.00 |
+------------+---------------+-------------+--------------+
|         20 |          2350 |        2350 |         1.00 |
+------------+---------------+-------------+--------------+
|         30 |          2350 |        2350 |         1.00 |
+------------+---------------+-------------+--------------+
|         40 |          2350 |        2350 |         1.00 |
+------------+---------------+-------------+--------------+
|         50 |          2350 |        2223 |         1.06 |
+------------+---------------+-------------+--------------+
|         60 |          2350 |        2188 |         1.07 |
+------------+---------------+-------------+--------------+
|         70 |          2350 |        1883 |         1.25 |
+------------+---------------+-------------+--------------+
|         80 |          2350 |        1574 |         1.49 |
+------------+---------------+-------------+--------------+
|         90 |          2350 |        1336 |         1.76 |
+------------+---------------+-------------+--------------+
|        100 |          2350 |         987 |         2.38 |
+------------+---------------+-------------+--------------+

From this, it seems that when the total_to_hot ratio rises, there may be a benefit to increasing the FILLFACTOR.
https://www.postgresql.org/docs/13/monitoring-stats.html
n_tup_upd counts all updates, including HOT updates, and n_tup_hot_upd counts HOT updates only. But it doesn't seem to be a count of "could have been a HOT update, if we hadn't run out of room on the page." That would be great, but it also seems like a lot to ask for. (And maybe more expensive to keep track of that can be justified?)
Here is the script. I edited and re-ran the test with each FILLFACTOR.
-- Set up the table for the test
DROP TABLE IF EXISTS mytable;

CREATE TABLE mytable (
   id  integer PRIMARY KEY,
   val integer NOT NULL
) WITH (autovacuum_enabled = off);

-- Change the FILLFACTOR. The default is 100.
ALTER TABLE mytable SET (fillfactor = 10);  -- The only part that changes between runs.

-- Seed the data
INSERT INTO mytable
SELECT *, 0
FROM generate_series(1, 235) AS n;

-- Thrash the data
UPDATE mytable SET val = val;
SELECT pg_sleep(1);

UPDATE mytable SET val = val;
SELECT pg_sleep(1);

UPDATE mytable SET val = val;
SELECT pg_sleep(1);

UPDATE mytable SET val = val;
SELECT pg_sleep(1);

UPDATE mytable SET val = val;
SELECT pg_sleep(1);

UPDATE mytable SET val = val;
SELECT pg_sleep(1);

UPDATE mytable SET val = val;
SELECT pg_sleep(1);

UPDATE mytable SET val = val;
SELECT pg_sleep(1);

UPDATE mytable SET val = val;
SELECT pg_sleep(1);

UPDATE mytable SET val = val;
SELECT pg_sleep(1);

-- How does it look?
SELECT n_tup_upd                          as total_updates,
       n_tup_hot_upd                      as hot_updates,
       div_safe(n_tup_upd, n_tup_hot_upd) as total_to_hot

  FROM pg_stat_user_tables

 WHERE relname = 'mytable';

Checking the FILLFACTOR Setting
As a side-note, I wanted a quick call to check the FILLFACTOR setting on a table, and it turned out to be more involved than I thought. I wrote up a function that works, but could likely see some improvements...if anyone has suggestions. I call it like this:
select * from table_get_options('foo', 'bar');

or
select * from table_get_options('foo','bar') where option = 'fillfactor';

Here's the code, if anyone has improvements to offer:
CREATE OR REPLACE FUNCTION dba.table_get_options(text,text)
  RETURNS TABLE (
    schema_name text,
    table_name  text,
    option      text,
    value       text
)

LANGUAGE SQL AS

$BODY$
WITH
packed_options AS (
select pg_class.relname as table_name,
       btrim(pg_options_to_table(pg_class.reloptions)::text, '()') as option_kvp -- Convert to text (fillfactor,95), then strip off ( and )

 from pg_class
 join pg_namespace
   on pg_namespace.oid = pg_class.relnamespace

where pg_namespace.nspname = $1
  and relname              = $2
  and reloptions    is not null
),

unpacked_options AS (
select $1                             as schema_name,
       $2                             as table_name,
       split_part(option_kvp, ',', 1) as option,
       split_part(option_kvp, ',', 2) as value

    from packed_options
)

select * from unpacked_options;

$BODY$;

A: The numbers show that your strategy is not working, and the overwhelming majority of updates are not HOT. You also show the reason: Even if you update an indexed column to the original value, you won't get a HOT update.
The solution would be to differentiate by including the indexed column in the UPDATE statement only if it is really modified.
A fillfactor of 95 is also pretty high, unless you have tables with really small rows. Perhaps you would get better results with a setting like 90 or 85.


text:
Home | Amazing | Today | Tags | Publishers | Years | Account | Search
Today's Books
Apple Pro Training Series : Optimizing Your Final Cut Pro System, 9780321268716 (0321268717), Peachpit Press, 2005
Welcome to the official training course for optimizing Final Cut Pro systems. This book is a guide to installing, configuring, managing, and troubleshooting Final Cut Pro in real-world post-production workflows. It is intended for independent, commercial, and corporate video editors as well as post-production houses and system integratorsanyone who wants to move beyond a simple Final Cut Pro installation and make the most of his or her professional nonlinear editing system.
If it's good enough for the legendary Hollywood film editors, it's good enough for you! This guide is aimed squarely at Final Cut Pro users just like yourself--at corporate, commercial, and independent post-production houses--who want to move beyond simple Final Cut Pro installations for their film and video masterworks. Through project-based lessons and step-by-step instructions, this self-paced guide shows you how to integrate high-end capture cards, storage systems, and other industry-standard hardware into a Final Cut Pro workflow, as well as how to install and configure Final Cut Pro to make the most of your professional non-linear editing system. This is the technical information most frequently requested by Final Cut Pro users, pulled together into one book that is both a self-paced learning tool and the official curriculum for the Apple Pro Training and Certification Program. The guide covers everything from system configuration, storage, and device connectivity to the intricacies of SAN solutions, and includes special sections on optimizing short-form/broadcast workflows and long-form/HD workflows. It offers troubleshooting advice at every turn: for dropped frames, mismatched audio and audio distortion; imported graphic file issues, media management, file recovery and archiving strategies, and much more. DVD with lesson files and media included.
(HTML tags aren't allowed.)
Amazing Books
Think Perl 6: How to Think Like a Computer Scientist
O'Reilly, 2017
Want to learn how to program and think like a computer scientist? This practical guide gets you started on your programming journey with the help of Perl 6, the younger sister of the popular Perl programming language. Ideal for beginners, this hands-on book includes over 100 exercises with multiple solutions, and more than 1,000 code...
Intelligent Freeway Transportation Systems: Functional Design
Intelligent Freeway Transportation Systems: Functional Design focuses on the efficient use of resources in the design of ITS. It discusses the principles of top down design starting with objectives and requirements, and provides guidance for the development and evaluation of functional design alternatives according to...
Switching to a Mac Portable Genius
The stats tell us that people are switching from Windows to the Mac in record numbers, but those stats don't tell us why. Perhaps it's because Windows users would like to actually enjoy using a computer for a change. Perhaps it's because Macs just work: you take them out of the box, plug them in, and within minutes...
The Warren Buffett Way
Warren Buffett is the most famous investor of all time and one of today's most admired business leaders. He became a billionaire and investment sage by looking at companies as businesses rather than prices on a stock screen. The first two editions of The Warren Buffett Way gave investors their first in-depth look at the...
Using Chef with Microsoft Azure
Apress, 2016
This book is your hands-on guide to infrastructure provisioning and configuration management in the cloud using Chef's open source, cross-platform toolset. With over 10,000 customers joining the Microsoft Azure cloud platform each week and steadily increasing usage, the need for automation approaches has never been greater. This book...
Visual Basic 2005 with .NET 3.0 Programmer's Reference
Wrox Press, 2007
With this completely up-to-date tutorial and reference, you'll quickly learn how to develop Visual Basic (VB) programs that leverage the latest features of Vista and .NET 3.0. The tutorial section walks you through VB.NET from scratch, providing you with in-depth descriptions of the development environment, basic program syntax, and standard...
©2020 LearnIT (support@pdfchm.net) - Privacy Policy


We have the following job opportunities . . .
ADV-CARE Pharmacy offers career opportunities for qualified pharmacists, technicians and support staff, you will be part of a community health care team serving Long Term care facilities as well as businesses and individuals. We provide a 24 hour on-call service, with personalized service for both. prescription and non-prescription drugs.
At the present time our staff needs are being met. However we encourage you to forward your resume for consideration during this period of our growth.