text:
Conversation First Television Program
Half Hour Interactive Television Program
Conversation First will explore unforeseen events that took place prior to the protests, and the death's of George Floyd, Breonna Taylor, and Ahmaud Arbery and Rayshard Brooks that ignited the fire to this explosive story of injustice of murder.
Conversation First will also go behind the scenes of The Black Lives Matter movement not only to highlight their policy on police brutality but also to share and explain their vision of couragement of police reform but also to bring awareness and END systemic racism.
Systemic racism first begins with identifying the disparities in criminal justice, housing, healthcare, employment, politics, and education. Redlining basically meant it was impossible for black and brown people to own homes. Banks and the real estate industry determined which neighborhoods would receive loans and what type of people would live in the neighborhoods.
Conversation First gives a direct insight into these stories and troubled community's problems all over the world.
Our platform will discuss and debate issues such as white privilege and wealthy takeovers which are results in the growth of the racial wealth gap in America.
In America this led to the areas that were redlined not have access to the tax support needed for schools, transportation, and health care systems; which ultimately led to over policing.
Lena Mellese / Assoc. Producer
HIlena Lena Mellese an African American woman. I identify as Ethiopian ethnicity. I was raised in the St. Paul suburbs of Minnesota. I completed schooling in Minneapolis at Augsburg University with a Bachelor's in Business Marketing and relocated to Los Angeles in 2015. I am currently studying film and have starred as the lead female in an independent film released in early 2020.
McKinley Horton / Producer
McKinley Horton first played keyboards and toured for several years with Harold Melvin and his legendary group, The Blue Notes. Now, a veteran music producer and songwriter, McKinley has created great hits for Vanessa Williams' and he is a collaborator of legendary music producers Jimmy Jam, Terry Lewis, Organized Noise, Sleepy Brown and Outkast, and countless other industry giants. He has contributed to hit film soundtracks for such features as "Shaft2000", "Snakes On The Plane", "Miami Vice", and "Money Train."
Today, McKinley is expanding more creatively into Television and Film, Music Licensing, and Book Publishing. He also is Chief Operating Officer for Shamack Pictures, which is currently in pre-production for the upcoming movie the GhostDancer
Robert Lott / Producer
Robert Lott is the President of Teamwork Media Group International, Digital Media Producers.
Lott is one of only a handful of producers with a successful track record in syndication with his first syndicated hit, "The Gavin & Lott Show" that he also co-hosted and aired for 2 years in 1982 – 1984 covering over 75% of the country.
Over the years Bob has worked with many of the recording artists in the stable of the legendary production duo of Kenny Gamble and Leon Huff's Philadelphia International Records, including Teddy Pendergrass, McFadden & Whitehead, Patti LaBelle, Bunny Sigler, The O'Jays and many, many others.


Sean Archer Picks is a recognized and trusted name within the sports handicapping community. The SA staff is equipped with over 25 years experience which means we have earned and built our reputation. Whether your game is NFL, NBA, MLB or NCAA, SA Sports Picks is your premier handicapping headquarters this season.
Sean developed this service after years of research following statistical trends formulated to generate information based on compiled statistics. Sean's ability to differentiate variances in odds set by Vegas and where he feels the odds should be set is where we are able to capitalize and earn a return. We understand you don't have the time to make daily educated predictions. We put in the time so you can make the money.
SA spent the majority of his early years belly up to card tables. Sean has used his card experience as an advantage to understanding the percentages and applying a similar concept to sports investing. Sean was able to prone his handicapping technique spending time with TSSWins.com. Sean wanted to capitalize fully on his hard work and talents and subsequently formed SeanArcherPicks.com in the fall of 2005.
Sean Archer Picks will release only his highest rated selections each and every day. You can be assured all picks listed on our daily Tipsheet will be visible after the listed game time. We take pride in our documented history and we back our picks with a Performance Guarantee. Each prediction in NBA, College Basketball, NFL, College Football and MLB Baseball is Guaranteed to win! If a selection fails to cover we will automatically issue you 50 credits to your account for the losing pick. The credits can be used towards a future selection of your choice.
The Sean Archer staff prides themselves on their expert and researched sports picks. We rely on our knowledge and experience to consistently take advantage of lines released by Vegas. We want to give our members the insurance that our services are tailored to long term investing. Stop throwing away your money and rely on the expert advice of Sean Archer Sports Picks and our Performance Guarantee.


