Recently evicted housemate, Teddy A has explained why he told Rico that he couldn't believe the viewers chose Cee-C and Nina over Bambam.
He made the comment during a conversation with Rico, minutes after Bambam's sudden eviction.
In an interview with Pulse, Teddy A explains the comment, which he has described as a personal opinion, and not a generalized consensus.
He said; "Apparently, that was like a big thing for everyone listening to the conversation. But, yea, I didn't think she was gonna leave.
"Because left to my opinion… And that's my opinion, it doesn't mean that it's a generalized consensus of what's happening out there. I felt that at the time, it's was what it was.
"I didn't think that she deserved to leave. But hey, it's a game. With the love we got out there, it kind of makes me wonder how. But that's for another day.
"Like I said, I know Bam [and] you guys [have] seen Bam, are you really going to tell me you prefer them to Bambam?
"I don't know, maybe it's just because of how I feel about her or whatever, and that's why I am being selfish or blinded as to what the fact actually is.


text:
<?php

namespace Kaecyra\ChatBot\Bot;

/**
 * User Interface
 *
 * @author Tim Gunter <tim@vanillaforums.com>
 * @package chatbot
 */
interface UserInterface {

    public function getID();

    /**
     * Set user name
     * @param string $name
     * @return UserInterface
     */
    public function setName(string $name): UserInterface;

    /**
     * Get user name
     * @return string
     */
    public function getName(): string;

}

redpajama_set_name: RedPajamaGithub


A maximum total of 7 rentable units and some already has long term tenants (fixed term contracts) bringing immediate revenue. This is the perfect property for a combination of investment, self managed holiday houses and long term investment. Current rental income boosts a 5.4% net yield.
It has unblocked view of the ski hills and sits on the edge of a pine forest and farm land, therefore protected on all sides.


As the pace of house building increases so does the pressure to maintain quality standards. Fortunately, our QMS can help. We've been offering QMS for several years with repeat business growing year on year from builders who have seen tangible improvements in their build process and completed product.
QMS inspections are proven to increase customer satisfaction of completed homes and reduce defects in properties under construction.
How can Quality Management Services help you?
How does Quality Management Services work?
We work in partnership with your site team, providing individually tailored inspection and audit services, personalised to your requirements. Whether you have identified particular problems on a site, would like a closer look at finishes, or are working with a new method of construction, we can design a service for you.
We will help you to reduce after-sales costs and the need for remedial works, as well as increase customer satisfaction. Our service is extremely flexible and as you only pay for the inspections you need, it represents no fixed costs to yourself.
Our findings are recorded on a separate QMS report and do not form part of the normal NHBC key stage inspection reporting.


Not many tropical storms and hurricanes form in the central Pacific Ocean. Even fewer affect the Hawaiian Islands—just eight since 1979, according to meteorologist Jeff Masters. None have made direct landfall on the islands since Hurricane Iniki in 1992. That could change today if Tropical Storm Flossie maintains its strength.
The Moderate Resolution Imaging Spectroradiometer (MODIS) on NASA's Aqua satellite acquired this image of Flossie at 1:10 p.m. local time (23:10 Universal Time) on July 28, 2013. Roughly two hours before the MODIS image was taken, the storm was centered at 19.9° North, 148.5° West. At the time, Flossie had sustained winds of roughly 60 miles per hour (50 knots or 90 kilometers per hour) and a pressure of 996 millibars. The storm was moving westward across the Pacific Ocean at roughly 20 miles per hour, headed for the Hawaiian Islands.
By 8 a.m. local time on July 29, Flossie's sustained winds were at 40 miles per hour (35 knots, or 65 kilometers). The storm was expected to make landfall on Monday evening, either on the "Big Island" of Hawaii or on Maui. Winds were expecting to be roughly 40 miles per hour, with gusts to 50 mph. Forecasters were more concerned about rainfall, which could reach 6 to 10 inches (15 to 25 centimeters) in a six- to eight-hour period, leading to landslides and floods. Tropical storm warnings or watches were in effect for all eight of the major islands.
NASA image courtesy Jeff Schmaltz, LANCE/EOSDIS MODIS Rapid Response Team at NASA GSFC. Caption by Mike Carlowicz.
In late July 2013, a rare tropical storm approached the Hawaiian Islands.
Hawaii News Now (2013, July 29) Flossie continues to weaken. Accessed July 29, 2013.
Honolulu Star-Advertiser (2013, July 29) Isle Brace for Flossie's fury. Accessed July 29, 2013.
Jeff Masters' WunderBlog at Weather Underground (2013, July 29) Weakening Flossie Closes In on Hawaii. Accessed July 29, 2013.
National Weather Service (2013, July 29) Tropical Storm Flossie. Accessed July 29, 2013.
Unisys Weather (2013, July 29) Tropical Storm Flossie Accessed July 29, 2013.


text:
I've tried every single iPhone currently available — here's my ranking of the 7 iPhones you can buy right now
Avery Hartmans
The new iPhone XS and iPhone XS Max.
Edgar Su/Reuters
Apple currently offers seven different iPhones.
And if you're in the market for a new phone, the latest and greatest may not be the right choice for you.
I've tried every iPhone currently available. Here's which one I'd recommend and why.
If you want to buy an iPhone right now, you have seven different options to choose from.
From the brand-new, futuristic iPhone XS to the old-but-good iPhone 7, the current iPhone lineup has a range of devices and price points.
At this point, I've tried all seven of Apple's current iPhones. And although the iPhone XS is gorgeous and powerful, it's not the phone I would recommend to most people.
It's worth noting that in September, Apple discontinued a bunch of its older phones, including the iPhone SE, iPhone 6S, iPhone 6S Plus, and iPhone X. If you're curious about any of those devices, you can still see how they ranked last year.
Here's my ranking of all the iPhones you can buy today:
7. iPhone 8 Plus
Hollis Johnson/Business Insider
The iPhone 8 Plus is in a weird position. It's only a 1-year-old phone, but there's not much incentive to buy it.
The device has some solid features — wireless charging, Apple's year-old A11 chip, and a top-of-the-line camera — but it's certainly not a bargain, especially compared to the iPhone XR, which you can get for only $50 more.
Price: Starts at $699
6. iPhone XS Max
The iPhone XS Max is an absolutely beautiful device, but it's cursed by two things: its giant size and its giant price tag.
The phone starts at $1,099, but can cost as much as $1,449 if you max out the capacity.
And while the screen is the biggest on any iPhone, ever, that's not always a great thing. It's impossible to use one-handed — even with reachability enabled.
Still, the iPhone XS Max is a powerful iPhone. It sports Apple's new A12 Bionic chip, an incredible camera, a beautiful OLED display, and a flashy new gold color.
Price: Starts at $1,099
5. iPhone 8
The iPhone 8 has a slight advantage over the iPhone 8 Plus: its size.
The iPhone 8 is a standard-sized smartphone, and that combined with its all-glass body means it feels great in your hand — though the screen is certainly smaller than the iPhone XS, XR or 8 Plus.
The one other downside of the iPhone 8 versus the iPhone 8 Plus is the lack of a dual-lens camera, but for $100 less, I think most people can make do without.
Otherwise, the iPhone 8 has all the same features as its big sister: fast charging, wireless charging, water resistance, a great camera, the year-old A11 bionic chip, and 64 GB of starting storage space.
The iPhone 7 is more than two years old now, but it remains one of the most sensible — and cheapest — iPhones you can buy.
While the iPhone 8 is newer and slightly better looking (and the iPhone XR and XS are in a league of their own), the iPhone 7 has nearly all the features most people need. It has nearly the exact same camera as the iPhone 8, the same size screen, and is also water resistant.
There are only three major things that differentiate the iPhone 7 from the iPhone 8, besides design: the iPhone 7 doesn't have wireless charging, it has less starting storage at 32 GB, and it runs Apple's 2-year-old A10 chip.
The iPhone 7 comes in four color options versus the iPhone 8's three, weighs less due to its aluminum back, and costs $100 less.
3. iPhone XS
The iPhone XS is an update to last year's iPhone X, which Apple discontinued in 2018.
The XS is an incredible device, despite not being a major overhaul to last year's model. It has a big, gorgeous OLED display, a great camera, and comes in three luxurious colors. Plus, it has futuristic features like wireless charging, water resistance, and Face ID.
The only reason the iPhone XS isn't No. 1 is because of its price — it can cost as much as $1,349 if you max out the capacity.
Lucy Nicholson/Reuters
The iPhone 7 Plus has it all.
It has Apple's dual-lens camera, which means it's capable of portrait mode. It has a big, 5.5-inch screen, it's waterproof, and it has almost the exact same battery life as the iPhone 8 Plus.
Except for wireless charging and a slightly slower processor, the iPhone 7 Plus is almost the exact same phone internally as the iPhone 8 Plus — and it costs $100 less.
In fact, unless you prefer the iPhone 8's all-glass design, there are very few reasons to buy it over the iPhone 7 Plus.
The iPhone 7 Plus may be a 2-year-old phone, but you'll get an incredible deal for your money.
1. iPhone XR
Stephen Lam/Reuters
When it comes to the iPhone XR, it's no contest.
The phone was released in October, and it has all of the modern features you'd want: wireless charging, an excellent camera (that only requires one lens), water resistance, Face ID, and a big display.
Plus, it comes in six fun colors: red, coral, yellow, blue, white, and black.
The biggest selling point? It costs $250 less than the iPhone XS.
SEE ALSO: I spent a day taking photos with the iPhone XS Max — and it's hard not to be impressed with what this thing can do
More: Features Apple iPhone 7 iPhone 8
iPhones ranked

redpajama_set_name: RedPajamaCommonCrawl


Shabby chic dining room can be elegant and romantic as well as create a cozy inviting atmosphere. Shabby chic dining room can be versatile functioning as both casual and formal eating area. Take a look at these beautiful shabby chic dining rooms to inspire yourself to create your own romantic dining.
When creating a shabby chic dining room choose a dining set that will bring in the style into the decor. Romantic shabby chic furniture can also be recycled from the old furniture you might have. Cracked paint doesn't even has to be replaced with the new. Vintage or even rustic dining table can be used together with a set of comfortable chairs to base your shabby chic dining room design around it.
Floral patterns as well as actual flowers are commonly used in shabby chic designs to add a pop of color to airy white decor. Pink or azure florals can add a strong accent to the white shabby chic dining. Use them in the furniture upholstering, tablecloth, curtains, and rugs.
Enhance your shabby chic dining room with a statement chandelier. Glass chandeliers add a touch of luxury as well as detial to the decor. Ornate candleholders also help to emphasize shabby chic decor.


text:
Seria Amurg: Luna nouă () este continuarea filmului Amurg și este bazat pe cartea Luna nouă de Stephenie Meyer. Hotărât să-i ofere Bellei șansa la viața normală și lipsită de pericole, Edward o părăsește sperând că ea o să-și vadă de viață. Aceasta găsește sprijinul necesar în prietenul ei Jacob, dar lucrurile nu sunt pe cum par.

Deși nu a fost la fel de bine apreciat ca predecesorul său, Luna nouă a încasat 72.7 milioane de dolari în prima zi în SUA, un record care nu a fost întrecut decât în 2011 la apariția lui Harry Potter si Talismanele Morții. Partea 2 (film).

A apărut pe DVD și Blu-ray la data de 20 martie 2010.

Povestea

