text:
Below, you'll find links to some of my magazine and newspaper articles and columns. They cover a wide range of topics, from complex medical and business issues to entangled family dramas.
I also accept shorter assignments, and have covered breaking news for The New York Times, Reuters, The Washington Post, and The Wall Street Journal, including coverage of a landmark voting-rights trial and the merger between Duke Energy and Progress Energy.
I also do projects for corporate and nonprofit clients that aren't journalism but use a lot of the same skills. I wrote this report in 2017 for the U.S. Chamber of Commerce. Other projects include e-books, research reports, case studies for capital campaigns, speech writing and grant applications. Please contact me if you want to see more examples of these assignments.
Teflon's River of Fear. A deep dive into the controversy over an essential chemical, published in Fortune's 500 issue.
After a law school closes. The plight of the students who attended the Charlotte School of Law, in the Washington Post Magazine.
Grief is a Jumble Word. This was my essay published on Longreads about grief and loss.
Name Game. The silliness of changing the name at Piedmont Triad International Airport, in Business North Carolina.
Healthcare Mergers: What's at stake in the merger between UNC and Carolinas HealthCare. Business North Carolina.
Local Flavor. A look at entrepreneurialism through the eyes (nose?) of a flavoring company. Business North Carolina.
Up in smoke. Understanding the buyout of Reynolds American. Business North Carolina.
Cardinal's true feathers. The fight over the managed-care entity that runs Medicaid in North Carolina. Business North Carolina.
Store Wars. How the arrival of Lidl is upsetting grocery carts around the state. Business North Carolina.
The Mystery that is Melania. A profile in the Washington Post Magazine about Melania Trump. Yes, that Melania Trump.
Hammer blow. A cover story in the Washington Post Magazine about rage, murder and rock climbing.
Beyond Spam. A profile of Hormel Foods and its efforts to become a more holistic food company. Published in Fortune magazine's Fortune 500 issue.
Participatory Budgeting. This is a piece for Yes! Magazine about a new way of sharing power in cities. It left me encouraged about democracy.
Urban Parks. Part of National Geographic's year-long celebration of parks, this story in the April issue of the magazine explores the innovation behind a new generation of public spaces.
Shameless. A cover story in the Washington Post Magazine on Joe Morrissey and his career of turning scandal into political gold.
Don't Panic. The first column I wrote for Business North Carolina magazine, part of a grand experiment.
The Glazers' Way. Reuters. A profile of one of the most powerful families in the world of sports.
Graves of the Dead. Published in Longreads and The New New South, this piece is a reported essay on the Grave Creek Mound in Moundsville, W. Va.
Passive Aggressive. Business North Carolina. Making sense of Treasurer Janet Cowell and the empire she has built.
Life on the passionate fringe. The Washington Post Magazine. A profile of a long-time political activist and the price of taking a stand.
KimKim. The Washington Post. A piece for the food section about Korean hot sauce and our changing American palate.
The Report. Business North Carolina. A cover story on the 50th anniversary of the Surgeon General's report, and how that changed our state.
A gathering of the Moog people. Fortune. Woodstock for the tech set. A really cool event focused on the Moog synthesizer.
The Energy Boom's Mighty Middleman. Fortune. This piece, published in the Fortune 500 issue, is a deep dive into the pipeline business and the realities of our energy-intensive economy.
The Surrender. The Washington Post Magazine. The town of Appomattox, Va., as it awaits the 150th anniversary of the end of the Civil War. A profile of a community in transition.
The Rise and Fall of Renegade. Business North Carolina. The amazing story of a cigarette entrepreneur and the empire he built and lost.
Preserving a vanishing way of life. National Geographic. Published on the magazine's website, this story explores efforts to save the Gullah Geechee culture along the Southeast coast.
The Tillis win. The Wall Street Journal. Why Kay Hagan lost her race for reelection, published on the paper's Washington Wire.
Uncle Sam's River. Fortune. A look at the lost legacy of the Tennessee
Valley Authority.
Now, About that Brand. Business North Carolina. Has the state's shift to the right harmed its brand?
The Rift. The Washington Post Magazine. This piece is on the epic fight between the family members who own Luray Caverns.
Vapor Trails. Business North Carolina. The rise of the e-cig and how Big Tobacco is changing the game. Click here to read.
Putting the Gas in Gastronomy. Fortune. For you "Sheetz freaks"
out there, this is my story on the "convenience-restaurant" chain.
The Healing Machine. Fortune. This story is about a sprawling patent fight over a piece of medical technology. One of my favorites. Click here to read it.
Charlotte, after the banking crisis. Fortune. The financial center awaits its closeup for the Democratic National Convention. Click here to read it.
Honey, I bought a fair. The Washington Post Magazine. The collapse and rescue of the State Fair of Virginia. Click here to read it.
Power Struggle. Fortune. This story is about the challenge of getting wind energy out of Wyoming. It has fantastic art. Click here to read it.
The Untamable River Trade. Fortune. Here's my trip down through the waterways of the Midwest, riding coal and chemical barges. Click here to read it.
Alcoa and the Great North Carolina Power Grab. Fortune. This story was my first big freelance assignment. It's about Alcoa and its dams in North Carolina.
On the lighter side, this is a piece I did after leaving the world of
newspaper management, about my stint as a census enumerator.
Click here to read the Dec. 2010 report I co-authored on media and information issues for the Winston-Salem Foundation.
Ken Otterbourg
Census.pdf
Sheetz.pdf


Just a quick update; Dragon Con has us down tentitively for Friday and Saturday nights at 1am in the Hyatt Hanover CDE. Same place as last year.
We will be checking ID at the door. Kilt guys gotta sign a model release form if they wanna get blown so I can use the pictures for posters and calendars. Hopefully I'll have two photographers this year. There is a limit to the number of men that I'm able to blow in one night so we ask that if you come, come prepared to put on a show. Remember boys, we like to be teased. We want Pin Ups, not Center Folds.
For the last few days the wonderful people at Super Mario Marathon have been playing just about every Mario game ever made to raise money for Child's Play, a charity for which my dearest has literally sold herself for in the past.
Their ultimate goal seems to be the odd but possibly significant value of $124,564.85.
They are currently at $57,530.00 and appear to have a few days of steam left in them. Let's get them over the hump and help children across the world take their mind off the pains in their bodies and onto the soreness of their thumbs.
The last day at the beach. Of course it's sunny and perfect. We have to eat everything out of the freezer in the beach house rental so breakfast is drumstick ice cream diet coke float. I know, diet coke sullies the float and you're supposed to use vanilla, not drumstick, but it's that or ginger ale and that's what I'm planning for lunch. One last slather of sun block and nap in the sand. Gotta go jump in the waves and get some salt in my ears and sand between my toes so that when I go home tomorrow I can find sand in my shoes and remember that just that morning, I was at the ocean.


text:
Q: Sum of max elements in sub-triangles I attempted this last question from this year's CCC 2019 S5.
Problem statement:
In a parallel universe, the most important data structure in computer science is the triangle. A triangle of size M consists of M rows, with the ith row containing i elements. Furthermore, these rows must be arranged to form the shape of an equilateral triangule. That is, each row is centred around a vertical line of symmetry through the middle of the triangle. For example, the diagram below shows a triangle of size 4:

A triangle contains sub-triangles. For example, the triangle above contains ten sub-triangles of size 1, six sub-triangles of size 2 (two of which are the triangle containing (3,1,2) and the triangle containing (4,6,1)), three sub-triangles of size 3 (one of which contains (2,2,1,1,4,2)). Note that every triangle is a sub-triangle of itself.
You are given a triangle of size N and must find the sum of the maximum elements of every sub-triangle of size K.
Input Specification
The first line contains two space-separated integers N and K (1≤K≤N≤3000).
Following this are N lines describing the triangle. The ith of these lines contains i space-separated integers ai,j (0≤ai,j≤10^9), representing the ith row of the triangle.
For 4 of the 15 available marks, N≤1000.
Output Specification
Output the integer sum of the maximum elements of every sub-triangle of size K.
Sample Input
4 2
3
1 2
4 2 1
6 1 4 2

Output for Sample Input
23

Unfortunately my solution gave TLE verdict, and I don't know how to optimize it.
The question basically asks to find maximum elements of subtriangles and add them together. My approach's straightforward, I iterate each elements of the large triangle making them a "root" of a subtriangle then I try to go to each of its elements to find max and add them to the result.
I need some help on improving my solution, does it require some data structure?
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    vector<vector<int>> triangle;

    int n;
    int k;

    cin >> n >> k;

    for (int i = 0; i < n; ++i)
    {
        triangle.push_back(vector<int>(i + 1, 0));

        for (int j = 0; j <= i; ++j)
            cin >> triangle[i][j];
    }

    int sum = 0;

    for (int level = 0; level <= n - k; ++level)
        for (int root = 0, size1 = triangle[level].size(); root < size1; ++root)
        {
            int largest = 0;

            for (int i = level, counter = 0; i < level + k; ++i, ++counter)
                for (int j = root, times = 0, size2 = triangle[i].size(); j < size2 && times <= counter; ++j, ++times)
                    largest = max(largest, triangle[i][j]);

            sum += largest;
        }

    cout << sum << "\n";

    return 0;
}

A: Here is a solution that can be made O(n^2 log(k)) which is fast enough.
The idea is this.  Going from the nxn triangle of triangles of size 1 to the (n-1)x(n-1) triangle of max values of triangles of size 2 is a O(n) operation.  Just compare each triangle to the max of its neighbors.
The same trick can be used to go from that second triangle to the (n-2)x(n-2) triangle of triangles of size 2.  But instead if you skip one in each direction, you can get directly to the (n-3)x(n-3) triangle of max values in triangles of size 4.  Also in time O(n).  To illustrate the latter suppose that we started with:
    2
   3 1
  1 2 4
 4 2 1 5
6 1 4 2 3

To get to the size 2 triangles we compare each triangle to its neighbors.
   3
  3 4
 4 2 5
6 4 4 5

And to get to the size 4 triangle compare skipping one, so the bottom one we compare 6, 3, 4.  The next over we compare 4, 4, 5 and so on.  To get:
 5
6 5