text:
You are here: Home / Consider this / Is there life on Mars?
Is there life on Mars?
February 25, 2016 by yourworkinggirlsays Leave a Comment
Yesterday at the BRIT awards in London, after a lovely obituary by Annie Lennox and Gary Oldman, who accepted the rare BRIT Icon Award on Bowie's family's behalf, 19-year old singer, Lorde—a young woman David Bowie called the "tomorrow" of music—walked out to centre stage and, backed up by Bowie's long time touring band, sang Life on Mars?.
I don't know about you, but I'm still listening to a lot of David Bowie. Ziggy Stardust from beginning to end at least once a day. Low, once a week. Cuts from the Best of Bowie when I only have a minute. Modern Love five times in a row when I'm getting ready to go to work.
I started listening to Bowie when I was a teenager growing up on the Rock. My sister brought Ziggy Stardust home from London when she went there on a school trip. Teenage girls loved Bowie.
Forget loving Bowie. Many teenage girls wanted to be Bowie. This one did, anyway. Neither boy or girl. Androgenizing without the benefit of pharma. Lady Stardust sang his songs of darkness and dismay. Having the universe your playground. It all made sense.
And so did last night's tribute. The band made you sit up and take notice at the first chord. Lorde was superb. She took hold of the song and held the reins the entire way through. It could not have been better.
The 20-minute tribute is great, but if you just want to see the Lorde bit, check in at 10:25.
It's a god-awful small affair
To the girl with the mousy hair
But her mummy is yelling, "No!"
And her daddy has told her to go
But her friend is nowhere to be seen
Now she walks through her sunken dream
To the seat with the clearest view
And she's hooked to the silver screen
But the film is a saddening bore
For she's lived it ten times or more
She could spit in the eyes of fools
As they ask her to focus on
Sailors fighting in the dance hall
Oh man!
Look at those cavemen go
Gail Pi cco is a strategist who has worked in the nonprofit sector for 25 years, most of which as President of Gail Picco Associates. Prior to establishing Gail Picco Associates, she spent eight years working in a shelter for assaulted women and children. She is the author of What the Enemy Thinks, a recent novel set in the nonprofit sector, of Your Working Girl, a blog of memoir and commentary on politics, charity and popular culture, and writes a regular column for Hilborn Charity News. She is a Principal with The Osborne Group in Toronto and Chair of the Regent Park Film Festival.
Filed Under: Consider this Tagged With: David Bowie, Gail Picco, Lorde, Your working girl
« Covering Itself with Glory: How Nonprofit Agencies are Failing Government- Sponsored Refugees
How did The LEAP Manifesto make it to the floor of the NDP Convention? »

redpajama_set_name: RedPajamaCommonCrawl


text:
Grewia yinkiangensis är en malvaväxtart som beskrevs av Yung Chun Hsu och R. Zhuge. Grewia yinkiangensis ingår i släktet Grewia och familjen malvaväxter. Inga underarter finns listade i Catalogue of Life.

Källor

Malvaväxter
yinkiangensis

redpajama_set_name: RedPajamaWikipedia


text:
★ 7 / 10 A Thief's New Year 2014, Dec. 31, 2022
★ 9 / 10 House of the Architect, Oct. 1, 2022
★ 8 / 10 Intertheft, Oct. 1, 2022
★ 6 / 10 Reminiscences, Sept. 24, 2022
★ 6 / 10 The End of the Line, Sept. 24, 2022
★ 7 / 10 The Glow, Sept. 24, 2022
★ 6 / 10 Childhood's End, Sept. 24, 2022
★ 7 / 10 Shiver me Timbers!, Sept. 24, 2022
★ 5 / 10 Dog days, Sept. 24, 2022
★ 6 / 10 The Doldrums, Sept. 24, 2022
★ 7 / 10 THE ATTACK OF THE 50 FT CRAYMAN, Sept. 24, 2022
★ 7 / 10 Compulsory Egress, April 1, 2022
★ 6 / 10 Falling, In Love, Jan. 2, 2022
★ 6 / 10 Lone Rock Outpost, Sept. 12, 2021
★ 8 / 10 The Weird Masquerade, Sept. 12, 2021