Filmul se deschide cu Bella visându-se pe sine la o vârstă înaintată, în aceeași poiană pe care i-o arătase Edward după ce eaîși dăduse seama că el era un vampir. Acesta i se alătură și ea se trezește cu realizarea că e ziua majoratului ei. Pe parcursul zilei ea se frământă cu gândul că visul se va împlini și este încordată. Familia Cullen îi organizează o petrecere surpriză seara și lucrurile par să meargă bine până se taie la un deget și Jasper își pierde controlul și încearcă să o omoare. După petrecere Edward îi spune că o părăsește și se mută cu familia deoarece nu-i place să o pună tot timpul în pericol și oricum stătuse prea mult în Forks. Bella rămâne pe loc până este găsită de membrirezervației La Push.

În lunile care urmează Bella cade într-o depresie profundă care-l împinge pe Charlie să o amenințe că o trimite înapoi în Phoenix dacă nu-și revine. Aceasta porneșe fără tragere de inimă să se reconecteze cu vechii săi prieteni de la școală. Mergând la cumpărături cu Jessica în Portland Bella dă peste niște motocicliști și are o halucinație cu vocea lui Edward. Ulterior î-și dă seama că în apropierea pericolului cauzează alte astfel de apariții. Ca urmare se hotărăște să învețe să meargă pe motociclete, cu ajutorul lui Jacob Black. Pe parcurs începe să se împrietenească cu el când deodată acesta se retrage și începe să petreacă tot mai mult timp cu o bandă de băieți cu care nu se înțelegea înainte. Nefericită din cauza rejecției lui Bella merge să-i ceară explicații și se ceartă cu noii lui prieteni. Unul dintre ei își pierde controlul și se avântă asupra ei. Jacob apare în acel moment și se aruncă asupra lui - amândoi se preschimbă în lupi. Ulterior Bella află vârcolacii sunt protectori ai tribului și membrii încep să se transforme atunci când tribul este în pericol.

Jacob îi arătase Bellei o stâncă de unde săreau membrii haitei. Bella hotărăște să sară și vizinea cu Edward apare din nou, deși Bella nu ascultă . În apă este prinsă de curent și aproape moare când este salvată de Jacob. Acasă se întâlnește cu Alice care este uimită că Bella este încă în viață după ce o văzuse sărind de pe stâncă, dar nuși salvată. Împreună concluzionează că vârcolacii nu apar în viziunile ei și ca atare nu-l văzuze pe Jacob. Cineva sună pentru a vorbi cu Charlie și Jacob răspunde spunând "He's at the funeral."("E la înmormântare."), referindu-se la moartea unuia dintre locuitorii rezervației. Alice are o nouă viziune și le spune că la celălalt capăt era Edward și sunase pentru a verifica dacă Bella era de fapt moartă. Decis, plecase în Italia pentru a se întâlni cu Volturi, un soi de poliție a vampirilor, ca să le ceară să-l omoare.

Bella pornește cu Alice spre Italia și ajunge la timp pentru a-l opri pe Edward. Din nefericire Volturi își dau seama că există un om care știe despre vampiri așa că decretează că Bella trebuie să fie transformată în vampir sau omorâtă. Alice acceptă în locul lui Edward și le împărtășește o viziune cu Bella ca vampir pe care o avusese. Aceștia se întorc în Forks unde Edward încearcă să o convingă pe Bella că o iubește cu adevărat și că plecase pentru că vroise să-i dea șansa unui nou început. De asemenea îi spune că plănuiește să-i înfrunte pe Volturi, mai degrabă decât să o transforme. Nemulțumită, Bella pleacă spre casa familiei Cullen unde se adresează tuturor explicând că-l iubește pe Edward, vrea să fie parte din familie și nu vrea să-i pună în pericol de dragul unei mortalități pe care nici nu și-o dorește. Aceștia votează și hotărăsc să o schimbe, împotriva dorințelor lui Edward.

Pe drum spre casa Bellei se întâlnesc cu Jacob care-i spune Bellei că o iubește și că va lupta până la capătul puterilor pentru ca ea să rămână om. Lui Edward îi amintește de pactul făcut cu Carlisle prin care vampirii promiteau să nu mai schimbe vreun omm cât vor sta pe teritoriul rezervației, și că dacă o schimbă pe Bella va urma un război. După plecarea lui Jacob, Edward admite că simte că nu merită sacrificiul mortalității Bellei și acesta este motivul pentru care nu vrea ca ea să fie vampir, dar că-i va împlini dorința și o va transforma el însuși dacă se va mărita cu el înainte.

Distribuție

	Kristen Stewart	... 	Bella Swan
	Christina Jastrzembska	... 	Gran
	Robert Pattinson	... 	Edward Cullen
	Billy Burke	... 	Charlie Swan
	Anna Kendrick	... 	Jessica
	Michael Welch	... 	Mike
	Justin Chon	... 	Eric
	Christian Serratos	... 	Angela
	Taylor Lautner	... 	Jacob Black
	Ashley Greene	... 	Alice Cullen
	Jackson Rathbone	... 	Jasper Hale
	Russell Roberts	... 	Mr. Berty
	Cam Gigandet	... 	James (archive footage)
	Michael Sheen	... 	Aro
	Jamie Campbell Bower	... 	Caius
	Christopher Heyerdahl	... 	Marcus
	Peter Facinelli	... 	Dr. Carlisle Cullen
	Curtis Caravaggio	... 	Rogue Vampire
	Daniel Cudmore	... 	Felix
	Charlie Bewley	... 	Demetri
	Rachelle Lefevre	... 	Victoria
	Elizabeth Reaser	... 	Esme Cullen
	Kellan Lutz	... 	Emmett Cullen
	Nikki Reed	... 	Rosalie Hale
	Chaske Spencer	... 	Sam Uley
	Gil Birmingham	... 	Billy Black
	Graham Greene	... 	Harry Clearwater

	Adrien Dorval	... 	Bob Marks - Neighbor
	Michael Adamthwaite	... 	Chet
	Alexander Mendeluk	... 	Frat Boy
	Hunter Jackson	... 	Frat Boy
	Gavin Bristol	... 	Frat Boy
	Sean McGrath	... 	Frat Boy
	Tyson Houseman	... 	Quil Ateara
	Kiowa Gordon	... 	Embry Call
	Alex Meraz	... 	Paul
	Bronson Pelletier	... 	Jared
	Edi Gathegi	... 	Laurent
	Tinsel Korey	... 	Emily
	Corinna Russo	... 	Italian Child
	Mariagrazia Pompei	... 	Italian Mother (as Maria Grazia Pompei)
	Roberto Marchetti	... 	Italian Father
	Alessandro Federico	... 	Police Officer
	Dakota Fanning	... 	Jane
	Justine Wachsberger	... 	Gianna - Receptionist
	Cameron Bright	... 	Alec
	Noot Seear	... 	Heidi
rest of cast listed alphabetically:
	Peter Lambert	... 	Romeo (voice) (uncredited)
	Rana Morrison	... 	Lady Leaving Theatre / Lady Attending Festival (uncredited)
	Justin Shenkarow	... 	(voice) (uncredited)
	Hugo Steele	... 	Biker (uncredited)
	Tom Townsend	... 	Grath (uncredited)
	Giovanna Yannotti	... 	Native American (uncredited)

Legături externe

Seria Amurg
Filme din 2009
Filme cu vampiri
Filme regizate de Chris Weitz

redpajama_set_name: RedPajamaWikipedia


text:
Q: finding max value in an array using recursion java I'm looking for a recursive method to find the maximum value in an array (I know already the iterative one)
for the base case, I've came up with the idea that:
if(t.length == 1)
   return t[0];

but I don't know about the recursive call step
I'll be so glad if anyone could help me

A: int largest(int[] a, int start, int largest) {
    if (start == a.length)
        return largest;
    else {
        int l = (a[start] > largest ? a[start] : largest);
        return largest(a, start + 1, l);
    }
}

A:
import java.util.Arrays;

public class RecMax {
    public static void main(String[] args) {

        int values[] = {1,2,3,4,5,10,8,9,7,3,2,8};

        int maxvalue = max(Integer.MIN_VALUE, values);

        System.out.println(maxvalue);
    }

    public static int max(int cur, int[] values) {
        //just for clarity
        int len = values.length;

        //stop condition
        //if all the array has been examined than cur contains the max
        if (len == 0) {
            return cur;
        }

        //if the last element of the array is greater than the current then this is
        //the new temporary max, else the current max is the one already found
        int tmpMax = values[len - 1] > cur ? values[len - 1] : cur;

        //recursion
        //examine the remaining part of the array (len -1)
        //copying the array is a waste but it looks clear to me what a recursion means
        return max(tmpMax, Arrays.copyOfRange(values, 0, len - 1));
    }
}

redpajama_set_name: RedPajamaStackExchange


Garage Storage Design Ideas ~ Splendi Best Value Garage Shelving Photo Ideas Pictures Fore Kids Units Near Me 55 Splendi Best Value Garage Shelving Photo Ideas. Garage Shelving Systems. Wall Mounted Glass Shelving. Homemade Garage Shelving Ideas Pictures.


"Paige" is a story of Paweł and his guide dog, of a bond that can unite a man and an assisting animal. Americans may call it good teamwork but one is tempted to stick to the word "bond" which seems a better choice for describing this relation.
It is possibly the story of the bond moving the listener that made the piece receive some key awards available to documentary makers at the time: the Jacek Stwora Bursary and the Documentary of the Year title in a competition held by Polish Radio Three and the Gazeta Wyborcza daily.
A year later, another piece by Ireneusz Białek received the Documentary of the Year title awarded by Polish Radio Three. That was the broadcast entitled "Romantics of rock music" made in the memory of the already legendary radio presenter and music fan Tomasz Beksiński, who had massively influenced a whole generation of listeners and whose premature death shocked them all, including the author of the documentary. And so on the one hand the material is an homage paid to Tomasz, yet on the other a record of the listeners' emotions and it includes archived and little known footage from radio broadcasts featuring Tomasz Beksiński conducted in Radio Krakow by Ireneusz Białek.
In the times of supermarkets and access to all possible goods, do we still know how basic daily necessities are or should be made? Do we have any associations with true tastes and flavours reminiscent of old times? In his song "Lanckorona", Marek Grechuta was singing about true bread, yet do its baking, taste and aroma belong already to history, or can we somehow make a connection with them?
Here is an attempt at answering such questions: a meeting with a good bread aficionado from the Bread Museum in Radzionków.
The piece received a distinction in the Polska i Świat 2001 competition in the literary reportage category.
"To see is to foresee the future"
In 2003, Ireneusz Białek and Małgorzata Perdeus-Białek decided to end their adventure with radio documentary. To make that decision was hard, as the period abounded in various travels and meetings with fascinating people yet at the same time the Jagiellonian University Disability Support Service had come into being and it required more time. The 2003 International Prix Europa Festival held in Berlin was the last radio festival where their documentary was publicly presented. It was a piece called "To see means to foresee the future" which ranked eighth among over 40 documentaries from across the continent. It may have been thanks to its subject matter, extraordinary for that time, or the charming figure of Professor Bogusław Marek, or maybe the warmth the listeners felt after listening to the material. What matters is that the last documentary does not leave the listener cold.
"Who we are to the world"
Artistic supervision: Anna Sekudewicz from the Polish Radio in Katowice, winner of the "radio Oscar", the main prize in the Prix Italia competition.
This radio reportage dates back to 2001 and the historic visit of John Paul II to Ukraine. The authors interviewed many ordinary people talking about their daily lives. Their stories make a fascinating portrait of Ukraine that has not lost much of its relevance.
The piece was awarded an international distinction: Ake Blomstrom Memorial Prize.
Our thanks go to Janina Jankowska, head of the Studio of Reportage and Documentary of the Polish Radio, for having given us once the chance to enter the extraordinary world of the noble radio art.