And then we add them together to get 11.
Next, from the (n-3)x(n-3) triangle of max values in triangles of size 4 you can go directly to the triangle of max values in triangles of sizes 5, 6, 7, or 8 by choosing the size of the triangles we'll compare to be next, skip 1, skip 2 or skip 3.
And so on resulting in O(log(k)) steps to get the triangle of max values in k by k triangles.

A: Here is my solution:
#include <iostream>
#include <vector>

using namespace std;

int max3(int a, int b, int c)
{
    return max(a, max(b,c));
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n,k;
    cin>>n>>k;
    vector<vector<long long>> triangle;
    for(int i = 0; i < n; i++)
    {
        triangle.push_back(vector<long long>(i + 1, 0));
        for (int j = 0; j <= i; j++)
            cin >> triangle[i][j];
    }
    for(int size = 2; size <= k; size++)
        for(int i = 0;i <= n - size; i++)
            for(int j = 0; j <= i; j++)
                triangle[i][j] = max3(triangle[i][j], triangle[i+1][j+1], triangle[i+1][j]);
    long long sum = 0;
    for(int i = 0;i <= n - k; i++)
        for(int j = 0; j <= i; j++)
            sum += triangle[i][j];
    cout<<sum;
}

Explanation:
I will call the upmost square of a triangle the top of the triangle.
May t(i, j, k) be the biggest number in a triangle with top at i, j and size k.
From this we observe the following facts:

*

*t(i, j, 1) = triangle[i][j]

*Every triangle with top at (i, j) of size k>=2 can be made by taking the union of 3 other triangles of size k-1 with tops at (i, j), (i+1, j) and (i+1, j+1)

*Therefore the biggest number in a triangle with top at (i, j) of size k>=2 is going to be the maximum of the max numbers of these 3 triangles or written as a formula:

*t(i, j, k) = max( t(i, j, k-1), t(i+1, j, k-1), t(i, j+1, k-1) )
So all we need to do is store the maximum values of the triangle for the previous k. Since we are going to iterate the triangle starting from the top we can overwrite the value currently in it since the formula only uses triangles under it and itself to calculate the value for the new k. The program should start from size = 2 and calculate the new value for all sizes until k by using the old values. I also use long long cause it's better to be safe than sorry. Hope this helps!

redpajama_set_name: RedPajamaStackExchange


text:
est une série télévisée néerlandaise en douze épisodes de 45 minutes créée par Michal Aviram et diffusée entre le  et le  sur NPO 3.

Il s'agit de l'adaptation israélienne Metim LeRega diffusée en 2014.

Cette série est inédite dans tous les pays francophones.

Synopsis

Production

Fiche technique
 Titre :
 Création :
 Producteurs exécutifs :
Costumes : Vreneli van Helbergen
 Date de diffusion :

Distribution

Acteurs principaux
 Lisa Smit : Daniëlle « Daan » Veldhoven
 Stefanie van Leersum : Nienke de Wit
 Jouman Fattal : Amira el Kadi
 Tobias Nierop : IJsbrand van Dedem
 Willem Voogd : Ivan Zabolotski
 Tarikh Janssen : Zeger
  : Karl Lunshof
 Carine Crutzen : Mevrouw Veldhoven
 Mike Weerts : Jasper Overbeeke
 Sanne Langelaar : Jasmijn Adema

Acteurs secondaires
 Loes Schnepper : Mieke
 Mandela Wee Wee : Pele
 Ali Ben Horsting : Van Tonningen
 Karien Noordhoff : Petra
 Mads Wittermans : Mike
 Hassan Slaby : l'ami d'Amira (un épisode)

Références

Liens externes

Série télévisée créée en 2016
Série télévisée néerlandaise des années 2010
Série télévisée dramatique

redpajama_set_name: RedPajamaWikipedia


Approach recognises that some men may struggle to engage in their preferred individual activities in a traditional day opportunity setting. In light of this we operate male specific groups called Men in Sheds, these groups are available in the City of Stoke-on-Trent and Newcastle area.
Men in Sheds groups are designed to provide a structured enjoyable day for men and to enable them to engage in meaningful activities such as gardening, DIY, joinery and other specific interests. There are also occasional visits and trips out to places of interest.
Group sizes are kept to a minimum so that everyone has plenty of help and support. They run between 10am-3pm, meeting at local venues. Transport and a hot meal are provided.
Payment for Men in Sheds may be either privately funded or determined by your self-assessment.


text:
Q: How to access components of the 256 bit ps vector How to efficiently access the elements of the 256-bit vector? For example I calculated the dot product with
c = _mm256_dp_ps(a, b, 0xff);

How to access the value in c then? I need to get both high part and low part, do I understand correctly that I first need to extract 128 bit parts like this:
r0 = _mm256_extractf128_ps(c,0);
r1 = _mm256_extractf128_ps(c,1);

And only then extract floats:
_MM_EXTRACT_FLOAT(fr0, r0, 0);
_MM_EXTRACT_FLOAT(fr1, r1, 0);

return fr0 + fr1;

A: Well, you could just store to memory and then work with scalars:
float v[8];
*(__m256)(v) = _mm256_dp_ps(a, b, 0xff);
float result = v[0] + v[4];

You could also swap the top to the bottom half of the 256-bit register and add, like this:
__m256 c = _mm256_dp_ps(a, b, 0xff);
__m256 d = _mm256_permute2f128_ps(c, c, 1);
__m256 result = _mm256_add_ps(c, d);

Likely much faster than either option is to do 4x 8-wide dot products at a time and reduce them together.  A sketch:
d0 = _mm256_dp_ps(a[0], b[0], 0xff);
d1 = _mm256_dp_ps(a[1], b[1], 0xff);
d2 = _mm256_dp_ps(a[2], b[2], 0xff);
d3 = _mm256_dp_ps(a[3], b[3], 0xff);

d01 = _mm256_permute_ps(d0, d1, ...);
d23 = _mm256_permute_ps(d2, d3, ...);
d0123 = _mm256_permute_ps(d01, d23, ...);

d0123upper = _mm256_permute2f128_ps(d0123, d0123, 1);
d = _mm256_add_ps(d0123upper, d0123); // lower 128 bits contain the results of 4 8-wide dot products

A: There is no efficient way to do this. dp_ps operation itself is slow and subsequent extraction is slow. Unless one can process more data in a batch it's faster to use SSE4 instructions to calculate dot product and operate with 128 bits than with 256 bits.


text:
Абатство "Санта Мария ди Вецолано" () е религиозна сграда в романски и готически стил, един от най-важните средновековни паметници в италианския регион Пиемонт, разположена в община Албуняно в провинция Асти, Северна Италия. Наименованието "абатство" се използва неправомерно и от управляващите държавни органи, тъй като църквата никога не е била такава. Правилното име е Canonica di Santa Maria di Vezzolano.

От декември 2014 г. италианското Министерство на културното наследство и дейности го управлява чрез Музеен комплекс "Пиемонт", който през декември 2019 г. става Регионална музейна дирекция. Абатството е включено в Трансроманския културен маршрут на Съвета на Европа.

Топонимът "Вецолано"

Има няколко хипотези за произхода на името на местността, между които и тази за родството с gens Vetia или в центъра на село Везле (Vézelay) във Франция, където вече съществува абатство по времето на Карл Велики. Средновековният или регионален произход на топонима от Vezzola или Vetiola със значението на "съд за вода" вероятно е по-надежден, като се има предвид, че близо до абатството тече поток.

Основаване
Традицията проследява основаването на църквата до Карл Велики. Според една по-разпространена хипотеза през 773 г. императорът е на лов в гората на Вецолано, когато внезапно от гробница се появяват три скелета, което го уплашва. Помага му отшелник и е приканен да се помоли на Богородица, така че пожелава да построи абатска църква на мястото на видението.

Въпреки че някои историографии понякога поддържат версията, че църквата Санта Мария вече съществува през лангобардския период и че след това е разрушена от сарацините, документацията в този смисъл е непълна или несъществуваща.

Най-старият известен документ датира от 1095 г. Той споменава двамата църковни лица Теодулус и Егидий, които получават като  дар от няколко благородници църква, посветена на Света Мария, плюс други свързани с нея имоти, с ангажимента да основат религиозна общност. От тази по-ранна постройка няма следа.

Изграждането на църквата, такава каквато е видима през 21 век, започва през втората половина на 12 век, вероятно благодарение на ангажимента на Гуидоне (Видоне), запомнен на олтарната преграда вътре в сградата. В началото на 13 век е завършена църквата, докато останалата част от комплекса, включително манастирът и клоатърът, са завършени в следващите векове.

Стилистично комплексът се намира между романския и готическия стил. Пясъчникът и тухлата характеризират архитектурния стил на абатството, базиран на бихромия от редуващи се двуцветни ленти, общи за други италиански архитектурни школи, по-специално за лигурийските и тосканските.

Абатството е обитавано от религиозни лица до началото на 19 век, когато по време на Наполеоновото управление църковната институция е разпусната.

Камбанария и апсиди

Камбанарията се намира в началото на левия кораб на църквата. Тя има романска структура и е преустроена на върха. Параклисът покрай апсидата, който се опира на нея, е реконструиран през 20 век, следвайки следите на оригиналния, какъвто е случаят с апсидата на върха на капитулната зала. Основната апсида все още е тази от втората половина на 12 век.

Фасада

Фасадата, украсена в горната част с облицовка от теракота, редуваща се с хоризонтални ленти от камък, е типично романска и напомня на ломбардските и пизанските архитектурни мотиви. Има три реда слепи галерии (с изключение на централната, прекъсната от двусводести прозорци), украсени с тънки колони.

Големият двусводест прозорец е с ценна композиция, характеризираща се с фигурата на Иисус Христос, до когото са двамата архангели Михаил и Рафаел, въоръжени съответно с копие и с меч. В карето над прозореца са изобразени два ангела, носещи свещ, редуващи се с три легена от полихромна керамика, ислямско производство. По-нагоре има два серафима с шест крила, облегнали на колела (последният атрибут обаче е типичен за херувимите). Най-отгоре, в ниша, доминира неясен бюст, вероятно на Бог Отец.

От трите оригинални портала само два са все още видими: този отдясно е изчезнал (тъй като съответният кораб е почти напълно интегриран в манастира), докато левият, макар и зазидан, все още е украсен от красив люнет с централен барелеф (доста повреден) и две странични скулптури на човешки лица.