We have been providing dependable pool construction, repair and cleanining services since 2005. Our staff is highly trained and certified in swimming pool maintenance, pool cleaning.
Our pool company services residential swimming pools Monday through Saturday year-round. One benefit in having a swimming pool service is that the life of a swimming pool can be prolonged for many years, avoiding costly repairs.
We provide all of the pool repair and maintenance equipment to service your pool and carry all the necessary insurances for our employees.
Why trust an person with no insurance or license and just a truck and pool pole.
Here are the Steps we will follow when cleaning your Swimming Pool.
• Backwash filter and inspect pump operation.
• Clean all skimmer and pump baskets.
• Skim leaves and debris from water surface.
• Brush pool walls, steps, and floor as needed.
• Clean water line "tile" as needed.
• Test pH, chlorine, and total alkalinity.
• Refill automatic chlorinator with chlorine tablets.
• Adjust chemicals as needed and shock pool as necessary.
• Provide a detailed checklist for services performed.
• Supply all labor and equipment necessary to clean pool.
We use the highest quality chemical treatments to ensure proper levels and balance for maximum sanitation and comfort.
Should water chemistry problems occur between scheduled visits that are not the fault of extreme weather or equipment failure, required service shall be performed without any cost to you!


Websites about biking and bike products.
International Mountain Biking Association IMBA creates, enhances and preserves trail opportunities for mountain bikers worldwide.
Mountain Bike - Daily and Weekly updates from the world of Mountain Biking.
Utah mountain bike trails described, pictures, trail maps, wallpaper photos, and screensavers.
Features an overview of recumbent bicycles and the tradeoffs involved in recumbent cycling.
New Zealand Mountain Bike Web is the comprehensive resource of New Zealand mountain biking.


Thierry JEUDY joined TECHNIDATA in 2003, bringing with him over 30 years' experience in the industry of In Vitro Diagnostics instruments (IVD) and Laboratory Information Systems (LIS).
Thierry is Senior VP in charge of TECHNIDATA subsidiaries. He is also the General Manager of TECHNIDATA France, responsible for developing the company's presence in the French market, growing the market share, and providing local support to customers.
During the preceding 10 years, Thierry was the Senior VP Marketing and Services at TECHNIDATA, in charge of developing the company's product lines and managing the Services department at a Group level.
Prior to joining TECHNIDATA, Thierry held several management positions at BAYER HEALTHCARE FRANCE where he served as Business Director for Laboratory Information Systems and Laboratory Automation product lines. He also held the position of Sales Director, France, in which he was responsible for a global range of devices for LIS solutions, including instruments for blood gas, biochemistry, hematology, histology and cytology analyses.
Under his leadership, BAYER HEALTHCARE FRANCE launched its Laboratory Automation product line on the French market. At the same time, Thierry was responsible for driving the marketing definition of the Instrument Concentrator for Laboratory Automation in the USA. He was a member of the management committee of BAYER HEALTHCARE FRANCE for 10 years.
Thierry's previous experience includes several sales and marketing positions at TECHNICON, a leading specialist in the industry of Laboratory Information Systems, before TECHNICON was taken over by BAYER HEALTHCARE.


Campus Lifestyle Section (CLS) is a section placed under Student Development and Campus Lifestyle (SDCL) Department. Our vision is to lead student character development and promote culture of excellence in UniKL. The section serves to support the university by equipping students with solid foundation of Graduate's High Order Critical Skills (G-HOCS) for self-development, self-exploration and future excellence.
Through various academic subjects and specially crafted activities, we strive to produce well-balanced graduates with towering personality - confident, knowledgeable, skillful, entrepreneurial, competitive and noble in executing any given tasks and responsibilities. The various clubs, societies and guidance made available will enable our students to enhance their university experience and make their student life more interesting and meaningful. Active involvement in club activities, sport activities and campus activities will be assessesed alongside academic activities. Sense of social responsibility is inculcated through numerous community service activities such as UniKL Care and Enactus. In short, CLS provides an endless avenue for students to develop themselves holistically. We provide life and style to the campus in helping students to develop their par-excellence character.


text:
from setuptools import setup

# Read a __version__
exec(open('alfpy/version.py').read())

# Long description
fh = open('README.rst')
long_description = fh.read()
fh.close()