text:
© Adrian Smith + Gordon Gill Architecture
smithgill.com
Contact Brand Contact Follow 35
Adrian Smith and Gordan Gill Architecture
Follow 35
Adrian Smith + Gordon Gill Architecture is dedicated to the design of high-performance architecture in a wide range of typology and scale, from low- and mid-rise residential, commercial and cultural buildings to mixed-use supertall towers and new cities. The office uses a holistic, integrated design approach that explores symbiotic relationships with the natural environment. AS+GG is currently working on projects for clients in the United Arab Emirates, Saudi Arabia, China, India, South Korea, Malaysia, Canada and the United States. The partnership was founded in 2006 by Adrian Smith, Gordon Gill and Robert Forest
Contact Brand Follow 35
Kazakhstan Pavilion and Science Museum (Nur Alem)
By Adrian Smith and Gordan Gill Architecture
ASTANA EXPO CITY 2017
Willow Creek North Shore
Pullman National Monument Redevelopment Plan
South Bend Renaissance District
Waldorf Astoria Beijing
FKI Tower
International Design Competition For Expo-2017
View View All 16 projects
Adrian Smith and Gordan Gill Architecture Chicago
30 West Monroe Street, Chicago, IL 60603, United States


text:
Q: What is wrong with configure/make that we need new build tools? Is make not general enough?
makedepend, autoconf, automake all work to build Makefiles. Is there a flaw in make that causes this type of usage to break down for some languages?
How does ant, Bazel, Maven or other system compile or build a project better than make?