Богатият главен портал има колони, капители и стълбове, украсени предимно с фантастични животни и фитоморфни и геометрични мотиви. В люнета е изобразена Богородица на трона: два ангела я обграждат, докато Светият Дух под формата на гълъб ѝ шепне в ухото.

Интериор
Интериорът е в романско - готически стил с френски и ломбардски влияния. Понастоящем се състои от два кораба – централен и ляв, а десният е включен в клоатъра през втората половина на 13 век. Сводовете са заострени с оребрени дъги.

Централният кораб е разделен напречно от фино декорирана олтарна преграда (или jubé) – архитектурен модел, който сега е рядък в Италия, но все още е доста често срещан в църквите отвъд Алпите. Структурата от пясъчник е от Бургундската школа; дългият надпис изяснява, наред с други неща, че работата е завършена през 1189 г. Олтарната преграда се опира на пет заострени дъги и е украсена с два насложени реда полихромни скулптурни декорации. В горния, посветен на Мадоната, могат да се видят три епизода от Успение Богородично: Свалянето от кръстта, Пробуждането и Триумфът в небесата (в центъра), в допълнение към четирите символа на Евангелистите. В долната част е представена поредицата от патриарси, от Авраам до Йосиф, според родословието на Иисус, съставено от Матей; любопитното е, че 5 от 40-те патриарси не са на преградата, а са изрисувани на колоните, които я обграждат (трима на лявата колона и двама на дясната), което предполага, че структурата първоначално е била няколко метра по-дълга, може би защото е била предвидена за различно местоположение и след това е намалена в момента на текущото ѝ поставяне.В лявата пътека, точно зад олтарната преграда, капител с барелеф изобразява Самсон, който се бие с лъва; библейският герой е уловен в момента, в който разтваря челюстите му.
Главният олтар пази ценен триптих от рисувана теракота, датиращ от средата на 15 век; в задната апсида, отстрани на централния прозорец, може да се видят два каменни барелефа със забележителна изработка (датиращи от втората половина на 12 век), изобразяващи архангел Гавраил и Богородица.

Сводът на апсидалния басейн, направен от редуващи се ленти от тухли и пясъчник, създава завладяващ и почти хипнотичен оптичен ефект, наравно с други по-известни съвременни структури, като параклисът "Сан Галгано" в Монтесиепи (Киуздино).

В края на централния кораб, вдясно, има връзката с малък красив клоатър с разнородни в архитектурно отношение аркади.

Клоатър и свързаните с него пространства

Влизайки в клоатъра, отляво има врата, обградена от два прозореца с колони: това е достъпът до капитулната зала. По-нататък друга врата води в голямата къща за гости. И в двете има две постоянни фотографски изложби, едната от които е посветена на символичното използване на математическите и геометричните пропорции в средновековни религиозни сгради, а другата има за цел да илюстрира богатата типология на романските църкви в провинция Провинция Асти.

Между североизточното и северозападното крило на клоатъра двата ъглови капитела са украсени с Житие на Богородица.

Четирите страни на клоатъра не са хомогенни една с друга, тъй като са направени в три отделни фази; разликите се забелязват, като се наблюдават стените, които гледат към вътрешната градина:
 Северозападната част, построена през втората половина на 13 век, използвайки пространството на бившия десен кораб на църквата, се осветява благодарение на три големи готически двусводести прозореца с каменни колони;
 подобен прозорец също украсява съседната североизточна страна, която обаче продължава, изцяло в тухли, с две леко понижени дъги, поддържани от кубични капители, които от своя страна почиват на многоъгълни колони; тази част от клоатъра, както и следващата на югоизток, е най-новата, датира от 15 век и претърпява промени и през следващите векове.
 Югоизточната страна е изградена от четири големи тухлени арки, идентични с тези от североизточната страна; от това крило има достъп до трапезарията.
 Югозападната страна, която стилистично се различава ясно от другите три, е най-старата (12 век) може би най-интересната: тя се състои от осем заострени арки, които се редуват между каменни колони и цилиндрични стълбове в смесена работа (тухла и камък) – решение, което придава на тази част от клоатъра приятен пластичен и хроматичен ефект, обогатен от присъствието в горната част на някои малки прозорци и страничен балкон.

Стенописи

По цялото северозападно крило на клоатъра са запазени редица ценни стенописи. Взети заедно, тези картини, обект на реставрация в началото на 90-те години на 20 век, представляват един от най-интересните живописни цикли на пиемонтския 14 век:
 В първата арка, точно над входа на клоатъра, има люнет с готическа фреска във френски стил, изобразяваща Богородица на трона, до която има два ангела с кадилници.
 На стената на втората арка (гробището на Ривалба), която е най-богатата и най-добре запазената, са представени четири различни сцени, разположени една върху друга. Отгоре надолу: Христос Пантократор сред символите на евангелистите, Поклонението на влъхвите с поклонник, представен от ангел, Контрастът на тримата живи и тримата мъртви, Легнал покойник в червена дреха (последната фреска е в лошо състояние). Контрастът понякога се тълкува, неправилно, като представяне на легендата за Карл Велики. От другата страна, в горната част на прозореца, който се отваря към градината, има частично Разпятие. На една от частите на свода могат да се видят останките на Св. Григорий Велики – единствените оцелели от изображенията на четиримата отци на църквата.
 Третата арка показва сложна сцена: в центъра е Богородица на трона с Младенеца; отляво духовник предлага модел на църква на Богородица – дар, чийто посредник е ангел; вдясно е представен Свети Августин в епископски одежди; в началото на сцената е Агнецът.
 На четвъртата арка има още един Христос Пантократор, запазен само отчасти, тъй като през 18 век на стената е поставено стълбище и е отворен достъп до олтарната преграда вътре в църквата; основната част от стенописите също е загубена.
 Стената на петата арка (гробището на Радикатите), освен още един Христос Пантократор, изобразява рицар в броня, до когото са поставени Св. Йоан Кръстител, който коленичи до Богородица на трона, до която е Св. Петър.
 И накрая, на задната стена има по-стара версия на Контрастът, но само фрагментарна. Двамата оцелели рицари вдигат ръце към небето (соколът бяга от единия) в поза на изумление и ужас, когато виждат тримата мъртви да се появяват, от които е останал малък фрагмент. Контрастът е доминиран от Разпятие, също фрагментарно.

Овощна градина
През 1996 г. Управлението за архитектурно и екологично наследство на Пиемонт стартира идеята за създаване на традиционна градина в земята зад абатството и поверява това парче земя на доброволна дейност под егидата на Леонардо Мосо и Карло Фрутеро. Групата се формира в "Овощна градина на Каноника "Вецолано" – Комитет за опазване на селския пейзаж" и решава да пресъздаде в парцела на канониката овощна градина, подобна на тази, от която древните рисунки запазват следи. Решено е да се култивира ябълковото дърво, защото е по-подходящо за климата на Северна Италия, за почвите на хълмовете на Пиемонт и за по-голямата му устойчивост на паразити.

Галерия с изображения

Вижте също

 Пиемонт
 История на Пиемонт

Бележки

Изкуство на Италия
Музеи в Италия
Пиемонт
Италиански абатства


Jiahui Oak Foreign Language School, in partnership with the wider community, is to provide students with a well-balanced education that will inspire morally and ethically responsible people, developing the qualities of global leaders. We will provide a safe, nurturing, well-resourced and challenging learning environment for students to explore global education through a blend of international and national pathways and pedagogical approaches. The 2019 Model United Nation Conference began at 14th of January. The candidates will attend the MUN conference meeting and visit top universities to experience the beautiful nature view and culture.


GSSF President Mr. Ryan McKinnon (front right) hands over ear and eye protection to the OC, TSU Mr. Guy Nurse (front center) in the presence of GSSF Director Mr. Aleemul Ali (front left), while flanked by ranks of the TSU.
The Guyana Sport Shooting Foundation in keeping with international sport shooting standards has adopted the policy of mandatory ear and eye protection for all shooting events. "Compliance to safety while handling firearms is always paramount," reiterated President of the GSSF, Mr. Ryan McKinnon in his comments while handing over a donation to the Guyana Police Force to celebrate the 4th Anniversary of the GSSF last week.
The GSSF ensures that all members follow all firearm safety rules and are personally protected during shooting by wearing protective gear for their eyes and ears. All shooters, instructors, range safety officers, scorers and spectators in proximity to the shooting points are required to wear eye protection while the range is hot.
The Foundation in strengthening its partnership with the Police Force made the donation to aid the safe training and development of ranks with firearms. The equipment is thus specifically targeted for use by the Training Section of the Tactical Services Unit. The presentation of the ear and eye protective equipment was made at Police Headquarters, Eve Leary, Georgetown to the OC, TSU, Mr. Guy Nurse.
Assistant Commissioner, Mr. Clifton Hicken opined that he appreciates the Foundation's recognition of the importance of safety while handling firearms.
The Foundation looks forward to continued collaboration with the Guyana Police Force and commits to giving assistance, building capacity and aiding in the general development of the force and its ranks where possible.
The GSSF wishes to thank all its members, partners, collaborators and supporters for the valuable contributions made towards the development of the organisation and by extension the sport of shooting in Guyana. The Board of Directors wishes to express its continued commitment and dedication to the development of the Foundation while working closely with local regulatory departments and authorities.


There could not have been a more beautiful day for Leo and Mollie's White Lake wedding in September. The sun was shining and family and friends came from all over the country to help celebrate the joining of these two lives.
Mollie was an absolutely radiant bride. Her gown featured lace, gorgeous sequin detailing, and cap sleeves. She wore pearls, as a classy bride does. And Mollie was surrounded by a group of beautiful, supportive friends in navy gowns and blush pink bouquets.
Leo was a dapper groom in his grey suit. His eyes glowed with excitement over seeing his bride. Once he saw her? The smile never left his face. The groomsmen's matching grey suits were complimented by blush boutonnieres Mollie hand crafted leading up to this White Lake wedding day. It was clear that both families were excited to be adding a new son and daughter to the mix.
After a beautiful Catholic ceremony, the celebration of the new Mr. and Mrs. Continued with a fun, energetic reception. The tables featured butcher paper and crayons for guests to draw on while they waited. Cowbells were strewn throughout the room, ringing on the couple for a kiss (or ten). One of my favorite details was the wedding favors: custom playing cards.
The most noteworthy moment of the day came during the reception. Leo and Mollie let us steal them from their reception for a jaw-dropping sunset session. There's very few things that can beat a South Dakota sunset, but adding in an amazing White Lake wedding made this a sunset hard to be beat.
Finally, for this White Lake wedding I partnered with my dear friend Michaela of MKMphotog. She is so incredibly talented and our work is very complimentary. As a result she has become the perfect partner to make sure that every moment of the wedding is captured. Double the photographers means double the photos and I hope Leo and Mollie are just as pleased with their photos as we were.
Congratulations, Leo and Mollie! I cannot wait to hear how your love for one another continues to grow.
Michaela and I would love to partner and tell your love story! Click here to learn more.