setup(
   name='alfpy',
   version=__version__,
   description="Alignment-free package to compare DNA/RNA/protein sequences (bioinformatics).",
   long_description=long_description,
   author='Andrzej Zielezinski',
   keywords='alignment-free bioinformatics sequence DNA protein homology phylogeny',
   license="MIT",
   author_email='andrzejz@amu.edu.pl',
   url="http://www.combio.pl/alfree",
   packages=['alfpy', 'alfpy.utils', 'alfpy.utils.data'],
   #setup_requires=["numpy"],
   install_requires=["numpy"],
   scripts=[
     'bin/calc_bbc.py',
     'bin/calc_graphdna.py',
     'bin/calc_fcgr.py',
     'bin/calc_lempelziv.py',
     'bin/calc_ncd.py',
     'bin/calc_wmetric.py',
     'bin/calc_word.py',
     'bin/calc_word_bool.py',
     'bin/calc_word_sets.py',
     'bin/calc_word_cv.py',
     'bin/calc_word_d2.py',
     'bin/calc_word_ffp.py',
     'bin/calc_word_rtd.py',
     'bin/create_wordpattern.py'
   ],
   classifiers=[
     'License :: OSI Approved :: MIT License',
     'Environment :: Console',
     'Operating System :: MacOS',
     'Operating System :: POSIX :: Linux',
     'Programming Language :: Python :: 2',
     'Programming Language :: Python :: 2.7',
     'Programming Language :: Python :: 3',
     'Programming Language :: Python :: 3.3',
     'Programming Language :: Python :: 3.4',
     'Programming Language :: Python :: 3.5',
     'Topic :: Scientific/Engineering',
     'Topic :: Scientific/Engineering :: Bio-Informatics',
   ],

)

redpajama_set_name: RedPajamaGithub


NBN Week Australia's National Broadband Network "speed scandal" was in the news again last week, as nbn™, the company building and operating the network, suggested it should publish its internal speed data to resolve the issue.
Last week, Telstra 'fessed up that it can't always deliver the speeds it advertises, blaming nbn™ for inadequate data about network conditions.
Telstra owns the copper right up until the point that nbn™ takes ownership of it, but it's probably not allowed to collect that information prior to handover – it would mean Telstra Wholesale and Telstra Retail exchanging information not available to other carriers.
Announcing its first quarter results, nbn™ CEO Bill Morrow said it was considering whether to publish its internal estimates of theoretical performance on individual customer tails.
He dropped a hint for retailers, saying if they didn't publish the information themselves, it would be "more likely" that nbn™ would.
The network issues that strangle user speeds will either take months to fix, or will be fixed within months, depending on which way you want to spin Morrow's words.
Financial results are regularly good, and rather dull, news for nbn™, and the first quarter of 2017-2018 was no exception.
With connections ramping up, so is revenue. The company reported AU$420 million of cash arrived on the back of 2.9 million premises having been activated with NBN connections.
With 520,000 activations in quarter, most of them fibre-to-the-node (FTTN), that technology overtook fibre-to-the-premises (FTTP) for the first time. There are now 289k activations on the hybrid fibre-coax network, 1.27m on FTTN, and 1.1m on FTTP.
Alas, average revenue per user (ARPU) remains at $43 per month, well below the corporate target of $52. nbn™ has long said that ARPU should tick up once it starts to sell business services.
Fairfax's real-estate offshoot Domain reports a promo-survey from CRIBZ, saying NBN access is worth as much as $30 a month to millennial renters (that's two smashed avocado toasts, or half a dozen artisanal coffees, as a rough guide).
"Millennial renter" is a tautology, because they famously can't afford to buy houses in Australian cities, thanks to low wage growth, the casualisation of everything, high property prices and a ruinous appetite for avocado toast and artisanal coffee.