A: make come from Unix and is generally good for "if you have X you need to do Y to get Z" one file at a time (like invoking the C compiler on a C source).  All the autoconf/automake/configure tooling is to customize C programs to the actual platform, and is essentially not overlapping with make.
This did not work well for Java as the compiler was fast for compiling multiple files but the overhead of starting the JVM was much too high for compiling one file at a time.  So, a different approach was needed.  First plain javac, then ant (which for all practical purposes is a scripting language), and then maven (which isn't because that was a bad idea).
So, the answer is that different tools arose for different needs.


A lot of photographers were really peeved with Brooklyn Beckham.
Brooklyn, the 16-year-old son of David Beckham, is considering a photography career rather than following in his father's footsteps.
Here's what really upset the photographers. Burberry commissioned the younger Beckham to shoot its the company's fragrance campaign, passing over so many established professionals.
What those photographers missed is that Brooklyn is using the new rules of photography. With the new rules anyone can make an impact with their photography and photographers still employing the old rules will always be left behind.
As a photographer, you were the only one with an SLR camera.
If you owned a professional camera, you were ahead of most of the public.
At some events, I would literally say "excuse me I'm a photographer" and all the nice people in front of me would usher me to the front of the room.
Even more, if you published or shared a gallery with professional images, you were seen as the professional. There was a clear distinction between the photographer and everyone else.
Those were the old rules. Photographers still playing by the old rules can expect to be always frustrated going forward.
Click to learn more about the new Shutterbug Mentoring Club.
Why? Taking a great photo is the minimum expectation from anyone who knows you as a photographer.
Photography has become the it thing in the last five years, so most people think they can take a good enough picture.
New apps and software make it even easier to produce what used to be professional looking images. Facetune app said "why pay a photographer when you can do it yourself."
As one photographer said to me, 100% of the cameras are better than 99% of the people using them.
With the old rules, your pictures gets you noticed, but it is no longer enough.
Post great photos. You do have to show great quality. Only show your best. People who look on will want to eventually see your distinct style and voice. Don't just show what you see but how you see.
Focus your photography down to niche you can be passionate about. Here's the question you should ask: what do you want to be known for? Humans of New York is known for street portraits with engaging stories. Peter Hurley is known for head shots. What about you?
Start a photography project on your focus area. This helps you keep shooting and creates the body of work that will begin to define you as a photographer.
Your photography gets you noticed, but your story gets you in the door.
I remember sitting outside one of my favorite restaurants in the Del Ray neighborhood of Alexandria listening to people decide where they would eat. As they walked by, so many would tell the story of how Pork Barrel BBQ and the restaurant next door, Holy Cow Gourmet Burgers, shared the same kitchen. They might remark how the owners were on Shark Tank.
After telling the story, so many of them would then venture in to try one of the restaurants.
They expected good food, but the story lured them in the door. People want a good story.
How do you get a great story? You create it yourself. This is one of the reasons you need a blog. It not only gives you a vehicle to share your images but to tell your story.
On your blog, tell the stories that attract the people you want in your circle and show your photos that reinforce your narrative.
People don't just want a photo, they want an experience. Create it on your platform.
As you tell your story, you will begin to attract a following of people who like that kind work. That's your opportunity to create or contribute to a community.
In episode 52, Joe Newman gave us a great example how how creating a community can propel your photography.
One of the things he learned was that if he wanted to make an impact, he couldn't do it by himself. He then went about the task of creating the relationships that would help him build his blog.
Social media helps accelerate creating the community. Listen to episode 53, Jenna Martin interview.
As you build your community, you cultivate the people who will support your photography and your influence.
Why did Brooklyn Beckham get the work so many professionals coveted? He wasn't just selling his pictures. He also had a story — the son of famous parents. He had a platform from which to tell his story and share his work. And he attracted a community of about 6 million followers.
He followed the new rules.
Click to learn more about the video training series.


License plate readers are used for the following applications: Homeland Security, Traffic Department, Defense, Entertainment and Recreation Facilities, Dedicated Car Parks.
InnoWare is an Italian developer company specialized in License Plate Recognition (LPR) suites since 1992.
SentiVeillance from Neurotechnology includes algorithms for face recognition, vehicle-human classification and tracking, and automatic license plate recognition. Neurotechnology offers large-scale multi-biometric AFIS SDK, PC-based, embedded, smart card fingerprint, face, eye iris, voice and palmprint identification SDK. Research and development in AI and robotics.
riveVision is a cloud-based SaaS solution, using a neural-based network with machine learning algorithms to replace antiquated OCR and vehicle recognition systems.
Innova Systems group has a desktop based automatic plate recognition system.
Smart Parking is a leader in the design, development and management of parking technology.
OpenALPR is a service based on open source license plate reader.
NDI Recognition Systems® is a leading provider of Automatic License Plate Recognition Technology to law enforcement and government agencies world-wide.
Vigilant Solutions offers the most comprehensive, advanced suite of law enforcement tools like License Plate Recognition (LPR), Facial Recognition, and more.
Genetec dose IP video surveillance, access control and automatic license plate recognition. Security Center AutoVu™ is the automatic license plate recognition (ALPR) solution from Genetec. AutoVu for parking helps educational institutions, cities, and businesses benefit from increased user compliance and improved operational efficiency. AutoVu solutions consist of a range of powerful mobile and fixed ALPR devices, software, and cloud services, all designed to facilitate and enhance parking management and enforcement to provide a better experience for parkers.
PIPS Technology™ is a leader in detection innovation supplying advanced Automatic License Plate Recognition solutions to make our world safer and smarter.
JENOPTIK covers a diverse range of real world applications, including: Journey Time Systems Average Speed Enforcement Police ANPR Bus Lane Enforcement Car Park Management Congestion Charging.
CA Traffic is a manufacturer and supplier of traffic monitoring equipment, a wide range of instrumentation and software systems are available ranging from basic pneumatic tube counter classifiers through to full real-time ITS systems.
ELSAG ALPR systems scan license plates in real time, so your operators receive immediate alerts of any hot or white list matches. Instant data lends your law enforcement the edge on offenders, aiding in your duty to stop crime and promote community safety.
COBAN Tech provides body cameras, in-car camera systems and integrated video management solutions built to the exacting demands of law enforcement agencies.


text:
package com.ikanow.aleph2.data_model.interfaces.data_services.samples;

import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Optional;

import scala.Tuple2;

import com.ikanow.aleph2.data_model.interfaces.data_services.IDocumentService;
import com.ikanow.aleph2.data_model.interfaces.shared_services.ICrudService;
import com.ikanow.aleph2.data_model.objects.data_import.DataBucketBean;
import com.ikanow.aleph2.data_model.objects.data_import.DataSchemaBean.DocumentSchemaBean;
import com.ikanow.aleph2.data_model.objects.shared.BasicMessageBean;
import com.ikanow.aleph2.data_model.utils.Tuples;

public class SampleDocumentService implements IDocumentService {

	@Override
	public <O> ICrudService<O> getCrudService(Class<O> clazz,
			DataBucketBean bucket) {
		return null;
	}

	@Override
	public <O> ICrudService<O> getCrudService(Class<O> clazz,
			Collection<DataBucketBean> buckets) {
		return null;
	}

	@Override
	public <T> Optional<T> getUnderlyingPlatformDriver(Class<T> driver_class,
			Optional<String> driver_options) {
		return null;
	}

	@Override
	public Tuple2<String, List<BasicMessageBean>> validateSchema(DocumentSchemaBean schema, final DataBucketBean bucket) {
		return Tuples._2T("", Collections.emptyList());
	}

	@Override
	public Collection<Object> getUnderlyingArtefacts() {
		return null;
	}
}


text:
Image: Mario Facchini, mafphotography
Flashback Friday – The Legend of Tom Kirk
Each week, thanks to Schofield King Lawyers, we bring you a story from our rich history.
While these days his name is synonymous with our friendly rivalry St George Illawarra, Tom Kirk holds the rare distinction of representing both the Newtown and North Sydney clubs.
A goal-kicking centre and fullback, Kirk was a prolific point scorer who had an enormous impact at Henson Park during the halcyon days of the early 1940s
Born in the NSW town of Adelong in 1916, Albert Samuel Kirk first came to prominence representing Tumut in the prestigious Maher Cup competition.
After moving to Sydney, he made his first-grade debut for Canterbury in 1936 and two years later had the dual honour of representing NSW while also helping the Berries to their maiden premiership.
Kirk joined Newtown in 1940 where he experienced further premiership success. In 1943, he became the first-ever player in the history of the Sydney Premiership to kick over 100 goals in a season, nailing 103 as Newtown charged its way to its third and final first-grade premiership. Another memorable moment in Kirk's Bluebags career came in 1944 when he scored a try and kicked 11 goals in the Bluebags' thumping 55-7 semi-final win over St George.
In fact, Kirk proved to be such a prolific point scorer that he ended up topping the NSWRL point-scoring charts on five different occasions while also becoming the first player in premiership history to amass 1000 points across a career.
After playing 98 first-grade games for Newtown across seven seasons, Kirk shifted to North Sydney for the 1947 season and while he didn't experience the same amount of success as he did in Newtown, he top scored for the Shoreman with 116 points during his final season of Sydney football.
Tom passed away in 1994 but his memory lives on via the Tom Kirk Cup which is annually contested between Newtown and St George Illawarra in the Canterbury Cup competition.
Schofield King Lawyers has spent the last decade representing underdogs against insurance companies and big businesses. For legal advice about your compensation claim, visit https://sklegal.com.au/
← Members Badge Draw Thursday 10th September 2020
Virtual Match Report – Jets win another elimination semi-final against the odds →


Ready to power up your fiction and change the writing game? Put One Stop for Writers in your creative toolkit!
One Stop for Writers is a collaboration between Angela Ackerman & Becca Puglisi (authors of the Emotion Thesaurus) and Lee Powell (creator of Scrivener for Windows and Linux), three out-of-the-box thinkers who want to give writers the tools they need to become master storytellers.
Worksheets, Templates, Checklists, Tutorials and more, to not only assist with your novel, but to help you grow into a stronger storyteller!
A robust Character Building Tool* that allows you to craft deep, complex characters by pulling together elements of backstory, personality, and motivation from our custom thesauri to provide a custom character arc blueprint for any arc (change, failed, or static) *coming soon!
Gift Certificates! Put One Stop on your Wish List.
Want to win a 1-year subscription to this amazing site? Enter the draw below, and good luck!
pre-2019 and on into 2019 is THE YEAR I'm getting serious about writing. Have a book in a real rough draft…let's see how I can clean it up and step forward.
Love the free resources! Would love the chance to check out the subscription side of things~ thanks for the chance!
I can't say enough about One Stop for Writers. I recommend it in every comments section while judging a contest. Great entry, or one that needs work, everyone can benefit with One Stop for Writers.
Thank you for the chance to win this exciting prize. Best wishes.
Thank you for this fantastic advent calendar. Best wishes.
Thank you for this wonderful giveaway. Best wishes.
I love plotting…this would be an amazing tool!
Just in time for me to start revising in January! One Stop for Writers is the BEST!
Really excited to use the soon coming addition, Character Building Tool! This is going to be a winner!
Well, this is it! Best Christmas gift. This way I won't have to buy monthly subscription every time I start revisions.
Awwww, yes. This would help tremendously!
Would really love to win this one. OSFW helped with my first complete novel draft, and I'm looking forward to writing a new novel in the coming year!
"The Emotion Thesaurus" was endlessly helpful to me during nanowrimo! Thanks for the giveaway.
I've enjoyed playing with it this last year.
Would love the gift of a one-year subscription!!! Also liked you all on FB and posted on Twitter.
I don't do things simply.
I love the one stop site, and regularly browse my emotion thesaurus books. Great stuff!!
Love, LOVE One Stop For Writers…makes my journey so much easier. Would love to win a year's subscription, but I'm staying either way.
I think this would be very helpful in my writing if I win. Thanks for the chance.
Thank you for all you do to support writers!!
Thank you so much for this giveaway! I'm a big One Stop for Writers fan.
What a wonderful offer. I LOVE One Stop for Writers! It's such an amazingly thoughtful and creative site. Thank you!
I recently joined and love this site. What a gift this would be.
Please bring me this prize. I will leave you a pint of Guinness and mincemeat cookies.
This whole giveaway is SO amazing. Thank you!
Good luck, Donna–and thank you!
This. This is beautiful. Definitely entering!
Any writer pro or novice can use all these tools.
This looks super cool. I could use this!
Best of luck, Jane–thank you!
Whoa, what a generous giveaway. Thank you!
I love how well One Stop for Writers organizes the writing process. Thanks for making such a useful resource!
Aw, thanks for the kind words! We're big believers that writing can be much easier!
Good luck, Myka–I love your name!
I love One Stop for Writers. The Thesauri (is that really the plural of Thesaurus?) are wonderful!
I would love to win a subscription to One-Stop. 🙂 A fantastic resource!
Thank you, Susan! Good luck!
Certainly enjoy the Emotion Thesaurus. Would love to get long-term access to all the rest.
I'm so glad. You'll be happy to know the Emotion Thesaurus at one stop has many more entries as well!
What an awesome prize! I never win any of these kind of contests but I'm entering anyway!
hey, you gotta try, right? Best of luck!
Fantastic resource and a great prize. This contest is so cool!
One Stop For Writers is awesome! Whoever wins is going to have an amazing year of learning!
Aw, thanks for saying so!
I can't believe there's so much writing goodness collected in one place. The thesaurus collection is wonderful all on its own. But when you add in all the worksheets, the connectivity of resources, and the ability to save your discoveries by project … Well, it's probably the best resource on the web.
So would I like to win a year's subscription? You bet!
I am hugging you so hard, Heather! thank you for the kind words–it means the world!
You had me at story map but I could really use a character building tool!
Give us a few weeks and we'll have both…your life will never be the same, lol!
One Stop for Writers is a fantastic site! I just subscribed recently on your half-price offer but don't think I can keep up the subscription. I'd love to have a one-year extension. This writer's advent calendar is a wonderful idea.
Fingers crossed for you, Elaine!
This has been so much fun! Thank you for this calendar!
This is a fantastic giveaway, thank you!
I love One Stop for Writers and can't wait for the Character Builder Tool!
We can't wait to launch it! We are so happy with how it turned out!
I've always wanted to sign up for this, but haven't been able to squeeze it into the budget. Fingers crossed that I win!
This would be a blessing to win!
I would love a subscription to One Stop for Writers. Thank you so much for the chance to win!
Wishing you luck in the draw!
Excited to check out the website.
I hope you were able to have a poke around! Good luck!
Hi, this is like having your very own, on-demand, coach/mentor/training membership site in your pocket! Access anywhere, any time. I love learning while writing, two for the price of one 🙂 Thank you. Be Blessed.
That's us in a nutshell! Good luck, Ursula!
Super grateful for this opportunity to win a year of One Stop for Writers having browsed the site. As a new writer this would give a boost of productivity and help me with my writing. Really appreciate what you are offer hearing, super generous 🙂 fingers and toes crossed for this one!
Fingers and toes crossed for you, Jane!
Who could pass this up?!
I've used One Stop before and – when I remembered I had it – loved it. Would love to have it again!
Wishing you good luck in the draw then, Jennifer!
Great idea. Thanks for the chance to win.
One Stop for Writers is an incredible resource. It's been a huge help as I work through improving my manuscript. Thank you so much for this opportunity!
I left two responses yesterday, but I don't see them. Plus, rafflecopter kicked me out. Hopefully, I've entered now!
Looking forward to learning more about the site.
This would be n amazing tool to win! I have loved one stop for writers for a long time. Thank you!!
This is a nice treat!
A great resource to have for any writer!
Tim, I hope you win then–good luck!
Good luck! Thanks for the kind words!
One Stop for Writers is an awesome web site!
Fingers crossed for you then, Beth!
I enjoy exploring options and learning new tools on One Stop for Writers. Thank you for sharing your knowledge and the knowledge of others on this blog and your website. And for this great holiday give away. What a blessing.
It's our pleasure–we love to help! Good luck!
Current user and would love to have an extension!
Fingers crossed for you, Sheryl!
Love love love One Stop! It's well worth every penny, but if i can get free access, well, even better!
I'm already a member, but who doesn't like a freebie? 😉 I love the website; it is full of valuable info. You guys provide us with the best advice and writing tools. Thanks!
PS: The advent calendar is a great idea!
Aw, thank you for saying so! And good luck, Karla!
This is an amazing prize! Thanks for offering it. Love your thesaurus books!
Thank you for this opportunity – it would take my writing to a whole new level!
I am quite intrigued by this program! Thank you for the opportunity to win a 1-year subscription!
I love advent calendars and one with real prizes is AMAZING! Thank you Angela, Becca and all of the contributors.
You're welcome, Tamara! Good luck in the draw!
We're happy to supply the tools, but finishing your novel–that's all you, Julie! You're a rock star!
This site looks so helpful!
I love tools, as a new writer tools make life easier, I really appreciate the opportunity to win a years access to One Stop Writers tool box, it would be such a help to me to craft my first story, thank you so much.
So sorry for the double entry, commented once and it did not show up so did again and then they both showed up!
I love tools, they make life easier, especially as new writer, I would love to get to use these storytelling tools to help me craft my first story.Thank you so much for the opportunity to win a years access, really appreciate this, keep doing what you are doing for you are much need.
Amazing give away…especially for someone who has great admiration for those that can use words to articulate a point so effectively. I would love and have a great desire to learn that craft.
My comment didn't show, sorry if you get it twice.
As a writer, I would be foolish – foolish! – not to enter for this most valuable of gifts.
Aw, you are the best, Michael!
Aw, thanks so much! We're very glad they are on your shelf, and happy they help 🙂 Good luck!
Thanks for the kind words–good luck in the draw!
This sounds cool! Always willing to use different programs to help better my writing!
I have been a member, albeit a free one, of One Stop For Writers since it debuted. It was pretty cool then, but it's awesome now. I know I should pay for a full subscription, but all of the monthly fees on things I already have, not necessarily writing-related, seem to peck away at my finances and add up to more than is comfortable. Still, it is a very cool and useful set of tools and the implementation, courtesy in no small part of Lee Powell, is outstanding. It would be awesome to have a full membership!
Thank you for the kind words. 🙂 Lee is amazing, as is Abhishek, our part time developer. They have really made magic, taking out content and transforming it into the tools we have there. Our One Stop team is great to work with. Good luck in the draw!
I love the idea! What a great giveaway.
I love seeing you name pop up Cheryl–it always makes me smile. Good luck in the draw!
Not sure what happened, but I got kicked out of the rafflecopter before I finished. Anyway, I tried!
Oh no! I don't know what happened either? Maybe close the window, reopen and try to click on the giveaway again if it will let you? Sorry!
One Stop's story map and tools have saved my writing! I am addicted! Thank you for creating these resources. So indebted.
I'm so glad you like using it–that's one of my favorites as well!
Thanks so much. I hope you poke around the site and find all the great resources there, along with our huge thesaurus collection. 🙂 Good luck!
I have used your free resources and a few of the books and would love asubscription to the site!
Oh good–glad you are using all the free stuff! Good luck, Mary!
I am amazed at what you all are doing. Thank you!
I love this idea! Thank you for an adult advent calendar that I will look forward to checking out every day!


During calendar years 2016 and 2017, the Victorian Healthcare Associated Infection Surveillance System (VICNISS) and Healthcare Infection Surveillance Western Australia (HISWA) received reports from affiliated hospitals about increases in the frequency of CA‐SABs. We sought to formally review trends in their incidence and to determine whether populations at particular risk could be identified. We analysed quarterly data for the period 1 January 2011 – 31 December 2016 from 93 Victorian public hospitals (VICNISS) and 58 Western Australian public hospitals (HISWA). As a quality assurance evaluation of surveillance data, no patient‐identifying or hospital‐level data were captured; formal ethics review was therefore not required.
A total of 10 320 SAB events were reported (7262 in Victoria, 3058 in WA); 6800 infections (65.9%) were community‐associated, corresponding to an aggregate crude rate of 13.3 CA‐SABs per 100 000 person‐years (Victoria, 12.9; WA, 14.3 CA‐SABs per 100 000 person‐years). The incidence in each state increased significantly during the study period: 8% (95% confidence interval [CI], 6–10%) per year in Victoria and 6% (95% confidence interval [CI], 4–9%) per year in WA (Box).
Most CA‐SABs (5698, 83.8%) were caused by methicillin‐susceptible S. aureus (MSSA). There was a small but statistically significant annual increase in the proportion of MSSA CA‐SABs in Victoria (4% per year; 95% CI, 3–8%), but not in WA; that is, the incidence of CA‐SABs caused by MSSA rose more rapidly in Victoria than the overall incidence of CA‐SABs.
The incidence of CA‐SABs was higher among older patients and in men, and was particularly high for men over 60: the standardised incidence in this group was 50.9 cases (95% CI, 48.5–53.4) in Victoria and 56.7 cases (95% CI, 52.6–61.0) per 100 000 person‐years in WA, twice the incidence among women of the same age (Victoria, 24.7 [95% CI, 23.2–26.4]; WA, 24.9 [95% CI, 22.4–27.7] cases per 100 000 person‐years).
Our study is the first to evaluate the epidemiology of CA‐SAB in more than one Australian state. Other investigators have similarly reported a greater disease burden for older people and men.4 It is notable that residents of aged care facilities have been identified as being at particular risk;5 infections in this group would be classified as CA‐SABs by our analysis. One limitation of our study was that only infections in patients presenting to public hospitals are captured by surveillance systems, perhaps missing some community‐onset infections, but the vast majority of patients with SABs would require admission to hospital. Some infected persons would have been managed entirely in private health care, meaning that we will have underestimated the incidence of CA‐SABs.
The increases in incidence we describe may reflect the emergence of virulent S. aureus strains in the community or changes in host risk factors. Characterising the isolates responsible for infection would assist identify virulence factors and the relatedness of isolates. Further evaluation of infection risks in people over 60 years of age is also needed for developing targeted prevention strategies.
We acknowledge the infection control consultants in Victorian and Western Australian hospitals who collected the data we analysed. VICNISS is fully funded by the Victorian Department of Health and Human Services; HISWA is a program in the Public Health Division of the Department of Health Western Australia.
1. Australian Commission on Safety and Quality in Health Care. Implementation guide for surveillance of Staphylococcus aureus bacteraemia. Sydney: ACSQHC, 2013. https://www.safetyandquality.gov.au/wp-content/uploads/2012/02/SAQ019_Implementation_guide_SAB_v10.pdf (viewed June 2018).
3. Tong SYC, Davis JS, Eichenberger E, et al. Staphylococcus aureus infections: epidemiology, pathophysiology, clinical manifestations, and management. Clin Microbiol Rev 2015; 28: 603–661.


Black evening dress with shimmering sweetheart neckline, accent band on the hip area, front and left slit with modest ruffles.
This Night's Darling Long Dress will beautifully highlight your silhouette. Worth a trip to a fashion ball with equally dazzling dangling earrings.


text:
Scientists discover compound which targets cancer cells that lack the protective p53 'guardian gene'
by University of Huddersfield
Electron microscopic image of a single human lymphocyte. Credit: Dr. Triche National Cancer Institute
A new chemical compound with the potential to destroy hard-to-treat cancer cells has been developed and tested by scientists at the University of Huddersfield.
Also, the compound causes remarkably little harm to healthy cells, meaning that the side effects traditionally associated with chemotherapy would potentially be significantly reduced.
At this early stage of its development, the compound, which contains the rare metal ruthenium, is generating exciting results in the laboratory, but there are significant challenges ahead before it enters clinical trial. Nevertheless, research conducted by a team of chemists, biologists and pharmacists at the University's School of Applied Sciences is to continue, the ultimate aim being to get these compound or a derivative into clinical trial.
The breakthrough is described in an article published by the leading international journal Angewande Chemie. One of the authors is Professor Craig Rice, head of the University's Department of Chemistry. He originally created the ruthenium – containing compound as an academic exercise, but then he and Roger Phillips, who is Professor of Cancer Pharmacology, decided to test it for toxicity to cancer.
An important aspect of the new compound is that its molecular backbone has an eliciting twist and this is important for its activity. Professor Rice explained that both helical and non-helical versions had been created and it was found this changed the selectivity of the compound, with the former being the most effective.
It was discovered that the compound can target and destroy cells that lack the gene named p53. This gene is known as "the guardian of the genome," and it protects normal cells from abnormalities and DNA damage, said Professor Phillips.
"It is frequently mutated in cancer and loss of p53 function has significant biological impact including resistance to currently available anticancer drugs," he added.
The fact that the new compound shows preferential activity against cancer cells that lack p53 therefore makes it an exciting development. Furthermore, its lack of activity against normal cells suggests that the compound will not be toxic to normal cells leading to reduced side effects.
Daisies offer a double boost for prostate cancer treatment
More information: Simon J. Allison et al. Ruthenium-Containing Linear Helicates and Mesocates with Tuneable p53-Selective Cytotoxicity in Colorectal Cancer Cells, Angewandte Chemie International Edition (2018). DOI: 10.1002/anie.201805510
Journal information: Angewandte Chemie International Edition
Provided by University of Huddersfield
Citation: Scientists discover compound which targets cancer cells that lack the protective p53 'guardian gene' (2018, August 15) retrieved 19 January 2020 from https://phys.org/news/2018-08-scientists-compound-cancer-cells-lack.html
Zinc chloride as Lewis acid
Preserving breast milk for jewelry
Having trouble understanding pH = pKa log([A-]/[HA])
Electrodeposition of copper -- Why are the anodic and cathodic Tafel curves different?
Questions about making galinstan
The number of atoms in an amount of a substance
More from Chemistry
Researchers identify compound to prevent breast cancer cells from activating in brain
Light-activated cancer drugs without toxic side effects
Light powered platinum more targeted and 80 times more powerful than similar cancer treatments
Discovering the secrets of tumor growth
Chemical compound prevents cancer in lab
Microscopy technique reveals cells' 3-D ultrastructure in new detail
Biomimetic hydrogel with photodynamic antimicrobial effect
Controlled phage therapy can target drug-resistant bacteria while sidestepping potential unintended consequences
Detoxification enzyme discovery could be used to target major crop contaminant
Accelerated speed of discovery could lead to more effective smoking cessation aids
'Bilingual' molecule connects two basic codes for life


1. WILLIAM HANNAH6 WOOLDRIDGE (SAMUEL COLEMAN5, JAMES4, JOHN III3, JOHN II2, JOHN1) was born 7/07/1841 in Eldridge, Greenup Co., Kentucky, and died 5/30/1922 in Greenleaf Cemetery, Brownwood, TX. He married (1) SARAH E. BROWN Bef. 7/1870 in Brown Co., Texas, daughter of WILLIAM BROWN and ELIZABETH GILHAM. She was born 1850 in Mississippi, and died 2/14/1880 in Smith Cemetery, Brown Co., Texas. He married (2) SARAH JOSEPHINE "JOSIE" RUSHING 8/25/1880 in Brown Co., Texas, daughter of JASON RUSHING and NANCY HUNTER. She was born 4/02/1860 in Grayson Co., Tx, and died 6/15/1950 in Brownwood, TX Greenleaf Cemetery.
i. MARY ELIZABETH (ZOU)7 WOOLDRIDGE, b. Abt. 1873, Brown Co., Tx; d. Bef. 1921; m. (1) MOSES G ANDERSON, 3/28/1889, Brown Co., Texas; b. 3/1868, Brown Co., TX; m. (2) ? BURRHAM, Aft. 1891.
ii. LUCY WOOLDRIDGE, b. 12/1874, Brown Co., Tx; d. 2/03/1971, El Paso, Texas; m. JOHN H. TIPTON, 12/18/1890, Brown Co., Texas; b. 4/1865, Alabama; d. Bef. 1920.
iii. CHARLES EDWARD "CHARLIE" WOOLDRIDGE, b. 4/22/1875, Brown Co., Tx; d. 1972, Las Vegas, San Miguel Co, NM; m. EMMA NANCY CLARK, 1901, Roger Mills Co, OK; b. 3/18/1883, Mobeetie, Texas; d. 3/29/1973, Roswell, NM South Park Cemetery.
iv. JULIA M. WOOLDRIDGE, b. 8/1876, Brown Co., Tx; m. WILLIAM MARK CRUME, 11/09/1891, Brown Co., Texas; b. 4/1865.
v. J ROBERT B. (JUDGE) WOOLDRIDGE, b. 1878, Brown Co., Tx.
vi. TWINS WOOLDRIDGE, b. 2/15/1880, Brown Co., TX; d. 2/15/1880, Brown Co., TX.
vii. THOMAS W. (TOMMIE)7 WOOLDRIDGE, b. 7/10/1881, Brown County, TX; d. 3/15/1888, Connell Cem, Brown Co., TX.
viii. WILLIAM ROBERT (COBB) WOOLDRIDGE, b. 8/12/1885, Burkett , Tx; d. 5/20/1967, Eastlawn Cem, Brown Co., TX; m. SUSAN ARMINTA (MITTIE) GRAY, 12/01/1906, Mangum, Greer Co., Ok; b. 10/28/1883, Texas; d. 12/16/1958, Oklahoma.
ix. RUFUS MARSHALL WOOLDRIDGE, b. 6/10/1886, Brown Co., TX; d. 7/02/1952, Seminole, OK Seminole Cemetery; m. FANNIE BROWN, 12/31/1909, Wewoka,Seminole Co, OK; b. 1889, Indian Territory, Maud, Ok; d. 1962, Seminole, OK.
x. RICHARD GOODWIN WOOLDRIDGE, b. 4/17/1888, Brown County, TX; d. 7/30/1961, Brownwood, TX Cross Cut Cemetery,TX; m. LOLA CHAMBERS, 2/09/1919, Coleman, TX; b. 6/22/1897, Runnels Co, TX; d. 1/02/1979, Brown Co., Tx Cross Cut Cemetery.
xi. "AUSEY" OSMAN EDGAR WOOLDRIDGE, b. 3/27/1889, Brown County, TX; d. 9/12/1971, Brownwood, TX Cross Cut Cemetery,TX; m. (1) MARY ANNE BROWN, 8/18/1912, Brown Co., TX; b. 11/10/1896, Burkett, TX; d. 11/22/1918, Burkett, TX; m. (2) VERA CILLAH CLARK, 2/21/1920, Cross Cut, TX; b. 12/07/1900, May, Brown County, TX; d. 10/07/1988, Austin,TX buried Cross Cut, TX.
xii. DAVID CUSTER WOOLDRIDGE, b. 11/27/1891, Brown County, TX; d. 7/17/1931, Temple, TX buried Greenleaf Cemetery Brownwood, TX; m. EMILY MAY BUTLER, 2/11/1916, Cross Cut, TX; b. 5/01/1889, Arkansas; d. 8/28/1978, Brownwood,TX Greenleaf Cemetery.
xiii. MARTHA (MATTIE) EMILY WOOLDRIDGE, b. 10/10/1894, Brown County, TX; d. 6/02/1937, Brown Co., Tx Greenleaf Cemetery; m. (1) WILLIAM COLVIN, Abt. 1933, Brown Co., Texas; b. Abt. 1890; m. (2) JEFFERSON DEWITT ENGLAND, Abt. 1935, Brown Co., Texas; b. 11/20/1895, Hunt Co., TX; d. 6/03/1937, Brown Co., Tx.
xiv. HOMER MCKINLEY ( MACK) WOOLDRIDGE, b. 7/07/1896, Brown County, TX; d. 2/27/1980, Brownwood, TX Greenleaf Cemetery.
xv. NOAH (NOE) WARREN WOOLDRIDGE, b. 9/01/1898, Brown County, TX; d. 2/06/1968, Brown Co., Tx Greenleaf Cemetery; m. HATTIE EUNETTE STONE, 2/04/1922; b. 8/31/1901, Brown County, TX; d. Abt. 1988.
xvi. DANIEL KINNEBREW WOOLDRIDGE, b. 3/09/1900, Cross Cut,Brown County, TX; d. 4/23/1971, Albany, Shackelford Co., Tx; m. EULA ELSIE DEBUSK, 12/01/1922, Coleman, TX; b. 7/05/1908, Callahan County, TX; d. 6/14/1994, Albany, Shackelford Co., Tx.


text:
Q: RegEx to Capture Two Parts of String I'm scraping some data. One of the data points is tournament prize pools. There are many different currencies in the data. I'd like to extract the amount and currency from each value, so that I can use Google to convert these to a base currency. However, it's been a while since I've used regular expressions, so I'm rusty to say the least. Possible formats of the data are as follows:
$534
$22,136.20
3,200,000 Ft HUF
12,500 kr DKK
50,000 kr SEK
$3,800 AUD
$10,000 NZD
€4,500 EUR
¥100,000 CNY
₹7,000,000 INR
R$39,000 BRL

Below is the first regular expression I came up with.
[0-9,.]+(.+)[A-Z]{3}
But that obviously doesn't capture the amount and currency, so I changed it.
([0-9,.]+).+([A-Z]{3})
However, there are issues with this regular expression that I can't figure out.

*

*([0-9,.]+) by itself works fine to capture just the amount.

*When I add .+ to that expression, for some reason it stops capturing the trailing 4 and 0 in the first and second test cases respectively. Why?

*Then when I add ([A-Z]{3}), it seems to work perfectly for all of the test cases, but obviously selects nothing in the first two.

*So I changed it to ([A-Z]{0,3}), which seems to break everything.
What's happening? How can I change the expression so that it works?
This is where I'm at: ([0-9,.]+)((?:.+)([A-Z]{3}))?

A: This should work:
([0-9,.]+).*?([A-Z]{3})?$

A few changes I made:

*

*I changed the .+ to .*? because there isn't always something after the number (like the first two cases). I used lazy matching here because otherwise it would match everything till the end.

*I made group 2 optional with a ? because there isn't always a currency (first 2 cases)

*I added an end of line anchor $ to make the lazy .*? match something instead of nothing.
If you don't know what "lazy" means in this context, see this post.
Demo

A: For the example data, you could use an optional non capturing group to match the space and the characters before the currency:
([0-9,.]+)(?:(?: [A-Za-z]+)? ([A-Z]{3}))?

Regex demo
That will match

*

*( Capture group

*

*[0-9,.]+ match 1+ times what is listed in the character class

*) Close capture group

*(?: Non capturing group

*

*(?: [A-Za-z]+ )? Optional group to match a space, 1+ times a-zA-Z and space

*([A-Z]{3}) Capture 3 uppercase chars

*)? Close non capturing group and make it optional


Der einfache Weg, die Angst vorm Fliegen zu überwinden - Vom Autor des Bestsellers "Endlich Nichtraucher!"
The revolutionary international bestseller that will stop you smoking - for good. 'If you follow my instructions you will be a happy non-smoker for the rest of your life.' That's a strong claim from Allen Carr, but as the world's leading and most successful quit smoking expert, Allen was right to boast! Reading this book is all you need to give up smoking. You can even smoke while you read. There are no scare tactics, you will not gain weight and stopping will not feel like deprivation. If you want to kick the habit then go for it. Allen Carr has helped millions of people become happy non-smokers. His unique method removes your psychological dependence on cigarettes and literally sets you free. Accept no substitute. Five million people can't be wrong.
After smoking and diet, Allen Carr addressed the surprisingly common fear of flying. With the aid of his characteristic humour and pragmatism, this book demonstrates that this fear can be easily, successfully and permanently overcome as people understand just how safe flying really is.
This book applies the world-famous Allen Carr's Easyway method to the problems of over-spending and debt. It removes the desire to over-spend, so that you are able to live within your means without feeling deprived. It also sets out a simple, easy-to-follow guide on how to clear out the debts you have accumulated. This book can enable anyone to escape the misery of debt and rediscover the joy of being in control of your life again.
Allen Carr's Easy Way to Stop Smoking has helped millions of smokers to quit. In No More Gambling Carr applies his Easyway method to the subject of gambling. Carr explains how gamblers fall into the trap and why they keep gambling despite knowing that it's ruining their lives. By explaining the nature of the trap, he removes the desire to gamble and the fears that keep you hooked. Follow all his instructions and you will be free.
Irwin is a 33 year old young man who knows how to live his life. A simple Australian guy who loves his car and dislikes working. Loves his women and loves to leave them. Enjoys his drinks and time with his friends. With very little time for his family and not much time for love, he fi nds himself falling in love. He is helpless and he is falling. Love also comes with happiness and also with sadness. Another love story with the feelings and emotions that only Irwin can describe and feel, but hoping that everyone understands. Can Irwin survive love?


text:
package handler

import (
	"errors"
	"fmt"
	"sort"
	"time"

	"github.com/m3db/m3aggregator/aggregator/handler/common"
	"github.com/m3db/m3aggregator/aggregator/handler/filter"
	"github.com/m3db/m3aggregator/aggregator/handler/router"
	"github.com/m3db/m3aggregator/aggregator/handler/router/trafficcontrol"
	"github.com/m3db/m3aggregator/aggregator/handler/writer"
	"github.com/m3db/m3aggregator/sharding"
	"github.com/m3db/m3cluster/client"
	"github.com/m3db/m3cluster/kv"
	"github.com/m3db/m3cluster/services"
	"github.com/m3db/m3metrics/encoding/msgpack"
	"github.com/m3db/m3msg/producer"
	"github.com/m3db/m3msg/producer/config"
	"github.com/m3db/m3x/instrument"
	"github.com/m3db/m3x/pool"
	"github.com/m3db/m3x/retry"

	"github.com/uber-go/tally"
)

const (
	initialBufferSizeGrowthFactor = 2
)

var (
	errNoHandlerConfiguration                   = errors.New("no handler configuration")
	errNoWriterConfiguration                    = errors.New("no writer configuration")
	errNoDynamicOrStaticBackendConfiguration    = errors.New("neither dynamic nor static backend was configured")
	errBothDynamicAndStaticBackendConfiguration = errors.New("both dynamic and static backend were configured")
)

// FlushHandlerConfiguration configures flush handlers.
type FlushHandlerConfiguration struct {
	Handlers                 []flushHandlerConfiguration `yaml:"handlers" validate:"nonzero"`
	Writer                   *writerConfiguration        `yaml:"writer"`
	TrafficControlKVOverride *kv.OverrideConfiguration   `yaml:"trafficControlKVOverride"`
}

// NewHandler creates a new flush handler based on the configuration.
func (c FlushHandlerConfiguration) NewHandler(
	cs client.Client,
	instrumentOpts instrument.Options,
) (Handler, error) {
	if len(c.Handlers) == 0 {
		return nil, errNoHandlerConfiguration
	}
	var (
		handlers       = make([]Handler, 0, len(c.Handlers))
		sharderRouters = make([]SharderRouter, 0, len(c.Handlers))
		store          kv.Store
	)
	if c.TrafficControlKVOverride != nil {
		kvOpts, err := c.TrafficControlKVOverride.NewOverrideOptions()
		if err != nil {
			return nil, err
		}
		store, err = cs.Store(kvOpts)
		if err != nil {
			return nil, err
		}
	}
	for _, hc := range c.Handlers {
		if err := hc.Validate(); err != nil {
			return nil, err
		}
		if hc.DynamicBackend != nil {
			sharderRouter, err := hc.DynamicBackend.NewSharderRouter(
				cs,
				store,
				instrumentOpts,
			)
			if err != nil {
				return nil, err
			}
			sharderRouters = append(sharderRouters, sharderRouter)
			continue
		}
		switch hc.StaticBackend.Type {
		case blackholeType:
			handlers = append(handlers, NewBlackholeHandler())
		case loggingType:
			handlers = append(handlers, NewLoggingHandler(instrumentOpts.Logger()))
		case forwardType:
			sharderRouter, err := hc.StaticBackend.NewSharderRouter(store, instrumentOpts)
			if err != nil {
				return nil, err
			}
			sharderRouters = append(sharderRouters, sharderRouter)
		default:
			return nil, fmt.Errorf("unknown backend type %v", hc.StaticBackend.Type)
		}
	}
	if len(sharderRouters) > 0 {
		if c.Writer == nil {
			return nil, errNoWriterConfiguration
		}
		writerOpts := c.Writer.NewWriterOptions(instrumentOpts)
		shardedHandler := NewShardedHandler(sharderRouters, writerOpts)
		handlers = append(handlers, shardedHandler)
	}
	if len(handlers) == 1 {
		return handlers[0], nil
	}
	return NewBroadcastHandler(handlers), nil
}

type writerConfiguration struct {
	// Maximum Buffer size in bytes before a buffer is flushed to backend.
	MaxBufferSize int `yaml:"maxBufferSize"`

	// Pool of buffered encoders.
	BufferedEncoderPool pool.ObjectPoolConfiguration `yaml:"bufferedEncoderPool"`

	// How frequent is the encoding time sampled and included in the payload.
	EncodingTimeSamplingRate float64 `yaml:"encodingTimeSamplingRate" validate:"min=0.0,max=1.0"`
}

func (c *writerConfiguration) NewWriterOptions(
	instrumentOpts instrument.Options,
) writer.Options {
	opts := writer.NewOptions().
		SetInstrumentOptions(instrumentOpts).
		SetEncodingTimeSamplingRate(c.EncodingTimeSamplingRate)
	if c.MaxBufferSize > 0 {
		opts = opts.SetMaxBufferSize(c.MaxBufferSize)
	}

	// Set buffered encoder pool.
	// NB(xichen): we preallocate a bit over the maximum buffer size as a safety measure
	// because we might write past the max buffer size and rewind it during writing.
	scope := instrumentOpts.MetricsScope()
	iOpts := instrumentOpts.SetMetricsScope(scope.SubScope("buffered-encoder-pool"))
	bufferedEncoderPoolOpts := msgpack.NewBufferedEncoderPoolOptions().
		SetObjectPoolOptions(c.BufferedEncoderPool.NewObjectPoolOptions(iOpts))
	bufferedEncoderPool := msgpack.NewBufferedEncoderPool(bufferedEncoderPoolOpts)
	opts = opts.SetBufferedEncoderPool(bufferedEncoderPool)
	initialBufferSize := c.MaxBufferSize * initialBufferSizeGrowthFactor
	bufferedEncoderPool.Init(func() msgpack.BufferedEncoder {
		return msgpack.NewPooledBufferedEncoderSize(bufferedEncoderPool, initialBufferSize)
	})
	return opts
}

type flushHandlerConfiguration struct {
	// StaticBackend configures the backend.
	StaticBackend *staticBackendConfiguration `yaml:"staticBackend"`

	// DynamicBackend configures the dynamic backend.
	DynamicBackend *dynamicBackendConfiguration `yaml:"dynamicBackend"`
}

func (c flushHandlerConfiguration) Validate() error {
	if c.StaticBackend == nil && c.DynamicBackend == nil {
		return errNoDynamicOrStaticBackendConfiguration
	}
	if c.StaticBackend != nil && c.DynamicBackend != nil {
		return errBothDynamicAndStaticBackendConfiguration
	}
	return nil
}

type dynamicBackendConfiguration struct {
	// Name of the backend.
	Name string `yaml:"name"`

	// Hashing function type.
	HashType sharding.HashType `yaml:"hashType"`

	// Total number of shards.
	TotalShards int `yaml:"totalShards" validate:"nonzero"`

	// Producer configs the m3msg producer.
	Producer config.ProducerConfiguration `yaml:"producer"`

	// Filters configs the filter for consumer services.
	Filters []consumerServiceFilterConfiguration `yaml:"filters"`

	// TrafficControl configs the traffic controller.
	TrafficControl *trafficcontrol.Configuration `yaml:"trafficControl"`
}

func (c *dynamicBackendConfiguration) NewSharderRouter(
	cs client.Client,
	store kv.Store,
	instrumentOpts instrument.Options,
) (SharderRouter, error) {
	scope := instrumentOpts.MetricsScope().Tagged(map[string]string{
		"backend":   c.Name,
		"component": "producer",
	})
	p, err := c.Producer.NewProducer(cs, instrumentOpts.SetMetricsScope(scope))
	if err != nil {
		return SharderRouter{}, err
	}
	if err := p.Init(); err != nil {
		return SharderRouter{}, err
	}
	logger := instrumentOpts.Logger()
	for _, filter := range c.Filters {
		sid, f := filter.NewConsumerServiceFilter()
		p.RegisterFilter(sid, f)
		logger.Infof("registered filter for consumer service: %s", sid.String())
	}
	r := router.NewWithAckRouter(p)
	if c.TrafficControl != nil {
		tc, err := c.TrafficControl.NewTrafficController(store, instrumentOpts)
		if err != nil {
			return SharderRouter{}, err
		}
		r = trafficcontrol.NewRouter(tc, r, scope)
	}
	return SharderRouter{
		SharderID: sharding.NewSharderID(c.HashType, c.TotalShards),
		Router:    r,
	}, nil
}

type consumerServiceFilterConfiguration struct {
	ServiceID services.ServiceIDConfiguration `yaml:"serviceID" validate:"nonzero"`
	ShardSet  sharding.ShardSet               `yaml:"shardSet" validate:"nonzero"`
}

func (c consumerServiceFilterConfiguration) NewConsumerServiceFilter() (services.ServiceID, producer.FilterFunc) {
	return c.ServiceID.NewServiceID(), filter.NewShardSetFilter(c.ShardSet)
}

type staticBackendConfiguration struct {
	// Static backend type.
	Type Type `yaml:"type"`

	// Name of the backend.
	Name string `yaml:"name"`

	// Servers for non-sharded backend.
	Servers []string `yaml:"servers"`

	// Configuration for sharded backend.
	Sharded *shardedConfiguration `yaml:"sharded"`

	// Queue size reserved for the backend.
	QueueSize int `yaml:"queueSize"`

	// Connection configuration.
	Connection connectionConfiguration `yaml:"connection"`

	// Disable validation (dangerous but useful for testing and staging environments).
	DisableValidation bool `yaml:"disableValidation"`

	// TrafficControl configs the traffic controller.
	TrafficControl *trafficcontrol.Configuration `yaml:"trafficControl"`
}

func (c *staticBackendConfiguration) Validate() error {
	if c.DisableValidation {
		return nil
	}
	hasServers := len(c.Servers) > 0
	hasShards := c.Sharded != nil
	if hasServers && hasShards {
		return fmt.Errorf("backend %s configuration has both servers and shards", c.Name)
	}
	if !hasServers && !hasShards {
		return fmt.Errorf("backend %s configuration has neither servers no shards", c.Name)
	}
	if hasServers {
		return c.validateNonSharded()
	}
	return c.Sharded.Validate()
}

func (c *staticBackendConfiguration) validateNonSharded() error {
	// Make sure we haven't declared the same server more than once.
	serversAssigned := make(map[string]struct{}, len(c.Servers))
	for _, server := range c.Servers {
		if _, alreadyAssigned := serversAssigned[server]; alreadyAssigned {
			return fmt.Errorf("server %s specified more than once", server)
		}
		serversAssigned[server] = struct{}{}
	}
	return nil
}

func (c *staticBackendConfiguration) NewSharderRouter(
	store kv.Store,
	instrumentOpts instrument.Options,
) (SharderRouter, error) {
	if err := c.Validate(); err != nil {
		return SharderRouter{}, err
	}
	backendScope := instrumentOpts.MetricsScope().SubScope(c.Name)

	// Set up queue options.
	queueScope := backendScope.SubScope("queue")
	connectionOpts := c.Connection.NewConnectionOptions(queueScope)
	queueOpts := common.NewQueueOptions().
		SetInstrumentOptions(instrumentOpts.SetMetricsScope(queueScope)).
		SetConnectionOptions(connectionOpts)
	if c.QueueSize > 0 {
		queueOpts = queueOpts.SetQueueSize(c.QueueSize)
	}
	var (
		tc  trafficcontrol.Controller
		err error
	)
	if c.TrafficControl != nil {
		if tc, err = c.TrafficControl.NewTrafficController(
			store,
			instrumentOpts.SetMetricsScope(backendScope),
		); err != nil {
			return SharderRouter{}, err
		}
	}
	if len(c.Servers) > 0 {
		// This is a non-sharded backend.
		queue, err := common.NewQueue(c.Servers, queueOpts)
		if err != nil {
			return SharderRouter{}, err
		}
		r := router.NewAllowAllRouter(queue)
		if tc != nil {
			r = trafficcontrol.NewRouter(tc, r, backendScope)
		}
		return SharderRouter{SharderID: sharding.NoShardingSharderID, Router: r}, nil
	}

	// Sharded backend.
	routerScope := backendScope.SubScope("router")
	sr, err := c.Sharded.NewSharderRouter(routerScope, queueOpts)
	if err != nil {
		return SharderRouter{}, err
	}
	if tc != nil {
		sr.Router = trafficcontrol.NewRouter(tc, sr.Router, backendScope)
	}
	return sr, nil
}

type shardedConfiguration struct {
	// Hashing function type.
	HashType sharding.HashType `yaml:"hashType"`

	// Total number of shards.
	TotalShards int `yaml:"totalShards" validate:"nonzero"`

	// Backend server shard sets.
	Shards []backendServerShardSet `yaml:"shards" validate:"nonzero"`
}

func (c *shardedConfiguration) Validate() error {
	var (
		serversAssigned = make(map[string]struct{}, len(c.Shards))
		shardsAssigned  = make(map[int]struct{}, c.TotalShards)
	)
	for _, shards := range c.Shards {
		// Make sure we have a deterministic ordering.
		sortedShards := make([]int, 0, len(shards.ShardSet))
		for shard := range shards.ShardSet {
			sortedShards = append(sortedShards, int(shard))
		}
		sort.Ints(sortedShards)

		for _, shard := range sortedShards {
			if shard >= c.TotalShards {
				return fmt.Errorf("shard %d exceeds total available shards %d", shard, c.TotalShards)
			}
			if _, shardAlreadyAssigned := shardsAssigned[shard]; shardAlreadyAssigned {
				return fmt.Errorf("shard %d is present in multiple ranges", shard)
			}
			shardsAssigned[shard] = struct{}{}
		}

		for _, server := range shards.Servers {
			if _, serverAlreadyAssigned := serversAssigned[server]; serverAlreadyAssigned {
				return fmt.Errorf("server %s is present in multiple ranges", server)
			}
			serversAssigned[server] = struct{}{}
		}
	}
	if len(shardsAssigned) != c.TotalShards {
		return fmt.Errorf("missing shards; expected %d total received %d",
			c.TotalShards, len(shardsAssigned))
	}
	return nil
}

func (c *shardedConfiguration) NewSharderRouter(
	routerScope tally.Scope,
	queueOpts common.QueueOptions,
) (SharderRouter, error) {
	shardQueueSize := queueOpts.QueueSize() / len(c.Shards)
	shardQueueOpts := queueOpts.SetQueueSize(shardQueueSize)
	sharderID := sharding.NewSharderID(c.HashType, c.TotalShards)
	shardedQueues := make([]router.ShardedQueue, 0, len(c.Shards))
	for _, shard := range c.Shards {
		sq, err := shard.NewShardedQueue(shardQueueOpts)
		if err != nil {
			return SharderRouter{}, err
		}
		shardedQueues = append(shardedQueues, sq)
	}
	router := router.NewShardedRouter(shardedQueues, c.TotalShards, routerScope)
	return SharderRouter{SharderID: sharderID, Router: router}, nil
}

type backendServerShardSet struct {
	Name     string            `yaml:"name"`
	ShardSet sharding.ShardSet `yaml:"shardSet" validate:"nonzero"`
	Servers  []string          `yaml:"servers" validate:"nonzero"`
}

func (s *backendServerShardSet) NewShardedQueue(
	queueOpts common.QueueOptions,
) (router.ShardedQueue, error) {
	instrumentOpts := queueOpts.InstrumentOptions()
	connectionOpts := queueOpts.ConnectionOptions()
	queueScope := instrumentOpts.MetricsScope().Tagged(map[string]string{"shard-set": s.Name})
	reconnectRetryOpts := connectionOpts.ReconnectRetryOptions().SetMetricsScope(queueScope)
	queueOpts = queueOpts.
		SetInstrumentOptions(instrumentOpts.SetMetricsScope(queueScope)).
		SetConnectionOptions(connectionOpts.SetReconnectRetryOptions(reconnectRetryOpts))
	queue, err := common.NewQueue(s.Servers, queueOpts)
	if err != nil {
		return router.ShardedQueue{}, err
	}
	return router.ShardedQueue{ShardSet: s.ShardSet, Queue: queue}, nil
}

type connectionConfiguration struct {
	// Connection timeout.
	ConnectTimeout time.Duration `yaml:"connectTimeout"`

	// Connection keep alive.
	ConnectionKeepAlive *bool `yaml:"connectionKeepAlive"`

	// Connection write timeout.
	ConnectionWriteTimeout time.Duration `yaml:"connectionWriteTimeout"`

	// Reconnect retry options.
	ReconnectRetrier retry.Configuration `yaml:"reconnect"`
}

func (c *connectionConfiguration) NewConnectionOptions(scope tally.Scope) common.ConnectionOptions {
	opts := common.NewConnectionOptions()
	if c.ConnectTimeout != 0 {
		opts = opts.SetConnectTimeout(c.ConnectTimeout)
	}
	if c.ConnectionKeepAlive != nil {
		opts = opts.SetConnectionKeepAlive(*c.ConnectionKeepAlive)
	}
	if c.ConnectionWriteTimeout != 0 {
		opts = opts.SetConnectionWriteTimeout(c.ConnectionWriteTimeout)
	}
	reconnectScope := scope.SubScope("reconnect")
	retryOpts := c.ReconnectRetrier.NewOptions(reconnectScope)
	opts = opts.SetReconnectRetryOptions(retryOpts)
	return opts
}


text:
define([
    "dojo/_base/declare",
    "dojo/_base/lang",
    "dojo/_base/fx",
    "dojo/_base/connect",
    "dojo/fx",
    "dojo/aspect",
    "dojo/dom-construct",
    "dojo/request/xhr",
    "dojo/json",
    "dojo/io-query",
    "dojo/has",
    "dojo/sniff",
    "dijit/Dialog"
], function(declare, lang, fx, connect, coreFx, aspect, domConstruct, xhr, JSON, ioQuery, has, sniff, Dialog) {
    return declare("scidrive.SciServerLogin", null, {

        loginPortalUrl: 'https://portal.sciserver.org/login-portal/',

        constructor: function( /*Object*/ kwArgs) {
            lang.mixin(this, kwArgs);
            var token = ioQuery.queryToObject(dojo.doc.location.search.substr((dojo.doc.location.search[0] === "?" ? 1 : 0))).token;
            if("undefined" !== typeof token) {
                this.credentials = {token: token};
            }
        },

        loginFunc: function(identity, share) {
            var that = this;
            if (undefined == this.credentials && !this.isShare) {
                this.login(this);
            } else {
                require(["scidrive/ScidrivePanel"], function(ScidrivePanel) {
                    if (undefined == dijit.byId("scidriveWidget")) {
                        var pan = new ScidrivePanel({
                            id: "scidriveWidget",
                            style: "width: 100%; height: 100%; opacity: 0;",
                            app: that
                        });
                        pan.placeAt(document.body);
                        dijit.byId("scidriveWidget").loginToVO(that, null); // with updated credentials
                        dijit.byId("scidriveWidget").startup();
                        var anim = coreFx.combine([
                            fx.fadeIn({
                                node: "scidriveWidget",
                                duration: 1000
                            }),
                            fx.fadeOut({
                                node: "loader",
                                duration: 1000
                            })
                        ]).play();

                        aspect.after(anim, "onEnd", function() {
                            domConstruct.destroy("loader");
                        }, true);
                    } else {
                        dijit.byId("scidriveWidget").loginToVO(that, null); // with updated credentials
                    }
                });

            }
        },

        login: function(component) {
            var curUrl = location.protocol + '//' + location.host + location.pathname;
            if(this.isShare) {
                console.debug("Shouldn't be here");
                //curUrl += encodeURIComponent((curUrl.indexOf('?')>0)?'&':'?'+
                //    'share='+this.id);
                //if(document.location.href != curUrl)
                //    document.location.href = curUrl;
                return;
            }
            document.location.href = this.loginPortalUrl+'Account/Login?callbackUrl='+curUrl;
        },

        logout: function(vospace, component, message) {
            // This is some magic I wouldn't like to touch
            // Yeah, better not to touch this
            var identity = JSON.parse(localStorage.getItem('vospace_oauth_s'));
            delete identity.regions[this.id];
            localStorage.setItem('vospace_oauth_s', JSON.stringify(identity));

            delete this.credentials;

            if(this.isShare) {
                this.vospaces = this.vospaces.filter(function(curvospace, index, array) {
                    return curvospace.id != vospace.id;
                });
                dijit.byId("scidriveWidget").loginSelect.removeOption(vospace.id);
            }

            dijit.byId("scidriveWidget")._refreshRegions();

            document.location.href = this.loginPortalUrl+"Account/Logout";
        },

        request: function(url, method, args) {
            var that = this;
            var params = this.signRequest(url, method, args);
            var xhrPromise = xhr(url, params);
            xhrPromise.then(
                null,
                function(error) {
                    if(error.response.status == 401) {
                        if(that.isShare) {
                            if (typeof that.credentials === 'undefined') { // need to authenticate for the share
                                that.login();
                            } else { // already authenticated, but token is either invalid or belongs to other group
                                alert("Error: the user does not belong to share group. Logging out.");
                                // need the proper vospace object here V
                                that.logout(undefined, undefined, that, "User does not belong to the group requested by the share.");
                            }
                        } else {
                            that.login();
                        }
                    }
                });
            return xhrPromise;
        },

        signRequest: function(url, method, args) {
            var param = {};

            if("undefined" !== typeof args)
                param = args;

            if("undefined" === typeof param.headers)
                param.headers = {};

            if("undefined" !== typeof this.credentials && "undefined" !== typeof this.credentials.token)
                param.headers["X-Auth-Token"] = this.credentials.token;

            if(this.isShare) {
                param.headers["X-Share"] = this.id;
                console.debug(param);
            }
            param.method = method;

            if(args)
                param.query = ioQuery.objectToQuery(args.content);

            return param;
        }

    });
});


text:
Stephen Colbert Holds Back Tears Discussing Paris Attacks
Colbert informed his audience about the terror attacks in Paris during his Late Show taping Friday evening. At the end of the show, he delivered some heartfelt remarks into the camera.
News of the horrific attacks in Paris that have left at least 127 dead did not break until Stephen Colbert was midway through his taping of Friday night's The Late Show. According to audience members on Twitter, he broke the news to his shocked crowd during a commercial break in the show.
The host waited until the end of the CBS broadcast to address the issue on everyone's minds tonight.
"Folks, we end tonight's show with a heavy heart because we taped all of tonight's show, and then we found out about the horrific attacks in Paris today," Colbert said. "I know not much is known right now. We do know there have been many deaths and the crisis is still ongoing."
"President Hollande declared a state of emergency and President Obama has promised that the United States will do whatever it takes to bring those terrorists to justice," he continued. "We add our thoughts and prayers to everyone in Paris."
"And now, we'll see you on Monday," Colbert said, before taking a deep breath and long pause during which it appeared he was holding back tears. "Goodnight."
Awkwardly, CBS then cut directly to a rerun of James Corden's Late Late Show that originally aired immediately after the Oregon community college shooting and featured a similarly heartfelt statement up top.


This is one of the hottest gifts this holiday season!
When I spent most of November shooting in Asia I was overwhelmed with the reality that everyone seemed to have a one of these selfie sticks to help them take photos of themselves (often with their loved one). These things were as common as phones, so my wife has added it to her holiday wish list. They are also easy for kids to use as well. I'll be reviewing several models just before Christmas, so stay tuned.
Trey Ratcliff's Lightroom Presets and HDR Tutorial were hot gifts last year, so this year they've updated both and done a new Textures Tutorial which includes 170 textures. Click the images above to learn more about each and use my discount coupon code RONMART15 to save 15%!
I got one of these back in April 2014 and it's been a huge hit whenever I wear it. I try to use it at my workshops and private lessons because its always good for a chuckle – it also doubles as a grey card in a pinch too!
The RS-Sport is a special camera strap that allows your photographer to keep the camera at the ready when they are out walking during vacation or during the little league game. BlackRapid also makes a wide variety of great straps to meet all your needs (from $29.95 to $134.95 for the dual camera version).
While I am not a fan of UV filters, a lot of people insist on buying them. I've used the UV2 & UV3 filters on my recent trip to Asia and I loved the quality. I'm looking forward to trying out their polarizer and ND filters next year as they are super easy to remove thanks to the great grip and the quality of the UV2 matches Hoya and the UV3 matches my B+W filters for a lot less money. Click here to learn more.
Buying gear is expensive and sometimes you realize that you don't need it as much as you thought you did (this is especially true with super telephoto lenses). What better gift than to rent a dream lens or camera that is out of your budget? LensRentals.com is my preferred site to rent gear from and my discount offer makes it even easier to rent the gear you always dreamed that you could buy!
Check out my Imagenomic Portraiture Discount & Tutorial article (& video) which shows both products in action on a real photo so you can see how they work and I why I can't live without them.
I recently published my review for Topaz Glow and my Facebook wall is showing all sorts of cool photos that readers are publishing using this awesome new product. It's an awesome product that really is unlike anything else on the market.
I love the results and literally I'm done with one click! Click here to learn more and don't forget to use my discount coupon code RONMART to save 15% on any or all Topaz Labs products!
Cradoc fotoSoftware has a cool product called fotoQuote that I use to find out how much my photos are worth when a publication comes knocking . To celebrate their 20th year in business they are are offering their lowest prices ever with a 20% off special that's available when you CLICK THIS LINK (make sure coupon code RMPB0809 appears in your cart when you check out).
If you are worried that your photographer will think the SnapR looks too much like a purse for their little camera, then these are the macho solution for the man with the little camera. It's also great if you have lenses or accessories you want to carry with your camera. I LOVE this bag with my X-E2!
This one isn't just for photographers it is for anyone with a laptop plus other gadgets (tablets, cell phones, Kindle, etc…), and it was my favorite acquisition of 2013. In fact, I love it so much that I'm gave a dozen of my friends this bag for the holidays last year!
A Sennheiser MKE 400 HDSLR Microphone is helpful for the would be videographer in your life who is only using the camera to record sound and that sound isn't recording very well. This is nice one if you have kids too!!
Please note that if you own a NEC display then you should get NEC SpectraSensor Pro (powered by X-Rite) with the SpectraView software to accurately calibrate your display. It's the same sensor as the one shown above with the software you need to calibrate your NEC (only) displays.
If your photographer doesn't already have KelbyOne (discount offer here), then getting this endless awesome online video training the best money you can spend! Seriously, if I won the lottery I'd spend all my time just sitting back and enjoying these videos by some of the top photographers in the world so I could better my skills!
There's actually more books that I recommend but these are pretty safe bets that your photographer with both love them and probably not own them already. Click here to see my full list of recommended books.
The Leica Tabletop Tripod ($119) and Leica Large Ball Head ($209.95) (or the Short version shown above) combo are stupid expensive ($328.95), so I never bothered buying them. However my mentor (a Pulitzer Prize winning photojournalist shown above), swore that when used on the chest (as shown above) that it could help me get stable handheld shots that were never possible before. Despite his advice, it took me almost two years to bring myself to finally buy it myself. In short, it changed my life and helped me to realize how this little investment helped me a lot more than many of the $1000+ investments I made to improve my photography.
Given the ridiculous price of this combo, almost no photographer will buy this set for themselves, but like a great set of high quality steak knives – you never regret it (or can go back) once you own it. Click here to see my article about this combo which also includes a simple video to show you how to apply this technique.
I call the Gitzo GT1541 - Perfect Travel/Hiking Tripod because it is. It's lightweight and just short enough when closed that it can travel internationally with your carry on items. It's super expensive because of the carbon fiber, but that also makes it super sturdy so that it's a purchase you make once and never need to revisit again. While the tripod head is not included, no photographer will be sad to see this for the holidays (unless they own one already – rare given the cost). See also my tripod recommendations article which includes info on ball heads and monopods too.
The NEC PA242W computer monitor is the ultimate photo editing monitor for both Mac and PC's and it's something that your photographer will happily add next to their current monitor if they currently already own one. It's better than the sexier looking Apple displays, and it's a luxury that few will splurge for without a business need. There's also a 27" ($999 on sale) and 30" model ($1649 on sale) that will have your photographer doing cart wheels and crying tears of joy like a like a little baby if they find this beast under the tree (warning, it's huge).
2015 is very likely to be the year when 4k Ultra HD displays become the standard display that new computer and home display buyers will purchase. If you want to be at the leading edge of technology, this is one that is sure to put a smile on your face. I'll be reviewing the NEC PA UHD 4k displays that are specifically designed for photographers and videographers in 2015.
I'm offering 50% off Silver & Gold Portfolio Reviews and daily flat rate specials for one on one training. Contact me for more details.
If your photographer wants to be a part of a high end fashion shoot in New York City in 2015 (date TBD) with a top fashion photographer who has shot hundreds of magazine covers, then. Contact me to learn more about this amazing experience! ($3000+) – limited spots available.
My photographer has all that, now what?!!!!