» Magaldrate and Simethicone Oral Suspension contains not less than 90.0 percent and not more than 110.0 percent of the labeled amount of magaldrate [Al5Mg10(OH)31(SO4)2], and an amount of polydimethylsiloxane [–(CH3)2SiO–]n that is not less than 85.0 percent and not more than 115.0 percent of the labeled amount of simethicone.
Packaging and storage— Preserve in tight containers, and keep from freezing.
B: Wash the precipitate obtained in Identification test A with hot ammonium chloride solution (1 in 50), and dissolve the precipitate in hydrochloric acid. Divide this solution into two portions: the dropwise addition of 6 N ammonium hydroxide to one portion yields a gelatinous white precipitate, which does not dissolve in an excess of 6 N ammonium hydroxide. The dropwise addition of 1 N sodium hydroxide to the other portion yields a gelatinous white precipitate, which dissolves in an excess of 1 N sodium hydroxide, leaving some turbidity.
C: Transfer an amount of Oral Suspension, equivalent to about 1 g of magaldrate, to a 100-mL centrifuge tube. Add about 60 mL of water, insert the cap, and shake for 3 minutes. Centrifuge the suspension, and discard the supernatant. Repeat the washing of the residue with three 60-mL portions of water. Transfer the residue to a 250-mL beaker, and heat on a steam bath to dryness: the X-ray diffraction pattern (see X-ray Diffraction 941 ), in the d-spacings region below 2.57 angstrom units, of the residue so obtained conforms to that of USP Magaldrate RS.
D: The IR absorption spectrum, in the 7- to 15-µm region, determined in a 0.1-mm cell, of the Assay preparation prepared as directed in the Assay for polydimethylsiloxane exhibits maxima only at the same wavelengths as that of the Standard preparation prepared as directed in the Assay for polydimethylsiloxane.
Test preparation— Transfer an accurately measured quantity of Oral Suspension, equivalent to about 1 g of magaldrate, to a 100-mL volumetric flask, add 30 mL of dilute hydrochloric acid (1 in 10), shake to dissolve, dilute with water to volume, and mix.
Other requirements— Evaporate a volume of Oral Suspension, equivalent to about 5 g of magaldrate, on a steam bath to dryness: the residue so obtained meets the requirements of the tests for Arsenic and Heavy metals under Magaldrate.
Assay for magaldrate— Transfer an accurately measured quantity of Oral Suspension, equivalent to about 3 g of magaldrate, to a beaker. Add 100.0 mL of 1 N hydrochloric acid VS, and mix, using a magnetic stirrer to achieve dissolution. Titrate the excess acid with 1 N sodium hydroxide VS to a pH of 3.0, determined potentiometrically. Perform a blank determination (see Residual Titrations under Titrimetry 541 ). Each mL of 1 N hydrochloric acid is equivalent to 35.40 mg of magaldrate [Al5Mg10(OH)31(SO4)2].


text:
package com.billybyte.spanjava.mains;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.billybyte.commonstaticmethods.Utils;
import com.billybyte.mongo.MongoDoc;
import com.billybyte.mongo.MongoWrapper;
import com.billybyte.spanjava.mongo.SpanMongoUtils;
import com.billybyte.spanjava.mongo.expanded.CombCommGroupDoc;
import com.billybyte.spanjava.mongo.expanded.CurrencyConversionDoc;
import com.billybyte.spanjava.mongo.expanded.ExchangeDoc;
import com.billybyte.spanjava.mongo.expanded.FirstCombCommDoc;
import com.billybyte.spanjava.mongo.expanded.ProductSpecsDoc;
import com.billybyte.spanjava.mongo.expanded.subdocs.RiskArrayParamBlockDoc;
import com.billybyte.spanjava.mongo.span.CombCommProdIdDoc;
import com.billybyte.spanjava.mongo.span.DeliveryChargeDoc;
import com.billybyte.spanjava.mongo.span.InterCommSpreadInfo;
import com.billybyte.spanjava.mongo.span.InterCommTierInfo;
import com.billybyte.spanjava.mongo.span.InterMonthSpreadSummaryDoc;
import com.billybyte.spanjava.mongo.span.RiskArrayDoc;
import com.billybyte.spanjava.mongo.span.RiskDataDoc;
import com.billybyte.spanjava.mongo.span.subtypes.InterCommSpreadLeg;
import com.billybyte.spanjava.mongo.span.subtypes.InterMonthSpreadDetail;
import com.billybyte.spanjava.mongo.span.subtypes.InterMonthSpreadLeg;
import com.billybyte.spanjava.mongo.span.subtypes.SpanProdId;
import com.billybyte.spanjava.mongo.span.subtypes.TierRange;
import com.billybyte.spanjava.recordtypes.expanded.CombinedCommGroups;
import com.billybyte.spanjava.recordtypes.expanded.CurrencyConversionRate;
import com.billybyte.spanjava.recordtypes.expanded.ExchangeHeader;
import com.billybyte.spanjava.recordtypes.expanded.FirstCombComm;
import com.billybyte.spanjava.recordtypes.expanded.FirstPhysical;
import com.billybyte.spanjava.recordtypes.expanded.InterCommScanTiers;
import com.billybyte.spanjava.recordtypes.expanded.InterCommSpreads;
import com.billybyte.spanjava.recordtypes.expanded.IntraCommTiers;
import com.billybyte.spanjava.recordtypes.expanded.PriceSpecs;
import com.billybyte.spanjava.recordtypes.expanded.RiskArrayParams;
import com.billybyte.spanjava.recordtypes.expanded.SecondCombComm;
import com.billybyte.spanjava.recordtypes.expanded.SecondPhysical;
import com.billybyte.spanjava.recordtypes.expanded.ThirdCombComm;
import com.billybyte.spanjava.recordtypes.expanded.subtypes.CombCommCode;
import com.billybyte.spanjava.recordtypes.expanded.subtypes.IntraCommSpreadLeg;
import com.billybyte.spanjava.recordtypes.expanded.subtypes.RiskArrayParamBlock;
import com.billybyte.spanjava.recordtypes.expanded.subtypes.TierDayWeekRange;
import com.billybyte.spanjava.recordtypes.expanded.subtypes.TierMonthRange;
import com.billybyte.spanjava.utils.CmeSpanUtils.RecordType;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;

public class ProcessSpanFileToDb {

	private final DBCollection exchColl;
	private final DBCollection currConvColl;
	private final DBCollection spanArrayColl;
	private final DBCollection riskDataColl;
	private final DBCollection commGrpColl;
	private final DBCollection priceSpecColl;
	private final DBCollection firstCombCommColl;
	private final DBCollection combCommCodeColl;
	private final DBCollection interMonthSpreadColl;
	private final DBCollection interCommSpreadColl;
	private final DBCollection interCommTierColl;
	private final DBCollection delivChargeColl;

	private final int batchSize = 5000;

	public ProcessSpanFileToDb(MongoWrapper m, Boolean needsAuth, String mongoUser, String mongoPw) {

//		Mongo m = new Mongo("127.0.0.1", 27017);

		List<DB> dbList = new ArrayList<DB>();

		DB exchDb = m.getDB(SpanMongoUtils.EXCH_DB);
		dbList.add(exchDb);
		DB currDb = m.getDB(SpanMongoUtils.CURR_DB);
		dbList.add(currDb);
		DB arrayDb = m.getDB(SpanMongoUtils.ARRAY_DB);
		dbList.add(arrayDb);
		DB riskDataDb = m.getDB(SpanMongoUtils.RISK_DATA_DB);
		dbList.add(riskDataDb);
		DB commGrpDb = m.getDB(SpanMongoUtils.COMM_GRP_DB);
		dbList.add(commGrpDb);
		DB priceSpecDb = m.getDB(SpanMongoUtils.PRICE_SPEC_DB);
		dbList.add(priceSpecDb);
		DB firstCombCommDb = m.getDB(SpanMongoUtils.FIRST_COMB_COMM_DB);
		dbList.add(firstCombCommDb);
		DB combCommDb = m.getDB(SpanMongoUtils.COMB_COMM_DB);
		dbList.add(combCommDb);
		DB interMonthSpreadDb = m.getDB(SpanMongoUtils.INTER_MONTH_SPREAD_DB);
		dbList.add(interMonthSpreadDb);
		DB interCommSpreadDb = m.getDB(SpanMongoUtils.INTER_COMM_SPREAD_DB);
		dbList.add(interCommSpreadDb);
		DB interCommTierDb = m.getDB(SpanMongoUtils.INTER_COMM_TIER_DB);
		dbList.add(interCommTierDb);
		DB delivChargeDb = m.getDB(SpanMongoUtils.DELIV_CHARGE_DB);
		dbList.add(delivChargeDb);

		if(needsAuth) {
			for(DB db:dbList) {
				if(!db.authenticate(mongoUser, mongoPw.toCharArray())){
					Utils.prtObErrMess(this.getClass(), "Unable to authorize connection to db: "+db.getName());
				}
			}
		}

		this.exchColl = exchDb.getCollection(SpanMongoUtils.EXCH_CL);
		this.currConvColl = currDb.getCollection(SpanMongoUtils.CURR_CL);
		this.spanArrayColl = arrayDb.getCollection(SpanMongoUtils.ARRAY_CL);
		this.riskDataColl = riskDataDb.getCollection(SpanMongoUtils.RISK_DATA_CL);
		this.commGrpColl = commGrpDb.getCollection(SpanMongoUtils.COMM_GRP_CL);
		this.priceSpecColl = priceSpecDb.getCollection(SpanMongoUtils.PRICE_SPEC_CL);
		this.firstCombCommColl = firstCombCommDb.getCollection(SpanMongoUtils.FIRST_COMB_COMM_CL);
		this.combCommCodeColl = combCommDb.getCollection(SpanMongoUtils.COMB_COMM_CL);
		this.interMonthSpreadColl = interMonthSpreadDb.getCollection(SpanMongoUtils.INTER_MONTH_SPREAD_CL);
		this.interCommSpreadColl = interCommSpreadDb.getCollection(SpanMongoUtils.INTER_COMM_SPREAD_CL);
		this.interCommTierColl = interCommTierDb.getCollection(SpanMongoUtils.INTER_COMM_TIER_CL);
		this.delivChargeColl = delivChargeDb.getCollection(SpanMongoUtils.DELIV_CHARGE_CL);
	}