text:
REMINISCENCE: Sci-Fi Film Noir
REMINISCENCE (Blu-ray Review)
2021 / 116 min
FROM WARNER BROS
Review by Stinky the Destroyer😽
#InPartnershipwithWB
If nothing else, Reminiscence looks incredible. Taking place in the near future, climate change has flooded coastal cities and the days are so sweltering that everyone's forced to live more-or-less nocturnally. In addition to the obvious film noir aesthetics, this future dystopia is a triumph of production design, which is as visually impressive as the significantly more lauded Dune.
But depicting Miami as a waterlogged urban jungle has little to do with the actual story. Hugh Jackman plays Nick Bannister, a war veteran who makes a living with a machine that allows people to relive their memories. He becomes romantically involved with new client Mae (Rebecca Ferguson), a sultry lounge singer who mysteriously disappears a few months later.
To the chagrin of his beleaguered assistant, Watts (Thandiwe Newton), Nick becomes obsessed with finding Mae, repeatedly using the machine to search for clues to her whereabouts. Meanwhile, the police enlist his help to interrogate a suspect with connections to a New Orleans kingpin who deals a designer drug called Baca. When Mae shows up in one of those memories, Nick realizes she's not the woman he thought she was. Mae might also be connected to the murder of one of his other clients, a young woman who was having an affair - and had a son with - the city's most powerful land baron.
Nick stumbles into the Ink & Paint Club.
There's actually a lot more plot than a film like this really needs, compounded by too many antagonists, some who arrive pretty late in the film. Interest level rises and wanes with all the numerous story twists - some surprising, some not - but the film noir elements are wonderful. In addition to a dark, neon-lit atmosphere and narration straight out of a pulp novel, Jackman is effective as the cynical, streetwise protagonist who gets in over his head, while Ferguson makes a fetching femme fatale. But Newton gives the most earnest performance, serving as Nick's moral compass.
So while the narrative isn't always compelling, the special effects, production design and homages to classic film noir hold our attention. Perhaps that's not enough to warrant repeated viewings, but it's certainly worth checking-out at least once. Reminiscence kind of came-and-went with little attention when first released, but here's hoping it'll be remembered come Oscar time, since its technical aspects deserve a few nods.
EXTRA KIBBLES
FEATURETTES - "Reminiscence Family Reunion" (many of the cast & crew also work on Westworld); "The Sunken Coast" (behind-the-scenes look at the set design)"; "Crafting a Memory"; "You're Going on a Journey" (interviews with various cast & crew).
MUSIC VIDEO - "Save My Love" by Lonr & Amber Mark
Posted by D.M. Anderson at 2:21 PM
CREEPSHOW: SEASON 2: Good News & Bad News
THE POOP SCOOP: Classics & New Classics
ADVENTURES IN THE BUDGET BIN: The Wicked Old Time ...
HEAVEN CAN WAIT and REDS: Two of Beatty's Best
THE HILLS HAVE EYES: Crazy Cannibals in 4K
RAGING FIRE is the Best Action Film of the Year
MAD MAX ANTHOLOGY (4K): The Apocalypse Gets an Upg...
THE THIN MAN GOES HOME: A Working Vacation
MANIAC COP 2 and MANIAC COP 3: Your Favorite Undea...
LEGENDS OF TOMORROW: THE COMPLETE SIXTH SEASON: Ex...
PRISONERS OF THE GHOSTLAND: More Cage Craziness
MIDDLE-EARTH ULTIMATE COLLECTOR'S EDITION: One Set...
THE DECEIVERS is a Merchant Ivory Oddity
THE CHINESE BOXER: Context is Everything
THE LAST OF SHEILA and the Coburn Cruise
THE SPORE and the Marauding Meatballs
SNOWPIERCER - THE COMPLETE SECOND SEASON: The Trai...
Even Deeper DEEP RED (4K UHD)
Free Kittens' HOLIDAY GIFT GUIDE!
THE EMPEROR'S SWORD Slows Things Down
THE HIDDEN LIFE OF TREES: Part Character Study, Pa...
You Gotta Try THE BEAST MUST DIE (1952)
THE ORIGINAL CHRISTMAS SPECIALS COLLECTION (SteelB...
AN ANGEL FOR SATAN: Bodacious Barbara


Dr Salgado Kent, marine biologist and bioacoustician asks… Have you ever heard dolphins communicate with one another? Or male whales sing to outcompete other males in attracting females?
So how do dolphins living in Roebuck Bay or humpback whales migrating key breeding grounds off the Kimberley use communication within their social societies?


text:
Suzanne Bidlake
Brands use tech to help endangered animals in 'March for giants' campaign
A herd of 3D digital elephants created by 18 Feet & Rising will march across the world to end the slaughter of endangered animals in Africa.
The "March for giants" campaign, which is the first to use digital out-of-home in this way, was an International Winner in the 2016 creative digital competition run by Campaign and Ocean Outdoor.
Corporate donors will be invited to create an elephant decorated with their logo and brand colours for £5,000, the cost of protecting an elephant for life
Individuals and companies will be able to generate their own branded adult and baby elephants to swell the herd which will march in real time across Ocean's high-impact digital outdoor sites in the UK and across some of their Alliance partners screens in Hong Kong and New York. The campaign supports the work of the conservation organisation Space for Giants.
Corporate donors will be invited to create an elephant decorated with their logo and brand colours for £5,000, the cost of protecting an elephant for life in the wild in Africa. Individuals will have the chance to name a baby elephant for £5 or sign up to an annual subscription of £5-a-month, which will protect an elephant for one year.
The virtual herd will be created and grow online during March before being released across five giant digital out-of-home screens operated by Ocean. These include Tsim Tsa Tsui in Hong Kong, Times Square in New York, Westfield Stratford City in London, The Media Eyes at Grand Central in Birmingham and the Manchester Printworks.
The march will begin in Hong Kong on March 23 before moving to New York and on to London on March 24. It will continue to Birmingham on the following day and end in Manchester on March 26.
Corporate donors already signed up to the "March for giants" include National Express, Givergy, Made by Riley, The Delta Group, Westfield, Chantecaille, BCD Travel and First Avenue.The march will be supported in social and broadcast media by a network of celebrities, social influencers and international news networks across the world.
William Thacker, creative director at 18 Feet & Rising, approached Space for Giants after the 2016 Great Elephant Census reported that a third of all African elephants have been wiped out in the last seven years.
The creative digital competition run by Campaign and Ocean rewards creative concepts that are later brought to life on Ocean's digital screens. "With the competition open, we saw an opportunity and real possibility of securing some global media on a scale significant enough to make a difference to an extremely serious and unreported issue," said Thacker. Digital agency Popped also worked on the campaign and DOOH.com worked on digital integration.
"To see this march of virtual elephants unfold across the world is a massive ideas made possible by an incredible team," said Tim Bleakley, chief executive of Ocean Outdoor. "The creative concept and cause are worthy winners of our creative competition."
Advertising Marketing Media And Rising
18 Feet & Rising
Google's Matt Brittin on tax, Brexit and the future of the internet
How Tom Tagholm personified the voice in your head for anti-gambling ads
What to think about at MWC 2017
Building brands with emotion: as personal as it gets
The art of attention in the digital age
Stella Artois launches third year of 'Buy a lady a drink' campaign
Does advertising reflect the spirit of the age?


text:
package org.onosproject.rest.resources;

import com.eclipsesource.json.Json;
import com.eclipsesource.json.JsonArray;
import com.eclipsesource.json.JsonObject;
import com.google.common.collect.ImmutableSet;
import org.junit.Before;
import org.junit.Test;
import org.onlab.osgi.ServiceDirectory;
import org.onlab.osgi.TestServiceDirectory;
import org.onlab.rest.BaseResource;
import org.onosproject.codec.CodecService;
import org.onosproject.codec.impl.CodecManager;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.DeviceId;
import org.onosproject.net.Link;
import org.onosproject.net.Device;
import org.onosproject.net.PortNumber;
import org.onosproject.net.DefaultPort;
import org.onosproject.net.Port;
import org.onosproject.net.device.DeviceService;
import org.onosproject.net.device.DeviceServiceAdapter;
import org.onosproject.net.provider.ProviderId;
import org.onosproject.net.topology.ClusterId;
import org.onosproject.net.topology.DefaultTopologyCluster;
import org.onosproject.net.topology.DefaultTopologyVertex;
import org.onosproject.net.topology.Topology;
import org.onosproject.net.topology.TopologyCluster;
import org.onosproject.net.topology.TopologyService;
import org.onosproject.net.topology.TopologyServiceAdapter;
import javax.ws.rs.client.WebTarget;
import java.util.Set;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;
import static org.junit.Assert.assertThat;
import static org.onosproject.net.NetTestTools.device;
import static org.onosproject.net.NetTestTools.did;
import static org.onosproject.net.NetTestTools.link;
import static org.onosproject.net.PortNumber.portNumber;

/**
 * Unit tests for Topology REST APIs.
 */
public class TopologyResourceTest extends ResourceTest {

    private static class MockTopology implements Topology {
        @Override
        public long time() {
            return 11111L;
        }

        @Override
        public long creationTime() {
            return 22222L;
        }

        @Override
        public long computeCost() {
            return 0;
        }

        @Override
        public int clusterCount() {
            return 2;
        }

        @Override
        public int deviceCount() {
            return 6;
        }

        @Override
        public int linkCount() {
            return 4;
        }

        @Override
        public ProviderId providerId() {
            return ProviderId.NONE;
        }
    }

    private static class MockTopologyService extends TopologyServiceAdapter {
        final DefaultTopologyVertex root = new DefaultTopologyVertex(did("rootnode"));
        final Topology topology = new MockTopology();
        final TopologyCluster cluster1 =
                new DefaultTopologyCluster(ClusterId.clusterId(0),
                        2, 1, root);
        final TopologyCluster cluster2 =
                new DefaultTopologyCluster(ClusterId.clusterId(1),
                        4, 3, root);

        @Override
        public Topology currentTopology() {
            return topology;
        }

        @Override
        public Set<TopologyCluster> getClusters(Topology topology) {
            return ImmutableSet.of(cluster1, cluster2);
        }

        @Override
        public TopologyCluster getCluster(Topology topology, ClusterId clusterId) {
            return cluster1;
        }

        @Override
        public Set<DeviceId> getClusterDevices(Topology topology, TopologyCluster cluster) {
            DeviceId device1 = did("dev1");
            DeviceId device2 = did("dev2");

            return ImmutableSet.of(device1, device2);
        }

        @Override
        public Set<Link> getClusterLinks(Topology topology, TopologyCluster cluster) {
            Link link1 = link("src1", 1, "dst1", 1);
            Link link2 = link("src2", 1, "dst2", 1);
            Link link3 = link("src3", 1, "dst3", 1);
            return ImmutableSet.of(link1, link2, link3);
        }

        @Override
        public boolean isInfrastructure(Topology topology, ConnectPoint connectPoint) {
            return "dev2".equals(connectPoint.elementId().toString());
        }

        @Override
        public boolean isBroadcastPoint(Topology topology, ConnectPoint connectPoint) {
            return "dev1".equals(connectPoint.elementId().toString());
        }

    }

    private static class MockDeviceService extends DeviceServiceAdapter {

        @Override
        public Device getDevice(DeviceId deviceId) {
            String deviceId1 = "dev2";
            Device device = device(deviceId1);
            return device;
        }

        @Override
        public Port getPort(DeviceId deviceId, PortNumber portNumber) {
            String deviceIdString = "dev2";
            Device device = device(deviceIdString);
            Port port = new DefaultPort(device, portNumber(1), true);
            return port;
        }
    }

    /**
     * Initializes the test harness.
     */
    @Before
    public void setUpTest() {
        TopologyService topologyService =  new MockTopologyService();
        DeviceService mockDeviceService = new MockDeviceService();
        CodecManager codecService =  new CodecManager();
        codecService.activate();

        ServiceDirectory testDirectory =
                new TestServiceDirectory()
                        .add(DeviceService.class, mockDeviceService)
                        .add(TopologyService.class, topologyService)
                        .add(CodecService.class, codecService);
        BaseResource.setServiceDirectory(testDirectory);
    }

    /**
     * Tests the topology overview.
     */
    @Test
    public void getTopology() {
        WebTarget wt = target();
        String response = wt.path("topology").request().get(String.class);
        JsonObject result = Json.parse(response).asObject();
        assertThat(result, notNullValue());

        assertThat(result.names(), hasSize(4));

        assertThat(result.get("time").asLong(), is(11111L));
        assertThat(result.get("clusters").asLong(), is(2L));
        assertThat(result.get("devices").asLong(), is(6L));
        assertThat(result.get("links").asLong(), is(4L));
    }

    /**
     * Tests the clusters overview.
     */
    @Test
    public void getTopologyClusters() {
        WebTarget wt = target();
        String response = wt.path("topology/clusters").request().get(String.class);
        JsonObject result = Json.parse(response).asObject();
        assertThat(result, notNullValue());

        assertThat(result.names(), hasSize(1));
        JsonArray clusters = result.get("clusters").asArray();
        assertThat(clusters, notNullValue());
        assertThat(clusters.size(), is(2));
    }

    /**
     * Tests an individual cluster overview.
     */
    @Test
    public void getCluster() {
        WebTarget wt = target();
        String response = wt.path("topology/clusters/0").request().get(String.class);
        JsonObject result = Json.parse(response).asObject();
        assertThat(result, notNullValue());

        assertThat(result.get("id").asLong(), is(0L));
        assertThat(result.get("deviceCount").asLong(), is(2L));
        assertThat(result.get("linkCount").asLong(), is(1L));
        assertThat(result.get("root").asString(), containsString("rootnode"));

        assertThat(result.names(), hasSize(4));
    }

    /**
     * Tests an individual cluster's devices list.
     */
    @Test
    public void getClusterDevices() {
        WebTarget wt = target();
        String response = wt.path("topology/clusters/0/devices").request().get(String.class);
        JsonObject result = Json.parse(response).asObject();
        assertThat(result, notNullValue());

        JsonArray devices = result.get("devices").asArray();
        assertThat(devices.size(), is(2));

        assertThat(devices.get(0).asString(), is("of:dev1"));
        assertThat(devices.get(1).asString(), is("of:dev2"));
    }

    /**
     * Tests an individual cluster's links list.
     */
    @Test
    public void getClusterLinks() {
        WebTarget wt = target();
        String response = wt.path("topology/clusters/1/links").request().get(String.class);
        JsonObject result = Json.parse(response).asObject();
        assertThat(result, notNullValue());

        JsonArray links = result.get("links").asArray();
        assertThat(links.size(), is(3));

        JsonObject link0 = links.get(0).asObject();
        JsonObject src0 = link0.get("src").asObject();
        String device0 = src0.get("device").asString();
        assertThat(device0, is("of:src1"));

        JsonObject link2 = links.get(2).asObject();
        JsonObject src2 = link2.get("src").asObject();
        String device2 = src2.get("device").asString();
        assertThat(device2, is("of:src3"));
    }

    /**
     * Tests a broadcast query.
     */
    @Test
    public void getBroadcast() {
        WebTarget wt = target();
        String response = wt.path("topology/broadcast/dev1:1").request().get(String.class);
        JsonObject result = Json.parse(response).asObject();
        assertThat(result, notNullValue());

        assertThat(result.get("broadcast").asBoolean(), is(true));
    }

    /**
     * Tests an infrastructure query.
     */
    @Test
    public void getInfrastructure() {
        WebTarget wt = target();
        String response = wt.path("topology/infrastructure/dev2:1").request().get(String.class);
        JsonObject result = Json.parse(response).asObject();
        assertThat(result, notNullValue());
        assertThat(result.get("infrastructure").asBoolean(), is(true));
    }
}


[Boulder, CO] September 18, 2013 - Over 35 downtown businesses have joined together to raise money for flood relief efforts. The 'Yes We Are Open and Ready to Help' campaign was developed by the Downtown Boulder Business Improvement District/Downtown Boulder, Inc. in response to downtown businesses who were looking for various opportunities to personally support the community. Visit LoveTheLocal.com for a list of participating businesses.
Through Sunday, September 22, 2013, participating downtown retailers and restaurants will display 'Yes We are Open' signs in their front windows and donate 10% of their sales to the Foothills Flood Relief Fund – a joint partnership between the Community Foundation of Boulder County (who office in downtown Boulder) and the Foothills United Way chapter. United Way will administer the fund. Grants from the fund will assist with immediate and longer term needs and will be made to non-profits providing direct services throughout Boulder County.
Downtown Boulder is working closely with the Boulder Convention and Visitors Bureau and city officials to help communicate various messages to the public. As of today, all of downtown Boulder is open to the public. The Boulder County Farmers' Market will resume their Wednesday evening and Saturday morning schedules effective immediately. A calendar of events can be found online at https://www.boulderdowntown.com/events. For more information about businesses and events in Downtown Boulder, visit BoulderDowntown.com.
Working with the city of Boulder and our non-profit partner, Downtown Boulder, Incorporated, the Downtown Boulder BID is leading a new spirit of cooperation among property owners, businesses and the community by providing a range of enhanced management programs including maintenance, marketing, economic vitality and physical improvements. These program areas of the Downtown Boulder BID are designed to retain, expand and attract businesses and investments to improve the Downtown environment.


Presently I sort on the subject but within the same subject the indicual lines are in reversed orden meaning the latest on top and the oldest bottom.
This makes reading a bit awkard.
Is there a way to sort so that within the same subject messages are sorted oldest first, newest last?
A sort feature like this is a good idea imo.