text:
Canadian school district cancels field trips to US after Trump's travel ban
© 2017 Cable News Network, Inc.

President Donald Trump took executive action on curbing access visas and limiting refugees coming to the US. The executive action is called "Protection of the nation from foreign terrorist entry into the United States," which institutes what the President has called "extreme vetting" of immigrants.

Posted at 9:52 AM, Feb 13, 2017
(CNN) -- A Canadian school district that's home to 35,000 students has canceled all field trip to the US until there's "clarity" on President Trump's travel ban.
The decision by the Greater Essex County District School Board stands until administrators know for sure whether students will be able to travel safely across the border.
"We have a student population with a very diverse background," school board spokesman Scott Scantlebury told CNN.
"Some students would be traveling as Canadian-dual nationals and some students might be traveling with passports from a foreign country. So as a result, we are waiting to get clarity before continuing these trips to Detroit."
The Greater Essex County District School Board has schools in nine municipalities including Windsor, which sits across the Detroit River.
"We will wait to see what happens at the end of the month and re-evaluate then. Hope to have some clarity and hope to re-establish these opportunities for our students," Scantlebury said.
A trip to the Holocaust Memorial Center in Farmington Hills, and a trip to see "The Lion King" at Detroit Opera House have both been canceled.
Trump's executive order bars citizens of seven Muslim-majority countries -- Iraq, Syria, Iran, Libya, Somalia, Sudan and Yemen -- from entering the US for 90 days, bans all refugees for 120 days and indefinitely halts refugees from Syria.
Earlier this month, an appeals court ruled it can't go into effect until a final ruling can be made.