	public ProcessSpanFileToDb(MongoWrapper m) {

//		Mongo m = new Mongo("127.0.0.1", 27017);

		List<DB> dbList = new ArrayList<DB>();

		DB exchDb = m.getDB(SpanMongoUtils.EXCH_DB);
		dbList.add(exchDb);
		DB currDb = m.getDB(SpanMongoUtils.CURR_DB);
		dbList.add(currDb);
		DB arrayDb = m.getDB(SpanMongoUtils.ARRAY_DB);
		dbList.add(arrayDb);
		DB riskDataDb = m.getDB(SpanMongoUtils.RISK_DATA_DB);
		dbList.add(riskDataDb);
		DB commGrpDb = m.getDB(SpanMongoUtils.COMM_GRP_DB);
		dbList.add(commGrpDb);
		DB priceSpecDb = m.getDB(SpanMongoUtils.PRICE_SPEC_DB);
		dbList.add(priceSpecDb);
		DB firstCombCommDb = m.getDB(SpanMongoUtils.FIRST_COMB_COMM_DB);
		dbList.add(firstCombCommDb);
		DB combCommDb = m.getDB(SpanMongoUtils.COMB_COMM_DB);
		dbList.add(combCommDb);
		DB interMonthSpreadDb = m.getDB(SpanMongoUtils.INTER_MONTH_SPREAD_DB);
		dbList.add(interMonthSpreadDb);
		DB interCommSpreadDb = m.getDB(SpanMongoUtils.INTER_COMM_SPREAD_DB);
		dbList.add(interCommSpreadDb);
		DB interCommTierDb = m.getDB(SpanMongoUtils.INTER_COMM_TIER_DB);
		dbList.add(interCommTierDb);
		DB delivChargeDb = m.getDB(SpanMongoUtils.DELIV_CHARGE_DB);
		dbList.add(delivChargeDb);

		this.exchColl = exchDb.getCollection(SpanMongoUtils.EXCH_CL);
		this.currConvColl = currDb.getCollection(SpanMongoUtils.CURR_CL);
		this.spanArrayColl = arrayDb.getCollection(SpanMongoUtils.ARRAY_CL);
		this.riskDataColl = riskDataDb.getCollection(SpanMongoUtils.RISK_DATA_CL);
		this.commGrpColl = commGrpDb.getCollection(SpanMongoUtils.COMM_GRP_CL);
		this.priceSpecColl = priceSpecDb.getCollection(SpanMongoUtils.PRICE_SPEC_CL);
		this.firstCombCommColl = firstCombCommDb.getCollection(SpanMongoUtils.FIRST_COMB_COMM_CL);
		this.combCommCodeColl = combCommDb.getCollection(SpanMongoUtils.COMB_COMM_CL);
		this.interMonthSpreadColl = interMonthSpreadDb.getCollection(SpanMongoUtils.INTER_MONTH_SPREAD_CL);
		this.interCommSpreadColl = interCommSpreadDb.getCollection(SpanMongoUtils.INTER_COMM_SPREAD_CL);
		this.interCommTierColl = interCommTierDb.getCollection(SpanMongoUtils.INTER_COMM_TIER_CL);
		this.delivChargeColl = delivChargeDb.getCollection(SpanMongoUtils.DELIV_CHARGE_CL);
	}

	public static void main(String[] args) {

//		String fileName = "cme.s.pa2";
//		String fileName = "cme.20130205.c.pa2";
//		String fileName = "nyb.20130204.s.pa2";
//		String nybFile = "nyb.20130228.s.pa2";
		String cmeFile = "cme.20130308.a.pa2";

		List<String> fileList = new ArrayList<String>();

//		fileList.add(nybFile);
		fileList.add(cmeFile);

		try {

			Calendar beforeTime = Calendar.getInstance();

			MongoWrapper m = new MongoWrapper("127.0.0.1", 27017);

			ProcessSpanFileToDb spanParser = new ProcessSpanFileToDb(m, false, null, null);

			spanParser.clearCollections();

			for(String file:fileList) {
				Utils.prt("starting to process file: "+file);

				spanParser.processSpan(file);
			}

			Calendar afterTime = Calendar.getInstance();

			Utils.prt("took "+(afterTime.getTimeInMillis()-beforeTime.getTimeInMillis())/1000+" s");

		} catch (FileNotFoundException e1) {
			e1.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	public void clearCollections() {
		Utils.prt("Starting to clear collections...");
		exchColl.remove(new BasicDBObject());
		currConvColl.remove(new BasicDBObject());
		spanArrayColl.remove(new BasicDBObject());
		riskDataColl.remove(new BasicDBObject());
		commGrpColl.remove(new BasicDBObject());
		priceSpecColl.remove(new BasicDBObject());
		firstCombCommColl.remove(new BasicDBObject());
		combCommCodeColl.remove(new BasicDBObject());
		interMonthSpreadColl.remove(new BasicDBObject());
		interCommSpreadColl.remove(new BasicDBObject());
		interCommTierColl.remove(new BasicDBObject());
		delivChargeColl.remove(new BasicDBObject());
		Utils.prt("Cleared collections...");
	}

	public void processSpan(String fileName) throws IOException {

		BufferedReader br = new BufferedReader(new FileReader(fileName));

		List<MongoDoc> currConvDocList = new ArrayList<MongoDoc>();
		List<MongoDoc> exchDocList = new ArrayList<MongoDoc>();
		Map<String,MongoDoc> riskArrayDocMap = new HashMap<String,MongoDoc>();
		List<MongoDoc> riskDataDocList = new ArrayList<MongoDoc>();
		Map<String,MongoDoc> combGroupMap = new HashMap<String,MongoDoc>();
		List<MongoDoc> priceSpecList = new ArrayList<MongoDoc>();
		Map<String,MongoDoc> firstCombCollMap = new HashMap<String,MongoDoc>();
		Map<String,MongoDoc> combCommCodeMap = new HashMap<String,MongoDoc>();
		Map<String,MongoDoc> interMonthSpreadMap = new HashMap<String,MongoDoc>();
		Map<String,MongoDoc> interCommSpreadMap = new HashMap<String,MongoDoc>();
		List<MongoDoc> interCommTierList = new ArrayList<MongoDoc>();
		List<MongoDoc> delivChargeList = new ArrayList<MongoDoc>();

		int count8s = 0;

		int lineNum = 0;

		while(br.ready()) {

			String line = br.readLine();
//			Utils.prt(lineNum+" ("+line.length()+"): "+line);

			String recIdString = line.substring(0, 2);

			String enumName = RecordType.getEnumNameByValue(recIdString);
			if(enumName!=null) {
				RecordType recId = RecordType.valueOf(enumName);

				try {
					switch(recId) {

						case EXCHANGE_COMPLEX_HEADER:
//						ExchangeComplexHeader ech = new ExchangeComplexHeader(line);
//						Utils.prt(ech.toString());
							break;
						case CURR_CONV_RATE:
							CurrencyConversionRate ccr = new CurrencyConversionRate(line);
							CurrencyConversionDoc currConvDoc = new CurrencyConversionDoc(
									ccr.getFromCurrISO(), ccr.getFromCurrByte(), ccr.getToCurrISO(), ccr.getToCurrByte(), ccr.getConvMult());
							currConvDocList.add(currConvDoc);
//						Utils.prt(ccr.toString());
							break;
						case EXCHANGE_HEADER:
							ExchangeHeader eh = new ExchangeHeader(line);
							ExchangeDoc exchDoc = new ExchangeDoc(eh.getExchAcro(), eh.getExchCode());
							exchDocList.add(exchDoc);
//						Utils.prt(eh.toString());
							break;
						case PRICE_SPECS:
							PriceSpecs ps = new PriceSpecs(line);
							ProductSpecsDoc psDoc = new ProductSpecsDoc(
									ps.getExchAcro().trim(), ps.getProdCommCode().trim(), ps.getProdTypeCode().trim(), ps.getProdName(),
									ps.getSettlePriceDecLoc(), ps.getStrikePriceDecLoc(), ps.getSettlePriceAlignCode(),
									ps.getStrikePriceAlignCode(), ps.getContValueFact(), ps.getStandardCabOptValue(),
									ps.getQuotePosQtyPerCont(), ps.getSettleCurrISO(), ps.getSettleCurrByte(),
									ps.getPriceQuoteMethod(), ps.getSignForContValueFact(), ps.getContValueFactMult(),
									ps.getExerciseStyle(), ps.getProdLongName(), ps.getPositonalProdIndic(),
									ps.getMoneyCalcMethod(), ps.getValuationMethod(), ps.getSettleMethod(),
									ps.getFxSpotDateCollGainCredRate(), ps.getFxPreSpotDateCollGainCredRate(),
									ps.getFxPreSpotDateNumOfDays(), ps.getFxForwardCollGainCredRate(),
									ps.getEquivPosFactor(), ps.getEquivPosFactExp(),
									ps.getSignForEquivPosFactExp(), ps.getVarTickOptFlag());
							priceSpecList.add(psDoc);
							if(priceSpecList.size()==batchSize) {
								SpanMongoUtils.batchInsert(priceSpecColl, priceSpecList);
								priceSpecList.clear();
							}
//						Utils.prt(ps.toString());
							break;
						case FIRST_COMB_COMM:
							FirstCombComm fcc = new FirstCombComm(line);
							String fccKey = fcc.getCombCommCode().trim();
							List<RiskArrayParamBlockDoc> riskArrayParamBlockList = new ArrayList<RiskArrayParamBlockDoc>();
							Set<SpanProdId> prodIdSet = new HashSet<SpanProdId>();
							for(RiskArrayParamBlock rec:fcc.getRiskArrayParamBlockList()) {
								riskArrayParamBlockList.add(new RiskArrayParamBlockDoc(rec));
								prodIdSet.add(new SpanProdId(fcc.getExchAcro().trim(), rec.getCommProdCode().trim(), rec.getProdType().trim()));
							}
							if(combCommCodeMap.containsKey(fccKey)) {
								CombCommProdIdDoc prevCcpiDoc = (CombCommProdIdDoc) combCommCodeMap.get(fccKey);
								prevCcpiDoc.getProdIdSet().addAll(prodIdSet);
							} else {
								CombCommProdIdDoc ccpiDoc = new CombCommProdIdDoc(fccKey, prodIdSet);
								combCommCodeMap.put(fccKey, ccpiDoc);
							}
							FirstCombCommDoc fccDoc;
							if(firstCombCollMap.containsKey(fccKey)) {
								FirstCombCommDoc prevFccDoc = (FirstCombCommDoc) firstCombCollMap.get(fccKey);
								riskArrayParamBlockList.addAll(prevFccDoc.getRiskArrayParamBlockList());
								fccDoc = new FirstCombCommDoc(
										fcc.getExchAcro().trim(), fcc.getCombCommCode().trim(), fcc.getRiskExp(),
										fcc.getPerfBondCurrISO(), fcc.getPerfBondCurrCode(), fcc.getOptMargStyle(),
										fcc.getLimitOptValue(), fcc.getCombMargMethFlag(), riskArrayParamBlockList);
								firstCombCollMap.put(fccKey, fccDoc);
							} else {
								fccDoc = new FirstCombCommDoc(
										fcc.getExchAcro().trim(), fcc.getCombCommCode().trim(), fcc.getRiskExp(),
										fcc.getPerfBondCurrISO(), fcc.getPerfBondCurrCode(), fcc.getOptMargStyle(),
										fcc.getLimitOptValue(), fcc.getCombMargMethFlag(), riskArrayParamBlockList);
								firstCombCollMap.put(fccKey, fccDoc);
							}

							if(firstCombCollMap.size()==batchSize) {
								SpanMongoUtils.batchInsert(firstCombCommColl, new ArrayList<MongoDoc>(firstCombCollMap.values()));
								firstCombCollMap.clear();
							}
							if(combCommCodeMap.size()==batchSize) {
								SpanMongoUtils.batchInsert(combCommCodeColl, new ArrayList<MongoDoc>(combCommCodeMap.values()));
								combCommCodeMap.clear();
							}
//						FirstCombComm fcc = new FirstCombComm(line);
//						Utils.prt(fcc.toString());
							break;
						case SECOND_COMB_COMM:
							SecondCombComm scc = new SecondCombComm(line);
							String imsKey = scc.getCombCommCode().trim();
							// construct tier range
							List<TierRange> tierRangeList = new ArrayList<TierRange>();
							List<TierMonthRange> tierMonthRangeList = scc.getTierMonthRangeList();
							List<TierDayWeekRange> tierDayRangeList = scc.getTierDayWeekRangeList();
							for(int i=0;i<tierMonthRangeList.size();i++) {
								TierMonthRange monthRange = tierMonthRangeList.get(i);
								if(monthRange.getTierNumber().trim().length()>0) {
									if(tierDayRangeList.size()>=(i+1)) {
										TierDayWeekRange dayRange = tierDayRangeList.get(i);
										tierRangeList.add(new TierRange(
												monthRange.getTierNumber(), monthRange.getStartMonth(),
												monthRange.getEndMonth(), dayRange.getStartDayWeekCode(), dayRange.getEndDayWeekCode()));
									} else {
										tierRangeList.add(new TierRange(
												monthRange.getTierNumber(), monthRange.getStartMonth(),
												monthRange.getEndMonth(), null, null));
									}
								}
							}

							// check to see if there is already a doc for this comb comm code - if so append the tier range list
							if(interMonthSpreadMap.containsKey(imsKey)) {
								InterMonthSpreadSummaryDoc prevDoc = (InterMonthSpreadSummaryDoc) interMonthSpreadMap.get(imsKey);
								prevDoc.getTierRangeList().addAll(tierRangeList);
							} else {
								InterMonthSpreadSummaryDoc newDoc = new InterMonthSpreadSummaryDoc(
										imsKey, scc.getIntraCommSpreadChargeMethCode(), scc.getInitToMaintRatioMember(),
										scc.getInitToMaintRatioHedger(), scc.getInitToMaintRatioSpec(),
										tierRangeList, new ArrayList<InterMonthSpreadDetail>());
								interMonthSpreadMap.put(imsKey, newDoc);
							}
//						Utils.prt(scc.toString());
							break;
						case THIRD_COMB_CORR:
							ThirdCombComm tcc = new ThirdCombComm(line);

							DeliveryChargeDoc dcDoc = new DeliveryChargeDoc(
									tcc.getCombCommCode().trim(), tcc.getDelivChargeMethodCode(), tcc.getShortOptMinChargeRate(),
									tcc.getRiskMainBondAdjFactMember(), tcc.getRiskMainBondAdjFactHedger(),
									tcc.getRiskMainBondAdjFactSpec(), tcc.getShortOptMinCalcMethod());

							delivChargeList.add(dcDoc);
//						Utils.prt(tcc.toString());
							break;
						case TIERED_SCANNED:
							InterCommScanTiers icst = new InterCommScanTiers(line);

							InterCommTierInfo icstInfo = new InterCommTierInfo(
									icst.getCombCommCode().trim(), icst.getScanSpreadMethodCode(),
									icst.getWeightedFutPriceRiskCalcMethod(), icst.getInterCommScanTierList());

							interCommTierList.add(icstInfo);

							if(interCommTierList.size()==batchSize) {
								SpanMongoUtils.batchInsert(interCommTierColl, interCommTierList);
								interCommTierList.clear();
							}

//						Utils.prt(icst.toString());
							break;
						case INTRA_COMM_SERIES:
//						IntraCommSeries ics = new IntraCommSeries(line);
//						Utils.prt(ics.toString());
							break;
						case INTRA_COMM_TIERS:
							IntraCommTiers ict = new IntraCommTiers(line);
							String ictKey = ict.getCombCommCode().trim();
							Integer spreadPri = Integer.parseInt(ict.getSpreadPriority());
							List<InterMonthSpreadLeg> spreadLegList = new ArrayList<InterMonthSpreadLeg>();
							for(IntraCommSpreadLeg leg:ict.getIntraCommSpreadLegList()) {
								spreadLegList.add(new InterMonthSpreadLeg(
										leg.getLegNumber(), leg.getTierNumber(), leg.getDeltaPerSpreadRatio(), leg.getMrktSide()));
							}

							InterMonthSpreadSummaryDoc prevDoc = (InterMonthSpreadSummaryDoc) interMonthSpreadMap.get(ictKey);
							List<InterMonthSpreadDetail> interMonthSpreadDetailList = prevDoc.getInterMonthSpreadDetailList();
							boolean newDetail = true;
							for(InterMonthSpreadDetail detail:interMonthSpreadDetailList) {
								if(detail.getSpreadPriority()==spreadPri){
									detail.getSpreadLegList().addAll(spreadLegList);
									newDetail = false;
								}
							}
							if(newDetail) {
								InterMonthSpreadDetail newSpreadDetail = new InterMonthSpreadDetail(
										Integer.parseInt(ict.getSpreadPriority()), Integer.parseInt(ict.getNumOfLegs()),
										ict.getChargeRate(), spreadLegList);
								interMonthSpreadDetailList.add(newSpreadDetail);
							}
//						Utils.prt(ict.toString());
							break;
						case INTER_COMM_SPREADS:
							InterCommSpreads icsp = new InterCommSpreads(line);

							String icspKey = icsp.getCommGrpCode().trim()+icsp.getSpreadPriority()+icsp.getInterSpreadMethodCode();

							List<InterCommSpreadLeg> icspLegList = icsp.getInterCommSpreadLegList();

							InterCommSpreadInfo icsDoc;

							String creditRateString = icsp.getSpreadCreditRate();
							BigDecimal spreadCreditRate;
							if(creditRateString.trim().length()>0) {
								spreadCreditRate = new BigDecimal(creditRateString.substring(0,1)+"."+creditRateString.substring(1));
							} else {
								Utils.prtObErrMess(this.getClass(), "Empty spread credit rate string for inter comm spread key: "+icspKey);
								spreadCreditRate = BigDecimal.ZERO;
							}

							if(interCommSpreadMap.containsKey(icspKey)) {
								InterCommSpreadInfo prevIcsDoc = (InterCommSpreadInfo) interCommSpreadMap.get(icspKey);

								icspLegList.addAll(prevIcsDoc.getInterCommSpreadLegList());

								icsDoc = new InterCommSpreadInfo(
										icsp.getCommGrpCode().trim(), Integer.parseInt(icsp.getSpreadPriority()), spreadCreditRate,
										icsp.getInterSpreadMethodCode(), icsp.getCreditCalcMethod(), icsp.getSpreadGroupFlag(),
										icsp.getSpreadCreditRateDefSepFlag(), icsp.getRegStatusEligibilityCode(), icspLegList);
								interCommSpreadMap.put(icspKey, icsDoc);

							} else {
								icsDoc = new InterCommSpreadInfo(
										icsp.getCommGrpCode().trim(), Integer.parseInt(icsp.getSpreadPriority()), spreadCreditRate,
										icsp.getInterSpreadMethodCode(), icsp.getCreditCalcMethod(), icsp.getSpreadGroupFlag(),
										icsp.getSpreadCreditRateDefSepFlag(), icsp.getRegStatusEligibilityCode(), icspLegList);
								interCommSpreadMap.put(icspKey, icsDoc);
							}

							if(interCommSpreadMap.size()==batchSize) {
								SpanMongoUtils.batchInsert(interCommSpreadColl, new ArrayList<MongoDoc>(interCommSpreadMap.values()));
								interCommSpreadMap.clear();
							}

//						Utils.prt(icsp.toString());
							break;
						case RISK_ARRAY_PARAMS:
							RiskArrayParams rap = new RiskArrayParams(line);
							RiskDataDoc riskDataDoc = new RiskDataDoc(rap.getExchAcro(),
									rap.getCommCode().trim(), rap.getProdTypeCode().trim(), rap.getFutConMonth(), rap.getFutConDayWeekCode(),
									rap.getOptConMonth(), rap.getOptConDayWeekCode(), rap.getBaseVol(), rap.getIntRate(),
									rap.getDivYield(), rap.getTimeToExpiration(), rap.getPricingModel());
							riskDataDocList.add(riskDataDoc);
							if(riskDataDocList.size()==batchSize) {
								SpanMongoUtils.batchInsert(riskDataColl, riskDataDocList);
								riskDataDocList.clear();
							}
//						Utils.prt(rap.toString());
							break;
						case DAILY_ADJ:
//						DailyAdjustment da = new DailyAdjustment(line);
//						Utils.prt(da.toString());
							break;
						case OPT_ON_COMB:
//						OptionsOnCombinations ooc = new OptionsOnCombinations(line);
//						Utils.prt(ooc.toString());
							break;
						case SPLIT_ALLOC:
//						SplitAllocation sa = new SplitAllocation(line);
//						Utils.prt(sa.toString());
							break;
						case DELTA_SPLIT_ALLOC:
//						DeltaSplitAllocation dsa = new DeltaSplitAllocation(line);
//						Utils.prt(dsa.toString());
							break;
						case COMB_COMM_GRPS:
							CombinedCommGroups ccg = new CombinedCommGroups(line);
							List<String> cccList = new ArrayList<String>();
							for(CombCommCode ccCode:ccg.getCombCommCodeList()) {
								cccList.add(ccCode.getCombCommCode().trim());
							}
							String key = ccg.getCombCommGrpCode();
							if(combGroupMap.containsKey(key)) {
								CombCommGroupDoc prevCcGDoc = (CombCommGroupDoc) combGroupMap.get(key);
								prevCcGDoc.getCombCommCodeList().addAll(cccList);
							} else {
								CombCommGroupDoc ccgDoc = new CombCommGroupDoc(ccg.getCombCommGrpCode().trim(), cccList);
								combGroupMap.put(key, ccgDoc);
							}
							if(combGroupMap.size()==batchSize) {
								SpanMongoUtils.batchInsert(commGrpColl, new ArrayList<MongoDoc>(combGroupMap.values()));
								combGroupMap.clear();
							}
//						Utils.prt(ccg.toString());
							break;
						case FIRST_PHYS_REC:
							count8s++;
							FirstPhysical fp = new FirstPhysical(line);
							String key1 = getKey(fp);
							if(riskArrayDocMap.containsKey(key1)) {
								Utils.prtErr("Already an 81 record for this?? - "+key1);
							} else {
								String[] spanArr1 = new String[16];
								spanArr1[0] = fp.getArrVal1();
								if(fp.getArrValSign1().compareTo("-")==0) spanArr1[0] = "-"+spanArr1[0];
								spanArr1[1] = fp.getArrVal2();
								if(fp.getArrValSign2().compareTo("-")==0) spanArr1[1] = "-"+spanArr1[1];
								spanArr1[2] = fp.getArrVal3();
								if(fp.getArrValSign3().compareTo("-")==0) spanArr1[2] = "-"+spanArr1[2];
								spanArr1[3] = fp.getArrVal4();
								if(fp.getArrValSign4().compareTo("-")==0) spanArr1[3] = "-"+spanArr1[3];
								spanArr1[4] = fp.getArrVal5();
								if(fp.getArrValSign5().compareTo("-")==0) spanArr1[4] = "-"+spanArr1[4];
								spanArr1[5] = fp.getArrVal6();
								if(fp.getArrValSign6().compareTo("-")==0) spanArr1[5] = "-"+spanArr1[5];
								spanArr1[6] = fp.getArrVal7();
								if(fp.getArrValSign7().compareTo("-")==0) spanArr1[6] = "-"+spanArr1[6];
								spanArr1[7] = fp.getArrVal8();
								if(fp.getArrValSign8().compareTo("-")==0) spanArr1[7] = "-"+spanArr1[7];
								spanArr1[8] = fp.getArrVal9();
								if(fp.getArrValSign9().compareTo("-")==0) spanArr1[8] = "-"+spanArr1[8];
								RiskArrayDoc riskArray1Doc = new RiskArrayDoc(fp.getExchAcro().trim(),
										fp.getCommProdCode().trim(), fp.getProdTypeCode().trim(), fp.getUndCommProdCode().trim(),
										fp.getOptRightCode(), fp.getFutConMonth(), fp.getFutConDayWeekCode(),
										fp.getOptConMonth(), fp.getOptConDayWeekCode(), fp.getOptStrikePrice(),
										fp.getHighPrecSettlePrice(), null, null, spanArr1);
								riskArrayDocMap.put(key1, riskArray1Doc);
							}
//						Utils.prt(fp.toString());
							break;
						case SECOND_PHYS_REC:
							SecondPhysical sp = new SecondPhysical(line);
							String key2 = getKey(sp);
							if(!riskArrayDocMap.containsKey(key2)) {
								Utils.prtErr("Why not entry for dis: "+key2);
							} else {
								RiskArrayDoc prevRiskArrayDoc = (RiskArrayDoc) riskArrayDocMap.get(key2);
								String[] spanArr2 = prevRiskArrayDoc.getSpanArray();
								spanArr2[9] = sp.getArrVal10();
								if(sp.getArrValSign10().compareTo("-")==0) spanArr2[9] = "-"+spanArr2[9];
								spanArr2[10] = sp.getArrVal11();
								if(sp.getArrValSign11().compareTo("-")==0) spanArr2[10] = "-"+spanArr2[10];
								spanArr2[11] = sp.getArrVal12();
								if(sp.getArrValSign12().compareTo("-")==0) spanArr2[11] = "-"+spanArr2[11];
								spanArr2[12] = sp.getArrVal13();
								if(sp.getArrValSign13().compareTo("-")==0) spanArr2[12] = "-"+spanArr2[12];
								spanArr2[13] = sp.getArrVal14();
								if(sp.getArrValSign14().compareTo("-")==0) spanArr2[13] = "-"+spanArr2[13];
								spanArr2[14] = sp.getArrVal15();
								if(sp.getArrValSign15().compareTo("-")==0) spanArr2[14] = "-"+spanArr2[14];
								spanArr2[15] = sp.getArrVal16();
								if(sp.getArrValSign16().compareTo("-")==0) spanArr2[15] = "-"+spanArr2[15];
								String delta = sp.getSpanCompDelta().substring(0,1)+"."+sp.getSpanCompDelta().substring(1);
								if(sp.getSpanCompDeltaSign().compareTo("-")==0) delta = "-"+delta;
								String settleStr = prevRiskArrayDoc.getSettle();
								if(settleStr==null) settleStr = (sp.getSettlePriceSign().compareTo("-")==0) ?
										"-"+ sp.getSettlePrice() : sp.getSettlePrice();
								String impVolString = sp.getImpVolAsFrac();
								if(impVolString.trim().length()>0) {
									impVolString = new BigDecimal(impVolString.substring(0,2)+"."+impVolString.substring(2)).toString();
								}

								String optStrike = sp.getOptStrikePrice();
								if(optStrike!=null&&sp.getStrikePriceSign()!=null&&sp.getStrikePriceSign().compareTo("-")==0) {
									optStrike = "-"+optStrike;
								}

								RiskArrayDoc newRiskArrayDoc = new RiskArrayDoc(prevRiskArrayDoc.getContractId().getProdId().getExchAcro().trim(),
										sp.getCommProdCode().trim(), sp.getProdTypeCode().trim(), sp.getUndCommProdCode().trim(), sp.getOptRightCode(),
										sp.getFutConMonth(), sp.getFutConDayWeekCode(), sp.getOptConMonth(), sp.getOptConDayWeekCode(),
										optStrike, settleStr, delta, impVolString, spanArr2);
								riskArrayDocMap.put(key2, newRiskArrayDoc);
							}
							if(riskArrayDocMap.size()==batchSize) {
								SpanMongoUtils.batchInsert(spanArrayColl, new ArrayList<MongoDoc>(riskArrayDocMap.values()));
								riskArrayDocMap.clear();
							}
//						Utils.prt(sp.toString());
							break;
						case FIRST_PHYS_REC_FLOAT:
//						FirstPhysicalFloat fpf = new FirstPhysicalFloat(line);
							Utils.prtErr("AHH first phys rec float");
//						Utils.prt(fpf.toString());
							break;
						case SECOND_PHYS_REC_FLOAT:
//						SecondPhysicalFloat spf = new SecondPhysicalFloat(line);
							Utils.prtErr("AHH sec phys rec float");
//						Utils.prt(spf.toString());
							break;
						default:
							Utils.prtErr("MAKE METHOD TO HANDLE THIS ENUM: "+recId);
							break;
					}// end switch here
				} catch (Exception e) {
					Utils.prtObErrMess(this.getClass(), e.getMessage());
					Utils.prtObErrMess(this.getClass(), line);
				}

			} else {
				Utils.prtErr("Not able to parse enum from: "+recIdString);
			}

			lineNum++;
		}

		SpanMongoUtils.batchInsert(currConvColl, currConvDocList, batchSize);

		SpanMongoUtils.batchInsert(exchColl, exchDocList, batchSize);

		SpanMongoUtils.batchInsert(spanArrayColl, new ArrayList<MongoDoc>(riskArrayDocMap.values()), batchSize);

		SpanMongoUtils.batchInsert(riskDataColl, riskDataDocList);

		SpanMongoUtils.batchInsert(commGrpColl, new ArrayList<MongoDoc>(combGroupMap.values()));

		SpanMongoUtils.batchInsert(priceSpecColl, priceSpecList);

		SpanMongoUtils.batchInsert(firstCombCommColl, new ArrayList<MongoDoc>(firstCombCollMap.values()));

		SpanMongoUtils.batchInsert(combCommCodeColl, new ArrayList<MongoDoc>(combCommCodeMap.values()));

		SpanMongoUtils.batchInsert(interMonthSpreadColl, new ArrayList<MongoDoc>(interMonthSpreadMap.values()));

		SpanMongoUtils.batchInsert(interCommSpreadColl, new ArrayList<MongoDoc>(interCommSpreadMap.values()));

		SpanMongoUtils.batchInsert(interCommTierColl, interCommTierList);

		SpanMongoUtils.batchInsert(delivChargeColl, delivChargeList);

		Utils.prt("*************************************************************************************");
		Utils.prt("Finished processing: "+lineNum+" lines, there are this many 81 records: "+count8s);
	}

	private String getKey(FirstPhysical rec) {
		return rec.getCommProdCode().trim()+rec.getProdTypeCode().trim()+rec.getUndCommProdCode().trim()+rec.getOptRightCode()+rec.getFutConMonth()+
				rec.getFutConDayWeekCode()+rec.getOptConMonth()+rec.getOptConDayWeekCode()+rec.getOptStrikePrice();
	}

	private String getKey(SecondPhysical rec) {
		return rec.getCommProdCode().trim()+rec.getProdTypeCode().trim()+rec.getUndCommProdCode().trim()+rec.getOptRightCode()+rec.getFutConMonth()+
				rec.getFutConDayWeekCode()+rec.getOptConMonth()+rec.getOptConDayWeekCode()+rec.getOptStrikePrice();
	}

}

redpajama_set_name: RedPajamaGithub


It is also the largest city of the country. According to the 2012 statistics, the population of Vilnius is 523,000 people, which accounts for 17 per cent of the total population of the country. Vilnius is home to people of different ethnic backgrounds. Ethnic Lithuanians – 57.8%, Poles – 18.7%, Russians – 14%, Belarusians – 4%, Jews – 0.5%, and representatives of other ethnic backgrounds account for the remaining 5%.
Vilnius occupies an area of about 400 square kilometres of which 20.2% approximately is developed, and the remainder is green space (43.9% approx.) and water (2.1% approx.). The historical centre of Vilnius, the Old Town, (Senamiestis) is one of the largest old town centres in Eastern Europe (covering almost 360 hectares). The Old Town is situated in a picturesque valley of two rivers – the Vilnia and the Neris, at the crossroads of trade roads, next to the ford, which was guarded by Vilnius castle in the olden times.


text:
You are here: Home1 / Anna Gardiner – biography
Anna Gardiner
A WAAPA Design graduate, Anna has designed for numerous productions across Sydney including; Costume Design: Romeo and Juliet (Sport for Jove); As You Like It (Sport for Jove); Into the Woods starring the cast of Wicked (Rob Guest Endowment); The Taming of the Shrew (Sport for Jove); Macbeth (Sport for Jove); Hamlet (Sport for Jove); The Ham Funeral (New Theatre); The Tempest (Sport for Jove); Twelfth Night (2012, Sport for Jove); Cyrano De Bergerac (Sport for Jove). Design: This Fella, My Memory (Moogahlin Performing Arts); A Year with Frog and Toad (Ensemble Theatre); Camp (Ensemble Theatre); Tiger Country (Little Spoon Theatre); Rooted (Don't Look Away); Twelfth Night (2014, Sport for Jove); Henry V (Bell Shakespeare Co.); Dark Voyager (Ensemble Theatre); Danny and the Deep Blue Sea (Little Spoon Theatre); Absent Friends (Ensemble Theatre); The Crucible (Sport for Jove); Blood Brothers (Enda Markey Presents).
Anna is currently designing the upcoming productions; The Unknown Soldier (Monkey Baa Theatre), Educating Rita and The Shoehorn Sonata (Ensemble Theatre), Orphans (Redline Productions) and Shellshock (Riverside Theatre). Anna has been nominated for two Sydney Theatre Awards for her work on Cyrano De Bergerac and The Taming of the Shrew for Sport for Jove Theatre Company and was the winner of the 2014 award for Best Stage Design of a Mainstream Production for Henry V (Bell Shakespeare Company) and has also been recently nominated for a Greenroom Award for Set and Costume Design for the same production.

redpajama_set_name: RedPajamaCommonCrawl


text:
Fishpool Street, St. Albans
• Sitting room
• Dining room
• Kitchen
• Basement
• 3 Bedrooms
• Family bathroom
• EPC rating F
Entrance hall | Sitting room | Dining room | Kitchen | Basement | 3 Bedrooms | Family bathroom | Garden | EPC rating F
Dating from the late 18th century but with brick frontage dating from around 1600, 44 Fishpool Street is an attractive family home offering flexible accommodation arranged over three floors. While in need of some cosmetic updating, the property combines the amenities of modern living with retained period features including casement windows, some exposed beams and an original inglenook fireplace.
The ground floor accommodation flows from a welcoming entrance hall and briefly comprises a generous sitting room with feature exposed brick inglenook fireplace together with a dining room with a door to the garden terrace. There is also a kitchen with a range of wall and base units and modern integrated appliances. Stairs from the entrance hall lead down to a good-sized basement, suitable for a variety of uses.
Featuring a wealth of original exposed wooden flooring throughout, the first floor offers a generous front aspect principal bedroom, two further well-proportioned double bedrooms, both with built-in storage, and a family bathroom.
Mileages
St. Albans City station 1.1 miles (London St. Pancras 19 minutes), M25 (Jct. 21A) 4.2 miles, M1 (Jct. 6) 5.4 miles, London Luton Airport 11.2 miles, London Heathrow Airport 27.2 miles
The property is in the heart of the Cathedral Quarter in the old conservation area and within very easy reach of the city centre, with its wealth of amenities including shopping and leisure activities, Verulamium Park, The Abbey, St. Michael's Village and very well-regarded local schools. The mainline station, with its fast through services via St. Pancras International to the City (19 mins), Gatwick and beyond, is also close at hand. Road users enjoy easy access to the M1, M25 and the A1(M) and to the airports at Heathrow, Luton and Stansted.
The property is served by a wide range of nearby state schooling including The Abbey C of E VA Primary School and Loreto College (rated Outstanding by Ofsted) together with a good selection of noted independent schools including St. Albans, St. Albans High School for Girls and St. Columba's College.
Having plenty of kerb appeal, the property is approached from the pavement through a glazed front door with ornamental iron scrollwork. The enclosed rear garden features a raised area of level lawn bordered by mature shrubs and trees and a generous paved terrace off the dining room, ideal for entertaining and al fresco dining.
Strutt & Parker - St Albans, Hertfordshire
34 St Peter's Street, St Albans, Hertfordshire, AL1 3NA


Having good credit is not as hard as you think. Here are four things that will help you stay on top of your credit without too much hassle.
Is credit as complicated as some people say?
Credit report errors are more common than you think.
You need to check your children's credit report.
Having access to your credit report and score for free has never been easier.
People overthink credit. It's that simple.
Some websites try to make it sound confusing so you'll read more about it and drive up their page views. Credit repair companies paint it as this battle that you can only win with someone else's help.
And credit scoring firms keep much of their inner workings shrouded in secrecy to protect their business models.
But here's the No. 1 thing that people don't tell you about credit, even though they should: It's not as complicated as people make it sound.
Paying your bills on time, every time.
Not applying for too much credit too often.
That's about it. Do those three things – lather, rinse, repeat – over and over for years and your credit will be just fine.
Sure, there are other factors, and if you want a perfect 850 score, you might have to do a few more things, but the truth is that once you top 800 or so, all those extra credit score points are basically just extra cushion.
Some studies show that 1 in 5 credit reports contains some sort of incorrect information. Credit report mistakes are more common than you think – and you may be paying for someone else's mistakes.
Not all those errors would have a negative impact on your score, but the fact that about 20 percent of reports have mistakes means that there are millions of Americans whose credit is suffering through no fault of their own.
For example, if there is an inaccurate late payment on your report, it could send your score down 50 to 100 points. That's a big deal.
If you see a mistake, speak up.
Requesting a fresh report directly from the credit bureaus and poring over the report for errors large and small are two initial steps you can take to set the record straight on your reports. See "10 surefire steps to get errors off your credit reports" for further advice.
If you dispute an error, don't expect it to be corrected quickly or easily, but stick with your request. Be persistent. It's important.
Tip: Making on-time payments is the most important thing you can do to keep your credit in good shape. Set up autopay for your credit card bill. Once you've done that, late payments should become a thing of the past.
Most children don't have a credit card, nor do they need one.
Sure, some parents make their kid an authorized user on their credit card – without ever giving the kid the actual card – to give Junior a leg up on credit when they're older. In that case, the child absolutely should have a credit report.
For the most part, however, if your son or daughter has a credit report, it's probably a bad sign. Why? Because it may mean that your kid has been a victim of identity theft.
Bad guys love getting children's personal information because they know that their misdeeds have a better chance of going undiscovered for a long time.
That's because it would never occur to most parents to check their child's credit, so a fraudster can open an account, spend on it and know that it may not be seen for years.
Don't let that happen to you. Check your children's credit reports, and if you find something amiss, report it immediately.
It wasn't long ago that you had to work to find out your credit score or get a copy of your credit report. That's not the case now.
CreditCards.com lets you keep an eye on your TransUnion credit report and VantageScore credit score for free.
AnnualCreditReport.com gives you free access once a year to reports from all three credit bureaus.
Discover's Scorecard offers free access to FICO scores for folks who don't have a Discover card.
Capital One's CreditWise offers free access to VantageScores and you don't have to be a Capital One customer.
As you can see now, achieving and maintaining good credit does require a little work and discipline – but it isn't nearly as complicated as some people make it sound.
Not all credit card terms are negotiable, but many of them, including late fees and interest rates, are. These tips will help you get better terms on your card.


This is one of the nicest Pulsar GTi-Rs we have ever come across. It is mint in every aspect and 100% stock throughout. The dashboard doesn't have the typical cracks and the rest of the interior is excellent shape as well. As far as the exterior is concerned, the body is in very good shape and the paint shines like new. It is mechanically solid and drives very well. It is surprisingly quick for a stock GTi-R. 70,000 verified miles.


text:
Crocidura pallida és una espècie de mamífer eulipotifle de la família de les musaranyes (Soricidae). És endèmica de l'illa indonèsia de Sulawesi, on viu a altituds d'entre 100 i 2.500 msnm. L'holotip tenia una llargada de cap a gropa de 140 mm, la cua de 62 mm, les potes posteriors de 15 mm i les orelles de 8 mm. Pesava 11 g. Té el pelatge dorsal de color gris a gris marronós i el ventral de color gris pàl·lid. El seu nom específic, australis, significa 'pàl·lida' en llatí i es refereix al color dels seus peus. Com que fou descoberta fa poc, l'estat de conservació d'aquesta espècie encara no ha estat avaluat.

Referències

Bibliografia

pallida